chore(release): 0.8.0 - #28
Merged
Merged
Conversation
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cuts 0.8.0 for the progression gates (#27).
A milestone earned by dying is not evidence of skill.
measureProgressionsreplays the reference and every baseline, recording each numeric channel's rises, falls and initial value. A milestone is attrition when three measured statements hold: its check reads a numeric channel, that channel never rose and fell at least once across every trajectory, and the check does not hold at the channel's initial value. Attrition propagates throughrequires.scoreAchievementsdrops attrition from numerator and denominator.No name list — the classification is measured. A fixture channel deliberately named
livesthat counts rescued divers and only rises is classified an achievement, and that is a test.Calibration is no longer optional.
PackagedContract.calibrateis the only way to build one — private constructor plus a#privatebrand, sonewis unavailable and an object literal is not assignable. A deliberately non-separating fixture declares itself with a sentence, not a switch.report.collapsenames the milestone the largest share of a contract requires, whether a trivial baseline reaches it, and how many milestones first pass at the same reference input.What the audit found across the packaged set: five of eight contracts do not separate a real player from a trivial one, seven of eight collapse to a single prerequisite, and both attrition milestones in the set were listed as separating before this change — two contracts were advertising a point for dying as discriminating power.
Motivating measurement, ALE Breakout, hand-written controls, seed 0, replay-attested: a RAM steerer scores 9 game points at 300 decisions and 24 at 600 with all five lives intact and earns 3 of 6, while an ASCII steerer scores 6 and 16, dies, and earns 4 of 6. Under achievement-only scoring the inversion is gone.
Adapters are untouched: zero files under
adapters/edited, no reference JSON changed, every contract keeps its bytes and its pinned hash.