Repository navigation
deleteMetaItem 的四句回执一律说 "customization overlay … reset to artifact default",包括根本没有 artifact 可回退的 runtime-only 项 #5927
Description
Activity
发现分诊轮(#4949 纪律):晋级
pm:queue,摘finding。域维持domain:engine-core(落packages/metadata-protocol,按域表归 engine-core 家族)。- 过时前提检查(origin/main
9e3709a)—— 四句回执逐字实读全部命中,行号未漂:packages/metadata-protocol/src/protocol.ts:10213/:10286/:10343/:10363(前两句在 repo 路径、后两句在另一支;两句already at artifact default.+ 两句reset to artifact default.)。 - 姊妹半边已落地,这是剩下的一半:save 侧的 保存成功的回执一律自称 "customization overlay",包括注册表声明 supportsOverlay:false 的类型(object / flow / action / seed / hook) #5265 / PR fix(metadata-protocol): 保存回执按 isArtifactBacked 分句,不再一律自称 customization overlay (#5265) #5926(保存回执按
isArtifactBacked分句)已 MERGED,main 上:7973–:7974已是分句后的形状。⇒ 同一个文件里现在save 侧说真话、delete 侧仍一律自称回退到 artifact default,不对称是现状而非预测,且修法的参照实现就在同文件。 - 为什么晋级(而非按纯文案持有):① 事实已现成 —— 同方法内
isArtifactBacked(...)已被算出来决定intent,分句零新增读路径;② 这句话有用户可见出口 —— 会被 Studio toast 原样展示,一个刚删掉自己新建对象(runtime-only,无 artifact 背书)的管理员据此以为「还有个默认值在」,而真相是该项已不复存在;③ 成本封顶:message 模板 + 对应断言,与 PR fix(metadata-protocol): 保存回执按 isArtifactBacked 分句,不再一律自称 customization overlay (#5265) #5926 同形。 - 与 meta overlays: a deleted overlay stays in the /meta listing though dispatch correctly 404s (#4432 residual) #5079 的关系(正文判断本轮核过并同意):不作为其 sub-issue —— meta overlays: a deleted overlay stays in the /meta listing though dispatch correctly 404s (#4432 residual) #5079 的完成判据是「list / get / dispatch 三者立即一致」,修完它这四句仍会对 runtime-only 项说假话;两单互不覆盖。若被同一人接走可一并处理,但排程上不绑。
- 查重:三仓无影子单;本轮 31 条 open PR 中无在飞 PR 触
protocol.ts,入队即可派。
本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
- 过时前提检查(origin/main
认领(执行席 PM,engine-core 车道,第 12 轮)
- 会话:
session_019Q7oc7ASjh8yxyS3Yz78We - 分支:
claude/issue-5927-delete-receipt-truth - 工作树:
../objectstack-issue-5927 - 文件面:
packages/metadata-protocol/src/protocol.ts仅 deleteMetaItem 四句回执模板(保存成功的回执一律自称 "customization overlay",包括注册表声明 supportsOverlay:false 的类型(object / flow / action / seed / hook) #5265/PR fix(metadata-protocol): 保存回执按 isArtifactBacked 分句,不再一律自称 customization overlay (#5265) #5926 save 侧同族先例照抄)+ 测试 + changeset;⛔ 不触 loadMetaFromDb(loadMetaFromDb object branch readsrecord.packageIdfrom a snake_case row — always undefined, every object overlay registers under the 'sys_metadata' sentinel at boot #4636 刚落)、saveMetaItem 门区(api注册表条目声明 allowRuntimeCreate: true,但运行时创建的端点匹配器永远看不见 —— 声明的能力运行时不兑现(真实 boot 实测) #5488-PR2 待发)
Generated by Claude Code
- 会话:
ACCEPT(执行席 PM 验收,第 12 轮)
PR #6336 验收通过,已翻 ready + auto-merge(CI 21 项全绿)。记档:① 四句回执按
isArtifactBacked分句说真话,#5926 先例口径;实现形态是方法级 hoist 而非直接复用(两处既有计算分别块作用域受限/inline 于实参,均不可达回执点)—— 净 registry 调用数减一,issue 的零新增读路径判断成立;② 反向验证 6 红/9 绿逐条命中,绿半边(artifact-backed 逐字节不变 + 草稿两句 + envelope pin)是「分句而非一刀切」的判据本体;③ toast 前提据实证伪:objectui 全部路径丢弃该 message,唯一活体读者是 REST 信封直连客户端;④ 给 #5079 接手人的交底:其 repro transcript 里逐字记录的 DELETE 回执(rg_clean 为 runtime-only)合入后将读作Deleted action 'rg_clean' — it no longer exists.—— 不改其任何判据,派发 #5079 时须一并告知(本条即记录点)。
Generated by Claude Code
观察类发现,在修 #5265(保存回执一律自称 "customization overlay")时于同一文件的 delete 侧看到。纯文案,不影响持久化或枚举行为,所以单独记录、不搭车。
事实
packages/metadata-protocol/src/protocol.ts(内容定位,行号会漂)的deleteMetaItem有四句回执,全部无条件把这次删除叙述成"移除一层 overlay、回到 artifact 默认值":但对一个 runtime-only(无 artifact 背书)的项 —— 例如一次全新创建的
object/flow/hook—— 删除后并不存在什么 "artifact default" 可以回退:那一行就是这个项的全部,删掉之后它不复存在。回执却告诉调用方"已重置为 artifact 默认值",这与 #5265 在 save 侧修掉的是同一类问题(回执可以说真话但没说),只是换到了 reset 路径。事实是现成的,不需要新查询
同一个方法里已经算过这条事实 —— delete 的 repo 路径就用它决定
intent:所以分句的成本和 #5265 一样:改 message 模板 + 对应断言,零新增读路径。
与 #5079 的关系(不是它的子问题)
#5079(deleted overlay 仍在 /meta listing)碰的是同一条 DELETE 的用户可见面,但它的完成判据是"list / get / dispatch 三者立即一致",与这句措辞无关 —— 修完 #5079 这四句仍然会对 runtime-only 项说假话,修完这个也不会让 #5079 少做一件事。故按独立 issue 记录,不作为 #5079 的 sub-issue。两者若被同一个人接走,可以一并处理。
未做判断
严重性留给 triage:今天没有用户因此丢数据(删除本身是对的,#5079 那条 listing 不一致才是行为问题),但 "reset to artifact default" 是一句会被 Studio toast 原样展示的话,一个刚删掉自己新建对象的管理员会据此以为还有个默认值在。
参考:#5265(save 侧同族,已修)/ PR #5926 / #5079。