119: v0.14.0 — truth in the pipe, identity for the agents

Where we left off

v0.13.1 (post #116) closed by deliberately not naming a milestone around two half-finished features — Agent vs Harness terminology (Phase 0 only) and Quota-Aware Dispatch Reservation (no consumer yet) — and instead shipped what was actually load-bearing: GOVERNS event-contract extensions and the init/migrate/upgrade rollback mechanism. That left two real gaps on the table, named explicitly in docs/strategy/2026-08-15-two-imperatives-roadmap.md: execution autonomy (can Agy/Grok/Codex be trusted with more of the loop without Claude babysitting every write?) and workspace context accuracy (does tracked state — state.db, project-docs/*, memory — stay honest without silent drift?). Job-truth/gh-write reliability (#701) was called out specifically as a recurring failure — fixed once, recurred as #935 — meaning it had to be closed before stacking more autonomy on top of it made any sense.

What moved the goalpost

Nothing rescoped mid-flight this time. The two imperatives' own dependency ordering held: job-truth/gh-write consolidation shipped first (unreliable execution floor fixed before building on it), then the workspace-context- governance vertical slice (which designed the agent artifact storage that Agent-roles-charters Phase 1 needed), then Phase 1 itself. The one genuine mid-stream decision was cadence, not scope: rather than accumulating everything into one eventual v0.14.0, named releases now cut per completed 3+-PR cluster — literally the Named Release Policy's own existing trigger, just applied more deliberately than before.

What this PR shipped

Release pitch: the execution floor gets a truth guarantee — every GitHub-write dispatch now has its claimed outcome independently verified against live GitHub state instead of trusted at face value — and workspace agents get a real identity: a storage-backed charter, a synlynk agent init/list/show/edit/disable onboarding surface, and dispatch integration that resolves role and harness from that identity automatically.

  • GOVERNS job-truth/gh-write consolidation (#701, closes #331/#579/#935) — gh_write_verified() queries live GitHub state through the orchestrator's own identity (never the sandboxed job's) and is now consulted on every code path that decides a --requires-gh-write job's terminal status, with a regression guard (tests/test_gh_write_guard.py) locking that in. This is the fix for the exact silent-failure pattern this session hit twice more on PR #1006 and #1010's own reviews — a dispatched job reporting exit 0 after its stopReason was actually cancelled right before the gh pr review call landed.
  • Workspace-scoped agent artifact storage (gh#936) — a real workspace_id, an agent_id registry mirroring the existing member_id pattern, and provenance-chained charter.md/memory//statements-of-record/ storage with conflict detection on stale-parent revisions.
  • Agent-roles-charters Phase 1synlynk agent init/list/show/edit/disable as the onboarding surface, dispatch_agent(agent_id=...) resolving role and auto-selecting a harness by capability fit, and synlynk dispatch --as-agent.
  • Agent → Harness rename (#993) — freed the agent verb for the surface above (see post #118).
  • TPM/session MVP — a sessions table, session_id threaded through dispatch_agent() → daemon_jobs → cost_entries, and a NUDGE line in synlynk session status for unattributed dispatches — the first concrete signal a future TPM role can act on.
  • #559 (worktree/job accumulation) closed without new code: synlynk worktree audit/worktree clean, shipped pre-0.13.1, already covered it.

Terminology Phase 0 and Quota-Aware Dispatch Reservation stay in [Unreleased] — Phase 0 gained Phase 1 this release but Phases 2-4 (memory, capability registry, portability) are still unbuilt, and nothing yet exercises the reservation ledger in production dispatch.

What this achieved

Both halves of the two-imperatives roadmap moved from "designed" to "shipped and verified in production" — including on themselves: the job-truth consolidation this release ships is the same mechanism that caught its own predecessor's silent-failure pattern recurring twice during this release's own review cycle, before the fix had even finished landing everywhere.

The goal at the end of this PR

Agent-roles-charters continues into Phase 2 (memory), the reservation ledger waits for a real consumer, and the two-imperatives roadmap's next item — whatever surfaces highest on docs/strategy/2026-08-15-two-imperatives-roadmap.md once its status table is next revisited — picks up from here.