Menghuan1918
0b40f74ce8
fix(native): 钉牢 files 接管泄漏的守护断言 + 记录两条不变量
#777 已修掉根因(清理循环跳过 FILES_KIND、注册失败回滚已占用的 id),但它的两处
断言写在「活着的 id 集合」上——泄漏的 id 恰好构成同一个集合,未修复代码上同样
通过;且槽位失败判据按 key 命中,而一个描述符的两个槽共用一个 key,所以
registerSlots 的「部分回滚」分支从未被执行。
- tests/native-registration.spec.ts:断言改写到注册表的事件日志(孤儿 id 会让键
集合看起来完全正常);槽位失败判据改为 name::key,从而可以只让某个描述符的
第二个槽失败、真正走到部分回滚;补 reportFailure 的 phase 断言。实测:在
v0.22.0 源码上 4/4 红,在修复后的源码上 4/4 绿。
- src/client/native/index.ts:给 disposeSafely 补注释,说明释放失败只写
console.error、不弹诊断条的理由(两个调用点都在 teardown 路径上;真被占住的
id 会在下一次注册尝试里经 reportFailure 显式报出)。
- AGENTS.md:§3.4 第 9 条补上这两条不变量(含真机日志实证的链接),§6 把
native-registration.spec.ts 纳入关键测试守护。
- docs/plans/2026-09-28-native-files-takeover-reload-leak.md:事故/证据/否决方案
记录(含「吸收」方案为何被否)。
验证:pnpm typecheck / pnpm lint 通过;pnpm test 122 files / 1292 passed / 9 skipped。
2026-09-28 10:57:10 +08:00
..
2026-09-28 10:57:10 +08:00
2026-08-22 18:19:23 +08:00
2026-09-27 22:33:57 +08:00