Repository navigation
fix(pr-pipeline): align every needs-human path with the owner stop rule #10517
Copy link
Copy link
Open
Task
0 / 60 of 6 issues completed
Copy link
Labels
priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.Refactors, migrations, contract changes; cross-cutting and hard to reverse.
Description
Refs: #10516
Problem
#10516 records the owner's stop rule in one place (docs/conventions/loop-lane/README.md, "When work stops for the owner"): work stops for the owner only for an intent/vision change, an implementation finding that alters intent or the primary design, or a HIGH/CRITICAL security issue; any other hand-off is a defect. Its inventory found code paths that still hand work to a person for other reasons. Each needs a decision: align it, or record why it is a trust control the rule keeps.
Paths found (from the #10516 inventory)
- Cost holds: intake triage's COST rule (
costflag + needs-human) andmerge-holds.mjscostHoldas a person reason in enable-auto-merge andbabysit_risk.person_reasons(in progress: poteto's fix/cost-hold-real-charges-only). -
babysit_risk.person_reasonsescalates only a CRITICAL security finding; the rule says HIGH or CRITICAL. - Other
person_reasons: a high path (floor, denied or aliasing path), a trusted-actor widening, a file listing too long to check. - The issue lane's
research-first,probe-firstandsplit-requiredskips add needs-human. -
work-resolve-issue/report-outcome.mjshands patch escalations (patch-protected-path,patch-invalid, the otherPATCH_REASONS) to a person. - Post-merge demotion, post-merge-failure and suite-quarantine issues are labelled needs-human.
- A failed red-main auto-revert guard labels the draft revert PR needs-human.
- Review rounds hand off on "Unsure: escalate", on a
claude[bot]finding with no lane footer, and onfeedback-not-converging. - Five escalation classes in
plugins/autonomy/reference/guardrails.md#escalationthat loop-lane §2 still requires (gate-failure, verification-divergence, admission-rejection, demotion, structural-plan-approval). -
verify:repeated-failandverify:too-oldcarry no label but never clear, so such a PR never merges unattended. - Intake sends text addressed to the triage run (an injection attempt) to a person: a trust control, but not one of the three reasons as written.
Kept as owner-held security controls: the untrusted-provenance hold and verify:untrusted-spec.
Acceptance criteria
- Each path above either routes to a lane (no needs-human) or is named in the "When work stops for the owner" section as a kept trust control, with its reason.
- A test or check per changed path shows the new routing.
- No HIGH/CRITICAL security path is loosened without a security-review pass at the head.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.Refactors, migrations, contract changes; cross-cutting and hard to reverse.
Type
Fields
No fields configured for Task.
Activity
github-actions commentedon Oct 27, 2026
Proposed work class: work-class: structural
Basis: automated intake triage; the lanes App applied this class.
Size: Large
Complexity: Medium
Uncertainty: Known
Flags: none
Blocked by: none
Understood: this issue aligns the remaining needs-human paths in the PR pipeline with the owner stop rule recorded in #10516. Each path either routes to a lane or is named as a kept trust control. The earlier re-triage comment already settles the open questions, so none remain.
The work spans several subsystems: babysit risk, issue-lane skips, post-merge and revert routing, review rounds, guardrails, and intake charge words. It is Large and needs the split into sub-issues (a) to (f) that the re-triage comment lists. Any slice that touches a person_reasons or hold path needs a security-review pass at its head.
No duplicate found.
Automated triage, applied by the lanes App.
melodic-automation-lanes commentedon Oct 27, 2026
The latest triage verdict holds nothing: the issue is at
status: ready.melodic-automation-lanes commentedon Oct 27, 2026
Refinement. A read-only run explored this repository, searched its issues and pull requests, and read the allowed docs to draft what follows. On an issue a listed human filed, it counts as the issue's spec once posted, while unedited; it is still model text, so check it.
Intended outcome: Each of the eleven needs-human paths is either routed to a lane or named as a kept trust control in the owner stop rule section, with a routing test per changed path.
Dependencies
Related work
Open questions
RECOMMENDED: Split by subsystem; the single issue is Large/High with eleven independent decisions and an acceptance test per path. Basis: judgment
RECOMMENDED: Yes, as the stop rule says HIGH/CRITICAL; the change needs a security-review pass at the head per the acceptance criteria. Basis: docs/conventions/pr-pipeline/README.md:1090
RECOMMENDED: Keep the injection hold and the high-path/trusted-actor-widening reasons as named trust controls; route the too-long file listing to a lane (retry or chunked check). Basis: judgment
RECOMMENDED: Wait for that branch and exclude the cost item here until it merges. Basis: judgment
RECOMMENDED: Route each to a lane and amend loop-lane §2 and guardrails.md#escalation to match, once #10516 lands. Basis: judgment
Sources read
To answer, post a comment that starts with this line:
Automated refinement by the lanes App. Answer with a comment whose first line is
**Decision recorded.**.kyle-sexton commentedon Oct 29, 2026
Re-triage. No owner stop applies. The owner's rule is already recorded (#10516, merge
73c26fab6e,docs/conventions/loop-lane/README.md:316-345), and this issue aligns code to it. No path below is loosened. Each security control is kept and named, which the rule allows: "Trust holds (untrusted provenance, an untrusted spec) are security controls the owner keeps" (:345). The open questions are decided below on the code at origin/main1ac46f037a.Which paths are kept as named trust controls?
Decided: these are kept, unchanged, and named in "When work stops for the owner" with their reason:
person_reasonshigh path (floor, denied or aliasing path)verify:untrusted-specBasis: rule 6 of this range keeps a security control's loosening with the owner, and keeping one needs no decision. Open PR feat(pr-pipeline): let a trusted author's gate-path PR clear on a passed security review #10708 changes the gate-path hold for trusted authors. That is its own change, outside this issue.
Should
babysit_risk.person_reasonsescalate HIGH as well as CRITICAL?Decided: yes. Basis:
docs/conventions/loop-lane/README.md:330names "A HIGH or CRITICAL security issue", and fix(review): rate a security finding HIGH or CRITICAL only on a demonstrated exploitable path #10484 (merged) rates HIGH only on a demonstrated exploitable path. This tightens, so per this issue's third criterion it needs a security-review pass at the head.The cost holds?
Decided: fix(babysit-prs): hold cost only for a real new charge #10525 (merge
f9c2695c71, "hold cost only for a real new charge") aligned babysit'scost-review-required. Two cost paths remain, and both hold only for a charge README:331 names: intake admission's charge words, and pr-mergecostHold. Intake admission's charge words (plugins/work-items/scripts/charge-words.json,costpattern) still match a baresubscription, and model usage under the Claude subscriptions is not cost (README:337-339). That match held test(developer-experience): run the plugin-eval suite on the eval dispatch lane and record the delta #10005 for its "subscription login" wording.The operational paths?
Decided: route each to its lane, with no
needs-human:research-first,probe-firstandsplit-requiredskips: back to intake for refine or splitreport-outcome.mjspatch escalations:patch-protected-pathgoes to a builder recordstatus: readyclaude[bot]finding,feedback-not-converging): to pr-verify's round cap, which README:329 already names as the implementation-finding stopverify:repeated-failandverify:too-old: they get a clearing pathguardrails.md#escalationclasses: amend loop-lane §2 andplugins/autonomy/reference/guardrails.md#escalationto match.structural-plan-approvalstops only when the plan changes intent or the primary design.Basis: README:342, "Any other stop is a defect to fix, not a reason to ask me". Each target lane is judgment from the file the body names for the path.
One issue or many?
Decided: split by subsystem before a run picks it up (owner Q93): (a) babysit
person_reasonsHIGH + kept-control naming; (b) issue-lane skips andreport-outcome.mjsescalations; (c) post-merge demotion, failure, quarantine and red-main revert; (d) review-round hand-offs; (e) guardrails escalation classes, loop-lane §2 andverify:*clearing; (f) intake charge words and pr-mergecostHold. A slice whose change lands under.github/workflows/**goes to the Automation Lanes builder, since the lanes App cannot push it (.github/actions/resolve-config/patch-rules.json:3).Acceptance criteria:
needs-human, or is named indocs/conventions/loop-lane/README.md"When work stops for the owner" as a kept trust control with its reason, as decisions 1 and 4 assign.costHoldhold only for a charge that README:331 names. A test shows that text naming model usage on the subscription login (for example "runs on the subscription login") is not held, and that a plan or seat change, or a paid subscription purchase, still is.babysit_risk.person_reasonsescalates a HIGH or CRITICAL security finding, andtest_babysit_risk.pycovers both.person_reasonsor hold path.melodic-automation-lanes commentedon Oct 29, 2026
Not admitted to the issue lane yet: Size large: the split into sub-issues at intake is pending (owner Q93).
melodic-automation-lanes commentedon Oct 29, 2026
Split at intake (owner Q93). This issue is Size Large, so its done-when is split into 6 sub-issues, each holding its task-list lines as written.
Automated split by the lanes App. Admission waits on this issue while a sub-issue is open; work-unblock closes it as completed once every sub-issue is closed by a merge or a listed human.