Skip to content

v0.13.0

Latest

Choose a tag to compare

@cskwork cskwork released this 10 Jul 12:59

v0.13.0 — reliability audit batch + live-E2E lifecycle fixes

The 2026-07-09 agent-flow reliability audit (AF-01..AF-16) is fully resolved,
plus two lifecycle defects found by a live opencode file-board E2E loop.

Reliability audit (AF-01..AF-16)

  • AF-01 Identity-safe worker exit: a force-ejected zombie's cleanup can no
    longer eject the fresh retry entry installed under the same issue id.
  • AF-02 Force-eject now records and kills the backend process group for
    every backend kind (claude/opencode/gemini/agy/kiro/pi), not just Codex.
  • AF-03 Resumed workers get a fresh stall window; long pauses no longer
    burn a retry on the first reconcile tick.
  • AF-04 State PATCH on a running ticket returns 409 without mutation.
  • AF-05 Plain/Gemini/Claude backends expose canonical completion previews;
    silent exit-0 empty turns fail instead of looping.
  • AF-06 Board scans ignore legacy .tmp-*.md files; startup sweeps only
    Symphony-owned temps and spares operator files.
  • AF-07 Reconcile isolates per-entry force-eject errors; cancelled paused
    zombies still eject.
  • AF-08 stop() bounds cancellation-resistant worker drain and finalizes
    their leases before the run registry closes.
  • AF-09 Corrupt Codex stdout closes the backend, fails later turns fast,
    and a failed reap stays retryable by a later stop.
  • AF-10 Dead-owner lease reclaim kills any recorded live process group
    (with a persisted reclaiming fence) before the row is redispatchable;
    non-positive persisted pids are rejected at the signalling boundary.
  • AF-11 Continuous-improvement lifetime cap warns once; require_idle_board
    blocks CI/worker overlap including terminal-persist work.
  • AF-12 Tracker parse failures warn; duplicate ids collapse
    deterministically; delete serializes with mutation; a running id missing
    from refresh becomes a visible degraded state.
  • AF-13 Rewind budget applies to custom and non-English pipelines via
    configured active-state order.
  • AF-14 Closed by research: Codex 0.130/0.144 schemas both require
    tokenUsage.last and .total; no speculative production branch.
  • AF-15 Dispatch state no longer retains completed ids; stop() clears
    diagnostics.
  • AF-16 First/continuation/phase-rebuild prompts share one lifetime
    turn-budget basis (max_total_turns documented in workflow examples).

Live-E2E lifecycle fixes

  • Done-squash preserves merged lineage: auto_commit_on_done now squashes
    onto merge-base(HEAD, merge target) instead of the fork point, so a branch
    already merged by Verify is no longer rewritten onto an orphan lineage — the
    post-Done fallback merge no longer hits guaranteed add/add conflicts that
    demoted healthy Done tickets to Blocked.
  • Verify evidence validation matches the shipped contract: evidence cells
    citing an existing artifact plus a qualifier (or several backticked
    artifacts) are accepted; Security Audit rows with an n/a result need no
    artifact. Fabricated citations and prose-only evidence still hard-rewind.
  • Verify stage prompts now show valid/invalid evidence-cell examples.

Hardening

  • OpenCode telemetry and worktree setup hardening.

Verification

Full suite 1371 passed / 5 skipped; ruff and pyright clean. The complete
pipeline (Todo → In Progress → Verify → Learn → Done with merge gate) was
exercised end-to-end three times with a real opencode agent building a working
app; the final two runs completed with the Done ticket surviving the terminal
grace and the fallback merge succeeding. Decision log:
docs/changelog/changelog-2026-07-10.md.