Format follows Keep a Changelog.
2.25.2 — 2026-09-02
Fixed
- commit-gate counts survive repo
addoptsinterference — the gate parsed pass/fail counts from pytest's terminal summary line, but a repo'saddopts = "-q"stacks with the gate's own-qinto-qq, where pytest 9 prints no final summary at all: every run parsed as all-zero, and a genuinely red run was misreported as "no tests collected". Counts now come from a--junitxmlside channel that verbosity cannot suppress, with the terminal parse as fallback; repoaddoptsare otherwise fully honored (required flags such as--asyncio-mode=autokeep applying), and a repo that disables the junitxml plugin degrades to terminal parsing instead of locking commits. Failure messages now report the exit code's actual meaning (no tests ranfor exit 5, usage error for exit 4,counts unparseablewith an addopts hint otherwise), andFAILED/ERRORshort-summary lines reach the block message.
2.25.1 — 2026-09-01
Fixed
pactkit gate authorize <scope>— the form every gate block message documents — now works (the parser previously accepted only the bare positionalpactkit gate <scope>; both forms are valid now).- Gate hooks evaluate
cd <other-repo> && git pushagainst the target repository's enforcement config instead of the session directory's. - commit-gate no longer misfires on docs/meta-only commits —
.gitignore/.claude/**/.codex/**count as doc-only (repo/agent metadata carries no runtime code and no longer disqualifies the change set from the skip path); the full-suite target falls back fromtests/unit/totests/when only a flat layout exists; a zero-collected run reports "no tests collected" instead of implying failures (still RED — the TDD contract is unchanged);No module named pytestfrom a venv-less fallback interpreter degrades to WARN + allow, matching the missing-binary path (R3 self-lock protection).
2.25.0 — 2026-08-30
Added
- Protected-branch push gate —
git pushto a protected branch (defaultmain/master) is intercepted across all three channels (PreToolUse, codex hooks.json, git pre-push) and blocked with the sanctioned path, the human bypass (PACTKIT_ALLOW_DIRECT_PUSH=1), and the repo-owner config. Direct commits on protected branches block by default;--no-verifyis no longer a free bypass. Audited underpush_gate. - Tamper guard — agent modification of enforcement artifacts (
.git/hooks/**,.pactkit/enforcement/**,.codex/hooks.json, gate registrations in settings.json) is blocked. - L1 Hard-Rule Override Protocol — core rules now state that L1 rules are never waivable in conversation; a conflicting user instruction is refused, and editing rules/hooks/config to comply is itself L1 tampering.
- Stack-aware commit-gate — the gate runs the detected stack's real suite (
npm test/go test ./.../mvn|gradle test) instead of forcing pytest onto non-Python repos; doctor probes are stack-aware. - Session context hooks —
pactkit gate --hook session-startinjects regenerated.pactkit/context.mdat session start and after compaction;--hook pre-compactrefreshes state as a side effect and never blocks compaction. - Spec tampering guard — editing a spec with an active preflight receipt is blocked during Act ("Spec is Law", L1); Plan-phase spec writing is unaffected.
- Authorization gate — external-effect commands (PR/release/publish/repo operations) block until the user confirms;
pactkit gate <scope>opens a short-TTL audited window. - Secrets gate — literal credential material in commands blocks by default; env-var indirection (
password=$DB_PASS) is exempt. - Gate telemetry — gate blocks, authorizations, and Skill invocations feed the run-event stream;
pactkit statsreports per-gate block counts, per-command invocation counts, and authorization pairs at project scope. enforcementconfig section — protected_branches / allow_direct_push / tamper_guard / spec_guard / auth_gate / secrets_gate / auth_ttl_minutes, with safe defaults.
Fixed
- Git hooks no longer lock out machines without pactkit (PATH probe + WARN instead of exit 127).
- Audit records no longer persist credentials — command-derived text is redacted before any persistence;
pactkit cleanscrubs legacy records once.
Changed
- Direct commits on
main/masternow block by default (previously: full suite only) — opt out viaenforcement.allow_direct_push.
2.24.2 — 2026-08-27
Fixed
--format allinstalls the codex hooks channel (was: only explicit--format codex).
2.24.1 — 2026-08-27
Fixed
- Enforcement probes resolve the project venv's pytest (pipx-installed CLIs no longer report gates unavailable).
2.24.0 — 2026-08-27
Added
- Run event streams (append-only, crash-tolerant);
pactkit statsfriction metrics; gate enforcement completeness reporting (full/degraded/unavailable+pactkit doctor --jsonenforcement section); Codex native hooks thin registration; authorization audit trail (asked/granted/deniedevents +pactkit continuation deny); outcome_unknown crash recovery (attempt fences with pid); command manifest v2 reference digests.
2.23.0 — 2026-08-27
Replaces the withdrawn 2.21.0/2.22.0 — both were pulled from PyPI shortly after publication due to serious defects.
Added
- Spec preflight + native sessions —
/project-actPhase 0.7 deterministically inlines the Spec's referenced implementation inputs and constraints (with receipts) before any source edit. - Progressive PDCA rule loading — the 16 on-demand rules load on trigger instead of always; every rule states its specific trigger and evidence.
- Unified deployment ownership safety — the manifest-hash ownership proof now covers skills, command prompts, agents, CLAUDE.md and rollback: user-modified files are preserved as
.pactkit-newcandidates, deletions require manifest proof. - Machine-checked prompt-to-CLI consistency — prompts referencing unregistered CLI subcommands now fail CI instead of failing an AI mid-session.
- Legacy-engine usage counter —
pactkit doctorsurfaces the invocation count that gates the frozen legacy package's deletion.
Fixed
- Gates fail closed — pip-audit verdicts, coverage blocks, and commit-gate collection failures no longer masquerade as pass.
- No bricked runs — vanished artifacts fail recoverably (
artifact_vanished), corrupt unrelated run files are skipped safely, Windows engine mutations fixed. - pactkit.yaml multi-copy sync — syncs from the copy readers actually load; writes are atomic.
- Prompts off the legacy surface — Act/Plan prompts no longer invoke the deprecated
continuation/checkpoint commands.
Removed / Deprecated
- Preflight guard hook removed (near-zero enforcement value, session noise); the preflight loader stays in full.
- Legacy workflow engine frozen in
pactkit.legacy— deletion candidate, gated on one release cycle of zero explicit invocations.
2.22.0 — 2026-08-24
Added
- Unified WorkUnit scope derivation for non-standard directory layouts — WorkUnit read/write scope is no longer a hardcoded
src/**/tests/**whitelist. Aresolve_scopeSSoT unions each unit's frozen template floor with project-declaredwrite_scoperoots (source_roots/test_roots/docs_roots) and the Spec'sTouches, so projects withfrontend/src/,backend/,directus-extensions/layouts no longer blockproject-act/project-hotfix. Union (not intersection): the Spec (Tier-1) is never clipped by mutable config.
Fixed
- Completed runs survive legitimate cross-workflow projection evolution — after Plan → Act,
project-check/project-donestart andpactkit work-unit status <plan-run>no longer crash withinvalid_workflow_state. Predecessor lookups scan sibling journals leniently, andfinalize-workflowregeneratescontext.mdto the post-completion canonical. Execution reads stay strict, so tampering is still detected.
2.21.0 — 2026-08-24
Added
- Complete Core-owned lifecycle — all 12
project-*commands now execute as bounded, versioned WorkUnits. Core validates evidence, owns scheduling and journaled completion, and never treats an agent's final response as workflow completion. - Resumable Codex integration — the official App Server bridge persists one thread per run, resumes it across processes, constrains model output with schemas, and converts malformed output or lease failures into durable retries.
Changed
- Act closes the real Story — RED → GREEN, regression, lint, and coverage gates are followed by a crash-recoverable Core transaction that completes canonical Story tasks and regenerates the Sprint Board.
- Side effects require explicit authorization — commits, pushes, pull requests, tags, publishing, releases, and Sprint orchestration pause before execution until approved.
- Distributed IDs —
pactkit generate-idreplaces the removed sequentialnext-idcommand.
Fixed
- Premature workflow stops — finish guards, persisted attempts, idempotent finalizers, and cross-process thread resume keep interrupted Codex workflows recoverable.
- Honest host capability reporting — Doctor reports verified Codex
resumablecapability without hiding weaker hosts; per-host guarantees remain visible.
2.20.0 — 2026-08-22
Added
- Verified resumable Act checkpoints — Story-scoped continuation records validate Spec, Board, focused tests, regression, and lint evidence across process restarts.
Fixed
- Adapter-safe rendering and deployment gates — command rendering preserves CLI semantics across hosts and blocks incompatible Core/adapter combinations.
2.19.0 — 2026-08-17
Added
- Spec Dependency Surface (STORY-slim-143) — every scaffolded Spec now carries a machine-readable
## Dependency Surfacetable (Depends on / Provides / Touches / Conflict risk). Story ordering and file-level conflict surface become data, not tribal knowledge. pactkit spec-graph(STORY-slim-143) — deterministic story dependency DAG: topological execution waves (same-wave stories are parallelizable), a file-overlap conflict matrix, cycle detection, and Mermaid output. Stdlib only, zero new dependencies.- Sprint Wave Mode (STORY-slim-144) —
/project-sprintwith no arguments scans the backlog, consumesspec-graph --json, and runs conflict-free same-wave stories as parallel worktree subagents (capsprint.max_parallel, default 3). Conflicted or under-declared stories serialize safe-by-default; wave N+1 waits for wave N fully merged green. Single-story mode unchanged. - Linter rules E010/W011 (STORY-slim-143) — dangling
Depends onreferences block Act; missing Dependency Surface warns.
2.18.0 — 2026-08-17
Added
- Deployment manifest content hashes (STORY-slim-141) — deploys now record per-file sha256 in
.pactkit-deployed.json;pactkit doctorparity check drops to content level, so "version stamp says new, files are old" drift becomes an explicit report. User-editable files (CLAUDE.md, configs) are structurally excluded — zero false positives on your own additions. - Adapter version skew warning (STORY-slim-142) — doctor warns when an installed adapter package (e.g. pactkit-opencode) lags behind core, with a
pipx injectupgrade hint.
Fixed
- Preview/test deploys no longer clobber live adapters (STORY-slim-142) —
deploy(format="all", target=...)used to invoke adapter deployers with their real home targets, silently overwriting~/.config/opencode& co. Adapters are now skipped with a notice when-tis given. - CI template actions bumped to checkout@v7 / setup-python@v7 — regenerating workflows no longer reverts dependabot updates.
2.17.0 — 2026-08-13
Added
pactkit done-verify(STORY-slim-136) — Mechanical archive-honesty gate for/project-done: requirement→test evidence chains, checkbox↔case consistency, zero-caller detection, and Spec/Board/archive status consistency. FAIL blocks archiving.pactkit commit-gate(STORY-slim-138/140) — Pre-commit test gate with skip≠pass transparency. Claude Code PreToolUse hook auto-installs via init/update; non-Claude formats get a git pre-commit fallback automatically. Self-lock protection built in.pactkit deps(STORY-slim-137) — External dependency registry (node/codegraph/gh) withdeps checkand guideddeps install./project-initPhase 1.5 asks before installing; CLI init only reports.pactkit schema config(STORY-slim-135) — Every pactkit.yaml key with default, effective value, and source.- Deployment parity in
pactkit doctor(STORY-slim-139) — Deploys write.pactkit-deployed.json; doctor reports cross-format drift explicitly.
Changed
- Schema-driven pactkit.yaml (STORY-slim-135) — CONFIG_SCHEMA single source; fresh init writes minimal yaml (stack + developer); multi-copy sync with drift detection.
- Skill deployment manifest (STORY-slim-139) — codex/copilot adapters consume the core manifest; silently dropped skills (garden/audit/report) restored.
Fixed
- Codex adapter config.toml policy — never modifies an existing file (create-if-absent only) after two wipe incidents.
- OpenCode global instructions — merged constitution no longer stripped from the always-load layer.
2.16.1 — 2026-07-23
Fixed
- Bedrock VS Code plugin model compatibility (STORY-slim-134) — Removed
model:field from all/project-*command frontmatter. Claude Code was resolvingmodel: sonnet/opusto Anthropic's latest model ID, bypassingANTHROPIC_DEFAULT_SONNET_MODELin VS Code plugin environments. Commands now inherit the session default model set by the user's provider env vars.
2.16.0 — 2026-07-13
Added
/project-debugcommand (STORY-slim-133) — Hypothesis-driven troubleshooting skill. Structured loop: Symptom → Hypothesize (≤3) → Verify (executable commands) → Narrow → Root Cause. Enforces evidence-gated file access (no aimless reading) and convergence guarantees (escalates to/project-planif stuck after 3 iterations). Uses sonnet model with structured protocol.
2.15.2 — 2026-07-02
Changed
- Codegraph commands decoupled from prompts (STORY-slim-132) — Replaced hardcoded codegraph CLI command lists with runtime
codegraph --helpdiscovery. PactKit no longer needs updates when codegraph changes its command signatures.
Fixed
- Act Phase 0.6 board move command (HOTFIX-slim-132) — Added explicit
board.py move_storycommand template to prevent AI from guessing wrong syntax. - Prompt deployer (HOTFIX-slim-131) — Insert @ references after YAML frontmatter so model: field is parsed.
- Skill frontmatter (HOTFIX-slim-130) — Move @ references below YAML frontmatter in project-* skills.
Refactored
- Moved large rules from @inject to on-demand Read to reduce initial context size.
2.15.1 — 2026-06-10
Added
- Engineering Concerns guide system (STORY-slim-128) — On-demand NFR guide loading via trigger index. Plan Phase scans requirement keywords and includes NFR decisions in Spec; Act Phase loads matched guides (1-3 max). 13 initial concerns covering concurrency, async, database, caching, API integration, events, resilience, memory, observability, configuration, module design, code-review-first, and component-reuse.
- 6 additional engineering guides (STORY-slim-129) — error-recovery, data-consistency, backwards-compatibility, performance-antipatterns, graceful-shutdown, testing-strategy. Total: 19 guides.
lintoptional dependency group —pip install pactkit[lint]includes ruff.
Fixed
- Spec linter accepts heading format for Security Scope entries.
- CI tree-sitter tests skip gracefully when not installed.
2.14.2 — 2026-06-01
Added
- Managed-block update for project CLAUDE.md (STORY-slim-127) —
pactkit updatenow uses<!-- pactkit:start -->/<!-- pactkit:end -->markers. User content outside the managed block is preserved across updates. - Codegraph sync enforcement via code (STORY-slim-126) —
pactkit visualize --lazyandpactkit syncnow runcodegraph syncautomatically when.codegraph/exists. - Codegraph priority in generated CLAUDE.md — Projects with
.codegraph/get a "Code Intelligence" section instructing AI to prefer codegraph over grep/find.
Changed
- MCP strategy trimmed to Context7 + Memory — Removed Playwright, Chrome DevTools, Draw.io, and shadcn from MCP recommendations. Less noise, same value.
- Config backfill removed —
pactkit updateno longer writes default sections back intopactkit.yaml. Absent keys = accept default.
Fixed
- Stale rule warnings — Removed obsolete rule names from
.opencode/pactkit.yaml.
2.14.0 — 2026-05-26
Added
- Codegraph integration (STORY-slim-124) —
pactkit querynow reads from.codegraph/codegraph.db(generated by@colbymchenry/codegraph) whenvisualize.graph_provider: codegraphis configured. Provides 2.6x more edges than pactkit's own suffix-match resolution, with qualified names, line numbers, and type-aware resolution. - Auto-init codegraph — When
graph_provider: codegraphis set and.codegraph/codegraph.dbis missing,pactkit queryauto-runscodegraph init -iif the CLI is on PATH. - Graph Query Protocol dual-mode — PDCA commands now support Codegraph Mode (
pactkit query+ codegraph CLI) and Grep Mode (fallback on.mmdfiles). - Model frontmatter on all PDCA skills (STORY-slim-125) — All 11 command/skill prompts had explicit
model:frontmatter added. (Reverted in 2.16.1 — see STORY-slim-134)
Removed
_write_sqlite_db()— Pactkit no longer generates its owncall_graph.db. The upstream codegraph tool produces a superior graph with tree-sitter + import-aware resolution.visualize.sqlite_outputconfig — Replaced byvisualize.graph_provider: codegraph.
Changed
pactkit query— Now reads.codegraph/codegraph.db(codegraph schema with hash IDs, JOIN edges+nodes) instead of pactkit's owncall_graph.db.- PDCA prompts updated — All references to
call_graph.db/ "SQLite Mode" removed from Plan, Act, Check, Done, Hotfix, and Trace skills.
2.13.0 — 2026-05-07
Added
pactkit interface-summaryCLI — AST-based interface extraction that physically outputs only signatures, types, and docstrings. Enforces "Code Enforces, Prompt Instructs" for Act Phase 1 layered loading — AI receives truncated content by design.- Journey Sync in Act Phase 4 — Conditional step that updates
docs/e2e/journey.mdwhen a Story modifies journey-relevant steps. Closes the create→consume→update lifecycle gap. - Journey Segment in Plan Phase 3.2a — Conditional Spec annotation that links Stories to journey steps, enabling Act Phase 4 auto-detection.
2.12.0 — 2026-05-06
Changed
- Rules architecture refactor — Merged 6 global core rules into single
pactkit.md; on-demand rules renumbered 01-06 and moved to~/.claude/skills/_rules/. Reduces context window usage by ~60% per conversation. - Auto-deploy on version mismatch — After
pipx upgrade pactkit, the next CLI command auto-syncs deployed files without requiring explicitpactkit init.
Fixed
- Hardcoded paths in deployer —
_build_command_rules_header()now usesFormatProfile.rules_dir/skills_dirinstead of hardcoded~/.claude/paths. - Stale filename references — Updated cross-references in visualize.py, commands.py, lazy_visualize.py, and test files to match new rule filenames.
2.11.0 — 2026-04-25
Added
- Lateral Scan — Plan Phase 1 now scans for duplicate patterns before writing Specs. If overlap > 30% with existing implementations, Spec must include
R0: Extract shared abstractionor declare tech debt accepted. - DEFERRED comment mechanism — When skipping a SHOULD requirement, code must include
# DEFERRED(SHOULD): R{N} — reasoncomment. Coverage table output added to Check phase for tracking deferred items.
Fixed
- Residual pactkit.yaml version operations — Removed
update_version()function and CLI subcommand from board.py, plus all stale references in prompts, agents, and skills docs. Version is now exclusively managed inpyproject.toml+__init__.pywith deploy marker at~/.claude/.pactkit-version. - CI tree-sitter deps — Install tree-sitter optional dependencies separately in CI workflow.
2.10.6 — 2026-04-22
Fixed
- L3 SHOULD semantics — Signal Strength Convention L3 Recommended changed from "Violation = warning, non-blocking" to "Default required — skip only with stated reason" (RFC 2119). Prevents AI from systematically deferring SHOULD tasks.
2.10.5 — 2026-04-21
Added
- Solution Design Protocol — New rule
12-solution-design.mdrequires capability delta assessment (framework native + project existing) before implementation. Prevents framework blindness, project blindness, and hardcoded coupling. Includes Implementation Constraints (no magic values, OCP, SRP, dependency direction). Integrated into Plan Phase 1 and Act Phase 1.
Changed
- Global version tracking — Version tracking moved from project-level
pactkit.yamlto global~/.claude/.pactkit-versionmarker. Eliminates cross-project desync when PactKit is upgraded viapipx.pactkit update --if-needednow checks the global marker instead of project yaml.
2.10.4 — 2026-04-20
Added
- Hotfix Impact Check —
/project-hotfixnow includes Phase 0.5 that reads existing.mmdcall graph files before fixing. Warns when target function has 3+ callers. Advisory (L3), non-blocking, gracefully skips when no graphs exist.
2.10.3 — 2026-04-20
Fixed
- Protected parent dirs in
pactkit clean—rglob("dist")was matchingnode_modules/*/dist, destroying npm dependency internals. Added_inside_protected()guard fornode_modules/and.git/; explicit path patterns now use direct matching instead of rglob. - CI tree-sitter tests — CI workflow now installs
[visualize]extras so Java/TS analyzer tests pass in GitHub Actions.
2.10.2 — 2026-04-20
Added
- PDCA Nudge Protocol — AI proactively recommends PDCA commands when free conversation yields actionable conclusions. Trigger matrix maps signals to commands; suppression rules prevent noise.
- Dual-dimension Harness Audit — Audit now scores two dimensions: Config (project + global config, 50pts) and Code (tests, lint, complexity, git hygiene, 50pts). JSON output includes
dimensionsbreakdown field. - Unified HTML Report Dashboard — Single
report.htmlwith tab switching, D3 force-directed graph, harness score ring, layer bars, and hotspot panel.
Fixed
- Shared Protocols Context.md reference — Added missing
Act Phase 4to the Context.md Canonical Format "Referenced by" line. Ensures context.md reflects Act progress for session continuity. - Semantic version comparison — Version mismatch warning now uses tuple comparison instead of string equality, giving correct upgrade/downgrade direction.
- Focus call graph empty output — Fixed focus resolution to use
LANG_PROFILES[stack].source_dirsinstead of hardcodedsrc/prefix.
2.9.13 — 2026-04-15
Fixed
- Slim core dependencies — Moved adapter packages (
pactkit-opencode,pactkit-codex) and tree-sitter bindings to[project.optional-dependencies]. Corepip install pactkitnow only requirespyyaml. Install extras withpactkit[all],pactkit[visualize],pactkit[opencode], orpactkit[codex]. - Spec-lint CLI fallback — Playbooks now include
python3 -m pactkit spec-lintfallback for environments wherepactkitis not on$PATH. - Board add_story signature — Plan playbook Phase 3.3 now shows complete
add_storyinvocation with all required arguments.
2.9.12 — 2026-04-02
Added
- Copilot deployer adapter —
pactkit-copilotadapter package registered via entry_points.pactkit update --format copilotdeploys skills, commands, agents, andcopilot-instructions.mdto.github/. - OCP-compliant rules header dispatch —
_build_command_rules_header()dispatches onprofile.rules_import_styleinstead of hardcoded profile name checks. - Multi-stack auto-detection —
pactkit initauto-detects multiple stacks and writesstack: [python, typescript]list syntax topactkit.yaml. - Two-tier module graph —
visualize --mode modulegenerates dimension-based subgraphs. - Prompt template sync — Canonical prompt templates rendered consistently across all deployer formats.
Fixed
- OpenCode
rules_import_style— Corrected from"instructions"to"inline"to match actual behavior.
2.9.11 — 2026-04-01
Fixed
- Rules template variables —
_deploy_rules()now renders{PROJECT_CONFIG_DIR}and other template variables via_render_prompt(). Previously rules were deployed with raw template strings in Codex/OpenCode. - Copilot agent YAML corruption — Agent
tools:field was iterated char-by-char ([R, e, a, d, ...]→[Read, Write, ...]). - Copilot double annotation —
(terminal only) (terminal only)reduced to single annotation. - Skill CLI refs — All SKILL.md files now pass through
_replace_slash_commands().
2.9.10 — 2026-04-01
Fixed
- Skill script
__future__import —load_script()now hoistsfrom __future__ import annotationsabove_SHARED_HEADER, fixing SyntaxError in deployedspec_linter.py. - Lessons table auto-repair —
append_lesson()now calls_repair_table_structure()before appending, fixing: missing header, wrong header format, data rows before header.
2.9.9 — 2026-04-01
Added
- GitHub Copilot adapter support — New
copilotFormatProfile.pactkit init --format copilotdeploys to project.github/directory. - Dynamic
--formatCLI choices —init,update,upgradecommands derive choices fromVALID_FORMATSinstead of hardcoded list.
Fixed
- Excluded command stripping —
strip_excluded_command_references()strips/project-sprintreferences from all rendered prompts for formats that exclude it.
2.9.4 — 2026-03-31
Fixed
- Init playbook DIP violation — Eliminated
DETECTED_ENVruntime IDE detection; all hardcoded paths replaced with template variables. - Full DIP audit — Fixed hardcoded IDE paths in doctor skill, core-protocol rule, and done command.
- tree-sitter promoted to core dependency — No longer optional; CI install updated.
--focusscan optimization —_scan_filesnow scans only the focused subdirectory, not the full project root.- SCAN_EXCLUDES expanded — From 13 to 30+ entries covering Go, Java, Node, IDE, and VCS directories.
2.9.3 — 2026-03-31
Added
- Multi-language call chain fix (STORY-slim-069) — Dispatch hint comment parsing (
pactkit-trace: dispatches_to) and inheritance edge linking extended from Python-only to Go (struct embedding), Java (extends/implements), and TypeScript (class extends) tree-sitter analyzers. - CLI visualize args exposed (HOTFIX-slim-070) —
--entry,--focus,--reverse,--depth,--max-nodesnow reachable frompactkit visualizeCLI.
Fixed
- 4 call chain断链 (STORY-slim-068) — dict.update scan collision, dynamic dispatch hints, abstract method orphan nodes, cross-package stub edges.
- Nested subgraph call graph (STORY-slim-067) — Fan-in/fan-out analysis with subgraph grouping.
- Edge dedup + cycle fix (HOTFIX-slim-069) — ×N labels for duplicate edges, false positive cycle detection eliminated.
2.9.2 — 2026-03-30
Fixed
- FormatProfile.excluded_commands —
project-sprintexcluded for OpenCode/Codex (requires subagent team, Claude Code only). Doctorcheck_config_driftnow respects format-level exclusions. - Redundant pactkit.yaml component lists — Removed explicit agents/commands/skills/rules lists from
.opencode/pactkit.yaml(absence = deploy all). - Orphaned spec cleanup — Removed 7 pre-developer-prefix spec files that were already archived.
2.9.1 — 2026-03-30
Added
- Topology-aware trace — ApiCallParser (tree-sitter-typescript) and AgentParser (LangGraph/YAML/MCP) for multi-topology code tracing. Plan/Act phases now include topology gate.
Fixed
- Monorepo subdirectory detection — TopologyParser.detect() now scans immediate subdirectories, fixing false negatives for monorepo layouts.
- Doctor false drift warnings —
check_config_drift()now searches global deploy directories instead of only project-local paths. - Canonical lessons.md header — Init enforces
| Date | Lesson | Context |table header, preventing AI-invented column names.
2.9.0 — 2026-03-28
Added
pactkit initdeploys all IDEs by default —--format allis now the CLI default, deploying Claude Code + OpenCode + Codex configs in one shot. No need to specify--formatper IDE.
Fixed
- Entry_point deployer circular import — Lazy-load entry_point deployers to fix
ValueErrorwhen runningpactkit initvia pipx.
2.8.0 — 2026-03-27
Added
- 3-IDE Default Install —
pip install pactkitnow installs all three IDE adapters (Claude Code + OpenCode + Codex) out of the box.
Fixed
- OpenCode Command Architecture — Reverted OpenCode from skills-only back to
commands/+skills/dual architecture. OpenCode auto-discovers commands fromcommands/*.md, while embedded skills inskills/are loaded by AI agent on demand. - Spec Version Confusion —
/project-planno longer reads version frompactkit.yaml(toolkit version). Now explicitly reads from project manifest (pyproject.toml,package.json).
Changed
- Cross-IDE Command Architecture:
- Claude Code: skills-only (
skills/project-*/SKILL.md), prefix/ - OpenCode: commands + skills (
commands/project-*.md+skills/pactkit-*/SKILL.md), prefix/ - Codex: skills-only (
skills/project-*/SKILL.md), prefix$
- Claude Code: skills-only (
2.7.0 — 2026-03-27
Added
- Commands → Skills Migration (STORY-slim-063) — 11 PDCA commands now deploy as
skills/{name}/SKILL.mdsubdirectories for Claude Code format.VALID_SKILLSexpanded from 10 to 21 entries. - Legacy Command Cleanup — Auto-removes old
project-*.mdfromcommands/on upgrade. - Codex FormatProfile (STORY-slim-060) — Re-added
codexprofile to core for thin adapter pattern.pactkit-codexpublished to PyPI. - 3-Package Coordinated Release — First simultaneous release across
pactkit,pactkit-opencode, andpactkit-codex.
Fixed
- board.py update_task (HOTFIX-slim-061) — Recognizes bullet-format Done entries.
- visualize --lazy focus (HOTFIX-slim-062) — Removed hardcoded focus refresh; added stem matching.
Changed
- Unified deploy summary shows
Skills (embedded + commands)count. - Cross-format isolation: OpenCode and Codex unaffected by skills migration.
2.6.0 — 2026-03-26
Added
- DeployerProtocol & DeployerBase (STORY-slim-057) — Extracted deployer interface and shared base class with registry pattern for adapter-based plugin architecture.
- pactkit-opencode Adapter Package (STORY-slim-058) — Extracted all 8 OpenCode-specific functions into standalone package with entry_points-based auto-registration.
- Entry Point Auto-Discovery — Scans
pactkit.deployersentry_point group at import time for zero-config adapter registration.
Removed
- Codex Profile (STORY-slim-059) — Removed dead codex FormatProfile and all references. VALID_FORMATS auto-shrinks via FORMAT_PROFILES.keys().
- OpenCode Functions from Core — 8 functions (~300 lines) moved to pactkit-opencode adapter. deployer.py reduced -17%.
Changed
- deploy() dispatches via registry instead of if/elif chain. New formats only need register_deployer().
2.5.0 — 2026-03-26
Added
- E2E CLI Coverage 100% — 60 subprocess-based E2E tests covering all 25 CLI subcommands
python -m pactkit— Package now supports module invocation as alternative entry point
Fixed
- Mermaid Quote Injection — File/function names containing
"no longer break.mmdgraph rendering - O(N×E) Callee Resolution —
_resolve_callee()uses pre-built suffix index for O(1) lookup - Module Index Collision — Same-name files in different directories no longer cause silent node loss
- Focus Substring False Positives —
--focus auth.pyno longer matchesoauth.py - BFS O(N²) Pop — All BFS sites now use
deque.popleft()instead oflist.pop(0) - Non-Atomic Writes —
pactkit.yaml,.mmdfiles, andatomic_write()all use tmp+rename pattern - Deployer Encoding — 3 bare
read_text()calls now specifyencoding='utf-8' - Large File OOM —
MAX_FILE_BYTES=1MBguard prevents OOM on auto-generated mega-files - Sprint Redundant Operations — Eliminated duplicate visualize/clean/context runs
2.4.1 — 2026-03-26
Fixed
- CI Template Override —
pactkit updateno longer reverts customci.install_cmdinpactkit.yaml - Board ID Validation — Now supports developer-prefixed IDs (
HOTFIX-slim-052,STORY-alice-001)
Added
- Board
move_storyCommand — Move stories between board sections via CLI - Automated PyPI Publish — Tag-triggered CI publishes to PyPI via trusted publisher (OIDC)
Changed
- Closed-Source Migration — Source repo now private; public entry point at pactkit-public
2.4.0 — 2026-03-25
Added
- Multi-Architecture Topology Analysis —
pactkit visualizenow understands 3 project topologies beyond code structure:- PDCA topology — Plan→Act→Check→Done sequence edges in workflow graphs
- Service topology — Parses
docker-compose.yml,openapi.yaml,*.protofor service dependency graphs - Frontend topology — Parses Next.js (App/Pages Router), Vue Router for page→component→hook→store chains
- Cross-topology impact — Regression analysis works across all topology types
- Unified layered graph — Merges code + topology dimensions into a single visualization
Fixed
- Topology auto-detection reliability improvements
- CI dependency configuration for multilang test coverage
- Spec/PRD cross-reference consistency (4 issues)
2.3.0 — 2026-03-22
Added
- 25 Deterministic CLI Subcommands — Core operations now run as Python code, not prompts:
clean,regression,context,lint,test-map,coverage-gate,doctor,spec-lint,spec-status, and more - Coverage Gate —
pactkit coverage-gateenforces 3-tier thresholds (≥80% PASS, 50-79% WARN, <50% BLOCK) - Auto Version Sync —
pactkit update --if-neededskips redeploy when already current - E2E Testing Framework — Config-driven E2E strategy in
pactkit.yaml - Spec Linter Enhancements — W007 Req-AC coverage, W008 placeholder detection, E007 per-subsection validation
Fixed
- Plan phase stall on large Spec generation (split into sub-steps)
- Explore subagent unbounded search (bounded delegation pattern)
- 25+ cross-flow integrity gaps across CLI and prompt references
2.2.0 — 2026-03-20
Added
- Context-Aware Rule Loading — Each command loads only the rules it needs, reducing token usage by 20-83%
- Stack-Aware CI Pipeline — Supports Python, Node.js, Go, and Java with correct setup and test runners
- GitHub Enterprise (GHE) Support —
ci.github_hostandci.actions_refconfiguration
2.1.0 — 2026-03-17
Added
- Multi-Format Deployment — Adding a new AI tool format requires only one registry entry; all downstream code auto-adapts
- Template Variables — 48 hardcoded paths replaced with named placeholders resolved at deploy time
- Document Schema Registry —
pactkit schema [type]CLI for document structure rule discovery - Lazy Rule Loading — Per-turn system prompt overhead reduced by 62%
Fixed
/project-initenvironment detection improvements- Config merge preserves user entries (no more overwrites)
Earlier Releases
- 1.5.0 — PDCA Quality Gates, Impact-Based Regression, Done/Release/PR command split, Community Standards
- 1.4.0 — Spec Linter (14 rules), Active Clarify Gate, Pre-Act Consistency Check, Auto-PR
- 1.3.0 — CI/CD Pipeline Generation, Issue Tracker Integration, Hook Templates, Doctor Diagnostics
- 1.0.0 — Initial public release. 9 agents, 13 commands, 3 skills, 6 constitution rules