发现于:#4645 Phase A 跑 @objectstack/cli 全量测试时撞上。与 #4645 无关——已按下面的方法证伪过因果。
实测
objectstack origin/main @ 81087877e,packages/cli:
$ pnpm exec vitest run src/commands/doctor-ledger-read-failure.test.ts
× withholds the clean bill of health when the ledger cannot be read
× expands the detail under --verbose, and only under --verbose
× still reports this project's own findings when only the ledger half failed
× an intact ledger WITH a global unique is still reported the way it always was
× reports a CORRUPT ENTRY by name instead of skipping it in silence
× withholds the clean bill when the ONLY finding is an unparseable entry
× names EVERY unparseable entry, and expands the causes under --verbose
Test Files 1 failed (1)
Tests 7 failed | 10 passed (17)
describe('os doctor, end to end, against an unreadable installed-package ledger') 这一整块 7 条全红;同文件另外 10 条(不属于这个 describe)全绿。
症状:doctor 跑通了,就是不报 ledger
失败断言的实际输出显示 os doctor 正常跑完了每一项,只是 ledger 那一行根本没出现:
+ ✓ Platform spec Declared specVersion is current with the installed platform
+ ✓ Dependencies No circular references detected
+ ⚠ Object "account" is defined but not referenced by any view, flow, app, or lookup field
+ ✓ Unique scope No unconfirmed installation-wide uniques for this 'isolated' environment
+ ⚠️ Environment is functional but has some warnings.
期望里的 2 installed-package ledger entries… / (+1 more) 一个都没有。注意最后一行 —— ledger 里明明放着坏条目,✓ Unique scope 却照样打了 clean bill,这正是 #5412/#5414 修掉的那个形状,而 #5413/#5424 又在它上面加了"报告读不到的条目"。两轮修复的报告面,现在测不出来。
已排除的因果
#5429 说的是"两条 ledger 健康行都锁在 isolated posture 之内,换个 posture 一行都不报"。这个单不是它:这里 posture 就是 isolated(测试自己设的),条件满足,却仍然一行不报。两者可能同源(都指向那两行的触发条件),但现象不同,需要分别核实。
建议的下一步
先确认 CI 上这块是不是也红(如果 CI 绿而本地红,那是环境依赖,本身就是个要修的可复现性问题);然后从 LocalManifestSource.list()(#5413/#5424)往 doctor 的渲染那一段走一遍,看报告是在读的时候丢的还是在渲染的时候丢的。
发现于:#4645 Phase A 跑
@objectstack/cli全量测试时撞上。与 #4645 无关——已按下面的方法证伪过因果。实测
objectstack
origin/main@81087877e,packages/cli:describe('os doctor, end to end, against an unreadable installed-package ledger')这一整块 7 条全红;同文件另外 10 条(不属于这个 describe)全绿。症状:doctor 跑通了,就是不报 ledger
失败断言的实际输出显示
os doctor正常跑完了每一项,只是 ledger 那一行根本没出现:期望里的
2 installed-package ledger entries…/(+1 more)一个都没有。注意最后一行 —— ledger 里明明放着坏条目,✓ Unique scope却照样打了 clean bill,这正是 #5412/#5414 修掉的那个形状,而 #5413/#5424 又在它上面加了"报告读不到的条目"。两轮修复的报告面,现在测不出来。已排除的因果
utils/storage-driver.ts、utils/storage-driver.test.ts、commands/serve.ts)git checkout origin/main --回去再跑,7 条依旧全红,一条都没变。driver-turso 住在闭源 cloud 仓,却是开源 runtime 点名偏好的默认 driver — 建议把核心迁回本仓 #4645 的其余改动是packages/plugins/driver-*→packages/drivers/*的目录平移,与 doctor 读.objectstack/installed-packages零交集。~/.objectstack不存在,环境里没有任何OS_*变量。测试自己在beforeEach里设OS_TENANCY_POSTURE=isolated并 mockprocess.cwd()到临时目录,node_modules也按 fix(cli):os doctor指名道姓报告非法OS_TENANCY_POSTURE并非零退出 (#5382) #5390 的坑造好了(✓ Dependencies证明这步生效)。与 #5429 的关系
#5429 说的是"两条 ledger 健康行都锁在
isolatedposture 之内,换个 posture 一行都不报"。这个单不是它:这里 posture 就是isolated(测试自己设的),条件满足,却仍然一行不报。两者可能同源(都指向那两行的触发条件),但现象不同,需要分别核实。建议的下一步
先确认 CI 上这块是不是也红(如果 CI 绿而本地红,那是环境依赖,本身就是个要修的可复现性问题);然后从
LocalManifestSource.list()(#5413/#5424)往 doctor 的渲染那一段走一遍,看报告是在读的时候丢的还是在渲染的时候丢的。