Skip to content

Releases: infimalabs/spice

v0.34.0

Choose a tag to compare

@anthonyrisinger anthonyrisinger released this 18 Aug 04:45

Highlights

  • Stabilized agent lifecycle and worktree integrity: aborted command surfaces now reap foreground process trees, Python polling no longer rewrites the Git index, activation preserves intentionally removed hook selections, and correct checkout skill bytes remain untouched.
  • Made Serve lanes steadier and easier to read by preventing settled mosaics from rebuilding or jittering during idle same-thread startup and containing fenced code blocks within message width.
  • Repaired operator communication by making reply parsing and acknowledgment delivery reliable, rendering ACK prefixes correctly, and shortening spoken hash-like values without changing their textual output.
  • Tightened workflow safeguards by rejecting dependency edits involving deferred oops rows, avoiding redundant hook-configuration writes, and documenting the exact mounted-command syntax for digest-bound release application.
Task-level changes

Changes by project

CLI Release

  • Align release apply-digest documentation with mounted command syntax. (5b23259)

Hooks Configuration

  • Suppress redundant writes for already-correct hook configuration. (3c6a600)

Serve Web

  • Contain fenced code blocks within lane message width. (efa30dc)
  • Prevent idle-lane agent startup from rebuilding a settled mosaic. (d3cc9e1)
  • Prevent same-thread idle-lane startup from jittering a settled mosaic. (ce97224)

Hooks Coexistence Python

  • Made Python agent activation preserve an explicitly removed worktree hook selection. (ef12a6d)

Studies Product

  • Curate and land the dirty product documents without signal loss. (f83e245)

Task Dependencies

  • Reject dependency edits involving oops rows. (3ac8d71)

Mail Reply

  • Repair Spice reply parsing and acknowledgment delivery. (198f114)
  • Fixed reply-card ACK prefix rendering. (2fc1c2c)

Lifecycle Gitpoll

  • Prevent Python pollers from rewriting Git index. (9670c32)

CLI Speech

  • Truncate spoken hash-like strings of 40 or more characters. (ad6dc3e)

Lifecycle Skills

  • Keep Rust checkout skill bytes stable across Python activation. (65aae2d)

Lifecycle Process

  • Reap foreground agent command trees when command surface aborts. (a2b7536)

Package Notes

  • PyPI release: spice-harness==0.34.0
  • Release commit: f2eade84
  • Commit range: v0.33.0..f2eade84
  • Commit source: first-parent history grouped by Task-Project metadata
  • Release tag: v0.34.0

v0.33.0

Choose a tag to compare

@anthonyrisinger anthonyrisinger released this 12 Aug 00:11

Highlights

  • Mosaic message boards now stay visually stable across hydration, compaction retention, fused-agent backlog arrivals, same-topology resizes, and cross-lane startup activity, with structural replay bounded to the affected compaction epochs.
  • Steering and task continuity are more reliable: explicit operator work survives dry allocator guidance, immediate Codex ACKs retire correctly, restart collisions are repaired, and a lane can reclaim its own dirty-tree task without losing work.
  • RTK integration now requires 0.45.0 and uses tighter, evidence-backed rewrite routing with reliable rg path labeling, while shell instrumentation runs exactly once at the initial agent-command boundary.
  • Repositories can disable individual built-in pre-commit gates while retaining configured replacement gates, with faster provenance checks and stronger Python 3.14 and Rust-analysis compatibility.
  • Deployment diagnostics now identify packaged configuration skew directly, and extension/process operations receive a 180-second deadline for long-running tools without premature timeout failures.
Task-level changes

Changes by project

Lifecycle Rtk

  • Raise the RTK floor to 0.45.0. (affd145)
  • Retire the common-group route for rg flags on the grep frontend. (831f5e2)
  • Correct the false claim that a typed grep reaches the rtk grep frontend. (151420e)
  • Narrow the rg native route to the one shape that loses paths. (7ec756a)
  • Made RTK rg path labeling unconditional and retire filesystem_search. (7380d9a)
  • Bound the RTK rewrite selector and teach the wait audit local bindings. (d5a7681)

Lifecycle Shell

  • Made shell instrumentation one-shot at the initial agent command boundary. (a840e2c)

Lifecycle Deployment

  • Diagnose packaged-layer unknown keys as version skew, not operator typos. (4309636)

Tests Precommit

  • Fixed predecessor Rust complexity parsing for apostrophes in comments. (1e839c7)
  • Fixed Python 3.14 tree-sitter crash in predecessor complexity gate. (d119050)
  • Verify installed and repository Rust magic-number gate convergence. (9d7e256)

Task Allocator

  • Prevent dry allocator guidance from overriding explicit operator requests. (058d92a)

General

  • Raise extension tool deadline to 180 seconds. (a227dd1)

Serve UI

  • Soften dry allocator messaging in drain mode. (03f93d3)
  • Replace remaining smile emoji with chili pepper. (d01ce62)
  • Preserve mosaic placement across same-topology width changes. (0b7f5cf)
  • Use the mosaic content width as the sole ResizeObserver change authority. (e363c33)
  • Render mosaic geometry from the ResizeObserver completion frame without delayed debounce. (dd1d1f4)
  • Retain deterministic autonomous geometry provenance for mosaic full replays. (4e3cd82)
  • Eliminate cross-lane mosaic jitter from global startup and render effects. (66861f7)

Serve Port

  • Raise extension and process call timeout from 120 seconds to 180 seconds. (a2ba072)

Hooks Policy

  • Allow repositories to disable built-in pre-commit gates while retaining configured replacements. (539492b)

Hooks Performance

  • Eliminate repeated Git provenance work in Python doctor. (cad82c4)

Mail Reliability

  • Trace and surgically fix repeated ACK collision after restart. (b36dbc9)

Lifecycle Ack

  • Process Codex JSON assistant items for immediate ACK retirement. (5551a3b)

Serve Messages

  • Align mosaic retention cutoffs to compaction floors. (92fcedb)
  • Bound interleaved structural replay to the affected compaction epoch. (449b44b)

Tests Browser

  • Added explicit help and argument validation to the release browser smoke runner. (ec41718)
  • Align hydration replay floor with bounded mosaic reconciliation. (b3d99b3)

Task Claim

  • Allow dirty-tree no-op reclaim of the lane’s current task. (bb61f5e)

CLI Codex

  • Audit Codex JSON driver anomalies shown in operator screenshots. (00c7d6c)

Package Notes

  • PyPI release: spice-harness==0.33.0
  • Release commit: da53fa33
  • Commit range: v0.32.0..da53fa33
  • Commit source: first-parent history grouped by Task-Project metadata
  • Release tag: v0.33.0

v0.32.0

Choose a tag to compare

@anthonyrisinger anthonyrisinger released this 07 Aug 19:11

Highlights

  • The reference-transaction guard now protects work that is genuinely published rather than work that merely looks published: it resolves each branch's true upstream from that branch's own local remote/merge pairing instead of @{upstream}, which an agent lane deliberately aims back at the branch itself. Ordinary amends, rebases, and soft resets of unpublished commits are no longer refused, while a rewind that would discard upstream-merged commits now is.
  • The same guard stops trusting the old value git reports on the hook's stdin. Git reports the value the caller declared, and git update-ref <ref> <new> declares none, so that field arrives as the zero OID and a rewind read as a branch creation; the guard now reads the branch tip from the ref itself during the prepared state, closing a path that silently moved a branch backwards over published history with no diagnostic.
  • A declared upstream that cannot be resolved — an unfetched remote, a renamed or pruned remote, a bare URL in branch.<name>.remote — is now told apart from a branch that tracks nothing at all. Appends still pass, because they abandon nothing whatever the upstream holds, so an unfetched lane is never stranded; a rewind is refused with a message naming the unresolvable ref, so an unreachable remote can no longer read as a clean bill of health.
  • Images produced by Codex tools render in Serve again. When Codex moved its shell tool from function_call_output to custom_tool_call_output, every screenshot it produced was reclassified as a picture the assistant had sent, and Serve minted an embedded URL its own fetcher then refused — a broken picture sitting in the operator's lane. The presenter and the fetcher now consult one shared addressability rule, so the two answers cannot disagree.
  • A Drain lane that stops while still holding a claim is restarted onto that same task, so a lane that ices mid-task recovers the row it was working instead of idling until an operator notices.
  • An empty task board now reads as a completed drain that names each parked category and why it is parked, instead of reading as a lookup failure or as work the agent failed to pick up.
  • spice release composes the generated sections of the release notes at publication against the real release commit, and refuses a candidate file that still carries the draft banner, still holds the generated Highlights placeholder, or whose curated region contains nothing but banner and headings — an uncurated release can no longer ship.
  • policy.admission is now admitted into the typed configuration registry, so it is resolved, validated, and reported like every other typed configuration key.
  • spice agent activation no longer advances the git tree as a side effect of delivering its packet, and the post-tool hook keeps inline ACK keys out of the durable transcript.
Task-level changes

Changes by project

Lifecycle Release

  • Cut the 0.31.2 patch release. (b2f3673)
  • Compose generated release-notes sections at publish time, not curation time. (e1a49e4)
  • Refuse curated release notes that carry no Highlights. (508aad0)
  • Updated docs/release.md for publish-time note composition. (5eb86e7)

Lifecycle Config

  • Admit policy.admission into the typed configuration registry. (79edd5b)

Serve Agent

  • Retire inline ACK keys from the durable transcript in the post-tool hook. (2127f7c)

Serve Images

  • Serve cannot fetch back Codex images delivered through custom_tool_call_output. (c00d8c0)

Lifecycle Activation

  • Stop the activation packet from advancing the git tree. (49e4f2a)

Lifecycle Contract

  • Teach agents that backgrounding a command and yielding ices the lane. (a2b64ef)

Lifecycle Restart

  • Restart a stopped Drain lane onto the task it still holds. (2b76869)

Task Drain

  • Made an empty board read as done rather than as a mistake. (4481fee)

Hooks Refguard

  • Resolve the reference-transaction guard against the true upstream. (ea449bf)
  • Refuse a rewind git reports with a zero old-value. (ccb2ace)
  • Distinguish an unresolvable upstream pairing from no pairing at all. (41fc70a)

Package Notes

  • PyPI release: spice-harness==0.32.0
  • Release commit: 6af111b4
  • Commit range: v0.31.2..6af111b4
  • Commit source: first-parent history grouped by Task-Project metadata
  • Release tag: v0.32.0

v0.31.2

Choose a tag to compare

@anthonyrisinger anthonyrisinger released this 04 Aug 16:26

Highlights

  • Release notes can no longer silently lose the task inventory. The check-release-notes gate used to refuse only notes that exactly matched the generated draft, so a curated --notes-file carrying Highlights alone passed every gate and published without the per-task inventory every release carries. That happened to 0.31.1 and had to be repaired by hand. The gate now requires the generated collapsed section to survive curation verbatim and the Highlights placeholder to be gone, and it stops the release outright if the draft it checks against has no inventory to compare, rather than passing every candidate.

  • Config admits behavioral taste rules. A [taste] table now accepts named rows of words and message evaluated by the Rust taste judge, alongside the existing policy.taste.words lexical replacement map that stays Python's.

Task-level changes

Changes by project

Lifecycle Release

  • Check-release-notes accepts curated notes that drop the mandated task inventory. (b1b102d)

General

  • Admit behavioral taste configuration. (0495f14)

Package Notes

  • PyPI release: spice-harness==0.31.2
  • Release commit: 517c71b4
  • Commit range: v0.31.1..517c71b4
  • Commit source: first-parent history grouped by Task-Project metadata
  • Release tag: v0.31.2

v0.31.1

Choose a tag to compare

@anthonyrisinger anthonyrisinger released this 04 Aug 07:18

Highlights

  • The RTK command rewriter is now trustworthy or inert. Six defects in the agent shell's rg/grep rewrite path are closed: ERE alternation was silently dropped and returned exit 1 instead of erroring, argv quoting was dropped so spaced patterns and paths split apart, the dialect guard misread egrep as a basic-regex search and missed a narrowing when rg or egrep appeared as an argument, and a rewrite that split an argument on a non-space character survived both guards. An rtk that fails its own faithfulness probe now stops rewriting entirely rather than merely stopping advertising itself.

  • Operator steering survives a refused restart. A restart refusal used to park steering permanently with no redelivery once the hold expired. Lapsed redelivery now gets a wake of its own instead of relying on the ensure it had just emptied, and the parked-lane timer's termination and end-to-end lapse drive are covered.

  • Launch outcomes report what actually happened. The rapid-death restart guard distinguishes a clean short run from a crash, and Codex launch activity is read from the rollout rather than stdout, which had recorded every launch as 0 activity.

  • The agent command hot path got much cheaper. The wrapper no longer spawns 19 git subprocesses per agent command.

  • Long-running gates are legible while they run. The task-done suite seam is teed, so a green run that takes minutes is visibly alive, and spice dev pytest names the path or node id it could not find instead of reporting that no tests ran.

Task-level changes

Changes by project

Lifecycle Wrapper

  • Wrapper hot path spawns 19 git subprocesses per agent command. (025b021)

CLI Wrapper

  • Rtk rg rewrite silently drops ERE alternation and returns exit 1 instead of erroring. (2466071)
  • Rtk argv rewrite drops quoting so spaced patterns and paths silently split. (7b43e6d)
  • Dialect guard misreads egrep as a basic-regex search. (83f4f55)
  • Dialect guard misses a narrowing when an argument is spelled rg or egrep. (483deba)
  • Rewrite that splits an argument on a non-space character survives both guards. (f31c9bf)

Lifecycle Launch

  • Rapid-death restart guard cannot tell a clean short run from a crash. (0cfa976)
  • Codex launch outcomes record 0 activity because scan_launch_log reads stdout, not the rollout. (6467ab5)

Serve Agent

  • Restart refusal parks operator steering permanently with no redelivery when the hold expires. (31e1e0e)
  • Lapsed refusal redelivery needs a wake of its own, not the ensure it emptied. (4d7e8a7)
  • Cover the parked-lane timer's termination and its end-to-end lapse drive. (5f8c8d8)

Hooks Pytest

  • Spice dev pytest names the path or node id it could not find instead of reporting no tests ran. (418f34f)

Task Done

  • Tee the suite-seam subprocess so a long green run is visibly alive. (921f5c4)

Hooks Rtk

  • Made an unfaithful rtk stop rewriting, not just stop advertising. (34c7244)

Package Notes

  • PyPI release: spice-harness==0.31.1
  • Release commit: 75c54a2d
  • Commit range: v0.31.0..75c54a2d
  • Commit source: first-parent history grouped by Task-Project metadata
  • Release tag: v0.31.1

v0.31.0

Choose a tag to compare

@anthonyrisinger anthonyrisinger released this 29 Jul 00:46

Highlights

  • Serve now stays coherent across live uv tool runtime replacement and
    reliably resumes fleet claim, start, and release loops after the replacement.
  • Trusted repositories can opt into signed, capability-scoped standing
    configuration grants shared across linked worktrees, while protected
    fast-forwards and Serve preflights retain executable-config safeguards.
  • Mounted release plans now run through the authored-input plan gate with
    process-local authority, exact notes validation, and stronger installed
    runtime proof.
  • File-shape flex ceilings now follow the authored content's Git provenance
    across linked worktrees, merges, and baseline restoration instead of varying
    with the actor that scans the file.
Task-level changes

Changes by project

Serve Web

  • Keep Serve coherent across uv-tool replacement. (b68701c)

Serve Agent

  • Repair fleet-wide Serve claim/start release loop. (dca7570)

Studies Hardening

  • Switch all 😊 to 🌶️. (1bf7145)

Lifecycle Release

  • Capture validated Serve runtime wait audit repair. (6aa975b)
  • Refuse releases whose notes still equal the generated draft. (d7e1a07)
  • Catalog Serve runtime replacement blocking contracts. (4f0979d)
  • Made mounted release plans executable through the authored-input gate. (0403766)
  • Keep mounted release authority process-local. (c4eb251)

Hooks Trust

  • Design opt-in fleet auto-approval for trusted repository config updates. (59b1e6f)

Studies Fileloc

  • Derive file-shape jitter from change author provenance. (7dd01c4)

Tests Shellhooks

  • Eliminate expected wrapper-warning noise from the test suite. (dc84ad7)

Package Notes

  • PyPI release: spice-harness==0.31.0
  • Release commit: dc84ad76
  • Commit range: v0.30.1..dc84ad76
  • Commit source: first-parent history grouped by Task-Project metadata
  • Release tag: v0.31.0

v0.30.1

Choose a tag to compare

@anthonyrisinger anthonyrisinger released this 28 Jul 20:52

Highlights

  • Release verification now proves the installed artifact that users receive.
    The release check validates the matching registry-installed package, carries
    the predecessor manifest into post-release rehearsals, and applies authority
    migration proof only when the schema actually advances.
  • Configuration hardening remains intact across the patch release. The
    layered-configuration mutation ratchet is restored, and retired command
    spellings have been removed from every surface that named them.
  • Serve survives editable source replacement loops. Runtime version
    detection remains valid while an editable checkout is replaced underneath a
    running development workflow.
Task-level changes

Changes by project

Studies Hardening

  • Let release check validate the matching registry-installed release. (4397908)
  • Restored the layered-config mutation ratchet before the next release proof. (c81e4d2)
  • Restored the carried predecessor manifest for post-release rehearsals. (7d15601)
  • Made authority migration proof conditional on schema advances. (f8b28d9)
  • Retire the old spellings from every surface that names them. (ad1fa6e)

Serve Web

  • Made Serve runtime version resilient in editable source loops. (1970c7e)

Package Notes

  • PyPI release: spice-harness==0.30.1
  • Release commit: 2e5bd004
  • Commit range: v0.30.0..2e5bd004
  • Commit source: first-parent history grouped by Task-Project metadata
  • Release tag: v0.30.1

v0.30.0

Choose a tag to compare

@anthonyrisinger anthonyrisinger released this 28 Jul 17:51

Highlights

  • Repository-delivered commands now stop at an operator trust boundary.
    Executable tracked configuration requires digest-pinned approval before it
    runs, operator-owned configuration and receipts live in worktree Git state,
    disabled builtins are visible, and malformed command mounts no longer take
    down the CLI.
  • Configuration is now one strict, uniformly layered contract. Root
    spice.toml is the sole tracked source; every packaged default reaches its
    consumer through layering; false disables inherited registry entries; and
    unknown keys, invalid choices, or scalar-for-table substitutions refuse with
    actionable provenance.
  • Authored-input mutations now use one inspectable command-plan protocol.
    Bare authored-input verbs preview ordered plans, --apply executes a matching
    plan, stale digests refuse, receipt-writing verbs reverse through --unapply,
    and append-only receipts make interruption and mounted-command effects
    recoverable without accepting caller-supplied authority documents.
  • Task allocation follows declared priority and dependency impact. A
    prerequisite inherits the highest priority it transitively unblocks, wider
    downstream graph position outranks locality and incidental tags, and the
    allocator hot loop remains immediate for board-and-command-line intent.
  • Standing correctness and rendering defects are closed. Editable-install
    finder hooks no longer become phantom namespace portions, message code spans
    are stashed out of band, lock status observation no longer interferes with a
    concurrent run, contention names its holder, and data: links are refused
    without breaking inline data images.
  • The new contracts are held by executable gates and current documentation.
    Taskwarrior 3 is declared and diagnosed up front, packaged-default gates
    compare real values in both directions, withdrawn command spellings and paths
    are retired, and the full-suite baseline is clean.
Task-level changes

Changes by project

Studies Hardening

  • Rank ready work by priority and graph position. (a573ce2)
  • Stop coercing non-path sys.path entries into namespace portions. (b0ae6a1)
  • Contain a mount that collides with a builtin command. (7d1d9ec)
  • Stash code spans out of band in message rendering. (4d749cc)
  • Gate the default on whether the input was authored. (ad35ffd)
  • Reject unknown configuration keys at load. (67ed747)
  • Restored a clean full-suite baseline. (0483fc8)
  • Stop the lock status probe from failing concurrent runs. (8eb5184)
  • Honor false as the disable spelling everywhere. (d80eddb)
  • Declare the Taskwarrior 3 requirement. (23f05e0)
  • Reconcile authored-input defaults with hook and publication reads. (246cd9c)
  • Supersede the initialization preview and reversal record. (d8b5c7e)
  • Read repository configuration only from spice.toml. (a24773a)
  • Align the command-plan decision with the reconciled authored-input criterion. (938c71a)
  • Made invalid choice values refuse instead of defaulting. (f6b26c3)
  • Keep the allocator hot loop applying by default. (e58bb58)
  • Made preview the default for every authored-input verb. (3e53797)
  • Move operator-owned configuration into the worktree git directory. (d401ba2)
  • Made the spice.toml cutover semantic and purge retired instructions. (2cd5647)
  • Grow the configuration CLI to the surface the loader reads. (c242241)
  • Refuse tracked ancestor redirections during operator-state migration. (79369a0)
  • Reverse a plan through unapply and retire the opposite verb. (c322db0)
  • Made the packaged-defaults gate compare values. (bf9ec66)
  • Approve repository configuration before it can execute commands. (14bbf57)
  • Refuse the dry-run flag with the release that replaced it. (83de52f)
  • Guard the system configuration scope. (fae0bca)
  • Made the reverse packaged-default inventory complete. (3a6cad5)
  • Made the plan a command protocol. (22b5282)
  • Approve wrapper groups without narrowing what they may shadow. (8f97793)
  • Refuse silent gate disablement from tracked configuration. (f81ed60)
  • Close the authored-input default inventory gaps. (7bda6f6)
  • Close layered disabled-builtin approval bypass. (64c598c)
  • Mediate mounted plan previews and require destructive plan digests. (56cdedb)
  • Reconcile the agent guidance with the approval and apply refusals. (2e950ec)
  • Record receipts as an append-only operation log. (4e51182)
  • Canonicalize equivalent builtin spellings before layered merge. (133072a)
  • Establish a repository trust boundary. (9072b14)
  • Gate the classes that no existing gate measures. (58e0167)
  • Drop the data scheme from the link proxy allowlist. (d8e625b)
  • Refuse a scalar that overwrites an inherited table. (58ac111)
  • Added apply authority to the prepared-release handoff. (327c511)
  • Made every packaged default layer uniformly. (5874244)
  • Distinguish Spice source checkouts from client spice directories. (6e20936)
  • Reconcile the task-document contract with preview and apply. (5c8caf1)
  • Persist and reverse mounted command plans without child support. (464bfa1)
  • Use one source-root contract for generated taskrc. (82b0f7a)
  • Reconcile the inventory table with the inventory module. (0a23bf1)
  • Documented the disable and layering rules once. (2ae1b51)
  • Removed deleted inventory from the packaged-default manifest. (8139797)
  • Restored gate integrity. (b5671ee)
  • Close the mounted receipt effect-to-append crash gap. (e74e1c9)

Package Notes

  • PyPI release: spice-harness==0.30.0
  • Release commit: 94e997de
  • Commit range: v0.29.0..94e997de
  • Commit source: first-parent history grouped by Task-Project metadata
  • Release tag: v0.30.0

v0.29.0

Choose a tag to compare

@anthonyrisinger anthonyrisinger released this 27 Jul 05:58

Highlights

  • A pending authority-store migration can no longer strand a lane. The
    server shuts down when the shared authority store moves ahead of it, agents
    refuse to start while a migration is pending, and lanes that a pending
    migration would strand are refused work up front rather than after the
    fact. The migration contract now has an accepted design record.
  • Task phases finish correctly when integration moves the checkout. Phase
    completion reloads in the checkout the landing selected, and both
    continuation arms derive their identity from durable claim and review state
    instead of carrying it on the wire. When a continuation does fail, the
    landing stays authoritative and the recovery command pins the checkout it
    must run under and names the shell that can run it.
  • A durable write no longer reports itself as a failure. spice task done
    reports what landed instead of exiting 2 after the phase advance, and
    spice task review's post-write presentation goes through that same
    landed-work boundary.
  • rtk declines rg rewrites it cannot answer faithfully. A rewrite that
    would change the search dialect under the caller, or forward an rg-only flag
    to grep, is now declined rather than silently reinterpreted — and the health
    probe measures that a rewrite preserves the answer.
  • Sticky gate ledgers stop latching on runs that were never accepted.
    File-loc ledgers persist only for a commit the gate actually accepted, and
    failure text names a stale latch so the remedy is discoverable.
  • Scheduling and landing repairs. Phase advance un-defers the task whose
    claim it releases, task doctor names a waiting task that strands its
    pending dependents, and landing recovery distinguishes accidental
    restoration from intentional ownership.
  • Serve browser lifecycle readiness budgets raised from 20s to 30s, and
    subsumption recording now runs in the project test runtime so it works from
    a disposable checkout.
Task-level changes

Changes by project

Lifecycle Deployment

  • Shut the server down when the authority store moves ahead of it. (1b63155)
  • Refuse to start agents while a schema migration is pending. (6921748)
  • Refuse work to lanes a pending migration would strand, not only ones it already stranded. (a2ac5f3)
  • The deployment migration contract has no accepted design record. (7bdf85f)

Task Landing

  • Branch landing recovery between accidental restoration and intentional ownership. (dc856d0)

Task Done

  • Made spice task done report what landed instead of exiting 2 after the advance. (89a854c)

Serve Smoke

  • Raise Serve browser lifecycle readiness budgets from 20 seconds to 30 seconds. (5566e22)

Studies Subsumption

  • Run subsumption recording in the project test runtime. (0dd421e)
  • Subsumption recording fails in a disposable checkout. (daec74d)

Task Scheduling

  • Phase advance un-defers the task whose claim it releases. (d4e6882)
  • Task doctor names a waiting task that strands its pending dependents. (b59fa92)

Task Review

  • Route task review's post-write presentation through the same landed-work boundary. (1695b7d)

Studies Fileloc

  • Persist sticky gate ledgers only for a run the commit actually accepted. (cede8c4)
  • Name the stale sticky latch in gate failure text so the remedy is discoverable. (e26503d)

Hooks Rtk

  • Decline an rg rewrite that would change the search dialect under it. (da5c545)
  • Decline an rg rewrite that forwards an rg-only flag to grep. (14d4a4c)
  • Made the rtk health probe measure that a rewrite preserves the answer. (20d2b90)
  • Made the RTK verification command reproduce the fidelity check it now reports. (dccaaa7)

Lifecycle Reload

  • Reload task phase completion after integration changes the checkout. (0322a96)
  • Derive review continuation identity from durable review state. (de7e21b)
  • Derive completion continuation identity from durable claim state. (8c50376)
  • Pin the checkout in the phase continuation recovery command. (0147116)
  • Name the lane that can run the continuation recovery command. (9b60295)

Lifecycle Release

  • Operator guides predate two releases of the surfaces they describe. (987f38b)
  • Restored the prior-release upgrade rehearsal to something it can fail. (de3ad6a)

Package Notes

  • PyPI release: spice-harness==0.29.0
  • Release commit: a400c7d8
  • Commit range: v0.28.0..a400c7d8
  • Commit source: first-parent history grouped by Task-Project metadata
  • Release tag: v0.29.0

v0.28.0

Choose a tag to compare

@anthonyrisinger anthonyrisinger released this 27 Jul 02:48

Highlights

  • Rebuilt Serve around coherent lifecycle, task-board, and lane-chrome
    authorities, improving automatic launch convergence, refresh correctness,
    browser rendering, and live-state performance.
  • Unified Claude and Codex transcript handling on a typed, lossless reader and
    reducer pipeline with safer cursoring, rotation recovery, provenance, and
    cross-surface parity.
  • Hardened durable state upgrades: team, ACK, and maxim authority stores now
    fail closed on incompatible schemas, preserve canonical facts in place, and
    rebuild disposable projections explicitly.
  • Added fleet-safe deployment and release guarantees, including
    drain-before-schema-bump coordination, installed-runtime identity checks,
    real predecessor-wheel rehearsals, and read-only release validation.
  • Strengthened operator feedback and wire contracts across task cards,
    directive ACK/NACK history, metrics, payload validation, strict browser
    typing, and failure diagnostics.
Task-level changes

Changes by project

Lifecycle Release

  • Guide release-notes curators to skip features added and then reverted within the same release window. (6502d9e)
  • Stop the release artifact gate from dirtying the tree its own next step requires clean. (c75b2d6)
  • Give the release gates a read-only entry point so verifying a tree cannot bump or publish it. (381255f)
  • Collapse the second copy of the release gate sequence that prepare and release still inline. (5d4b8b5)
  • Record the authority and projection storage classes as invariants. (a941abc)
  • Reconcile the reset-projections name and its help text. (1fbb235)
  • Documented the projection store as operator-visible state. (57a6013)
  • Collapse migration ladders to one forward step. (e08fa6c)
  • Rename the acronym expansion from Simultaneous to Software. (dc8454b)
  • Replace the stale projection recovery command in operator docs. (1576932)
  • Retune the migration maxims to target accumulated arms. (ddf4e47)
  • Pin every authority version to exactly one shape. (3d69441)
  • Adopt pre-versioned team authority databases. (e270145)
  • Rehearse upgrade from every supported prior release. (85905de)
  • Land lifecycle fixes through the installed CLI, not just the branch. (44a4b67)
  • Gate the in-place upgrade inside the artifact-producing release proof. (530e149)
  • Made the carried-predecessor refusal citable when the manifest contradicts itself. (3727c10)
  • Made the installed-artifact upgrade proof preserve every governed store. (89cb2e1)

Task Identity

  • Fixed stale doc wording: base62->base52 codec docs and gitshadow->shadow filename ref. (911fa29)

Serve Autostart

  • Added a short (~3s) settle wait before auto-starting an agent when 2+ ready tasks trigger zero-wait. (de0c97b)

Lifecycle Launch

  • Unify agent-launch tree update onto the quiet fast-forward safe advance (no raise, no mangle). (3b8d22e)

Serve UI

  • Promote spice.png to the first-page hero at a web-safe size. (bb9b2e7)
  • Find why task activity in the message stream never updates the top pill structures. (632da3d)
  • Find why the Serve metrics SVG renders no series. (adace46)

Task Tooling

  • Task show renders the complete annotation record instead of silently truncating to the most recent 6. (db76d80)

Task Store

  • Build the executable behavior ledger for every Taskwarrior touchpoint behind tw.py. (f474030)
  • Remeasure coordination read/write physics once the revision-owned projection is live. (355e42d)

Serve Web

  • Define the narrow faceted lane-chrome wire contract. (6f2a77e)
  • Close lane-chrome identity and topology ownership leaks. (fcaa0dd)
  • Made ServeLaneStore own lane-chrome state transitions. (d9241a8)
  • Removed duplicate claimed-task authority from lane chrome. (dc72b1a)
  • Pin the lane-chrome facet epoch to a total order the browser reducer can trust. (570624b)
  • Build the pure server lane-chrome projection assembler. (4f20c35)
  • Migrate every server lane-chrome producer to facet deltas. (ed0bf73)
  • Enforce lane-chrome facet epoch monotonicity at the first producer. (0f4b4bb)
  • Route browser chrome updates through one reducer and delete dual writes. (e325204)
  • Date the team-store lane-chrome facets so a remade store still supersedes. (a27f570)
  • Date the task-board facet by both stores it counts in. (7bc0ce7)
  • Prove lane-chrome convergence and remove superseded authorities. (23915ce)
  • Correct the grant-free send comment to the canonical pending facet. (3b245d2)
  • Stop a pre-epoch transcript stamp from blanking every lane. (387ac94)
  • Carry the wire contract past ingress into the functions that read it. (1777eef)
  • Made the generated wire types able to enforce required fields in the browser lane. (0b628ea)
  • Burn down the 145 checkJs diagnostics blocking --strictNullChecks in the serve browser lane. (5c19269)

Serve Lifecycle

  • Introduce the target-scoped Serve lifecycle reconciler runtime. (a5758bc)
  • Harden lifecycle future publication and cancellation. (ee4c6d1)
  • Move automatic lane evaluation into the lifecycle authority. (83fac8d)
  • Publish task and inbox watcher signals to the lifecycle reconciler. (fe8d465)
  • Bound lifecycle timer wake identities across retries. (7baa213)
  • Seal lifecycle retry bookkeeping behind the authority. (8aeba22)
  • Route HTTP and live-bus send intents through the lifecycle reconciler. (a12c92f)
  • Release the explicit launch grant when its intent never reaches its decision. (31d4761)
  • Converge renewal handoff and successor identity in the lifecycle authority. (1232d83)
  • Made inventory and message payloads pure lifecycle projections. (e21753b)
  • Converge automatic launch identity inside lifecycle authority. (a9f47df)
  • Align reused-thread identity test with explicit persistence path. (b2dca01)
  • Delete superseded lifecycle coordination and prove end-to-end convergence. (dec1874)

Serve Latency

  • Build the revision-coherent Serve task-board observation core. (c2d5deb)
  • Derive open-board filters and active claims from shared rows. (b8b9032)
  • Derive task cards, review pressure, and drained metrics from shared rows. (c340ffa)
  • Cross worktree inventory onto one task-board observation. (9eaa24a)
  • Cross lane messages and on-demand metrics onto the task observation. (9f39492)
  • Converge Serve on the task observation and prove one-read behavior. (4d93f71)

Serve Team

  • Migrate team authority schema without destructive resets. (1ee89c2)
  • Preserve source identity and derive renewal lineage at read time. (c65b4d2)
  • Made directive send and ACK records the canonical metric facts. (18be395)
  • Reject archive-first directive attachment collisions. (8b17b8a)
  • Project transcript activity from typed durable transcript facts. (edcc720)
  • Made transcript activity projection and checkpoint recovery atomic. (7444ba7)
  • Scope the checkpoint-loss reset to the source it can account for. (be0e05c)
  • Read task lifecycle metrics from canonical task-plane facts. (4e7a4b7)
  • Isolate remaining observations in a disposable projection store. (ffb0033)
  • Rebuild the Serve projection file when it disappears under a live process. (88c7997)
  • Prove full rebuild parity and remove obsolete observation paths. (fbeeef4)
  • Resolve the duplicated fifteen-field agent identity record in the team plane. (8a3273a)
  • Stop the partial identity write from silently erasing renewal lineage. (b471234)

Session Transcript

  • Define the closed typed transcript event vocabulary with provenance and multiplicity. (60aac4e)
  • Decode Codex transcript lines into the same typed events and settle the context-usage fact. (5b22408)
  • Decode Codex custom tool outputs into typed transcript events. (aea1894)
  • Declare dialect line-hint and signal hooks on AgentDriver with a shared adapter conformance suite. (cd3b8e6)
  • Enforce explicit tool output discriminator at every producer. (f4223c3)
  • Define the assembled-message reducer core and classified-span model. (8ed57d3)
  • Hold the forward cursor before an unterminated final transcript line. (b0e8086)
  • Cross sessions analysis and command records onto substrate typed events. (881a371)
  • Build the differential parity harness for every interpreter crossing. (e45ed05)
  • Cross watchdog prose judgment and ACK archival onto the reducer. (d5735cb)
  • Cross session forensics turn folding onto the reducer. (84096fc)
  • Cross serve message envelopes onto the reducer. (d5f553b)
  • Cross mail-watch ACK extraction and launch-history replay onto the reducer. (162bc91)
  • Keep reducer failure spans out of session turns. (ebf73e1)
  • Carry keyed-run polarity onto directive spans. (cb7e06f)
  • Prove transcript-plane convergence and remove superseded interpreters. (0515dae)

Session Transcript Reader

  • Extract the shared transcript reader engine from the serve cursor/window scanner. (5417b8a)
  • Project sparse reverse transcript chunks exactly once. (54eff2a)
  • Harden the reader engine with a fault-injection contract battery. (d69916a)
  • Unify the three transcript timestamp parsers onto one shared primitive. (10464ec)
  • Exercise independent rotation identity and deterministic append overlap. (af41709)
  • Fold the remaining ad-hoc ISO timestamp readers onto the transcript primitive. (a8bbbf5)
  • Made cursor identity the only forward transcript read shape. (d43ef34)
  • Bind reader records to the lossless typed event stream. (747cc1e)
  • Migrate the usage-fact transcript scans in effort accounting onto the reader engine. (7ee8669)
  • Migrate mail/watch onto the reader engine with a driver-supplied prefilter hook. (f128331)
  • Fold the sessions forward and 64KB reverse line readers into the reader engine. (0880e79)
  • Migrate the serve images and launch-history scans onto the reader engine. (00a55db)

Tests Isolation

  • Stop the layered-consumer config patch leaking into hook repo-root discovery. (9d2a7f3)
  • Patch consumer bindings, not defining modules, in monkeypatched tests. (38005b2)
  • Made the suite's agent-driver pin survive the environment ...
Read more