Gap
A reviewer on /localize/done/:id who spots smoke the AI (and both passes) missed can record it — the missed-smoke row PATCHes has_missed_smoke (since #312) — but nothing acts on it:
So an annotated-but-wrong alert is stuck: complete by stage, known-incomplete by flag.
Option considered and rejected: demote-then-skip
Move lanes back to a pre-annotated stage so the alert passes the skip guard and lands in the Skipped view. Rejected because:
- The skip overlay is deliberately insert-only and never touches lane state (its whole safety story); pairing it with stage demotion inverts that and makes unskip lossy.
- Lane stages feed other machinery (sibling auto-annotation fan-out, group sweep, done-list queries); rewinding
ANNOTATED lanes risks retriggering it.
- After unskip the alert returns to the localize queue, where the only real fix (drawing the missed object) still doesn't exist.
Proposed shape: the flag is the backlog
- Keep skip queue-only, untouched.
- Treat
ANNOTATED && has_missed_smoke as its own small backlog: a "Flagged after done" view or filter on the localize done list — the Skipped view's sibling, not its tenant. No schema change needed; the flag is already recorded.
- When add-object ships, that backlog is the worklist: adding a lane to a done alert spawns it at the bbox stage, so the alert is no longer fully annotated and re-enters the localize queue via the existing predicate — no demotion of finished lanes.
Related
Gap
A reviewer on
/localize/done/:idwho spots smoke the AI (and both passes) missed can record it — the missed-smoke row PATCHeshas_missed_smoke(since #312) — but nothing acts on it:POST /alert/skip409s when every lane isANNOTATED("Alert is fully annotated — nothing to skip"). A skip row on a done alert would be visible in neither queue.So an annotated-but-wrong alert is stuck: complete by stage, known-incomplete by flag.
Option considered and rejected: demote-then-skip
Move lanes back to a pre-annotated stage so the alert passes the skip guard and lands in the Skipped view. Rejected because:
ANNOTATEDlanes risks retriggering it.Proposed shape: the flag is the backlog
ANNOTATED && has_missed_smokeas its own small backlog: a "Flagged after done" view or filter on the localize done list — the Skipped view's sibling, not its tenant. No schema change needed; the flag is already recorded.Related