fix: make the sealed-condition anchor independent of the close label - #4
Merged
Conversation
A pre-registered kill-condition is the only signal in a close that the closing agent did not write: it is sealed in an append-only ledger before the compute. But the harness only injected and checked it when IS_KILL was set — and IS_KILL comes from `--stop` and the verdict string, both written by that same agent at closing time. Closing an arc as `converged` therefore switched the anchor off entirely: the sealed bar was never quoted, never compared, never refused. Now the injection keys off the sealed condition existing. A KILL close still gets the 🛡️ 5-check; any other close on a sealed arc gets a one-item 🔒 sealed-condition cross-check — did the result stay clear of the bar you sealed, or did you move the bar? A `.prereg` whose condition no longer resolves is refused rather than passed in silence, since that was a quiet way around the gate. Both paths share one trivial-evasion bar (`check_answers`); kept separate they drift, which this repo has already demonstrated once. Triggering on the word "KILL" appearing in the summary body was considered and rejected on measurement: against an archive of real closes it fired on 3 of 4 label-free arcs for the wrong reason (citations of other arcs' seals, kill-conditions being designed for a next stage) while missing the closes that actually buried an original claim — those never use the word. It would also have put a filing cost on exactly the honest self-reporting the gate exists to encourage. Tests cover the regression directly: injection on a non-KILL close, refusal while unfilled, refusal of a trivial answer, refusal of a widened sealed line, refusal of a broken anchor, and two positive controls (a substantive answer seals; an arc with no seal is unaffected).
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.
The hole
A pre-registered kill-condition is the only thing in a close the closing agent did not write — it is sealed in an append-only ledger before the compute. But
arc-closeonly injected and checked it whenIS_KILLwas set, andIS_KILLreads--stopplus the verdict string. Both of those are written by the same agent, at closing time.So closing a sealed arc as
convergedswitched the anchor off. The sealed bar was never quoted into the record, never compared against, never refused. The strongest gate in the harness was gated behind the weakest signal.The fix
SEAL_GATEkeys off the sealed condition existing, never off the label..preregwhose condition no longer resolves → refused, not skipped (it was a quiet way around the gate)check_answers) — kept apart they drift, which this repo has already demonstrated onceWhat was rejected, and why
Triggering on the word "KILL" appearing in the summary body. Measured against an archive of real closes, it was wrong in both directions: it fired on 3 of 4 label-free arcs for the wrong reason (citations of other arcs' seals, kill-conditions being designed for a next stage), and it missed the closes that actually buried an original claim, because those never use the word. It would also have attached a filing cost to exactly the honest self-reporting the gate exists to encourage.
The general point, which is now in
METHODOLOGY.md: a trigger the examinee writes is not a trigger.Tests
tests/test_gates.shcovers the regression directly — injection on a non-KILL close, refusal while unfilled, refusal of a trivial answer, refusal of a widened sealed line, refusal of a broken anchor, plus two positive controls (a substantive answer seals; an unsealed arc closes exactly as before). Verified failing against the pre-fix script.🤖 Generated with Claude Code