hotfix(runtime): route #5138 test engine doubles through assertEngineDeleteDispatch - #5615
Merged
Merged
Conversation
…eteDispatch PR #5584(#5138)新增的 packages/runtime/src/action-execution-calldata-not-found.test.ts 里两个 fake ObjectQL 引擎的 delete() 没有走 @objectstack/objectql 的 assertEngineDeleteDispatch,合入 main 后 check:engine-double-contract (挂在 ESLint job)转红,阻塞后续所有 PR 的 ESLint。 按门禁处方第一条修:两处 delete 以 assertEngineDeleteDispatch(opts) 开头, 并用它返回的 by-id dispatch 里的 id 作为 store 键,而不是自己再从 opts.where.id 取一次。@objectstack/objectql 已是 @objectstack/runtime 的 dependencies 条目,无需新增 devDependency,也不需要 MEASURED 例外。 这与 #5138 的取舍一致且互补:那个 PR 刻意不读 ql.delete 的返回值(引擎侧 IDataEngine.delete 只声明 Promise<any>),而这里收紧的是 fake 的入口谓词 —— 断言顺带证明了 callData 兜底发出的是标量 by-id 删除,即真引擎会执行的形状。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016FNvXhtSdnEGEfLEsMmvxh
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
📓 Docs Drift CheckNo hand-written docs reference the 0 changed package(s). ✅ |
Contributor
Author
CI 已确认解堵(不只本地绿)按上面机制记录里我给自己定的那条(「PR 开完要等 CI 收敛再交报告」),这次等了,结果是这条纪律当场又抓到一个:
顺带被抓到的第二条:
|
baozhoutao
marked this pull request as ready for review
August 5, 2026 20:34
baozhoutao
enabled auto-merge
August 5, 2026 20:34
This was referenced Aug 5, 2026
os-zhuang
pushed a commit
that referenced
this pull request
Aug 5, 2026
This was referenced Aug 5, 2026
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.
Hotfix / 解堵单。跟进 #5138 与已合并的 PR #5584。
packages/runtime/src/action-execution-calldata-not-found.test.ts(PR #5584 随 #5138 新增)里两个 fake ObjectQL 引擎的delete()没有走assertEngineDeleteDispatch,合入 main 后check:engine-double-contract(挂在 ESLint job)转红,每个后续 PR 的 ESLint 都跟着红(实例:PR #5601 job 92432801994)。基于最新
origin/main@a7b854f19的新分支/新工作树,未复用已合并的旧分支。修法:按门禁处方第一条,无例外
两处 fake 的
delete以assertEngineDeleteDispatch(opts)开头,并用它返回的by-iddispatch 里的id作为 store 键,而不是自己再从opts.where.id取一次 —— 这样 fake 的键来源也是生产者的标量提取逻辑,而不是第二份手抄。@objectstack/objectql已经是@objectstack/runtime的dependencies条目(action-execution.ts本来就从它导入resolveActionHandlerKeys等),所以处方括号里的「若包没有则加 devDependency」不适用,manifest 与 lockfile 均无改动。没有走 MEASURED baseline 例外,因为没有理由走:两处 fake 都只被
{ where: { id }, context? }形状的调用命中(兜底侧是callData的 delete 分支,protocol 侧是deleteData自己的 by-id 删除),都是by-id,加了断言后 25 条用例全绿 —— 不存在「加上就红」的情况需要申报。这与 #5138 的取舍一致且互补,不矛盾:那个 PR 刻意不读
ql.delete的返回值(因为IDataEngine.delete只声明Promise< any >,读它是读契约没承诺的信号);本 PR 收紧的是 fake 的入口谓词。断言还顺带把一件事变成被证明的:callData兜底发出的是标量 by-id 删除,即真引擎会执行的形状,而不是 #4434 那种真引擎会 500、fake 却照单全收的谓词形删除。验证
反向验证(方向先判后跑):预判为「还原两处 fake 的 delete → 门禁红回同一条,而 25 条用例保持全绿(断言对 by-id 调用是行为中性的)」。实跑两条都成立:
同一条规则、同样 2 个 double(行号因新增的注释与 import 而从 69/102 变为 76/115)。用例侧行为中性也已被证实:同一批 25 条在加断言前(merge 后的 main)与加断言后都是 25/25 绿。
机制记录:为什么会漏 —— 与派单假设不同,我的 PR 的 ESLint 当时不是绿的,它是红的
派单里问的是「为什么你 PR 自己的 ESLint job 当时是绿的(base 时序?merge_group 检查集差异?)」。查了实际的 check runs,这个前提不成立,如实更正:
PR #5584 的 ESLint job(id
92425566733)结论是failure,19:49:00Z 开始、19:53:08Z 就已经红了,而 PR 是 19:48:54Z 开的 —— 门禁在 PR 打开后 4 分钟就报了警,报的就是这条,连行号都一样:(job log 原文,与 PR #5601 上看到的是同一条。)
所以没有 base 时序缺口,也没有 merge_group 检查集差异要解释 —— 门禁没漏,它按时抓到了。真正的机制问题在别处,而且是两条:
Close issues referenced in other repositories在 20:12:31Z)。同一 PR 上Test Core/Build Core/TypeScript Type Check等 23 个检查全绿,只有 ESLint 一个红。也就是说,red-ESLint 没有挡住合入 —— 要么 ESLint 不在分支保护的必需检查集里,要么这次合并绕过了它。车道要防再发,该查的是这一条,我没有权限读分支保护配置,所以只陈述证据、不臆断是哪一种。范围
只改这一个测试文件(import + 两处 fake 的
delete)。无 changeset —— 纯测试双的契约收紧,不改任何产品行为(#5138 的行为变更 changeset 已随 PR #5584 合入)。未触碰content/docs/releases/。构建期gen:schema重新生成的packages/spec/authorable-surface.base.json已还原,不在本 PR 内。🤖 Generated with Claude Code
https://claude.ai/code/session_016FNvXhtSdnEGEfLEsMmvxh
Generated by Claude Code