Repository navigation
feat(pr-pipeline): answer lane review threads on owner-login PRs from the lanes App - #10848
Conversation
… the lanes App address-feedback now also serves an adopted owner PR (a kind: human trusted actor's, under the adoption section, idle for adoption.idle-hours with no Hold: line), so its replies post as the lanes App and the babysit worker tier can resolve the outdated threads a lane answered. On such a PR publish-feedback leaves answered threads open, and the select job leaves a person's thread with no stop. Refs: #10763 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner PRs join only the sweep's idle pass, which reads the head's address-feedback check runs before any other read. The select job's no-stop skip is limited to PRs a User opened. Comments in pr-pipeline.yaml and pr-unblock.yml name owner PRs. Refs: #10763 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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. |
|
The pr-verify verifier failed head This pull request leaves the merge queue, and ci-status holds it out while it carries |
|
claude-security-review reviewed No security findings. I read the full diff and PR context. I also read the surrounding code that consumes the changed pieces: What the change widens. Owner PRs now get Who passes.
An unreadable section returns Idle and What stays unchanged:
Resolve behaviour. Merge holds. Skipping Residual notes, not findings:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ff18491fde
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
claude-review reviewed No findings. I read the full diff and the PR context, then followed the changed paths into What I checked
Spend: more address-feedback rounds, which use prepaid and subscription credit only. No billing change, so no hold. Trusted paths. Several matched globs ( Not verified: the PR itself says it did not test whether the external lanes token broker's |
Lane-Activity: pr-unblock/fix-ci
…report owner-PR adjudications as left open The select job's no-stop skip read any User-opened PR as an owner PR, so a hand-dispatched round on another person's PR lost its feedback-untaken-threads stop. It now uses ownerAuthored with the base adoption section, moved into address-feedback.mjs so dispatch and select share one predicate. On a PR the lanes App did not open, the resolve stand-in returns LEFT_OPEN, and settleDisputes logs an adjudicator-closed thread as left open for the person instead of resolved. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… sweep An adopted owner PR whose feedback round escalated kept its failing pr-unblock/address-feedback status after the owner resolved every thread without pushing: owner PRs were left out of the stale-stop recovery, and the idle pass ignored a non-releasing round. sweepIdleOwner now runs that recovery for a head with a round, and sweepStale applies ownerSkip's Hold: and idle gates to an owner PR. An idle owner head with no round re-paid about six reads every tick when the dispatch skipped. The idle pass now decides such a head only within IDLE_OWNER_WINDOW_HOURS (two hours, four ticks) of the PR turning idle; past it the head costs one check-run read, and any new update opens the window again. The stale recovery takes no window, since resolving a thread may not move the update time. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
I'm arming at A fresh independent security review at this head found no CRITICAL, HIGH or IMPORTANT finding. On every automatic path, the adoption and idle gates hold:
It raised two LOW gaps, which I'll harden in a follow-up PR:
The route matches the decision recorded on #10763. |
Post-merge mutation testingKilled 0, survived 0, timeout 0, no coverage 0, invalid 0, not run 7.
The run's summary has the full report. |
Refs: #10763
Hold paths: this changes enforcement-class floor scripts (
.github/scripts/pr-unblock/address-feedback.mjs,publish-feedback.mjs,feedback-dispatch.mjs,fix-ci-dispatch.mjs), the trust-classdocs/conventions/pr-pipeline.yaml(comments only) and.github/workflows/pr-unblock.yml(a comment only). It also changes what the lanes do unattended on PRs the owner opened, so the owner decides the merge.Summary
Agent sessions answer review threads under the owner's login, so on an owner-login PR no lane answer is visible and #10841's worker tier, which resolves only outdated threads a lane login answered, resolves nothing. This PR lets the pr-unblock
address-feedbackround, which already posts as the lanes App, serve adopted owner PRs too. Its replies then mark lane answers, and the worker tier can resolve them.Which config gates owner PRs: the existing
adoptionsection ofdocs/conventions/pr-pipeline.yaml(itsidle-hours) plus thekind: humanentries of.github/standards/trusted-actors/trusted-actors.json, both read at the base. That is fix-ci's adoption rule. No new key, no hard-coded login.New powers on owner PRs: the lanes App now posts review replies, round markers and adjudication replies on an idle adopted owner PR, and
apply-feedback-patchpushes review fixes there under the same patch rules as on App PRs. Pushing fix commits to an idle adopted owner PR is the grant fix-ci already uses (README, Adoption), under the same idle rule, so no permission, token or broker grant is added. I kept the push because a replies-only round would end every VALID answerfeedback-not-landed:publish-feedbackrequires the lane's fix commit. The lane resolves no thread on an owner PR and merges nothing.Fix
feedback-dispatch.mjs:ownerAuthoredadmits a PR whose author is aUserwith akind: humantrusted id under anadoptionsection.ownerSkipthen requires noHold:body line and bothupdated_atand the head commit's committer date at leastidle-hoursold. On an owner PR only a thread the select job keeps dispatches. Pass-only rounds stay App-only. A review usually completes while the session is active, so the tick's sweep gains an idle-owner pass: it skips on the listing'supdated_atwith no read and otherwise spends one check-run read. A head with no round goes todispatchAtHead(about six reads) only withinIDLE_OWNER_WINDOW_HOURS(2 h, four ticks) of the PR turning idle; past that it costs the one read, and any new update reopens the window. A head with a round spends a reply check-run read and a status read, and a failingpr-unblock/address-feedbackstop with no unresolved thread is dispatched to clear it (sweepStale, under the owner'sHold:and idle gates, with no window).ownerAdoptionreads the base section; an unreadable one serves no owner, and App PRs proceed.address-feedback.mjsselect: on a PR aUseropened, an unresolved thread the lane does not take (one the person wrote, answered, or a lane answer left open) skipsnot-applicablewith no stop, instead of escalatingfeedback-untaken-threads.publish-feedback.mjs: on a PR the lanes App did not open, read throughgetPull, a VALID reply and a lane adjudication post, and the thread is left open and logged. That case is not counted asfeedback-partial.needsPerson,settleDisputes). App PRs take the same path as before.pr-pipeline.yamlandpr-unblock.ymlnow say this. Changelog fragment under.changes/pr-pipeline/.Verification
node --test .github/scripts/pr-unblock/*.test.mjs: 959 pass..github/scripts/pr-merge/*.test.mjsand.github/actions/resolve-config/*.test.mjsalso pass (2345 across the three suites).actionlintis clean onpr-unblock.yml, and markdownlint is clean on the README.feedback-untaken-threads. All existing tests pass unchanged.Bot, a PR with no adoption section, an active PR, an unreadable date, aHold:line, and a pass-only round to an owner PR.Hold:line, a recent head commit or an open thread.publish-artifactandmutate-branchgrants work on a person-opened PR is UNVERIFIED. The broker is external. The trigger gate needs only a listed author (check-trusted-trigger README, Author), and fix-ci's adopted rounds already push there.pullsForCommitfalls back to GraphQL, the PR has noupdated_atorbody. An owner PR then fails the idle test closed, and the tick's REST listing picks it up later.Related
babysit_lane_loginsmust namemelodic-automation-lanesand a worker-tier loop must run. ADR 0039 keeps that key in user scope, so this PR does not set it indocs/conventions/source-control.yaml.🤖 Generated with Claude Code