Releases: screenleon/pm-dispatch
Release list
v0.7.1 — Release toolchain + hygiene cleanup
Highlights
Two parallel tracks: (1) complete the /pre-release Layer 2 semantic diff coverage, upgrading the audit report from tracking-hygiene checks to requirement-vs-implementation traceability; (2) clear accumulated P3 guard / test / ops debt from v0.4.0–v0.7.0.
Added
-
/pre-releaseLayer 2 — semantic diff coverage (CC-430, PR#339). Per-ticket Requirement section (read from BACKLOG.md) is compared against the PR diff viagh api. Outputs a coverage table (Covered / Partial / Gap / N/A) with Confidence and Flag columns. No sub-job dispatch; no GO/NO-GO verdict — judgement stays with the user. -
pm-write-guardhook: three new allow rules with cross-rule symlink escape prevention (CC-258, PR#342). Added/tmp/<slug>/*.md,docs/spikes/{CC-NNN*,*-scope,*-rfc}.md, and symlink-normalized memory double-canonicalization allow rules. Added ~15 regression tests for cross-rule symlink escape edge cases. Total test count reaches 193. -
doctor.sh↔install-hooks.shhook-profile parity test (CC-224, PR#341). Addedscripts/test-hook-profile.shasserting that the minimal hook sets listed in both files match exactly, preventing silent drift when a new hook is added to one file but not the other. -
Shared adapter lib:
scripts/lib/model-aliases.sh(CC-420, PR#345). Extracted the model-alias TSV parser shared by theclaude,codex, andopencodeadapters (~30 duplicate lines eliminated). -
Shared adapter lib:
scripts/lib/timeout-resolve.sh(CC-421, PR#346). Extracted the timeout-precedence resolution logic (brief > adapter default > system default) shared by three adapters anddispatch-post-verify.sh(~15 lines × 4 eliminated). -
Shared adapter lib:
scripts/lib/dispatch-common.sh(CC-422, PR#347). Extracted five shared adapter init helpers (require_brief_file,require_working_dir,load_model_aliases,resolve_timeout,init_run_dir) into a single sourced lib. All three adapters now share one init sequence.
Fixed
-
uninstall.shblast-radius guard: exact managed-root path rejection (CC-210, PR#340). Added a precise path check to prevent the managed root itself from being deleted during uninstall. Added regression test. -
test-portable.shlock contention: FIFO-gated IPC replaces fixedsleep 1.2(CC-240, PR#344).case_mkdir_lock_contentionnow uses a FIFO release signal for cross-process synchronization, eliminating CI flakiness on slow runners. -
Archiver safe-drop: terminal row preserved when body is absent everywhere (CC-285, PR#343). When a terminal row's body section is absent from both
BACKLOG.mdandBACKLOG-ARCHIVE.md, the archiver now preserves the row and emits a warning instead of silently dropping it. Added regression fixture.
Full changelog: CHANGELOG.md
v0.7.0 — Retrieval-first context + memory substrate
Added
pmctl context query --source memory— memory cards are now searchable alongside repo content; context index covers both planespmctl memory doctor— validates memory card frontmatter, detects stale/superseded/archived cards, reports shard countspmctl memory shard+pmctl memory rebuild-summary— episode archiving and monthly summary rebuild/mem-recallstep 2b —pmctl context query --source memoryretrieves related past episodes before reply/mem-distillstep 2b — triggers rebuild-summary + shard on distillationpmctl artifacts list— lists dispatch run artifacts with metadatapmctl pre-release audit <milestone-id>— structural pre-release audit: PR refs, CHANGELOG coverage, body residuals, index/body status (Layer 1 + Layer 3 blind-spot declaration)scripts/release-verify.shPhase 3c — v0.7.0 feature smoke (memory-source · doctor · artifacts · pre-release)
Changed
- MEMORY.md injection now uses usage-based frecency ranking (Firefox bucket + W-TinyLFU + keyword tier);
priority: alwayspins to top - Lifecycle validity gate: stale/superseded memory cards are deprioritised in injection ranking;
priority: alwaysbypasses gate - Episode summaries use newest-first ordering via
pmctl memory rebuild-summary
Fixed
install.shnow passesPM_DISPATCH_REPO="$REPO_ROOT"per-call toinstall-guards.sh, preventing ambient env override from breaking spaced-path and MSYS symlink installs
Full details: CHANGELOG.md § 0.7.0
v0.6.0 — Runtime decoupling, dispatch lifecycle & new skills
Added
/spike— structured feasibility investigations: planner angles → executor fan-out → committed decision file atdocs/spikes/<id>.md/research— imports external knowledge as a filtered feasibility list anchored to your project's actual constraintspmctl dispatch run --lifecycle detached+pmctl dispatch wait— dispatch returns immediately; poll for completion separatelypmctl gate runpersistent overrides — accepted-risk statements persist across gate cycles in.gate-overrides.mdpmctl gate verify— verify a gate result independently from outside the gate rundocs/sandbox-limitations.md— codex sandbox friction patterns and their workarounds
Changed
- Executor routing is now data-driven from adapter manifests —
runner_kindinadapter.yamldrives router, guard, and install wiring pmctl gate rundispatches an independent subprocess instead of running in the main thread- Write-guards consolidated from per-executor scripts into one manifest-driven hook
Removed
claude-executorandcodex-executoragent files retired —pmctl dispatch runis the sole dispatch path- codex
danger-full-accessmode removed — workspace-write sandbox is the floor
Full details: CHANGELOG.md § 0.6.0
v0.5.0 — local context substrate + memory loop
Added
pmctl context index/update/query— SQLite-backed repo index for file and symbol retrieval before dispatchpmctl context pack/reuse-scan— assemble context hits into a pack or scan for prior art before writing a briefpmctl task claim/dispatch/status/review— full task lifecycle FSM with durable state recordspmctl safe bash— runs a bash command only after it passes the guard checkpmctl validate— validates a handover brief from the CLI/discover— scans backlog + milestones, ranks opportunities by (impact × timeliness) / sizemem-distillreads the anomaly slice of the event log (failed runs, denied writes) to find recurring patterns worth recording
Changed
- Brief authoring now requires a
pmctl context reuse-scanprior-art pass before writing - Executor agents now do fail-fast brief validation as their very first action
Removed
- Routing-log and tool-trace hooks retired —
events.jsonltrace store is the single sink pmctl guard check --profiledeprecated alias removed (use--role+--runtime)codex-dispatch.shcompatibility wrapper removed
Full details: CHANGELOG.md § 0.5.0
v0.4.0 — State-first foundation + Review Model
Added
pmctlis now the sole writer of Run/Event records — one consistent audit trailpmctl task create/show/list/update— create and manage task state from the CLIpmctl trace tail— query the event log with filters by kind, task, and date rangepmctl decision add— record architectural decisions with slug-based projection filesscripts/brief-validate.sh— enforces quality rules before dispatch (architecture_impact, self_verify, vague acceptance phrasing)architecture-reviewerreads the conceptual map first, then selectively checks diff for disagreement/pre-implupgraded to a six-section contract: Intention / Non-goals / Bounded Context / Conceptual Map / Acceptance Metrics / Verification Plandocs/review-model.md— formalizes the four-layer review model ("Relocating Rigor")- PM dispatch routing is size-first: Tiny → inline, Small →
model:light, Medium/Large → default - State store gets bounded-growth rotation with crash-safe staging
Fixed
- Reviewer write-guard now works cross-project (was bound to the install checkout)
- Fresh installs no longer silently permission-block reviewer subagents
Full details: CHANGELOG.md § 0.4.0
v0.3.0 — PM runtime spine
Added
pmctl dispatch run— single command to send any brief to any executorinstall.shnow putspmctlon PATH; fresh installs no longer fail with "command not found"- Claude adapter — codex-as-PM can drive claude-as-executor
- Reviewer write-guard — restricts reviewer agents to
.gate-results/only (prompt-injection defense) pr-gate --allow-dirty— gate now fails explicitly on dirty worktrees (was silently proceeding)- Layer-boundary test suite —
core/must stay declarative; adapters must stay thin - Config resolver —
pmctl dispatch runowns timeout/model config; adapters receive env vars
Changed
- Executor routing switched from hardcoded paths to adapter convention (
adapters/<name>/dispatch.sh) - Concurrent dispatch race fixed: post-verify uses per-run artifact paths instead of overwritable
latest.*symlinks
Removed
/cavemanand/caveman-commit— text compression causes information loss in design discussions
Full details: CHANGELOG.md § 0.3.0
v0.2.0 — Cross-platform ops
Added
doctor.sh— verifies auth, hooks, paths; prints a remediation step for each failureuninstall.sh— manifest-driven removal of only whatinstall.shput in placerun-all-tests.sh— single command to run all suites and get a pass/fail summaryserialize_with_lock()— portable file locking that works on Windows Git Bash (noflock)DECISIONS.md— architecture decision log with ID cross-reference validation- pm-schema v1.1/v1.2 — adds Priority, Epic, design/spike enum values to the BACKLOG index
Changed
- Hook scripts rewritten from Python to pure bash+jq —
python3no longer required lint-frontmatter.shexpanded to full YAML flow-collection validation
Fixed
- Log row-loss on Windows:
flockreplaced with cross-platformserialize_with_lock() install.shcopy-mode now diffs src vs dst directly instead of stale manifest hash
Full details: CHANGELOG.md § 0.2.0
v0.1.0 — first public release
Added
/pr-gatesupports--executor codex|claude|auto; reviewers run in parallel with--parallelclaude-executor— second executor path that works without the Codex CLIinstall.sh --profile minimal|full— auto-detects whether to wire codex guard hooks- Cross-platform shim library (
realpath,mkdir_lock,detect_platform) for Linux / macOS / Windows Git Bash docs/executor-contract.md— abstract interface every executor must satisfydocs/GETTING_STARTED.md+docs/CONCEPTS.md— onboarding docs for new readers- Routing-log hook auto-appends one JSONL row per dispatch decision to project history
qa-testernow enumerates every new behavioral unit before auditing coverage
Changed
- Hardcoded install paths replaced with
${PM_DISPATCH_REPO}derived at install time codex-pr-gate.sh→pr-gate.sh; codex and claude gate paths unified into one command
Full details: CHANGELOG.md § 0.1.0