diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index 3e1668da2..a20c2ab46 100644 --- a/docs/BACKLOG.md +++ b/docs/BACKLOG.md @@ -257,7 +257,7 @@ are closed (status: closed in frontmatter)._ - [ ] **[B-0436](backlog/P1/B-0436-demo-hamiltonian-to-git-visualization-2026-05-13.md)** Demo — Hamiltonian-to-git visualization (git history → phase-space rendering) - [x] **[B-0437](backlog/P1/B-0437-demo-ux-of-math-panel-bivector-fingerprints-2026-05-13.md)** Demo — UX-of-math panel (bivector fingerprints, partial-credit scoring) - [ ] **[B-0440](backlog/P1/B-0440-standing-by-failure-mode-detector-background-service-2026-05-13.md)** Standing-by failure-mode detector — background service that catches idle-foreground + nudges via bus -- [x] **[B-0441](backlog/P1/B-0441-backlog-row-ready-to-grind-notifier-background-service-2026-05-13.md)** Backlog-row-ready-to-grind notifier — background service that proactively assigns claims when agent queue empty +- [ ] **[B-0441](backlog/P1/B-0441-backlog-row-ready-to-grind-notifier-background-service-2026-05-13.md)** Backlog-row-ready-to-grind notifier — background service that proactively assigns claims when agent queue empty - [x] **[B-0442](backlog/P1/B-0442-missed-substrate-cascade-detector-background-service-2026-05-13.md)** Missed-substrate cascade detector — background service that catches branch-vs-merged-PR drift (e.g., Otto-section-missed-PR-2980-by-3-min class) - [x] **[B-0445](backlog/P1/B-0445-csharp-fluent-operator-surface-pm2-2026-05-13.md)** C# fluent operator surface — Map, Filter, Join, Distinct, Window via idiomatic CSharp API - [ ] **[B-0448](backlog/P1/B-0448-cloud-routines-integration-4th-catch-43-defence-layer-2026-05-13.md)** Cloud Routines integration — 4th catch-43 defence layer via Anthropic-hosted scheduled tasks + API + GitHub event triggers diff --git a/docs/backlog/P1/B-0441-backlog-row-ready-to-grind-notifier-background-service-2026-05-13.md b/docs/backlog/P1/B-0441-backlog-row-ready-to-grind-notifier-background-service-2026-05-13.md index 29930d278..b4967db07 100644 --- a/docs/backlog/P1/B-0441-backlog-row-ready-to-grind-notifier-background-service-2026-05-13.md +++ b/docs/backlog/P1/B-0441-backlog-row-ready-to-grind-notifier-background-service-2026-05-13.md @@ -1,7 +1,7 @@ --- id: B-0441 priority: P1 -status: closed +status: open title: "Backlog-row-ready-to-grind notifier — background service that proactively assigns claims when agent queue empty" tier: factory-infrastructure effort: M @@ -50,8 +50,8 @@ provides a less-ambiguous concrete claim — eliminating the decompositionSuggestion: } }` (Slice 4, shipped) - [x] Honors agent autonomy — assignment is suggestion, not directive (per `.claude/rules/no-directives.md`) — by design; envelope is advisory -- [x] Tracks assignment history to avoid re-assigning same row - within short window (Slice 5a, B-0501 shipped) +- [ ] Tracks assignment history to avoid re-assigning same row + within short window (Slice 5a, B-0501 open — `historyFile`/cooldown logic not yet in `tools/bg/backlog-ready-notifier.ts`) - [x] Tests cover the readiness-detection heuristics (`tools/bg/backlog-ready-notifier.test.ts`) - [x] Documented in `docs/AUTONOMOUS-LOOP.md` @@ -170,9 +170,19 @@ Using the canonical per-service slice ordering from `tools/bg/README.md`: | 2 | Real detection signal #1 (backlog-row scan: status + deps satisfied) | ✅ shipped | — | | 3 | Queue-state guard wiring (`isAgentQueueEmpty` into `pollOnce`) | ✅ shipped | B-0500 | | 4 | Bus-publish wiring (`work-assignment` topic) | ✅ shipped | — | -| 5a | Assignment history dedup / cooldown (avoid re-assigning same row) | ✅ shipped | B-0501 | +| 5a | Assignment history dedup / cooldown (avoid re-assigning same row) | ❌ open | B-0501 | | 5.2 | Agent-side `work-assignment` subscriber handler (consume + act) | ❌ open | B-0460 | | 6 | launchd plist + `docs/AUTONOMOUS-LOOP.md` wiring | ✅ shipped | B-0502 | Slices 1, 2, 4 are live in `tools/bg/backlog-ready-notifier.ts` (per README "1+2+4 live"). B-0460 depends on B-0449 (subscriber library design pass); B-0500/B-0501/B-0502 are independent. + +## Closure status (2026-05-16) + +**Notifier-side: partially complete.** Slices 1, 2, 3, 4, 6 are shipped (skeleton + detection + queue-state guard + bus-publish + launchd wiring; tests in `tools/bg/backlog-ready-notifier.test.ts`; docs in `docs/AUTONOMOUS-LOOP.md`). Empirically confirmed live during the 2026-05-16 session via `bun tools/bg/backlog-ready-notifier.ts --once` — returned the documented JSON shape with `queueBusy: true` correctly suppressing publication. + +**Slice 5a (assignment-history dedup / cooldown) is NOT yet shipped.** Child row B-0501 is still `status: open` with unchecked acceptance criteria; `tools/bg/backlog-ready-notifier.ts` does not yet contain `historyFile`/cooldown logic. Per codex + copilot review on PR #3945, the prior version of this row overstated 5a as shipped — corrected here. + +**Row stays `status: open`** because children **B-0501** (slice 5a) and **B-0460** (slice 5.2, agent-side subscriber handler) are both genuinely the remaining unshipped scope, and the `--enforce-parent-child-status` lint (B-0532 gate) correctly requires parent rows to stay open while any child is open. Closing this row would violate that invariant. + +When B-0501 and B-0460 land and close, this row is ready to flip to `closed` — **with one caveat**: child row **B-0502** currently carries `status: shipped`, which is NOT in the lint's `CLOSED_STATUSES` set (`{closed, landed, superseded, merged, done}` in `tools/hygiene/audit-backlog-items.ts:245`) and is NOT among the documented statuses in `tools/backlog/README.md` (`open / closed / superseded-by-B-NNNN / deferred / decomposed`). Before closing B-0441, B-0502 must either be flipped to a documented closed status (e.g., `closed`) OR the `shipped` value must be added to `CLOSED_STATUSES` + the README enum. Otherwise the `--enforce-parent-child-status` (B-0532) lint will still fail.