test(core,metadata,platform-objects): #5619 解锁的另外 6 条各接一行 pin,基线整条删除 (#5855) - #5910
Merged
Merged
Conversation
…ubles to the producer's dispatch predicates (#5855) #5619 sank `assertEngineDeleteDispatch` / `assertEngineUpdateDispatch` into @objectstack/metadata-core — a package that depends on neither @objectstack/objectql nor these three. That removed the cyclic-edge blocker recorded on six (file, verb) entries of the double-contract ledger, leaving a one-line pin each. Four fakes wired, six baseline entries deleted (141 -> 135 entries; gate: 64 -> 70 pinned, 139 -> 133 DEBT). @objectstack/core gains the devDependency the import needs; metadata and platform-objects already had it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019Q7oc7ASjh8yxyS3Yz78We
…e-remaining-six-entries
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
📓 Docs Drift CheckThis PR changes 1 package(s): 24 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
baozhoutao
marked this pull request as ready for review
August 6, 2026 11:43
This was referenced Aug 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #5855
#5619(PR #5871,51a587d97)把
assertEngineDeleteDispatch/assertEngineUpdateDispatch下沉到@objectstack/metadata-core—— 一个既不依赖@objectstack/objectql、也不依赖本单这三个包的包。那次下沉解除的不只是 metadata-protocol 那 26 条:基线里另有 6 条 (file, verb) 条目卡在同一个环上,现在各剩一行 pin。本 PR 就是这 6 行。前提核验(⛔ 不沿用立单时的清单,重读 origin/main 现测)
立单时的结论是在 #5619 的 worktree 上测的,按分诊座位的明令在
origin/main(7b005b4)上逐条重测:packages/core/src/utils/migration-journal.test.tscloses已改写为「阻塞已解除」并指向本单packages/metadata/src/migrations/migrate-sys-notification-to-event.test.tsdependencies已含 metadata-core)packages/platform-objects/src/plugin.test.tspackages/platform-objects/src/system/migration-flag.test.ts前提成立,一字未变:6 条都在、verb 与立单一致、三个包的依赖现状与立单描述一致。谓词的最终导出名与 arity 以
packages/metadata-core/src/index.ts现测为准 —— 构建产物上assertEngineDeleteDispatch.length === 1、assertEngineUpdateDispatch.length === 2,即assertEngineDeleteDispatch(options)/assertEngineUpdateDispatch(data, options)。@objectstack/core的 devDep 判据自己重测了一次(⛔ 不引用立单的测量):加上这条边之后顺带确认 CI 顺序也是对的 —— turbo 的
test任务dependsOn: ["^build"],所以@objectstack/core#test现在依赖@objectstack/metadata-core#build,不会出现「测试跑在未构建的 dist 上」。改了什么
assertEngineDeleteDispatch(options)/assertEngineUpdateDispatch(data, options)开头,⛔ 无一处手抄if (!where?.id && !multi)(feat(plugin-email): 邮件投递接入持久化队列 —— send 走 email.send.async / sys_job_queue,三门可配置 (#5160) #5173 / fix(plugin-email): sys_email 的 queued 行在启动时被清扫,drain 失败升为 error (#5161) #5191 / fix(service-queue,platform-objects): sys_job_queue 的 completed 行按声明式 retention 到期即清(#5179) #5192 / fix(runtime): callData 的 ObjectQL 兜底对「记录不存在」统一答 404 RECORD_NOT_FOUND (#5138) #5584 各烧掉一轮 CI 的写法);导入一律来自@objectstack/metadata-core,不是@objectstack/objectql(反向边就是 turbo 拒绝的那个环)。@objectstack/core新增 devDependency@objectstack/metadata-core: workspace:*。lockfile 只有该 devDep 引起的 3 行增量,⛔ 无全量重解析。三个 fake 的 update 调用点都传标量真值
data.id(迁移 id / 通知行 id),即by-id;packages/core与plugin.test.ts的两处则根本没有路径驱动到该谓词,pin 之后仍保持原样(not used/{}),只是把「有朝一日有人从这里写」的那扇门提前关上 —— 这正是 #5629 记录的 dormant-not-harmless。计数(改前读数在 origin/main 上现测)
反向验证(方向先预测,后运行)
预测:把已接线的
migration-flag.test.ts里那行谓词调用临时拿掉,该 (file, verb) 就成了「无守卫的替身 + 基线里已无条目」,门禁必须在 PINNED 不变量上报红并点名它。运行结果与预测一致:恢复该行后门禁退出码 0。
验证
以上均已在
git merge origin/main(⛔ 未 rebase)之后重跑一遍,合入的是纯文档提交,与本 PR 文件面无交集。在飞同族(#5748)
#5748 正在把
data.id的判定翻面(维护者裁 A:data.id同过标量测试)。⛔ 本 PR 不碰metadata-core源码。推送前复核了git log origin/main -- packages/metadata-core/src/engine-update-dispatch.ts scripts/engine-double-contract.baseline.json,最新一笔仍是 51a587d(#5871),期间无在飞变更落地。本 PR 的 fixture 无一驱动「非标量
data.id」形状 —— 四处要么不调用 update,要么传标量字符串 id,在裁决 A 下仍判by-id,语义翻面不会让任何一条用例变红。反过来说,pin 之后这 4 处会自动继承 #5748 的修法,不需要再逐个改 —— 这正是「导入生产者的判定」相对「手抄一份」的收益。changeset:建议 skip-changeset
本 PR 的文件面是测试 + 一条 devDependency + 基线数据文件,无任何用户可见行为变化:
*.test.ts,不进任何包的发布产物(check:published-files绿,files白名单只有dist);@objectstack/core加的是 devDependency —— 消费者安装时不解析,不构成对外依赖契约的变化,发不出有意义的 release note;scripts/engine-double-contract.baseline.json是门禁台账,不是运行时。故未加
.changeset/*.md,并已自行给 PR 打上skip-changeset标签。🤖 Generated with Claude Code
https://claude.ai/code/session_019Q7oc7ASjh8yxyS3Yz78We
Generated by Claude Code