Sprint 1 plan: Spectra 0.1, Talk
Each loop iteration: pick the first unchecked item, implement it with tests, run the gated checks, commit with oxy, tick the box here with a one-line note, and commit again. Update docs/spec.md (and its changelog) whenever behaviour the spec describes changes. If an item cannot be finished in two iterations, note why under it and move on. The issues are on https://oxygenhub.io/projects/andymccall/7.
Rules
- Never run
git initin this directory or push this project anywhere but itsoxygenhubremote. Commit withOXY_HOME=~/.oxy-agents/claude oxy commit -m "..." PATHS.., never with Andy's own key. - Tests are hermetic: a temporary data directory, a temporary socket, port 0; never
~/.local/share/spectra,~/.configor the network. - Gate every commit on
make check(changelog, fmt, clippy with warnings as errors, tests), chained so a failing gate stops the commit:make check && oxy commit …. - Every code change adds a CHANGELOG.md line under
## Unreleased, or setsNO_CHANGELOG=1. - Never weaken a security goal of spec §5 to make a test pass.
- Never commit or push anything under
docs/prompts/(Andy's prompts; ignored in.oxyignore). Name the paths in every commit. - Never act as Andy: owner-only steps (delegating to an agent key, the acceptance run) wait for him.
Items
- #1 Project skeleton in Oxygen's shape — done 2026-11-02: workspace, deps/oxygen pinned, make check, deps-check (212 crates, all vendored).
- #2 CI on OxygenFlow — done 2026-11-02: run #1 passed fmt, clippy, test, build with no image rebuild.
- #3 The ledger — done 2026-11-02: chain, frozen envelope, HLC, signed checkpoints every 256 events, verify/check/rebuild; append 0.15 ms (release), 10,000 random events with rebuild and verify 1.3 s.
-
#4 Identities instead of tokens — done 2026-11-02: init, agent add (waits for the delegation), list, disable, identity show/refresh; Principals replay in verify; Authenticator (window, nonce, uid); write lock. Checked against the real
oxy identity delegate add. The socket and its SO_PEERCRED arrive with #7, which uses the Authenticator. - #5 Projects, presence and sessions — done 2026-11-02: project add/list with relations from .oxymodules (checked on oxygen, oxygenflow, oxygenhub, spectra), presence and session trackers with events and projections; the daemon feeds them from #7.
- #6 Channels, threads, messages, inbox and search — done 2026-11-02: spectra-core::conversation (post, read, inbox, ack, redact, search, direct channels), shared by tools, API and CLI.
- #7 Tuner: MCP over Streamable HTTP — done 2026-11-02: spectra serve, socket + loopback, signed requests, both revisions, refusals, owner events through the daemon; end-to-end tests drive the real binary.
- #8 The 0.1 tools — done 2026-11-02: eleven tools through one invoke wrapper (record, rules line); wait with the idle guard; end-to-end tests with two agents. Found while testing: serve could hang on shutdown with a stream open (now five seconds at most).
- #9 The stdio shim — done 2026-11-02: spectra mcp --agent NAME, driven over pipes in tests/cli_mcp.rs. Real Claude Code, Antigravity and Kimi connections are checked in #13 with Andy, since they need his MCP configuration.
- #10 Radar — done 2026-11-02: Live, Channels, channel/thread with compose, Log with Verify now; spectra open; checked by hand in Chrome on a demo Spectra. That demo found the ledger cancellation bug (fixed, regression test fails on the old code) and a referrer policy that blanked the Origin of form posts.
- #11 JSON API and spectra-api types
- #12 Human CLI
- #13 Acceptance (with Andy)
Log
- 2026-11-02 plan created; sprint adjusted to spec Draft 0.3 (identities and the ledger).
- 2026-11-02 #1 and #2 done (CI green on run #1); #3 done. Root disk was full: build trees go to /mnt/development/spectra-target (CARGO_TARGET_DIR).
- 2026-11-02 #4 done. Found and fixed while testing: a signed event's actor was not checked against its signer.
- 2026-11-02 Andy asked for an oxy-style CLI: every command now reports through oxy's ui module. #5 done.