Skip to content

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 26 Aug 04:18
· 373 commits to main since this release

kind: release
version: v0.9.0
since: v0.8.0
tasks: 59

v0.9.0

This release adds remote support, gives the system a configuration doctor (and a consultant who can act on its findings), reworks the documents experience, and makes most surfaces — launching runs, Now, roster, budget, settings, navigation, and errors — say more in fewer words.

Working with a remote

  • New pull, push, and pull-request verbs, each with a receipt showing what actually happened.
  • The system is now aware of the remote: it notices when the repository has drifted, audits orphaned work, and can recover it.
  • Recovery by cherry-pick now preserves the original commit, so recovered work keeps its identity.

Accepting runs

Two failure modes around accepting work are fixed:

  • Accepts no longer fail when a staging exclusion leaves excluded paths staged in the index — this was breaking every non-fast-path accept.
  • Retrying an accept after a failed rebase no longer dies on "nothing to commit."

Configuration

  • A new configuration doctor checks your project configuration and reports concrete findings: the exact key, the proposed value, and the reason. Its output is fully deterministic, and it no longer double-reports a finding when a project has both a root and a frontend package.json.
  • The consultant can now act as a configuration expert: it answers configuration questions and applies fixes directly, including list values and whole sections, and settings nested three levels deep that the configuration previously refused to write.
  • The consultant's offer to review your configuration now actually appears when you open a project.
  • Configuration-related failures now show one actionable card instead of none, or two competing cards for the same finding.
  • Concurrency limits (maximum concurrent runs and per-provider caps) can be changed from the desktop without a restart.
  • Settings are reorganized around the questions you actually ask. The category menu stays in place as you move between rooms, every room is reachable, and the old seat dropdown is gone — the Roster board is the single place to manage ducklings.

Documents

  • The documents surface now narrates the chain: three stages, each stating who writes and what you approve; sections show their live state; proposals are presented as decisions.
  • Rejecting a document stage now tells you the reason, clears the stale stage marker, and offers the revise action as the next step — in the app, the CLI, and MCP.
  • The documents page is properly framed: the header stays in place while you read, a finder takes you to a section, and the filters reflect the true state.
  • The documents health line no longer reports a false all-clear when the underlying trace and check report breaks.
  • The document detail pane shows verified claims, summary-first cards, and puts the redraft machinery behind a single plain line.
  • The Requirements tab renders spec sections correctly, with no section shown twice on one page.

Launching and watching runs

  • Launching work is now a guided modal: each mode card explains when to use it and estimates the cost from this project's own history, and seats are prefilled from the roster.
  • The Now card leads with the conclusion and verdict, with technical detail tucked into an evidence drawer. The four unexplained terms are gone, the amber warning beside "passed" now says what it means, and the decision buttons are never lost.
  • The Now page no longer hides a second, duplicated running list behind a utilities drawer.
  • The spent card now shows wall-clock time — how long you actually waited.
  • Every run now answers "why does this run exist": the requirement sentence that asked for it, quoted, with the chain as a breadcrumb. Runs with no chain say so honestly.
  • Task cards carry their origin line — the plan-section sentence that bore them, clickable — and tasks with no origin say so.
  • The runs list now paginates: honest counts, filters preserved, newest first.
  • Marking work landed no longer asks you for forensics the system can do itself, and its always-visible fields no longer invite you to fill in records by hand.
  • New [render] setting in project.toml: screenshot captures are attached to runs at the gate and shown in the evidence drawer. Two bugs that discarded these captures on failure are fixed.

Roster and budget

  • Roster suggestions now show their arithmetic, ducklings get evidence portraits, and an empty seat explains itself.
  • Budget ceilings now show what actually happened against them: hits last month, a suggested adjustment when one is warranted, and where the money went. Zero-hit rows are hidden, and money is formatted consistently everywhere.

