Topology-first enforcement reset (021) + runner reason-code/coverage fix (022) - #4
Merged
E-G-C merged 2 commits intoAug 6, 2026
Conversation
Weave a topology-first reset into the existing review-loop skills (no new persistent artifact): - dude-receiving-code-review: name the three reset triggers and require the planning authority's six-part topology check before the next revision, with the evidence-backed-proceed rule and the ordinary-local-fix exemption. - dude-reviewer-protocol: require the verdict to judge the revised design against the topology evidence, verify claims against current source/call sites, and admit new machinery only with a reachable failure and a test. Pinned by two T021 static contract tests; .github projections regenerated. Full suite green, lint 0/0, additive-only. Also splits the out-of-scope runner reason-code/coverage fix into its own draft idea ledger (runner-reason-code-coverage-fix) per issue Non-Goals. Closes #3
The unattended runner owns its stop and attribution, but two defects broke
that at the host-exchange boundary:
- An untrusted host `exchange` callback could throw an error whose arbitrary
`error.code` became the runner's terminal halt reason. Restrict it to a
frozen runner-owned allow-list {supervisor-context-lost,
challenge-response-invalid, exchange-context-lost}; any other code falls back
to the runner-owned default.
- The orphan fallback row omitted the target it orphaned. Add target to both
orphan() branches (row field only; the evidence-derived haltReport is
unchanged, so Feature 013 T006 A still holds).
Add a regression test (arbitrary error.code cannot leak) and an integration
test driven through the real finish() terminal writer (runner-owned reason +
orphaned target). Full suite green, lint 0/0, additive.
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.
Why
Repeated review cycles can grow a design by accumulating gates, checkpoints, and cross-session state around an assumed enforcement point that no revision rechecks. Issue #3 asks for a topology-first reset that forces the planning authority to re-establish where production behavior is actually controlled before expanding enforcement further.
This PR delivers that reset as workflow guidance (Feature 021), and, dogfooding the very discipline it adds, applies a topology retrace to a small real runtime attribution bug it surfaced (Feature 022).
Feature 021: topology-first reset (guidance, no new artifact)
Woven into the two existing review-loop skills, so it creates no new skill, agent, state, or board:
dude-receiving-code-reviewgains the three reset triggers (a control-boundary concern surviving two review cycles; a revision adding a new gate/store/checkpoint/cross-session state; enforcement expanding across modules or workflow boundaries) and requires the planning authority's six-part topology check before the next revision. Evidence that a mechanism covers an otherwise-uncovered reachable path lets the revision proceed; it is a gate on evidence, not an automatic veto. Ordinary local fixes stay exempt.dude-reviewer-protocolrequires the verdict to judge the revised design against that evidence, verify claims against current source and call sites, and admit new machinery only with a demonstrated reachable failure plus a covering acceptance test.Two
T021static contract pins lock the prose;.github/projections are regenerated fromsrc/.Feature 022: runner reason-code and coverage fix
Retracing the real call graph
runHostAdapter -> exchange -> orphan -> finish(the single terminal "safety writer") exposed two narrow defects at the untrusted host boundary:exchangecallback could throw an error whose arbitraryerror.codebecame the runner's terminal halt reason. It is now restricted to a frozen runner-owned allow-list (supervisor-context-lost,challenge-response-invalid,exchange-context-lost); any other code falls back to the runner-owned default. Legitimate codes still pass through.targetis now added to bothorphan()branches. It is a row field only, so the evidence-derivedhaltReportis unchanged and Feature 013's contract holds.Coverage: a regression test proving an arbitrary
error.codecannot leak, and an integration test driven through the realfinish()writer asserting a runner-owned reason plus the orphaned target. The production path was reachable, so these are genuine tests rather than a fabricated fixture.Notes for reviewers
dude-lint0 warnings / 0 failures,src/and.github/projections byte-identical.targetonly to orphan fallbacks, not therunner-refusedpre-binding terminal (target may be unbound there). Each new contract pin and each new test was mutation-tested (revert the change, confirm the guard fails).Fixes: #3