qa-board-row-stale-premise-live-recheck
Done. Two artifacts, both verified by execution:
~/SOLUTION.mdThe self-contained diagnosis:
- Verdict — STALE_PREMISE: close bunker-las-02, no worker.
- Root cause — the row's "permanent 8/8 failure" was a transient TTL backlog. Two compounding causes: natural healing (TTL reclaimed 7 ephemerals → 2/8) and premise drift (fix QA-OFF-BY-ONE-9 landed after filing; parser proven correct; evidence green). Exhaustion rows go stale in hours because TTL reaping is automatic.
- Exact fix — (a) the close-with-decision-doc commands and template, (b) a mandatory pre-dispatch live recheck gate. Rule: probe pool occupancy + evidence corpus + fix provenance before designing reaping/failover code.
- Verification — 4-case test matrix with observed outputs and acceptance criteria.
~/stale-premise-recheck.shRunnable gate with three-valued verdicts: 0 STALE_PREMISE, 1 LIVE_PREMISE, 2 INCONCLUSIVE. Enforces parser self-check, requires occupancy recovery plus real fix/evidence corroboration, and never silently closes on unparseable data.
I self-tested all four paths during development and found/fixed a real bug: skipped probes originally returned 0 and falsely satisfied the corroboration check, producing a bogus STALE_PREMISE with no evidence (Case C). Skips now return 2 and yield INCONCLUSIVE:
Case A healed + provenance + evidence -> STALE_PREMISE exit=0
Case B still 8/8 -> LIVE_PREMISE exit=1
Case C healed, no provenance/evidence -> INCONCLUSIVE exit=2
Case D unparseable live status -> INCONCLUSIVE exit=2
Fixtures live under ~/fixtures/ so the matrix is reproducible as-is.
# Evidence - Problem class: qa-board-row-stale-premise-live-recheck - Model: openrouter/deepseek/deepseek-v4.1-flash - Solved: 2026-09-16T00:35:19.218Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "P1 QA row claimed bunker-las-02 battery permanently failing on capacity exhaustion (8/8 agents + 10-range pool). Before dispatching a fix worker, the foreman re-verified the premise live: bunker status showed 2/8 (TTL had reclaimed the 7 stale ephemerals), the deployed bunker-qa.sh already carried a capacity preflight (QA-OFF-BY-ONE-9, landed hours after the row was filed), and its parser verified correct against the live host (extract function, feed real status output, expect USED MAX pair). Post-fix evidence files showed green batteries. Verdict: stale premise, close with decision doc; no worker needed. Lesson: QA exhaustion rows go stale in hours because TTL reaping is the natural healer - always probe pool occupancy + evidence corpus + fix provenance before designing reaping/failover code.", "environment": "", "language": "", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "qa-board-row-stale-premise-live-recheck", "provider": "openrouter", "solved_at": "2026-09-16T00:35:19.218Z", "version": ""}Done. Two artifacts, both verified by execution:
~/SOLUTION.mdThe self-contained diagnosis:
- Verdict — STALE_PREMISE: close bunker-las-02, no worker.
- Root cause — the row's "permanent 8/8 failure" was a transient TTL backlog. Two compounding causes: natural healing (TTL reclaimed 7 ephemerals → 2/8) and premise drift (fix QA-OFF-BY-ONE-9 landed after filing; parser proven correct; evidence green). Exhaustion rows go stale in hours because TTL reaping is automatic.
- Exact fix — (a) the close-with-decision-doc commands and template, (b) a mandatory pre-dispatch live recheck gate. Rule: probe pool occupancy + evidence corpus + fix provenance before designing reaping/failover code.
- Verification — 4-case test matrix with observed outputs and acceptance criteria.
~/stale-premise-recheck.shRunnable gate with three-valued verdicts: 0 STALE_PREMISE, 1 LIVE_PREMISE, 2 INCONCLUSIVE. Enforces parser self-check, requires occupancy recovery plus real fix/evidence corroboration, and never silently closes on unparseable data.
I self-tested all four paths during development and found/fixed a real bug: skipped probes originally returned 0 and falsely satisfied the corroboration check, producing a bogus STALE_PREMISE with no evidence (Case C). Skips now return 2 and yield INCONCLUSIVE:
Case A healed + provenance + evidence -> STALE_PREMISE exit=0
Case B still 8/8 -> LIVE_PREMISE exit=1
Case C healed, no provenance/evidence -> INCONCLUSIVE exit=2
Case D unparseable live status -> INCONCLUSIVE exit=2
Fixtures live under ~/fixtures/ so the matrix is reproducible as-is.
# Evidence - Problem class: qa-board-row-stale-premise-live-recheck - Model: openrouter/deepseek/deepseek-v4.1-flash - Solved: 2026-09-16T00:35:19.218Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "P1 QA row claimed bunker-las-02 battery permanently failing on capacity exhaustion (8/8 agents + 10-range pool). Before dispatching a fix worker, the foreman re-verified the premise live: bunker status showed 2/8 (TTL had reclaimed the 7 stale ephemerals), the deployed bunker-qa.sh already carried a capacity preflight (QA-OFF-BY-ONE-9, landed hours after the row was filed), and its parser verified correct against the live host (extract function, feed real status output, expect USED MAX pair). Post-fix evidence files showed green batteries. Verdict: stale premise, close with decision doc; no worker needed. Lesson: QA exhaustion rows go stale in hours because TTL reaping is the natural healer - always probe pool occupancy + evidence corpus + fix provenance before designing reaping/failover code.", "environment": "", "language": "", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "qa-board-row-stale-premise-live-recheck", "provider": "openrouter", "solved_at": "2026-09-16T00:35:19.218Z", "version": ""}