Releases: zekariasasaminew/pact
Release list
edge (unreleased main @ 85d4cc3d566fe5474b9d83d8fb2bca9e16b1c72a)
Automatically rebuilt from the latest commit on main on every
push -- not a stable release. This tag and its assets move
with every push; re-download if you want the newest build.
Built from commit 85d4cc3.
For pinned, versioned releases, see tags starting with v on
the Releases page.
v0.4.0
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 https://github.com/zekariasasaminew/pact/pull/...
v0.3.0
⚠️ Breaking change
claim_files's MCP response field granted has been renamed to accepted, and a new has_conflicts boolean was added alongside the existing conflicts array (#52). This is public MCP wire surface, not just an internal Rust API -- any external tool or agent integration that parses the old granted field needs to update to accepted. The rename exists because granted: true was actively misleading given leases are advisory, not exclusive: a caller reading {granted: true, conflicts: [...]} was very likely to assume it held the file exclusively, when the claim was recorded either way.
Highlights
pact coord-status— a new subcommand that surfaces the coordination layer's current state (every active lease, per-agent pending message counts) instead of it being a black box.spawn-many --agent— a default agent for tasks without an explicit<agent>:prefix, fixing the inconsistency betweenspawnandspawn-many's CLI surfaces.merge-all --unionsafety check — rejects a union merge that would silently produce broken JS/TS (duplicatemodule.exports/export default, redeclared bindings) instead of reporting false success.- PidLock PID-reuse fix — a lock holder's PID being recycled by an unrelated process after it died no longer makes an abandoned lock look permanently held.
- UTF-8 BOM handling — package.json merges and workspace meta files now tolerate (and, for package.json, preserve) a leading BOM, a common default from PowerShell's
Out-File/Set-Content -Encoding utf8. - Streamed output is much quieter by default — Copilot's noisiest event types (tool-call deltas, background task changes, skills-loaded events) are suppressed unless
--verboseis passed. - A rolling
edgeprerelease (rebuilt on every push tomain) is also available for testing unreleased work between tags: https://github.com/zekariasasaminew/pact/releases/tag/edge
What's Changed
- Reduce inline comments, extract design rationale to DESIGN.md by @zekariasasaminew in #22
- Bump workspace version to 0.2.0 by @zekariasasaminew in #23
- Reject --union merges that produce duplicate module.exports/export default or a redeclared binding by @zekariasasaminew in #40
- Exclude the caller's own broadcasts from check_messages by @zekariasasaminew in #41
- Skip generating a lockfile when the source repo has none by @zekariasasaminew in #42
- Distinguish merge-all's partial-success exit code from a hard failure by @zekariasasaminew in #44
- Only warn on coord status once it's settled, not on the transient pending value by @zekariasasaminew in #45
- Preserve package.json key order and indent width across a merge by @zekariasasaminew in #46
- Reject out-of-range TTLs in claim_files instead of silently accepting them by @zekariasasaminew in #47
- Deduplicate lease rows on repeat claim_files calls instead of accumulating by @zekariasasaminew in #48
- Release files by glob overlap, not just exact pattern-string match by @zekariasasaminew in #49
- Set isError: true on all four coord MCP tools' failure paths by @zekariasasaminew in #50
- Document that spawn/spawn-many don't commit and merge-all does by @zekariasasaminew in #51
- Rename claim_files' granted field to accepted, add has_conflicts by @zekariasasaminew in #52
- Add --agent to spawn-many as a default for tasks without a prefix by @zekariasasaminew in #53
- Suppress known-noisy streamed event types by default, add --verbose by @zekariasasaminew in #54
- Merge feat/merge-all: recover DESIGN.md and comment-reduction pass by @zekariasasaminew in #55
- Add a rolling edge release, rebuilt on every push to main by @zekariasasaminew in #56
- Strip a leading UTF-8 BOM before parsing conflicted JSON stages by @zekariasasaminew in #60
- Suppress assistant.tool_call_delta, the dominant remaining stream noise by @zekariasasaminew in #61
- Fix spawn-many overlap warning double-counting shared tasks by @zekariasasaminew in #62
- Add --version/-V to the top-level CLI by @zekariasasaminew in #63
- Add pact coord-status: surface active leases and pending messages by @zekariasasaminew in #68
- Make Windows support a deliberate positioning point in the README by @zekariasasaminew in #69
- Fix PidLock treating a reused PID as still holding the lock by @zekariasasaminew in #74
- Calibrate the tagline: coordination is advisory, not enforced by @zekariasasaminew in #75
- Document expand_glob's per-call tree-walk cost as a known scaling limit by @zekariasasaminew in #76
- Trim tokio's full feature to what's actually used by @zekariasasaminew in #77
- Tolerate a UTF-8 BOM in workspace meta JSON files by @zekariasasaminew in #81
- Preserve a UTF-8 BOM through package.json conflict resolution by @zekariasasaminew in #82
- Suppress session.skills_loaded in default streamed event output by @zekariasasaminew in #83
- Bump workspace version to 0.3.0 by @zekariasasaminew in #88
Full Changelog: v0.2.0...v0.3.0
v0.2.0
What's Changed
- Close the merge loop: commit-all, merge-all, auto-resolution, Weaver, Arbiter by @zekariasasaminew in #20
- Add CLAUDE.md and Copilot instructions for this repo by @zekariasasaminew in #21
Full Changelog: v0.1.0...v0.2.0
v0.1.0
Full Changelog: https://github.com/zekariasasaminew/pact/commits/v0.1.0