Skip to content

保存成功的回执一律自称 "customization overlay",包括注册表声明 supportsOverlay:false 的类型(object / flow / action / seed / hook) #5265

Closed

Description

@os-zhuang

观察类发现,由 #5086 的正文点出、在修 #5086(PR #5263)时确认。纯文案,不影响持久化行为,所以单独记录而不搭车。

事实

packages/metadata-protocol/src/protocol.ts 的 saveMetaItem 成功回执只有两种句式,都写死了 "customization overlay":

Saved customization overlay (org=<id>, state=active) — type=…, name=… [seq=N]
Saved customization overlay (env-wide, state=active) — type=…, name=… [seq=N]

而 DEFAULT_METADATA_TYPE_REGISTRY 里有一批类型明确声明 supportsOverlay: false,却按设计可以运行时写入:object、field、hook、seed、mapping、flow、action。对这些类型,一次全新创建(不是任何东西的 overlay)也会被回执成 "saved a customization overlay"。

真实 boot 实测(showcase,pnpm dev -- --fresh):

PUT /api/v1/meta/view/rc3_probe_view
→ 200 {"success":true,…,"message":"Saved customization overlay (env-wide, state=active) — type=view, name=rc3_probe_view [seq=1]"}

view 恰好是 supportsOverlay: true,回执没问题;把同一句话发给 object / flow 的新建就不成立了。

为什么不是"顺手改一下"

supportsOverlay 与 allowOrgOverride 在 spec 的 TSDoc 里是两件事:前者描述 loader 的合并能力,后者是运行时写入的许可,而且只有后者被明确指定为 403 not_overridable 的判据。所以这句回执要说清楚的是三件事之一 —— 覆盖了一个 artifact / 新建了一条 DB-only 记录 / 写了一条 per-org 行 —— 而这三者在写路径里是能分辨的(isArtifactBacked + organizationId 已经算过)。也就是说这是"回执可以说真话但没说"的问题,不是术语挑刺。

#5086 关心的那一半(job / agent 根本不该写成功)已由 PR #5263 修掉;剩下的就是这句措辞。

建议(留给 triage)

按已算出的事实分句:artifact-backed ⇒ Saved customization overlay;无 artifact 的新建 ⇒ Created <type> '<name>';org 维度照旧附在括号里。改动面是 2 处 message 模板 + 对应断言。

参考:#5086 / PR #5263。

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    pm:queueReady for the PM dispatch loop
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 4, 2026
  2. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    ContributorAuthor

    发现分诊轮:晋级 pm:queue + domain:engine(摘 finding)。理由:「回执可以说真话但没说」—— 三种事实(overlay / 新建 DB-only / per-org 行)在写路径里已被算出(isArtifactBacked + organizationId),按正文建议分句即可,改动面 2 处 message 模板 + 断言,无契约变更、无拍板点。

    ⚠️ 同文件串行提醒:与 #5264(不可达分支)、#5532(overlay 读裸 catch)同落 packages/metadata-protocol/src/protocol.ts,派发须跨轮串行;若与 #5264 同一 dev 顺序消化更省(相邻代码)。

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 6, 2026
  4. self-assigned this
    on Aug 6, 2026
  5. baozhoutao commented on Aug 6, 2026

    @baozhoutao
    Contributor

    认领:PM 循环第 4 轮追加(engine-core 车道;同文件前序 #5264/#5532/#5841 均已合入,protocol.ts 当前无在飞)
    会话:session_019Q7oc7ASjh8yxyS3Yz78We
    分支:claude/issue-5265-save-receipt-truthful-wording
    Worktree:objectstack-issue-5265
    域:domain:engine-core
    文件面:packages/metadata-protocol/src/protocol.ts(saveMetaItem 两处成功 message 模板)+ 既有断言翻面(全仓扫 "Saved customization overlay" 同语义 pin)+ .changeset/*.md。⛔ 不碰 loadMetaFromDb(object 分支 #4636 决策箱在途)与 getMetaItemLayered 区域。

    前提复核:今晨 07:1xZ 实测两处模板仍无条件写 "Saved customization overlay"(当时位于 :7852-7853,protocol.ts 今日已 6 合并,行号必漂,内容定位)。


    Generated by Claude Code

  6. baozhoutao commented on Aug 6, 2026

    @baozhoutao
    Contributor

    复核通过,ACCEPT(engine-core 车道 PM,第 4 轮):交付于 PR #5926,CI 23 项全绿,转 ready 入合并队列。

    验收要点:


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

pm:dispatchedDispatched to a dev agent by /pm-dispatch

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions