roadmap: Stage 1 COMPLETE — real build status (111 tests, CB-101..108 done + dogfooded)

The Stage-1 build-status snapshot was badly stale (34 tests; CB-103/104/105/107
marked undone). Reality: all Stage-1 tickets are done, the CB-107 e2e demo gate
passes, and the bridge is dogfooded. Correct the count to 111 (105 unit/acceptance
+ 6 live-herdr contract), mark every Stage-1 ticket done, and add a 'Beyond Stage 1'
note for the shipped delivery-reliability hardening — flagging that git's CB-106..114
numbering reuses this plan's CB-106/107/108 slots (config/e2e/placement).
Dai Ha
2026-07-16 06:49:15 +02:00
parent 479ccab9d1
commit 4304dc4128
+22 -5
@@ -128,18 +128,35 @@ comes in Stage 2). This is the thinnest end-to-end vertical slice.
**Definition of done for the stage:** `CB-107` demo passes.
> **Build status (in `bridged/`, Maven · Java 25 · 34 tests green — 29 unit/acceptance + 5 contract).**
> **Build status — Stage 1 COMPLETE** (in `bridged/`, Maven · Java 25 · **111 tests green — 105
> unit/acceptance + 6 live-herdr contract**). The `CB-107` end-to-end demo gate passes and the
> bridge is **dogfooded**: an Opus primary delegates real tasks to off-subscription workers that
> reply through it (delegated code reviews have produced committed bug fixes).
> ✅ **CB-101** herdr client — connection-per-call, contract-tested vs live 0.7.0.
> ✅ **CB-102** worker spawn — native `agent.*` with env injection, guard-checked, live-verified.
> ✅ **CB-103** status-gated injector — per-target FIFO, one message per turn, TOCTOU closed.
> ✅ **CB-104** blocking `bridge_send` — `POST /sessions/{id}/message` + reply rendezvous.
> ✅ **CB-105** MCP adapter — `bridge_send`/`bridge_reply`/`bridge_status` over the REST core, with
> connection-based caller identity (loopback peer PID → herdr pane).
> ✅ **CB-106** config + logging — Jackson YAML + Logback.
> ✅ **CB-107** e2e review demo (stage gate) — runs green end-to-end; the worker is verifiably the
> off-subscription process, the primary's env has no `ANTHROPIC_BASE_URL`.
> ✅ **CB-108** worker placement — one tab per worker in a dedicated, shared **worker space**
> (`worker.placement/workspace/tabLabel`); unique per-worker names; single-pane-guarded, tolerant
> teardown. Reviewed (high-effort multi-agent) and live-verified.
> ✅ **CB-106** config + logging — Jackson YAML + Logback.
> 🟡 **CB-104** REST core — `GET /healthz`, `/sessions`, `/agents`, `POST/DELETE /workers` done;
> the **blocking `POST /sessions/{id}/message` + reply capture** is the remaining piece.
> ⬜ **CB-103** status-gated injector · **CB-105** MCP adapter · **CB-107** e2e demo gate.
> Two herdr wire facts pinned by contract test: **string ids**, and **one request per
> connection**. `agent.start` env is the subscription-safe injection point (no shell prefix).
>
> **Beyond Stage 1 — shipped delivery-reliability hardening.** The implementation continued the
> `CB-1xx` sequence past the skeleton for work that overlaps Stage 2–4 below. ⚠️ **These commit
> numbers (CB-106…CB-114 in git) reuse the CB-106/107/108 slots this plan assigned above to
> config/e2e-demo/placement — identify the items below by name, not number.** Shipped:
> completion fallback (a confirmed `working→idle` turn resolves a send), async fire-and-poll
> (`wait:false` + `bridge_poll`, beats the caller's MCP call timeout), fleet MCP tools
> (`bridge_spawn`/`bridge_list`/`bridge_stop`/`bridge_profiles`/`bridge_poll`), failure detection
> for wedged (`unknown`), vanished, and never-ready workers, multi-profile workers with
> per-profile base_url guards, worker cwd inheritance (never `$HOME`), and a readiness gate that
> holds delivery until the worker's Claude has connected the bridge MCP.
---