Skip to content

AD-22 回写:sourceRef 可移植性开放项关闭 - #178

Open
zaurakworks wants to merge 1 commit into
mainfrom
zaurakworks/ad22-writeback
Open

zaurakworks wants to merge 1 commit into
mainfrom
zaurakworks/ad22-writeback

Conversation

@zaurakworks

Copy link
Copy Markdown
Owner

AD-22 退役第 (1) 步一直写着「绝对路径、仓库相对路径还是符号引用……本条不预先选定」。该裁定已随 Story 3.4 作出并落地合并(关联 #177,8d56565),但权威面没跟上——只读 spine 的 Story 3.5 实现者仍会看到「未裁定」,正是 AD-22 自己判为 critical 的「两个实现者各自发明」。

回写内容

sourceRef 只有一种合法形态(库内相对 POSIX 路径),绝对路径一律拒绝;根由单一共用的 defaultSupplyRoot() 提供,是本机配置、不进修订。五条判定规则集中在唯一实现 validateSupplyRelativeRef,供给侧与解析侧共用且无任一侧单独覆盖入口——该约束从此由机制保证而非靠自觉。

同时记下第③④两条规则的实测依据(不是防御性编程):

输入 实测行为
known('') / known('.') path.resolve 返回根本身 → cp --recursive 把整个供给库当一个 Skill 拷入并报告成功,fail-closed 被翻成 fail-open
C:x/y(与根同盘) win32 折进根内被接受,且收敛判定转为依赖 process.cwd()
C:/x/y POSIX 上 isAbsolute 为假,被当普通相对名接受

兼容性依据:真实库 20 个 skill 条目 sourceRef 全为 Unknown、Known 零条。

Reviewer gate 抓到一项 high,已当场修复

adversarial lens 构造:Story 3.5 的实现者只读 spine(按 AGENTS.md 那才是权威)要为本仓产出修订。AD-22 通篇只出现一次 defaultSupplyRoot,CONTROL_PLANE_SUPPLY_ROOT/部署场景/仓库根三个词零出现——而同一条 AD 刚把 canonical 落点定为仓库相对的 _bmad/。该实现者只能推断用 $HOME 默认根,两者拼起来解析不到任何东西,失败形态还是 AD-10 静默降级。

这与 AD-22 当初成立的理由是同一种病:成熟模型挂在够不着权威面的地方。已在落点那条 Rule 补入两种部署场景与各自的根来源。

current-tech lens PASS 无 findings——六条引用事实全部在本 session 内实测或直接观察,非训练数据断言。

子 agent 授权只覆盖 Story 3.4 那轮 bmad-build 运行,本次小幅 Update 按 gate 既定回退内联执行,完整 review 落在 reviews/review-ad22-writeback.md。

顺带修掉一处我自己引入的缺陷

PR #176 做文本替换时未清锚点,导致「并且必须在这一步一并裁定 sourceRef 的跨机器可移植性语义——」连续重复两遍。lint_spine 检测不到重复句(两次都报 0 findings),是人读发现的。

边界

lint_spine 0 findings。AD 编号未变,AD-1~AD-21 正文未动。只改 spine 与 memlog,不动代码。

🤖 Generated with Claude Code

AD-22 退役第 (1) 步一直写着「绝对路径、仓库相对路径还是符号引用……本条
不预先选定」。该裁定已于 2026-08-25 随 Story 3.4 作出并落地合并
(8d56565),但权威面没跟上——只读 spine 的 Story 3.5 实现者仍会看到
"未裁定",正是 AD-22 自己判为 critical 的「两个实现者各自发明」。

回写内容:sourceRef 只有一种合法形态(库内相对 POSIX 路径),绝对路径
一律拒绝,根由单一共用的 defaultSupplyRoot() 提供、是本机配置不进修订;
五条判定规则集中在唯一实现 validateSupplyRelativeRef,供给侧与解析侧
共用且无任一侧单独覆盖入口,因此该约束从此由机制保证而非靠自觉。

同时记下第③④两条规则的实测依据(不是防御性编程):known('')/
known('.') 使 path.resolve 返回根本身、cp --recursive 把整个供给库当作
一个 Skill 拷入并报告成功,把 AD-10 的 fail-closed 翻成 fail-open;同盘
C:x/y 在 win32 被折进根内而接受且收敛判定转为依赖 cwd,C:/x/y 在 POSIX
上 isAbsolute 为假而被当普通相对名接受。兼容性依据:真实库 20 个 skill
条目 sourceRef 全为 Unknown、Known 零条。

Reviewer gate 的 adversarial lens 抓到一项 high 并当场修复:AD-22 通篇
只出现一次 defaultSupplyRoot,CONTROL_PLANE_SUPPLY_ROOT/部署场景/
仓库根三个词零出现,而同一条 AD 又把 canonical 落点定为仓库相对的
_bmad/——只读 spine 的实现者会推断用 $HOME 默认根,两者拼起来解析不到
任何东西且按 AD-10 静默降级。这与本 AD 当初成立的理由(成熟模型挂在
工具 README 上、够不着权威面)是同一种病。已在落点那条 Rule 补入两种
部署场景与各自的根来源。

顺带修掉 PR #176 引入的一处文本缺陷:替换时未清锚点,导致「并且必须在
这一步一并裁定 sourceRef 的跨机器可移植性语义——」连续重复两遍。
lint_spine 检测不到重复句,两次都是 0 findings,靠人读发现。

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

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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