Warning
HISTORICAL FINISH LOG: This log records an earlier v2 delta pass and is not the current release contract. Use README, Local Quickstart, and Self-Host Relay Quickstart for current guidance.
- Close the remaining delta from practical self-host alpha to full practical v2 for real self-use now.
- Keep Codencer local-first, planner-controlled, evidence-oriented, repo-bound, and truthful about runtime behavior and protocol maturity.
- Share control is not yet fully truthful:
- a running connector does not visibly re-advertise config-driven share changes
- relay instance state is not pruned when a connector stops advertising a previously shared instance
- Operator discovery is incomplete:
- discovery roots exist internally, but there is no operator-facing
codencer-connectord discovercommand
- discovery roots exist internally, but there is no operator-facing
- MCP maturity is only partially proven:
/mcpis usable, butGET /mcpis still a thin bootstrap instead of a real long-lived SSE session- external interoperability is not yet proven against an official SDK
- Multi-instance proof is thin:
- the repo mostly proves single-instance relay flows rather than a two-instance select-and-target flow
- Daemon HTTP route proof is thinner than service proof:
- direct route tests are missing for abort, gate decision, and step evidence endpoints
- Relay operator ergonomics still miss a local audit helper:
- audit is available over HTTP, but not yet through
codencer-relayd
- audit is available over HTTP, but not yet through
- Broker/runtime docs need a truth pass:
- standardize
agent-brokernaming everywhere - keep the in-memory task-session limitation explicit
- standardize
- Planner auth remains static-token based in this pass.
- The canonical remote planner surface remains relay HTTP plus relay-side MCP.
- Daemon-local MCP remains secondary/compatibility-only and does not gain new planner-facing claims.
- Add an operator-facing
codencer-connectord discovercommand rather than overloadinglist. - Prove MCP interoperability with the official Go SDK and keep compatibility claims exact.
- Make share/unshare propagate without connector restart by reloading config and re-advertising from the running connector.
- Lead:
docs/internal/v2_finish_log.md- integration, merge control, verification, final docs/smokes/truth pass
- Worker
Aristotle:internal/app/*- daemon-facing API tests
- daemon/service tests only if route proof exposes a real mismatch
- Worker
Maxwell:cmd/codencer-connectord/main.gointernal/connector/*- connector tests
docs/CONNECTOR.md
- Worker
Fermat:cmd/codencer-relayd/*internal/relay/server.gointernal/relay/router.gointernal/relay/audit.gointernal/relay/store/*- relay admin/integration tests
docs/RELAY.md
- Lead after relay merge:
internal/relay/mcp_server.gointernal/relay/mcp_tools.go- MCP tests
docs/mcp/*- official SDK smoke helper
- multi-instance smoke/docs
- broker/docs naming pass
- Lock delta log and ownership
- Daemon HTTP proof hardening
- Connector discovery plus live share propagation
- Relay share-prune plus audit CLI
- MCP streamable HTTP maturity plus official SDK smoke
- Operator docs/scripts, multi-instance proof, broker truth pass
- Formatting, broad verification, final truthful assessment
- Merge 1: completed
- Merge 2: completed
- Merge 3: completed
- Merge 4: completed
- Merge 5: completed
- Merge 6: completed
- Merge 7: completed
- Fresh audit re-confirmed:
go test ./...make buildmake build-broker
- Current repo state before delta work:
- branch:
codex/implement-codencer-v2 - untracked artifact observed:
./orchestratord
- branch:
- Required focused checks after each merge:
- daemon:
go test ./internal/app ./internal/service - connector:
go test ./cmd/codencer-connectord ./internal/connector - relay:
go test ./internal/relay ./cmd/codencer-relayd - final:
go test ./...,make build,make build-broker, smoke matrix
- daemon:
- Merge 2 verified:
go test ./internal/app ./internal/service- added direct route proof for gate approve/reject, run abort, and step result/validations/logs
- Merge 3 verified:
go test ./cmd/codencer-connectord ./internal/connector- added
codencer-connectord discover - added live config reload plus re-advertise for share/unshare propagation without connector restart
- Merge 4 verified:
go test ./internal/relay ./cmd/codencer-relayd- made connector advertise authoritative for relay-side shared-instance state
- pruned stale instance rows and route hints when share state shrinks
- added
codencer-relayd audit --limit N
- Merge 5 verified:
go test ./internal/relay ./cmd/codencer-relayd ./cmd/mcp-sdk-smoke- upgraded
/mcpfrom a one-shot bootstrap to a session-bound SSE stream with keepalive comments - added official Go SDK interoperability proof and a standalone
cmd/mcp-sdk-smokehelper
- Merge 6 verified:
bash -n scripts/self_host_smoke.shgo test ./cmd/mcp-sdk-smokemake build-mcp-sdk-smokemake build-broker- updated operator docs for
discover, relayaudit, broker naming truth, Go 1.25.0+, and the expanded smoke matrix
- Merge 7 verified:
gofmt -w $(git diff --name-only -- '*.go')go mod tidygit diff --checkgo test ./...make buildmake build-brokermake build-mcp-sdk-smoke- live isolated self-host smoke with
SMOKE_SCENARIOS=all,mcp-sdkagainst:- relay on
127.0.0.1:18090 - simulation daemon on
127.0.0.1:18085
- relay on
- live smoke outcomes:
- primary run completed with result, validations, logs, artifacts, audit, MCP, share-control, multi-instance, and official SDK proof paths exercised
- optional gate action was skipped because the simulation path produced no gate
- optional abort path returned HTTP
500, matching the repo's best-effort, fail-closed abort truth rather than guaranteed confirmed cancellation
- cleanup:
- removed stray untracked root artifact
./orchestratord
- removed stray untracked root artifact
- No two write-capable workers may edit the same files concurrently.
- MCP compatibility claims must stay exact; this repo now proves the official Go SDK path and manual JSON-RPC callers, not universal client compatibility.
- Share/unshare remote invisibility is now proven without restarting the connector in the live smoke flow.
- Live abort remains best-effort and may return HTTP
500when cancellation cannot be confirmed quickly; that is expected truth, not a hidden regression.