Spice Agent Implementation Ledger
This directory is the canonical, append-only source of phase status and evidence. Repository roadmaps link here and must not duplicate status.
| Phase | State | Exit evidence |
|---|---|---|
| 0 — product and repositories | In progress | repository governance, exact toolchain, offline build, quality gate |
| 1 — Spice-native composition | Complete for preview | generated static DI, auto-configuration, cross-repository continuation |
| 2 — deterministic kernel | Complete for preview | 841edd3; deterministic lifecycle, interaction, snapshot, race/fuzz proof |
| 3 — provider and coding tools | In progress | generated cross-repository continuation and opt-in live acceptance |
| 4 — daemon and TUI | In progress | provisional local protocol baseline; host/reconnect proof pending |
| 5 — runtime plugins | In progress | execution-outcome and kernel plan-lease prerequisites complete; plugin host/conformance pending |
| 6 — architecture proof | Planned | signed v0.1.0-preview.1 distribution |
| 7 — stress prototypes | Planned | permission, SQLite, alternate UI, two-worker experiments |
| 8 — stabilization | Planned | external authors and frozen compatibility policy |
Exact commits and command output are recorded only after the corresponding gate has run. A phase is not complete because code exists; every exit criterion in its document must be green on Windows and Linux where required.
Phase 2 preview boundary
The immutable model/tool contracts, typed provider failures, dispatcher capability snapshot, call/progress correlation, bounded independent event replay, terminal durability, and engine shutdown lifecycle are implemented. They remain pre-1.0 contracts and will be exercised by the independent OpenAI provider and coding-tool repositories before stabilization.
Interaction completion and snapshot import/export are bounded preview contracts
with deterministic round-trip, resume, cancellation, panic, observer-failure,
race, replay-gap, identifier-reuse, and tool-plan-fingerprint tests. Commit
841edd3 passed make verify in 29.9s at 86.2% repository coverage. Durable
SQLite recovery remains the isolated Phase 7 stress proof.
Phase 1 preview completion
Canonical @Stage, @Tool, and @ModelProvider descriptors and their
authorized v1alpha2 process are implemented using only generic Spice provider
and bean-metadata contributions. The in-module CompositionProof application
now commits and executes the real generated graph, selection matrix, ordered
collections, canonical tool map, cleanup/rollback, typed override, ownership,
diagnostic, module, and source-mapping proof. Provider, coding-tool, and TUI
repositories now contribute through explicit auto-configuration, and
distribution commit 4cfd19a proves the generated cross-repository compiled
continuation without a registry or RuntimeGraph. Exact reproducible commands
and asserted core output are recorded in
evidence/phase1-composition.md. This closes
Phase 1 for the preview; pre-1.0 contract changes remain governed by the later
stress and external-author phases.
Current Phase 3 boundary
The provider and coding-tool repositories, including the opt-in live test path,
are implemented and independently repinned. The generated cross-repository architecture proof is green at
spice-agent-coding commit 16244f5: Windows make fast was 15.2 seconds,
make check was 18.2 seconds, and make verify was 65 seconds at 86.0%
coverage. A clean WSL2 Linux/amd64 clone at that commit ran Go 1.26.5,
make tools-bootstrap in 1.35 seconds, and full make verify in approximately
75 seconds with zero lint findings, no reachable vulnerabilities, race tests,
and vendor-offline acceptance; the worktree remained clean. Phase 3 is not
complete because opt-in live OpenAI acceptance has not been run with supplied
credentials. Distribution commit 4cfd19a (including follow-up 1dbef3d and
exact provider 4beed383 / coding-tools 17cbef3b) proves real provider HTTP-request
cancellation, exact model/turn/run terminal events, and secret scans across
events, generated source, and manifests; make verify passed in 73.8 seconds
at 86.4% coverage with zero lint findings, no reachable vulnerabilities, race,
and vendor-offline checks. Offline scripted acceptance remains the mandatory
default.
Current Phase 4 boundary
common/v1 and engine/v1 now define the provisional repository-owned Protobuf boundary
and handwritten fail-closed validation for negotiation, health, run creation,
ordered bounded replay, cancellation, stale interactions, and safe snapshot
transfer. The repaired boundary advertises server-owned definitions, encodes
and validates stable-owner reconnect CAS, keeps auth in transport metadata, separates pending
interaction snapshots/deltas from run events, pages replay atomically, and
preserves snapshot run identity through suspend/resume/import. Buf lint,
FILE-level breaking comparison against
schema-baseline, exact local Go-tool generation, and byte-identical freshness
are normal offline gates. Unknown fields, old/new peers, capabilities, overload,
replay gaps, stale clients, snapshot version skew, generated service shape, and
protocol fuzzing are covered. No daemon, listener, transport authentication,
managed startup, or TUI implementation is claimed by this slice. Reproducible
commands are recorded in
evidence/phase4-protocol.md.
The wire boundary advertises protocol 1.0-1.1 and makes snapshot transfer a
minor-1 snapshot-authority-v1 capability. Envelopes require a canonical
HMAC-SHA256 authority claim; construction requires a trusted signer and import
requires keyed verification. This is a wire and cryptographic seam, not an OS
key store or daemon-host implementation.
The first host-foundation slice now implements the transport-independent
daemon named interface: exact immutable definition catalogs, root-owned
stable-client reconnect CAS, bounded per-client idempotency with panic-safe
uncertain outcomes, and a stable-client-partitioned PendingHub. Explicit run
bindings preserve accepted prompts through run-terminal races; per-client
complete-first revisions, reconnect fencing, explicit global/per-client
budgets, and joined observer shutdown keep discovery isolated and bounded.
Its deterministic concurrency, shutdown, overflow, aliasing, capacity, and
secret-containment evidence is recorded in
evidence/phase4-host-foundation.md.
No RPC server or local transport is claimed by this foundation.
Session ownership now adds a bounded, reconnect-prioritized commit/stream gate.
It fences mutation commits, joins old stream senders before a successful epoch
advance, bounds every waiting claimant and active stream set, and drains those
resources during shutdown without holding the store lock across waits or
cancellation callbacks. Evidence is in
evidence/phase4-session-gates.md.
The local run-authority slice now supplies the OS-backed ownership boundary:
private persistent scope/key material unrelated to endpoint tokens, signed
durable run records, stable never-unlinked run locks, keyed suspended-snapshot
matching, non-retryable consumed imports, and terminal tombstones. Import host
ordering remains explicit: prepare authority and kernel resources, persist
IMPORTING, commit the prepared kernel run, then persist ACTIVE. Evidence is
strengthened by retained directory identity, handle-relative filesystem
operations, full-ancestry rollback defense, concurrent first-open
serialization, exclusive suspended ownership and local-resume invalidation,
explicit close/drain lifecycle, and process-crash tests at suspension and both
import durability boundaries. It is
recorded in
evidence/phase4-run-authority.md.
The kernel’s inert local-resume reservation now closes the ordering gap between
that authority and suspended execution: reserve the exact kernel boundary,
persist authority ACTIVE at the next local generation, then commit the
reservation. A live abort restores the byte-identical snapshot; cancellation
and shutdown remain latched until the decision. Evidence is in
evidence/phase4-kernel-local-resume.md.
The public transport-neutral client package now defines immutable negotiated
connections and sessions, explicit event/interaction control frames, bounded
secret-safe structured values, snapshot/health contracts, and lossless typed
recovery using only the Go standard library. It deliberately does not claim a
gRPC adapter, authentication, discovery, or OS endpoint. Evidence is in
evidence/phase4-client-contract.md.
The independent TUI repository now exposes an immutable UI-neutral session
port and a public terminal shell while keeping Bubble Tea and presentation
messages internal. Commit 82adb45 generates its renderer, theme, ordered key
bindings, terminal I/O, accessibility settings, and shell through Spice. Its
external acceptance constructs the generated application, starts it, runs the
actual injected shell, and stops it on normal exit. Full verification passed in
158.4 seconds at 90.1% handwritten-product coverage, including generation
freshness, shuffled/race tests, and vendor-offline execution. This proves the
compiled presentation boundary; it does not yet claim a daemon client adapter,
managed startup, reconnect, or real Windows/Linux terminal workflow.
Transactional PrepareStart and PrepareResumeSnapshot handles now provide the
kernel seam required for authority-before-publish hosting. They acquire and
validate the exact execution resources without engine registration, events, or
execution; one commit supplies the run-root context, while abort releases once.
See
evidence/phase4-kernel-preparation.md.
The schema is not the final Phase 4 freeze: the host slice must prove these
repaired contracts over real RPCs, enforce same-daemon run tombstones and
OS-backed import-authority lifecycle, and ensure RPC contexts never own run lifetime
before the baseline can be declared stable.
Phase 5.0A execution prerequisite
The shared tool contract now requires effect and replay-safety metadata,
canonicalizes capabilities as an unordered set, and fails closed on read-only
definitions that request mutation-capable operations. Tool.Execute separates
model-visible problem results from bounded correlated infrastructure errors.
The dispatcher rejects ambiguous, untyped, mismatched, and replay-unsafe error
combinations while preserving typed errors and normal cancellation checks.
This is a prerequisite shared by compiled and runtime tools; it does not add a
plugin protocol, dynamic plan source, generation lease, or retry engine. Exact
acceptance commands are listed in
evidence/phase5-tool-execution.md.
Phase 5.0B immutable tool-plan prerequisite
The kernel now leases one immutable dispatcher generation per run through the
generic stage.ToolPlanSource boundary. Acquisition precedes mutation, snapshot
resume leases the exact recorded ToolPlanID, PlanIdentity combines compiled
bean identities with tool definitions, and release occurs exactly once before
terminal selection. Static embedded applications retain their existing
constructors through StaticToolPlanSource. Ordered decorators fail closed and
cannot change or bypass the snapshotted definition set. This is a kernel seam,
not a plugin protocol or host implementation. Exact acceptance commands are in
evidence/phase5-tool-plan-leases.md.
Current infrastructure blocker
A Windows clean-clone audit of all five repositories passed Go 1.26.5,
make fast, offline vendor tests with GOWORK=off GOPROXY=off GOFLAGS=-mod=vendor, and govulncheck. This is not Linux or macOS evidence and
does not close Phase 0. A separate WSL2 Linux 6.18.33.1 audit with Go 1.26.5
linux/amd64 used fresh public clones: all five repositories passed make fast
and explicit GOWORK=off GOPROXY=off GOFLAGS=-mod=vendor go test ./....
Fresh-clone full verification still needs a source-preserving dependency
bootstrap. After cache preparation, spice-agent passed in 32.2s and
spice-agent-coding passed in 6.7s; the other repositories exposed bootstrap
or go.sum preservation gaps being corrected separately. This is not macOS
evidence and does not close Phase 0. GitHub Actions jobs remain queued without
starting; diagnosing organization billing/policy requires unavailable
admin:org authority. Core/tools Dependabot gRPC alerts remain open and must
not be dismissed, although their tools modules already pin v1.82.1 and local
govulncheck is clean.
Development catalog commit a8990e3f adds topological concurrent
five-repository fast verification, an exact compatibility snapshot, and
vendor-only macOS amd64/arm64 compile proof; its make verify passed at 85.6%
coverage. Organization-profile commit 3ee0039d records reusable workflow and
Actions-queue governance. macOS remains compile-only: real race, UI, process,
and runtime acceptance still requires a macOS runner.
Completed evidence
- Organization governance/profile:
.github11e9470. - Development catalog/workspace:
36a3bf5;make verify98s, 85.5% coverage. - Phase 0 catalog/governance follow-up: development
a8990e3f(85.6% coverage, concurrent five-repository fast and macOS vendor compile), organization profile3ee0039d. - Core foundation:
spice-agent218ffbb. - Professional quality baseline:
829dd0a;make verify27.6s, 87.7% coverage. - Hardened deterministic kernel:
eaf1918;make verify23.9s, 88.4% coverage. - Completed preview kernel:
841edd3;make verify29.9s, 86.2% coverage. - Spice-native composition proof:
1f07284;make verify137.3s, 86.2% coverage. - OpenAI provider final repin
88c3044;make verify29.25s, 89.3% coverage. - Coding-tools final repin
653b405;make verify33.19s, 87.7% coverage. - TUI foundation through
spice-agent-tui28a89dc. - Reference distribution through
spice-agent-coding2809a1a. - Generated Phase 3 architecture proof:
spice-agent-coding16244f5; Windows and clean-clone WSL2 Linux full verification green at 86.0% coverage. - Current Phase 3 distribution proof:
spice-agent-coding4cfd19a(provider4beed383, coding tools17cbef3b);make verify73.8s, 86.4% coverage.
Active follow-up slices are not recorded as completed evidence until their repositories publish green commits.