Repository navigation
v0.6.0 — workflow accuracy + harness upgrade (11 items)
Highlights
Eleven coordinated changes across agent prompts and the orchestrator so Symphony ticket outcomes are predictable and the system is observable. Plan and live-demo verification log live at docs/improvements/workflow-v0.5.2.md.
Prompt contracts (agent-visible)
- Plan emits
## Acceptance Testsand## Done Signals; QA scores them via## AC Scorecard. - Rewinds receive
SYMPHONY_REWIND_SCOPEJSON env and scope edits to flagged files (## Scope Expansionfor justified spillover). - Explore emits a scored
reuse-inventory.md; Plan candidate set is an explicit Markdown table withreuse_fromandobservabilitycolumns. - Review emits a 7-row
## Security Audit; anyfailauto-promotes to CRITICAL. - Wiki entries record
**Observability hooks:**under## Technical Reference.
Harness (orchestrator + hooks)
- Orchestrator parses
## Touched Filesat dispatch and auto-Blocks overlapping candidates with a## Conflictsection. BaseAgentBackend.is_progress_eventlifts the meta-event stall filter into one place (Claude + Codex override, Pi + Gemini inherit the default).- Per-state EMA of completion tokens persists to
.symphony/token_ema.json; dispatch injectsSYMPHONY_TOKEN_EMAandSYMPHONY_TOKEN_BUDGET; the EMA captures the source state atworker_turn_started. after_runprefixes the wip commit with[no-test]when prod-code diff lacks a paired test; Review scans the marker and promotes each to HIGH. Docs / LICENSE / README carve-out included.- 200-line
after_createheredoc extracted toscripts/symphony-setup-worktree.sh; hook is a one-liner. - New
symphony wiki-sweepCLI scansdocs/llm-wiki/for duplicate / orphan / stale rows. Orchestrator runs it every NthDone(defaultwiki.sweep_every_n: 10); counter persists across restarts.
Bug fixes
after_runYAML literal block fixed (replacedIFS='\n'with a POSIXprintftrick).- C1 path-with-spaces regex hardened (backtick + plain forms, lenient trailing content).
- C5 done counter persistence.
- Test compat with Python 3.10 (
asyncio.Task.cancellingis 3.11+).
Included Commits
PR #27 was squash-merged into main as commit 3b86c7f. Original branch history (for traceability):
ba9273cdocs: plan 11-item workflow accuracy + harness upgrade61f5a2dfeat(workflow): accuracy + harness upgrade (v0.6.0)86ca62bchore(release): v0.6.08be3d26fix(workflow): address code-review HIGH + MEDIUM items1e82d70fix(workflow): close gaps surfaced by live demoaa31f3bchore: clarify wiki_sweep imports123800cdocs: record post-fix live re-verification + out-of-scope findings85b2241fix(tests): Task.cancelling() is 3.11+, gate the call on Python 3.10
Verification
python -m pytest -qpassed: 519 passed, 6 skipped (Python 3.10 / 3.11 / 3.12 CI green).python -c "import symphony; print(symphony.__version__)"returned0.6.0.- Live agent demo with
max_turns=4, full Todo→Review pipeline:- claude backend ran all 4 turns (Explore→Plan→In Progress→Review), emitted exact 7-row
## Security Audit, full## Acceptance Tests+## Done Signals+## AC Scorecardshape, and wrotereuse-inventory.md+implementation-plan.md+work/feature.mdunder<workspace>/docs/<id>/. - codex backend ran the same pipeline through
## Implementation(Review-stage board write blocked by a pre-existing codex sandbox issue — filed separately as #31).
- claude backend ran all 4 turns (Explore→Plan→In Progress→Review), emitted exact 7-row
- Live agent re-run with
max_turns=2after addressing run-1 gaps confirmed every fix lands on both backends: C1 regex now parses real-world(new)annotations, C3 EMA keys (explore,plan) attribute under the source state, and the A3 Plan candidate table emits withreuse_from+observabilitycolumns.
Follow-ups (filed, not in this release)
- #28 C1: conflict pre-check skips retry-queue entries
- #29 C3: per-subprocess
env=isolation undermax_concurrent_agents > 1 - #30 C3/C5: Windows rename atomicity on concurrent reader hold
- #31 Codex sandbox rejects writes to symlinked board files (pre-existing)
- #32 EMA persistence: last-writer-wins when multiple orchestrators share
.symphony/