8 Roadmap
Dai Ha edited this page 2026-08-31 10:29:05 +07:00
Clone

Wiki Page Revisions

24 Commits

Author SHA1 Message Date
Dai Ha 06cceeee7c #168: rebuild chapters 1, 2, 7, 8 and 9 against the source
The audit marked all five REBUILD. Every factual claim on them is now checked in
the code and carries a file:line reference.

What was wrong and is now fixed:

- Ch.1 named a `fleet_read` tool and an SSE `GET /events` route. Neither exists.
  It also named Redis Streams and NATS JetStream as the queue; the shipped inbox
  is AMQP. The subscription boundary is back as its own section, sourced from
  SubscriptionGuard, and the REST list now matches FleetApp.build().
- Ch.2 described tool parameters that were never shipped. The tool table now
  comes from each tool's own schema method.
- Ch.7 was built on `ccs` profiles and on send parameters that do not exist.
  Every flow now uses the real tools. The portable CLAUDE.md block is unchanged,
  byte for byte, and the sync check still passes.
- Ch.8 presented old plans as the current stack. It is now a delivery record in
  four states, and "built, not switched on" means no host enables it today —
  AMQP and the coordinator mailbox are both on here, so both moved to live.
- Ch.9 had drifted from the source in its package, class and endpoint map.

Also: chapters 1, 2 and 8 had "I checked this in the code" written on the page
itself. That belongs in a worker's report, not in a reference page. The pages now
state the fact and cite the line.

Every Mermaid diagram was rendered with mmdc before this commit.
2026-08-31 10:29:05 +07:00
Dai Ha 3357960dd1 CB-634: rename bridged -> fleetd across the wiki
Match the code cutover: daemon name, config (fleetd.yaml), scripts, launchd/
systemd units, module dir, and MCP tool prefix bridge_* -> fleet_*. Kept:
the BRIDGED_MEMBER security marker, mcp__bridge__ (historical mount name), and
the .bridged-worktrees on-disk path. The portable CLAUDE.md block stays
byte-identical with the repo's CLAUDE.md.
2026-08-25 04:08:38 +02:00
Dai Ha 073dea5504 docs: record that v1.1.0 is tagged — release 1 is finished
The Roadmap said in two places that the tag was the only step left and that
it belonged to the operator. The operator authorised it and the lead cut it,
so both lines were about to become the wrong kind of stale: a checklist that
still asks for work that is already done.

Annotated tag on 7d41ccc, pushed. 217 commits since v1.0.0, not the 214 the
page still claimed - three doc commits landed after that count was written.
The build was re-run on the tagged commit rather than trusted from earlier in
the day: 870 tests, 0 failures. Gitea milestone 16 closed, 0 open PRs.

Also recorded that no Gitea release object was made. The tag is the artifact;
a release is a separate publish and was not asked for. Writing that down
stops a later session creating one and believing it was always expected.

Added the operator guide as item 8, since chapters 4 and 5 turned out never
to have been written and that was not on any checklist either.
2026-08-17 16:27:12 +02:00
Dai Ha 638b26bdbd 1.1 is closed: CB-596 verified in a live member, 29/29 2026-08-17 13:48:10 +02:00
Dai Ha 01aab0ba10 CB-596 code is live; 1.1 is down to two operator actions 2026-08-17 13:33:37 +02:00
Dai Ha 46c50110c8 CB-596 is an implementation unit, not one operator command
Running the probe is what showed it. Measured inside a live member: 31
credential names, all set. CB-592 works (the sentinel matched), but
GITLAB_PERSONAL_ACCESS_TOKEN — a second forge — has nothing blocking it,
alongside 23 other live secrets with no bridge purpose.

Also records why the probe's own hash column must not be published: a
truncated SHA-256 of a 5-character value is not an anonymiser.
2026-08-17 08:47:58 +02:00
Dai Ha 51fec33cd2 1.1 is code-complete: CB-586 and CB-606 merged
Moves both into the Done table with what they actually were, turns their
diagram boxes green, and cuts the Open list to CB-596 alone — the one item
no session can close, because the probe it needs is refused by the command
classifier. Commit count 204 -> 211.
2026-08-16 20:16:10 +02:00
Dai Ha 523a494650 1.1 close-out: CB-582 and CB-604 land; three tickets left
Moves bridge_ask reach and catalogue debt into Done, folds CB-604 into config
accuracy, and adds CB-606 — the three fields with CB-604's shape, one of which
turns authentication off on a typo.

