Skip to content

backlog: a stale Awaiting field hides a qualifying tier-1 bug from the autonomous Stage 2 carve-out, so it never gets analyzed #681

Description

@bess-product-owner

What happened

Issue #680 (Late switching) met every tier-1 criterion for the backlog loop's autonomous Stage 2 spend — labelled bug, opened by a non-maintainer (ridax67), debug bundle attached, no prior @claude-bot analyze comment — yet Stage 2 never fired. It sat unanalysed until the maintainer asked why.

Evidence

On #680 at open:

  • Labels: bug, bot-analyzed, ready-for-analysis — triage correctly confirmed the debug bundle was received
  • Debug bundle attached in the body
  • 0 comments — no analyze trigger, and triage never posted its required confirmation comment either

But the project card carried Awaiting: reporter. The rhythm pass suppresses every item whose Awaiting means "someone else owes us" (reporter, upstream, discussion), so #680 never appeared in the rhythm actions — and the autonomous-spend carve-out is only evaluated against items the rhythm surfaces. A stale field therefore silently disables the one path that fires Stage 2 without a human trigger.

Expected vs actual

  • Expected: a bug that is labelled bug, opened by a non-maintainer, with a debug log attached and no prior analyze is fired through Stage 2 automatically, regardless of what the Awaiting field says.
  • Actual: the Awaiting: reporter field (set against the evidence) suppressed the item entirely, so the qualifying bug was never analysed.

Root cause

The Awaiting field is treated as authoritative by the rhythm pass, but it is a board value set by grooming and can go stale relative to the issue's actual state (labels + debug log + comments). The autonomous-spend rule's conditions are checked against the item only if the rhythm surfaces it, so a stale wait value defeats the rule.

Proposed fix (options)

  1. In backlog-rhythm.sh, compute the tier-1 carve-out condition from the issue evidence itself (labels, author, debug log, prior analyze) and emit a dedicated action that is NOT suppressible by Awaiting, rather than relying on the item appearing in the normal action list.
  2. When the rhythm digests an item, reconcile a stale Awaiting against awaiting_suggested and the label state before applying suppression — a ready-for-analysis bug with a debug bundle and 0 comments is waiting on analysis, not the reporter.
  3. At minimum, surface a triage action when Awaiting disagrees with the labels (awaiting_source: board but awaiting_suggested differs), so a human/PO sees the conflict.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions