把 validateRetiredPermissionResidue 从 CLI_ONLY 接到运行时写入门(runtime-publish),让它够得到裁决 D 真正点名的那批作者:AI / Studio / REST /meta / MCP —— 他们从不跑 lint,但每一次写入都过那扇门。
裁决
维护者于 2026-09-13T07:2xZ 裁定 a(记录在 #17425 评论 5651940657),并指示:
「17425 按照简化的模式实现就可以」
⇒ 本卡走简化实现。 ⛔ 不要为它造框架。
为什么这张卡存在
裁决 D 把信号定在「原始 objectstack.json 源」。仓里没有这种文件:CLI 的 loadConfig 只接受 objectstack.config.{ts,js,mjs},十个树内配置全是 .ts,而 .ts 作者早已被墓碑的 z.never() 在 tsc 挡住;permission 类型声明的 filePatterns 是 *.permission.ts / *.permission.yml,没有 .json。
⇒ 规则如今新增的覆盖只是 .js/.mjs 配置与 TS 逃逸口。树内这类作者为零。 而裁决 D 自己的重开条件点名的是「不跑 lint 的 AI 生成 JSON」——一条 lint 规则结构上够不到那种作者。
可行性已实测,⛔ 不是推断
PR #17924 的在档复核测了,domain:spec 席复读确认:
packages/metadata-protocol/src/protocol.ts
~:15839 const parsed = schema.safeParse(request.item); // 先解析
~:15900 assertRuntimeAuthoringRules({ …, body: request.item }) // 交的是【原始体】
⇒ 门拿到的是原始写入体而非 parsed.data,残余还在。规则现有 surfaceReason 里写的「没测过,接过去可能是幻觉检查」已被这条读数推翻。
⚠️ 两条约束,⛔ 简化实现也不能省
① 音量:逐条报会变成它自己预警过的那场风暴
复核实测:把这条规则跑在那个奠基性的构建产物夹具上 → 150 条 findings。
而规则引用的契约文本(acceptRetiredDefaultResidue 的 docblock)已经逐字预警过同一件事:
The strip is deliberately SILENT — real artifacts carry the residue once per permission entry, and a per-occurrence notice would be a 75-line storm that teaches operators to skim.
⇒ CLI 门一次跑一个项目,150 条还能忍;每一次元数据写入都按条报,就是它自己写的那场风暴。
简化实现的最低线:聚合成一条(「本次写入含 N 条退役残余,形如 …」),⛔ 不是 N 条。这是测量出来的约束,不是偏好。
② surfaceReason 那段话现在是错的,必须重写
它现在写着运行时门那条「没测」。测了,而且结论相反。 ⇒ 接门时必须重写那段散文,⛔ 不能只改 surface 列表 —— 否则树里留下一句被自己的改动证伪的话。
建议的第一个动作:先量树外人口
⚠️ 没有人量过客户项目里有多少元数据还带着 allowRestore: false / allowPurge: false。
- 接近零 ⇒ 本卡优先级很低,慢慢做;
- 很多 ⇒ 上面那条音量约束就不是优化而是前提。
⇒ 这个读数不需要任何裁决就能做,且两个方向都能帮决策。建议作为本卡的第一步。
出处
由 PR #17924 的在档复核(claude-fable-5-1,档位由 spec 席从转录核验 86/86)提出为 ESCALATE;维护者裁 a;domain:spec 执行席据此立卡。
⛔ 裸卡、未定级 —— 无 domain:*、无 priority:*,二者皆分诊席独有产出;仅预填 type。
Generated by Claude Code
把
validateRetiredPermissionResidue从CLI_ONLY接到运行时写入门(runtime-publish),让它够得到裁决 D 真正点名的那批作者:AI / Studio / REST/meta/ MCP —— 他们从不跑 lint,但每一次写入都过那扇门。裁决
维护者于 2026-09-13T07:2xZ 裁定 a(记录在 #17425 评论
5651940657),并指示:⇒ 本卡走简化实现。 ⛔ 不要为它造框架。
为什么这张卡存在
裁决 D 把信号定在「原始
objectstack.json源」。仓里没有这种文件:CLI 的loadConfig只接受objectstack.config.{ts,js,mjs},十个树内配置全是.ts,而.ts作者早已被墓碑的z.never()在tsc挡住;permission类型声明的filePatterns是*.permission.ts/*.permission.yml,没有.json。⇒ 规则如今新增的覆盖只是
.js/.mjs配置与 TS 逃逸口。树内这类作者为零。 而裁决 D 自己的重开条件点名的是「不跑 lint 的 AI 生成 JSON」——一条 lint 规则结构上够不到那种作者。可行性已实测,⛔ 不是推断
PR #17924 的在档复核测了,
domain:spec席复读确认:⇒ 门拿到的是原始写入体而非
parsed.data,残余还在。规则现有surfaceReason里写的「没测过,接过去可能是幻觉检查」已被这条读数推翻。① 音量:逐条报会变成它自己预警过的那场风暴
复核实测:把这条规则跑在那个奠基性的构建产物夹具上 → 150 条 findings。
而规则引用的契约文本(
acceptRetiredDefaultResidue的 docblock)已经逐字预警过同一件事:⇒ CLI 门一次跑一个项目,150 条还能忍;每一次元数据写入都按条报,就是它自己写的那场风暴。
简化实现的最低线:聚合成一条(「本次写入含 N 条退役残余,形如 …」),⛔ 不是 N 条。这是测量出来的约束,不是偏好。
②
surfaceReason那段话现在是错的,必须重写它现在写着运行时门那条「没测」。测了,而且结论相反。 ⇒ 接门时必须重写那段散文,⛔ 不能只改 surface 列表 —— 否则树里留下一句被自己的改动证伪的话。
建议的第一个动作:先量树外人口
allowRestore: false/allowPurge: false。⇒ 这个读数不需要任何裁决就能做,且两个方向都能帮决策。建议作为本卡的第一步。
出处
由 PR #17924 的在档复核(
claude-fable-5-1,档位由 spec 席从转录核验 86/86)提出为 ESCALATE;维护者裁 a;domain:spec执行席据此立卡。⛔ 裸卡、未定级 —— 无
domain:*、无priority:*,二者皆分诊席独有产出;仅预填 type。Generated by Claude Code