Also fixes a sentence the cut decision had made false: the milestone intro still
said only CB-308 goes to release 2. Four tickets went. The rule that decided it
is now stated — missing is not the same as broken.

Commit count since v1.0.0 corrected 196 -> 204.
2026-08-16 18:54:53 +02:00
Dai Ha e1106b3e8e Roadmap: 1.1 is mostly done — split the section into done and open
Six of the ten themes are merged and verified today: supervision,
durability, credential scope, nudge scheduling, config accuracy and the
green build. The section still described all of them as outstanding.

Four remain: bridge_ask reach (decided, in flight), the last five
Features areas, CB-596 which needs the operator, and the four
half-shipped tickets that are the deferral candidates.

Commit count since v1.0.0 corrected from 175 to 196.
2026-08-16 18:24:34 +02:00
Dai Ha 02d2f096cf CB-595: name the 1.1 close-out, and stop Stage 5 reading as "deployed"
The roadmap ended at Stage 5 and pointed straight at CB-308, so it never
answered the obvious question: what is actually left before the single-host
story is finished?

v1.0.0 was tagged on 2026-08-10 and 175 commits have landed since with no
tag. This adds the 1.1 milestone by theme — supervision, single-host bugs,
the durability claim, credential scope, catalogue debt — plus the admission
rule that decides what is 1.1 and what is release 2: if it would still be
broken with exactly one host, it is 1.1. By that rule only CB-308 is
release 2.

Also qualifies the Stage 5 "production shape" row. CB-504 did build a
launchd agent, but no host has ever loaded it, and launchd does not source
a login shell — so the unit as shipped would start a daemon with no forge
token and no gateway token. Read that row as built, not deployed. CB-594
is the gap.
2026-08-16 17:01:11 +02:00
Dai Ha 1710a77827 wiki: add chapter 11 Features, and stop claiming Stage 5 is finished
Roadmap said Stage 5 was "✅ All landed" and listed CB-501–505. Twenty tickets
shipped after that line was written (CB-506…CB-525) and none of them appeared
anywhere in the wiki — so the page was not merely incomplete, it asserted
something false.

Two fixes, because there were two problems:

- The stage row is corrected and a "Stage 5 continued (as-built)" section records
  all twenty, split by who needs them: capabilities, contract changes, and the
  quality infrastructure that makes the rest trustworthy. It also carries the
  CB-521 version-coupling warning — /healthz can be green while every spawn
  fails, because health pings herdr without checking that the adapter and the
  binary agree on a protocol.

- Chapter 11 is new, and it is the structural fix. Chapters 1–10 are organised by
  design topic and every one answers "how is this built / why this way". None
  answers "what can it do and how do I turn it on", so a shipped knob like
  `placement: weighted` had no page that wanted it and landed nowhere. Eleven
  entries, each: what it does · the knob · why it exists · the gotcha. The `why`
  line is the load-bearing one — it is what stops a decision being re-litigated
  a month later.

Written from verified behaviour only; six entries that still need their config
surface confirmed against the code are listed as an explicit backfill list rather
than guessed at.

Mermaid block rendered with mermaid-cli to confirm it parses.
2026-08-09 19:38:22 +02:00
kevin f4af2a1c22 Roadmap: CB-402 Stage B live-dogfooded — issue #7 closed
Spawn -> CB-306 readiness gate -> bridge_send -> structured bridge_reply ->
teardown, verified end to end against opencode 1.18.5. The schema-drift risk
did not materialise: the adapter was designed against 1.1.31 and its generated
OPENCODE_CONFIG still validates unchanged. Provider question resolved without
credentials — opencode's gateway serves free-tier models, so no key was needed
and no guard entry applies.
2026-07-29 22:48:58 +07:00
kevin ef3e68a400 Roadmap: Stage 5 hardening as-built; Stage 3/4 status corrected
Stage 5 (CB-501..505) is complete and documented as-built, including the
finding that drove it: bridged had exactly one security control, the loopback
bind, and any caller that was not a recognised worker pane was treated as the
PRIMARY. CB-501 inverts that default (ANONYMOUS is the fallback) and refuses to
start on a non-loopback bind under loopback-trust.

Also records that CB-505 must enforce on BOTH entry paths: BridgeMcp calls the
service layer directly and /mcp is a raw servlet that never traverses Javalin's
before filter, so the wiki's long-standing "MCP is a thin adapter over the REST
core" is not literally true at code level.

Corrections to stale rows:
- Stage 4: CB-402 landed (ded226a), was still listed as future. Flagged as
  code-complete but NOT live-dogfooded — the one known-unverified item.
- Stage 3: CB-301-ext / CB-302 / CB-304 marked shipped; CB-302's "STATE.md"
  framing superseded by the worker-opened-PR checkpoint that actually shipped.
- Test count 147 -> 307, and clarified that figure excludes contract tests.
2026-07-29 22:28:57 +07:00
Dai Ha 4d1548a3d8 wiki: CB-307 complete — Stage 2 durable inbox + Stage 3 active push loop (as-built)
Fold the now-shipped CB-307 into the as-built docs (was stale at Stage 1 only):
- Roadmap: Stage 2 (AmqpReplyInbox/LavinMQ, 2bc5f3a) and Stage 3 (ReplyPushLoop
  active push-to-primary, d4c9704, gitea #5 closed) marked shipped; diagram gains
  a Stage 3 node; all stages green.
- Implementation: msg core 4->6 classes (AmqpReplyInbox consume-and-hold, ReplyPushLoop
  status-gated loop); mcp 6->7 (PrimaryRegistry); bridge_ack tool; stranded-reply
  narrative extended with durable landing + active nudge + pull degradation.
- Architecture: late-replies note now covers durable + active push; split-host hook
  note clarifies a same-host primary IS injected into (Stage-3 nudge).

Push channel resolved: the same-host primary is a herdr pane, so the loop injects a
bounded, status-gated drain nudge into its own pane; off-host degrades to pull.
Mermaid roadmap diagram re-validated (renders clean).
2026-07-19 18:07:18 +02:00
Dai Ha bcf15a85c9 wiki: CB-307 reply-inbox (as-built) + CB-308 multi-host federation
- 9-Implementation: msg package 2->4 classes (ReplyInbox port + InMemoryReplyInbox),
  reply now HELD not dropped when no send is open; drain via bridge_poll(target) +
  GET /sessions/{id}/replies; forward-rendezvous stranded-reply note.
- 8-Roadmap: new 'Delivery reliability & multi-host' section (CB-306 shipped,
  CB-307 Stage 1 shipped / Stage 2 deferred, CB-308 designed) + staging diagram.
- 1-Architecture: multi-host federation topology (CB-308) + diagram; late-reply
  durability note (CB-307) in Mode 1.
2026-07-19 07:08:02 +02:00
Dai Ha 0a0f7d53d6 wiki: CB-401 Stage A — PeerLauncher SPI + ClaudeCodeLauncher rename
- 9-Implementation: new peer package section (PeerLauncher/PeerHandle/
  SpawnRequest/Capability); WorkerService->ClaudeCodeLauncher in component
  map, edge table, bootstrap wiring; nine->ten packages; refs main 3aa69a9.
  Capability noted as declare-only (verb-layer enforcement deferred).
- 1-Architecture: worker row notes swappable PeerLauncher adapter; core
  bus is peer-neutral.
- 8-Roadmap: Stage 4 relabeled 'Pluggable peers'; CB-401 Stage A complete
  (183 tests, main 3aa69a9); CB-402 Stage B + Stage C shown as future.

Reflects main @ 3aa69a9. Verified against source by primary.
2026-07-18 15:00:06 +02:00
Dai Ha 0c81b51956 roadmap: Stage 2 complete — CB-205 bridge_ask, CB-202 reviewer skill, CB-201 descoped
Record the rich-message-semantics stage as done: CB-205 reverse rendezvous
(bridge_ask, live e2e), CB-202 reviewer-role skill, and CB-201 intentionally
descoped from a {from,to,corr} envelope to a lightweight QUESTION kind + turn_id
(connection identity already routes replies). CB-203/CB-204 shipped earlier.
Bump suite to 147 green (+13). Resolve the reviewer-skill open decision (skill,
not CLAUDE.md snippet) and move bridge_ask out of Stage 3's delivers line.
2026-07-16 16:12:36 +02:00
Dai Ha cea7ddc196 roadmap: refresh to 134 tests + extend Beyond-Stage-1 note through CB-118
Test count 111->134 (128 unit/acceptance + 6 live-herdr contract). Add the
CB-115..118 reliability follow-ups (clean scrape, waiter identity, orphan reap,
completion clip fix) and note the e2e coverage: single-worker conversation,
1-primary/N-worker fan-out issue-hunt, and a sustained 5-minute stateful
back-and-forth (30 turns, all clean bridge_reply).
2026-07-16 14:20:38 +02:00
Dai Ha 4304dc4128 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).
2026-07-16 06:49:15 +02:00
kevin 479ccab9d1 Fix doc drift vs docs/MCP-Contract.md: no 'done' agent_status (turn-done = working→idle edge); bridge_sessions→bridge_list, bridge_poll→bridge_status drain, mode→block param
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 19:59:53 +07:00
Dai Ha 8c37bb71c1 wiki: CB-108 worker-space placement + herdr unique-name/output-detection facts 2026-07-13 08:26:38 +02:00
Dai Ha aa93ed51c5 CB-102 decided: native agent.* worker spawn (env-injected); roadmap build status 2026-07-12 20:19:43 +02:00
Dai Ha 6835d0a89a wiki: Java stack + REST-as-test-surface + verified herdr 0.7.0 API
- Tech stack Go -> Java 21 (virtual threads, GraalVM native-image); MCP Java SDK;
  Javalin REST; UnixDomainSocketAddress; Jackson YAML; Lettuce; JUnit. Interface
  sketch rewritten in Java (2-Message-Server + 8-Roadmap).
- Testability: REST API is the contract surface — every feature = an endpoint =
  an acceptance test (no Claude/MCP in loop); MCP verified by parity. New
  Roadmap section + feature/endpoint/test map + diagram; Stage-1 tickets
  (CB-104/105) reframed around REST endpoints; CB-106 Jackson/SLF4J.
- Spike correction: verified against RUNNING herdr 0.7.0 (protocol 14). No
  session.snapshot (fixed 5 refs -> workspace.list/pane.list/ping). Documented
  the native agent.* namespace as a south-side opportunity; CB-102 now spikes
  agent.start first. pane.wait_for_output used.
- Envelope open-question already resolved -> Use Cases.
All 21 mermaid blocks validated.
2026-07-12 09:23:25 +02:00
Dai Ha 9d7947c03a wiki: add Use Cases (7) + Roadmap (8) — review scenario, ccs spawn, tickets
- 7-Use-Cases: flagship Opus<->gx00 code-review CONVERSATION, plus the 5
  mechanisms it needs: bridge_send trigger; discovery via bridge_sessions
  (roster+live); ccs-profile spawn ('ccs <profile> claude', guard via
  'ccs env <profile>' host allowlist); the ID contract (envelope: from/to/
  session/turn/corr/kind/body + kind vocabulary); persistent-reviewer lifecycle.
  Plus a use-case catalogue.
- 8-Roadmap: walking-skeleton-first 5 stages (gantt + table), consolidated tech
  stack (incl. ccs spawn + ccs env guard), tickets per stage, and detailed
  Stage-1 tickets CB-101..107 with acceptance + dependency graph.
- 2-Message-Server: envelope 'open question' now resolved -> links to Use Cases + CB-201
- _Sidebar + Home index: add chapters 7 and 8
All 4 new mermaid blocks validated (2 fixed for Note semicolon/quotes).
2026-07-12 07:44:43 +02:00