diff --git a/8-Roadmap.md b/8-Roadmap.md index e12b94c..5900872 100644 --- a/8-Roadmap.md +++ b/8-Roadmap.md @@ -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. ---