依据 ADR-030(#362 Codex 裁决,修正版方案A)。父需求 Refs #209;挂 #303/#318 完成矩阵(本票合入 + 残留策略落地后,验收 owner 按 ADR-030 措辞把两票 project 项修订为 N/A-by-contract)。 **负责哪些 AC** - 合法 project catalog/seed intent 通过原 wire decode,但在任何 catalog 拉取/CAS promotion/事务开始/installer/写盘前,由 installCatalog decode 后的统一 planner policy guard 返回稳定 reason:`project-scoped catalog/seed installation is unsupported — use project-local import/register`;resolveScope 保留防御性拒绝(seed/bundle 分支不走普通 resolveScope)。 - project skill 与 project agent 对称拒绝回归;bundle/seed 同一拒绝合同;所有 global catalog/seed 行为不变。 - 六个第一方生产动作(MCP/skill/plugin/agent/cloud/bundle)wiring test:捕获传给 installCatalog 的 intent 断言 scope=global(use-extensions.ts ×5 + extension-hub.tsx:519)。 - 「新增安装策略=无 project kind」与「遗留可管理 kind={skill,agent}」拆分,不清空共享 PROJECT_SCOPED_KINDS。 - 残留处置:项目打开/显式检查时报告(installs.json scope.kind=project 且 origin=catalog、ext-store/skill--*、ext-tx/journal、agent 的 .alpha/agents/*.md 与 alpha.jsonc agent 条目);无在途 journal 时幂等、受控根内 generation-aware 清理(删受控 ext-store + 对应账本,不落 flat removeFsInstall);journal 在场/身份不匹配 fail-closed,零自动删除。 - 契约档 docs/contracts/extension-cas-seed.md 同步。 **边界**:planner policy guard、拒绝回归、wiring tests、残留检测/清理、契约档。 **Out-of-scope**:project generation 发现注入、常态 lazy recovery、project GC root registry、wire/decode 形状修改、全盘项目扫描、自动删除用户数据、agent generation 化、既有 .alpha/skills + alpha.jsonc 项目能力改造。 **退出条件**:上述 AC 全绿(bin/check + 定向套件);PR 合入;#303/#318 矩阵修订由验收 owner 执行(不在本票内代改)。 复杂度:M(跨 planner/测试/文档,单仓)。
Activity
fix(REQ-098 #372): harden residual cleanup per Codex review — provabl…