Highlights
- 🪟 P0 Windows fix: every agent spawn on Windows silently truncated a multi-line task prompt at its first newline — dropping every flag after it (
--allow-all-tools,--additional-mcp-config,--output-format json), degrading the agent to its interactive default, burning real API credits, and still reporting success. Fixed by resolving pastcmd.exeentirely for Windows spawns instead of routing every launch through it (#210, #211). - Arbiter Write-fresh redesign (#187): conflict resolution now hands the agent clean BASE/OURS/THEIRS content to
Writefresh instead of asking it toEditraw conflict-marker text — Arbiter's first real confirmed success against a live agent, and a fixed false-rejection on the canonical multi-agent fan-out workflow (#199/#200). - pact-level safety profiles (
strict/workspace-write/unrestricted) portable across all 4 adapters (#188). - SDK bindings v1 for Python and TypeScript (#143, #144), plus a VS Code extension v1 (#145).
- npm dependency store: manifest, verification, and cleanup (
pact store list/verify/clean) (#191). - New commands:
pact init/pact.toml,pact demo,pact doctor(+--json),pact completions,pact history,pact resolve,pact inspect,--dry-runon spawn/spawn-many, bulkteardown(#214). - A ground-truth
files_touchedsignal (#212) — distinguishes a task that silently did nothing from one that actually succeeded, independent of any agent's self-reported exit code. - Install via Homebrew tap or winget (manifest submitted) in addition to prebuilt binaries.
No breaking changes since v0.3.0 — --union is kept as a working alias for --append-only.
What's Changed
- Document coord-status and spawn-many --agent in GETTING_STARTED by @zekariasasaminew in #89
- Bake commit SHA into edge builds' --version output by @zekariasasaminew in #90
- Document merge-all --union's append-only barrel-file gotcha by @zekariasasaminew in #91
- Add --dry-run to spawn/spawn-many by @zekariasasaminew in #92
- Add a Bun package-manager detector by @zekariasasaminew in #93
- Add shell completion generation (pact completions ) by @zekariasasaminew in #94
- Add a pact doctor diagnostic command by @zekariasasaminew in #95
- Add a durable, queryable operation log (pact history) by @zekariasasaminew in #96
- Persist skipped merge-all conflicts as resumable objects (pact resolve) by @zekariasasaminew in #97
- Add test-gated merge (merge-all --require-passing-tests) by @zekariasasaminew in #98
- Fix Gemini adapter silently downgrading yolo mode in an untrusted directory by @zekariasasaminew in #99
- Suppress two more noisy [other] event types found in Claude Code's own stream by @zekariasasaminew in #101
- Fix: coordination MCP tools denied by default at every real Claude Code spawn by @zekariasasaminew in #109
- Investigate #105: rule out pact's own subprocess as the coord-connection bottleneck by @zekariasasaminew in #110
- Fix Arbiter's log being deleted unconditionally, regardless of outcome by @zekariasasaminew in #111
- Surface agent process liveness in pact list (issue #108) by @zekariasasaminew in #112
- Suppress non-init system events and thinking-only assistant turns by @zekariasasaminew in #113
- Document --safety plan's home-directory write by @zekariasasaminew in #114
- Document the task-backgrounding trap in headless mode by @zekariasasaminew in #115
- Document the issue-first backlog workflow explicitly by @zekariasasaminew in #116
- Add canonical task-file patterns under examples/tasks/ by @zekariasasaminew in #130
- Add SKILL.md so agents can learn to invoke pact by @zekariasasaminew in #131
- Add pact init + pact.toml config file support by @zekariasasaminew in #132
- Add pact demo: zero-cost, zero-decision walkthrough by @zekariasasaminew in #133
- Auto-select the sole detected agent CLI when --agent is omitted by @zekariasasaminew in #134
- Derive workspace ids from task text instead of a bare random id by @zekariasasaminew in #135
- Add next-command hints to key error messages by @zekariasasaminew in #137
- Re-record the README demo GIF with a real pact-demo capture pipeline by @zekariasasaminew in #138
- Document the new Homebrew tap install path by @zekariasasaminew in #139
- Add MIT LICENSE file matching Cargo.toml's declared license by @zekariasasaminew in #141
- Document the winget manifest submission by @zekariasasaminew in #142
- Add pact-coord Python binding v1 by @zekariasasaminew in #143
- Add pact-coord TypeScript binding v1 by @zekariasasaminew in #144
- Add pact history VS Code extension v1 by @zekariasasaminew in #145
- Reject an Arbiter resolution that changes anything out of scope by @zekariasasaminew in #167
- Write a decision.json for every Arbiter attempt by @zekariasasaminew in #168
- Add list_claims MCP tool + keep both SDK bindings in sync by @zekariasasaminew in #169
- Return a structured report from pact_deps::prepare by @zekariasasaminew in #170
- Persist structured run metadata for every real agent spawn by @zekariasasaminew in #171
- Add pact inspect: everything pact knows about one workspace by @zekariasasaminew in #172
- Add pact doctor --json by @zekariasasaminew in #173
- Rename --union to --append-only, kept as a visible alias by @zekariasasaminew in #174
- docs: reposition README around the full orchestration loop by @zekariasasaminew in #175
- cli: disclose Weaver overlap warning is a text heuristic by @zekariasasaminew in #176
- pact-vcs: extract semantic merge resolvers behind a trait by @zekariasasaminew in #177
- pact-vcs: exclude dep/run sidecar files from list_workspaces by @zekariasasaminew in #179
- pact-coord Python binding: follow mcp 2.0.0's isError -> is_error rename by @zekariasasaminew in #181
- pact-cli: real end-to-end tests via a fake-agent process shim by @zekariasasaminew in #182
- cli: warn when the discovered repo root looks unintended by @zekariasasaminew in #183
- pact-agents: explicitly close spawned agent processes' stdin by @zekariasasaminew in #186
- core+vcs: Arbiter Write-fresh redesign, closing #106 and #147 by @zekariasasaminew in #187
- agents+cli: pact-level safety profiles (strict/workspace-write/unrestricted) by @zekariasasaminew in #188
- coord: opt-in fail_on_conflict for claim_files by @zekariasasaminew in #189
- vcs: risk-aware merge ordering by @zekariasasaminew in #190
- deps+cli: npm store manifest, verification, and cleanup by @zekariasasaminew in #191
- docs: note issue #184's stdin fix measurably improved #105's repro rate by @zekariasasaminew in #192
- cli: backfill a real spawn-through-dependency-prep-then-list regression test by @zekariasasaminew in #193
- cli+vcs: fix pact demo leaking its workspace state directory by @zekariasasaminew in #196
- vcs: merge-all no longer reports a clean merge when auto-commit fails by @zekariasasaminew in #197
- docs: record partial live-verification of Gemini adapter, issue #9 by @zekariasasaminew in #198
- core: exclude git's own merge-carried changes from arbiter out-of-scope check, issue #199 by @zekariasasaminew in #200
- docs: clarify coord_status is a last-self-reported value, not live liveness, issue #201 by @zekariasasaminew in #202
- docs: reword SKILL.md description to lead with the user's problem, issue #203 by @zekariasasaminew in #204
- agents: warn when a raw, unrecognized --safety value is passed for Copilot, issue #205 by @zekariasasaminew in #206
- docs: document mcp-serve --workspace glob-root requirement in both bindings, issue #207 by @zekariasasaminew in #208
- agents: resolve past cmd.exe for Windows agent spawns, issue #210 by @zekariasasaminew in #211
- core+cli: add a ground-truth files_touched signal, distinct from exit_success, issue #212 by @zekariasasaminew in #213
- cli: teardown supports bulk mode like commit-all, issue #214 by @zekariasasaminew in #215
- docs: document per-adapter MCP tool-name namespacing in SKILL.md, issue #216 by @zekariasasaminew in #217
Full Changelog: v0.3.0...v0.4.0