Layout, navigation, and errors

  • Desktop navigation moves to a stable left sidebar rail. The sidebar itself is decluttered — the app name the window bar already shows, the duplicate project card, and a bare branch label that read as jargon are all gone, and the configuration block is back to a single entry.
  • The floating utility panel (autopilot, next steps, recent runs) is gone. Its jobs moved to the surfaces that own them: next steps live on Now, recent runs in Records, and the autopilot control is in the sidebar.
  • Every room has a door: Roster, Skills, and Projects are all reachable, and the Roster board displays in full inside the Settings frame instead of truncating and losing seats.
  • The roster filter chips are labeled, and the Skills header is no longer an implementation dump.
  • Errors are consistent across all views: one shared error card everywhere, and messages no longer leak raw API paths or error-type prefixes around otherwise-perfect sentences.

What shipped

M-001

  • T-136 Signpost discard on document-stage reject with a reason and surface the revise verb in next[], MCP/CLI, and desktop (8064f02)
  • T-138 Config API writes slices and tables (fed7459)
  • T-139 Config doctor: deterministic findings (4e1f240)
  • T-140 Remote awareness, orphan audit, and recovery (29d424e)
  • T-141 Remote verbs: pull, push, PR with receipts (0a27c01)
  • T-142 Consultant as configuration expert, and the settings surface (4bb86f9)
  • T-143 Staging exclusion leaves excluded paths STAGED: a dirty index blocks the accept's rebase, so every non-fast-path accept fails (f5e72c8)
  • T-144 acceptWorktreeRun retry is not idempotent: after a failed rebase, the retry re-runs the commit step and dies on 'nothing to commit' (6ab35bc)
  • T-145 ConfigFailureCard can never render: config_amendment events are not emitted on the run-failure path it listens for (d45f57b)
  • T-146 config_amendment emission is untested: no Go test verifies ChatStart emits amendment events when the doctor has findings (47de4b8)
  • T-147 Adopt-end and project-open consultant offers are unwired or untested (adopt-config-offer, project-config-offer) (be31388)
  • T-148 ValueKey misses 3-level nested map keys (mode_seats.pair.implementer): doctor finding keys cannot round-trip through the config API (f0b99dd)
  • T-149 config doctor emits duplicate findings when both root and frontend package.json exist (41b40f0)
  • T-150 The spent card omits wall clock: the run's most expensive dimension — the human's waiting time — is the one not shown (e08ff37)
  • T-151 Mark Landed asks the user for forensics the system can do itself, and its always-visible fields invite record falsification (c5a39eb)
  • T-152 Concurrency knobs have no desktop surface: max_concurrent_runs and per-provider max_concurrent live only in the engine TOML and need a restart (276e3d8)
  • T-154 The failure-path config_amendment event renders two competing cards: Apply-amendment and ask-the-consultant for the same finding (1294163)
  • T-155 Timing-sensitive tests flake under parallel gate load: TestShellContextKillsTheWholeGroupAtTimeout failed a gate for an unrelated one-line diff (e61b862)
  • T-156 ProviderSet cap-raise poke path is untested: no test verifies a queued run is admitted when a provider max_concurrent rises (bce87af)
  • T-157 Fake engine drifted behind the app: six newer endpoints unknown, breaking the documented frontend dev flow (67d9b8a)
  • T-158 The Now card speaks four unexplained terms to the novice, and the amber warning beside 'passed' says nothing (9b337e2)
  • T-159 Roster filter chips are unlabeled and the Skills header is an implementation dump (c17b7f6)
  • T-160 User-facing errors leak developer debris: raw GET /v1/ paths and an ApiError: prefix around otherwise-perfect plain sentences (707bf47)
  • T-161 Browser dev against a REAL engine fails silently: no CORS, misleading 'session died' banner (a4bc1b7)
  • T-162 TestProjectRecoveryDoors/cherry-pick-chain flakes under concurrent gate load (f7e93c5)
  • T-163 Roll the ErrorCard out to the remaining views — only Skills adopted it (f6378f3)
  • T-164 WaitingCard/Now duplicate a zero-dollar money helper and declare a function between imports (1c32c20)
  • T-165 killrepro test marker is shared across concurrent gates: parallel runs could pgrep each other's sleeper and falsely fail (a788ef7)
  • T-166 Pin committer/author dates in cherry-pick recovery so the orphan SHA is preserved (8bfec63)
  • T-167 Now decides through an evidence drawer: conclusion and verdict up front, technical detail behind it, decision buttons never lost (e518c34)
  • T-168 Launching work becomes a modal that pre-answers everything: mode cards with when-to-use and cost estimated from this project's history, seats prefilled from the roster (ff52f78)
  • T-169 Roster suggestions show their arithmetic, ducklings get evidence portraits, and an empty seat explains itself (45f4fb8)
  • T-170 Budget ceilings show what actually happened against them: hits last month, a suggested adjustment, and where the money went (4d34e05)
  • T-171 The desktop nav moves to a left sidebar rail — a stable spine for a four-lane app (7db02d4)
  • T-172 Budget history polish: hide zero-hit ceiling rows, gate the suggested adjustment, use the shared money formatter (121b8c5)
  • T-173 The documents surface narrates the chain: three stages that say who writes and what you approve, sections with their live state, proposals presented as decisions (8338e50)
  • T-174 Every run answers 'why does this run exist': the requirement sentence quoted, the chain as breadcrumb, and no-spine stated honestly (f1207cc)
  • T-175 Task cards carry their origin line: the plan-section sentence that bore them, clickable — and orphans say so (8c7ba0f)
  • T-176 The Requirements tab renders spec sections, and SPEC-008 renders twice on one page (f734ec3)
  • T-177 The pre-sidebar utility panel (autopilot, next steps, recent runs) is homeless in the new layout (2c333f3)
  • T-178 The documents surface has no working frame: the header scrolls away, and finding one section means reading them all (eece0f9)
  • T-179 Sidebar top stacks three redundancies: app name the window bar already shows, a project card the selector already covers, and a bare branch label that reads as jargon (5d7aa27)
  • T-180 Restore the cherry-pick SHA assertion: T-166 pinned commit identity but nothing proves it (8d8505f)
  • T-182 The sidebar's config block grew to five entries (Ducklings appeared) — the target is one (512dc03)
  • T-183 T-182 hid Roster, Skills and Projects without giving them a door — the rooms are unreachable (f3c9bf2)
  • T-184 The settings space reorganizes around the user's three questions — mechanical re-housing, Roster intact (ec72d03)
  • T-185 The render contract: [render] in project.toml, captures attached to runs at the gate, shown in the EvidenceDrawer (8d84c9e)
  • T-186 Vitest pins for the dissolution criteria: no utilities drawer, one running list on Now, next steps native (7a53597)
  • T-187 Documents detail pane: verified claims, summary-first cards, redraft machinery behind one plain line (13efe31)
  • T-188 The runs list deserves pagination — honest counts, filters preserved, newest first (ad47c78)
  • T-189 Documents closes: a real ledger behind the health line, one finder, and filters wired to truth (106d633)
  • T-190 The legacy seat-dropdown roster embedded in the Ducklings room duplicates the Roster board — two control surfaces over the same state (3e9fbae)
  • T-191 Settings expands no sidebar subnav: one door outside, all corridors inside via the category menu (8ab6018)
  • T-192 The Settings frame must hold its rooms: category menu persists, rooms render inside — and the menu gets real visual hierarchy (5b68ef5)
  • T-193 The documents health line reports a false all-clear: '0 breaks — the spine is intact' while trace/check reports 16 (c9fd886)
  • T-194 The SSE stream never connects in the browser dev flow: EventSource cannot send the bearer header (74e6739)
  • T-195 The framed Roster board is strangled: mode sections truncate and seats disappear inside the Settings frame (7cae73c)
  • T-196 The render capture script gives the app server no time to boot: one goto, then it dies (3204a18)
  • T-197 Render captures die twice: the dev server's descendants hold the pipes, and the engine discards PNGs on any dirty exit (89378d5)