Skip to content

v0.6.0 — workflow accuracy + harness upgrade (11 items)

Choose a tag to compare

@cskwork cskwork released this 17 May 07:07
· 594 commits to main since this release

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 Tests and ## Done Signals; QA scores them via ## AC Scorecard.
  • Rewinds receive SYMPHONY_REWIND_SCOPE JSON env and scope edits to flagged files (## Scope Expansion for justified spillover).
  • Explore emits a scored reuse-inventory.md; Plan candidate set is an explicit Markdown table with reuse_from and observability columns.
  • Review emits a 7-row ## Security Audit; any fail auto-promotes to CRITICAL.
  • Wiki entries record **Observability hooks:** under ## Technical Reference.

Harness (orchestrator + hooks)

  • Orchestrator parses ## Touched Files at dispatch and auto-Blocks overlapping candidates with a ## Conflict section.
  • BaseAgentBackend.is_progress_event lifts 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 injects SYMPHONY_TOKEN_EMA and SYMPHONY_TOKEN_BUDGET; the EMA captures the source state at worker_turn_started.
  • after_run prefixes 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_create heredoc extracted to scripts/symphony-setup-worktree.sh; hook is a one-liner.
  • New symphony wiki-sweep CLI scans docs/llm-wiki/ for duplicate / orphan / stale rows. Orchestrator runs it every Nth Done (default wiki.sweep_every_n: 10); counter persists across restarts.

Bug fixes

  • after_run YAML literal block fixed (replaced IFS='\n' with a POSIX printf trick).
  • C1 path-with-spaces regex hardened (backtick + plain forms, lenient trailing content).
  • C5 done counter persistence.
  • Test compat with Python 3.10 (asyncio.Task.cancelling is 3.11+).

Included Commits

PR #27 was squash-merged into main as commit 3b86c7f. Original branch history (for traceability):

  • ba9273c docs: plan 11-item workflow accuracy + harness upgrade
  • 61f5a2d feat(workflow): accuracy + harness upgrade (v0.6.0)
  • 86ca62b chore(release): v0.6.0
  • 8be3d26 fix(workflow): address code-review HIGH + MEDIUM items
  • 1e82d70 fix(workflow): close gaps surfaced by live demo
  • aa31f3b chore: clarify wiki_sweep imports
  • 123800c docs: record post-fix live re-verification + out-of-scope findings
  • 85b2241 fix(tests): Task.cancelling() is 3.11+, gate the call on Python 3.10

Verification

  • python -m pytest -q passed: 519 passed, 6 skipped (Python 3.10 / 3.11 / 3.12 CI green).
  • python -c "import symphony; print(symphony.__version__)" returned 0.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 Scorecard shape, and wrote reuse-inventory.md + implementation-plan.md + work/feature.md under <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).
  • Live agent re-run with max_turns=2 after 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 with reuse_from + observability columns.

Follow-ups (filed, not in this release)

  • #28 C1: conflict pre-check skips retry-queue entries
  • #29 C3: per-subprocess env= isolation under max_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/