v1.47.0
Package Changelog
Minor Changes
- a786395:
cadence dispatch plangave no per-task signal about whether a dispatched task should run in its own isolated worktree — isolation was decided purely by human/skill-level convention, with no backing in the dispatch plan itself. Per rec-20260718-002 (from the same 2026-07-18 incident that motivated the dispatch-packet action-class prohibitions), every task in a dispatch plan now carries arecommendedIsolationvalue of'worktree'or'none':'worktree'when the task declares one or morefiles:(it will mutate the working tree),'none'when it declares none (read-only/no mutation expected). This is surfaced both as a newrecommendedIsolationfield incadence dispatch plan --json's per-task output and as an advisory line in the rendered packet text itself — purely additive, noTask/Draftschema change, and no enforcement mechanism.
Patch Changes
- 3b03250:
cadence dispatch plan's rendered packet (renderPacket) previously told the dispatched implementation agent to self-record its own outcome viacadence build task <id> --status=...— the only thing scoping its behavior was afiles:boundary. A real incident (2026-07-18) showed the gap: a dispatched fork agent overran its scoped task, rancadence build/cadence settleandgit commitdirectly againstmainfour times, self-authorized without the orchestrator's review. Every rendered packet now includes a mandatory prohibition block forbidding state-mutatingcadencesubcommands (cadence build,cadence settle, etc.),git commit/git push,gh/network actions, and invokingAskUserQuestion— the dispatched agent must stop and report to the orchestrating session once its verify condition is met (or it's blocked); the orchestrator alone records the task outcome. - 57eb46b: Fixes
cadence settle rundeterministically failing withStateConflictErrorwhenever ahost-cliverifier gate (whose subprocess can run for minutes) overlapped another subagent'sSubagentStophook — the hook's telemetry-onlysession.subagentSpawns += 1was routed through the same revision-guardedSimpleStateBackend.commit()as structural writes, so every spawn bump invalidated any other command's in-flight snapshot and the failure never converged on retry (#234).StateBackendgainsbumpSessionCounter(), a write path scoped to purely-informationalsessioncounters that never compares to or bumps the optimistic-concurrencyrevisionfield;handleSubagentResult()'s telemetry-only branch now uses it. Structural commits (loop position, tasks, drafts, decisions, subagent baselines) keep the exact same revision-guarded conflict behavior as before.
Published Packages
All public packages are published on npm as 1.47.0:
@manehorizons/cadence-core@manehorizons/cadence-host-claude-code@manehorizons/cadence-host-codex@manehorizons/cadence-types
Verification
- npm publish completed with provenance in the Release workflow.
- Remote tag
v1.47.0is verified before the GitHub Release is created. - npm package versions and GitHub Release metadata are verified after publish.
- Workflow run: https://github.com/manehorizons/cadence/actions/runs/29661224299