feat(gate): --supersedes — a correction points at the request it replaces - #462
Merged
Merged
Conversation
…aces Principle 04 has described this shape since it was written: "a correction is a new record that references the old — which preserves the trail of thinking, not just the latest conclusion." The `ctx` passage shipped `ctx supersede`; `gate` never had the equivalent, so corrections lived in `action` prose. Measured against a 2213-record content_root: 445 requests (20.1%) use correction wording, 67 (3.0%) name an older id in prose that no reader can traverse mechanically. That is principle 17 — a restatement bound to nothing. A flag, not a verb. `ctx` could afford a verb because it has one record-creating shape; `gate` has two entry points (`request` and `fast-track`), and a correction-only verb would leave the other unable to correct anything. A flag on an existing verb also inherits its principle 13 shape rather than requiring a new classification. Forward-only. The correcting record carries the link; the superseded record is never mutated, and there is no inverse `superseded_by` field — writing one would mean amending an immutable record. Both stay in the ledger. Validated at the write boundary, before the new id is allocated: a target that does not resolve is refused, so a bad link never leaves a half-written record behind. Self-supersession is rejected in the domain. `chain` had to learn the field. Corrections used to name the older id in `action` text, which `gatherRequestText` picked up for free; moving that mention into a structured field would otherwise have made `chain` blind to exactly the links the field exists to make traversable — more precise and less reachable at the same time. `source_agora_play` has the same gap today, so this one is closed at introduction rather than later. Not included: any taxonomy of correction kinds (`--reason` carries it), and surfacing corrections from `gate show <old-id>` — the inverse lookup costs a full scan, measured at 0.11s versus 0.91s on the same root, and belongs on `chain`, which now resolves it. Tests: 1954 -> 1962 (+8). Failing set identical to the branch point in both directions (26 pre-existing). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HbrpT13G92kRawJXZuzH49
This was referenced Sep 3, 2026
Merged
nao-amj
added a commit
that referenced
this pull request
Sep 3, 2026
Collects the 19 fragments accumulated since 0.7.2 into a versioned block and syncs package.json / package-lock.json. Minor rather than patch: `Request` is on the stable surface enumerated in docs/POLICY.md, and #462 added an optional `supersedes` field to it. The policy requires a minor bump *and a migration note* for that layer, so the block opens with a Migration section — the change is additive and needs no action, but the note has to exist for the bump to be legible. Highlights: --supersedes on gate request / fast-track (#462), the ROM envelope work (#456-#458), principle 17 (#455), the observations store, and the stdin sentinel fixes. Claude-Session: https://claude.ai/code/session_01HbrpT13G92kRawJXZuzH49 Co-authored-by: eris-ths <255252906+eris-ths@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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.
What
--supersedes <id>ongate requestandgate fast-track: a forward-only link from a correcting request to the older one it corrects.gate showrenderssupersedes:above the action, andgate chain <old-id>now resolves forward to the correction.Why
Principle 04 has described this shape since it was written — "a correction is a new record that references the old, which preserves the trail of thinking, not just the latest conclusion." The
ctxpassage shippedctx supersede;gatenever had the equivalent, so corrections lived inactionprose.Measured against a 2213-record content_root:
Those 67 are principle 17's failure mode: a restatement bound to nothing. This PR binds them to structure going forward. It does not backfill.
Design decisions
A flag, not a verb.
ctxcould afford a verb because it has one record-creating shape.gatehas two entry points, and a correction-only verb would leave the other unable to correct anything. A flag on an existing verb also inherits its principle 13 shape instead of requiring a new classification.Forward-only. The correcting record carries the link. The superseded record is never mutated and there is no inverse
superseded_by— writing one would mean amending an immutable record. Both stay in the ledger.Validated before allocation. A target that does not resolve is refused at the write boundary before the new id is allocated, so a bad link never leaves a half-written record behind. Self-supersession is rejected in the domain.
chainlearns the field. Corrections used to name the older id inactiontext, whichgatherRequestTextpicked up for free. Moving that mention into a structured field would otherwise have madechainblind to exactly the links the field exists to make traversable — more precise and less reachable at the same time.source_agora_playhas that gap today; this one is closed at introduction.Not included
--reasoncarries which shape applies (claim wrong / grounds wrong but judgment stands / addendum / withdrawal).gate show <old-id>. The inverse lookup costs a full scan: 0.11s versus 0.91s on the same root, an 8.3x difference. It belongs onchain, which now resolves it.Verification
npm test: 1954 → 1962 (+8). Failing set identical to the branch point in both directions (26 pre-existing onmain).KNOWN_FLAGS↔schema.input.propertiesdrift detector green; the doc-sync guard required and received thedocs/plugin-schema.mdrow.gate chain <old-id>traverses to it.5195a5f.🤖 Generated with Claude Code
https://claude.ai/code/session_01HbrpT13G92kRawJXZuzH49