Skip to content

Releases: wandercom/pact

Pact v1.3.0

Choose a tag to compare

@jmc-wander jmc-wander released this 14 Oct 20:25
dc84fb5

Boundary register: never assume an identifier

  • Boundary register (boundary_register.yaml, format boundary-register/1, shared with the factory and Constrain) plus per-contract boundary_identifiers. Every cross-boundary identifier (service name, audience, credential, principal, grant/role, table/column, metric type, log field, env/config key, header, claim) must cite file or observation records bound by SHA-256. Verification is mechanical: exact equal values with near-miss hints, absent isolation proofs, whole-token matching, stale-digest detection, placeholder refusal, project-root path confinement.
  • pact boundary verify [project] verifies the register and exits non-zero on any error, naming entry, side and reason.
  • pact boundary cite --kind file|observation --path <rel> --value <literal> [--line N] [--command "<cmd>"] produces a verified record as JSON and refuses when the literal is not where the record would claim. Records are produced, never typed.
  • Contract gate: validate_all_contracts (used by pact validate, the decomposer and MCP) fails when a contract uses an unregistered boundary (external: names, network_call, database_*/http_*/external_* data-access side effects) or any register entry fails verification. Projects with no cross-boundary usage are unaffected.
  • pact validate now exits non-zero when the gate fails.
  • Interview, shaper and contract-author prompts require citing a record or raising an open question; implementer handoffs render the registered literals.

Pact v1.2.0

Choose a tag to compare

@jmcentire jmcentire released this 17 Jul 20:05

Pact v1.2.0

Added

  • Constrained pact agent spec-author and pact agent repair commands.
  • Dry-run by default; --apply writes at most one validated file in v1.2.0.
  • Agent reports include proposed/applied paths, schema-violation status, and estimated spend fields.

Changed

  • pact certify now fails closed when emission compliance tests are missing.
  • PACT_AGENT_ALLOWED_CONTEXT is a bounded reference-only schema.
  • Forbidden write classes are built in; deprecated PACT_AGENT_FORBIDDEN_WRITES extras are enforced as denied path prefixes during migration.
  • pact init --spec validates specs before initializing a project.

Validation

  • Full local suite passed: 2274 tests.
  • Built wheel and sdist: pact_agents-1.2.0-py3-none-any.whl, pact_agents-1.2.0.tar.gz.
  • Integrated PR #10 and PR #11; no open issues remain.

Pact v1.1.0

Choose a tag to compare

@jmcentire jmcentire released this 12 Jun 19:27
882118e

What changed

  • Added typed readiness profiles so operational maturity, security, privacy, compliance, gating, testing, and monitoring are decided before decomposition.
  • Added AI-editable build_spec.yaml support through pact init --spec, pact spec apply, and pact spec show.
  • Added optional production-readiness artifact packs through pact production init, pact production status, pact production fingerprint, and pact production validate.
  • Updated package metadata, README, docs, and pact.tools links for the new canonical site.

Behavior

  • Pact remains plan-first by default. pact run still stops after decomposition, contracts, and tests unless --implement is explicitly supplied.

v1.0.0 — Codex-native plan-first Pact

Choose a tag to compare

@jmcentire jmcentire released this 04 Jun 18:13

Breaking change

  • pact run and pact daemon are plan-first by default. Existing automation that expects Pact-managed implementation must add --implement.

Highlights

  • Native Codex assessment, implementation, integration, structured-output, and shared-session support while preserving Claude Code workflows.
  • New pact review gate combining Advocate implementation review with Pact-packaged Simulacrum claim review.
  • Pact now ships the MIT-licensed Simulacrum runtime and annotated corpus; pact-sim provides direct access without user-specific home-directory state.
  • Cross-agent pact-engineer and simulacrum skills plus Claude plugin metadata.
  • Contract reconciliation, clearer coding-agent setup failures, quoted tmux launch boundaries, and collision-resistant project session IDs.
  • README, capabilities, Claude guidance, and GitHub Pages documentation updated for v1.

Verification

  • 2,194 tests passed; 2 expected skips.
  • Ruff static-error checks and both skill package validations passed.
  • Clean-room wheel and sdist build/install verified with pact, pact review, packaged Sim corpus, and pact-sim.
  • Live Codex structured-output and packaged Sim review smoke tests passed.

v0.14.1 — Fix CI test failures

Choose a tag to compare

@jmcentire jmcentire released this 09 Apr 04:44

Fixes

  • CI: Skip Gemini backend tests when google-genai is not installed (pytest.importorskip)
  • Tests: Update test_idempotent to correctly reflect archive-then-rewrite behavior introduced in v0.11.0 (re-running pact init archives existing artifacts, not skip-if-exists)

v0.14.0 — Architectural Assessment + Refactors

Choose a tag to compare

@jmcentire jmcentire released this 08 Apr 20:55
0141ab4

What's New

pact assess — Architectural Assessment Command

New CLI command that performs mechanical analysis of any Python codebase for structural friction. No LLM required, no project setup needed.

pact assess src/myproject/           # Markdown report
pact assess src/myproject/ --json    # Machine-readable output

Detects five categories:

  • Hub dependencies — modules with high fan-in (many dependents)
  • Shallow modules — interface complexity rivals implementation
  • Tight coupling — mutual imports, circular dependency clusters (Tarjan's SCC)
  • Scattered logic — same intra-project import in many files
  • Test coverage gaps — source modules without test files

Architecture Refactors

  • Health policy extraction — health_policy() consolidates 7 scattered health check sites into a single decision function
  • Test harness consolidation — _run_test_subprocess() eliminates 4x duplicated subprocess boilerplate across Python/TS/Rust runners
  • ResolvedConfig — resolve_all() pre-computes all config resolution at startup

Documentation

  • CAPABILITIES.md — AI-friendly capability inventory with quick selector, decision guide, and per-command details
  • README, CLAUDE.md, and docs site updated

Stats

  • 2073 tests (48 net new)
  • +1767 lines, -169 lines across 16 files

v0.13.1 — Adopt resilience

Choose a tag to compare

@jmcentire jmcentire released this 31 Mar 19:49
  • Catch Anthropic 500/APIStatusError — skip module, continue
  • Catch BudgetExceeded gracefully — save progress, exit cleanly
  • Re-run to resume from where you left off

v0.13.0 — TypeScript/Effect-TS Support

Choose a tag to compare

@jmcentire jmcentire released this 31 Mar 10:46

Summary

  • TypeScript/Effect-TS extraction: pact adopt now understands Effect.gen, pipe, Layer, Context.Tag, Data.TaggedError, Schema, plus standard TS functions/classes/interfaces/types
  • --include/--exclude CLI flags: Scope adopt to subdirectories, file lists, or stdin pipes
  • Resumable adopt: Re-running picks up where it left off — skips modules with existing contracts+tests
  • API stall resilience: Stalled modules are skipped instead of crashing the entire run
  • Vitest smoke tests: TypeScript projects get Vitest-based smoke test generation
  • 42 new tests, 2025+ total passing

Breaking Changes

None.

Install

pip install pact-agents==0.13.0

v0.12.0: Kindex Integration

Choose a tag to compare

@jmcentire jmcentire released this 27 Mar 07:00

What's New

Optional kindex integration — cross-session context enrichment via the kindex knowledge graph. Degrades gracefully when kindex is not installed.

Features

  • First-run prompt: offers to index the codebase during pact init, saves preference to .kin/config
  • Context fetch: loads kindex graph context during project initialization
  • Artifact publishing: publishes tasks, decomposition trees, decisions, and contracts to kindex after pact run/pact daemon completes
  • Graceful degradation: all kindex functions are silent no-ops when kindex is unavailable

.kin/config support

auto_index: true   # or false to skip
name: my-project   # used for context search topic

Full Changelog

v0.11.0...v0.12.0

v0.11.0: Artifact Archival

Choose a tag to compare

@jmcentire jmcentire released this 27 Mar 06:35

What's New

Artifact archival — previous project artifacts are automatically preserved when reinitializing.

Features

  • pact init archives existing artifacts into .pact/archive/<slug>/ before writing fresh templates
  • Slug derived from file content (task title, YAML name keys)
  • ProjectManager.load_previous_context() returns most recent archived session's artifacts
  • ProjectManager.archive_existing() available for programmatic use
  • CLI shows archive info and lists previous sessions during init

Changed

  • init() always writes fresh templates (previously skipped if files existed)
  • Archives: task.md, sops.md, pact.yaml, design.md, plus generated metadata (tasks.json, TASKS.md, etc.)

Full Changelog

v0.10.2...v0.11.0