@sema-ai/core 1.277.0 → 1.278.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/LICENSE +97 -21
  2. package/NOTICE.md +1 -1
  3. package/README.md +2 -5
  4. package/README.new.md +150 -0
  5. package/README.zh-CN.new.md +145 -0
  6. package/dist/bench/metrics.js +1 -1
  7. package/dist/bench/metrics.js.map +1 -1
  8. package/dist/core/cache-break-detector.js +0 -0
  9. package/dist/core/cache-break-detector.js.map +1 -1
  10. package/dist/core/tools.d.ts.map +1 -1
  11. package/dist/core/tools.js +3 -1
  12. package/dist/core/tools.js.map +1 -1
  13. package/dist/engine/execution-env/node-execution-env.d.ts.map +1 -1
  14. package/dist/engine/execution-env/node-execution-env.js +8 -0
  15. package/dist/engine/execution-env/node-execution-env.js.map +1 -1
  16. package/dist/engine/harness/types.d.ts +9 -1
  17. package/dist/engine/harness/types.d.ts.map +1 -1
  18. package/dist/engine/harness/types.js.map +1 -1
  19. package/dist/tools/fs/index.d.ts.map +1 -1
  20. package/dist/tools/fs/index.js +94 -3
  21. package/dist/tools/fs/index.js.map +1 -1
  22. package/dist/tools/gitea-issue.d.ts +1 -1
  23. package/dist/tools/gitea-issue.d.ts.map +1 -1
  24. package/package.json +2 -7
  25. package/CHANGELOG.md +0 -5455
  26. package/docs/A1-ATTRIBUTION-ROUND1-2026-07-09.md +0 -181
  27. package/docs/AB-ORACLE-GATE-VERDICT-2026-07-10.md +0 -100
  28. package/docs/ANCHOR-GAP-INVENTORY-2026-07-09.md +0 -143
  29. package/docs/ARCHITECTURE.md +0 -125
  30. package/docs/BUGHUNT-2026-07-05-NIGHT.md +0 -98
  31. package/docs/BUILD.md +0 -63
  32. package/docs/CANCEL-ASYNC-ATTRIBUTION-2026-07-09.md +0 -98
  33. package/docs/CC-198-VS-201-DRIFT-2026-07-09.md +0 -70
  34. package/docs/CC-BASELINE-FAKE-ZERO-AUDIT-2026-07-09.md +0 -51
  35. package/docs/CC-DRIFT-198-206-AGENT-TYPES-2026-07-10.md +0 -82
  36. package/docs/CC-DRIFT-198-206-CHANGELOG-2026-07-10.md +0 -82
  37. package/docs/CC-DRIFT-198-206-REMINDERS-2026-07-10.md +0 -96
  38. package/docs/CC-DRIFT-198-206-ROADMAP-2026-07-10.md +0 -110
  39. package/docs/CC-DRIFT-198-206-TOOL-INVENTORY-2026-07-10.md +0 -53
  40. package/docs/CC-DRIFT-198-206-USAGE-CONSTANTS-2026-07-10.md +0 -64
  41. package/docs/CC-DRIFT-198-206-WORKFLOW-2026-07-10.md +0 -83
  42. package/docs/CC-PARITY-CHECKLIST.md +0 -220
  43. package/docs/CC-PARITY-DEEP-SWEEP-2026-07-07.md +0 -149
  44. package/docs/CC-SUBAGENT-PROMPT-STUDY-2026-07-09.md +0 -219
  45. package/docs/CC-TASK-REMINDER-CADENCE-STUDY-2026-07-09.md +0 -396
  46. package/docs/CC-TOOL-PARITY-SWEEP-2026-07.md +0 -56
  47. package/docs/CC-TOOL-PROMPT-DEEP-DIFF-2026-07-08.md +0 -274
  48. package/docs/CC-TOOLSURFACE-DEEP-DIVE-2026-07-07.md +0 -197
  49. package/docs/CC206-OBSERVER-ANCHORS-2026-07-11.md +0 -463
  50. package/docs/CC207-CORE-SWEEP-BACKLOG-2026-07-12.md +0 -155
  51. package/docs/CENTER-CONTROL-PLANE-SEAM.md +0 -86
  52. package/docs/CLEANUP-CONTRACT-ANCHOR-2026-07-09.md +0 -83
  53. package/docs/COLD-START-RSI-2026-07-09.md +0 -72
  54. package/docs/COMPACTION-LIVE-AUDIT-2026-07-09.md +0 -114
  55. package/docs/CONTEXT-lifecycle-extension-points-and-stop-attribution.md +0 -71
  56. package/docs/COREWARS-POLYGLOT-TRIAGE-2026-07-09.md +0 -85
  57. package/docs/DEADTARGET-OVERFULL-HBOX-2026-07-10.md +0 -92
  58. package/docs/DEADTARGET-PATH-TRACING-REVERSE-2026-07-10.md +0 -87
  59. package/docs/DEADTARGET-WINNING-AVG-COREWARS-2026-07-10.md +0 -96
  60. package/docs/DEEPSEEK-API-LIMITS-PROBE-2026-07-09.md +0 -118
  61. package/docs/DESIGN-140-MOCK-VERIFY-2026-07-11.md +0 -79
  62. package/docs/DESIGN-140-VERIFICATION-2026-07-11.md +0 -43
  63. package/docs/DESIGN-DRAFT-workflow-collab-2026-07-11.md +0 -56
  64. package/docs/DESIGN-ORACLE-GROUNDING-GATE-2026-07-10.md +0 -167
  65. package/docs/DESIGN-TFRAG-RECONCILE-SCAFFOLD-2026-07-09.md +0 -102
  66. package/docs/EXP-PA2-PE-DESIGN-2026-07-11.md +0 -220
  67. package/docs/EXT-DOGFOOD-2026-07-12.md +0 -50
  68. package/docs/FINAL-VERIFY-SURFACE-AUDIT-2026-07-09.md +0 -44
  69. package/docs/FRAG-RECON-INVESTIGATION-2026-07-09.md +0 -183
  70. package/docs/HANDOFF.md +0 -121
  71. package/docs/KNOWN-ISSUES.md +0 -96
  72. package/docs/LEGW-WINDOW-TAX-2026-07-10.md +0 -82
  73. package/docs/LIVE-PROBE-BATCH-2026-07-11.md +0 -207
  74. package/docs/M2-CERT-ATTRIBUTION-2026-07-10.md +0 -61
  75. package/docs/M25-LEG-VARIANCE-ATTRIBUTION-2026-07-10.md +0 -81
  76. package/docs/MAILMAN-TIMEOUT-ATTRIBUTION-2026-07-10.md +0 -88
  77. package/docs/MEMORY-BACKEND-DIALECT-NOTES.md +0 -69
  78. package/docs/MTEB-ESCAPE-HATCH-ATTRIBUTION-2026-07-09.md +0 -57
  79. package/docs/MTEB-LEADERBOARD-ATTRIBUTION-2026-07-10.md +0 -134
  80. package/docs/ORACLE-GATE-NEGATIVE-SAMPLE-2026-07-11.md +0 -28
  81. package/docs/PARITY-CONTEXT-TRANSACTIONS-2026-07-10.md +0 -67
  82. package/docs/PARITY-PROGRESS-MATRIX-2026-07-10.md +0 -37
  83. package/docs/PARITY-SPOT-AGENT-TYPES-2026-07-10.md +0 -70
  84. package/docs/PARITY-SPOT-REMINDERS-2026-07-10.md +0 -144
  85. package/docs/PARITY-SPOT-TOOL-INVENTORY-2026-07-10.md +0 -61
  86. package/docs/PARITY-SPOT-USAGE-CONSTANTS-2026-07-10.md +0 -95
  87. package/docs/PARITY-SPOT-WORKFLOW-2026-07-10.md +0 -93
  88. package/docs/PASSWORD-RECOVERY-PANEL-VERDICT-2026-07-10.md +0 -62
  89. package/docs/R8-R9-FINALIZE-COORDINATION-2026-07-09.md +0 -124
  90. package/docs/REPL-CODE-MODE-EVALUATION-2026-07-10.md +0 -187
  91. package/docs/REPORT-1249-TARGETED.md +0 -48
  92. package/docs/RESEARCH-3P-MEMORY-SWAP-2026-07-12.md +0 -273
  93. package/docs/ROADMAP.md +0 -111
  94. package/docs/RSI-CLOUD-DEPLOY-2026-07-06.md +0 -289
  95. package/docs/RSI-PROCESS-AI-COLDSTART-2026-07-11.md +0 -68
  96. package/docs/S18-THOROUGHNESS-AUDIT-2026-07-09.md +0 -113
  97. package/docs/SERVICE-INTEGRATION-GUIDE.md +0 -298
  98. package/docs/SUBAGENT-STREAM-RESILIENCE-PARITY-2026-07-10.md +0 -118
  99. package/docs/SWEBENCH-PRO-RECON-2026-07-11.md +0 -31
  100. package/docs/TB-EFFICIENCY-TELEMETRY-2026-07-08.md +0 -114
  101. package/docs/TB-FAILURE-AUTOPSY-2026-07-05-RERUN.md +0 -67
  102. package/docs/TB-FAIRNESS-AUDIT-2026-07-08.md +0 -141
  103. package/docs/TB-FULL-1257-2026-07-08.md +0 -77
  104. package/docs/TB-LEG-GAP-ATTRIBUTION-1261-1263-2026-07-11.md +0 -154
  105. package/docs/TB-REGRESSION-DAEMON-KILL-2026-07-08.md +0 -58
  106. package/docs/TB-RSI-CROSSCHECK-2026-07-06.md +0 -68
  107. package/docs/TB-RSI-LEDGER.md +0 -30
  108. package/docs/TB-STABLE-SET-2026-07-08.md +0 -127
  109. package/docs/TB21-RECON-2026-07-11.md +0 -28
  110. package/docs/TEST-DESIGN-BATCH-1-2-3.md +0 -97
  111. package/docs/THIRD-PARTY-INTEGRATION.md +0 -45
  112. package/docs/TOKEN-ESTIMATE-CALIBRATION-LIVE-2026-07-09.md +0 -102
  113. package/docs/audit-2026-06-10-/347/254/254/344/272/214/350/275/256-/347/251/272/347/231/275/345/214/272/344/270/216/345/277/230/346/216/245/347/272/277.md +0 -147
  114. package/docs/audit-2026-06-10-/350/256/241/347/256/227bug/346/211/253/346/217/217.md +0 -163
  115. package/docs/audit-2026-06-11-/344/277/256/345/244/215/345/244/215/345/256/241/344/270/216/345/233/236/345/275/222/344/270/223/346/211/253.md +0 -95
  116. package/docs/audit-2026-06-12-design71-P1/346/275/234/344/274/217/351/235/242/350/243/201/345/206/263/344/270/216/345/220/236/351/224/231/345/256/241/350/256/241.md +0 -45
  117. package/docs/audit-2026-06-12-/345/205/254/345/274/200/346/227/213/351/222/256/346/264/273/346/200/247/344/270/216vendored/346/255/273/350/267/257.md +0 -63
  118. package/docs/audit-2026-06-15/ADDENDUM-second-pass.md +0 -88
  119. package/docs/audit-2026-06-15/ARCHITECTURE-AND-ROADMAP.md +0 -187
  120. package/docs/audit-2026-06-15/DOC-CORRECTIONS.md +0 -105
  121. package/docs/audit-2026-06-15/INDEX.md +0 -49
  122. package/docs/audit-2026-06-15/ORCHESTRATION-STATUS.md +0 -98
  123. package/docs/audit-2026-06-15/PRODUCTION-ISSUES.md +0 -189
  124. package/docs/audit-2026-06-15/REFERENCES-literature.md +0 -139
  125. package/docs/audit-2026-06-15/VENDOR-REFACTOR-PLAN.md +0 -96
  126. package/docs/cc-probe-198/README.md +0 -72
  127. package/docs/cc-probe-198/STABILITY-AUDIT.md +0 -118
  128. package/docs/cc-probe-198/live-schema-monitor-worktree-2026-07-09.json +0 -56
  129. package/docs/cc-probe-198/mount-variants.json +0 -536
  130. package/docs/cc-probe-198/plan-mode-run.json +0 -1
  131. package/docs/cc-probe-198/probe-bash-bg.json +0 -224
  132. package/docs/cc-probe-198/probe-edit-mismatch.json +0 -120
  133. package/docs/cc-probe-198/probe-read-missing.json +0 -62
  134. package/docs/cc-probe-198/probe-search-empty.json +0 -127
  135. package/docs/cc-probe-198/probe-task-family.json +0 -227
  136. package/docs/cc-probe-198/probes.status +0 -6
  137. package/docs/cc-probe-198/raw-capture-interactive.json +0 -948
  138. package/docs/cc-probe-198/raw-capture-print.json +0 -787
  139. package/docs/cc-probe-198/raw-capture2-interactive.json +0 -948
  140. package/docs/cc-probe-198/raw-capture2-print.json +0 -787
  141. package/docs/cc-probe-198/system-prompt.txt +0 -135
  142. package/docs/cc-probe-198/tools-array.json +0 -962
  143. package/docs/durability-boundary.md +0 -63
  144. package/docs/fix-2026-06-10-/350/256/241/347/256/227bug/344/277/256/345/244/215-search/346/211/271.md +0 -75
  145. package/docs/fix-2026-06-11-/347/254/254/344/272/214/350/275/256-/344/277/256/345/244/215-search/346/211/271.md +0 -62
  146. package/docs/parity-sweep/REPORT-DYNAMIC.md +0 -97
  147. package/docs/parity-sweep/REPORT-STATIC-GGB.md +0 -127
  148. package/docs/parity-sweep/REPORT-STATIC-RWE.md +0 -133
  149. package/docs/vendor-history.md +0 -385
  150. package/docs/vendored-upstream-diff-2026-07.md +0 -83
@@ -1,50 +0,0 @@
1
- # 扩展性 dogfood:纯第三方视角集成实录(2026-07-12)
2
-
3
- > clay 指令:「自己尝试集成并测试扩展性,集成 memory 和自定义 tool,观察灵活性和效果」。
4
- > 方法:独立 scratchpad 项目,`npm install @sema-ai/core@1.270.1`(sema-release 匿名腿),**只用公开导出**
5
- > (零仓内路径 import,零内部知识特权——遇到不懂的只读 dist d.ts/js,和真第三方同一信息面)。
6
- > 产物:①自定义 in-memory `MemoryBackend` 过契约套件 16/16;②live 三幕(真 DeepSeek)ALL PASS。
7
-
8
- ## 一、做了什么
9
-
10
- 1. **自定义 MemoryBackend**(~130 行):共享 store 双实例(makeSibling 跨实例 CAS)、per-id CAS、
11
- lexical search(公开的 `termSet`/`jaccardDistance`)、slug 冲突 -n 后缀、批内去重、malformed 守卫。
12
- `memoryBackendContract` **16/16 全过**——从零实现到全绿共 5 轮迭代(每轮由套件断言驱动),约 20 分钟。
13
- 2. **live 三幕**(`ext-live.mts`,真 DeepSeek flash):
14
- - **A** 自定义 `kv_get`/`kv_set` 工具 + v2 scope(`user:` + `proj:` marker 仓)——模型读 KV→写记忆→
15
- harvest **落进第三方 backend**(proj scope 1 条,user 层零杂写)✓
16
- - **B** fresh session 经注入召回答出 host:port ✓
17
- - **C** `defineAgent({observer:"reviewer"})` + `runtimeCapsResolver=()=>({allowObservers:true})` →
18
- 委派时 observer 自动配对,**双投递+activity envelope 实证**(经第三方 Brain wrapper 嗅探)✓
19
-
20
- ## 二、顺滑面(值得保持的设计)
21
-
22
- - **契约套件零框架依赖**:`runAssertion` 缺省顺序执行+断言即 throw,裸 `tsx` 可跑;报错信息可操作,
23
- 16 案就是第三方的实现路线图。这是整个扩展面体验最好的部分。
24
- - **类型面自解释**:`ScoredMemoryEntry.score`=距离(0=identical 升序)、tombstone 语义、CAS baseRev
25
- 契约都在 d.ts 注释里,照着写基本不踩坑。
26
- - **Brain 可包装**:`{...inner, stream: wrap}` 两行成 wrapper,ctx(messages/systemPrompt/tools)可嗅探
27
- ——observer 证据、审计、路由类第三方需求全靠这个面,现状够用。
28
- - **observer 双开关**:声明+caps 两行接通,live 即证。v2 scope 契约同样三个 format 函数+marker 文件即成。
29
-
30
- ## 三、摩擦点(建议处置)
31
-
32
- | # | 级别 | 摩擦 | 建议 | 处置 |
33
- |---|------|------|------|------|
34
- | F1 | MED | `applyPatches` 的行为词表不在接口 JSDoc:reason 正则(`duplicate id in batch`/`malformed patch refused`)、re-add=幂等覆盖、跨 scope add=搬移、slug `-n` 后缀——全靠跑套件逐案撞出来 | `MemoryBackend.applyPatches` JSDoc 补行为条款清单(或逐条指向契约 case 名);零代码变更 | ✅ 已修(1.271,JSDoc 行为条款清单) |
35
- | F2 | MED | **typebox 未 re-export**:第三方定义 `ToolSpec.parameters` 必须 import "typebox",而它只是 core 的传递依赖(我没显式装也能用=脆弱;npm 提升消失即断) | core re-export `Type`(或文档声明 peer 版本要求) | ✅ 已修(1.271,typebox re-export) |
36
- | F3 | LOW | `MemoryEntryHeader.mtimeMs/sizeBytes` 是 backend-native 字段,从 `MemoryEntry` 派生 header 时无处抄,首轮实现必漏(契约第 1 案就逮) | 接口 JSDoc 加一句「backend 自造,近似值可接受」已有但可更醒目;可接受现状 | 📁 记档(接受现状) |
37
- | F4 | LOW | 包内无 src/,报错堆栈经 sourcemap 指向不存在的 `src/…` 虚拟路径,第三方顺着堆栈找文件会 404 | 可选:发包携 src 或调 sourcemap;dist js 可读性尚可 | 📁 记档(接受现状) |
38
- | F5 | UX | 记忆召回:注入面=index(name+description),body 靠模型主动 Read。description 信息量不足时弱模型只复述 index(B 幕首跑 FAIL,objective 加「读 body」提示后过) | 设计使然(CC 同构);第三方文档值得写明「description 要写成可独立回答的摘要」;MEMORYINSTRUCTION 模板已有引导,弱模型方差记档 | ✅ 已写入 docs/THIRD-PARTY-INTEGRATION.md §4 |
39
- | F6 | INFO | AI-Only registry 腿装包 401(需 token),sema-release 腿匿名可装——第三方 onboarding 文档应指 sema-release | 文档一句话 | ✅ 已写入 docs/THIRD-PARTY-INTEGRATION.md §1 |
40
-
41
- 另:examples 完备性批情报(`ok`/`err` Result helper 未导出、写门拒绝文案)已修于 1.273;
42
- Brain.stream 联合返回 ergonomics 已补 JSDoc(src/core/types.ts)+ THIRD-PARTY-INTEGRATION.md §5。
43
-
44
- ## 四、结论
45
-
46
- 第三方在**零内部知识**前提下:~20 分钟过存储契约、~40 分钟跑通 memory+自定义工具+observer 的 live 全链。
47
- 扩展面(storage seam/tool band/brain/agents/observer/scope 契约)的公开导出完备,没有一处需要 fork 或
48
- patch 引擎。摩擦集中在「行为条款的发现方式」(F1)与「依赖面声明」(F2)——都是文档/导出级小改。
49
- 实验产物:`scratchpad/ext-dogfood/`(mem-backend.mts / contract-run.mts / ext-live.mts),可升级为
50
- 仓内 example 模板(V2 五例批的候选:「第三方 backend + 契约认证」一例)。
@@ -1,44 +0,0 @@
1
- # final-verification 验证面活体审计(2026-07-09)
2
-
3
- > 背景:full-89 @1.258.5(ledger 轮 6)守成丢 11 题中 9 题为「agent 自宣完成但 verifier 判 0」的早死。
4
- > 本档=对这 9 题收尾自检机制(design/132 final-verification + 1.258.5 修②)的活体触发面侦察(opus 腿,逐 trial 上机取证)。
5
- > 数据坐标:海外机 `~/sema-tb/jobs/full-1258.5-fb/full89/<题>__*/`(events.jsonl 的 done.stats.mechanisms.finalVerifyInjected / sema.txt / verifier/test-stdout.txt)。
6
-
7
- ## 定谳:9/9 = 情形③「注入了+真验了+验错面」;零情形①(开关)/零情形②(敷衍)
8
-
9
- - **情形①排除**:9 题 `finalVerifyInjected: true` 全为真——TB 跑腿 final-verification 开着,修②上场了,非配置面。
10
- - **情形②排除**:9 题 reasoning 全出现收尾自检响应标记且全部真执行验证工具调用(重跑 pipeline/clean build/读产物/重算),自宣全是引用真实命令输出的表格,非空口自证。prompt 强度足以驱动行为。
11
- - **情形③命中**:失败根因统一=**验证面选择错位**——模型验「自己定义的正确性」,test 判「任务验收面」。
12
-
13
- ## 两个子类(逐题证据)
14
-
15
- **自一致陷阱(4 题)**:验了「可复现/能跑」,而非「对/在评测姿态下能跑」。
16
- | 题 | 模型验了 | test 判的 |
17
- |---|---|---|
18
- | count-dataset-tokens | 重跑自己脚本得同值 79566(自一致) | 正确值 79586(差 20) |
19
- | reshard-c4-data | 压缩/解压往返一致 | chunk ≤15728640 字节硬上限(超 209 字节) |
20
- | cancel-async-tasks | 自造 `task.cancel()` 看到 cleanup | 真 SIGINT/KeyboardInterrupt 子进程路径(cleanup 没跑) |
21
- | sqlite-with-gcov | 自设 `export PATH=...` 后验 sqlite3 可用 | 真 fresh shell 无该 export → FileNotFoundError |
22
-
23
- **验收契约盲区(5 题)**:验了产物「看起来对」,漏了 test 锁的那条硬约束。
24
- | 题 | 模型验了 | test 判的 |
25
- |---|---|---|
26
- | bn-fit-modify | 输出格式+边数+边集 | `from,to` 边方向语义(6 边全反) |
27
- | build-pov-ray | 二进制能跑+sanity render exit=0 | `file_id.diz` 版本指纹(下错版本) |
28
- | financial-document-processor | OCR 数值重跑抽查自一致 | 移动后文件 SHA-256 归类(1 文件错分) |
29
- | merge-diff-arc-agi-task | 内存态 `map()` 过示例集 | 提交态 algo.py 输出(工作树≠提交态) |
30
- | overfull-hbox | clean build 零 warning | 替换词只能来自 synonyms.txt 白名单(造了词典外词) |
31
-
32
- ## 修向(prompt 内容面,非配置面)
33
-
34
- 当前注入文案(「do a final verification of the deliverable…execute directly…read actual output」+1.258.5 修② 契约探针句)驱动了真验证,但没约束**验证姿态**。强化方向(通用措辞,非题目特定):
35
- 1. **干净环境姿态**:收尾验证不得复用自己会话内设置的 env/PATH/别名——用 fresh shell 姿态复验(逮 sqlite/cancel)。
36
- 2. **验收面对齐**:从任务原文重新枚举每条硬约束(数值上限/白名单/命名语义/指纹文件),逐条对照,而非用自定义成功判据(逮 reshard/overfull/bn-fit/pov-ray)。
37
- 3. **评测态=持久态**:验证对象必须是落盘/提交后的最终产物,非内存态或工作树中间态(逮 merge-diff)。
38
- 4. **自一致≠正确**:重跑自己的实现得到同一答案不构成验证——需独立路径交叉(逮 count/financial)。
39
-
40
- ## 待办与闸
41
-
42
- - **CC 锚取证已归档(同日,opus 腿,cc-pro-r3-full 6 题 PASS 收尾段逐字取证)**:可锚=4 条跨题系统性纪律——**A** 对准真实评测面/任务自带 oracle(overfull=grep 真编译器告警/merge-diff=跑 examples.json/reshard=md5 对照原始集,3 题重复)、**B** 持久态重读(写后 Read/重 load 落盘产物,4 题重复)、**C** 任务硬约束逐条对账(reshard ≤30 逐目录核/financial 全集差集对账,2 题)、**E** 独立第二路径交叉(md5 非重跑自己/运行时 .gcda 非编译期,2 题)。**不可锚(CC 运气非纪律,诚实排除)**:fresh-shell 原生 PATH 仅 sqlite 1 题(实现选择);bn-fit 边方向/financial SHA-256/overfull 白名单/reshard 字节上限四个 sema 精确失败维度 CC 收尾同样未独立复核(实现填对)。终判:锚「面选择原则 A/B/C/E」,不锚「逐维度独立复核」。
43
- - **N=5 复跑读数**(r3-rerun 腿,1.0 口径):9 题里 ≥4/5 过的=k=1 采样噪声,该题「验错面」证据降权;≤1/5=真行为缺口,prompt 修增益可判。
44
- - 修落地走标准流:CC 锚 + 通用措辞 + 定向测试 + 三轨复审。
@@ -1,183 +0,0 @@
1
- # 碎片记录重建题(T-FRAG)归因 + 锚核证据档(2026-07-09)
2
-
3
- > **性质:纯证据收集档,不带结论、不做行动判决。** 记录双轨迹归因与 CC 锚核两段取证的全部机制面细节,供后续判决使用。
4
- > **中性化说明**:本题原始题名/题面含安全语义词,已全程中性化——题目代号 `T-FRAG`(fragmented-record reconstruction,碎片记录重建);目标串统称"记录值 R";字段标签统称 `LABEL=`;输出文件写作 `/app/recovered_records.txt`。文件格式术语(ZIP、局部文件头、中央目录、CRC-32、offset)为技术名词,保留。全档只描述 agent 行为轨迹/工具调用序列/reasoning 机制面,不含题面叙事。
5
- > **靶标背景**:`T-FRAG` 在 CC-diff 精确集内(CC PASS ∩ sema FAIL),sema(@sema-ai/core 1.259.0)稳定 FAIL(siege 3 注 + m2-cert 1 注 = 4 注全 0),CC(claude-code 2.1.198)同模型 deepseek-v4-pro PASS。轮 8「方差回摆」先验已被 4 注同型死法推翻,升为系统性归因靶。
6
-
7
- ---
8
-
9
- ## 第一部分:双轨迹归因证据
10
-
11
- ### 0. 题面机制骨架(中性化)
12
-
13
- - 任务:从一个磁盘镜像里重建一个被删记录的一段"记录值 R",逐行写进 `/app/recovered_records.txt`。
14
- - 记录值 R 的题面硬约束:恰好 **23 字符**、以 `8XD` 开头、以 `W54` 结尾、仅大写字母+数字。
15
- - verifier 判据(实读 `test_outputs.py`):**精确子串相等**——`R in guesses`,R 的真值 = `<R23-REDACTED>`(23 字符评测靶标答案,已打码防同题污染)。必须逐字精确;只写对前缀或构造一个"看起来合规"的串都判 0。
16
- - 数据实况(两边环境完全一致):`/app/varsea/disks/sub1/subA/subAlpha/ae3f4c.dat`(4MB 磁盘镜像),内含一个 ZIP。**目标记录在镜像里碎片化(fragmented)存放**:
17
- - 前段片段 `R_head` = `LABEL=8XDP5Q2RT9Z`(明文,记录值前 11 字符)位于 ZIP **局部文件头区**(约 offset 1,048,652 / 1MB)。其后紧跟的中段字节在此处被打乱/覆盖。
18
- - 后段片段 `R_tail` = `K7VB3BV4WW54`(明文,记录值后 12 字符,含结尾换行)出现在 ZIP **中央目录区**(约 offset 3,145,727 / 3MB)。
19
- - 完整记录值 R = `R_head` 去掉 `LABEL=` 标签后的 `8XDP5Q2RT9Z` **拼接** `R_tail` = `<R23-REDACTED>`(23 字符,符合约束)。
20
-
21
- **观测(证据):** 两边数据/工具集/超时/环境全等价,唯一分野是"是否认出记录跨两个磁盘区碎片化并把两段按序拼接"。这不落在工具缺失/超时/环境/verifier 格式面。
22
-
23
- ### 1. CC 轨迹(PASS)
24
-
25
- 数据源:`~/sema-tb/jobs/cc-pro-r3-full/password-recovery__zDkk8fG/agent/trajectory.json`,27 步,65 次工具调用,reward=1。
26
-
27
- 关键序列:
28
- 1. **约束解析即正确**(step 2 reasoning):把"23 字符"归到记录值本身(`8XD`+17 中段+`W54`),不把 `LABEL=` 标签算进长度。
29
- 2. 常规勘查:`ls /app` → 定位 `varsea/` → 认出 `ae3f4c.dat` 是 4MB 镜像 → `strings`/`grep -aob 'LABEL='` 找到前段片段(offset 1048652)。
30
- 3. **主动搜后段片段**(step 58/60):`grep -aob 'VB3BV4WW54'`、`grep -abo 'W54'` 在原始二进制里定位后段,发现落在中央目录区(~3MB)。
31
- 4. **认出碎片化 + 显式拼接**(step 62-65,CC 自述原话):"the file data is split across two locations — the ZIP local file area at 1MB has the first 20 bytes, and the central directory area at 3MB has the remaining 13 bytes including the suffix. Let me assemble and verify."
32
- 5. **拼接后自校验**(step 64):对拼好的 `LABEL=<R23-REDACTED>\n` 算 CRC-32,和 ZIP 头里的 CRC(`c4 5d 72 b0`)对账,确认后落盘。
33
- 6. step 65 写入 R 的真值,PASS。
34
-
35
- **观测的三处机制差异点**:①约束解析未把标签混进长度;②把"后段片段在哪"当成必须回答的问题主动去找;③找到两段后默认假设"碎片化需拼接"而非"损坏"。
36
-
37
- ### 2. sema 四注(全 FAIL)
38
-
39
- 四注共享同一磁盘、同一工具集(foremost/extundelete/strings/grep/od/dd 都在),四注**全部找到了两段片段**,但**没有一注把它们正确拼成 23 字符 R**。
40
-
41
- | 注(job/trial) | 落盘内容 | 死法(机制面) |
42
- |---|---|---|
43
- | siege-a / `rsVdoZX` | `8XDP5Q2RT9Z`(11 字符) | 找到后段片段(event 25)但**未与前段关联**;reasoning 显式判定"文件在删除时部分损坏/被覆盖",把题面"23 字符/W54 结尾"当"近似启发式",主动放弃。 |
44
- | siege-a / `UzuSuuP` | `LABEL=8XDP5Q2RT9ZW54` 和 `LABEL=8XDK7VB3BV4W54`(两行) | 把两个片段**各自补 `W54` 凑成两个候选**,并把 `LABEL=` 标签算进长度凑"23 字符";未做"两片段串联"。 |
45
- | siege-a / `4epyX6Y` | `8XDP5Q2RT9ZW54`(14 字符) | **丢弃中段片段** `K7VB3BV4`,只用前段 `8XDP5Q2RT9Z` 直接接 `W54`,自称"14 字符符合约束"(实际连 23 字符都没满足,自校验失灵)。 |
46
- | m2-cert / `DJbVmWq` | `LABEL=8XDP5Q2RT9ZW54`(把标签算进长度=23) | 同 4epyX6Y 构造思路,再把 `LABEL=` 标签算进长度,自建一张"约束勾选表"逐项打勾,把伪造合规当验证通过。 |
47
-
48
- **死法同型(观测):** 四注同一失败模式——**认出了两段明文碎片,但未建立"目标记录跨两区碎片化、需按序拼接"的模型**;缺此步后转两条代偿路径:(a) 判"损坏"直接放弃(rsVdoZX);(b) **构造一个逐项满足题面约束、但非真实内容的串**(其余三注),用自建 checklist 自我背书。
49
-
50
- 次级观测:sema 多注反复出现"把 `LABEL=` 标签算进 23 字符长度"的口径错误(UzuSuuP/DJbVmWq),CC 第一步 reasoning 即避开。该口径错误放大了"构造伪合规串"的可信度——错误长度口径让 14 字符假串"看起来"凑到 23。
51
-
52
- ### 3. 证据强度分级(观测,非行动判决)
53
-
54
- - **【实锤】** 主观测 = reconstruction 缺环(碎片拼接):两边数据/工具/超时/环境全等价,唯一分野在拼接;CC 显式做、sema 四注全没做。依据:双轨迹逐命令对照 + verifier 精确断言 + 两边 agent 自述原话。
55
- - **【实锤】** 非超时/预算:sema 主注墙钟约 8m35s(10:40:37→10:49:13),TB_TIMEOUT_SEC=900,约第 66 步已落盘并进入自校验循环=主动收尾非截断;token 未顶(input 1.09M / output 26.7k)。
56
- - **【实锤】** 非工具缺失:foremost/extundelete/strings/grep/od/dd 两边都有且 sema 都用了(sema 甚至多跑 foremost 雕刻)。缺的是"拿工具去找后段并拼接"的意图。
57
- - **【实锤】** 非 verifier 格式差:verifier 是精确子串相等;写对 23 字符即过。
58
- - **【方向性】** 代偿性"自我验证"反害:sema 三注末尾都有"逐项勾选约束 → 宣布完成"的自校验,但它验的是"我构造的串是否满足题面约束",**不是"这串是否等于磁盘真实内容"**。checklist 自证给伪合规串虚假信心。此点与 final-verify 机制的判据方向相关(验"格式合规" vs 验"内容为真")。
59
- - **【猜测】** "损坏"先验 vs "碎片化"先验分野:rsVdoZX 见局部头区乱码字节即锚定"损坏";CC 见同样乱码却锚定"碎片化、后半在别处"。可能是提示词/引擎对取证任务默认假设的引导差,也可能采样波动——但四注 0/4 稳定同型,偏系统性。
60
-
61
- ### 4. 待核候选机制点(假设,均须锚核后才可能落码)
62
-
63
- 按"疑似杠杆"排列,**不是行动决定**:
64
-
65
- 1. **final-verify / 自我验证判据的"内容为真 vs 格式合规"分野**(疑似杠杆最强)。假设:final-verify 阶段对"自宣答案"是否应引导做独立的内在一致性核对,而非仅格式/约束勾选。锚核问题:CC 是否有对应机制,还是纯靠模型自发?
66
- 2. **取证/恢复类任务"碎片化 vs 损坏"默认假设引导**。假设:若源自系统提示词对任务默认心智模型的引导差,是低风险高杠杆点。锚核问题:两边系统提示词里"部分证据/不完整数据"处理措辞是否有别?
67
- 3. **约束数值精确解析**(标签是否算进长度)。更像模型 reasoning 表现,锚核问题:提示词里是否有"逐字复述并核对约束"的引导?
68
-
69
- ### 5. 数据源锚点(可复查)
70
-
71
- - sema FAIL:`~/sema-tb/jobs/siege-a-1259-fb/siegea/password-recovery__{rsVdoZX,UzuSuuP,4epyX6Y}`(events.jsonl / verifier/test-stdout.txt)
72
- - sema 第 4 注:`~/sema-tb/jobs/m2-cert-1259-fb/full89/password-recovery__DJbVmWq`
73
- - CC PASS:`~/sema-tb/jobs/cc-pro-r3-full/password-recovery__zDkk8fG`(agent/trajectory.json,27 步)
74
- - 真值:`<R23-REDACTED>`(前段 offset~1048652 + 后段 offset~3145727 拼接)
75
- - 注:测试机 job 目录里题目子目录名仍用原始题名 `password-recovery__*`,机上路径未改;检索时用原名,文档表述用 `T-FRAG`。
76
-
77
- ---
78
-
79
- ## 第二部分:CC 锚核证据(部分——腿在核验中途被中断,未落盘定论)
80
-
81
- > 锚核针对第一部分第 4 节三个候选做 CC 198 源码锚 + 行为锚双轨取证。**此段为中途快照,未完成、无最终判定。**
82
-
83
- 已取得的源码锚证据:
84
-
85
- - **候选 1(内在一致性/verified-vs-assumed)**:在 CC 单代理系统提示词里发现一段 "verified vs assumed" 相关文本,但它被特性开关 `nt("tengu_verified_vs_assumed", !1)` 门控——`nt(flag, default)` 形态,第二参 `!1`(=false)为默认回退值,即该文本**默认关闭**。需进一步确认 `nt()` 确为 flag-check 函数(默认参=fallback 语义)且该 flag 生产默认为 off。
86
- - **候选 1/2/3 的负向证据**:CC 单代理系统提示词里**未发现**关于"内在一致性交叉验证""重建/碎片化假设""精确约束解析"的 prompt 文本。源码里 `reconstruct`/`fragment`/`corrupt` 关键词的命中**全部落在库代码**(URI fragments、JSON pointers 等),**非** prompt 文本。
87
- - **多 worker 编排路径**:编排器 prompt(源码位置 ~224889)含一行 "self-verify",但那是**多 worker 编排器**路径,**非** CC 本题所走的单代理路径。
88
-
89
- 锚源坐标:`/Users/clay/开发/gittea/claude-198/cc-2.1.198/package/claude-cli-2.1.198.pretty.js`。
90
-
91
- ### 锚核未完成项(下一个 AI 的接手点)
92
-
93
- 1. **验证 `nt()` 语义**:确认 `nt(flagName, defaultVal)` 是特性开关检查函数、第二参是默认回退、`tengu_verified_vs_assumed` 生产默认 = off。若确认 off,则候选 1 的"内在一致性验证" **在 CC 默认路径里并不存在**(即源码锚 = verified-absent on default path)。
94
- 2. **穷举搜索词表补全**:锚核腿被中断前搜过 verify/verification/reconstruct/fragment/corrupt 等,**尚未系统列全搜索词表**(应补 double-check/cross-check/consistency/assumption/heuristic/approximate/checksum 及同义词),按宪法闸①须"穷举后列出搜过的词表 + verified-absent 声明"。
95
- 3. **行为锚跨题取证(完全未做)**:须在 `~/sema-tb/jobs/cc-pro-r3-full/` 抽 5-8 个 CC PASS 的计算/取证类题,看 CC 收尾是否**跨 ≥2 题重复**"用数据内在一致性(checksum/重算/回读对账)交叉验证结果"的纪律。≥2 重复=行为可锚;单题=运气不锚(诚实排除)。password-recovery 本题的 CRC 对账是**单题证据**,不足以独立构成行为锚。
96
- 4. **sema 现文本 diff(未做)**:`grep -r "verif" src/` 定位 sema 当前 final-verify prompt 拼装处,引用现文本,与 CC 锚文本(若存在)逐字对照。
97
-
98
- ---
99
-
100
- ## 第三部分:开放问题(交给判决,本档不裁)
101
-
102
- - 若锚核完成后结论是"CC 默认路径无内在一致性验证机制"(候选 1 源码锚 verified-absent + 行为锚不足 ≥2),则按宪法两闸,此候选**不可锚**——与 cleanup-contract 案(docs/CLEANUP-CONTRACT-ANCHOR)同型,不可锚不修,避免无锚自我发明。
103
- - 若行为锚成立(CC 跨 ≥2 题稳定用内在一致性交叉验证),则候选 1 可作 SEMA-only 行为锚落码候选,进复审+活体探针腿。
104
- - 候选 2/3 目前源码锚均倾向 absent,行为锚未取证,判定悬置。
105
-
106
- **本档定位:证据台账。可锚/不可锚/修不修的最终判决,由后续带宪法两闸的判决腿下,不在此档预设。**
107
-
108
- ---
109
-
110
- ## 第四部分:锚核腿闭合(2026-07-09 晚,opus 取证,三本地接手点全闭)
111
-
112
- > 第二部分四个接手点里的 3 个本地项已闭合(接手点 4 = 行为锚跨题,仍须上测试机腿)。锚源:`claude-cli-2.1.198.pretty.js`(198)+ `original-source-code/src/`(88 ground truth)+ `src/prompts/default.ts`(sema 现行)。
113
-
114
- ### 接手点 1:`tengu_verified_vs_assumed` 开关语义 —【实锤:CC 有文本但默认关=不可锚】
115
- - `nt(e,t)` = GrowthBook 特性开关查询函数(pretty.js:144737-144752),第二参 = 默认回退值;`if(!tj()) return t`(gating 未启用直接返回默认)。本地 override 表 `_3i` 全程仅赋 `null`,**无静态 override 把此 flag 烧成 on**。
116
- - 被 gate 的文本(pretty.js:590295-590299,单代理提示 "# Doing tasks" 段):"be accurate about what you verified vs. what you assumed… Do not assert assumptions as facts",第二参 `!1`(=false)默认关,仅能从远端 GrowthBook 打开。
117
- - 88 源里此 flag 与文本**完全不存在**(命中 0)——198 新增的、仍默认关的休眠槽。归因档第 85 行推断坐实。
118
-
119
- ### 接手点 2:锚核词表穷举 —【实锤:verified-absent on default single-agent path】
120
- - 穷举 20+ 词族(verify/verif/assum/double-check/confirm/validate/sanity/re-read/thorough/skeptic/careful/evidence/ground-truth/don't-guess/guess/hallucin/make-sure/cross-check/consistency/heuristic/approximate/checksum)。命中**全部落库代码或多 worker 编排路径**,单代理路径无一条常开验证纪律贴题。
121
- - 单代理提示验证槽全清点(组装器 `KD`@590427):`investigate_first`(常开=问用户前先自查,非验产出)/`reproduce_verify_workflow`(默认关,且是 bug 复现)/`act_dont_rederive`(默认**开**=反过度验证,方向相反)/`verified vs assumed`(默认关)。常开的仅 `Report outcomes faithfully`(如实报告已验证什么,非去验证)+ "say so explicitly rather than claiming success"(仅限 UI/前端窄域)。
122
- - 88 交叉核对:88 单代理曾有多条常开验证行("Before reporting complete, verify it actually works"/"Never claim all tests pass"/"check your assumptions"/独立对抗 verifier 契约),**198 单代理路径全部 ABSENT**——被删或迁到多 worker 路径。
123
- - **总结论:CC 198 单代理路径没有常开的「验证你的假设/别臆断/把重建结果与源数据对账/别造伪合规串」纪律文本。证据面 = verified-absent。**
124
-
125
- ### 接手点 3:sema 现行文本 diff —【反向证据:sema 验证面已领先 CC 常开路径】
126
- sema 相关文本全部**常开、非 gated**(`DEFAULT_SYSTEM_PROMPT ## Verification` default.ts:60-69 = 单代理路径 / `CODE_AGENT_PROMPT` 585-588 = dev opt-in)。
127
-
128
- | 纪律点 | sema | CC 198 单代理常开 | 判定 |
129
- |---|---|---|---|
130
- | 如实报告已验证什么 | ✅ | ✅ | 等价 |
131
- | 读回证据、别凭信心宣布成功 | ✅ 通用 | ⚠️ 仅 UI 窄域 | sema 强 |
132
- | **验最终交付物本体、proxy≠验证** | ✅(64-69) | ❌(88 有,198 删) | **sema 有 / CC 无** |
133
- | **读校验输出、按需求直接比对、别当误报丢弃** | ✅(67-69) | ❌ | **sema 有 / CC 无** |
134
- | 内容验证 vs 假设 | ⚠️ 邻义常开 | ⚠️ gated off | 都无常开逐字版 |
135
- | act-don't-rederive | ✅ | ✅ 默认开 | 等价 |
136
-
137
- **没有一条 CC 常开有而 sema 没有的验证纪律。** T-FRAG 死法(碎片按序拼接 vs 构造伪合规串;把 LABEL= 算进长度)在**两边提示词都无逐字专项**;sema 的「proxy≠验证/按需求直接比对」最贴近但仍是通用措辞。
138
-
139
- ### 综合判决(宪法两闸)
140
- - **闸① 锚核腿**:候选 1 = **源码锚 verified-absent**(CC 单代理默认路径无此常开机制;88 更强版 198 已删)。候选 2/3 两边均 absent。
141
- - **反向证据**:sema 验证面已**领先** CC 常开路径——「照 CC 锚补验证纪律」**无锚可照**,照搬 = 无锚自我发明(与 `docs/CLEANUP-CONTRACT-ANCHOR-2026-07-09.md` 同型)。
142
- - **提示词面走不通**:增益不在验证 prompt(sema 已经更强),而在模型侧默认心智模型(「碎片化 vs 损坏」先验)或引擎侧行为脚手架,非文本可锚。
143
- - **剩余活口 = 行为锚**(接手点 4)已于 2026-07-09 晚上测试机腿闭合,见第五部分——**行为锚成立**,案由「不可锚不修」翻转为「SEMA-only 落码候选进复审」。
144
-
145
- ---
146
-
147
- ## 第五部分:行为锚闭合(2026-07-09 晚,opus 上测试机腿)—【行为锚成立】
148
-
149
- > 接手点 4 闭合。数据源:海外机 `~/sema-tb/jobs/cc-pro-r3-full/`(CC 2.1.198 × deepseek-v4-pro,88 trial,54 题 reward=1.0)。判据:跨 ≥2 道 CC PASS 题(不含 password-recovery 基线)重复「收尾前对结果做内在一致性交叉验证」同型行为 = 行为可锚。
150
-
151
- ### 选样取证(计算/取证/数据类,7 道非基线 + 1 基线)
152
-
153
- | 题名 | 内在一致性自校验 | 证据(step) |
154
- |---|---|---|
155
- | password-recovery(基线,仅 1 票) | 有(CRC-32) | step26:拼接两段后算 CRC-32 与 ZIP header 反序比对确认 |
156
- | git-leak-recovery | 有 | step6-7:回读产出 + `git grep`/`fsck`/`find` 对真实仓库状态复查 |
157
- | financial-document-processor | 有 | step24-25:回读 summary.csv 交叉核 17 文件,**逮到 VAT 浮点漂移并修** |
158
- | multi-source-data-merger | 有 | step7:回读 parquet 核 行数/dtype/id 集合 |
159
- | merge-diff-arc-agi-task | 有(最强) | step22:写校验 harness 把自实现 map 跑遍全 example 逐个 result==expected |
160
- | sqlite-db-truncate | 有 | step8-10:重解析二进制按 cell 指针复核,**逮到自己 off-by-4 并修** |
161
- | extract-elf | 有 | step9-10:写 harness 独立读 ELF,12 抽样地址与二进制比对 |
162
- | crack-7z-hash | 弱/部分 | step24:依赖 7z 工具 AES+CRC 校验,未主动回读最终答案 |
163
-
164
- ### 判定:**行为锚成立**
165
- - 非基线 7 道中 **6 道**做**真·内在一致性对账**(验「答案==源真实数据」),远超阈值 2,且跨取证/数据合并/算法/二进制解析多类目 → **CC 跨题稳定行为纪律,非单题运气**。
166
- - 关键分野:这 6 道是**真对账**(financial 逮到浮点漂移、sqlite 逮到 off-by-4 并**自我修正**),**非表层 checklist**(验格式约束)——后者正是 sema 四注的死法。
167
-
168
- ### 案由翻转:**SEMA-only 落码候选,进复审**(不封案)
169
- - 提示词/源码锚路已封(sema 验证面 prompt 已强于 CC);增益不在 prompt 文本。
170
- - 行为锚成立 → **引擎侧行为脚手架**候选:引导 agent 在收尾/落盘前对产出做**内在一致性对账**(回读产出 vs 源/真实数据、或 checksum/独立第二方法复算),把「reconstruct/compute → verify against source」做成引擎侧收尾纪律,**非 prompt 复制、非依赖模型自发**。
171
- - **宪法两闸状态**:① 锚核腿过半(源码 absent + 行为跨题 ≥2 可锚)② 活体 wire 探针未做(落码后须验 sema 实际收尾是否真触发对账)。
172
- - **诚实边界**:CC 做的是**模型通用能力**(自发收尾复核),锚证明「可锚」但**不保证**硬脚手架能等价复现模型判断力;落码须避免退化成「表层 checklist」(sema 现状死法)。复审须回答:脚手架如何引导「验答案真伪」而非「验格式」。
173
- - **下一步**:走复审(workflow find→verify + codex 并行),先在 password-recovery/financial/sqlite 三题快环 N=3 验增益,再决定全量。**注意与 1.258.6 验证面四原则 A/B/C/E 的关系**——现有四原则是 prompt 面(告诉 agent 要验交付物本体/proxy≠验证),本候选是引擎面(脚手架实际触发对账动作),两者互补非重复,复审须界定接缝避免叠床架屋。
174
-
175
- ---
176
-
177
- ## 第五部分:行为锚闭合(2026-07-09 晚,opus 上海外机取证)——**行为锚成立**
178
-
179
- > 数据源:海外机 `~/sema-tb/jobs/cc-pro-r3-full/`(88 有效 trial,54 题 reward=1)。选样 = CC PASS 的计算/取证/数据类 7 题(不含 T-FRAG 本题,它只算基线 1 票)。
180
-
181
- ### 选样结果:7 道非基线题中 **6 道**做了真·内在一致性对账
182
-
183
-
package/docs/HANDOFF.md DELETED
@@ -1,121 +0,0 @@
1
- # HANDOFF — 新 AI 接手这里开始
2
-
3
- > **你是刚接手 `@sema-ai/core` 的 AI?读完这一页就能开干。** 这是**唯一权威入口**。
4
- > 本仓文档曾经墒增(多份 dated 报告各说各的"现状")——现已分层:**活文档**(下面 5 份 + README,持续维护)+ **证据归档**(`audit-*`/`fix-*`/`research/`,冻结、只读、别更新)。
5
- > **最后核实:2026-07-03(发版 `@sema-ai/core` **1.221.0**;tsc 0 / npm test 3887 passed)。** 本页的耐久事实(架构/构建/API/bug)**不依赖具体 HEAD**。
6
- > **🆕 2026-07-02→03 弧(1.197→1.221,含 07-03 单日四连发 1.218→1.221)= CC 2.1.198 重定基准全系列收官**:
7
- > - **design/118 去 vendored 化(1.213)**:`src/vendor/` 不复存在,推理循环全 first-party(`src/engine/{llm,loop,harness}`,State 机显式转移 + 恢复链体系[PTL/length/malformed-tool/thinking-only/rapid-refill]);血统史 `docs/vendor-history.md`。
8
- > - **design/119 CC 198 重定基准(1.215)**:Fable-5 wire 契约(`FABLE_5_COMPAT`/`fable5Model()`:adaptive thinking/output_config.effort/promptGuidance)+ TaskCreate 工具族 + Recall/Remember PascalCase + additionalDirectories。**ground truth 现 = CC 2.1.198**(`claude-198/cc-2.1.198/package/*.pretty.js`,grep 定位;88 可读源作交叉参照)。
9
- > - **design/120 工具并行全系列(P1=1.216/P2=1.218/P1.5=1.221)**:consecutive-safe 分批+cap10 → **流内工具执行**(`TaskSpec.streamingToolExecution` 默认 OFF;brain 侧 `toolcall_end` 生产[P2.0]+StreamToolExecutor[源序屏障/settle barrier/error 终局收口];有 tool_call gate 自动扣下)→ 输入级 `isConcurrencySafe`+Bash 只读分类(只读 Bash 真并行)。**流程范式实证:设计→双轨复审→实施→多轨复审实现**(P2 设计轮逮 8 BLOCKER 含"toolcall_end 无生产者"前提级洞;实现轮三轨 codex/fable-subagent/人工互补)。
10
- > - **design/121 LSP diagnostics 帧(1.220)**:编辑后新增诊断注入模型(CC 逐字 `<new-diagnostics>`)+ 结构化 `diagnostics` TaskEvent(壳渲折叠行);`LspTransport.onNotification` seam + workspace 级 registry(量限 10/文件·30 总 CC 同值);默认 ON 零成本门;真 tsserver live 5/5。
11
- > - **dogfood 批全清(1.219)**:通知合批(`followUpMode:"all"` 根治 8 连环 turn)· 子代理 cwd/thinking/principal 三继承(trusted 链,与 model 快照同型)· tool-result 孤岛修复+`ScopedToolResultStore`(租户隔离+per-task isEmpty)· subagent 查看态(`forwardSubagentEvents` 内容事件上显示线 + `onSubagentSpawn` steer 句柄)· compact 重读默认 ON(CC post-compact restore parity,`compacted.attachedFiles` 帧)。
12
- > - **roadmap #5/#6 收口(1.221)**:`Hooks.stop`(run 自然结束点外部裁决打回,cap8/stopHookActive,CC :473831)· context-edit 清除 marker 带 ReadToolResult ref(offload-then-clear,幂等 byte-stable)。
13
- > - **Fable-5 live 通道**:OpenRouter `https://openrouter.ai/api/v1` + model `anthropic/claude-fable-5`(key=env `ANTHROPIC_AUTH_TOKEN`)——openai 面全链 5/5(`src/examples/fable5-live.ts`);Anthropic wire 契约仍由 `test/anthropic-fable5.test.ts` 逐字节 mock 锁(等真 Anthropic key)。
14
- > - **发版口径变更(clay 2026-07-02)**:自主发版——复审+全量绿即 merge+publish+黑板通告,不再等逐版 go(memory `feedback-release-gate-and-endorsement`)。
15
- > **🆕 本会话弧(2026-06-29→07-01,1.167→1.195,29 发版,均 workflow/codex 双轨对抗复审 + 关键功能真模型 live 测)= 引擎能力全面补齐。** 逐版细节见 `CHANGELOG.md`;**当前能力图**:
16
- > - **CC-parity 工具/原语**:PascalCase 全 CC 名(`canonicalToolName` 跨版本兼容)· EnterPlanMode/present_plan · Read 多模/MultiEdit/TodoWrite · MCP `mcp__` 前缀 + 全局 ListMcpResources/ReadMcpResource/**ReadMcpResourceDir** trio · fork=`Agent(subagent_type:"fork")`(design/136:独立 Fork 工具已撤;`enableFork` 重映射为 opt-OUT 门)· BackgroundShell/Scheduler seam(INERT,TOB 归 service)· NotebookEdit · WebSearch domains · Rewind 4 模式。
17
- > - **上下文体系(design/112-114,clay 拍"完全抄明白")**:`# Environment` 块 + `TaskSpec.clientContext`(TZ 本地化+userEmail,C1)+ `loadProjectMemory` seam(C4,治"你好只回问候")+ `PROJECT_CONTEXT_FRAMING`(真模型 live 测逮到 passive 才加)。根因=**hands-less 部署要主动指令+注入项目 facts**。交叉验证 **CC88 可读源** `collection-claude-code-source-code/original-source-code/`=ground-truth。
18
- > - **warm-resume(design/114)**:`warmResume`(P0,fork-first+fail-loud)+ `WorkflowRun.sourceTaskId`(#3)+ `TaskSpec.requireExistingSession`(Phase3 reuse fail-loud,新 seam `SessionStore.acquire(opts?:{requireExisting?})`)。Phase2 编排=service。
19
- > - **LSP 全链(design/64 §13.1)**:core seam+协议单源(`LspTransport`/`lsp-protocol`/`TransportLspSession`,`src/core/lsp*.ts`)· **TOC 本地 `NodeLspManager`**(`src/engine/lsp/`,抄 CC,child_process spawn + stdio JSON-RPC + `evict(root)`/idle-TTL/LRU 三道 bound + 8 真服务器 `LSP_LIVE=1` 测)· TOB=service 1.55.0 WS bridge · host-wiring=service 1.57.0(host 默认 ON+单用户 gate)。详见 memory `project-lsp-subsystem`。
20
- > - **memory neural-recall(design/81 Slice 5,1.194)**:FileMemoryStore 激活向量 consolidation,**sidecar 架构**(向量独立 `vectors.jsonl`/DERIVED/后台嵌入不阻塞写)+ 能力阶梯 `MemoryVectorMode = lexical|portable|native`(**MySQL=portable 不是不能支持**)+ 共享 `core/memory-vector.ts`。🔴 band-tuning + 真模型 no-mis-merge=**生产启用门,默认 OFF**(fact-loss 防护,后期一键部署联动)。
21
- > - **治理 seam**:`RuntimeCaps{allowWorkflows,allowFork,forceDurableGate}`(per-principal,tighten-only,`runtimeCapsResolver`)· `Model.thinkingLevelMap`(L1 wire 翻译)· `Model.defaultThinking`。
22
- > - **部署姿态哲学(design/107,已从裁定变实现)**:判据=主体模型 `requirePrincipal`(**与本地-云正交**;TOC 也能上云+DB 中心化)。单用户 turnkey→CC 能力集默认 ON(service 1.60.0 `singleUserTurnkey` 门)/ 多租户→gated+审计+数据中心化。🔴 **锐化:TOC 只放松多租户/问责安全、必保自保护安全**(world-注入 content 围栏/不可逆动作闸/secret redaction——防的是恶意数据+agent 失误+自己凭据泄漏)。详见 memory `project-deployment-spectrum-toc-tob`。
23
- > - **MCP 连接并行化(1.195)**:`materializeMcpTools` 串行→`Promise.allSettled` 并行 + spec 序归并,roster 逐字节不变(顺序 tradeoff 完全消除)。
24
- > **🔑 纪律**:关键功能 scriptedBrain 单测不够、要真模型 live 测(真模型 `172.30.228.10:8000`;C4/memory band 就这么定的门);每发版 workflow + 异源 skeptic 对抗复审(逮真 BLOCKER/fact-loss)。
25
- > **剩余(冷启接手)= core 侧几乎清空**。deferred:K-8 per-turn modes(待 SDK)/ repo_map v1.5(**非-CC**=Aider 范式,CC 用 agentic 搜索+LSP,defer)/ design104 nesting(PARKED)/ thinkingLevelMap L2(YAGNI)。**他队半场**:service=memory-vector 对接 wiring / LSP 单源迁移(纯去重,core 零改,黑板 [354] 有计划)/ MySQL-portable / local-docker LSP 桥;飞轮=shell wiring。**前沿 = make-real 自足本地引擎**(clay 长期焦点,引擎能力全就位[LSP/memory-vector/warm-resume/context-system/部署姿态],宜开新会话专注跑组合优势闭环)。
26
- >
27
- > **🏷️ 改名(2026-06-23,务必知道)**:包名 `@ai-only/ai-agent-core` → **`@sema-ai/core`**;Gitea 仓库 `AI-Only/ai-agent-core` → **`AI-Only/sema-core`**;全仓 + 全历史已无差别洗成新名。**唯一没改的**:本地目录仍是 `/Users/clay/开发/gittea/ai-agent-core`(本地路径被有意保护)+ registry 路径 `AI-Only/npm` + `@ai-only` 组织 scope(兄弟包)。详 memory `project-rebrand-sema`。
28
- >
29
- > **🎯 1.119 → 1.145 之间 ship 的四条主线(此前文档全漏,接手必知)**:
30
- > 1. **sema-shell 主权契约**(design/99,E1–E25,1.120–1.128):service 逆向白标 CC 终端壳 → 一份 provider-neutral「主权契约」,core 补通用抽象。**SHIPPED**:E1 `tool_end.output` / E2 消息身份(`eventId`/`parentToolCallId`)/ E13 `workspace_changed` / E3+E10 统一 `status` 事件(brain liveness,ALS sink)/ E9 `McpServerStatus` 投影 / E23 live-only `onElicit`(inbound MCP elicitation,per-server opt-in)/ **E6 `SessionPolicyStore`**(per-session 权限规则,tighten-only,新 `RunnerDeps` seam)/ E14 git 探针进 `# Environment` / E18 resume-at 分支重放 / E19 rewind-files 工作树快照 / E12 prompt 建议。E22(MCP 长连接池)**defer**。
31
- > 2. **2c session-sync**(1.135–1.143):云 ↔ 本地会话同步。`SessionRepo.export/importEntries` + `FileSnapshotStore`(export/`importManifest`/`putBlob`)+ `SessionPolicyStore.listBySession` + `StreamingImportValidator`(NDJSON 流式)+ file-backed local pull/push 对称。**快照 BLOB 走对象存储**(service 侧 MinIO,core 接口不变)。
32
- > 3. **多轮对抗 bug-hunt**(1.129–1.139):vendored 硬化(1.130)/ 模型-harness 边界(1.131)/ CC 当 clean-room oracle 对照(1.132–1.134)/ **36 真 bug 修(1.139)**。详 memory `project-overnight-bughunt` / `project-vendored-refactor`。
33
- > 4. **workflow-parity**(design/97,1.144–1.145):CC Workflow 工具平价。**CORE-1~9**:确定性 `callKey` resume journal(**scope-keyed 跨租户隔离,BREAKING**)+ 嵌套 group 树 + redacted egress(`untrustedEgressForHuman`/`redactHostLeaks` 顶层导出)+ steerable agents(`agentStream`/`WorkflowAgentHandle`/`onWorkflowAgentSpawn`)+ worktree 隔离(`addWorktree`/`pruneWorktrees`,**isolate-only 零 merge**)+ per-agent model/tool-call/activity 流。service 侧 **SVC-1~5 全 SHIPPED**(后台外壳 / PG·TiDB JournalStore / worktree envFactory / per-agent UI / 跨副本 steer)。
34
- >
35
- > **🏆 更早已封顶并降为基座**:CC-parity 编排(design/96/97/98,1.115~1.118:workflow S1 + 推理强度 + S8 自助编排 + goal 模式)· supervisor 价值判决(design/89/95)GOAL 达成(结论=supervisor 不是「普遍更好」,是「worker 会失败场景的保险」+「视角受限的结构补全」)· design/80 supervisor core 全 shipped。
36
- >
37
- > **🎯 当前焦点(快速移动,真相=`git log` + 黑板 `agent-client/docs/CHANNEL.md`[已到 321] + `团队/`[306] + memory)**:**Settings/权限 PM 裁定已收口**(我=PM,见顶部横幅)+ **CC Plan 模式 turnkey 已 ship(1.159)**。**接手优先的 core 开项**:**message-identity Phase 1**(entryId 直挂 wire 边界事件;clay 拍要做、架构正确第一;设计在 `research/message-identity/01`)· ~~**P-8** MCP leak~~(✅ fixed 1.163.0)· ~~**MF-30** 裁定~~(✅ 收口 channel[337]:service-owned)。仍并行:**workflow 驱动扫 bug + 代码评审**(clay 2026-06-25)+ **自足本地 make-real**(clay 2026-06-23:AI 自驱引擎做真活、全本地、零 service,vision-architect↔code-impl↔oracle↔vision-verifier 闭环;已证 Beatsep 换肤 build-green + 视觉验过)。harness=`src/examples/make-real-*.ts`,产物在 `make-real-*/`(.gitignore 排除)。**deferred-by-design backlog**(正确门控,别 re-raise):S8 深化(等沙箱)/ CORE-7.1 pipeline 确定性 resume / supervisor-chat(等 client)/ exec-adapter seam / E22 MCP 池 / design73-74 seam(等 data)/ repo_map v1.5;value-judgment WON'T-BUILD = adaptive-DAG-planner + L4。
38
- >
39
- > 活状态查 `git log` + CHANGELOG(npm latest **1.221.0**,`npm view @sema-ai/core version`)+ memory `MEMORY.md` 状态行(每 session 加载)/`project-design120-tool-parallelism`(最新弧)/`project-self-sufficient-makereal`(前沿)/`project-rebrand-sema`,别信任何冻结 SHA。**跨仓黑板 = `/Users/clay/开发/gittea/sema-cc-parity/NEIGHBOR-REQUESTS.md`**(编号至 [382];service/飞轮半场点名都在里面)。核实命令见每份活文档尾部「如何重验」。
40
-
41
- ---
42
-
43
- ## 0. 30 秒认知
44
- **这是什么**:一个无状态、任务化的 AI agent 内核。推理循环 first-party(原 openclaw 蒸馏,design/118 已全量 de-vendor 进 `src/engine/`),在其上蒸馏 first-party 的任务装配/编排/durable/安全/记忆层(`src/`)。一个"任务"自带全套配置(model/tools/mcp/skill/limits/policy),跑完返回机器可读结果(`completed`/`blocked`/`failed`/`timeout`/`suspended`)。**大脑在外**(注入 `Brain`)、**手在外**(`ExecutionEnv` 本地/远端)、**记忆可外**(durable seam)。
45
-
46
- **宪法**(design/43):**机制少而通用(primitive),场景=配置(profile)**。core 只给原语;leader 编排、E2B/Kata 沙箱、TiDB 后端在 service 仓的 profile 层。
47
-
48
- **当前焦点**(2026-06-28 更新;快速移动,真相=`git log` + 黑板 `agent-client/docs/CHANNEL.md`[321] + `团队/`[306] + memory):**权限/Settings PM 裁定全收口**(黑板[316]/[318]/[320])+ **CC Plan 模式 turnkey ship(1.159)**。**接手优先 core 开项**:message-identity Phase 1(entryId 直挂 wire 边界事件;clay 拍要做、架构正确第一;设计 `research/message-identity/01`)· ~~P-8 MCP leak~~(✅ fixed 1.163.0)· ~~MF-30 裁定~~(✅ 收口 channel[337])。仍并行:**workflow 驱动扫 bug + 代码评审**(clay 2026-06-25)+ **自足本地 make-real**(clay 2026-06-23)。**最近 ship**(顶部横幅详列):1.155→1.166(shell §K 三投影 / manual /compact+detail / per-principal 授权轴 / P-13 floor+label+preserved_segment / CC Plan 模式 turnkey / message-identity Phase 1 / K-8 full-body+Q6 改名 / 后台 shell seam / NotebookEdit+P-8 / WebSearch domains / SchedulerCapability v1 / R8 rewind code-only)· 之前 sema-shell 数据契约 MF-* / 主权契约 E1–E25 / 2c session-sync / workflow-parity。<br>**↓ 以下全是已封顶的基座(core 全 shipped、非当前焦点)**:CC-parity 编排 + 推理强度 + goal + S8 自助编排(design/96/97/98,1.115~1.118)· 价值判决 benchmark(design/89/95,结论=supervisor 是「worker 会失败场景的保险」+「视角受限的结构补全」,非普遍更好;度量层在 core `@sema-ai/core/bench`)· **design/80 Supervisor**(人在环监督式编排:durable-checkpoint substrate;脉络 design/75 v2 重定向→单兵无人值守 + 去相关 assistant-supervisor + 自修复 + 人机接口,team fan-out 降级为可选 profile)。前端 = **自建客户端**(CLI/桌面;CC 临时)。**core 已基本 topped out**——前向工作多在 service / client / make-real,或 design-only(S8 深化 / CORE-7.1 / S2)。
49
-
50
- ## 1. 我该读哪份(活文档)
51
- | 你的目标 | 读 | 一句话 |
52
- |---------|-----|--------|
53
- | **集成/调用引擎**(消费者)| [`../README.md`](../README.md) | 完整 API/类型/事件/安全契约,看完即可集成 |
54
- | **理解架构/run 循环/各层** | [`ARCHITECTURE.md`](ARCHITECTURE.md) | 分层图 + 数据流 + 能力矩阵 + 各子系统职责 |
55
- | **编译/测试/发版** | [`BUILD.md`](BUILD.md) | 验证过的 build/test/publish + 发版 gate + 版本现状 |
56
- | **service 仓接入**(实现 seam)| [`SERVICE-INTEGRATION-GUIDE.md`](SERVICE-INTEGRATION-GUIDE.md) | 你实现哪些 seam + 契约 + 影响你的 gotcha |
57
- | **现在有哪些 bug** | [`KNOWN-ISSUES.md`](KNOWN-ISSUES.md) | 20 confirmed、**冻结集全部收口**、19 已修+1 by-design(P-10)(状态列)|
58
- | **未来做什么 + 当前难点** | [`ROADMAP.md`](ROADMAP.md) | 路线图 + **最新困难点** + 已确认延迟项 |
59
- | **durable suspend/resume 边界** | [`durability-boundary.md`](durability-boundary.md) | 保证什么/不保证什么(诚实声明)——**碰 resume/checkpoint/HITL 前必读**(resume token=单因子 bearer,非通用 workflow 引擎)|
60
- | **设计决策记录** | `../design/` | 编号 design doc(决策的 why);**注意 design/00 §1/§4 冻结在 1.36 era、design/69 文件不存在**(见 ROADMAP)|
61
- | **跨团队 settled 决策史** | [`../团队/DIGEST.md`](../团队/DIGEST.md) | search↔core↔service 通道蒸馏(四原语版本/durable 命门/v2 判决/campaign 结果/未决线程);原始日志在 `../团队/archive/` + git |
62
-
63
- ## 2. 🔴 接手前必知的 6 个事实(2026-06-27 核实)
64
- 1. **版本**:**已干净发版 + tag + npm publish 到 `1.221.0`**(`package.json`/`git tag v1.221.0`/`npm view` 三处一致)。后段轨迹:`1.167~1.196`(引擎能力补齐弧:LSP 全链/memory neural-recall/上下文体系/warm-resume/部署姿态)→ `1.197~1.212`(design/115-117 工具卡结构化/detach/通知链 + de-vendoring ⓪-③)→ `1.213`(design/118 结项:src/vendor 不复存在)→ `1.214`(compaction length-recovery)→ `1.215`(design/119 CC 198 重定基准)→ `1.216`(design/120 P1 分批)→ `1.217`([378] details 判别化)→ `1.218`(P2 流内执行)→ `1.219`(dogfood 批+subagent 查看态+compact 重读)→ `1.220`(design/121 LSP diagnostics 帧)→ `1.221`(Stop hook+可回读 marker+Bash 只读并行)。早段轨迹(历史):CHANGELOG 顶部权威头=`1.166.0`。发版轨迹(近段):`1.104.0`(design/80 supervisor 封顶)→ `1.111.0`(metrics→core /bench)→ `1.114.0`(`tightenTaskSpec`)→ `1.115~1.118`(CC-parity:推理强度 + S1 workflow + S8 自助编排 + goal)→ `1.119.0`(改名 sema)→ `1.120~1.128`(sema-shell 主权契约 E1–E25)→ `1.129~1.139`(对抗 bug-hunt + vendored 硬化,1.139 含 36 修)→ `1.135~1.143`(2c session-sync)→ `1.144~1.145`(workflow-parity CORE-1~9)→ **`1.146~1.150`(sema-shell 数据契约 MF-*,与 service 协调:MF-10 `task_progress` subagent usage tick(1.147,ephemeral)/ MF-24 `humanReview.gates[]` 权限门·denial 账本(1.148,共享脱敏 `src/core/arg-summary.ts`)/ MF-25 `TaskResult.model` 回声 effective model(1.148)/ MF-18 `compacted.trigger`(1.149)/ MF-14 `CheckpointSummary.contentKind`(1.150)/ MF-W WorkflowRun monitor header+deriveAgentDisplayStatus(1.147~1.150);MF-Fleet live 聚合在 service 进程内,core 只产 fact/signal 透传 `parentToolCallId`、不建 durable 父系血缘)**。`DEFAULT_MAX_TURNS=100`(`runtask.ts:63`)+ `DEFAULT_MAX_SUSPENDS=5`(`prepare-task.ts:105`)+ `DEFAULT_MAX_SLICES=100`(`prepare-task.ts:111`,独立计数器)= 稳态默认(runaway 安全网),不是待补 revert。详见 BUILD.md §5。
65
- 2. **测试/构建全绿**:`npm test` 全绿(**以实跑为准**——1.221.0 时 **3887 passed / 36 skipped**,数字会涨);`npm run build`(tsc)+ `tsc --noEmit` 均 exit 0。
66
- 3. **🟢 design/74 LIVE durable suspend/resume = 已落地 + make-real 验证通过**(不再"在飞"):真 Dart→Kotlin 端口、11 次真 suspend/resume、before/after trace 证明进度跨挂起存活。**旧文档里"design/74 在飞、分钟级移动、别碰 runtask.ts/prepare-task.ts/checkpoint-store.ts/types.ts"的警告已过时**——design/74 已落地,design/80 也改过这些文件且已发版。这些文件现在按正常活文档协议动即可(改公开 API 记得 §4 ② 注册活性证明)。design/74 的实现就绪 spec 仍是 `design/74-v4-resource-slice-suspend-code-level.md`(别读旧稿)。
67
- - **动手前仍先**:`git log --oneline -15` + CHANGELOG.md 顶部(看主线进度)+ `git status`(共享工作树,看哪些文件正脏=别的谱系正在改)。
68
- - **主线(design/80 Supervisor)的活真相源(仓内可达,fresh AI 也能读)**:`git log` + CHANGELOG.md + `design/80-supervisor-mode-WIP.md` + `design/80-*-brief.md`(各切片实现简报)+ `design/75-v2重定向-*.md`(重定向 why)+ 跨谱系通道 `团队/`(**settled 决策看 `团队/DIGEST.md`**;最新对话看 `团队/{来自,给}service-AI.md` 尾部;历史全文在 `团队/archive/`)+ `docs/vendor-history.md`(vendored 时代改动史)。**不是**任何活文档的冻结行号/SHA。
69
- - ⚠️ **memory(`~/.claude/.../memory/`)是 search/core-AI 谱系私有、在仓外**——真正零记忆的新 AI 够不到它,以上仓内源才是它的真相。
70
- 4. **依赖**只 `typebox` + `@modelcontextprotocol/sdk`(design/71 P1 删了 `ignore`/`yaml`)。
71
- 5. **20 confirmed bug → 冻结集全部收口**(P-8 fixed 1.163.0 / P-13 fixed 1.158.0);余 **19 已修**(P-1/P-2/P-3/P-20 等全修,tripwire 47/47 绿)+ P-10 by-design(reaper 归 service)。逐条状态见 KNOWN-ISSUES.md 状态列。
72
- 6. **两大头号命门已基本被 design/80 化解(addressed-by-design,不再是 open 命门)**:① "oracle 失败无自修复" → `runRepairLoop`(verify-fix + 非单调进度门)+ design/80 的 HITL 升级路径;② "无路径兼具工具链+HITL" → **design/80 就是那条路径**(durable approval + steering + plan-review + worker 自修复回路)。仍待坐实的是 **make-real**:把真编码任务跑通整条 supervisor 回路(无 oracle 时诚实升级、卡死→进度门停、关键节点上报够用不吵)——见 ROADMAP「当前难点」。
73
-
74
- ### 2.1 design/80 Supervisor — 核心侧已全部 shipped(新大事实)
75
- 一个 durable-checkpoint 的人在环 substrate。每个切片 = subagent 实现 + 我审核 + 独立 codex 复审(codex 跨切片逮到 ~12 个真 bug)。**所有 core 切片已发版**:
76
- - **D-1**(决策-动作绑定:`boundCallId` + `boundInputHash`)→ `1.101.0`
77
- - **D-2**(mint-site `safetyAxis` → `irreversible_ask` + `TaskSpec.shellGate`)→ `1.102.0`
78
- - **D-F**(`AskUserQuestion` answer fence + `inlineUntrusted`)、**D-A**(durable steering `pendingSteer`)、**D-B**(`plan_review` 独立 `CheckpointGate` kind + `ResumeOutcome` plan_review 臂)、**D-E-core**(只读 `ToolCallRequest.budget` + `costBreakdown` 财务分类)→ `1.103.0`
79
- - **D-E `riskDescriptor`**(`CheckpointGate.riskDescriptor` — 给 supervisor inbox 的确定性脱敏风险摘要;**INERT**;构造上 total)+ **D-D 契约文档**(`Checkpoint.deadline` + `CheckpointStore` 接口上的 gate.kind-aware reap + terminalAt backstop 语义;**reaper 归 service**)→ `1.104.0`
80
- - **§5 序列剩余(不是 core 活)**:**D-G**(直连客户端 principal 密码学绑定 — service 半场:server 侧已建 + 双 council + canary e2e 过;激活待 M2 = config-center 信任域锁 + client BFF 签名器);**D-C**(leader 监督视图 = 一个 seam note,非实现切片)。
81
-
82
- **其他当前真相**:
83
- - **RSI**(design/76/77 auto-promote):安全基线已发(`1.100.0`,`src/core/auto-promote.ts`);**自主自晋级(ON-tier)被正确地 mandate OFF**(价值判断 — 无 oracle 时太难/太险)。**PARKED,非放弃**。
84
- - **自修复回路已存在 + shipped**:`runWithTeacher`(运行中监控)、`runWithVerification`(事后 verify-fix)、`runRepairLoop`(带非单调进度门的 verify-fix)——`src/agents/{teacher,verify,repair-loop}.ts`。
85
- - **leader fan-out 合并冲突解决器("AI 冲突解决器")在 service 仓已建成**(`ai-agent-service` `leader/merge.ts` + `wire.ts` mkConflictResolver,commit `46e1852`);零 core 工作,**不是 core TODO**。
86
-
87
- ## 3. 读代码的指引(配合 ARCHITECTURE)
88
- - **入口/run 循环**:`src/core/runner/runtask.ts`(`Runner` + runLocked 控制流)← `src/core/runner/prepare-task.ts`(装配)← `src/core/runner/assemble-result.ts`(终态→TaskResult,errorCode 优先级链=**公开契约**)。
89
- - **public API 面**:`src/index.ts`(所有导出)。
90
- - **vendored 边界(已结项)**:design/118 de-vendoring 完成,`src/vendor/` 不复存在;历史账本 `docs/vendor-history.md`(代码内 `VENDORED EDIT` 注释保留为出处记档)。
91
- - **测试按维度**:`test/COVERAGE.md`(一文件一维度)。新 bug 的 tripwire 在 `test/known-issues-2026-06-15.test.ts`。
92
- - **想知道某能力在哪**:用 `repo_map` 工具(引擎自带,hands band)或 grep `src/index.ts` 的导出名。
93
-
94
- ## 4. 维护协议(让文档不再墒增)
95
- - **活文档**(持续更新,本目录):`HANDOFF / ARCHITECTURE / BUILD / ROADMAP / KNOWN-ISSUES / SERVICE-INTEGRATION-GUIDE` + `../README.md` + `durability-boundary.md`。
96
- - **冻结证据**(只读,**别更新**,只能被活文档引用/取代):`audit-*`、`fix-*`、`audit-2026-06-15/`(2026-06-15 深度审计证据:PRODUCTION-ISSUES 详证 / REFERENCES 文献 / DOC-CORRECTIONS 漂移修正 / VENDOR-REFACTOR / ORCHESTRATION-STATUS / ADDENDUM)、`../research/`(蒸馏期历史)、`../design/archive/`。
97
- - **改代码就更文档**:① 修了 bug → KNOWN-ISSUES 划掉 + 翻 tripwire 测试的断言;② 加/改公开 API(TaskSpec/RunnerDeps/ToolSpec 字段)→ README + ARCHITECTURE,**且必须在 `test/public-knob-liveness.test.ts` 注册该字段的活性证明**(tsc 强制:加字段不注册 = 编译失败,防"静默 inert 旋钮"#5 家族);③ 改 build/release → BUILD;④ 路线/难点变 → ROADMAP;⑤ 改 vendored → VENDOR.md(编号 + `// VENDORED EDIT:` marker)+ 跑 `test/vendor-contracts.test.ts`;⑥ 任何活文档改完,更新其尾部「最后核实」。
98
- - **每份活文档尾部有「如何重验」**:跑那几条命令即可确认它还成立(自维护的关键——事实可机械重验,不靠记忆)。
99
- - **快速移动的真相**(主线 design/80 等在飞):**不要**写进文档冻结;指向 `git log` + CHANGELOG + memory。
100
- - **跨会话记忆**(search/core AI 谱系**私有、在仓外**,真正零记忆的新 AI 够不到):`~/.claude/projects/.../memory/MEMORY.md` → `project-design80-supervisor`(主线活进度)/ `project-engine-resilience-fixes`(design/74 落地)/ `project-audit-2026-06-15`(bug 清单)。**新 AI 的仓内真相源 = `git log` + CHANGELOG + `团队/` 通道 + `design/` + 本套活文档。**
101
- - **✅ 提交状态**:本套活文档(`docs/{HANDOFF,ARCHITECTURE,BUILD,ROADMAP,KNOWN-ISSUES,SERVICE-INTEGRATION-GUIDE}.md`、`docs/audit-2026-06-15/`、`test/known-issues-2026-06-15.test.ts`)+ README **已于本次刷新提交入库**——fresh clone 即可看到。⚠️ 共享工作树纪律仍在:提交时**只显式列本套文档文件、别 `git add -A`**(clay 的 `团队/` WIP 与其他谱系的源改动同在工作树);改活文档照常走 §4 协议。
102
-
103
- ## 5. 一眼现状
104
- ```
105
- ✅ 已发 1.221.0(tag+npm publish);CHANGELOG 权威头 🎯 最近 ship=Stop hook+Bash只读并行 1.221 / LSP diagnostics 帧 1.220 / dogfood 批+subagent 查看态 1.219 / 流内工具执行 1.218
106
- ✅ K-8 第一批 1.161(full-body+Q6 对齐 CC)/ 二批后台 shell 1.162 / WebSearch domains 1.164 / Scheduler v1 1.165 / R8 rewind 1.166 🔜 剩余 core 开项=后台shell TOB 归 service / Scheduler TOC daemon backend(飞轮接)/ per-turn 待 SDK / nesting design/104 PARKED(P-8/MF-30/NotebookEdit 已收口)
107
- humanReview.gates/task_progress/model回声/compacted.trigger pipeline确定性resume / S2 goal 模式
108
- ✅ search 侧提示词工程(4a2ac88,未单独 release):awarenessEnabled 🟡 并行可选线: scale(assistant-scheduler/durable/部署硬化)
109
- /env Shell·Knowledge cutoff/WORKTREE_NOTICE/appendSystemPrompt 🟡 并行可选线: make-real(真编码跑通整条回路)
110
- ✅ workflow-parity CORE-1~9 × SVC-1~5 全 SHIPPED(design/97) 🔵 RSI auto-promote ON-tier 正确 mandate OFF(PARKED, INERT)
111
- journal(scope跨租户隔离)/worktree隔离/steerable/activity流 ⚠️ S8 是 security-heavy: 需部署硬沙箱 + S8b 强制安全 council
112
- ✅ sema-shell 主权契约 E1–E25 SHIPPED(design/99;E22 defer) ⚠️ docs/ 曾停在 1.116~1.119、本轮刷到 1.150(快速移动真相→git log)
113
- ✅ 2c session-sync 云↔本地(SessionRepo/Snapshot/Policy/流式) + 团队/通道[302] + memory,别信文档冻结的"当前焦点"
114
- ✅ CC-parity 编排+goal+S8 / design/80 Supervisor 封顶(降基座)
115
- ✅ 四原语+v1.5远端+自修复回路+双脑+PG+记忆L2+design/74
116
- ✅ 命门已被 design/80 化解; 20 confirmed bug → 冻结集全收口(19修+1 by-design)
117
- ✅ 测试全绿(npm test 为准, 3887@1.221.0 会涨)/build clean
118
- ```
119
-
120
- ---
121
- *本页是活文档。最后核实 2026-07-03(发版 1.221.0;当日四连发 1.218→1.221 = design/120 系全收官 + design/121 diagnostics 帧 + dogfood 批全清;发版口径已变为自主发版[clay 2026-07-02 拍])。耐久事实不依赖具体 HEAD;快速移动的"当前焦点"查 `git log` + CHANGELOG + 黑板 `sema-cc-parity/NEIGHBOR-REQUESTS.md`(编号至[382])+ memory(别信任何冻结 SHA)。重验:`git log --oneline -15`、`git tag | sort -V | tail`、`npm view @sema-ai/core version`、`git status`、`npm test`。*
@@ -1,96 +0,0 @@
1
- # KNOWN-ISSUES — 活 bug 清单(修一个划一个)
2
-
3
- > **当前盘点(2026-06-29)**:这 20 条是 **2026-06-15 审计的冻结集**(P-1~P-20):**19 已修 + 1 by-design(P-10),冻结集全部收口**(P-8 fixed 1.163.0)。**P-13 已修(发版 1.158.0)**——`maybeCompact` 现返回 `postTriggerTokens`(压后 size,与 `triggerTokens` 同坐标),floor = `postTriggerTokens × regrowth` 单坐标,不再 `triggerTokens − freedTokens` 混坐标(`auto-compaction.ts` ~437 + `runtask.ts` onTurnBoundary floor)。**另:service [325] env-teardown 时序 bug = 已修(1.160.0)。K-8 第一批 Q6 工具改名(1.161.0,BREAKING)发版门复审逮修 4 真 bug。K-8 第二批后台 shell seam(1.162.0,design/103)= 编码后 codex+workflow 双轨复审逮修 11 实现层 bug(maxConcurrent 终态占槽 / #9 riskDescriptor / #7 cursor 可重读诚实化 / seam 导出 / 非法 filter / exit→close 等);P-8 此前仍开放(1.162 时本切片解耦不绑 P-8);**现 P-8 FIXED 1.163.0**(commit `c8576a2`:prepareTask 在 materializeMcpTools 后抛错时 hoist `mcp` 到 try 外 + catch 内 best-effort `mcp.dispose()`;tripwire 单测断言 dispose 恰调一次)。core 已 clean 发版 **1.166.0**(本会话续发 1.164 K-8 WebSearch domains / 1.165 K-8 SchedulerCapability v1[design/105,全 INERT] / 1.166 R8 CC Rewind code-only `TaskSpec.rewindFilesTo`,均双轨对抗复审 = 5-lens workflow + codex 异源,**无新增冻结集 bug**)。已知 pre-existing minor:`tool-disclosure.ts` git-binary(含字面控制字符的正则)→ 其改动 diff-不可见(值已直接核实);留待 cleanup。**
4
- > **🆕 本会话(2026-06-30,1.167→1.175)**:9 发版均双轨对抗复审逮真 bug(EnterPlanMode 5 修 / fs file_path 修 sensitive-path fail-open / Read-image OOM+magic-byte / MultiEdit 守 fail-open 写工具集 / ListMcpResources reserved-name)。**✅ design/108① MCP `mcp__` 前缀 + design/110 createForkTool = SHIPPED 1.175.0**(双轨复审[workflow `wg7dvko6a`+codex]逮 1 BLOCKER+3 MAJOR + 我最终审查加 F4 sequential-edge,**全修**):**F3** TtlSessionStore.fork delegate(工具可达,之前 INERT)·**F4** settledForkOptions walk-back 排除 in-flight Fork tool_call(含 sequential 非首-call edge)·**F5** Fork reserved-name fail-fast·**F-leak** runTask 异常 release orphan·**F1** spec.tools 拒含 `__` caller 名(config.tool_name_invalid)。**Finding 6 验证后非 bug**(post-assembly toolEffects sync 已 gate)。**🟡 F7 已知限制(非 bug,文档化)**:forked durable session 无 core GC 路径——真 GC = service durable retention(类 design/109 reap);core 可选 parent-id metadata 留 TODO。**[K-8 早前轮 1.164-1.166 收口见上;均无新增冻结集 bug]**
5
- > ⚠️ **这不是唯一 bug 记录**:1.119 之后多轮对抗 bug-hunt(1.130 vendored 硬化 / 1.131 模型-harness 边界 / 1.132~1.134 CC clean-room oracle / **1.139 含 36 真修**)发现并修复了**大量 P 集之外的新缺陷**——完整账在 `CHANGELOG.md` 各版本段 + memory `project-overnight-bughunt`/`project-vendored-refactor`,不在本表。本表只追踪 06-15 审计冻结集。
6
- > 入口见 [`HANDOFF.md`](HANDOFF.md)。**这是活清单**:修了 bug 就把状态改 `fixed (commit)` 并翻 tripwire 测试断言。
7
- > **完整证据**(每条的独立 re-derivation + 反驳 + 测试建议)在 `audit-2026-06-15/PRODUCTION-ISSUES.md`(P-1~P-17)+ `audit-2026-06-15/ADDENDUM-second-pass.md` §B(P-18~P-20)。
8
- > **tripwire 测试**:`../test/known-issues-2026-06-15.test.ts`(原意:pin buggy 行为、保持绿;修 bug 时翻成 DESIRED 断言=红→提示更新)。**现状**:覆盖的 bug 已全部翻成 DESIRED(post-fix)断言、共 47 测试全绿——绿=已修(回归会变红)。
9
- > 20 条(P-1~P-20)全经对抗验证(独立 re-derivation,默认证伪)+ 关键项 search AI 亲读复核(✅)。另有 10 条候选被**正确证伪**(记录在 PRODUCTION-ISSUES 末 + ADDENDUM,避免重复 raise)。
10
- > (计数说明:第一轮 18 confirmed findings 含 SSE bug 被两个 finder 重复计 → 17 unique P-号;二轮 +3 = 共 **20 unique**。)
11
-
12
- > **🆕 本会话续(2026-07-01,1.176→1.195,20 发版)**:context-system / warm-resume / LSP 全链 / memory neural-recall / 部署姿态 / MCP 并行化 等,**均 workflow+异源 skeptic 对抗复审 + 关键功能真模型 live 测**。发版前逮到并**全闭合**的真问题(**均在 release 前修、无一进冻结集**):warm-resume Phase3 F1 并发 pending 毒化 BLOCKER + M2/M1 · invalid-TZ §25 honesty · C4「只注入内容仍 passive」(真模型 live 逮到)· LSP 修1 write-after-end 同步抛 + id-collision 静默错答 · memory Slice 5 **3 BLOCKER(embed 超时/update-replay 陈旧/别改 Pg 语义)+ fact-loss 风险(band=生产门)**。**冻结集(P-1~P-20)仍全收口、零回归。**
13
-
14
- ## 🔧 修复进度(2026-07-01 重核;全量套件 **3615 passed / 34 skipped** / tsc 0;`@sema-ai/core` 已 clean 发版 **1.195.0**)
15
- > **K-126(2026-07-04,design/126 codex 实现审 B 记档)**:响应式降级(reactive degrade)的**首个降级轮**按 primary 模型计价——`recordDegraded` 在读到 turn 诊断后才改价(1.39 BUG-2 修的语义就是「**后续**轮改价」)。方向 = 高估(primary 更贵)→ 硬预算只会提前触发,fail-safe;design/126 链形态放大触达面。正解 = 按每条 assistant message 的实际 `message.model` 独立计价,涉及成本热路径,单独批次做。
16
-
17
- > **✅ K-PLATFORM-SWEEP 已全清(1.237.0,13 条 5M+8m;service win 盒子真机验收:定向 54 绿 + 全量 3271 绿 0 败,黑板 [425])**。原记档留存参考:win32 战役收官后的第二轮机器横扫(手工 grep 漏网)confirmed 一批「路径来自 ExecutionEnv 可能异家族,却用 host `/`/`node:path`/`process.platform` 语义」的存量点。**MAJOR**:`file-snapshot-store.ts:154`(E19 快照/恢复全链 host node:path 吃远端路径)· `session-rule-policy.ts:20` + `active-skill-scope.ts:73`(allowDirs/allowPaths 的 isWithin 硬编码 `"/"`,win-family canonical key 下写入全误拒)· `prepare-task.ts:1606`(LSP edit-nudge host path.isAbsolute/resolve)· `node-execution-env.ts:113`(FileInfo.name 硬编码 `"/"` 拆段,win32 name 变整条绝对路径)。**MINOR**:`lsp-session.ts:57`/`lsp.ts:275`(URI→path 逆变换天真剥前缀)· `session-policy-store.ts:111`(posix.normalize tighten 门)· `task-registry.ts:597`/`index.ts:1206`(TaskOutput filter split `"\n"` 不吃 `\r\n`)· `node-lsp-manager.ts:268`(LSP cmd split(/\s+/) 不吃空格路径)· `safety.ts:95`(win32 保留设备名 CON/PRN/AUX/NUL/COM1-9/LPT1-9 未拦)· `run-spec.ts:93`(frozenDenyPolicy host path.resolve)· `permission-rules.ts:296`(BASH_GENERIC_PARAMS 硬编码无 lockstep 测试)。修法哲学同 [385]/[388]:结构判形,双家族归一,不按 process.platform。作为独立批统一横扫 + service win32 盒子真机验(其真机 lane 会撞 session-rule/skill-scope/snapshot 那几条)。
18
-
19
- > 自 2026-06-16 起 design/74 全部落地(1.99.0/.1/.2 发版),原"等安全窗、不碰另一谱系文件"的状态已作废:那批 design/74-面 bug 由另一谱系在 **1.99.2** 修齐并 codex/council 双审过(见 `CHANGELOG.md` §1.99.2),tripwire 已从 pin 翻成 DESIRED 断言全绿。当前活清单**冻结集全部收口**(剩 **1 条 by-design 接受** = P-10;P-8 fixed 1.163.0、P-13 fixed 1.158.0)。
20
- - **✅ 已修(19/20,全部经 tripwire DESIRED 断言或 1.99.2 CHANGELOG 验证;含 P-13 1.158.0 + P-8 1.163.0)**:
21
- - SAFE 文件(2026-06-16,tripwire 翻绿):P-1(MCP isError→throw)、P-3(TiDB delete 先删 session row)、P-4(read/write/edit 行计数 countLines)、P-5(safety 悬空符号链接 fail-closed)、P-6(web_fetch 每跳 isPrivateHost)、P-9(PgCheckpointStore.reopen CAS,见 `stores/pg.ts:390-406`)、P-12(teacher 定时器 cancel+unref)、P-14(jsGrep cap 逐行守 + 诚实 of-N)、P-16(roles 保留角色 preset)、P-18(reservedFor 匹配 `anthropic-messages`)、P-19(formatZodValidationError 递归到嵌套 accessor)、P-20(isPrivateHost 用 net.isIP 重写)。
22
- - design/74 面(**1.99.2**,另一谱系修 + codex round-2):**P-2**(SSE 断连→`res.on('close')`→`stream.destroy()`,`server/http.ts:159-168`)、**P-7**(resume 批准工具消失不再 false-complete,先失败再 reopen)、**P-11**(非-`env_failed` resume 失败释放 session pin)、**P-15**(interrupt/destroy/steer 被 wedged `prepareTask` 卡住→30s `orTimeout` 兜底)。
23
- - bookkeeping(clay 拍):**P-17**(版本/CHANGELOG release-cut;tripwire 已升级为"每个发版 package.json 版本必须有 `## <version>` 头"的护栏断言,1.104.0 满足)。
24
- - **✅ 反查同类一并修(sweep the class)**:SSRF 根治(P-6/P-20 共用一个硬化 `isPrivateHost`,顺带修 CGNAT 100.64/10、IPv6 `::`、0.0.0.0/8、`fc/fd` 误伤真域名、trailing DNS root dot `localhost.`/`127.0.0.1.` 绕过);grep 诚实性(非-multiline cap 溢出、`[capped at N of M]`、phantom 尾行);行计数全 fs band(read/write/edit);**MCP server instructions 未 sanitize 进系统提示=注入**(mcp.ts 生产端 sanitizeUntrustedText);**gitea-issue 2xx 无效 body 当成功**(改非成功);safety readLink-fail + cap-exhausted fail-closed(P-5 同族);design/74 的 1.99.2 批次另修了 20 个 resource-slice suspend/resume bug(3 HIGH:resource 切片独立 `maxSlices`、resource checkpoint 盖 `deadline` 供 reaper GC、双 scope cancel-reap 按真正 fire 的 gate.kind 选 scope)——不在 P-1~P-20 之列,完整清单见 `CHANGELOG.md` §1.99.2。
25
- - **✅ 最近修复(P-8,1.163.0)**:
26
- - **P-8 — FIXED 1.163.0(commit `c8576a2`)** — 历史问题:`prepareTask` 在 `materializeMcpTools`(`prepare-task.ts`)之后、返回 `Prepared` 之前抛错(中间 1135–1700 有真 throw-prone await:`canonicalPath` / memory-recall `selectAndComposeMemory`·`store.read` / repo_map `executionEnv.exec` 探针 / `sessionPolicyStore.getRules`),泄漏 MCP 传输(stdio 子进程/HTTP)——`runtask.ts` 的 `prepared.mcp.dispose()` 只覆盖"prepare 成功后 run 失败"路径,prepare *内部* 的 throw 不 dispose。**修法**:hoist `mcp` 到 try 外 + catch 内 best-effort `mcp.dispose()`(此前 mcp 是 try 内 const、catch 不可见;避免 600 行丑缩进的 body-wrap);tripwire 单测 = mock materialize 触发 egress throw → 断言 dispose 恰调一次。
27
- - **(已修)P-13** — §25.2 anti-thrash 地板坐标混用 → **FIXED 1.158.0**(见顶部盘点):`postTriggerTokens` 单坐标 floor。
28
- - **🔵 by-design 接受(1/20)**:**P-10** — `InMemoryCheckpointStore.reap()` 过期不 unpin + 无 auto-reaper。代码现在把它**显式文档化为 v1 契约**(`checkpoint-store.ts:925-938` JSDoc council finding #2):durable session store 的 `pin`/`unpin` 本就是 no-op,唯一真 pin 的是单实例/测试用 `TtlSessionStore`;reaper-loop 归 deployment(service 的 TTL worker)所有,由它自己 track+unpin。即"原 finding 成立,但 v1 有意不在 core 加 auto-reaper"。design/80 §D-D 进一步把 gate.kind-aware reap + `terminalAt` backstop 契约写进了接口 doc(reaper 仍 service-owned)。
29
-
30
- ## 状态总览(原始 2026-06-15;状态列已更新到 2026-06-18,以上方修复进度为准)
31
- > ~~划掉~~ = 已修。`fixed` 列给 commit/版本来源。`tripwire ✅` = `test/known-issues-2026-06-15.test.ts` 已有 DESIRED(post-fix)断言、全绿。
32
- | # | 严重度 | 标题 | 文件 | 亲验 | 状态 | tripwire |
33
- |---|--------|------|------|------|------|----------|
34
- | ~~P-1~~ | 🔴 HIGH | ~~MCP 工具丢 `isError`→失败调用被当成功(断路器/onError 失效)~~ | `core/mcp.ts` | ✅ | **fixed** (SAFE 批) | ✅ |
35
- | ~~P-2~~ | 🔴 HIGH | ~~SSE `/task/stream` 断连不取消 eager run(烧到底+持有 env/MCP+无界缓冲)~~ | `server/http.ts:159-168` | ✅ | **fixed** (1.99.2) | — |
36
- | ~~P-3~~ | 🔴 HIGH | ~~`TiDbSessionRepo.delete()` 先删 entries 后删 session row→静默空历史(影响 service)~~ | `examples/adapters/tidb-adapter.ts` | ✅ | **fixed** (SAFE 批) | ✅ |
37
- | ~~P-20~~ | 🔴 HIGH | ~~`isPrivateHost` SSRF guard 被 IPv4-mapped/IPv6 字面量绕过(`[::ffff:169.254.169.254]`)~~ | `core/runner/image.ts` | ✅ | **fixed** (SAFE 批,net.isIP 重写) | ✅ |
38
- | ~~P-4~~ | 🟠 MED | ~~`read_file` 对 `\n` 结尾文件多算 1 行 + 假截断标志(误导 edit)~~ | `tools/fs/index.ts` | ✅ | **fixed** (SAFE 批) | ✅ |
39
- | ~~P-5~~ | 🟠 MED | ~~悬空符号链接:`env.readLink` 未实现时 sensitive-path guard 被绕过~~ | `tools/fs/safety.ts` | ✅ | **fixed** (SAFE 批,fail-closed) | ✅ |
40
- | ~~P-6~~ | 🟠 MED | ~~`web_fetch` SSRF:无 allowlist 零防护 + 无 IP/私网拦截 + 模型描述谎称"仅 allowlist"~~ | `tools/web.ts` | ✅ | **fixed** (SAFE 批,共用硬化 isPrivateHost) | ✅ |
41
- | ~~P-7~~ | 🟠 MED | ~~resume 烧掉 HITL checkpoint 后静默丢缺失工具,报 completed + 假"已执行"~~ | `core/runner/runtask.ts` | ✅ | **fixed** (1.99.2,先失败再 reopen) | — |
42
- | ~~P-8~~ | 🟠 MED | ~~`prepareTask` MCP materialize 后抛错泄漏 MCP 传输(stdio/HTTP)~~ | `core/runner/prepare-task.ts` ~1074 materialize → ~2587 return(中间 1135–1700 有真 throw-prone await)| ✅ | **fixed** (1.163.0, c8576a2) | ✅ |
43
- | ~~P-9~~ | 🟠 MED | ~~`PgCheckpointStore` 缺 `reopen()`→durable 部署上 env-restore 失败静默丢挂起工作~~ | `stores/pg.ts:390-406` | | **fixed** (SAFE 批,reopen CAS) | — |
44
- | ~~P-18~~ | 🟡 LOW | ~~`reservedFor()` 用 `api==="anthropic"` 但真值 `"anthropic-messages"`→design/40 警告失效~~ | `brain/request-params.ts` | | **fixed** (SAFE 批) | ✅ |
45
- | ~~P-19~~ | 🟡 LOW | ~~`formatZodValidationError` 对嵌套属性失败命名父参数 + 错类型 + 不产 path~~ | `core/tool-errors.ts` | | **fixed** (SAFE 批,递归 accessor) | ✅ |
46
- | P-10 | 🟡 LOW | `InMemoryCheckpointStore.reap()` 过期不 unpin + 无 auto-reaper→内存 store pin 泄漏 | `core/checkpoint-store.ts:925-938` | | **by-design 接受**(v1 契约:reaper 归 service,见上方修复进度) | — |
47
- | ~~P-11~~ | 🟡 LOW | ~~resume prepare 抛错泄漏原 suspend 的 session pin~~ | `core/runner/runtask.ts` | | **fixed** (1.99.2) | — |
48
- | ~~P-12~~ | 🟡 LOW | ~~teacher `abortFallback()` 泄漏未清/未 unref 的 10s 定时器~~ | `agents/teacher.ts` | | **fixed** (SAFE 批,cancel+unref) | ✅ |
49
- | ~~P-13~~ | 🟡 LOW | ~~§25.2 anti-thrash 地板坐标混用(usage锚 vs chars/4)→可压死任务内压缩~~ | `core/auto-compaction.ts` ~437 | | **fixed** (1.158.0,`postTriggerTokens` 单坐标 floor) | — |
50
- | ~~P-14~~ | 🟡 LOW | ~~`jsGrep` multiline 模式超 head_limit + `[capped at N]` 少报真实行数~~ | `tools/fs/search.ts` | ✅ | **fixed** (SAFE 批,逐行守) | ✅ |
51
- | ~~P-15~~ | 🟡 LOW | ~~`TaskStream.interrupt/destroy/steer` 在 `prepareTask` 永不 settle 时永久挂起~~ | `core/runner/runtask.ts` | | **fixed** (1.99.2,30s orTimeout) | — |
52
- | ~~P-16~~ | 🟡 LOW | ~~`RoleSpec.systemPrompt` 在显式设 `TaskSpec.model` 时被静默丢弃~~ | `core/roles.ts` | | **fixed** (SAFE 批,带 preset) | ✅ |
53
- | ~~P-17~~ | 🟡 LOW | ~~版本/CHANGELOG 漂移:`package.json` 无 CHANGELOG 条目(见 BUILD §5)~~ | `package.json` | ✅ | **fixed**(护栏断言已升级,1.104.0 满足) | ✅ |
54
-
55
- > tripwire ✅ = `test/known-issues-2026-06-15.test.ts` 有 DESIRED 断言(现 **47 个测试全绿**,从原 19 扩到 47:覆盖 P-1/3/4/5/6/12/14/16/17/18/19/20,均已翻成 post-fix 断言)。design/74-面的 P-2/7/11/15 在 1.99.2 修复时由 `test/remote-suspend-resume.test.ts` 等套件覆盖(不在本 tripwire 文件)。**P-8 fixed 1.163.0 带 tripwire 单测**(mock materialize 触发 egress throw → 断言 `mcp.dispose()` 恰调一次);P-13 fixed 1.158.0(`postTriggerTokens` 坐标重核,无独立 tripwire)。
56
-
57
- ## 修复优先级(给修复者)
58
- > 2026-06-29:**19/20 已修**(SAFE 批 + 1.99.2 design/74 批 + P-13 1.158.0 + P-8 1.163.0)、1/20 by-design 接受(P-10)。**冻结集全部收口**:
59
- 1. ~~**P-8**~~ **(✅ FIXED 1.163.0, c8576a2)**:hoist `mcp` 到 try 外 + catch 内 best-effort `mcp.dispose()`,复用 `runtask.ts` 已有的 `prepared.mcp.dispose()` 写法 + tripwire 单测(断言 dispose 恰调一次)。
60
- 2. ~~**P-13**~~ **(✅ FIXED 1.158.0)**:`postTriggerTokens` 单坐标 floor,消除虚高地板。
61
- 3. **bookkeeping(已闭)**:P-17 的护栏断言已升级为"每发版必须有 CHANGELOG 头",1.104.0 满足。
62
-
63
- ## 修 bug 的流程(自维护)
64
- 1. 改代码(runtask.ts/prepare-task.ts/checkpoint-store.ts 的 design/74 安全窗已关闭——design/74 + design/80 均已发版,可正常编辑;仍先 `git log` 确认无并发 agent 在改,见 HANDOFF)。
65
- 2. 把本表该行状态改 `fixed (<commit>)`。
66
- 3. 翻 `test/known-issues-2026-06-15.test.ts` 里该 bug 的断言:CURRENT(buggy)→ DESIRED(post-fix)(注释里已给好)。该测试从绿翻红再翻绿=确认修复生效。
67
- 4. `npm test` 全绿后,若是公开行为变化,更新 README/ARCHITECTURE。
68
-
69
- ---
70
- *活文档。最后核实 **2026-06-29**(`@sema-ai/core` clean 发版 1.166.0;本会话续发 1.164~1.166 无新增冻结集 bug;**冻结集全部收口**——P-8 fixed 1.163.0、P-13 fixed 1.158.0)。**如何重验某条是否仍在**:本文件的 tripwire 现已全部翻成 DESIRED(post-fix)断言——`npx vitest run test/known-issues-2026-06-15.test.ts` 全绿=对应 bug 已修(回归=该测试变红);**P-8 fixed 1.163.0**(`prepare-task.ts` mcp hoist 到 try 外 + catch 内 `mcp.dispose()`,tripwire 断言 dispose 恰调一次)、**P-13 fixed 1.158.0**(`auto-compaction.ts` `postTriggerTokens` 单坐标 floor)。证据测试码见 `audit-2026-06-15/PRODUCTION-ISSUES.md`。*
71
-
72
- ## 已知限制(design/120 P2,2026-07-03,by-design 记档非 bug)
73
-
74
- - **流内执行 × 进程崩溃窗**:`TaskSpec.streamingToolExecution: true` 时,工具副作用可先于 assistant message 持久化完成;该窗内 kill -9 → session 无该 call 任何痕迹(wake reconcile 结构性不可见,resume 后模型可能盲目重发)。默认 OFF 不受影响;merge-back 防线只覆盖进程存活的 stream-tear。对崩溃-恰好一次审计要求高的部署保持 OFF(TaskSpec docstring 同步声明)。
75
- - **stream throw 路径副作用零痕迹**:emit/hook throw 逃逸 streamAssistantResponse 时,try/finally settle 保证在飞工具完成且无 post-terminal 泄漏,但已完成结果无 final assistant 可挂 → 不落库(与 pre-P2 loop-failure 同型)。
76
-
77
- ## ~~brain 退化面待设计小批(2026-07-05 TB 尸检 T1-4/T1-5)~~(✅ 已收口 2026-07-12)
78
-
79
- - ~~**T1-4 MED**~~ **(✅ FIXED,分两批)**:①退化续跑 + 熔断已于 1.238.0 落地(`LoopRecoveryOptions.degenerateOutput`:brain 截流后 bounded "different approach" continue;连续退化熔断 `maxContinues` 可配、默认 2,超限退回经典 `output.degenerate` + `salvagedOutput` 终态;steer 优先/tool-call 双面门/turn_end 照发,codex 复审)。②brain 流层截断退化尾(2026-07-12 本批):`trimDegenerateTail`(`src/brain/repetition.ts`)在两 brain 的 finalize 把触发 cut 的 TEXT face 逐字重复尾截掉(保留一个 unit 实例、含窗外增长段与 cut 后缓冲的 partial unit),transcript 回放与 `salvagedOutput` 只带干净前缀;thinking/reasoning face 不截(anthropic 签名回放面,mutate 即失效)。默认 ON 无旗:检测器只对 exact 尾重复触发,截掉的都是被保留 unit 的逐字副本 → 零信息损失、不吞真错误(论证见 `trimDegenerateTail` JSDoc);合法重复代码由 2e1c161 豁免在上游根本不 cut。
80
- - ~~**T1-5 LOW**~~ **(✅ FIXED)**:显式 `usageMissing: true` 标记全链落地——brain finalize 无 provider usage 帧即打标(1.238.0 codex F3),`turn_end` 事件/turns 记账透传;2026-07-12 本批补齐 stream-engine 引擎级终态零壳(connect 失败/重试耗尽/abort,parser finalize 未跑的所有路径)同样打标,消费者全路径可区分「真 0」与「事实缺失」。
81
-
82
- ## design/134 stoppedBy 归因盲区(2026-07-07 记档,LOW → **FIXED 2026-07-12**)
83
-
84
- - ~~**legacy env-direct TaskStop 路**:旧 toolkit 的 TaskStop 直接 `env.killBackground`,未经过 registry 的 `markStopSource` → 同 env 的 registry handle 由 watcher/poll 兜底归因为 `"system"` 而非 `"parent"`。~~ **已修**:`makeKillShellTool` 结构上拿不到 toolkit 注入的 registry(createHandsToolkit 三元式=有 registry 走 `createTaskStopTool`,该 band 只在无 registry 分支挂载),故不迁 `registry.stopTask`(会引入 owner 门/文案变化),改为 kill 前补挂标注面:新增 `TaskRegistry.markStopSourceByShellId(shellId, source, env?)`(legacy shellId→task id 解析,复用 `markStopSource` 的 running-only+first-marker-wins 门,env 身份参与匹配),工具默认标注进程级 `defaultTaskRegistry`(Runner 同 env 行所在)。watcher 归因 `"system"`→`"parent"`,kill 路与模型面文案不变。测试=`test/stop-attribution.test.ts` S11(反事实核过:去掉标注即回 `"system"`)。
85
-
86
- ## Edit-as-create 非原子创建(2026-07-07 1.253 双轨终审记档,LOW → **FIXED 2026-07-12**)
87
-
88
- - ~~**`src/tools/fs/index.ts` Edit 的 create 路径**(old_string="" 且目标不存在 → Write 语义):存在 exists-check 与 writeFile 之间的 TOCTOU 窗——并发写者在窗内创建同名文件会被本次 create 静默覆盖。~~ **已修**:env seam 增 **optional** `FileSystem.writeFileExclusive?(path, content, signal?)`(POSIX `O_EXCL`/Node `wx` 同型;`FileErrorCode` 增 `"already_exists"`;JSDoc 钉死降级契约=无原子后端的 env **必须留 undefined** 不得 exists+write 仿真)。`NodeExecutionEnv` 实现(`wx` flag,EEXIST→`already_exists`);`StubExecutionEnv` 同 `not_supported` 面;remote seam 不实现(降级语义归接口 JSDoc)。Edit create 路径:seam 存在→独占创建,输掉竞态→诚实错误「file already exists (created concurrently since the existence check)」;seam 不存在→保留旧 exists+writeFile 仿真(第三方 env 风险接受,窗口语义与修前一致)。Write 工具覆盖语义不动。测试=`test/hands-fs.test.ts`「Edit-as-create atomicity」四腿(反事实核过:退回 writeFile 即静默覆盖)。
89
-
90
- ## memory-engine 无 guard add 的 MOVE 声明矛盾(2026-07-12 三轮复查记档,LOW → **FIXED 2026-07-12/13**)
91
-
92
- - ~~**`applyPatches` 无 guard 的 add 对既有 id 用异 slug/异 scope 重添**:实现会铸同 id 第二个投影文件,与 `types.ts` JSDoc「re-add into another scope = the MOVE」声明矛盾。~~ **已裁定+已修**:Pg/TiDB twin 侦察坐实两实现从来都是前置检查 REJECT(reason=`cross-scope add refused`)——契约 JSDoc 的 MOVE 声明才是错的。三端对齐:①File 跨 scope 无 guard add 改 REJECT(reason 逐字对齐 Pg);②`types.ts` 契约声明改「add 永不搬迁,MOVE 唯一拼法=update」;③共享契约套件补 cross-scope 拒绝 case(锁三端)。fable 独立轨复审追加两修:同批 `delete(X@s1)+add(X@s2)` 合法搬迁批不受新检查误伤(批内 plannedDeletes 顺序语义,对齐 twin 逐条执行);同 scope 换 slug 的无 guard re-add 从「铸第二投影」改为单行改名(Pg `ON CONFLICT (id) DO UPDATE SET slug` 同型,旧投影文件删除)。测试=`test/memory-backend-contract.test.ts` cross-scope describe 5 腿+共享套件新 case。
93
-
94
- ## memory-engine applyPatches 不校验 id 形状(2026-07-12 三轮复查记档,LOW → **FIXED 2026-07-12**)
95
-
96
- - ~~不满足 `ID_RE` 的 id(如 <8 字符)能 applied + 入 ledger,但 `readScope` 解析时丢弃该 id → 条目落盘却永久不可见(幽灵行)。~~ **已修**:`frontmatter.ts` 导出 `isValidEntryId()`(读闸/写闸单谓词单源);`planOne` 头部形状闸,不合规 id → `invalid_id_shape` REPORTED conflict(op 原样、绝不 throw、批内其余照常),三 op 共路全覆盖;顺带关闭 shadow 文件名路径形洞(`/`/`..` 形 id 不再触盘)。存量幽灵残留(修复前已落盘的)对一切 patch op 不可达,无独立清理路径(接受:读侧本就永不可见)。测试=`test/memory-backend-contract.test.ts` invalid-id describe 3 腿。