# 0.5.3 — Post-cap polish + git-isolated runs

A grab-bag cut shipping the punch list from the weekly-cap pause: thirteen TASKS.md entries collapsed into seven coherent slices. Headline pieces: every background run now lives on its own `wonderland/<run_id>` branch (with optional auto-merge back to source); Alice stops polluting the story pool with test-shaped stories now that she has a real `test_scenario` decision mode for tea-party threads; the new-run screen got a two-row layout redesign that gives future run-config knobs somewhere to live.

### Dashboard

- Returning to the dashboard from a live/historical run now repopulates features + runs immediately — no need to click a filter chip or leave + return to see fresh state.
- Features view collapses duplicate tickets to the latest copy (same title, highest ticket number wins). Manual prune still works for the on-disk copies.

### Workflows

- M1 (Caucus Race) now runs on the phased orchestrator with a single `stories` phase. Override `max_rotations` to size the design pass — bigger for broader brainstorming, smaller for tightly-scoped follow-up runs.

### Tickets

- Per-ticket queue button now respects `Blocked by:` dependencies. Trying to queue a blocked ticket surfaces a notification naming the offending deps instead of failing silently — satisfaction = the dep ticket is `in_progress` or `done`.
- Blocked tickets pick up a 🔒 marker in the Features tree so the gate is visible at a glance.

### Projects

- New `prime_directive` field on Project — auto-captured from the first non-empty directive landed against the project. Subsequent runs see a "★ prime" row at the top of the preset table that drops the canonical directive straight into the composer.

### Cast

- Alice gains a `test_scenario` decision mode for tea-party (M6) threads — she ships persona-anchored happy-path scenarios instead of test-shaped stories that polluted the story pool. M6 now carries an explicit convenor_directive locking the artifact shape: Hatter does edges/failures, Alice does happy paths, neither ships `story` in tea-party.

### Substrate

- `category` field on `DirectivePreset` and `Workflow` — case-insensitive string used to group entries in the new-run-view picker. Bundled directives are pre-tagged (`demo`, `utility`); bundled workflows are pre-tagged (`design`, `implementation`, `legacy`, `utility`). Uncategorized entries cluster under `other` at the bottom of their section. Workflow-picker grouping wires up alongside the new-run-view redesign.
- Four new bundled `utility` directives for project-underway work: `data-layer-audit`, `home-view-baseline`, `observability-baseline`, `test-coverage-audit`.

### Updates

- Update-check modal — TUI hits PyPI on startup and pops a small modal when `wonderland-ai` has a newer release. Includes the install command and a "don't check again" checkbox (persisted to `UIConfig.check_updates`). Best-effort, silent on network failure.

### Live watch

- Artifact browser correctly scopes per parallel iteration. Previously the most-recently-opened thread won every artifact attribution, so only the last iteration's artifacts showed up under each row. `ArtifactShipped` now carries the carrying utterance's `thread_id`; old event-log replays fall back to the legacy heuristic.

### New-run screen

- Two-row layout redesign. Directives row up top (preset picker · composer · description + save controls), workflows row below (workflow picker · meetings list with enable checkboxes · workflow summary), small run-controls strip beneath (project root · budget · Go/Cancel). Replaces the legacy "presets above / settings below" stack — gives a stable foundation for additional run-config knobs.
- Workflow picker is now a DataTable grouped by category (same shape as the directive picker). Per-meeting enable checkboxes capture state today; runner-side filtering wires up in a follow-on.

### Git integration

- Every background run now opens a `wonderland/<run_id>` branch off the operator's current HEAD at start, commits the working-tree diff at end, and (when "Auto-merge branch on success" is checked in NewRunScreen) attempts a fast-forward merge back to the source branch on clean completion. Falls back to leaving the branch in place for manual resolution if the source moved during the run. Source branch + merge outcome land on `status.json` so the dashboard can surface them.
- Caterpillar already had `git_status` / `git_diff` access via the shared Tools; the new branch isolation means his diff cleanly shows the run's deliverable instead of accumulated cross-run state.
