You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
chore(pr-pipeline): decide code-owner review on .github/** and verify the ci-status lanes hold step's runner tools #9422
ci-status's step Fail a lanes App pull request its body or a member holds (pr-require-checks.yml) is what stops an already-armed lanes App pull request when a hold appears. On pull_request and merge_group it runs from the pull request's own workflow file, so a push that edits that step could remove the check. The current mitigation: the melodic-automation-lanes App installation has no workflows permission (only contents: write), so it cannot push changes under .github/workflows. Also, apply-patch refuses .github/workflows paths as protected-path. Two gaps remain:
Owner's call: require code-owner or ruleset review on .github/**, so the guard does not rest on the App's permission set alone. Options: a CODEOWNERS entry with a ruleset requiring code-owner review; a ruleset path restriction on .github/** for the lanes App; or keep the permission-based mitigation.
Unverified: the ci-status job has no setup-node. The step uses the runner image's node, which needs path.matchesGlob (Node 20.17+/22.5+), and yq. If either is missing, the step fails closed on every lanes App pull request. It does not fail open. Check the first lanes App pull request's ci-status log after feat(pr-pipeline): arm native auto-merge for lane pull requests #9399 merges, or pin the tools in the job.
Acceptance
The owner decides on item 1 and records the decision.
A lanes App pull request's ci-status log shows the hold step reaching its verdict line, or the job pins node and yq.
Decision recorded. The owner answered in the Issue Triage session (2026-10-25), accepting the recommended answers below:
go with whatever the facts/data/metrics + /discovery:research says and ensure we're aligned with SOLID, DRY/SSOT principles
AND whatever is aligned with my overall goal of lowest friction, highest throughput (within our environmental, github, rate limit, etc. constraints)
Question asked: Keep the permission-based mitigation without required code-owner review on .github/** (security call)?
Standing rule: none found on this issue. No owner decision record or owner-approved body text answers item 1; the body names it the owner's call. No intake refinement exists; triage handed the issue to a maintainer. Open items are the body's two gaps.
Require code-owner or ruleset review on .github/**, or keep the permission-based mitigation? Security call.
Accepted: Keep the permission-based mitigation (the lanes App has no workflows permission, and apply-patch refuses .github/workflows paths). CODEOWNERS on main already requests owner review on /.github/workflows/** and says required code-owner review is off by owner decision. Basis: origin/main .github/CODEOWNERS:1-5,22. That file text is not a decision record on this issue, so the owner confirms here.
The ci-status job's hold step needs node with path.matchesGlob and yq.
Accepted: The Node half is done: ci-status now sets up Node from the base .node-version on pull_request and merge_group, the events the hold step runs on. yq still comes from the runner image; read one lanes App PR's ci-status log for the hold step's verdict line, or pin yq in the job. Basis: .github/workflows/pr-require-checks.yml:3705-3709 (setup-node in the ci-status job, which starts at :3106), :4746 (yq use). Correction to the body: its "no setup-node" no longer holds on main.
Acceptance criteria:
The ci-status job sets up Node before the hold step on pull_request and merge_group.
Checks a person runs:
None for item 1: this record decides it.
A lanes App pull request's ci-status log shows the hold step reaching its verdict line, or the job pins yq. (From the body's Acceptance, narrowed to yq.)
Verified, closing as done. The person check holds: on lanes App PR #10123, ci-status (run https://github.com/melodic-software/claude-code-plugins/actions/runs/40235200462, job 121296674087) ran step 8 Set up Node and step 15 Fail a lanes App pull request its body or a member holds, both success, so the hold step reached its verdict with the runner image's yq. Item 1 keeps the existing mitigation, which matches .github/CODEOWNERS:22.
Released for re-triage under the owner's 2026-10-26 rule: a person is involved only for "1. A change in original intent/vision 2. Something comes up during implementation ... that alters intent/vision or the primary design 3. If there is a HIGH/CRITICAL security issue". None applies here, so the hold label came off and intake triage runs again now.
To hold this issue again, add needs-human (or status: needs-decision) and name which of the three applies.
Activity
github-actions commentedon Oct 23, 2026
Proposed work class: none
Thanks for the report. Automated triage handed this issue to a maintainer.
Automated triage. A maintainer reviews it.
kyle-sexton commentedon Oct 26, 2026
Decision recorded. The owner answered in the Issue Triage session (2026-10-25), accepting the recommended answers below:
Question asked: Keep the permission-based mitigation without required code-owner review on
.github/**(security call)?Standing rule: none found on this issue. No owner decision record or owner-approved body text answers item 1; the body names it the owner's call. No intake refinement exists; triage handed the issue to a maintainer. Open items are the body's two gaps.
.github/**, or keep the permission-based mitigation? Security call.Accepted: Keep the permission-based mitigation (the lanes App has no
workflowspermission, and apply-patch refuses.github/workflowspaths). CODEOWNERS on main already requests owner review on/.github/workflows/**and says required code-owner review is off by owner decision. Basis: origin/main.github/CODEOWNERS:1-5,22. That file text is not a decision record on this issue, so the owner confirms here.nodewithpath.matchesGlobandyq.Accepted: The Node half is done: ci-status now sets up Node from the base
.node-versiononpull_requestandmerge_group, the events the hold step runs on.yqstill comes from the runner image; read one lanes App PR's ci-status log for the hold step's verdict line, or pinyqin the job. Basis:.github/workflows/pr-require-checks.yml:3705-3709(setup-node in the ci-status job, which starts at:3106),:4746(yquse). Correction to the body: its "nosetup-node" no longer holds on main.Acceptance criteria:
pull_requestandmerge_group.Checks a person runs:
yq. (From the body's Acceptance, narrowed toyq.)Verified, closing as done. The person check holds: on lanes App PR #10123, ci-status (run https://github.com/melodic-software/claude-code-plugins/actions/runs/40235200462, job 121296674087) ran step 8
Set up Nodeand step 15Fail a lanes App pull request its body or a member holds, bothsuccess, so the hold step reached its verdict with the runner image'syq. Item 1 keeps the existing mitigation, which matches.github/CODEOWNERS:22.kyle-sexton commentedon Oct 26, 2026
Released for re-triage under the owner's 2026-10-26 rule: a person is involved only for "1. A change in original intent/vision 2. Something comes up during implementation ... that alters intent/vision or the primary design 3. If there is a HIGH/CRITICAL security issue". None applies here, so the hold label came off and intake triage runs again now.
To hold this issue again, add
needs-human(orstatus: needs-decision) and name which of the three applies.