格式遵循 Keep a Changelog。
4.1.0 — 2026-10-02
增强旧项目兼容诊断与安全迁移能力。 策略有歧义的项目会被要求裁定—— 而不是被替你裁定。
这一版不承诺所有老项目自动迁移,也不承诺行为完全不变。它承诺的是: 支持范围内有证据、范围外有明确提示、任何情况下不静默改变项目策略。
升级编排(必读)
四包共享 major.minor,lockstep 发布。 每个 adapter 钉
pactkit>=4.1.0,<4.2.0,且 doctor.check_adapter_compat 要求 adapter 的
major.minor 等于 core 的。core 4.1.0 与 4.0.0 的 adapter 是明确不允许的组合
——部署会被 skew guard 拒绝。
升级 CLI 会立即改变旧 hook 的行为,但不会迁移项目。 旧 Git wrapper 执行的是
PATH 上的 pactkit,所以 pip/pipx 升级后下一次 git push 就跑新版本;而项目的
配置形态、hook 链、.gitignore 都不会被改写。要在项目里换链,跑
pactkit commit-gate --install --migrate。
升级前核对三样,不能只看版本号:版本(pactkit version)、安装来源
(pip show / direct_url.json)、产物完整 sha256。本机历史上存在多个不同构建
都报同一个版本号的情况。
新增
- 项目形态盘点。
init/update/upgrade与commit-gate --install会先打印一张逐入口表——同一形态在不同宿主信号下各读到什么——并明确说明 不会替你改配置。只读、只报、不阻断。 - 配置三层事实(发现 / 选择 / 解析)。
doctor --json给出候选、选定层、 解析状态与比较完整性。"多份副本且无共享层"与"没有配置"现在是两个不同的状态。
修复
- Copilot 适配器不认
-C。pactkit -C <别的项目> update --format copilot会把 44 个生成物写进调用方 cwd:分派器对「签名里没有project_root」的 deployer 静默丢弃该参数,而 copilot 的部署根是项目相对的.github/,于是退回Path.cwd()。现在明确拒绝而不是丢弃;三个 adapter 都接收并使用项目根。 doctor把同一批分歧打印两遍。 逐键详情现在文本里只留一次摘要,完整内容 在doctor --json的config_source.divergence里——而那份 JSON 此前一条都 没有。
说明
支持范围——哪些可兼容读取、副本如何选择、update 保护什么、以及未覆盖什么
——见 migration-support-scope-4.1.md。一句话版本:无宿主信号的进程会兼容读取
恰好一份宿主副本(至 5.0.0 到期);两份以上且无共享层则一份都不选,
有效值全部来自默认。
4.0.0 — 2026-09-26
Kernelization + Repository Coherence。 宿主归属彻底移出 core;生成的配置 写到哪里,不再靠猜。
自 3.1.0 起全部是契约边界变更——这是 major 而不是 minor 的原因。即使不拆 任何包,4.0 仍改变 spec lifecycle / story 状态机 / evidence contract / prompt 生成模型 / truth hierarchy / 迁移行为 / artifact 元数据 / garden 语义。
升级编排(必读)
四包共享 major.minor,lockstep 发布。 两条独立的锁表达同一件事:每个 adapter
钉 pactkit>=4.0.0,<4.1.0,且 doctor.check_adapter_compat 要求 adapter 的
major.minor 与 core 相同。
core 4.0.0 与 3.x 的 adapter 是明确不允许的组合——部署会被 skew guard 拒绝:
✗ Adapter pactkit-codex 3.1.0 incompatible with core 4.0.0 (major/minor mismatch)这是刻意选择的更轻失败模式:import 正常、注册正常,只有部署被拦下,可用
--allow-adapter-skew 显式放行。请四包一起装:
pip install -U "pactkit==4.0.0" "pactkit-opencode==4.0.0" \
"pactkit-codex==4.0.0" "pactkit-copilot==4.0.0"移除
- core 不再为任何外部宿主声明任何东西(SPEC-4.0-22 Step 7)。profile、能力、
pre-tool 面、部署声明、安全事实、线格式,全部由各自 adapter 自带并经
entry-point discovery 注册。core 只保留它自己随包发布的
classic。 resolve_pactkit_yaml_dir的目录存在性回退(Step 8)。写入目标不再由 「哪个目录碰巧存在」决定——实测mkdir .opencode && pactkit init --format classic会把 classic 的配置写进.opencode/pactkit.yaml。规则改为: 读取可以发现已有层;写入必须知道自己正在为哪个 format 写。- adapter 的内联
pactkit.yaml模板(Step 8 R-②-1)。它们写出的stack: unknown不在 core 的VALID_STACKS里,且没有schema_version—— adapter 在写 core 校验器会拒绝的值,而没有人读回来看。
变更
- 所有宿主的
pactkit.yaml由同一个 canonical format-aware generator 产生。 adapter 只声明位置(profile.pactkit_yaml_path)与是否需要,不再发明格式。 - opencode 现在真的生成
.opencode/pactkit.yaml。 此前它被声明、被搜索、 从不被生产者创建——却能被别的宿主创建。「声明 + 搜索 + 不生产」会让后续判断 把一个不存在的状态当成正常候选。 register_adapter的重注册保留input_translation。 它是第五个声明成员, 此前漏了 carry-forward:重注册会静默撤回线格式声明,translate_host_payload随即认不出该宿主,整条通道 fail-open。
说明
- 四宿主在 fresh init 下生成的配置逐字节相同。已存在任意
pactkit.yaml的项目不自动增殖宿主副本——它继续复用现有层(已知行为,非缺陷)。 - 本段在
v4.0.0tag 之后补写,因此不包含在 tag 指向的那棵树里。
3.1.0 — 2026-09-25
宿主归属移出 core。这是契约边界变更,不是内部重构——所以是 minor 而不是 patch。
移除
- core 不再为 opencode / codex / copilot 声明任何东西;过渡期的 API 与状态整体删除。
变更
- 宿主从「core 预置」变成「adapter 装上才出现」。未安装的宿主无法注册,所以
format: all不会为一个从未部署过的宿主安装通道。
说明
- 升级顺序有讲究。 core 与 adapter 必须共享 major.minor。本版要求 adapter 先升; 把新 adapter 装到旧 core 上会让 pip 为满足钉版而静默降级 core。
3.0.4 — 2026-09-24
为 adapter 解锁的 core 依赖发布。宿主描述数据从 core 的硬编码表迁进可注册的
AdapterRegistration,并落地三个 adapter 自带声明所需的类型与 API。这不是 PactKit 4.0 的最终发布——4.0 的 lifecycle closure 还在后面。本版的 定位是让 adapter 能站起来,不是宣布内核化完成。
升级
新 adapter + 旧 core 是不兼容组合,不是运行时回归。 三个 adapter 钉
pactkit>=3.0.1,<3.1.0,所以升级到新 adapter 时 pip 会同时把 core 升到本版;
只升 core 不升 adapter 是安全的。反过来,手工把新 adapter 装到 core 3.0.3 上
会得到 ModuleNotFoundError: No module named 'pactkit.capability',注册表退化成
只剩 classic——这是安装组合的问题,不是缺陷,重装 core 即可恢复。
新增
pactkit.capability—— 四级能力解析与多维保证模型(SPEC-4.0-04)。AdapterRegistration与声明类型 ——InputTranslation、DeploymentClaim、SecurityDeclaration、SecurityFacts。宿主描述(能力、pre-tool 面、部署声明、 安全事实)现在由 adapter 自带,complete_registration负责采集 (SPEC-4.0-22 Phase B / Step 6)。- Adapter SPI 公开面冻结 + 宿主分派棘轮(SPEC-4.0-03)。
变更
- 未登记的宿主不再伪造一整套 Degraded 能力。 unknown host 如实报
unknown_host,而不是给出一张看起来像测量结果的能力表。 - 需要 tamper_guard 授权的写操作,在安全事实声明不完整时不再放行。 三态模型
区分
missing(宿主没说话 → 我们不知道)与empty(宿主说了它没有 → 这是一次 测量)。missing归为授权未决,fail closed 并点名不完整的类别;补齐声明后回到 正常的细粒度裁决(普通编辑放行、绕过仍拦)。 - doctor 的宿主枚举只来自 registry,路径从 profile 派生。
- 路径值改派生 —— 禁写路径模式由 7 条增至 12 条,覆盖全部已登记宿主的 config 目录。
修复
--overlay只接受 complexity schema,不支持的输入显式失败。blast_radius的 resolver 只认 exact path;shorthand 需显式开启,歧义不任选。 四种空结果拆开:resolved/not_found/out_of_scope/truncated。- analyzer 能表达「读不了」——四份复制的契约收敛为一份。
query的空结果不再被当成 absence 的证明。done-verify不再把 blockquote 里的路径当成磁盘路径。report/visualize的扫描器按 ownership metadata 排除 PactKit 部署产物。- Story 生命周期成为契约——状态机由数据定义,归档不再冒充完成。
3.0.3 — 2026-09-21
证据链路的三个边界修复。其中一处会销毁已有记录。升级即可,无需迁移。
修复
-
已提交的越界改动会从范围检查里消失。 范围完整性只比对
git diff HEAD(工作区状态),committed diff 那半没有实现——于是提交一次,越界文件就 从测量范围里消失,completion_ready从false翻成true。多次提交的 Story、提交后的 Check、会话恢复后的检查都会得到错误结论。起点现在绑定在 Act 的 preflight receipt 上(代码触点,不靠人记),检查起点 到工作区的完整变化。起点是粘性的:重跑 preflight 不会前移。找不到可信 起点时如实报
not-measured,而不是报「无越界」。 -
「未测量」能生成 green 记录。
pactkit evidence-measure --record调record_verification()时不传outcome,取了默认值"green"——一个测试 都没跑也记成「回归通过」。更深一层:判定函数只比对内容指纹,从不检查记录里 有没有回归证据,所以那条记录会发放reuse许可,下游据此真的跳过回归。现在
outcome必填、测量走独立入口、复用要求outcome == "green";失败的 记录路由到全量重验而不是最轻的分类路径。 -
不同证据写入同一 Story 记录会互相覆盖。 写入整文件替换:写完负向控制 再写回归记录,前者消失;反之亦然。记录现在按证据类型分节 (
regression/measurement),各自绑定自己测得时的代码状态。 -
升级路径上的记录不会被销毁。 上一版之前写出的记录是扁平形状(回归 字段在顶层、测量块叫
evidence)——只认新形状的合并逻辑会让这类记录在 一次写入后静默丢失一半。合并现在同时认两种形状。
3.0.2 — 2026-09-21
两条 CRITICAL 门禁修复。 如果你用 PactKit 发过版,或者照着拦截文案 尝试过人工旁路,这一版值得升级。
修复
-
发布门禁可以在一个测试都没跑的情况下报 PASS。 Pre-Tag Gate 的 "Run tests" 那行指向的是
pactkit regression——它是个分类器, 在 SKIP / IMPACT 两条路径上都 exit 0。于是紧跟其后的 "If either fails" 永远不会因为测试而触发。现在该行指向真正的测试运行器,并显式标注pactkit regression只做分类。 -
人工旁路文案给出的形式做不到。 拦截消息曾建议
PACTKIT_ALLOW_SECRET=1 <command>这类内联前缀。实测:旁路判据读的是 钩子进程自己的环境变量,而 PreToolUse 钩子在命令执行之前由宿主 以会话环境启动——内联变量只作用于子进程,结构性到不了。照文案做会 被继续拦下,命令一次都没跑起来。现在全部出口经由单一渲染器
bypass_message.human_channel()产出,按 「面」分别说清:PreToolUse 面(内联做不到,请在会话外终端执行、或会话 启动前 export)与 git hook 面(终端里VAR=1 git <cmd>可以,git 会把它传给自己的 hook)。 -
pactkit doctor的两个表面会对同一棵树给出相反结论。 text 模式 exit 1、JSON 模式 exit 0。现在两处共用同一个 verdict 来源。 -
done-verify把通配符当成声明文件。_real_path只挡花括号是它自己 规则的不完整实现。 -
audit 的「有测试吗」判定靠猜文件名,产生 40 个假阴性与一批垃圾任务。 现在改用图证据(调用边 ∪ 导入边 ∪ 命名约定)。
新增
pactkit evidence-measure:把「范围完整性」与「变异验证(negative control)」从散文变成可执行的测量。negative control 同时控住三件事—— 变异前基线必须绿、每个文件跑完必须还原、只把退出码 1 算抓到——缺任何 一件都会产出 false pass。- R8/R9 两条 MUST 接上
delivery_evidence,从散文变成 code touchpoint。
3.0.1 — 2026-09-19
分发收口 + 门禁修复。plugin/marketplace 通道退役——现在所有安装都走 pip; OpenCode 补上 pre-tool 门禁通道。
迁移(3.0.0 → 3.0.1)
-
plugin / marketplace 分发通道已移除。
pactkit init --format plugin与--format marketplace不再存在。如果你是通过 Claude Code 的/plugin marketplace add pactkit/claude-code-plugin安装的,那个仓库已归档、 不会再更新——卸载后改用 pip:claude plugin uninstall pactkit # 在 Claude Code 中 pip install pactkit && pactkit init -
四个宿主现在各自只有一条通道:Claude Code 由核心包自带;OpenCode、Codex、 Copilot 各装自己的 adapter(
pactkit[opencode]、pactkit[codex]、pactkit-copilot)。 -
已有 pip 安装无需任何动作,
pactkit update照常。
新增
- OpenCode pre-tool 门禁通道。 门禁插件全局部署,靠激活标记按项目生效、 fail-closed。负载翻译下沉到 Python,core 的绕过回归用例现在覆盖所有宿主通道。
- 组织基线 GPG 分离签名——来源可验证,缺签名则 fail-closed。
修复
- 门禁矩阵按「层 × 门」陈述事实,且部分覆盖现在一定会被说出来——把「覆盖 一半」读成「检查过了」正是它要防的事。
- 未知可写工具改为拒绝,不再半判。 拿不到完整负载却给出确定结论,会把 「没检查」读成「检查通过」。
- OpenCode
edit的replaceAll未映射——门禁按单次替换模拟,一次弱化 全部匹配的编辑在 OpenCode 放行、在原生 Claude 被拦下。 - 项目级 agent 指令不再
@import一个没有东西在生成的文件——三个 adapter 模板都受影响。 secrets_baseline同一行的多个条目不再互相覆盖,且工具不再掩蔽自身的损坏。
3.0.0 — 2026-09-18
架构瘦身收口版本。Git hook 层换成 pre-commit(唯一调度器),凭据引擎换成 detect-secrets(上游),代码关系统一到 Codegraph(MMD 文件变为渲染视图),
pactkit.yaml改为按终端分层读。这是主版本变更:旧 Git hook 需要显式迁移, 升级前请先读迁移说明。
迁移(2.27.0 → 3.0.0)
- 新增标准依赖:
pre-commit与detect-secrets随基础安装发布,pip install --upgrade pactkit即得。detect-secrets-hook经 PactKit 转发, 不需要出现在 PATH 上。 - 旧 PactKit Git hook 显式迁移,绝不自动切换:每个项目先跑
pactkit commit-gate --install --check(只读预检),再跑--install --migrate。 可确认未被修改的旧 wrapper 备份到.pre-pactkit-migration后由 pre-commit shim 替换;你自己改过的 hook 一律不碰——迁移会停下并列出它们。 .pre-commit-config.yaml不再记录机器本地绝对路径:entry 只写 PATH 上的pactkit,因此同一份进版本库的配置对每个开发者、对 Linux CI 都成立。迁移会把 旧版写下的绝对路径改写为共享形态;pactkit doctor会点名仍存在的那些。- 配置按终端读:仓库根的
pactkit.yaml是共享层,适用于所有宿主,以及一切 没有宿主信号的进程(裸终端、CI、以及 Git hook——pre-commit/pre-push 是宿主无关的, 没有终端可问)。.claude/、.codex/等宿主副本按键覆盖它。必须处处生效的策略 (尤其enforcement.*)写共享层。pactkit schema config会打印宿主、层与每个键的来源。 - 回滚:
pip install pactkit==2.27.0(适配器在同一条命令里钉同窗口), 然后pactkit update。要一并撤掉 Git hook,用pactkit commit-gate --uninstall-chain——它只删 PactKit 自己的条目与 shim, 你自己的检查与 baseline 原样保留。
新增
- Codegraph 是代码事实的唯一源,MMD 是渲染视图:
pactkit sync建索引,pactkit visualize从索引渲染docs/architecture/graphs/*.mmd,审计洞察读同一份 索引。自研扫描器永久退役——没有索引时visualize明确失败,不回退去猜。 - 首次运行检查:安装或升级后,项目里第一条 pactkit 命令会跑一次只读的、 每版本一次的项目级检查(配置漂移 / 图视图 / 门禁链),每条发现都给出精确的下一步 命令。报告走 stderr,不改任何文件。
- pre-push 能力边界写入
pactkit doctor与支持矩阵:一次 push 携带多个 refspec 时只有第一个 ref 到达策略;删除远端 ref 完全不触发 pre-push。这是 pre-commit 自身的边界——没有为此再造第二个调度器,受保护分支的删除防护属于服务端。
变更
- 配置副本不再自动抹平:按终端读之后,把一个宿主的内容覆盖到其他宿主,抹掉的
正是这套解析要保住的终端差异。要统一现在是显式选择:
pactkit update --sync-config-copies。 spec_edit授权 token 移除:Act 中途改 Spec 只走人工通道 (!前缀 +PACTKIT_ALLOW_SPEC_EDIT=1)。
修复
- 卸载不再删除用户配置:旧的按行删除用一个只有
repos:行才能清除的标志来跟踪 "正在跳过",于是排在我们最后一个 hook 之后的顶层键(fail_fast:)被一起吃掉; 更糟的是解析失败的配置被当成空配置然后删掉文件。读不了不等于没有——解析失败现在 原样停下。 - 首次安装部分失败可完整回滚:旧回滚只恢复自己移除过的 wrapper;一个原本没有 hook 的项目可能被留下一个新建的 shim 而没有配置——一个每次提交都失败的 hook。 现在本次运行新建的文件也会被移除。
- 合并路径尊重既有 baseline:
generate_config会写args: [--baseline, .secrets.baseline],但"合并进已有配置"这条路径手写了自己的 凭据块并丢掉了这一行——已复核的 baseline 留在磁盘上却不被使用,此前放行的测试数据 又重新挡住提交。两条路径现在渲染自同一份 hook 定义。 - 发布门禁不再可能选中日常验收:同一个 commit 现在同时有日常(单版本)与发布 (四版本)两条验收,只按 SHA 选等于"API 先列出哪条"。现在匹配本 tag 的 push 事件 与 SHA。
2.27.0 — 2026-09-17
安全加固版本:六轮对抗评审修复 34 条门禁缺陷 + 项目契约生命周期 (adopt / reconcile / project-preflight)。包含行为变更,升级前请阅读 Migration。
Migration (2.26.1 → 2.27.0)
- spec_guard:内容漂移从「解锁」改为「锁定」——live receipt 哈希与 Spec 不符 意味着 Spec 被改过,这正是该门禁存在的理由。已授权修改通道不变。
- secrets_gate / auth_gate 审计不再回显命令文本——清洗只覆盖已知凭据形态, 同一条命令里未命中的凭据会随之进入审计记录。
- tamper_guard 保护面扩大:
.pactkit/整目录、settings.local.json(宿主 会把 settings 的 env 注入 hook 进程且会话内热加载——一次 Write 即可关掉全部 门禁)、全部四份pactkit.yaml候选。agent 确需编辑时走PACTKIT_ALLOW_CONFIG_EDIT=1人工通道。 - core 与 adapter 一起升级:
pip install -U pactkit pactkit-codex pactkit-opencode(双向钉版 2.27.x)。
Added
- 项目契约生命周期(#13):
pactkit adopt(最小本地契约)、pactkit reconcile(安全迁移——行级插入保注释、写前回读验证)、pactkit project-preflight(四态 检查)。项目采用纯本地:无注册表、无扫描、无跨项目变更。 - 支持矩阵
docs/guides/support-matrix.md:宿主 × 门禁 × Python × OS,从安装器 事实派生并有守卫测试。OpenCode / Copilot 只有 git-hook 层——四个 pre-tool 门禁 在该层不存在,矩阵如实写明。
Fixed — 六轮对抗评审(34 条)
- push_gate:带引号 refspec 与强推标记曾放行受保护分支并写入假保证;
$VARrefspec 改判不可解析(WARN + DEGRADED);pre-push hook 改用 git 传入的 refspec (feature 分支推 main 曾真实放行);git -C决定被检查的仓库。 - commit_gate:
git -c core.hooksPath=/dev/null commit曾使 RED 代码零验证落地 (含大小写变体与 GIT_CONFIG_* 注入);分派锚定命令位置(伪装成 git 命令的 printf 写受保护文件曾整体绕过);审计写失败不再把 BLOCK 翻成崩溃。 - tamper_guard:复合命令回归;配置弱化跨四份候选拦截;settings env 旁路通道;
touch .pactkit状态目录替换;符号链接与大小写拼写(Edit + Bash 两面);replace_all模拟。 - secrets_gate:补齐 curl -u / Authorization 头 / sk-proj- / AWS secret / URL 凭据 / sshpass·docker·redis·openssl 内联口令;私钥正文整段清洗(此前只清 BEGIN 行——防泄露门禁自己在把密钥正文写进审计记录)。
- auth_gate:子命令前置全局旗标(跨仓库
-R形态);审计不回显命令。 - 基础设施:原子写统一单一临时名实现;gate 名路径逃逸守卫;YAML 异常不再逃出 hook;clean 对符号链接不崩溃不跟随。
2.26.1 — 2026-09-15
Fixed
- deploy 不再因扫描根下的不可读目录崩溃——
Path.exists()只吞 ENOENT/ENOTDIR/ELOOP,EACCES 会直接抛出;GitHub runner 的/tmp含 root 属主 0750 的systemd-private-*目录,中性 cwd 下 deploy 的子目录 marker 检查抛PermissionError。所有 marker 检查改为 OSError 安全版。
2.26.0 — 2026-09-15
产品重定位版本:PactKit 收敛为轻量开发赋能脚手架——无管理员、无集中控制、无自建服务。
Migration (2.25.2 → 2.26.0)
- 自建 MCP server 已退役:
pactkit mcp变为兼容说明入口;Codex gate 通道从 MCP 迁移到原生 hooks;新部署默认零 MCP 注入。 - 配置入口统一:
load_effective_config是唯一配置解析入口(候选优先级 + 基线合并 + tighten-only)。 - 验证决策是结构化数据(ADR-0004):Done 按
decision.verdict路由。 - 规则语料为 CI 不变量(ADR-0005):改规则必带语料案例。
Added
- 轻量脚手架重定位落地:候选清理限定受管范围;统一有效配置与门禁语义;三宿主 prompt 正文摘要 golden(删改必被检出);真 wheel 组合验收。
- 提交路径收敛:worktree/
core.hooksPath单次测试执行者(不再双跑);被改测试文件直接映射自身;映射为空走快速层而非静默全量;多语言仓跑全部检测到的原生套件;gate 计划先行 + 流式输出 + 每步耗时入记录;暂存区为准。 - 验证事实与治理收敛:验证记录以内容指纹为主键(跨 Story 复用);无新鲜无歧义 receipt 时盖章为无归属;PreCompact 单次生成;spec guard 指纹失效解锁;遥测可关。
- 工程指导按缺口加载:复用四判断集中于共享 capsule;Act 缺口驱动(空结果≠无风险、0 篇有效、超三篇仍读);Plan 关键词降为候选信号;Check 独立复用审查。
- 结构化验证决策接口(ADR-0004/0006);固定语料规则评估(ADR-0005);codegraph 集成(ADR-0008,
pactkit queryCLI 路由)。
Fixed
- gate -qq 误报(junitxml 权威计数);流式 pytest 输出保住超时上限;done-verify 占位符缺陷;
pactkit risk输出对齐软预算语义。
Changed
- Spec 编辑锁定从"有 receipt 即锁"改为指纹失效制;验证记录无归属时不再猜 Story;PreCompact 不再全量刷新。
2.25.2 — 2026-09-02
修复
- commit-gate 计数不再受仓库
addopts干扰 —— gate 此前从 pytest 终端 summary 行解析通过/失败计数,但仓库的addopts = "-q"会与 gate 自带的-q叠加成-qq,pytest 9 在该级别下完全不打印最终 summary 行:每次运行都解析为全零,真实失败的运行被误报为 "no tests collected"。计数现在改走--junitxml旁路通道(verbosity 无法抑制),终端解析降级为回退;仓库addopts其余完全保留(--asyncio-mode=auto等必需旗标照常生效),禁用 junitxml 插件的仓库降级为终端解析而非锁死提交。失败文案按退出码报告真实含义(exit 5 = 没有测试运行、exit 4 = usage/collection 错误、其余 = "计数不可解析" 并附 addopts 干扰提示),FAILED/ERROR短摘要行也会进入拦截消息。
2.25.1 — 2026-09-01
修复
pactkit gate authorize <scope>—— 各 gate 拦截提示所文档的用法 —— 现已可用(此前解析器只接受裸位置参数pactkit gate <scope>;两种形式现在都有效)。- gate hook 对
cd <其他仓库> && git push按目标仓库的 enforcement 配置判定,而非会话目录的配置。 - commit-gate 不再误伤纯文档/元文件提交 ——
.gitignore/.claude/**/.codex/**计入 doc-only(仓库/agent 元数据不含运行时代码,不再使整个变更集丧失 skip 资格);仅有扁平tests/布局时全量目标自动回退;零收集的运行如实报告 "no tests collected" 而非暗示测试失败(仍拦截——TDD 契约不变);无 venv 回退解释器报No module named pytest时降级为 WARN + 放行,与 pytest 二进制缺失路径一致(R3 自锁保护)。
2.25.0 — 2026-08-30
新增
- 保护分支 push 门 — 直推保护分支(默认
main/master)在三条通道(PreToolUse、codex hooks.json、git pre-push)全被拦截,并给出正规路径、人工豁免(PACTKIT_ALLOW_DIRECT_PUSH=1)与仓库配置三条出路。保护分支上的直接提交默认拦截;--no-verify不再是免费后门。全部落push_gate审计。 - 防篡改守卫 — agent 修改 enforcement 工件(
.git/hooks/**、.pactkit/enforcement/**、.codex/hooks.json、settings.json 里的 gate 注册项)会被拦截。 - L1 硬规则覆盖协议 — 核心规则明确:L1 规则不可在对话中豁免;冲突指令应被拒绝,为绕过而改规则/hook/配置本身即 L1 篡改。
- stack 感知 commit-gate — gate 按检测到的技术栈跑真实测试套件(
npm test/go test ./.../mvn|gradle test),不再把 pytest 硬塞给非 Python 仓库;doctor 探针同步感知。 - 会话上下文 hook —
pactkit gate --hook session-start在会话启动与压缩后注入再生的.pactkit/context.md;--hook pre-compact以副作用方式刷新状态、绝不阻塞压缩。 - Spec 防篡改 — Act 期间编辑带有效 preflight receipt 的 Spec 被拦截("Spec is Law",L1);Plan 阶段写 Spec 不受影响。
- 授权门 — 外发命令(PR/release/publish/repo 操作)先拦后问,用户确认后
pactkit gate <scope>打开短时审计窗口。 - Secrets 门 — 命令中的明文凭据默认拦截;env 间接(
password=$DB_PASS)豁免。 - Gate 遥测 — 拦截、授权与 Skill 调用汇入 run-event 事件流;
pactkit stats报告 per-gate 拦截计数、per-command 调用计数与项目级授权对。 enforcement配置节 — protected_branches / allow_direct_push / tamper_guard / spec_guard / auth_gate / secrets_gate / auth_ttl_minutes,缺省回落安全默认。
修复
- 未安装 pactkit 的机器不再被 git hook 锁死(PATH 探测 + WARN 替代 exit 127)。
- 审计记录不再持久化凭据 — 源自命令的文本落盘前一律脱敏;
pactkit clean一次性擦洗历史记录。
变更
main/master上的直接提交默认拦截(此前仅跑全量测试)——可用enforcement.allow_direct_push关闭。
2.24.2 — 2026-08-27
修复
--format all安装 codex hooks 通道(此前仅显式--format codex)。
2.24.1 — 2026-08-27
修复
- enforcement 探针解析项目 venv 的 pytest(pipx 安装的 CLI 不再误报 gate 不可用)。
2.24.0 — 2026-08-27
新增
- Run 事件流(append-only、崩溃容忍);
pactkit statsfriction 指标;gate enforcement 完整性上报(full/degraded/unavailable+pactkit doctor --jsonenforcement 节);Codex 原生 hooks 薄注册;授权审计(asked/granted/denied事件 +pactkit continuation deny);outcome_unknown 崩溃恢复(带 pid 的尝试围栏);command manifest v2 reference 摘要。
2.23.0 — 2026-08-27
取代已撤回的 2.21.0/2.22.0——两版本因重大缺陷在发布后不久从 PyPI 下架。
新增
- Spec 预检 + 原生会话——
/project-actPhase 0.7 在任何源码编辑前,确定性地内联 Spec 引用的实现输入与约束(附 receipts)。 - 渐进式 PDCA 规则加载——16 条按需规则按触发加载,每条规则声明具体触发条件与证据。
- 统一部署所有权安全——manifest 哈希所有权证明扩展到 skills、命令提示、agents、CLAUDE.md 与回滚:用户修改过的文件保留为
.pactkit-new候选,删除需要 manifest 证明。 - 机器校验的 prompt-to-CLI 一致性——prompt 引用未注册的 CLI 子命令会在 CI 失败,而不是让 AI 在会话中翻车。
- Legacy 引擎用量计数器——
pactkit doctor显示冻结 legacy 包的调用计数(删除闸门的决策依据)。
修复
- 门禁 fail closed——pip-audit 判定、coverage 阻断、commit-gate 收集失败不再伪装成通过。
- 不再卡死 run——消失的 artifact 以
artifact_vanished可恢复地失败,损坏的无关 run 文件安全跳过,Windows 引擎变更修复。 - pactkit.yaml 多副本同步——从实际加载的副本同步,写入原子化。
- Prompt 脱离 legacy 表面——Act/Plan prompt 不再调用弃用的
continuation/checkpoint 命令。
移除 / 弃用
- 移除 preflight guard 钩子(执行价值近乎为零、产生会话噪音);preflight loader 完整保留。
- Legacy workflow engine 冻结入
pactkit.legacy——删除候选,以一个发布周期零显式调用为闸门。
2.22.0 — 2026-08-24
新增
- 非标准目录布局的统一 WorkUnit scope 派生——WorkUnit 读写 scope 不再是硬编码的
src/**/tests/**白名单。resolve_scopeSSoT 在每个单元的冻结模板 floor 之上并集项目声明的write_scope根(source_roots/test_roots/docs_roots)与 Spec 的Touches,使frontend/src/、backend/、directus-extensions/等布局不再阻塞project-act/project-hotfix。取并集而非交集:Spec(Tier-1 律法)永不被 mutable config 裁剪。
修复
- 已完成 run 在跨 workflow 的合法 projection 演化中存活——Plan → Act 之后,
project-check/project-done启动与pactkit work-unit status <plan-run>不再以invalid_workflow_state崩溃。前置查找以宽松方式扫描 sibling journal,finalize-workflow将context.md重生成到 post-completion canonical。执行读取保持严格,篡改仍被检测。
2.21.0 — 2026-08-24
新增
- 完整的 Core 生命周期——全部 12 个
project-*命令都通过有边界、可版本化的 WorkUnit 执行。Core 负责证据校验、调度与日志化完成判定,模型的一次 final 回复不再等于 workflow 完成。 - 可恢复的 Codex 集成——官方 App Server bridge 为每个 run 持久化单一 thread,支持跨进程恢复、schema 约束输出,并把格式错误或 lease 故障转为持久化 retry。
变更
- Act 真正关闭 Story——RED → GREEN、回归、lint 和覆盖率门禁通过后,由可崩溃恢复的 Core 事务完成 canonical Story tasks 并重建 Sprint Board。
- 副作用必须显式授权——commit、push、PR、tag、publish、release 和 Sprint orchestration 在授权前暂停,不会先执行。
- 分布式 ID——移除顺序式
next-id,统一使用pactkit generate-id。
修复
- 流程提前停止——finish guard、持久化 attempt、幂等 finalizer 和跨进程 thread resume 使中断后的 Codex workflow 可继续恢复。
- 宿主能力诚实报告——Doctor 正确显示已验证的 Codex
resumable能力,同时保留每个宿主的独立保证等级。
2.20.0 — 2026-08-22
新增
- 可验证、可恢复的 Act checkpoint——Story 级 continuation 会在跨进程恢复时验证 Spec、Board、聚焦测试、回归和 lint 证据。
修复
- Adapter 安全渲染与部署门禁——跨宿主保留 CLI 语义,并阻止不兼容的 Core/adapter 组合。
2.19.0 — 2026-08-17
新增
- Spec 依赖声明(Dependency Surface)(STORY-slim-143)——每个脚手架生成的 Spec 现在都带机器可读的
## Dependency Surface表(Depends on / Provides / Touches / Conflict risk)。Story 先后顺序和文件级冲突面从脑内知识变成可计算的数据。 pactkit spec-graph(STORY-slim-143)——确定性的 story 依赖 DAG:拓扑执行波次(同波次 story 可并行)、文件重叠冲突矩阵、循环依赖检测、Mermaid 图输出。仅用标准库,零新依赖。- Sprint Wave 模式(STORY-slim-144)——无参数的
/project-sprint扫描 backlog,消费spec-graph --json,将无冲突的同波次 story 作为并行 worktree subagent 运行(上限sprint.max_parallel,默认 3)。有冲突或未声明 Touches 的 story 一律串行(safe-by-default);wave N+1 必须等 wave N 全部合并通过。单 story 模式行为不变。 - Linter 规则 E010/W011(STORY-slim-143)——悬空的
Depends on引用会阻断 Act;缺少 Dependency Surface 给出警告。
2.18.0 — 2026-08-17
新增
- 部署清单内容哈希(STORY-slim-141)——部署时在
.pactkit-deployed.json记录逐文件 sha256;pactkit doctor一致性检查下沉到内容级,"版本戳新、文件旧"的静默漂移变为显式报告。用户可改文件(CLAUDE.md、配置文件)结构性排除——你自己的追加内容零误报。 - adapter 版本偏斜告警(STORY-slim-142)——doctor 检测已装 adapter 包(如 pactkit-opencode)落后于 core 时给出 warning 和
pipx inject升级提示。
修复
- 预览/测试部署不再覆盖线上 adapter(STORY-slim-142)——
deploy(format="all", target=...)此前会以真实 home 目录调用 adapter deployer,静默覆盖~/.config/opencode等目录。现在带-t时跳过 adapter 并提示。 - CI 模板升级到 checkout@v7 / setup-python@v7——重新生成 workflow 不再回退 dependabot 更新。
2.17.0 — 2026-08-13
新增
pactkit done-verify(STORY-slim-136)——/project-done的归档诚实性机械核验:需求→测试证据链、勾选↔case 一致性、零调用方检测、Spec/Board/归档状态机一致性。FAIL 即阻止归档。pactkit commit-gate(STORY-slim-138/140)——提交前测试门禁,skip≠pass 透明化(跳过项显式列出)。Claude Code 走 PreToolUse hook 自动安装;非 Claude 格式自动兜底 git pre-commit。内置自锁防护。pactkit deps(STORY-slim-137)——外部依赖注册表(node/codegraph/gh),deps check检测 +deps install引导安装。/project-initPhase 1.5 询问后才安装;CLI init 只报告。pactkit schema config(STORY-slim-135)——列出全部配置键的默认值、生效值与来源。- doctor 部署一致性检查(STORY-slim-139)——每次部署落盘
.pactkit-deployed.json,跨格式漂移显式报告。
变更
- pactkit.yaml schema 化(STORY-slim-135)——CONFIG_SCHEMA 单一事实源;新 init 只写 stack+developer 极简配置;多副本同步 + 漂移检测。
- Skill 部署清单化(STORY-slim-139)——codex/copilot adapter 改为消费 core 清单,补回被静默丢弃的 garden/audit/report。
修复
- Codex adapter config.toml 策略——两次清空事故后,已存在的文件永不修改(仅不存在时创建)。
- OpenCode 全局 instructions——合并后的宪法不再被从 always-load 层剥离。
2.16.1 — 2026-07-23
修复
- Bedrock VS Code 插件模型兼容性 (STORY-slim-134) — 从所有
/project-*命令 frontmatter 中移除model:字段。Claude Code 会将model: sonnet/opus解析为 Anthropic 官方最新 model ID,绕过 VS Code 插件环境中的ANTHROPIC_DEFAULT_SONNET_MODEL环境变量设置。现在命令会继承用户 provider 环境变量所设定的 session 默认模型。
2.16.0 — 2026-07-13
新增
/project-debug命令 (STORY-slim-133) — 假设驱动的结构化排查。循环流程:症状 → 假设(≤3 个)→ 验证(可执行命令)→ 缩小范围 → 定位根因。强制"证据门控"文件访问(不允许漫无目的地读文件),3 轮不收敛自动升级到/project-plan。使用 sonnet 模型 + 结构化协议。
2.15.2 — 2026-07-02
变更
- Codegraph 命令与 prompt 解耦 (STORY-slim-132) — 将硬编码的 codegraph CLI 命令列表替换为运行时
codegraph --help动态发现。codegraph 升级时 PactKit 无需同步修改。
修复
- Act Phase 0.6 挪卡命令 (HOTFIX-slim-132) — 在 playbook 中写明
board.py move_story完整命令模板,避免 AI 每次猜错语法。 - Prompt deployer (HOTFIX-slim-131) — @ 引用插入到 YAML frontmatter 之后,确保 model: 字段被正确解析。
- Skill frontmatter (HOTFIX-slim-130) — 将 @ 引用移至 YAML frontmatter 下方。
重构
- 大型 rules 从 @inject 改为按需 Read,减少初始上下文体积。
2.15.1 — 2026-06-10
新增
- 工程关注点引导系统 (STORY-slim-128) — 按需加载 NFR 引导文件。Plan 阶段扫描需求关键词并在 Spec 中包含 NFR 决策;Act 阶段加载匹配的引导文件(最多 1-3 个)。初始 13 个关注点覆盖并发、异步、数据库、缓存、API 集成、事件驱动、弹性、内存管理、可观测性、配置、模块设计、代码审查优先、组件复用。
- 新增 6 个工程引导 (STORY-slim-129) — error-recovery(错误恢复与重试)、data-consistency(数据一致性)、backwards-compatibility(向后兼容)、performance-antipatterns(性能反模式)、graceful-shutdown(优雅关闭)、testing-strategy(测试策略)。总计 19 个引导文件。
lint可选依赖组 —pip install pactkit[lint]现包含 ruff。
修复
- Spec linter 接受 Security Scope 标题格式的 SEC-* 条目。
- CI 中 tree-sitter 测试在未安装时优雅跳过。
2.14.2 — 2026-06-01
新增
- 项目 CLAUDE.md 管理块更新 (STORY-slim-127) —
pactkit update现使用<!-- pactkit:start -->/<!-- pactkit:end -->标记。管理块外的用户内容在每次更新时被完整保留。 - Codegraph sync 代码强制执行 (STORY-slim-126) —
pactkit visualize --lazy和pactkit sync在检测到.codegraph/目录时自动运行codegraph sync。 - 生成的 CLAUDE.md 中 Codegraph 优先指令 — 存在
.codegraph/的项目会在生成的 CLAUDE.md 中包含 "Code Intelligence" 段落,指导 AI 优先使用 codegraph 而非 grep/find。
变更
- MCP 策略精简为 Context7 + Memory — 从 MCP 推荐列表移除 Playwright、Chrome DevTools、Draw.io 和 shadcn。更少噪音,同等价值。
- 配置回填移除 —
pactkit update不再向pactkit.yaml回写默认段落。缺失的 key = 接受默认值。
修复
- 过期规则警告 — 移除
.opencode/pactkit.yaml中的过时规则名称。
2.14.0 — 2026-05-26
新增
- Codegraph 集成 (STORY-slim-124) — 配置
visualize.graph_provider: codegraph后,pactkit query从.codegraph/codegraph.db(由@colbymchenry/codegraph生成)读取数据。比 pactkit 自身的后缀匹配多 2.6 倍边数,支持完全限定名、行号和类型感知解析。 - Codegraph 自动初始化 — 当
graph_provider: codegraph已设置但.codegraph/codegraph.db不存在时,pactkit query自动运行codegraph init -i。 - Graph Query Protocol 双模式 — PDCA 命令现支持 Codegraph 模式(
pactkit query+ codegraph CLI)和 Grep 模式(回退到.mmd文件)。 - 所有 PDCA skill 添加 model frontmatter (STORY-slim-125) — 全部 11 个命令/技能 prompt 添加了显式
model:frontmatter。(已在 2.16.1 回退 — 见 STORY-slim-134)
移除
_write_sqlite_db()— PactKit 不再生成自己的call_graph.db。上游 codegraph 工具通过 tree-sitter + import 感知解析生成更优质的调用图。visualize.sqlite_output配置 — 被visualize.graph_provider: codegraph替代。
变更
pactkit query— 从.codegraph/codegraph.db(codegraph schema,hash ID + JOIN edges/nodes)读取,替代 pactkit 自有的call_graph.db。- PDCA prompt 更新 — Plan、Act、Check、Done、Hotfix、Trace 技能中所有对
call_graph.db/ "SQLite Mode" 的引用已移除。
2.13.0 — 2026-05-07
新增
pactkit interface-summaryCLI — 基于 AST 的接口摘要提取,物理输出仅包含签名、类型和 docstring。为 Act Phase 1 分层加载实现 "Code Enforces, Prompt Instructs" 原则——AI 收到的内容在物理层面就是精简的。- Act Phase 4 Journey Sync — 条件步骤,当 Story 修改了 journey 相关步骤时自动更新
docs/e2e/journey.md。补全了 create→consume→update 生命周期闭环。 - Plan Phase 3.2a Journey Segment — 条件性 Spec 标注,将 Story 与 journey 步骤关联,使 Act Phase 4 能自动检测是否需要同步。
2.12.0 — 2026-05-06
变更
- Rules 架构重构 — 将 6 个全局核心 rules 合并为单个
pactkit.md;按需规则重新编号为 01-06,移至~/.claude/skills/_rules/。每次对话减少约 60% 的 context window 消耗。 - 版本不匹配自动部署 —
pipx upgrade pactkit后,下一条 CLI 命令自动同步已部署文件,无需手动执行pactkit init。
修复
- deployer 中的硬编码路径 —
_build_command_rules_header()现在使用FormatProfile.rules_dir/skills_dir替代硬编码的~/.claude/路径。 - 过期文件名引用 — 更新了 visualize.py、commands.py、lazy_visualize.py 和测试文件中的交叉引用,匹配新的规则文件名。
2.11.0 — 2026-04-25
新增
- Lateral Scan(横向扫描) — Plan Phase 1 在写 Spec 前扫描重复模式。若与已有实现重叠 > 30%,Spec 必须包含
R0: 提取共享抽象或明确声明技术债务。 - DEFERRED 注释机制 — 跳过 SHOULD 要求时,代码中必须包含
# DEFERRED(SHOULD): R{N} — 原因注释。Check 阶段新增覆盖率表格输出,追踪延迟项。
修复
- pactkit.yaml 残留版本操作 — 移除 board.py 中的
update_version()函数和 CLI 子命令,清理 prompts、agents、skills 文档中的所有过期引用。版本现在仅由pyproject.toml+__init__.py管理,部署标记位于~/.claude/.pactkit-version。 - CI tree-sitter 依赖 — 在 CI workflow 中单独安装 tree-sitter 可选依赖。
2.10.6 — 2026-04-22
修复
- L3 SHOULD 语义调整 — Signal Strength Convention L3 Recommended 从"违反=警告,非阻塞"改为"默认必须执行——跳过需说明理由"(RFC 2119)。防止 AI 系统性地延迟 SHOULD 任务。
2.10.5 — 2026-04-21
新增
- Solution Design Protocol — 新增规则
12-solution-design.md,要求在实现前进行能力增量评估(框架原生 + 项目已有)。防止框架盲区、项目盲区和硬编码耦合。包含实现约束(禁止魔术值、开闭原则、单一职责、依赖方向)。集成到 Plan Phase 1 和 Act Phase 1。
变更
- 全局版本追踪 — 版本追踪从项目级
pactkit.yaml迁移至全局~/.claude/.pactkit-version标记文件。消除通过pipx升级 PactKit 后的跨项目版本不同步问题。pactkit update --if-needed现在检查全局标记而非项目 yaml。
2.10.4 — 2026-04-20
新增
- Hotfix 影响检查 —
/project-hotfix新增 Phase 0.5,修复前读取已有的.mmd调用图文件。当目标函数有 3+ 调用者时发出警告。建议性(L3),非阻塞,无调用图时静默跳过。
2.10.3 — 2026-04-20
修复
pactkit clean保护父级目录 —rglob("dist")会匹配node_modules/*/dist,破坏 npm 依赖内部文件。新增_inside_protected()守卫,保护node_modules/和.git/;含路径的模式改用直接匹配。- CI tree-sitter 测试 — CI workflow 现安装
[visualize]extras,Java/TS 分析器测试在 GitHub Actions 中通过。
2.10.2 — 2026-04-20
新增
- PDCA 推荐协议 — AI 在自由对话中分析出可执行结论时,主动推荐合适的 PDCA 命令。触发矩阵映射信号到命令;抑制规则防止噪音。
- 双维度 Harness 审计 — 审计现评分两个维度:Config(项目 + 全局配置,50 分)和 Code(测试、lint、复杂度、git 卫生,50 分)。JSON 输出包含
dimensions拆分字段。 - 统一 HTML 报告仪表盘 — 单页
report.html,包含标签切换、D3 力导向图、harness 分数环、层级条和热点面板。
修复
- Shared Protocols Context.md 引用 — 补充 Context.md Canonical Format "Referenced by" 行中缺失的
Act Phase 4,确保 context.md 反映 Act 阶段进展。 - 语义版本比较 — 版本不匹配警告现使用元组比较替代字符串相等,正确给出升级/降级方向。
- Focus 调用图空输出 — 修复 focus 解析使用
LANG_PROFILES[stack].source_dirs替代硬编码src/前缀。
2.9.13 — 2026-04-15
修复
- 精简核心依赖 — 将适配器包(
pactkit-opencode、pactkit-codex)和 tree-sitter 绑定移至[project.optional-dependencies]。核心pip install pactkit现在仅需pyyaml。按需安装:pactkit[all]、pactkit[visualize]、pactkit[opencode]、pactkit[codex]。 - Spec-lint CLI 回退 — Playbook 现包含
python3 -m pactkit spec-lint回退路径,适用于pactkit不在$PATH的环境。 - Board add_story 签名 — Plan playbook Phase 3.3 现显示完整的
add_story调用签名,包含所有必需参数。
2.9.12 — 2026-04-02
新增
- Copilot 部署适配器 —
pactkit-copilot适配器包通过 entry_points 注册。pactkit update --format copilot部署 skills、commands、agents 和copilot-instructions.md到.github/。 - OCP 规则头分发 —
_build_command_rules_header()基于profile.rules_import_style分发,不再硬编码 profile 名称。 - 多栈自动检测 —
pactkit init自动检测多栈并写入stack: [python, typescript]列表语法。 - 两层模块图 —
visualize --mode module生成维度子图。 - Prompt 模板同步 — 所有部署格式统一使用规范 prompt 模板渲染。
修复
- OpenCode
rules_import_style— 从"instructions"改为"inline",匹配实际行为。
2.9.11 — 2026-04-01
修复
- Rules 模板变量 —
_deploy_rules()现通过_render_prompt()渲染{PROJECT_CONFIG_DIR}等模板变量。此前 Codex/OpenCode 部署的 rules 包含原始模板字符串。 - Copilot Agent YAML 损坏 — Agent
tools:字段被逐字符迭代([R, e, a, d, ...]→[Read, Write, ...])。 - Copilot 重复注解 —
(terminal only) (terminal only)修复为单次注解。 - Skill CLI 引用 — 所有 SKILL.md 文件现经过
_replace_slash_commands()处理。
2.9.10 — 2026-04-01
修复
- Skill 脚本
__future__导入 —load_script()现将from __future__ import annotations提升到_SHARED_HEADER之前,修复部署的spec_linter.pySyntaxError。 - Lessons 表格自动修复 —
append_lesson()追加前调用_repair_table_structure(),修复:缺失表头、错误表头格式、数据行在表头之前。
2.9.9 — 2026-04-01
新增
- GitHub Copilot 适配器支持 — 新增
copilotFormatProfile。pactkit init --format copilot部署到项目.github/目录。 - 动态
--formatCLI 选项 —init、update、upgrade命令从VALID_FORMATS动态派生选项,无需硬编码。
修复
- 排除命令引用清理 —
strip_excluded_command_references()清理所有渲染 prompt 中被排除格式的/project-sprint引用。
2.9.4 — 2026-03-31
修复
- Init playbook DIP 违规 — 消除
DETECTED_ENV运行时 IDE 检测;所有硬编码路径替换为模板变量。 - 全量 DIP 审计 — 修复 doctor skill、core-protocol 规则和 done 命令中的硬编码 IDE 路径。
- tree-sitter 升级为核心依赖 — 不再可选;CI 安装已更新。
--focus扫描优化 —_scan_files现仅扫描聚焦子目录,不再扫描整个项目根目录。- SCAN_EXCLUDES 扩展 — 从 13 扩展到 30+ 条目,覆盖 Go、Java、Node、IDE 和 VCS 目录。
2.9.3 — 2026-03-31
新增
- 多语言调用链修复(STORY-slim-069)— dispatch hint 注释解析(
pactkit-trace: dispatches_to)和继承边链接从 Python 扩展到 Go(struct embedding)、Java(extends/implements)、TypeScript(class extends)的 tree-sitter 分析器。 - CLI 可视化参数暴露(HOTFIX-slim-070)—
--entry、--focus、--reverse、--depth、--max-nodes现可通过pactkit visualizeCLI 访问。
修复
- 4 类调用链断链(STORY-slim-068)— dict.update 扫描冲突、动态分发提示、抽象方法孤立节点、跨包 stub 边。
- 嵌套子图 call graph(STORY-slim-067)— 支持 fan-in/fan-out 分析和子图分组。
- 边去重 + 环修复(HOTFIX-slim-069)— 重复边使用 ×N 标签,消除假阳性环检测。
2.9.2 — 2026-03-30
修复
- FormatProfile.excluded_commands — OpenCode/Codex 排除
project-sprint(需要子代理团队,仅 Claude Code 支持)。Doctorcheck_config_drift现尊重格式级排除。 - 冗余 pactkit.yaml 组件列表 — 移除
.opencode/pactkit.yaml中的显式 agents/commands/skills/rules 列表(缺省 = 部署全部)。 - 孤立 Spec 清理 — 移除 7 个已归档的旧前缀 Spec 文件。
2.9.1 — 2026-03-30
新增
- 拓扑感知追踪 — ApiCallParser(tree-sitter-typescript)和 AgentParser(LangGraph/YAML/MCP)实现多拓扑代码追踪。Plan/Act 阶段新增拓扑门禁。
修复
- Monorepo 子目录检测 — TopologyParser.detect() 现扫描直接子目录,修复 monorepo 布局的误判。
- Doctor 误报漂移警告 —
check_config_drift()现搜索全局部署目录,而非仅项目本地路径。 - 规范 lessons.md 表头 — Init 强制
| Date | Lesson | Context |表头,防止 AI 自创列名。
2.9.0 — 2026-03-28
新增
pactkit init默认部署所有 IDE 配置 — CLI 默认--format all,一次性部署 Claude Code + OpenCode + Codex 配置,无需逐个指定--format。
修复
- 入口点部署器循环导入 — 延迟加载 entry_point 部署器,修复 pipx 环境下
pactkit init的ValueError。
2.8.0 — 2026-03-27
新增
- 3-IDE 默认安装 —
pip install pactkit现在自动安装所有三个 IDE 适配器(Claude Code + OpenCode + Codex)。
修复
- OpenCode 命令架构 — 将 OpenCode 从纯 skills 模式恢复为
commands/+skills/双重架构。OpenCode 从commands/*.md自动发现命令,而skills/中的嵌入式技能由 AI 代理按需加载。 - Spec 版本混淆 —
/project-plan不再从pactkit.yaml(工具版本)读取版本号。现在明确从项目清单(pyproject.toml、package.json)读取。
变更
- 跨 IDE 命令架构:
- Claude Code:纯 skills(
skills/project-*/SKILL.md),前缀/ - OpenCode:commands + skills(
commands/project-*.md+skills/pactkit-*/SKILL.md),前缀/ - Codex:纯 skills(
skills/project-*/SKILL.md),前缀$
- Claude Code:纯 skills(
2.7.0 — 2026-03-27
新增
- Commands → Skills 迁移(STORY-slim-063)— 11 个 PDCA 命令现以
skills/{name}/SKILL.md子目录格式部署(Claude Code 格式)。VALID_SKILLS从 10 扩展至 21 项。 - 旧版命令清理 — 升级时自动移除
commands/中的旧版project-*.md文件。 - Codex FormatProfile(STORY-slim-060)— 在核心中重新添加
codexprofile 以支持薄适配器模式。pactkit-codex首次发布至 PyPI。 - 3 包协调发布 — 首次同时发布
pactkit、pactkit-opencode和pactkit-codex。
修复
- board.py update_task(HOTFIX-slim-061)— 现可识别项目符号格式的 Done 区域条目。
- visualize --lazy focus(HOTFIX-slim-062)— 移除硬编码的 focus 刷新;新增文件名匹配。
变更
- 统一部署摘要显示
Skills (embedded + commands)计数。 - 跨格式隔离:Skills 迁移不影响 OpenCode 和 Codex。
2.6.0 — 2026-03-26
新增
- DeployerProtocol & DeployerBase(STORY-slim-057)— 提取 deployer 接口和共享基类,采用注册表模式实现基于适配器的插件架构。
- pactkit-opencode 适配器包(STORY-slim-058)— 将所有 8 个 OpenCode 专属函数提取为独立包,通过 entry_points 自动注册。
- 入口点自动发现 — 导入时扫描
pactkit.deployers入口点组,实现零配置适配器注册。
移除
- Codex Profile(STORY-slim-059)— 移除废弃的 codex FormatProfile 及所有引用。VALID_FORMATS 通过 FORMAT_PROFILES.keys() 自动收缩。
- 核心中的 OpenCode 函数 — 8 个函数(约 300 行)迁移至 pactkit-opencode 适配器。deployer.py 体积减少 17%。
变更
- deploy() 通过注册表分发,替代 if/elif 链。新格式只需调用 register_deployer()。
2.5.0 — 2026-03-26
新增
- E2E CLI 覆盖率 100% — 60 个基于子进程的 E2E 测试,覆盖全部 25 个 CLI 子命令
python -m pactkit— 包支持模块调用方式作为替代入口
修复
- Mermaid 引号注入 — 文件/函数名包含
"不再破坏.mmd图表渲染 - O(N×E) 被调用者解析 —
_resolve_callee()使用预建后缀索引实现 O(1) 查找 - 模块索引冲突 — 不同目录下同名文件不再导致节点静默丢失
- Focus 子串误匹配 —
--focus auth.py不再匹配oauth.py - BFS O(N²) Pop — 所有 BFS 位置改用
deque.popleft()替代list.pop(0) - 非原子写入 —
pactkit.yaml、.mmd文件和atomic_write()均使用 tmp+rename 模式 - Deployer 编码 — 3 处裸
read_text()调用指定encoding='utf-8' - 大文件 OOM —
MAX_FILE_BYTES=1MB防护避免自动生成的超大文件导致 OOM - Sprint 冗余操作 — 消除重复的 visualize/clean/context 运行
2.4.1 — 2026-03-26
修复
- CI 模板覆盖 —
pactkit update不再覆盖pactkit.yaml中自定义的ci.install_cmd - Board ID 验证 — 现支持开发者前缀 ID(
HOTFIX-slim-052、STORY-alice-001)
新增
- Board
move_story命令 — 通过 CLI 在看板分区间移动 Story - PyPI 自动发布 — Tag 触发 CI 通过可信发布者(OIDC)自动发布到 PyPI
变更
- 闭源迁移 — 源码仓库转为私有;公共入口移至 pactkit-public
2.4.0 — 2026-03-25
新增
- 多架构拓扑分析 —
pactkit visualize现在理解代码结构之外的 3 种项目拓扑:- PDCA 拓扑 — 工作流图中的 Plan→Act→Check→Done 序列边
- 服务拓扑 — 解析
docker-compose.yml、openapi.yaml、*.proto生成服务依赖图 - 前端拓扑 — 解析 Next.js(App/Pages Router)、Vue Router 生成 page→component→hook→store 链
- 跨拓扑影响 — 回归分析横跨所有拓扑类型
- 统一分层图 — 将代码 + 拓扑维度合并为一张可视化图
修复
- 拓扑自动检测可靠性提升
- CI 多语言测试覆盖的依赖配置
- Spec/PRD 交叉引用一致性(4 处问题)
2.3.0 — 2026-03-22
新增
- 25 个确定性 CLI 子命令 — 核心操作现在以 Python 代码运行,而非 prompt:
clean、regression、context、lint、test-map、coverage-gate、doctor、spec-lint、spec-status等 - 覆盖率门禁 —
pactkit coverage-gate执行三级阈值(≥80% 通过、50-79% 警告、<50% 阻止) - 自动版本同步 —
pactkit update --if-needed版本匹配时跳过重部署 - E2E 测试框架 —
pactkit.yaml中的配置驱动 E2E 策略 - Spec Linter 增强 — W007 需求-AC 覆盖检查、W008 占位符检测、E007 按子节验证
修复
- Plan 阶段大型 Spec 生成卡顿(拆分为子步骤)
- Explore 子代理无界搜索(有界委托模式)
- 25+ 处 CLI 与 prompt 交叉引用完整性缺口
2.2.0 — 2026-03-20
新增
- 上下文感知规则加载 — 每个命令只加载所需规则,token 使用量减少 20-83%
- 栈感知 CI 流水线 — 支持 Python、Node.js、Go、Java,配置正确的 setup 和测试运行器
- GitHub Enterprise (GHE) 支持 —
ci.github_host和ci.actions_ref配置
2.1.0 — 2026-03-17
新增
- 多格式部署 — 新增 AI 工具格式只需一个注册表条目,所有下游代码自动适配
- 模板变量 — 48 个硬编码路径替换为部署时解析的命名占位符
- 文档 Schema 注册表 —
pactkit schema [type]CLI 查看文档结构规则 - 懒加载规则 — 每轮系统 prompt 开销减少 62%
修复
/project-init环境检测改进- 配置合并时保留用户条目(不再覆盖)
早期版本
- 1.5.0 — PDCA 质量门禁、基于影响的回归、Done/Release/PR 命令拆分、社区标准
- 1.4.0 — Spec Linter(14 条规则)、主动澄清门禁、Act 前一致性检查、自动 PR
- 1.3.0 — CI/CD 流水线生成、Issue 追踪集成、Hook 模板、Doctor 诊断
- 1.0.0 — 首次公开发布。9 个 Agent、13 个命令、3 个 Skill、6 条宪章规则