Repository navigation
v0.4.0 — Windows parity, lifecycle hooks, per-ticket workspaces
First release with day-one Windows support, a lifecycle hook surface, and a
per-ticket git workspace model. The 7-stage workflow becomes the supported
default (Todo / Explore / In Progress / Review / QA / Learn / Done), and
headless runs now leave a human-readable progress trail next to the board.
Highlights
Cross-platform / Windows
- Windows dispatch pipeline end-to-end — quoting, path handling, and
child-process spawning fixed so the standardsymphonyflow runs on
Windows without manual workarounds. - Hook execution is cross-platform — hooks no longer assume a POSIX shell;
test isolation hardened so the suite passes on Windows as well as macOS/Linux. - Host board sync on Windows uses a directory junction plus
claude --add-dirso per-ticket workspaces still see the canonical
kanban//docs//llm-wiki/from the host repo. - Skill cross-platform compatibility reference under
docs/skills/
documents the platform contract for operators.
Lifecycle hooks
after_donehook wired into the orchestrator — fires once a ticket
reaches Done with the workspace path, ticket id, and run context, so you
can chain release, deploy, or notification steps without polling.- Hook failure output surfaced to the operator instead of being eaten
by the runner — a failing hook now shows up in TUI/headless logs. - Operator pause persists across worker exit — pressing Shift+P (added
in 0.3.4) now stays paused even if the underlying worker process dies
and gets re-spawned, so paused work cannot quietly resume.
Per-ticket git workspaces
- Default workspace is now a git worktree of the host repo, scoped to
the ticket — agents work on an isolated branch by default. - One commit per ticket guarantee on the issue branch when work
reaches Done, so every ticket leaves a single, reviewable diff. - Auto-commit and
baseshaare scoped to the workspace so a stale
host-repo SHA can no longer poison a per-ticket commit.
Workflow / 7-stage default
seven-stage promptsbecome a first-class configuration with
qa.boot,qa.regression_budget, andafter_doneexposed in
WORKFLOW.md. The previous 5-stage layout is still loadable.- Review rewind on MEDIUM findings — Review now sends a ticket back to
In Progress for MEDIUM-severity findings, not just HIGH/CRITICAL. using-symphonyskill updated to require copyingdocs/symphony-prompts/
when bootstrapping a new board, so the 7-stage default actually takes
effect on fresh installs.
Headless / observability
WORKFLOW-PROGRESS.mdmirror — headless runs now mirror live state
into a markdown file next to the board, so you cantail -fthe
progress trail (or watch it from another machine) without attaching a TUI.
Claude backend
claudesuccess-result parsing fixed — successful runs are no longer
occasionally classified as failures because of message-shape variance.- Continuation turn budget capped — runaway continuation loops are now
bounded, protecting the per-ticket token ceiling.
Skills / docs
- Operator skills discoverable from any CLI —
using-symphony/
symphony-oneshotresolve from any working directory, not just the
symphony checkout.
Operator impact
- New / changed
WORKFLOW.mdkeys:prompts:lane templates (7-stage default)qa.boot,qa.regression_budgetafter_donelifecycle hook
- Per-ticket workspaces are now git worktrees of your host repo by default.
If you depend on the old shared-workspace behavior, set the workspace
flag back to the previous mode in yourWORKFLOW.md. - Hooks must run on the platform you're operating from — review your
shell assumptions if your hooks rely on POSIX-only features. - A successful Done run produces exactly one commit on the issue branch.
Verification
python -m pytest -q→331 passed, 5 skippedpython -c "import symphony; print(symphony.__version__)"→0.4.0- Local
v0.4.0tag and remoteorigin/v0.4.0both point to6a50526.
Commits in this release
- `8939857 fix(orchestrator): make operator pause persist across worker exit`
- `0b9a34f docs(skill): require copying symphony-prompts and preserve 7-stage default when bootstrapping`
- `539dd0b refactor(skills): make operator skills discoverable from any CLI`
- `7aaccb5 feat(review): rewind to In Progress on MEDIUM findings too`
- `828d6ab feat(hooks): default per-ticket workspace to git worktree of host repo`
- `3950952 feat(workspace): guarantee one commit per ticket on issue branch`
- `4251be7 fix: surface hook failure output`
- `713d955 fix: cap continuation turn budget`
- `2f04865 fix: parse claude success results`
- `838db1d feat(workflow): seven-stage prompts + qa.boot/regression_budget/after_done config`
- `fbc0045 feat(hooks): wire after_done lifecycle hook`
- `89be8ec fix(windows): cross-platform hook + test isolation`
- `380ca4c fix(windows): unblock dispatch pipeline end-to-end`
- `ad3c7d3 docs(skills): cross-platform compatibility reference`
- `91b9dcc fix(windows): keep host board in sync via junction + claude --add-dir`
- `abfcba1 fix(workspace): scope auto-commit and basesha to the workspace`
- `4a4d20b feat(progress): mirror live state to WORKFLOW-PROGRESS.md in headless runs`
- `6a50526 chore(release): bump version to 0.4.0`