Mark Phase 3 (Spark Control) done; trim spec to live command contract

Shipped in Spark Control v0.21.0: status badge + Update/Restart/Stop-Start/Logs
tile. All three exit criteria confirmed. matrix-bridge needed no code change.

- AGENTS.md: Current state + ROADMAP Phase 3 -> DONE; Deploy switched scp -> git
  pull (Update button); D10 stamped; new Infra fact for the Spark->Gitea path and
  the load-bearing IdentitiesOnly ssh-config pin the Update button depends on.
- spark-control-integration.md: trimmed from dev spec to live contract (dropped
  sudo -iu fallback and dev-side scaffolding; folded in direct-as-modelo, the
  Gitea key gotcha, restart cadence, and the LAN-only HTTP API).
- README: dropped stale "pre-Phase 0" status; Setup reframed for a fresh install.

Deferred follow-up: badge reflects container liveness only, not Matrix
connectivity; HEALTHCHECK + {{.State.Health.Status}} is the matrix-bridge-side fix.
This commit is contained in:
Keysat
2026-06-15 23:19:30 -05:00
parent 843582ec03
commit 28c974fe1d
4 changed files with 123 additions and 139 deletions
+8 -7
View File
@@ -9,8 +9,9 @@ Runs as a small **matrix-nio** bot in a Docker container on a DGX Spark; a zsh w
Mac (`scripts/launch-claude.sh`) is the only piece that knows the Mac's environment. Routing
is deterministic in v1 — the room you message in decides the repo (an explicit config map).
> Status: **scaffolded, prePhase 0.** No bot code yet. See `AGENTS.md` → `## Current state`
> for the active milestone and `ROADMAP.md` for the phase plan.
> Status: **live on the Spark — Phases 03 + headless "ask" mode shipped.** The bot runs in
> 11 project rooms + an all-projects room, and is managed from the Spark Control dashboard. See
> `AGENTS.md` → `## Current state` for details and `ROADMAP.md` for the phase plan.
## How it works (v1)
@@ -24,8 +25,8 @@ Matrix message in a project room
## Setup
_TODO — filled in as Phase 0 is proven:_ Matrix onboarding (Element + the existing Synapse
homeserver, a bot user), the Mac wrapper, passwordless SSH from the Spark to the Mac, and the
first room→repo mapping. Copy `config.example.toml` to `config.toml` (gitignored) and fill in
real room IDs and repo paths. The original scoping docs (SPEC / DECISIONS / KICKOFF) hold the
full background.
The bot is live; this is the shape of a fresh install: Matrix onboarding (Element + the existing
Synapse homeserver, a bot user), the Mac wrapper, passwordless SSH from the Spark to the Mac, and
the room→repo mapping. Copy `config.example.toml` to `config.toml` (gitignored) and fill in real
room IDs and repo paths. Deploy and day-2 ops (status / update / restart) run from the Spark
Control dashboard — see `docs/spark-control-integration.md` for the command contract.