Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/BACKLOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -50,8 +50,8 @@ provides a less-ambiguous concrete claim — eliminating the
decompositionSuggestion: <slice-breakdown> } }` (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`
Expand Down Expand Up @@ -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.
Comment thread
AceHack marked this conversation as resolved.

**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.
Loading