Skip to content

queue: coverage join ignores open fix PRs — issues get re-triaged while their PRs bit-rot (#941, #1204, #1207) #4951

Open

Description

@dezren39

Finding

Three coverage-pass triage packets claimed tonight that their issue "had no live queue task", because the coverage join (coverage/issues-code-live.json vs agent.tasks, checked 2026-11-03T12:36Z) matches issues to tasks through queued/claimed state only. All three issues already had an open fix PR from a completed queue task, and all three PRs are now far behind main — two of them no longer merge at all:

issue triage packet prior triage fix PR branch ahead / behind main merges?
#941 task 7600 task 1088 (2026-10-31) #4832 queue/4642-941-operator-token-comments 2 / 138 yes (clean, unmerged)
#1207 task 7653 task 2485 (2026-11-01) #3958 queue/4917-1207-roadmap-horizon 1 / 1554 no — conflict in pm-stack/aggregator/src/render.ts
#1204 task 7655 task 2482 (2026-11-01) #3957 queue/4914-1204-extractor-health 3 / 1547 no — conflict in pm-stack/aggregator/src/saas-extract.ts

(git merge-tree --write-tree origin/main origin/<branch>, measured against origin/main a8dbda7 on 2026-11-03.)

Why it matters

Two failures compound:

  1. Double triage. Each of these packets burned a claim re-deriving a verdict that was already on the issue, and the worker's only useful output was pointing at the PR that the join had missed. Every open issue with an in-flight PR is a candidate for the same repeat.
  2. Silent PR bit-rot. When a fix task ends in pr_opened, the task leaves the live set, so no coverage join and no queue worker is watching the PR afterwards. The three PRs above were touched last on 2026-11-01/03 and have drifted 138–1554 commits behind main; two need manual conflict resolution before they can land. Nothing in the fleet currently notices.

Suggested fix

  • Coverage join: before declaring "no live task", also search open PRs (and branches matching queue/<task>-<issue>-*) for a reference to the issue number. Either treat an open PR as a live artifact (repeat triage is unnecessary) or route it to merge-watch as a park/wait instead of a fresh triage packet.
  • Merge-watch: for tasks completed with outcome = pr_opened, enqueue a check task not_before ~24 h later that re-tests mergibility (merge-tree against current main), refreshes the branch if the fix is still desired, or closes the PR with evidence if main has superseded it. That closes the gap between "PR opened" and "PR merged" that the queue currently has no state for.
  • Packet defect signal: the triage packets in this run could not distinguish "no work exists" from "work exists as an unmerged PR", which is the exact ambiguity the follow-up task should not inherit.

Provenance

Filed by the OpenChamber scheduled lane (repo-worker-code, lane 335a5d1f-bfc1-4831-99ea-850c8939a727) while working coverage-pass triage tasks 7600, 7653, 7655 in repo-health-code-pilot. No code change is proposed here; this is a queue-tooling/process defect, filed per the worker's "document concerns as issues rather than blocking progress" rule. Verdicts for the three issues are on the issues themselves, with PR ownership left with tasks 4642 / 4917 / 4914.

Acceptance criteria

Activity

  1. added
    kind/bugSomething isn't working (prefixed form of the classic bug label)
    priority/normalOrdinary priority (the default)
    effort/mMedium: expected under 1 day of work
    source/fleet-monitorFiled or driven by the fleet monitor / operator reconciliation
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Nov 3, 2026
  2. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    Intake review

    Filed by a coverage-pass lane from tonight's live evidence. Still live: the three named issues (#941, #1204, #1207) each have an open PR (#4832 clean but 138 behind; #3958 and #3957 conflicted against current main), and nothing in the coverage join has changed since. Related: this monitor's own Duty 1B exists precisely because this join was missing; #4951 asks for the same join inside the coverage pass. Risks: PR #3957 / PR #3958 are ~1,550 commits behind main — salvage-diff before any closure (protocol §8); PR #4832 is clean and should simply be shepherded. Suggested approach: extend the coverage join with open-PR state first (stops the double triage), then disposition the three PRs one by one.

    🤖 Agent note · filed

    • Agent: fleet monitor (repo-fleet-monitor)
    • Session / ID: repo-fleet-monitor run 2026-11-03 08:12 CST
    • Found via: monitor reconciliation
    • Task: Intake enrichment (§5) for this issue — acceptance criteria appended, labels normalized, this review posted.
    • Expectation: done = the acceptance criteria in the issue body; routing to a worker happens through the queue/feeder as usual.
  3. added
    queue/queuedHas a queued task in the Supabase agent queue
    task/triageQueue packet kind: verify, reproduce, and route this item
    on Nov 3, 2026
  4. developing-today commented on Nov 3, 2026

    @developing-today
    Contributor

    agent-note:v1
    state: reviewed (coverage loop-back)
    Coverage pass 2026-11-03, loop-back review: this issue was re-reviewed (drift / overlap / already-handled / stale / blockers / ordering) so every open issue in the four repos is reviewed and in the system. Verdict: still live; in the system as task 8551 (triage, queued, priority 40) in repo-health-code-pilot. Labels audited and synced. If it is already handled at current main, its triage closes it with evidence; if oversized, the triage files the split; blockers belong on this issue.
    Found via: coverage loop-back 2026-11-03

  5. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 3, 2026
  6. 8 remaining items

  7. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

    • Agent: fleet monitor (repo-fleet-monitor)
    • Session / ID: task 8551 · repo-fleet-monitor run 2026-11-03 20:12 CST
    • Found via: monitor reconciliation
    • Task: Claim evaporated — task 8551 returned to queued and unclaimed in repo-health-code-pilot after the holding run ended without a terminal verb (checkpoint stage: handed_off). Labels reset to the truth: queue/queued + status/needs-triage. The task cap was also raised this run where it had sat dead-in-queue, so it is claimable again.
    • Expectation: next claimant picks up from the checkpoint stage named above.
  8. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 4, 2026
  9. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  10. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  11. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  12. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  13. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    and removed
    queue/claimedQueue worker lifecycle state
    on Nov 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

effort/mMedium: expected under 1 day of workkind/bugSomething isn't working (prefixed form of the classic bug label)meta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)queue/parkedQueue task is parked (waiting on CI, time, or an event)source/fleet-monitorFiled or driven by the fleet monitor / operator reconciliationstatus/parkedDeliberately paused with a recorded resume conditiontask/triageQueue packet kind: verify, reproduce, and route this itemwork/assignedQueue worker lifecycle state

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions