Repository navigation
docs(loop-lane): route the five guardrail escalation classes to lanes and name the intake injection hold - #13021
Conversation
Lane-Activity: work-resolve-issue/resolve-issue
Lane-Activity: pr-unblock/address-feedback Lane-Thread: PRRT_kwDOTCGFQM6zXKJr
…nclaimed-item backstop Replaces the "separate work" note on the post-merge demotion alert with the record rules #11022 set: canary, revert and read-back records keep needs-human only until they lift, and an issue intake did not receive gets it because no lane retries that delivery. A lane-route escalation item that no lane claims within the staleness window now re-escalates once to intake, one severity level up, so a stopped or unpolled lane cannot hold a failed gate unseen. Refs: #11024 Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01MWmASPDSoP4Ps23JPiGyZV
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
claude-security-review reviewed Security review: no security issues foundI read every hunk of all 7 changed files in
The seventh is What I checked
Owner friction hold narrowed (throughput phase, not a finding): the contract text in critical-findings: 0 |
|
claude-review reviewed Code review: #13021 at
|
…ads Flags: none The existing escalated fixture has no Flags line, so it never reached the refusal candidates. This one carries Flags: none and every dimension, the shape the loop-lane README describes, and asserts needs-human stays. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01MWmASPDSoP4Ps23JPiGyZV
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Refs: #11024
Replaces #12968.
Summary
Part 6 of #10517. The guardrail escalation contract (
plugins/autonomy/reference/guardrails.md#escalation) gains a "Stops for a person" column and a stop rule:gate-failure,verification-divergenceanddemotiongo to the lane that owns the follow-up, an auditedadmission-rejectionstays final on the audit trail,structural-plan-approvalstops only when the plan changes intent or the primary design, anduntrusted-provenancestill always stops. Loop-lane §2 is amended to match, and "When work stops for the owner" names intake's hold on text addressed to the triage run as a kept trust control, with its reason; that hold's behavior is unchanged.This carries #12968's change (head
92b6dcc1, merged in unchanged) plus fixes for its open review threads.Fix
From #12968:
plugins/autonomy/reference/guardrails.md: "Stops for a person" column, stop rule, routing obligation and mechanism; matrix escalation cells for C2 to C4 read "owning lane".plugins/autonomy/reference/guardrails/verification-topology.md: a dissent raisesverification-divergence, routed by the stop rule.plugins/autonomy/reference/runner/escalation.md:gate-failedfiles on thegate-failureroute; fan-out reaches people only on a human-gated item.docs/contracts/loop-lane/README.mdandCHANGELOG.md(17.0.0, major per the file's bump rule)..github/scripts/intake-triage/apply-verdict.test.mjs: the escalated-run test also asserts the kept injection hold is not refused.New in this PR:
docs/contracts/loop-lane/README.md§2: the "aligning those records is separate work" note is replaced by the post-merge demotion alert's record rules as fix\(pr-pipeline\): align every needs-human path with the owner stop rule - part 4 of 6 #11022 set them (merged in feat(source-control): lift canary, revert and read-back demotion records on lane evidence #12905): a red-main record carries no label and clears on a later green main; a canary, revert or read-back record keepsneeds-humanonly until it lifts on its own lane-verifiable condition; and a fix or quarantine issue intake did not receive, or a red-main record whose failing check got no fix issue, getsneeds-humanbecause no lane retries that delivery. The CHANGELOG 17.0.0 entry says the same.plugins/autonomy/reference/runner/escalation.md: a lane-route item no lane claims within the staleness window re-escalates once as a new signal to intake, one severity level up, so a disabled, stopped or unpolled lane cannot hold a failed gate unseen. Intake's own rules decide whether it stops for a person, so the backstop adds noneeds-humanoutside the stop rule. The changelog fragment says so.Verification
node --test .github/scripts/intake-triage/apply-verdict.test.mjs: 232 passed, 0 failed (the kept injection hold still stops for a person).scripts/check-changelog-fragments.sh --check: all 39 fragments valid.scripts/check-affected.sh: 12 passed, 3 skipped over 7 changed files..github/scripts/post-merge-demotion-alert/workflow.test.mjs,scripts/post-merge-demotion-alert.test.sh,test_babysit_lift.py,test_babysit_merge_policy.py,test_babysit_postmerge.py).check-security-binding.mjsvalidates, and no script appliesneeds-humanfrom these class names (git grepover*.mjs,*.py,*.sh). No test was added for them, since it could only assert the markdown text.92b6dcc1reported 0 findings.Remaining
Issue 11024 stays open after this merges; two of its done-when items remain:
gate-failure,verification-divergence,admission-rejectionandstructural-plan-approvalis contract text only. No script routes on these class names yet, so there is no executable test of their routing. fix\(pr-pipeline\): align every needs-human path with the owner stop rule - part 6 of 6 #11024 stays open until a router and its test exist.needs-humanwhen a fix or quarantine issue cannot be handed to intake. That is not one of the owner stop reasons; fix(pr-pipeline): retry a failed intake hand-off in the demotion alert instead of labeling needs-human #13022 tracks the fix, and this PR's README text describes the current behavior, not a kept control.Related
🤖 Generated with Claude Code
https://claude.ai/code/session_01MWmASPDSoP4Ps23JPiGyZV