Skip to content

feat(pr-pipeline): let the lane resolve answered non-CRITICAL bot threads on owner-login PRs #12634

Description

@kyle-sexton

Refs: #12284

Problem

Row 15 of the #12284 findings: main's ruleset sets required_review_thread_resolution: true, so an unresolved review thread blocks a merge. On pull requests opened from the owner's login, the owner resolved about 30 bot threads across 16 PRs in 23 hours on 10-27/28 (touchpoint audit T4, not re-measured). Each of those is a manual step that stops a PR the lanes have already answered.

Fix

Let the lane that settles bot review threads (pr-unblock / publish-feedback) also resolve them on owner-login pull requests when the thread is outdated or answered and its finding is not CRITICAL. Leave CRITICAL findings and every human-authored thread to a person.

Done when

  • On an owner-login pull request, the lane resolves a bot thread that is outdated or answered and not CRITICAL.
  • A CRITICAL bot finding and any human-authored thread stay unresolved by the lane; a test covers both.
  • Owner thread resolves per day are measured for 7 days before and after, and posted here.

Filed by the issue-triage session from #12284's findings.

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 3, 2026
  2. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Small
    Complexity: Low
    Uncertainty: Known
    Flags: none
    Blocked by: none

    Decision recorded.
    Agent choice, not an owner answer.
    What is left goes to the host queue (host-run): two observations that can only be made after the merge.
    Written by the Issue Triage session from the issue history, the body of #12893 and origin/main.

    Delivered by 53e1db0 (#12893), against the criteria as amended at 16:10Z and confirmed at 19:05Z:
    [quote truncated; the full decision is at the link]

    #12634 (comment)

    I read this as: let the lane resolve answered or outdated non-CRITICAL bot threads on owner-login PRs. The recorded decision says the implementation and its tests landed in #12893. It settles the open questions. Two observations remain: a live run of the resolve job, and the 7-day after-window measurement of owner thread resolves. Both need a host, so they stay in the host-run queue. No duplicates found.

    Automated triage, applied by the lanes App.

  3. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 3, 2026
  4. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    on Nov 3, 2026
  5. added
    admission-deferredAdmitted but waiting for WIP room; the hourly work-unblock sweep labels it agent-ready.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    admission-deferredAdmitted but waiting for WIP room; the hourly work-unblock sweep labels it agent-ready.
    on Nov 3, 2026
  6. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor
    No description provided.
  7. github-actions commented on Nov 3, 2026

    @github-actions
    Contributor
    No description provided.
  8. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Nov 3, 2026
  9. 31 remaining items

  10. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Decision recorded.
    Agent choice, not an owner answer.
    What is left goes to the host queue (host-run): two observations that can only be made after the merge.
    Written by the Issue Triage session from the issue history, the body of #12893 and origin/main.

    Delivered by 53e1db0 (#12893), against the criteria as amended at 16:10Z and confirmed at 19:05Z:

    • A resolve-feedback-threads job in .github/workflows/pr-unblock.yml that checks out only the trusted base with persist-credentials: false, never the PR head, runs no model step, and is the only job holding the added mutate-branch write; publish-feedback keeps its publish-artifact grant and job permissions: met, covered by callers.test.mjs and live-config.test.mjs per the PR's Verification table.
    • A CRITICAL bot finding and any human-authored thread stay unresolved, and resolve-threads.test.mjs covers both: met.
    • The probe of the permissions resolveReviewThread needs is posted here (17:29Z: contents: write alone): met.
    • The before-window baseline is posted (17:33Z, about 182 resolves per day under the owner login).

    Left:

  11. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    and removed
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 4, 2026
  12. added
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 4, 2026
  13. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Claim. Lane 6 takes the first open item: find a resolve-feedback-threads run that resolved a non-CRITICAL bot thread on an owner-login PR after 53e1db0, read-only. The 7-day count stays open.

  14. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Host check: item 1 is not observed yet. The job works, but no owner-login PR has had a thread it could resolve. Read-only, 2026-11-04 15:30Z.

    • Owner-login PRs: 184 PRs by kyle-sexton updated since 2026-11-03T19:00Z. All 225 resolved threads on them were resolved by kyle-sexton, none by the lanes App.
    • Lane PRs, same window: the lanes App resolved 75 threads and kyle-sexton 31. So the job resolves threads where it is allowed to.
    • Where the job ran: resolve-feedback-threads / run ran in 9 of the 40 newest successful pr-unblock runs. 8 were on lanes App PRs. The one owner-login PR was #13139, job 126490107897, which logged resolved 0 review thread(s) on #13139.
    • Why docs: fill the Windows Git Bash cells of the wall-clock baseline #13139 got nothing: its one thread (discussion_r4464897644) carries the owner's "pr-fix lane: please fix this finding". resolve-threads.mjs:11 resolves only threads whose every comment is a review bot's or the lanes App's, so skipping it is correct.

    Item 1 needs an owner-login PR whose bot thread is answered by the lane, or goes outdated, with no human comment on it. Today that happens only when address-feedback runs on an owner PR without a human prompt on the thread, and owner PRs usually get their threads resolved by their own session first. Left open. Item 2 (7-day count) is due from about 2026-11-10. The Lane 6 claim is released.

  15. kyle-sexton commented on Nov 5, 2026

    @kyle-sexton
    MemberAuthor

    Host check 2: item 1 is still not observed. Read-only, 2026-11-05 15:2xZ, covering 2026-11-04T15:39Z onward.

  16. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    Claimed by the Automation Lanes host session (aee81595), assigned by the hub: finding why the resolve job never reaches an owner-login PR, then fixing it. Branch fix/12634-resolve-owner-pr-threads.

  17. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    No gate blocks owner-login PRs; item 1 waits on a qualifying case. Read on main and live runs:

    So item 1 needs an owner PR idle 2 h after its head is reviewed, holding a bot-only thread with no human reply, that the round answers VALID/fixed or finds outdated. No code change is needed; this stays open for that observation and item 3's 7-day measure.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.priority: mediumReal value, no hard deadline; normal backlog flow.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Fields

    Work status

    confirmed

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions