skip to content
Replays

Runs and Patterns

Pattern Runs Take Over

The execution engine moves from hard-coded drivers to authored patterns and shared run views.

Gantry milestones

5 milestones 38 tasks 95 agents

17 plan 41 execute 45 review 3 fix

542k peak context

232k median execute

The execution engine moves from hard-coded drivers to authored patterns and shared run views.

31h 5m total 32m 9s per task

1h 23m plan 20h 38m execute 2h 5m review

1.2k edits 4.6k commands

claude harness

799.3M tokens in 4.9M tokens out

$793.14 nominal cost

This run changed Gantry's own execution vocabulary and then used that vocabulary to replace much of the hand-written driver stack. It starts with naming: a run executes a pattern, records tasks, and publishes replay facts under that language. It then builds the config machinery needed to ship patterns as editable defaults, implements the pattern language, moves map and ralph through that interpreter, extends the language with recursive sub-patterns for the remaining built-ins, and finishes by projecting pattern runs into the displays and attachment surfaces that users actually read.

The run did not land as a single clean abstraction sweep. The facts show repair work in the terminology pass, repeated replanning around the pattern-driver transition, and a later projection boundary where the read side could only expose what the write side had journaled. That is the useful part of the replay: the cut let small agents carry local contracts, while the ledger preserved the points where those contracts were not yet strong enough for later milestones.

How this walkthrough is structured

Feature

What did the run build and ship?

Gantry now ships pattern definitions, runs them through a generic interpreter, and renders run state through shared projection surfaces that survive in the current tree.

Build

How did Gantry structure the work?

The build proceeds from language settlement to shipped pattern execution, with the hardest boundary appearing where old drivers were removed and projection had to read the new journal shape.

Milestone 1

Terminology Settlement

6 tasks 20 agents 4h 3m wall time 278k peak context $122.62 nominal cost

The settled vocabulary remains visible across the code and docs: run status is the public term, tasks are the modelled work items, and replay is the corpus and site language. Compatibility aliases still exist where old operators or journals need them, including the MCP and snapshot surfaces. The replay tooling and authored web data now use the replay namespace, while framework-owned job vocabulary is left alone.

This milestone made the later architecture legible before changing the execution model underneath it. The cut split naming into engine, task hierarchy, run-sense cleanup, display naming, corpus replay, and docs so each agent could replace one vocabulary band without carrying the whole migration. The task hierarchy and replay corpus sprints both needed repair after a red gate, and the final prose cleanup was retried from a review note. That stress says the boundary was not the rename itself, but keeping compatibility and public surfaces coherent while the names moved.

Core Execution Engine

2 agents 42m 33s wall time 269k peak context 138.9k tokens out $20.15 nominal cost

The current tree still treats the run engine and pattern pin as the vocabulary of execution. Old pin files remain readable, but new run directories use the pattern language around `pattern.toml`. The map argument names that matter to users are also expressed in pattern and map-spec terms rather than the old overloaded job wording.

This sprint took the lowest vocabulary layer: the enum shape, the run engine, the on-disk pin, and map argument names. It was an appropriate first cut because later agents needed stable type names and file names before building any pattern language on top. The facts show a green boundary, so the rename and compatibility reader were contained at this layer.

Task Hierarchy

3 agents 46m 8s wall time 278k peak context 145.5k tokens out $17.78 nominal cost 1 fix

The task model remains the language used by projection, MCP, and run artifacts. Legacy sprint keys are still accepted where historical directories need them, but new display and wire surfaces speak in task paths. That makes the hierarchy available to arbitrary patterns instead of being tied to milestone and sprint guesses.

This sprint narrowed the work-unit migration to the ledger record and renderer vocabulary. It inherited the run and pattern names from the prior sprint, which made the task noun a local contract rather than another global sweep. Its gate went red and then passed after repair, locating the difficulty in keeping old sprint-keyed records resumable while the new task surface took over.

Terminology Clarity

2 agents 4m 9s wall time 226k peak context 10.6k tokens out $19.10 nominal cost

The MCP tool list now advertises `run_status` while retaining the old name as an alias. Config-source language in docs and command output follows the run-wide meaning rather than a stray job sense. In the live tree the compatibility comments are explicit, so the alias reads as history rather than as the primary API.

This sprint cleaned up the remaining places where job meant run, plus the configuration scope names that would confuse later pattern work. The brief gave the agent concrete public surfaces: MCP tools, window-title progress, override announcements, and config precedence renderers. It stayed green, suggesting the earlier vocabulary contracts were enough for this cross-surface sweep.

Stage Log View

2 agents 24m 17s wall time 161k peak context 75.6k tokens out $7.66 nominal cost

The TUI still has a stage-log modal and a stage-log snapshot route, and the old session-named flag remains accepted for compatibility. That leaves session reserved for harness and engine-session meanings. The feature is small, but it removed a confusing display term before the projection work reused the view.

This was a focused display rename rather than a behavior sprint. The agent was asked to finish the stage-log view, modal, overlay, and snapshot flag names while preserving the old flag as an alias. It passed green because the scope was a single view family with a clear legacy boundary.

Replay Corpus

3 agents 7m 55s wall time 211k peak context 15.8k tokens out $19.35 nominal cost 1 fix

The replay path still stands in the analysis scripts, authored TOML directory, Rails sync code, and served replay data. Public replay URLs use the new noun, while old job URLs redirect instead of breaking. The map that is writing this artifact uses those replay scripts, so this sprint is directly visible in the current workflow.

This sprint crossed the Rust, Python, and Rails boundary, so the brief correctly treated a green unit suite as insufficient. It renamed the corpus pipeline, web model, serving data, and analysis scripts together while keeping public redirects. The first gate went red and needed repair, showing that the hard part was the end-to-end replay contract rather than the isolated rename.

Documentation Polish

4 agents 1h 19m wall time 226k peak context 253.2k tokens out $29.96 nominal cost

The documentation now presents Gantry as runs, patterns, tasks, and replays in one vocabulary. Legacy compatibility is documented as compatibility rather than as the preferred shape. Some old plan documents have since moved or been archived, but the human-facing reference still reflects the settled terms.

This sprint closed the terminology milestone by sweeping prose and removing stale gantry-era integration text. It was intentionally late, after behavior and compatibility had settled, so the docs could describe facts rather than pending intent. Review produced a note and the sprint was retried, which fits a prose boundary where accuracy and consistency mattered more than code mechanics.

Milestone 2

Defaults and Checks

4 tasks 12 agents 3h 4m wall time 269k peak context $52.55 nominal cost

Gantry still ships default prompts and patterns through a managed config surface with provenance and reset behavior. Goal checks run against the live worktree after immutability verification instead of relying on a relocated snapshot. Those pieces are now infrastructure for the pattern registry and the goal pattern rather than standalone config work.

This milestone built prerequisites for pattern files before the pattern language depended on them. It separated bundled config discovery, provenance-guarded materialization, operator reset, and in-tree goal verification into small contracts. Only the materialization sprint needed an extra gate pass, so the cut mostly held cleanly across config and goal boundaries.

Embedded Config Tree

2 agents 11m 58s wall time 93k peak context 24.3k tokens out $3.40 nominal cost

The current config tree still contains bundled prompts and patterns as discoverable files. Tests and release tooling can inspect the shipped surface without relying on a hand-maintained prompt list. That makes adding a new bundled pattern a tree update instead of another special case.

This sprint replaced a compile-time prompt table with a walkable bundled tree. The brief made totality and reproducible build verification the agent's main contract, so later materialization could rely on an enumerable source. It stayed green, which matches a contained change to config discovery rather than to operator policy.

Materialized Defaults

2 agents 34m 20s wall time 200k peak context 96.8k tokens out $10.92 nominal cost

The provenance manifest and materialized default roots remain in the configuration implementation and docs. Global overrides now resolve through the same tree the materializer writes, and stale edited copies are treated differently from pristine mirrors. The behavior is visible whenever Gantry refreshes default prompts or patterns without clobbering an operator edit.

This sprint carried the policy-heavy part of defaults: pristine files refresh, edited files survive, legacy layouts migrate, and inert overrides are reported. The gate ran more than once even though it ended green, which points to the matrix of on-disk states as the risk. The unit was still small enough because it consumed the previous tree-walk contract.

Reset and Documentation

2 agents 15m 34s wall time 167k peak context 43.3k tokens out $7.85 nominal cost

`gantry config reset` still restores managed defaults from the bundled source and rewrites the manifest. The docs describe project, global, and bundled precedence, including the fact that reset discards operator edits on purpose. That gives pattern files the same reset story as prompts.

This sprint added the deliberate reset path only after materialization knew what it owned. The task was mostly contract expression: name the verb, require confirmation or force, reset managed files, remove legacy debris, and document the model. It passed green, so the reset work did not reopen the materialization matrix.

In-Tree Verification

2 agents 1h 1m wall time 269k peak context 97.4k tokens out $16.77 nominal cost

Goal checks now run from the worktree path after byte verification guards the frozen acceptance file. Resumed goal runs use the corrected path rather than preserving the older relocated behavior. The goal pattern later consumes this runner, so the verification guarantee still matters in the current code.

This sprint fixed the goal-check prerequisite by changing where script checks execute and how immutability is enforced. The brief was bounded to verification semantics, not goal polarity or loop behavior, which kept it independent of the coming goal pattern. It stayed green through root tests and the heavier goal checks.

Milestone 3

Pattern Language Core

11 tasks 35 agents 9h 42m wall time 542k peak context $326.04 nominal cost

The current tree still has the pattern language parser, interpreter, registry, built-in pattern files, map pattern route, and tests. Some files introduced as transition drivers have since been removed or folded into generic pattern modules, which is expected for a migration whose goal was to delete privileged routes. The surviving capability is not the intermediate file layout, but pattern execution as the main path.

This milestone built the flat pattern language and used it to move ralph and map off their compiled routes. The decomposition starts with file-based agent outcomes, then adds loading, identity, interpreter control flow, fan-out, built-in patterns, and driver deletion. Several sprints triggered replans, one ralph conversion stopped and restarted, and the removal phase forced a replan. The milestone note records remaining write-side and identity gaps for later milestones, so the boundary was productive but not complete.

File-Based Communication

2 agents 1h 11m wall time 498k peak context 240.1k tokens out $55.68 nominal cost

Agent outcomes are now represented by declared files and channels in the pattern machinery. The current sprint and milestone patterns read review, retry, blocked, and completion state from files rather than trusting final prose. This is why the interpreter can branch on durable state and why old text sentinels are no longer central.

This sprint removed fragile control flow based on an agent's final text before any interpreter rules depended on those outcomes. The brief named the outcome files and review verdicts that later pattern conditions would read. It passed green, giving the language work a concrete communication substrate.

Pattern Language Foundation

2 agents 27m 17s wall time 204k peak context 103.8k tokens out $9.60 nominal cost

The pattern language remains documented and implemented as real TOML under `config/patterns`. Discovery still resolves project, materialized global, and bundled tiers, and validation rejects bad references before a run starts. The tree also keeps a manual and spec for authors who write or fork patterns.

This sprint defined the pattern file format, loader, discovery tiers, and load-time validation. It was scoped to grammar and resolution rather than execution, which gave the following interpreter sprint a closed input shape. The gate ran more than once but stayed green after validation, fitting a foundation layer where edge cases are mostly malformed input.

Run Identity And Pinning

2 agents 19m 41s wall time 207k peak context 63.3k tokens out $10.65 nominal cost

Run directories still carry pattern pins and declared parameters, and the docs describe frozen pattern closure as part of run identity. The current implementation has since deepened that story beyond the first pin shape. The important survivor is that a resumed run reads its declared pattern semantics from the run record, not from a guessed driver enum alone.

This sprint attached pattern content and resume policy to run identity. Its brief asked for unconditional pins, declared done predicates, and dirty-worktree retention flags while preserving legacy resumes. It passed green, but later notes show that some real dispatch paths did not yet fold pattern identity as intended.

Pattern Interpreter Core

3 agents 40m 13s wall time 259k peak context 148.5k tokens out $16.20 nominal cost 1 replan

The interpreter is still one of the largest surviving pieces of this run. It executes agent, gate, goal-check, git, script, loop, fan-out, include, and sub-pattern steps through a world seam, while journaling pattern events for readers. Later work expanded it, but the core generic executor remains the path patterns use.

This was the central execution sprint for the flat language. The agent had to implement step dispatch, control flow, git operations, declared structure, progress descriptors, and the display write-side in one core. A replan followed the sprint, and the gate ran more than once, showing that interpreter mechanics touched enough downstream contracts to alter the remaining plan.

Ralph As Pattern

3 agents 43m 54s wall time 294k peak context 153.8k tokens out $24.22 nominal cost

The dedicated ralph pattern module from this phase has since been deleted or folded into the generic pattern route. The built-in `ralph.toml` still exists and describes the loop in pattern data. What stands is ralph as authored pattern behavior, not the temporary adapter that introduced it.

This sprint expressed ralph as a loaded pattern while leaving the compiled route in place for later deletion. The first attempt stopped and the sprint restarted, which matches a conversion that had to preserve abort, red-streak, sentinel, and resume behavior while changing the engine underneath. Keeping deletion out of scope made the retry bounded.

Fan-Out Engine

3 agents 33m 20s wall time 216k peak context 118.1k tokens out $12.65 nominal cost 1 replan

Fan-out semantics still exist in the interpreter and in the map pattern file. The current map pattern declares roster generation, classification, worker processing, repair, systemic quiescence, and checkpoint review as data. The older standalone fan-out engine files have been removed, but their behavior moved into the pattern path.

This sprint gave the interpreter the fan-out machinery that map would need: roster classification, per-task done predicates, repair, systemic rules, and checkpoint review. It triggered a replan, which fits a step kind that exposed write-side and resume assumptions to the rest of the milestone. The cut was still bounded because production map wiring waited for the next sprint.

Map As Pattern

3 agents 56m 52s wall time 367k peak context 214k tokens out $26.76 nominal cost 1 replan

The current tree still has `map.toml`, map-pattern execution code, map-spec validation, and replay map tooling. Map runs are now pattern runs with declared worker pools, generated rosters, repair, and checkpoint review. The old Rust map driver file is gone, which confirms the pattern route became the standing path.

This sprint made map the acid test for the flat interpreter by running real map behavior through the pattern route. It had to reconcile pool width, checkpoint rules, salvage, and partial behavior from the fan-out engine. The run facts show an extra gate pass and a replan, so map exposed the difference between journaling a declaration and executing the production semantics.

Ship Built-In Patterns

2 agents 9m 27s wall time 106k peak context 23.6k tokens out $3.71 nominal cost

Built-in pattern files are present under `config/patterns` and participate in the same managed default story as prompts. Operators can fork a pattern through the override tiers, and reset restores the shipped versions. The pattern docs describe that materialization model rather than treating built-ins as hidden Rust constants.

This sprint connected pattern files to the materialized default system from the previous milestone. Its contract was not to invent another registry, but to make built-ins refresh, reset, override, and document like prompts. It stayed green, showing that the config prerequisite held for pattern distribution.

Remove Ralph Driver

6 agents 2h 19m wall time 353k peak context 409.6k tokens out $78.02 nominal cost 2 replans

The compiled ralph driver no longer exists as the primary implementation. Ralph behavior is represented by the built-in pattern and by the generic interpreter path. Some tests and adapter files from the transition were later rewritten, but the absence of the privileged driver is the feature this sprint left behind.

This sprint was the first no-fallback deletion step. It routed ralph and persisted-label resumes through the pattern path, removed the compiled loop, and reconciled the suite around file-based done state. A recovery during replan and repeated review notes show that deletion was where earlier identity and behavior gaps became visible.

Remove Map Driver

3 agents 1h 21m wall time 542k peak context 307.6k tokens out $52.23 nominal cost 1 replan

There is no surviving `driver_map` implementation in the current tree. Map behavior is carried by `map.toml`, map pattern code, map-spec parsing, and interpreter fan-out tests. The feature therefore survives as consolidation: one pattern execution path instead of a map-specific compiled driver.

This sprint repeated the deletion move for map after the ralph removal clarified the pattern-only route. The brief demanded production wiring first, then removal of the old map driver and its unused fan-out engine, with constants relocated instead of stranded. A replan ran at the boundary, reflecting that the deleted route had been carrying behavior the pattern path had to prove.

Finalize Ralph Route

2 agents 32m 41s wall time 241k peak context 117.1k tokens out $17.50 nominal cost

Ralph remains a pattern-backed route with abort and stop behavior handled through the generic run machinery. The current tree no longer isolates this as the temporary ralph adapter, but the CLI and pattern registry still expose ralph as a selectable execution shape. That is the intended survivor of the acceptance sprint.

This sprint accepted the milestone by resolving ralph abort and partial-merge behavior after the driver deletion. Its brief asked the agent to decide from the spec and removed behavior, then make the pattern route consistent without reopening map. It passed green, giving the milestone a recorded acceptance point despite the plan-impact notes that followed.

Milestone 4

Language Extensions

9 tasks 24 agents 5h 57m wall time 444k peak context $166.15 nominal cost

The current tree includes recursive pattern files for build, milestone, sprint, goal, design, redesign, and map, plus a generic interpreter that can invoke included and nested material. The dedicated transition modules for build, goal, design, and ralph are gone, replaced by generic pattern execution. The docs now present patterns as the core execution model rather than as an alternate path.

This milestone extended the flat language into recursive patterns and converted the remaining built-ins. Its units progress from path composition to real sub-pattern execution, identity repair, shared gated task sets, build, goal, design, redesign, triage, and final driver removal. Several mid-milestone sprints needed replans or extra gates, and the milestone note says one identity guard still did not fire for some converted built-ins. The cut nevertheless isolated recursion, composition, and conversion enough for the final projection milestone to proceed with known caveats.

Task ID Journaling

2 agents 10m 17s wall time 118k peak context 30.9k tokens out $4.05 nominal cost

Pattern events now carry composed task paths that projection, MCP, and logs can read. Flat map and ralph runs still look flat, while nested patterns can add parent positions. This remains a key reason arbitrary-depth display can exist at all.

This sprint repaired the write-side shape needed before nested patterns could be trusted. The brief was narrow: preserve enclosing positions when loops or fan-outs journal task paths, while keeping flat built-ins unchanged. It passed green, making nesting a recorded path problem rather than a display guess.

Sub-Pattern Steps

2 agents 21m 39s wall time 255k peak context 84.2k tokens out $10.70 nominal cost

The interpreter now supports nested pattern invocation and included material. Built-in patterns use that capability to compose larger runs from shared units instead of duplicating the sprint pipeline. Current docs also specify load errors for cycles and private references, making sub-patterns an authoring contract rather than an internal trick.

This sprint made sub-pattern execution real instead of declarative. It had to resolve another pattern, re-point orchestration state, substitute parameters, scope counters, extend paths, and propagate termination back to the parent. The facts show a clean boundary, which suggests the previous path-composition sprint gave it the right substrate.

Pattern Identity

2 agents 22m 55s wall time 232k peak context 73.6k tokens out $10.62 nominal cost

Pattern identity and pinning remain part of the run-source model. Current docs describe a frozen closure and bound parameters as identity inputs, and `pattern.toml` is the source of declared semantics on resume. The later caveat means this sprint was necessary but not the final identity word.

This sprint returned to identity because the earlier pinning work had left a dead fold on real runs. The brief asked for a reachable pattern-into-identity guard and a coherent pin story across divergent built-in shapes. It passed green, although the milestone note later records that converted recursive built-ins still exposed a gap.

Gated Task Sets

3 agents 37m 52s wall time 273k peak context 137.6k tokens out $14.71 nominal cost 1 replan

The current `milestone.toml` and `sprint.toml` files carry the shared gated task pipeline. Design and build patterns consume that material instead of owning separate copies of the same ladder. The earlier standalone gated-task-set file is gone, but its abstraction survives as included pattern material.

This sprint extracted the shared execute, gate, repair, review, and commit loop into a parameterized sub-pattern. It gave a fresh agent one local job: express the common gated unit and expose knobs for prompt namespace, mode, relaxed baseline, and recovery defaults. The gate ran more than once and a replan followed, which is expected when a shared unit replaces duplicated driver behavior.

Build as Pattern

3 agents 49m 40s wall time 388k peak context 184k tokens out $31.49 nominal cost 1 replan

`build.toml` is now the default flagless execution route, and it invokes the shared milestone pattern for each unit. It declares levels, parameters, review handling, replanning, halt recovery, and empty-campaign behavior as pattern data. The old compiled milestone driver module has since disappeared, leaving the authored build pattern as the durable surface.

This sprint converted the default build itself into a pattern that can be invoked as a whole sub-pattern. The brief was careful about re-enumeration invariants, empty-campaign outcomes, and recovery caps because other patterns would soon call build recursively. An extra gate pass and a replan show that the hard boundary was preserving milestone behavior while making it data-driven.

Goal as Pattern

2 agents 1h 34m wall time 444k peak context 85.8k tokens out $40.84 nominal cost

`goal.toml` now describes the goal loop as pattern data: check, compose a cycle plan, invoke build, and stop on declared outcomes. The Rust goal support code that remains is runner and support machinery rather than the whole driver. This makes goal a recursive composition of patterns instead of a separate orchestration universe.

This sprint converted the goal loop after build could be called as a sub-pattern. The agent had to keep frozen goal checks and amber-baseline semantics while moving cycle planning into an agent step and cycle execution into the build pattern. The gate ran more than once, but no recovery was recorded, so the boundary held through verification.

Design and Redesign

2 agents 53m 46s wall time 321k peak context 134.6k tokens out $22.75 nominal cost

`design.toml` and `redesign.toml` stand as authored patterns that compose shared milestone material. The old design-specific driver modules are absent from the current tree. Design behavior is now represented as passes and prompt namespaces in pattern data, not as a separate compiled route.

This sprint moved design and redesign through the same pattern system. The brief also fixed a known clean-slate defect by making that pass read test content through an agent step rather than filename equality. Extra gate work appeared, but the unit stayed contained because the shared gated task set already carried the common pipeline.

Triage Verb

2 agents 21m 57s wall time 167k peak context 65.2k tokens out $9.15 nominal cost

The CLI still has a triage command that renders the selected pattern, when-to-use text, and registry notes. It uses the same discovery path as execution, including local or forked patterns. The command is documentation with teeth because it asks the live registry rather than a static help table.

This sprint added a command that reads the pattern registry and reports what pattern a plan would use. It was intentionally placed after the registry and recursive built-ins existed, so it could inspect the real selection surface. The facts show a green boundary with no repair recorded.

Remove Legacy Drivers

2 agents 23m 55s wall time 201k peak context 83.8k tokens out $11.08 nominal cost

The current tree no longer contains the dedicated build, design, goal, ralph, milestone, or map driver files that this migration set out to retire. Built-in behavior is shipped as pattern TOML plus generic interpreter code. That consolidation is the major surviving feature of the milestone.

This sprint completed the recursive conversion by deleting residual privileged drivers and accepting patterns as the only route. The brief also required recursive built-ins to ship through materialization and for old run modes to keep behavior through existing suites. It passed green, but the milestone note preserved the remaining identity and journal caveats for the projection work.

Milestone 5

Display Projection

8 tasks 22 agents 4h 9m wall time 338k peak context $121.16 nominal cost

Run projection remains a shared model consumed by stats, window titles, MCP artifacts, TUI code, and attach-related surfaces. It reads pattern journals, run rosters, pins, and legacy fallbacks to present task trees across display formats. Some acceptance gaps were later handled elsewhere, but the projection module and its consumers are still core display infrastructure.

This milestone changed the read side after the write side became pattern-driven. The units build a cold projection, live projection, cold status, MCP vocabulary, TUI rendering, headless prose, attach wire events, and final deletion sweep. The headless prose sprint went red and needed repair, while another sprint replanned the sidebar work; the final note says headless still had a depth gap that projection could not repair from absent write-side events. The milestone therefore documents both the projection model and the limits of what a reader can infer.

Projection Model and Cold Mode

2 agents 31m 38s wall time 272k peak context 112.9k tokens out $15.78 nominal cost

`projection.rs` still builds a run view from cold artifacts and marks legacy fallback behavior explicitly. It exposes task hierarchy, labels, state, and partial-merge capability as model properties. Later consumers depend on that model instead of each re-parsing the orchestration directory.

This sprint founded the read model by replaying a run directory from disk alone. The brief made it handle pattern journal paths, leaf roster events, pins, partial-merge capability, and legacy fallbacks in one cold entry point. The gate ran more than once, which fits a model that correlates several historical artifacts.

Live Projection

2 agents 26m 26s wall time 244k peak context 89.3k tokens out $15.26 nominal cost

Live event consumers can fold pattern events into the run view while the run progresses. Existing run-event delivery remains additive, so old journals keep replaying. The current TUI and attach paths can therefore share a model with cold status instead of maintaining separate display logic.

This sprint added the live side of the same model. The agent had to deliver pattern structure and progress events as they happened, then fold them into the same shape cold mode would later produce. It passed green, so live delivery did not require changing the frozen run journal.

Cold Status Migration

2 agents 16m 1s wall time 178k peak context 56k tokens out $7.28 nominal cost

Cold status now derives structure through the projection model rather than through driver-specific parsing. User-authored pattern structures and goal cycles can render through the same path as older directories. The public status and list surfaces keep their shape while their source of truth is shared.

This sprint moved the existing cold status command onto the projection model. Its scope was intentionally adapter-shaped: keep the neutral summary interface stable while deleting heuristics that guessed run shape from pins and rosters. It stayed green, suggesting the cold projection contract was strong enough for a user-facing migration.

MCP Task Vocabulary

2 agents 17m 23s wall time 167k peak context 55.6k tokens out $8.32 nominal cost

MCP now serves `list_tasks`, `run_status`, and task-path log selection from the run model. The legacy tool aliases still resolve for attached agents that learned old names. Logs are selected by task path, which lets user-authored patterns expose their own depth instead of being squeezed into milestone directories.

This sprint moved MCP onto the projected task vocabulary. It renamed sprint listing to task listing, kept the old name as an alias, and replaced milestone-shaped log selectors with task paths. It passed green, helped by the cold model already exposing the hierarchy MCP needed.

TUI Sidebar and Menu

3 agents 57m 33s wall time 338k peak context 200.9k tokens out $26.69 nominal cost 1 replan

The TUI still consumes run-view state for sidebar and progress presentation, and partial-merge affordances derive from declared capability. The code no longer needs a closed driver table to decide whether a run shape can merge finished work. User-authored patterns can appear with their own labels when the write side supplies them.

This sprint brought the projection into the interactive display. The brief asked for arbitrary-depth sidebar rendering, user-authored pattern labels, and partial-merge enablement from the model rather than from a driver table. A replan ran at the boundary, indicating the display found assumptions that the remaining projection work had to respect.

Headless Prose Renderer

3 agents 40m 56s wall time 274k peak context 122.6k tokens out $19.38 nominal cost 1 fix

Headless output has projection-aware code, but this run's own note says it was not fully migrated to arbitrary-depth pattern structure at the time. Later tree state still contains shared projection consumers, yet headless prose cannot be described as wholly solved by this sprint alone. Its contribution is the migration path and repaired renderer work, not complete acceptance.

This sprint tried to make headless output another projection consumer. The gate went red and was repaired, locating the difficulty in prose rendering rather than in the model itself. The final milestone note says the headless path still capped depth and reconstructed some tree shape from run events, so this row is an honest partial boundary.

Attach Wire Integration

2 agents 8m 34s wall time 125k peak context 20.7k tokens out $3.56 nominal cost

Attach-related code still carries additive run information, and remote consumers can reconstruct the same model shape as in-process readers. Existing frames remain compatible because the new data is added rather than substituted. That keeps web-view groundwork aligned with the projection model.

This sprint carried the projection events over the attach wire without replacing existing frames. The brief asked for additive structure declarations, task paths, and progress descriptors, plus golden-frame updates. It stayed green, making the remote consumer story a bounded serialization task.

Unified Pattern Rendering

2 agents 24m 25s wall time 177k peak context 77.7k tokens out $7.42 nominal cost

The current tree no longer depends on closed per-driver display metadata for the main pattern rendering path. Projection and declared capabilities are the shared source for display and partial merge decisions, with legacy fallback quarantined for older directories. The acceptance work left a cleaner display architecture even where later fixes refined the edge cases.

This acceptance sprint checked that one pattern could render through TUI, headless, cold status, and MCP, then deleted dead structure metadata. It also had to preserve frozen journal wire keys and old replay behavior. The sprint finished green, while the milestone note still names write-side limits that acceptance could not solve from the read side.