Repository navigation
v0.82 CLOSEARM lane (#1484): the conjunction two gates never read, and a population of 32 - #1486
Merged
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
…d a population of 32 R14. An artifact whose `verified-by:` opens with an INCOMPLETE verdict while its status CLAIMS the outcome holds must DECLARE what that means for its issue — `issue-scope: closes` or `issue-scope: outlives` — in the field the closure gate already reads. WHY A DECLARATION AND NOT `outlives`. R11 reds a non-delivery `disposition:` beside a claiming status; R3 reds a non-claiming status whose done-when evidence exists. So for a lane that did real work and refuted its own premise, claiming + prose-only refutation + NO disposition is the FORCED configuration — there is no legal third option. Demanding `outlives` would have reddened RQ-77-PROSEBLIND, whose `verified-by` opens REFUTED and whose issue IS resolved (it is closed; the refutation shipped in v0.69). R3 and R11 are untouched; what changes is that the ISSUE's fate becomes structural instead of inferable only by reading English. PAIRED CONTROLS, both directions, each killing its own mutant: * rule forced False -> kills the two red-first tests * `not _iscope14` dropped -> kills the two green-path tests * as shipped -> 7/7 OK, live gate rc=0 Red-first on real data: reds RQ-77-PROSEBLIND, and reds BOTH v0.81 artifacts when their `outlives` is stripped, which is exactly the near-miss an operator caught by hand. THE VOCABULARY IS IMPORTED, NOT MIRRORED. `INCOMPLETE` and `leading_verdict` come from `verdict_prose_check` under an `assertIs` — identity, not equality, because an equal-but-separate set passes today and drifts tomorrow. A local copy of the verdict sets would be the #667 defect one tier down. Asserted: zero `INCOMPLETE = {` literals in the gate. RQ-77-PROSEBLIND gains `issue-scope: closes` — the truthful value, and the first `closes` beside a claiming status (the one existing precedent is `proposed` + `disposition: refuted`, a different shape, so R12's body was read before the field was added rather than after a red). VALUELESSKEY's POPULATION DERIVED (#1458), with `ast` and not a grep: 32 sites of `str(<expr>.get(...))` in scripts/, of which 14 read a YAML artifact field (the live class), 13 read API JSON, 2 are test fixtures; 11 of the 32 sit in `status_evidence_check.py` itself, two of them in R12's own path where a bare `issue-scope:` becomes the invented string "none". The artifact records that its own `git grep` refuting command UNDERCOUNTS the class, and that R14 is NOT in the population because it writes `or ""` before `str()`. Also: CLOSEARM's refuting command re-pointed at `verdict_prose_check` (the wrong module raises AttributeError, the good failure) and its done-when corrected after the design changed; two module docstrings made raw, clearing the last two SyntaxWarnings in scripts/ (invalid escapes that become SyntaxError in a future Python), census re-run to 0 with a planted control proving the detector still fires. AND THE SQUASH SIMULATION CAUGHT THIS ARTIFACT CLAIMING NOTHING. CHECK4 reddened with `R4-lane RQ-82-CLOSEARM: delivery commit on main ... but status is proposed and landed: does not acknowledge it`, and the merge was correctly blocked. Nothing on the branch could have found it: the window gate walks --first-parent from the MERGE commit, so a PR's own commits are invisible while it is still a PR. So the artifact now CLAIMS, and R14 judges its own artifact. Flipping to a claiming status to satisfy R4-lane also arms the closer for #1484 — this release's own theme, landing on the lane that fixes it. The difference from v0.81's near-miss is that the claim is TRUE, so it is made plainly: `status: implemented`, a `landed:` record naming this PR, and a `verified-by` whose leading verdict is DELIVERED. Had it hedged with PARTIAL or PENDING, R14 would have reddened this very artifact unless it declared an `issue-scope:` — verified by deriving `leading_verdict(...) in INCOMPLETE == False`. No `disposition:` (R11 forbids it beside a claiming status) and no `issue-scope:` (unnecessary with a COMPLETE lead). All 20 CI-invoked test scripts pass in CI's exact invocation form. Refs #1484 #1458 #1319 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
avrabe
force-pushed
the
lane/v0.82-closearm
branch
from
October 7, 2026 23:53
e1cf553 to
7d89beb
Compare
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.
R14 — the conjunction two gates never read
status: implementedis simultaneously R3's only remedy for "the status under-reportsshipped work" and
authorised_close_set's permission to retire the issue. v0.81'sJESSDIVERGE3andWIDEFILE4each delivered a refutation, said so in their ownverified-by, and were set claiming for R3's sake — which silently placed an externallyreported live blocker in the authorised close set. An operator caught it by running the
closure gate before tagging. No gate did.
R14 now reds an artifact whose
verified-by:opens with an INCOMPLETE verdict while itsstatus claims the outcome holds and no
issue-scope:is declared at all.Why a declaration, not
outlivesR11 reds a non-delivery
disposition:beside a claiming status. R3 reds a non-claimingstatus whose done-when evidence exists. So for a lane that did real work and refuted its own
premise, claiming + prose-only refutation + no disposition is the forced configuration —
there is no legal third option. Demanding
outliveswould redRQ-77-PROSEBLIND, whoseverified-byopens REFUTED and whose issue is genuinely resolved. Either value satisfiesR14; what it forbids is leaving the issue's fate inferable only from English.
R3 and R11 are unchanged.
Potency — paired mutants, both directions
Falsenot _iscope14dropped (over-fires)On real data R14 reds
RQ-77-PROSEBLIND, and reds both v0.81 artifacts when theiroutlivesis stripped — the near-miss, reproduced.The vocabulary is imported, not mirrored
INCOMPLETEandleading_verdictcome fromverdict_prose_checkunder anassertIs—identity, not equality, because an equal-but-separate set passes today and drifts tomorrow.
A second copy of the verdict sets would be the #667 defect one tier down. Asserted: zero
INCOMPLETE = {literals in the gate.RQ-77-PROSEBLINDgainsissue-scope: closes, the truthful value and the firstclosesbeside a claiming status — so R12's body was read before adding the field, not after a red.
VALUELESSKEY: the population, derived (#1458)
With
ast, not a grep — because the artifact's owngit grep 'str(fields.get('undercountsthe class it scopes, missing
str(art.get(,str(a.get(,str(fl.get(and the tuple form:11 of the 32 sit in
status_evidence_check.pyitself, two in R12's own path where a bareissue-scope:becomes the invented string"none". R14 is not in the population — itwrites
or ""beforestr(), verified by re-running the census after it landed. The lane'sdeliverable is a derivation plus a tripwire, not a 32-site sweep.
Also
Two module docstrings made raw, clearing the last two
SyntaxWarnings inscripts/(invalid escapes that become
SyntaxErrorin a future Python); census re-run to 0 with aplanted control proving the detector still fires. CLOSEARM's refuting command re-pointed at
the right module, and its
done-whencorrected after the design changed.All 20 CI-invoked test scripts pass in CI's exact invocation form.
Refs #1484 #1458 #1319
🤖 Generated with Claude Code
https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L