Skip to content

v0.10.0 — detached cancel safety + reconciliation

Latest

Choose a tag to compare

@screenleon screenleon released this 20 Jul 10:51
d2249d0

[0.10.0] — 2026-07-20

Added

  • pmctl dispatch reconcile (CC-499). Diagnoses and converges stale
    detached runs (crash, reboot, orphan, PID reuse) using only trusted
    out-of-repo evidence — never infers success from advisory records, and
    never overwrites an existing terminal claim; convergence only ever
    CAS-claims failed, and only when process absence is provable. Reports
    in-flight / terminal-authenticated / orphaned / process-gone-without-evidence
    / indeterminate (PID-reuse suspected). Identity capture now records a
    boot_id so a reboot short-circuits straight to "gone" instead of risking
    a post-reboot starttime coincidence. pmctl dispatch reconcile <run_id>|--all --cd <dir> [--dry-run]; doctor.sh gained a read-only stale-run scan.

  • pmctl dispatch cancel / dispatch status (CC-495). Detached runs can be
    terminalized with trusted process-group kill (PID/PGID/starttime/comm
    re-verify before signal), exclusive terminal CAS shared with natural
    complete, durable cancelled Run/Event/dispatch record, and a
    nonce-authenticated cancelled sentinel. pmctl dispatch wait returns
    exit 130 for authenticated cancel (distinct from failed, timeout 124,
    and indeterminate 3). Minimal in-flight discovery via dispatch status.
    Run schema/policy and event schema gain cancelled / run.cancelled.

Fixed

  • Worktree/auto-pack path-contract hardening (CC-453, PR#430).
    pmctl_worktree_create now redirects git worktree add progress chatter to
    stderr so its stdout contract is exactly one line (the worktree path).
    pmctl_dispatch_auto_pack validates a non-git work_dir as an absolute,
    existing directory and fail-loud skips packing otherwise — a garbage
    work_dir can no longer create directories under the current CWD via a
    relative mkdir -p. The opencode adapter's isolation error message now only
    recommends its actually supported level (none).

Changed

  • Guard/hook symmetry hardening (CC-452, PR#431). guard-pm-write.sh and
    guard-reviewer-write.sh now declare set -euo pipefail like
    guard-executor-write.sh; a regression test enumerates every
    runtime/hooks/guard-*.sh dynamically and pins guard-pm-bash.sh's
    documented set -uo pipefail exemption. The duplicated episode-date
    ISO8601 normalization in guard-inject-memory.sh and
    guard-session-summary.sh is extracted to memory_iso8601_normalize() in
    runtime/lib/memory.sh. The episodes.jsonl append lock (audit item 1) was
    already fixed earlier and is verified not regressed.