Skip to content

AD-22 修订:落地 #173 的两项裁定(字节来源与落点) - #176

Merged
zaurakworks merged 1 commit into
mainfrom
zaurakworks/ad22-supply-decisions
Aug 25, 2026
Merged

zaurakworks merged 1 commit into
mainfrom
zaurakworks/ad22-supply-decisions

Conversation

@zaurakworks

Copy link
Copy Markdown
Owner

负责人 2026-08-25 就 #173 的两个开放问题作出裁定,AD-22 退役第 (1) 步的两项前提从「待定」变为「已定」:

  • (a) 字节的每机来源 = 按 pin 运行 BMad 安装器写 canonical 到 _bmad/
  • (b) 原生启动的会话不再受支持,一律必须走 configs

(a):把可复现性从假设变成证据

写 AD-22 时我说「跟踪 pin 不跟踪字节」,但没有核实过那个 pin 到底能不能复现出字节。这轮补上了:

断言 核实
npm 包 bmad-method 当前版本 6.11.0 npm view 实测,与 manifest.yaml 的 installation.version 一致
完整性数据存在 files-manifest.csv 263 条,每条带 sha256
覆盖的是 skill 本体,不只是配置 把 skill-manifest.csv 的 49 条 path 与 files-manifest.csv 求交,49/49 命中

最后一行是关键——只有它成立,「完整性可校验」才不是空话。据此在 Rule 里补了判据:一个 pin 只有在同时具备可取得的来源与可校验的完整性时才算成立,仅记版本号不算。

(b):推出一条新 Rule —— 字节的落点不得是原生发现路径

如果字节仍落在 .claude/skills/.agents/skills,会话不经 configs 也照样拿到 Skill,「唯一装配路径」就退化成一句无人执行的声明——与 entrypoints 那三条「加载可用的 X」把硬门降级为空操作是同一种失败模式。

canonical 落点取 _bmad/:它不是原生发现路径,且 skill-manifest.csv 的 path 列本就指向 _bmad/core/<skill>/SKILL.md——这是 BMad 自身的安装形状,不是新发明。

顺带查实:本仓当前的 BMad 安装是残缺的

files-manifest.csv 记录的 263 个文件全在 _bmad/ 下,而该目录磁盘上只剩九个配置文件——254 个 canonical 本体已被删除,仓内只余两份 IDE 投影。这解释了此前那个谜:skill-manifest.csv 的 path 为何指向不存在的路径。不是安装器没写,是写完被删了。已写进第 (1) 步:canonical 不恢复,就没有可供 configs 物化的来源。

Reviewer Gate

按 stakes 缩放为两条配置 lens,均 PASS with findings,2 项 medium 全部当场修复:

  • [current-tech] source: built-in 的含义(本体随包分发)属推断而非核实——依据只是同记录里 npmPackage/repoUrl 均为 null,我没运行安装器。已如实标注,并挂到第 (1) 步待证实(那步本来就要恢复 canonical,顺带即可证明)。
  • [adversarial] 「机制强制」的覆盖面写得比实际大。客户端也会从用户级/机器级 skill 目录发现 Skill,那不是项目目录,本仓的 .gitignore 与安装器 ides 配置都管不到。已限定为「本仓可控面内」,并规定第 (2) 步 parity 必须在无用户级 BMad 安装的环境中取证,否则是假阳性。(本机实测 ~/.claude/skills、~/.agents/skills 均不存在,当前非活跃问题。)

边界

lint_spine 0 findings。AD 编号未变,AD-1~AD-21 正文未动。本次仍只改 spine 与 memlog,不动代码、配置或 .gitignore——退役三步一步都还没执行。

关联 #173。

🤖 Generated with Claude Code

负责人 2026-08-25 就 #173 的两个开放问题作出裁定,AD-22 退役第 (1) 步的
两项前提因此从"待定"变为"已定":

(a) skill 字节的每机来源 = 按 pin 运行 BMad 安装器写 canonical 到 _bmad/。
(b) 原生启动的会话不再受支持,一律必须走 configs。

本轮把 (a) 的可复现性从假设变成了证据。此前 AD-22 写"跟踪 pin 不跟踪字节"
时,并没有核实过那个 pin 到底能不能复现出字节。现在核实了:

- npm 包 bmad-method 当前版本 6.11.0,与 manifest.yaml 的
  installation.version 一致;
- files-manifest.csv 记录 263 个文件、每条带 sha256;
- 关键一步:把 skill-manifest.csv 的 49 条 path 与 files-manifest.csv 的
  path 集合求交,49/49 命中——完整性覆盖确实落在 skill 本体上,不只是
  配置文件。

据此在 Rule 里补了一句判据:一个 pin 只有在同时具备可取得的来源与可校验的
完整性时才算成立,仅记版本号不算。

(b) 推出一条新的 Rule:字节的落点不得是原生发现路径。否则会话不经 configs
也照样拿到 Skill,"唯一装配路径"退化成一句无人执行的声明——与
entrypoints 那三条"加载可用的 X"把硬门降级为空操作是同一种失败模式。
canonical 落点取 _bmad/,它不是原生发现路径,且 skill-manifest.csv 的
path 列本就指向 _bmad/core/<skill>/SKILL.md,是 BMad 自身的形状。

顺带查实一处此前无人记录的现状并写进第 (1) 步:本仓当前的 BMad 安装是
残缺的——files-manifest 记录的 263 个文件全在 _bmad/ 下,而该目录只剩九个
配置文件,254 个 canonical 本体已被删除、只余两份 IDE 投影。canonical 不
恢复就没有可供 configs 物化的来源。这也解释了 skill-manifest.csv 的 path
为何指向不存在的路径:不是没写,是写完被删了。

Reviewer gate 按 stakes 缩放为两条配置 lens,均 PASS with findings,
2 项 medium 全部当场修复:

- [current-tech] source: built-in 的含义(本体随包分发)属推断非核实,已
  如实标注并挂到第 (1) 步待证实。
- [adversarial] "机制强制"的覆盖面写得比实际大——客户端也会从用户级/
  机器级 skill 目录发现 Skill,本仓的 .gitignore 与 ides 配置都管不到。
  已限定为"本仓可控面内",并规定第 (2) 步 parity 必须在无用户级 BMad
  安装的环境中取证,否则结论是假阳性(本机实测 ~/.claude/skills 与
  ~/.agents/skills 均不存在)。

lint_spine 0 findings。AD 编号未变,其余 AD 正文未动。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@zaurakworks
zaurakworks merged commit 3c7a513 into main Aug 25, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant