大白话
用户选一个 Claude 插件目录,我们只读不写地把它清点一遍:哪些技能能装、哪些不能装(说人话原因)、哪些组件类型这版不支持。本票执行前后,磁盘和账本逐字节不变。
方案基线(已批,不重新裁决)
Phase 3 方案基线 —— 本票 = §10 的 T1-intake。
基线经三候选评判 + Codex 方案审计两轮(R1 六 Blocker 三 Major 全部采纳;R2 七条 FIXED)。
§14 的两条残余(R2-a / R2-b)与 §6 的闸具同等效力,不得默认掉。
范围
新增 main/claude-plugin-intake.ts:布局判定(§3.2 五类不支持布局具名);读 plugin.json
(version 选填 —— 27/62 真实 manifest 没有它,当必填会拒掉 44%);枚举 skills/*/SKILL.md;
逐个跑既有 collectImportSkillPayload + parseSkillFrontmatter(改为交出完整键集)
- 独立 lstat 自包含扫描;产
LocalPackagePreviewV1。
ext-ipc 在 pickImportSkillDir 之后加分流点。
Acceptance and named gates
- 对本机真实语料全量跑并断言具体数字:62 插件 / 162 SKILL.md / 161 frontmatter 通过 /
25 个 0-skill 插件 / 18 个自包含被拒 / 12 个控制字段被拒 / 135 可装。
夹具复制进仓,不依赖本机路径。
- G18 五类布局各一条(manifestless 用
receipts 的真实结构复制)。
- G16 自包含:symlink 合成夹具 + exec 位真实语料 9 个目录 + 一条真会调用支撑脚本的功能夹具。
含 §14 R2-a:技能目录内含 node_modules / .git / __pycache__ ⇒ 具名拒绝。
collector(ext-fs-installer.ts:478)必定静默跳过它们 ⇒ 不处置就是「预览接受、装完缺件」。
- G17 控制字段。含 §14 R2-b(重要):检测口径是**「顶层键是否出现」,
与它有没有标量值无关 —— 真实语料 块式 7 个、标量式 4 个,
而解析器的行正则要求冒号后有非空值** ⇒ 块式今天根本不进字典。
负向夹具必须同时含块式与标量式(块式真实样本:imessage/skills/configure);
只用标量式判为假闸。绕过记录:改回只返回 name/description ⇒ 12 个被放行 ⇒ 必须红。
仍然零新增解析器:不解析块式的值、不引 YAML、不解析嵌套,只回答「这个顶层键在不在」。
- G9 / G13 具名结果:
commands/ agents/ hooks/ .mcp.json 逐类具名;
0-skill 插件(25 个)必须给具名终态,不是空成功。
- G12 敌意夹具:symlink 逃逸 + 字面 NUL + 超长 frontmatter。枚举一律
-a。
- G11 上限 —— 真界是
ext-transaction.ts:650 的 64,不是发布端的 maxComponents: 16
(本路根本不过 decoder,拿 16 立闸是前提为假的闸)。在 preview 期具名拒绝,
且事务函数零调用(spy 断言调用次数 == 0)。合成 65 项负向夹具 —— 真实语料最大 13,
拿它当期望值是假闸形态⑨。
- 重复导入在确认之前说清「先移除整包」。
- 本票执行前后
installs.json 与磁盘逐字节不变。
依赖
无,可立即开工。
大白话
用户选一个 Claude 插件目录,我们只读不写地把它清点一遍:哪些技能能装、哪些不能装(说人话原因)、哪些组件类型这版不支持。本票执行前后,磁盘和账本逐字节不变。
方案基线(已批,不重新裁决)
Phase 3 方案基线 —— 本票 = §10 的
T1-intake。基线经三候选评判 + Codex 方案审计两轮(R1 六 Blocker 三 Major 全部采纳;R2 七条 FIXED)。
§14 的两条残余(R2-a / R2-b)与 §6 的闸具同等效力,不得默认掉。
范围
新增
main/claude-plugin-intake.ts:布局判定(§3.2 五类不支持布局具名);读plugin.json(version 选填 —— 27/62 真实 manifest 没有它,当必填会拒掉 44%);枚举
skills/*/SKILL.md;逐个跑既有
collectImportSkillPayload+parseSkillFrontmatter(改为交出完整键集)LocalPackagePreviewV1。ext-ipc在pickImportSkillDir之后加分流点。Acceptance and named gates
25 个 0-skill 插件 / 18 个自包含被拒 / 12 个控制字段被拒 / 135 可装。
夹具复制进仓,不依赖本机路径。
receipts的真实结构复制)。含 §14 R2-a:技能目录内含
node_modules/.git/__pycache__⇒ 具名拒绝。collector(
ext-fs-installer.ts:478)必定静默跳过它们 ⇒ 不处置就是「预览接受、装完缺件」。与它有没有标量值无关 —— 真实语料 块式 7 个、标量式 4 个,
而解析器的行正则要求冒号后有非空值** ⇒ 块式今天根本不进字典。
负向夹具必须同时含块式与标量式(块式真实样本:
imessage/skills/configure);只用标量式判为假闸。绕过记录:改回只返回 name/description ⇒ 12 个被放行 ⇒ 必须红。
仍然零新增解析器:不解析块式的值、不引 YAML、不解析嵌套,只回答「这个顶层键在不在」。
commands/agents/hooks/.mcp.json逐类具名;0-skill 插件(25 个)必须给具名终态,不是空成功。
-a。ext-transaction.ts:650的 64,不是发布端的maxComponents: 16(本路根本不过 decoder,拿 16 立闸是前提为假的闸)。在 preview 期具名拒绝,
且事务函数零调用(spy 断言调用次数 == 0)。合成 65 项负向夹具 —— 真实语料最大 13,
拿它当期望值是假闸形态⑨。
installs.json与磁盘逐字节不变。依赖
无,可立即开工。