@sema-agent/client-core 0.93.1 → 0.95.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 (321) hide show
  1. package/CHANGELOG.md +554 -0
  2. package/README.md +89 -55
  3. package/dist/adapt/arms.js +13 -11
  4. package/dist/adapt/panelTasks.js +4 -10
  5. package/dist/adapt/toolCards.js +2 -2
  6. package/dist/adapt/wireShapes.js +3 -8
  7. package/dist/adapter/activeRunSelfHeal.d.ts +8 -3
  8. package/dist/adapter/activeRunSelfHeal.js +20 -12
  9. package/dist/adapter/downstream/eventToSdkMessage.js +24 -17
  10. package/dist/adapter/downstream/terminalToSdkResult.js +13 -6
  11. package/dist/adapter/runStream.js +2 -1
  12. package/dist/adapter/types.d.ts +7 -0
  13. package/dist/adapter/types.js +15 -0
  14. package/dist/agentSession/backgroundView.js +5 -1
  15. package/dist/agentSession/engineAgentRegistryRead.js +2 -1
  16. package/dist/agentSession/engineSessionBackgroundStop.js +5 -3
  17. package/dist/agentsWireCaps.d.ts +17 -0
  18. package/dist/agentsWireCaps.js +111 -1
  19. package/dist/approvalDecidedByCapability.d.ts +0 -1
  20. package/dist/approvalDecidedByCapability.js +2 -7
  21. package/dist/approvalReachWire.d.ts +18 -0
  22. package/dist/approvalReachWire.js +58 -0
  23. package/dist/approvalsStreamLiveCapability.d.ts +0 -1
  24. package/dist/approvalsStreamLiveCapability.js +15 -14
  25. package/dist/atMostOnce.d.ts +8 -0
  26. package/dist/atMostOnce.js +36 -0
  27. package/dist/attachmentSeatCapability.d.ts +0 -1
  28. package/dist/attachmentSeatCapability.js +0 -3
  29. package/dist/attachmentsWireCaps.js +11 -6
  30. package/dist/bashExitReading.d.ts +10 -0
  31. package/dist/bashExitReading.js +12 -0
  32. package/dist/callerCwdCapability.d.ts +15 -0
  33. package/dist/callerCwdCapability.js +42 -0
  34. package/dist/centerWiringCapability.d.ts +1 -3
  35. package/dist/centerWiringCapability.js +18 -21
  36. package/dist/classifierStatus.js +4 -4
  37. package/dist/cloudConfigWireCaps.js +43 -21
  38. package/dist/compensations.js +1 -1
  39. package/dist/controlRouter.js +3 -10
  40. package/dist/coreValuePorts.d.ts +64 -1
  41. package/dist/coreValuePorts.js +30 -0
  42. package/dist/cycleOrder.d.ts +15 -0
  43. package/dist/cycleOrder.js +45 -0
  44. package/dist/decideFailureNote.js +4 -1
  45. package/dist/decideReceipt.d.ts +2 -1
  46. package/dist/decideReceipt.js +41 -13
  47. package/dist/declared/supportFloorDeclared.d.ts +1 -0
  48. package/dist/declared/supportFloorDeclared.js +5 -0
  49. package/dist/detachWire.d.ts +1 -4
  50. package/dist/detachWire.js +1 -1
  51. package/dist/deviceExecutorManagementCapability.d.ts +0 -1
  52. package/dist/deviceExecutorManagementCapability.js +36 -40
  53. package/dist/deviceFlowPolling.d.ts +5 -0
  54. package/dist/deviceFlowPolling.js +28 -0
  55. package/dist/deviceRebind.d.ts +88 -0
  56. package/dist/deviceRebind.js +242 -0
  57. package/dist/displayUntrusted.d.ts +1 -0
  58. package/dist/displayUntrusted.js +963 -30
  59. package/dist/engineAgentAbsence.d.ts +2 -2
  60. package/dist/engineAgentPanelStore.d.ts +8 -18
  61. package/dist/engineAgentPanelStore.js +19 -537
  62. package/dist/engineCapReader.d.ts +6 -6
  63. package/dist/engineCapReader.js +30 -43
  64. package/dist/engineCapsCache.d.ts +7 -2
  65. package/dist/engineCapsCache.js +64 -26
  66. package/dist/engineCredentialRequirement.d.ts +9 -0
  67. package/dist/engineCredentialRequirement.js +23 -0
  68. package/dist/engineEnvSourcing.d.ts +53 -0
  69. package/dist/engineEnvSourcing.js +81 -0
  70. package/dist/engineErrorCodes.d.ts +19 -4
  71. package/dist/engineErrorCodes.js +39 -21
  72. package/dist/engineIdentity.js +2 -0
  73. package/dist/engineNoticeCodes.d.ts +22 -2
  74. package/dist/engineNoticeCodes.js +73 -6
  75. package/dist/engineRefusedToolName.d.ts +1 -0
  76. package/dist/engineRefusedToolName.js +8 -0
  77. package/dist/engineWireSdk.js +2 -2
  78. package/dist/executionLaneCapability.d.ts +2 -3
  79. package/dist/executionLaneCapability.js +28 -28
  80. package/dist/fileHistoryCaptureCapability.d.ts +0 -1
  81. package/dist/fileHistoryCaptureCapability.js +13 -12
  82. package/dist/fileHistoryLegNotice.d.ts +14 -2
  83. package/dist/fileHistoryLegNotice.js +101 -15
  84. package/dist/fleet/fleetLedger.d.ts +2 -0
  85. package/dist/fleet/fleetLedger.js +74 -52
  86. package/dist/fleet/fleetProjection.d.ts +0 -3
  87. package/dist/fleet/fleetProjection.js +9 -16
  88. package/dist/fleetAgentPanelProjection.d.ts +4 -17
  89. package/dist/fleetAgentPanelProjection.js +7 -197
  90. package/dist/fleetAgentRowLike.d.ts +16 -0
  91. package/dist/fleetAgentRowLike.js +1 -0
  92. package/dist/gateOutcome.d.ts +2 -1
  93. package/dist/gateOutcome.js +33 -18
  94. package/dist/gateVocabulary.js +1 -1
  95. package/dist/generated/engineAskFaceTables.d.ts +3 -0
  96. package/dist/generated/engineAskFaceTables.js +12 -0
  97. package/dist/generated/engineFactTables.d.ts +4 -2
  98. package/dist/generated/engineFactTables.js +13 -0
  99. package/dist/generated/engineNoticeTables.d.ts +5 -0
  100. package/dist/generated/engineNoticeTables.js +7 -0
  101. package/dist/generated/sdkFactTables.d.ts +5 -0
  102. package/dist/generated/sdkFactTables.js +34 -0
  103. package/dist/generated/settingsSchemaFns.d.ts +10 -0
  104. package/dist/generated/settingsSchemaFns.js +22 -0
  105. package/dist/generated/settingsSchemaTables.d.ts +3 -0
  106. package/dist/generated/settingsSchemaTables.js +3 -0
  107. package/dist/headlessPermissionModeWire.d.ts +2 -2
  108. package/dist/headlessPermissionModeWire.js +11 -21
  109. package/dist/headlessReconnectWire.js +49 -20
  110. package/dist/hitl/allowRuleShadow.d.ts +1 -1
  111. package/dist/hitl/allowRuleShadow.js +49 -8
  112. package/dist/hitl/approvalCompleteParked.d.ts +1 -0
  113. package/dist/hitl/approvalCompleteParked.js +14 -0
  114. package/dist/hitl/approvalEndingCause.d.ts +5 -0
  115. package/dist/hitl/approvalEndingCause.js +61 -0
  116. package/dist/hitl/approvalHolds.d.ts +46 -0
  117. package/dist/hitl/approvalHolds.js +140 -0
  118. package/dist/hitl/approvalOutcomeNote.js +2 -1
  119. package/dist/hitl/approvalResolution.js +9 -1
  120. package/dist/hitl/approvalsFeed.js +23 -6
  121. package/dist/hitl/askGateWire.d.ts +2 -1
  122. package/dist/hitl/askGateWire.js +29 -1
  123. package/dist/hitl/automaticAnswerVerdict.d.ts +8 -2
  124. package/dist/hitl/automaticAnswerVerdict.js +71 -23
  125. package/dist/hitl/crashConverged.js +2 -0
  126. package/dist/hitl/decisionConflict.d.ts +3 -0
  127. package/dist/hitl/decisionConflict.js +43 -0
  128. package/dist/hitl/decisionRefusal.d.ts +23 -0
  129. package/dist/hitl/decisionRefusal.js +88 -0
  130. package/dist/hitl/frameRouter.d.ts +10 -0
  131. package/dist/hitl/frameRouter.js +71 -32
  132. package/dist/hitl/gateLedger.d.ts +8 -0
  133. package/dist/hitl/gateLedger.js +38 -0
  134. package/dist/hitl/hitlBridge.d.ts +14 -3
  135. package/dist/hitl/hitlBridge.js +75 -62
  136. package/dist/hitl/hitlHostSurface.d.ts +3 -0
  137. package/dist/hitl/hitlHostSurface.js +17 -15
  138. package/dist/hitl/livePendingAsk.d.ts +16 -6
  139. package/dist/hitl/livePendingAsk.js +36 -4
  140. package/dist/hitl/localAllowRule.js +2 -1
  141. package/dist/hitl/noAllowCause.d.ts +9 -0
  142. package/dist/hitl/noAllowCause.js +26 -0
  143. package/dist/hitl/parkExpiryJudgements.d.ts +19 -0
  144. package/dist/hitl/parkExpiryJudgements.js +46 -0
  145. package/dist/hitl/parkResolver.d.ts +3 -7
  146. package/dist/hitl/parkResolver.js +55 -28
  147. package/dist/hitl/parkRowBirthWait.js +2 -1
  148. package/dist/hitl/persistedRulesWire.d.ts +6 -1
  149. package/dist/hitl/persistedRulesWire.js +16 -4
  150. package/dist/hitl/planReviewWire.d.ts +2 -3
  151. package/dist/hitl/planReviewWire.js +86 -39
  152. package/dist/hitl/replayedApproval.d.ts +8 -0
  153. package/dist/hitl/replayedApproval.js +125 -10
  154. package/dist/hitl/resumeRunningCard.d.ts +2 -0
  155. package/dist/hitl/resumeRunningCard.js +15 -4
  156. package/dist/hitl/sessionPolicyDeliverable.d.ts +1 -1
  157. package/dist/hitl/sessionPolicyDeliverable.js +3 -8
  158. package/dist/hitl/sessionPolicyWire.js +1 -1
  159. package/dist/hitl/toolApprovalWire.d.ts +50 -5
  160. package/dist/hitl/toolApprovalWire.js +368 -56
  161. package/dist/hooksWireCaps.js +38 -6
  162. package/dist/host.d.ts +5 -0
  163. package/dist/host.js +3 -1
  164. package/dist/hostCallbackGuard.d.ts +1 -0
  165. package/dist/hostCallbackGuard.js +25 -0
  166. package/dist/humanTurnRead.d.ts +15 -1
  167. package/dist/humanTurnRead.js +28 -2
  168. package/dist/index.d.ts +45 -14
  169. package/dist/index.js +33 -12
  170. package/dist/interactiveInterrupt.d.ts +8 -0
  171. package/dist/interactiveInterrupt.js +54 -0
  172. package/dist/limitsWire.d.ts +5 -1
  173. package/dist/limitsWire.js +51 -13
  174. package/dist/liveModelCatalog.d.ts +109 -0
  175. package/dist/liveModelCatalog.js +344 -18
  176. package/dist/mcpEngineLeg.d.ts +25 -0
  177. package/dist/mcpEngineLeg.js +71 -15
  178. package/dist/mcpPanel.js +2 -1
  179. package/dist/mcpProbeCapability.d.ts +0 -1
  180. package/dist/mcpProbeCapability.js +13 -12
  181. package/dist/mcpReconnect.d.ts +1 -3
  182. package/dist/mcpReconnect.js +20 -10
  183. package/dist/memoryComplianceCapability.d.ts +0 -1
  184. package/dist/memoryComplianceCapability.js +14 -13
  185. package/dist/memoryOriginCapability.d.ts +0 -1
  186. package/dist/memoryOriginCapability.js +14 -13
  187. package/dist/memoryVerbsWire.d.ts +1 -1
  188. package/dist/memoryVerbsWire.js +4 -0
  189. package/dist/model/liveCatalogShape.d.ts +14 -0
  190. package/dist/model/liveCatalogShape.js +71 -0
  191. package/dist/model/modelSupplyRules.d.ts +1 -0
  192. package/dist/model/modelSupplyRules.js +30 -9
  193. package/dist/model/modelsPolicy.d.ts +21 -0
  194. package/dist/model/modelsPolicy.js +90 -0
  195. package/dist/modelIdentityResolvability.d.ts +4 -2
  196. package/dist/modelIdentityResolvability.js +25 -5
  197. package/dist/modelSwitchFallback.d.ts +69 -0
  198. package/dist/modelSwitchFallback.js +206 -0
  199. package/dist/notifications.js +12 -11
  200. package/dist/outputStyleSeatCapability.d.ts +15 -0
  201. package/dist/outputStyleSeatCapability.js +42 -0
  202. package/dist/ownKey.d.ts +7 -0
  203. package/dist/ownKey.js +58 -0
  204. package/dist/panelReduce.d.ts +114 -0
  205. package/dist/panelReduce.js +1135 -0
  206. package/dist/panelStateHolder.d.ts +17 -0
  207. package/dist/panelStateHolder.js +201 -0
  208. package/dist/peerLaneCapability.d.ts +0 -1
  209. package/dist/peerLaneCapability.js +15 -14
  210. package/dist/permissionModesCapability.d.ts +0 -1
  211. package/dist/permissionModesCapability.js +5 -10
  212. package/dist/permissionRuleIssue.js +1 -1
  213. package/dist/permissionRulesWriteCapability.d.ts +0 -1
  214. package/dist/permissionRulesWriteCapability.js +15 -14
  215. package/dist/permissionsAllowGrantCapability.d.ts +2 -1
  216. package/dist/permissionsAllowGrantCapability.js +35 -19
  217. package/dist/permissionsDeclaration.d.ts +16 -1
  218. package/dist/permissionsDeclaration.js +142 -15
  219. package/dist/printToolResultFrame.js +2 -10
  220. package/dist/promptDelivery.js +0 -8
  221. package/dist/protocolSegment.d.ts +1 -0
  222. package/dist/protocolSegment.js +13 -1
  223. package/dist/request/taskRequest.d.ts +11 -3
  224. package/dist/request/taskRequest.js +13 -1
  225. package/dist/resultFrameKeys.d.ts +4 -0
  226. package/dist/resultFrameKeys.js +13 -0
  227. package/dist/resumeRefusalCopy.d.ts +18 -1
  228. package/dist/resumeRefusalCopy.js +132 -31
  229. package/dist/retryStatus.js +6 -4
  230. package/dist/rewindArchiveCapability.d.ts +2 -1
  231. package/dist/rewindArchiveCapability.js +28 -15
  232. package/dist/rewindEngineAction.d.ts +21 -0
  233. package/dist/rewindEngineAction.js +36 -0
  234. package/dist/rewindWireCaps.d.ts +2 -1
  235. package/dist/rewindWireCaps.js +1 -0
  236. package/dist/{hitl/rosterMountedNames.d.ts → rosterMountedNames.d.ts} +1 -1
  237. package/dist/runCancelContext.js +2 -1
  238. package/dist/runTerminal.d.ts +0 -11
  239. package/dist/runTerminal.js +4 -27
  240. package/dist/sdkRegistryTransit.d.ts +2 -1
  241. package/dist/sdkRegistryTransit.js +1 -0
  242. package/dist/sealedKeyCapability.d.ts +0 -1
  243. package/dist/sealedKeyCapability.js +19 -20
  244. package/dist/seatContract.d.ts +85 -28
  245. package/dist/seatContract.js +512 -148
  246. package/dist/sessionIdSegment.d.ts +1 -0
  247. package/dist/sessionIdSegment.js +11 -0
  248. package/dist/sessionMemoryErase.d.ts +1 -1
  249. package/dist/sessionMemoryErase.js +6 -1
  250. package/dist/sessionMemoryStatus.js +3 -2
  251. package/dist/sessionPolicyCapability.d.ts +0 -1
  252. package/dist/sessionPolicyCapability.js +14 -13
  253. package/dist/sessionReadRedactionCapability.d.ts +15 -0
  254. package/dist/sessionReadRedactionCapability.js +42 -0
  255. package/dist/sessionSyncFileHistoryCapability.d.ts +0 -1
  256. package/dist/sessionSyncFileHistoryCapability.js +13 -12
  257. package/dist/skillToolListsCapability.d.ts +0 -1
  258. package/dist/skillToolListsCapability.js +13 -12
  259. package/dist/skillsWireCaps.d.ts +4 -0
  260. package/dist/skillsWireCaps.js +66 -1
  261. package/dist/sqlEngineCapability.d.ts +0 -1
  262. package/dist/sqlEngineCapability.js +21 -21
  263. package/dist/steerPriorityCapability.d.ts +0 -1
  264. package/dist/steerPriorityCapability.js +18 -19
  265. package/dist/storePostureCapability.d.ts +1 -1
  266. package/dist/storePostureCapability.js +16 -16
  267. package/dist/streamDrainingLegs.d.ts +6 -0
  268. package/dist/streamDrainingLegs.js +23 -0
  269. package/dist/subagent/agentStateDetail.d.ts +1 -0
  270. package/dist/subagent/agentStateDetail.js +41 -0
  271. package/dist/subagent/engineCompactWire.d.ts +15 -0
  272. package/dist/subagent/engineCompactWire.js +82 -45
  273. package/dist/subagent/engineDelegatedPrompt.js +10 -6
  274. package/dist/subagent/engineSubagentOutput.d.ts +0 -1
  275. package/dist/subagent/engineSubagentOutput.js +5 -20
  276. package/dist/subagent/engineSubagentTail.d.ts +0 -1
  277. package/dist/subagent/engineSubagentTail.js +7 -32
  278. package/dist/subagentContentStore.js +3 -3
  279. package/dist/supportFloor.js +2 -5
  280. package/dist/taskRequestWords.d.ts +2 -4
  281. package/dist/taskRequestWords.js +3 -2
  282. package/dist/terminalStatuses.d.ts +30 -0
  283. package/dist/terminalStatuses.js +67 -0
  284. package/dist/toolResult.d.ts +5 -0
  285. package/dist/toolResult.js +88 -36
  286. package/dist/types/engineState.d.ts +2 -1
  287. package/dist/usageAnalytics.d.ts +146 -0
  288. package/dist/usageAnalytics.js +311 -0
  289. package/dist/userAttachmentEnvelope.d.ts +22 -1
  290. package/dist/userAttachmentEnvelope.js +90 -2
  291. package/dist/userInvokedSkillsCapability.d.ts +0 -1
  292. package/dist/userInvokedSkillsCapability.js +13 -12
  293. package/dist/webSearchBackendCapability.d.ts +0 -1
  294. package/dist/webSearchBackendCapability.js +20 -19
  295. package/dist/webSearchWireCaps.js +3 -11
  296. package/dist/wireErrorTriage.d.ts +11 -0
  297. package/dist/wireErrorTriage.js +35 -0
  298. package/dist/wireFailureShape.d.ts +10 -0
  299. package/dist/wireFailureShape.js +72 -5
  300. package/dist/wireRefusalCopy.d.ts +6 -1
  301. package/dist/wireRefusalCopy.js +23 -25
  302. package/dist/wiringInstructionsAttribution.d.ts +10 -0
  303. package/dist/wiringInstructionsAttribution.js +67 -0
  304. package/dist/workflowClient.js +19 -2
  305. package/dist/workflowsJournalCapability.d.ts +0 -1
  306. package/dist/workflowsJournalCapability.js +13 -12
  307. package/dist/writeProtectionCapability.d.ts +0 -1
  308. package/dist/writeProtectionCapability.js +26 -26
  309. package/docs/INTEGRATION-CLIENTS.md +1733 -52
  310. package/package.json +5 -5
  311. package/dist/askSurvivesStandingAnswer.d.ts +0 -13
  312. package/dist/askSurvivesStandingAnswer.js +0 -53
  313. package/dist/engineCapsGenerationGuard.d.ts +0 -4
  314. package/dist/engineCapsGenerationGuard.js +0 -19
  315. package/dist/hitl/askSurvivesPosture.d.ts +0 -20
  316. package/dist/hitl/askSurvivesPosture.js +0 -48
  317. package/dist/panelRunningHistory.d.ts +0 -22
  318. package/dist/panelRunningHistory.js +0 -82
  319. package/dist/registryConflict.d.ts +0 -3
  320. package/dist/registryConflict.js +0 -44
  321. /package/dist/{hitl/rosterMountedNames.js → rosterMountedNames.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -49,6 +49,560 @@
49
49
  > 挡住 ⇒ 本批把它机械化——④a0 对 `pending` 行**要求段头已是日期形**(`(未发布)` 直接红),阶段一
50
50
  > commit 漏转在发布前就红,不再靠人记。
51
51
 
52
+ ## 0.95.0(2026-10-12)
53
+
54
+ > 主题:终端 1.0.147 对接版 —— 引擎 7.48 / 服务端 7.124 / 设置契约 11 / sdk 19 提货(型面 BREAKING:终态词表 / 谓词改名带属主、`absent` 退词、七条过渡臂退役);面板行归约口;能力位读器族与终态词表收口;审批成因闭集与排空期重开;审批卡跨腿持有(同一张卡只在一条腿上出);技能工具表随能力位上 wire;0.95.0 窗内欠账按票收口(各条见 Fixed / Changed)。
55
+
56
+ > 净值(相对 0.94.0):根公面运行期导出 1547 → 1587;测试钩 74 → 73;门清单 209 → 232;退役登记在册 26 → 37 行(本版退 9 = RL-97 / RL-82 / RL-91 / RL-22 / RL-58 / RL-54 / RL-16 / RL-46 / RL-115;RL-37 重分类为常驻移出在册)、已退役 38 → 47 行;棘轮:`unknownExport` 525 → 574、`bareUnknownReturn` 0 → 3、B4 20 → 21、可移植性 kernel 26 → 28 / adapt 41 → 46 / index 277 → 298、单例高风险上限 145 → 131、带理由的吞 46 → 47;在册局限段 71 条(新增为主,含射程扩与删);peer sdk 地板 `>=18.1.0` → `>=19.0.0`;开发依赖引擎 `~7.47.0` → `~7.48.0`、sdk `^18.1.0` → `^19.0.0`、设置契约 `^10.0.0` → `^11.2.0`。
57
+
58
+ ### Removed
59
+
60
+ - 无根入口删除名。包内件 `panelRunningHistory`(running 历史 / ended 账 / 缓着的首见终态行三张模块级表)整文件删除,三本账成为面板记录的字段(CC-76;不在公面)。
61
+ - `displayUntrusted` 里一枚读数恒假的只含反引号的正则(`isQuoteChar` 末尾那一枚;运行期零读者,此前以死字面量随包出)删除;`isQuoteChar` 逐值不变,展示出口输出逐字节不变(CC-552;**§122 GT-3**)。
62
+ - **`HealthResponse` 不再带扁平 `restart` 位**(CC-521 ⑹ / CC-540 F;接入文档 **§122 UP-6**):`/health` 上与 `engineSignal.restart` 同一次读数的扁平键是契约包标了弃用的方言位,本包对它零读点(漂移判决只读 `restartRequired`)。要读引擎态的宿主读 sdk `EngineHealth.engineSignal`(服务端 ≥ 7.123.0;更老的服务端体里没有信号)。型面 BREAKING:读 `HealthResponse['restart']` 的写法编译红一次。
63
+ - 云配置告警措辞删两臂 `hosts-grandfathered` / `legacy-governance-lifted`(CC-521 ⑴;**§122 UP-3**):settings-schema 11.0.0 删了这两只告警种类;仍发它们的老控制面 ⇒ 落「本端认不出的告警」那一句(warn)。
64
+ - **座位旧目录形 `SeatModelCatalog` / `SeatModelInfo` / `isSeatModelCatalog` 删除**(CC-465;接入文档 **§122 WB-4**;🔴 型面 BREAKING):座位 `listModels()` 改交在线目录 `LiveModelCatalog`(回体读口 `readLiveModelCatalog` 的产物),出站门与回体读口同一只行判据。旧形按 `id` 键行、拒没有 `id` 的行,而服务端的提交值是行的 `name`(`id` 可缺、可在两行上相同)。宿主把回体过读口、交 `reading.catalog`;渲染端读 `liveModelRowsOf` / `liveDefaultModelOf`。
65
+ - **会话内 MCP 重拨注入面的 `{ server }` 适配形退役**(CC-432;接入文档 **§122 RD-4**;🔴 型面 BREAKING):`McpReconnectClientLike.sessions.mcpReconnect` 的第二参由 `{ server }` 对象改为裸串 `server` —— 即 sdk `SessionsResource.mcpReconnect(sessionId, server, opts?)` 的签名;旧适配形不留双读。终端 / 桌面端零处调用 `reconnectMcpServer`;**网页端有一处活的适配器**(`ui/lib/engine/engine-observability-wire.ts:660-682` 的 `toMcpReconnectClientLike`)必改:删适配器、把 `createEngineClient()` 的实例直接传给 `reconnectMcpServer`。硬破坏三句:判决函数的注入面第二参类型由 `{ server: string }` 变为 `string`;把 `(sessionId, { server }, opts)` 形的适配器赋给注入面的写法编译红一次,删掉适配器、直接传 sdk 客户端即可;JS 宿主不改不会抛 —— 适配器收到的是裸串,读出的 `server` 是 undefined,请求被服务端按体形拒绝,判决落 `failed`(破坏性的「先关后拨」不会发生)。
66
+ - **`providerRejectionResend` 退出根入口**(CC-309;退役登记 RL-22;接入文档 **§122 RX-1**;🔴 型面 BREAKING,运行期导出 −1):0.93.0 起弃用、预告 0.94.0 删、改窗 0.95.0。合成终局行上的 `_sema_provider_rejection_resend`(`{ resend, text }`)与同一行行尾那一句不变 —— 包内铸点照用同一只函数;端读行上的键(`-p` 车道读结果帧 `errors[0]`)。具名型 `ProviderRejectionResend` 留在根入口。硬破坏三句:删了就是删了、不留别名、`import { providerRejectionResend }` 编译红。
67
+ - **二十九只逐只失效口 `forget*Reading` 与读器工厂的 `forget` 口删除**(CC-377;退役登记 RL-54;**§122 RX-2**;🔴 型面 BREAKING,运行期导出 −29;逐名见接入文档 §2z):0.92.0 起读器的格随能力缓存代际自动失效,失效口降为可选;三版预告之后删除。宿主在引擎温切处只调 `invalidateEngineCaps(baseUrl)`,各读器的 `observed*` 随即答 `unobserved`;单只清格用各读器的测试钩 `__reset*ReadingsForTests`。终端 `sema/*Capability.ts` 里十一行 `forgetXxxReading,` 死再导出换钉时编译红(删行)。
68
+ - **`ApprovalCardRequest.persistedRuleShadowed` 删除**(CC-401;退役登记 RL-58;**§122 RX-3**;🔴 型面 BREAKING,`ApprovalCardRequest` 删一成员):0.92.0 起它是结构化披露 `allowRuleShadow` 同一读数的派生位、保留一版。被越级的规则文本读 `allowRuleShadow` 的 `persisted` 成员条目,让位判定读 `approvalAllowRuleShadowed`(读法不变);活卡帧腿与耐久行腿两处派生写法一并删。`ToolApprovalFrame.persistedRuleShadowed`(wire 入参键,老一代服务端仍发)与读口对老两键的读法不动。已知限制 KL-558(旧卡字段只从 `persisted` 成员派生)随字段删除而过时,从已知限制档删行。
69
+ - **`normalizeShellPermissionModeForWire` 的第二参删除**(CC-426;退役登记 RL-82;**§122 RX-4**;🔴 型面 BREAKING):签名收成 `(mode)`,读数与行为一个字节不变(0.94.0 起第二参就不读)。TS 里两实参调用编译红(删第二实参);纯 JS 宿主多带的实参被忽略。
70
+ - **`modelSetupDecision` 的三态入参臂删除**(CC-322 ③;退役登记 RL-91;**§122 RX-5**;🔴 型面 BREAKING):第一参只收 `ModelIdentityReading`。TS 里交三态串编译红(改交读数);🔴 行为面(纯 JS 宿主):交三态串读成不成形的读数 ⇒ `proceed`(不弹、不抛;此前 `'not_resolvable'` 串按 0.93.x 读成 `offer_setup` / `explain_unconfigured`)。读数入参的答案一字不变。
71
+ - **「只续已有会话」被拒读口的粗码兜底删除**(CC-281;退役登记 RL-16;**§122 RX-6**):`requireExistingSessionRefusalFromError` 只认带码形(404 `resume.session_not_found`、422 `request.field_conflict`);服务端 ≤7.114.x 的状态粗码形(404 `not_found.resource` / 422 `request.unprocessable` + message 尾括注)读成 `null`。随支持底线抬升同批执行(见 Changed)。
72
+ - **`ReopenPlanReviewOpts.decisionHandedOver` 删除**(CC-346;**§122 SC-4**):计划审阅重开选项上的宿主交出窗谓词(0.83.4 起)与 `notePlanReviewDecisionHandedOver` 决断台账(0.85.0 起)答的是同一件事「这条任务的决断已交出」;读后复核此前在台账没说话时再问谓词。三端零调用方;交出只经台账登记一条读法。型面 BREAKING:对象字面量里传这一位编译红;JS 宿主传了不抛、不再有任何效果(登记交出改调 `notePlanReviewDecisionHandedOver`)。
73
+ - 包内件:面板行台账里一只只写不读的集合(只服务已退役的委派卡先到先绑回落臂)删除(CC-347;不在公面)。
74
+ - **能力位读数型去掉两代读法那一档**(CC-344;接入文档 **§122 SB-5 / SB-6**;🔴 型面 BREAKING):`CenterWiringReading` 去 `{ kind: 'not_reported' }` 一臂(`centerWiring` 键缺席 = 没接中心 ⇒ `none`)、`ExecutionLaneIsolatedAbsence` 去 `'not_reported'` 一词(`isolated` 缺席按手分);`toolsRunHereFromExecutionLane` 去第二参 `legacyInference`(调用方旁证;判官只剩能力位,没报 / 未观测 ⇒ `false`)。两只读数型三端零读点;**终端必改**:`sema/skillsWire.ts:167` 的两参调用改一参,并在读能力位前先 `await engineCapsSettled(baseUrl, { withinMs })` —— 🔴 行为差:读数 `unobserved` 且旁证为真时,0.94.0 答真、0.95.0 答假,能力位落地之前提交的那一拍技能规格不再带 `baseDir`。硬破坏三句:两只读数型各少一员、判据口少一参;对那一臂 / 那一词穷举分支、或传两参的写法编译红一次,删掉即可;JS 宿主不改不会抛 —— 那两档永不再出现,多传的实参被忽略。
75
+ - 测试钩 `__resetSubagentStreamCapCacheForTests` / `__resetSubagentOutputCapCacheForTests`(0.95.0 退出公面;CC-344;**§122 SB-1**):子代尾随 / 终报的私有能力表删了,无表可清;清能力读数用 `__resetEngineCapsCacheForTests`。**终端必改**:`sema/engineSubagentOutput.ts:16` 与 `sema/engineSubagentTail.ts:35` 两处非测试文件再导出这两个名,换钉即编译红,删掉再导出名即可。
76
+ - **终态词表与谓词改名带属主,旧名不留别名**(CC-78;接入文档 **§122 TW-1**;🔴 型面 BREAKING,运行期导出 −10 / +14,型 −3 / +6):此前「这条 run / 任务结了没」散在八张表、八种命名里,其中公面那张 `RUN_TERMINAL_STATUSES` 把 run 行状态的终态三词与 fleet / 通知面的 `killed` 并在一起。本版每张表只抄一个具名上游的终态分区,表名带属主,住同一处。**谁受伤**:import 下列旧名的宿主编译红 —— 表 `TERMINAL_CAUSE_KINDS` / `RUN_TERMINAL_STATUSES` / `RUN_TERMINAL_NOT_SUCCESS_STATUSES` / `TASK_NOTIFICATION_TERMINAL_STATUSES` / `TERMINAL_FLEET_TASK_STATUSES` / `CLAIM_RELEASED_STATES`,谓词 `isTerminalCauseKind` / `isTerminalStatus` / `isTerminalNotSuccess` / `isTaskNotificationTerminalStatus`,型 `TerminalCauseKind` / `RunTerminalStatus` / `RunTerminalNotSuccessStatus`。**改法**:按读的那一面换属主名(逐名对照见 §122 TW-1)—— 终局因由 → `CORE_TERMINAL_CAUSE_KINDS` / `isCoreTerminalCauseKind`;run 行状态(`runs.get`)→ `SDK_RUN_TERMINAL_STATUSES` / `isSdkRunTerminal` / `isSdkRunTerminalNotSuccess`;fleet 行 → `SDK_FLEET_TASK_TERMINAL_STATUSES` / `isSdkFleetTaskTerminal` / `isSdkFleetTaskTerminalNotSuccess`;通知(`task_notification` 帧 / `<task-notification>` 的 `<status>`)→ `CORE_TASK_NOTIFICATION_TERMINAL_STATUSES` / `isCoreTaskNotificationTerminal` / `isCoreTaskNotificationTerminalNotSuccess`;登记任务 / TaskOutput 卡 → `CORE_SEMA_TASK_TERMINAL_STATUSES` / `isCoreSemaTaskTerminal`。🔴 旧 `RUN_TERMINAL_STATUSES` 不是任何一张新表的改名:新 run 行表没有 `killed`、多一个历史落库行 `timeout`;只按值换名会在读通知 / fleet 行 / TaskOutput 卡的地方漏掉 `killed`。**三端矩阵**:终端 —— 近三十处读点要换(§122 TW 段 122d 逐行);网页端 / 桌面端 / 管理台 —— 零读点。
77
+ - 包内件 `engineCapsGenerationGuard`(能力位读器格的代际两问叶)整文件删除;读器格表与格的代际身份随写入口一起退役,总缓存的代际回到只有号(CC-344 余项;不在公面;**§122 CR-2**)。已知限制 KL-545(tee 不供代际号照写陈旧读数)与 KL-572(只收过畸形回体的地址代际号推到 1)随之消失 —— 读器没有写入口,也就没有这两道取舍。
78
+ - **`FleetTaskView.queuedCount` 与 `FleetWorkflowView.errorCode` 两只零生产者位退出视图**(CC-388;接入文档 **§122 FX-F2**;🔴 型面 BREAKING):`queuedCount` 是 sdk 行型上的幻影键 —— 任何服务端版本都不发(生产侧已整只删除,明说要队列深度须是带生产者的新键);`errorCode` 是 0.74.3 加的结构读位 —— 服务端的 fleet workflow 行从不铸它,run 级码只住 workflow 读面。两位在视图上永远缺席,一个等不来货的可选位是假线索。硬破坏三句:删了就是删了、不留别名、读 `view.queuedCount` / `view.errorCode` 的 TS 写法编译红一次;运行期它们本来恒缺席,零行为差(输入里塞了也不过境)。视图键清单各少一员(`FLEET_TASK_VIEW_KEYS` 24 → 23、`FLEET_WORKFLOW_VIEW_KEYS` 11 → 10);`queuedCount` 仍是 sdk wire 键,登记在 `FLEET_TASK_ROW_KEYS_NOT_PROJECTED`(by-design;sdk 删声明的那个 major 同批删本条)。终端渲染契约里各留一个可选位与读点(`overrides/fleet-tree.tsx:203,473,764` / `:268,554`):死码,终端侧删;网页端 / 桌面端零读点。
79
+ - **`classifyRegistryConflict` / `isScopeGoneError` 退出根入口(型 `RegistryConflictClass` 随之退出),registry 写门 409 的判读口改由子路径入口 `@sema-agent/client-core/registry` 原样转口**(CC-538;接入文档 **§122 FX-H2**;🔴 型面 BREAKING,根入口运行期导出 −2、子路径入口 +1 名 +1 型):registry(云控制面)的写门在同一个 409 上答两件相反的事 —— 乐观锁冲突(重读、改基线、再写一次),与目标空间在途中被删 / 被同名替换(什么都没写,不可自动重试);上游只有一只判读函数。包内曾自铸一份同名同形副本(当年的 sdk 地板上没有上游那一只),地板抬到 19 之后这条理由没了,同一个 409 于是有两条读法 —— 副本整份删除,判读只此一处。一并删除的谓词 `isScopeGoneError` 没有消费方(它按类名认两只 scope-gone 错误类;sdk 19 起那两只类恒在,`instanceof` 即可)。硬破坏三句:根入口不再导出这三个名;`import { classifyRegistryConflict, type RegistryConflictClass } from '@sema-agent/client-core'` 编译红一次,改从 `@sema-agent/client-core/registry` 导入(同一个函数对象,调用与返回值逐字不变);行为差只在敌意入参 —— 上游函数不替调用方吞「取值器 / 代理陷阱抛」(副本曾答 `'gone'`),而线上入参是 `res.json()` 的产物,两者逐例同答。
80
+
81
+
82
+
83
+
84
+
85
+
86
+ ### Added
87
+
88
+ - **面板行归约口 `reducePanelFrame(state, frame)` / `createPanelReduceState()` / 差分臂闭集 `PANEL_DELTA_OPS`**(CC-76 + CC-114;接入文档 **§122 PR-1**):「一帧进 → 行差分出」的纯函数 —— 不做 IO、不读时钟(投影快照帧自带 `nowMs`)、不读写模块态、不改入参状态;同一 (state, frame) 恒得同一份差分,同一帧再喂一次零差分。帧闭集 `PanelFrame` = 面板事件四臂(tick / fleet-row / end / sweep)+ 投影快照 / 会话拆除 / 缺席上报 / 常驻标 / 转录锚;差分闭集 `PanelDelta` = `upsert`(`created` / `revived` + 只放变了的展示位;`fields.absence` 在场 = 引擎不再上报这一行,`null` = 行回来了)/ `usage_delta`(累计口径,只放变了的键,缺席不落键、绝不补 0)/ `terminal`(`isError` / `report?` / `cause: 'end' \| 'sweep'`)/ `remove`(包已不再跟踪这一行),每臂带 `canonicalId`。根入口 +3 名;型 `PanelFrame` / `PanelDelta` / `PanelRowFields` / `PanelReduceState`。
89
+ - **行差分订阅口 `subscribeEnginePanelRows(fn)`**(CC-114;**§122 PR-2**):宿主进程里那份面板状态的出口。单消费者;订阅即按当前行表回放快照(每行 `upsert{created}` + 用量 + 已结行的 `terminal`,无缓冲上限),之后按产出序到达。前代迟到的终态、同代重复终态、消费端没有的行、首见即终态的历史行都在包内判完;turn 末 `sweep` 只结「在跑 ∧ 非常驻 ∧ 非缺席 ∧ 非行帧 lane」的行。根入口 +1 名;测试钩 `__resetEnginePanelStateForTests` +1。
90
+ - **`droppedModelEntriesOf(catalog?)` / `ModelDroppedEntriesReading` / `LiveModelDroppedEntry`**(CC-540 A;**§122 UP-1**):在线目录里哪些条目没被引擎收下、为什么(服务端 7.123.0 `GET /v1/models.droppedEntries`:`index` + `reasonCode` + 可披露身份)。读数三态:`reported{ entries, unreadable }`(在场的空数组 = 一条都没丢)/ `not_reported`(键缺席 = 更早的服务端,**不**编空数组)/ `unknown{ no_catalog | malformed | unreadable }`;坏行只丢自己、表外 reasonCode 与新键原样带、只读自有数据位、读数冻结。`LiveModelCatalog` 增可选位 `droppedEntries`(宿主把 `models.list()` 回体原样装进来即可)。行型派生自 sdk `models.list()` 返回型(peer 地板 sdk 18.1.0 上照样编译)。根入口 +1 名(函数)。
91
+ - **`hasLedgerPositionKey(frame)` 上根入口**(CC-464;接入文档 **§122 WC-1**):「这一帧带不带账本位置」的唯一读法 —— `id` 或 `seq` 任一键在场且不是 `null` ⇒ 真(值坏形也算),两键都缺席 / `undefined` / `null` ⇒ 假;读位抛 ⇒ 原样抛。它此前只在包内(帧通道的判活闸、preamble 记账、判定口三处共读),端要自判只能自写第二份 —— 网页端那一份只认非空串 `id`、忽略 `seq`,与包内不等价:仅有 `seq`、空串 / `false` / 对象 `id` 的账本帧,端当「没有账本位置」去铸可点卡,包按账本帧核待决清单。判定口 `replayedApprovalDisposition` 对带 `approvalId` 的帧答 `live_leg` 恰是本口为假。
92
+ - **`replayedApprovalSentence(disposition, opts?)`**(CC-464 + CC-467;**§122 WC-2**):账本里重放回来的审批帧「现在不能决」那一句的唯一铸点,一张表。`decided` 三向 —— 无成因 ⇒ 「引擎的待决清单里没有它,没发决定」(判定口分不出人决过 / 过期 / 转入停驻,所以**不说**已批、已过期、工具跑过;KL-683);带成因(`crashed_before_park` 说引擎意外停止、`shutdown_before_park` 说有序关停)⇒ 按崩溃收敛行的分桶注脚 `needsHumanReason`(判定口 `decided` 臂随成因带上,与 `projectCrashConverged` 同一份读数)分三向 —— 还在等的两桶(resumeSafe / `pending_unsafe`)⇒ 它还在等、引擎自动拒了它,补一句「工具有没有开始,这里看不出」;`approved_then_interrupted` ⇒ 人已批过、可能正在跑、副作用可能落了一半,引擎随后把它收成了拒绝;`contradictory` / `unstable_row` / 表外词 / 读不出 ⇒ 记录看不清批没批过、开没开始(两头都不说);`unknown` ⇒ 「没能确认它还在不在等,没发决定」一句(六种 `why` 同句);`live` / 非对象 / 不认得的 `kind` ⇒ `undefined`。崩溃收敛行恒是 denied,任何路径都不把结局说成已批(已批后中断那一桶说的是人当时批过、结局仍是拒绝)。判定口 `ReplayedApprovalDisposition` 的 `decided` 臂增可选位 `needsHumanReason`(只跟 `cause` 一起在场,闭集四词原样)。可选第二参 `{ toolName }` 点名(名字是不可信文本:过显示消毒、封 80,进句时放进一对双引号、引号转义 —— 名字里的整句话冒充不了本句的状态陈述)。成因词表取自型 `CrashConvergedRow['cause']`,句子表钉在表自己上(联合加一词而表没跟 ⇒ 编译红);表外成因词 / 非串 / 原型链名落中性句。永不抛。根入口 +1 名。
93
+ - **`allowRuleShadowSentence(card)`**(CC-468;**§122 WC-3**):卡上「allow 层有成员命中了这次调用、却清不掉这只 ask」那一句的唯一铸点。披露的事实此前就单源(`readApprovalAllowRuleShadow`),句子三端各拼各的(网页端取条目自己 join、终端壳里一只叶子、桌面端零);现在按成员与条目成句,老一串与新键 `persisted` 成员同一读数同一句,卡级读口对裸帧回落同一读数。缺席 ⇒ `undefined`(不说「你没有规则」);整只读不出 ⇒ 说读不出;条目与表外成员词是不可信文本,一律放进一对双引号(过显示消毒、引号转义、字面反斜杠成对 —— 文本里的整句话出不了引号、冒充不了句子自己的陈述;闭集成员词原样)。老一代单句形如 `Your saved permission rule "Bash(ls:*)" still exists — …`(终端壳里那只叶子写的是括号形 `(Bash(ls:*))`,两者差在条目与表外成员词的引法;换读本口即得引号形)。帧级读口 `readAllowRuleShadowFromWire` 不另导出;`legacyShadowedRuleTextOf` 不是句子口,是卡字段 `persistedRuleShadowed` 的派生函数,随该字段按 RL-58 一起退役。根入口 +1 名。
94
+ - **`GET /v1/models` 回体的唯一读口 `readLiveModelCatalog(body)` / `LiveModelCatalogReading`**(CC-465;**§122 WB-1**):行键 `name`(提交值与 `@` 句柄);不是普通对象 / `name` 不是非空串 / 带访问器或非 JSON 值 / 稀疏洞 / 同名后到的行计入 `unreadableRows`、好兄弟照留;读数、目录、行全冻结的深拷贝,不改入参;`defaultModel` 形对才带(形不对记 `defaultModelMalformed`);`droppedEntries` 原值过境,`droppedModelEntriesOf` 读数与未过读口时逐字同;信封只带四键。整份读不出 ⇒ `unreadable`(`not_an_object` / `models_not_array` / `default_missing` / `unreadable`)。
95
+ - **缺省模型读口 `liveDefaultModelOf(catalog?)` / `LiveDefaultModelReading`**(CC-465;**§122 WB-2**):服务端的答案,只读 `defaultModel` —— `name` 恰是某行 `name` ⇒ 那一行,否则 `id` 只按行的 `id` 落行(上游 id 与某行 `name` 撞串不算);落不到 ⇒ `not_listed`;`defaultModel` 缺席 / 形不对 ⇒ `unknown{not_reported}`;绝不取第一行。设置契约的缺省链在服务端应用目录时已经跑过,本包不再跑一遍。
96
+ - **`atMentionOf` / `modelCompatOf` / 行视图 `liveModelRowsOf`**(CC-465;**§122 WB-3**):目录行按真值出四键 —— 配对姿态(既有 `routePairingVerdict`)、可否 `@`(`allowed` / `refused` / `not_governed` = 部署没配名单 / `unknown`)、线路兼容声明(`declared` / `not_declared` / `unknown`;型 `LiveModelCompat` 派生自 sdk)、接受哪几档(既有 `effortLevelsOf`,唯一读法,不从兼容声明推)。行视图每一位调同一只单行读口;窗口 / 输出上限只认正有限数、不设下限。`LiveModelInfo` +4 可选位。
97
+ - **座位入站判官 `checkSendMessageRequest(v)` / `isSendMessageRequest(v)`**(CC-466;**§122 WB-5**):`sendMessage` 整只载荷的唯一判官 —— 闭集键,每键词表取包里那只元组(`PERMISSION_MODE_INTENTS` / `SEAT_REASONING_EFFORTS` / `REWIND_MODES` / `SEAT_TURN_SETTINGS_KEYS`)与附件上限;子代两位(`forwardSubagentEvents` / `retainSubagentSessions`)有了判据;未登记顶层键、访问器、读抛一律拒,拒因带键路径。
98
+ - **座位回退载体 `SendMessageRequest.rewind?: SeatRewindIntent` + `SEAT_REWIND_INTENT_KEYS`、档位元组 `REWIND_MODES`、能力名 `rewind`**(CC-466;**§122 WB-6**):`{ mode, targetMessageUuid }`,宿主把锚点映射到引擎条目、按 `rewindSpecForMode` 投进这一轮请求;能不能用由座位能力表答(能力名 ⊆ 动词名 ∪ 载荷键名)。出身表多第三种出身 `{ projectedBy, taskRequestKeys }`。
99
+ - **settings 子键出身表 `SEAT_TURN_SETTINGS_ORIGINS`**(CC-466;**§122 WB-7**):请求装配口每一把 settings 子键在座位 lane 上由谁供 —— 渲染端载(`ultracode`)或宿主自供(`webSearch` / `hooks` / `resolved` / `outputStyle`,带理由);键集与装配口编译期两向钉,判官拒宿主自供子键。
100
+ - **`LocalSessionEvent.parked?: true` 与收口帧读口 `approvalCompleteParked(frame)`**(CC-466;**§122 WB-8**;并网页端 [9527]):`tool_permission_resolved` 带停驻位(present-iff:只在 `outcome === "expired"` 且这一问转停驻时),铸法与适配层撤卡同读 `approvalCompleteParked`(自有数据位 `outcome === "expired"` ∧ `parked === true`)。
101
+ - **`SettingsPort.managedPolicyReading()` / 型 `ManagedPolicyReading` / `ManagedPolicyState`**(CC-488;接入文档 **§122 RD-1**;根入口运行期名不增、型 +2):hooks 投影的托管层读数端口(可选、零参),返回 `{ state: 'absent' | 'in-effect' | 'unreadable' }`。修前只有「读 `policySettings` 抛错」会让投影整条腿不投;宿主的按源读口通常不抛 —— 托管文件 / 远端缓存读坏时返回 `null`,本包读到「没有托管策略」,user / project / local / flag 四源的 hooks 照上请求体,管理员下发的 `allowManagedHooksOnly` / `disableAllHooks` 恰在读不出的那一拍消失。现在 `unreadable` ⇒ 整条腿 fail-closed(四源 + `/goal` 全不投,插件那一半的排除理由是 `governance_unreadable`,`hooksForWire()` 与 `hooksWirePlan()` 同判)。**只收紧**:读口缺席 / `absent` / `in-effect` 三个读得出的答案在同一份托管文档上的投影逐字节同;`absent` 与文档里的 `disableAllHooks: true` 矛盾时文档照判。读口抛错 / 返回词表外的值(含大小写不同)/ `state` 取值器抛 / 写成属性而不是方法 ⇒ 按 `unreadable`;只有成员缺席(`undefined`)才是「端没接」,维持今天的抛错臂、零日志(KL-686)。
102
+ - **引擎用量分析读口:三口 wire 读器 + 三态视图 + 句单源**(CC-511;**§122 RD-2**;根入口 +13 名:`readUsageSummary` / `readUsageSeries` / `readUsageBreakdown` · `projectUsageSummary` / `projectUsageSeries` / `projectUsageBreakdown` · `classifyUsageFailure` · `projectUsageAnalytics` / `readUsageAnalytics` · `usageBoundPrefix` · `usageWindowOfRange` · `USAGE_SENTENCES` · `USAGE_HEATMAP_MAX_DAYS`):`GET /v1/usage/summary` · `/series` · `/breakdown` 的读器永不抛,判决联合 `ok` / `unavailable`(`capability.*` 或无码 501 = 引擎没有 run store;`feature.*`;404 `not_found.route` = 老引擎无路由)/ `failed`(401 / 403 / 5xx / 网络 / 体畸形 —— 读失败不说成「这个后端没有」);注入面形 = sdk `usage.*` 的签名,sdk 客户端实例直接传入。`readUsageAnalytics(client, window)` 并发读四次(总账 / 日序列 / 小时序列 / 按模型分桶)合成一张三态卡:`available`(精确)/ `estimated`(金额轴是下界 `≥`、token 轴是估算 `≈`,前缀单源 `usageBoundPrefix`;总账自陈扫描窗被截 `truncated: true` 时两轴都不标精确 —— 金额 `≥`,token 精确口径 `≥`、估算口径 `≈`)/ `unavailable`(引擎没有这一面一句、读失败另一句,零统计格、零热力格、零数字)。缺席位不编 0:总账某位缺席或坏形 ⇒ 视图里没有这一位;热力图与活跃天数只在日序列**读成功且读完整**时才有(读失败 ≠ 一整张零活动;读到了但有读不懂的点 / 无效日期 / 序列自己被截 ⇒ 同样不补零、不报活跃天数);峰值小时与最常用模型同一条完整性规则;分桶读失败 ≠ 窗内没有模型用量;`estimated` 只有显式 `false` 才是精确。终端的 `sema cloud usage` 读的是中心中继的另一个源,不并。
103
+ - **审批窗到期转 durable 队列链上的四件判定读口同名上收**(CC-550;**§122 RD-3**;根入口 +4 名:`classifyApprovalCompleteFrame` / `parkRowDeadlineState` / `lateDecideRoute` / `runReapedByDeadline`;型 `ApprovalCompleteDisposition` / `ParkRowDeadlineState`):自终端壳半场逐字上收、**不改名**(壳侧到货条件锚按名机读)。`classifyApprovalCompleteFrame`:`tool_approval_complete` 帧 `expired` ∧ `parked === true`(只认严格 `true`、只认自有数据位:原型链 / 取值器上的 `parked` 读成撤卡;「转停驻」的判法就是共享的 `approvalCompleteParked`,与座位 `tool_permission_resolved.parked` 同一只读口)⇒ `live-expired-parked`、`expired` 无 park 证据 ⇒ `live-expired-retract`、`allowed` / `denied` ⇒ `settled`、开集新词 / `outcome` 缺席 / 开卡帧 / 非对象 ⇒ `null`;`parkRowDeadlineState(row, nowMs)`:读 `pending[].deadline`(不读流窗那一族的 `expiresAtMs`)⇒ `none` / `pending` / `past`,缺席 / `null` / 荒谬值(非有限、非正、串、超 24 小时)当缺席不夹边界;`lateDecideRoute`:窗没关过恒 `respond`、关过且真找到 durable 行才 `decide`;`runReapedByDeadline(client, taskId)`:decide 的 404 族先读 `GET /v1/runs/:id` 的终态码,**只有** `approval.expired` 配得上「这一步没有跑」,读不到 / 抛 / 别的码一律 `false`(被收割码取包内单源 `APPROVAL_EXPIRED`)。
104
+ - **交互 Esc 的 interrupt 发射口 `fireInteractiveInterrupt(runs, taskId, opts?)` + 型 `InteractiveInterruptRuns` / `InteractiveInterruptOptions`**(CC-319;接入文档 **§122 SA-1**):经宿主 live 客户端的 runs 资源发一发 bare `POST /v1/runs/:id/interrupt`(方法形调用、`sessionId` 非空串才带 `?session=`、不带幂等键 ⇒ 恰一发,sdk 不重试)。结局就是 `planInteractiveHalt` 的入参 `InteractiveHaltInterruptOutcome`(四臂不变),绝不抛:回执的 `turnCut` 只认自有数据位上的布尔(取值器不执行、读不出不硬造 `false`);2xx 受理而回执体解不开(不是 JSON)⇒ `halted` 不带 `turnCut`(受理已证,不当传输失败);其余抛出物交与自愈 steer / cancel 两路同一只至多一次判类尺 —— 4xx(及交引擎前就拒的 503 账本码)⇒ `refused { status, errorCode? }`,5xx / 连接断 / 截止 / 中止 ⇒ `transport { detail? }`(`detail` 只取错误类名);runs 资源缺席 ⇒ `unarmed`(零请求)。🔴 与宿主自发的唯一行为差:5xx 不再当成引擎判决 ⇒ 宿主自证屏上挂着审批卡或这条 run 武装了 detach 时,`planInteractiveHalt` 升级 run 级 cancel(此前不升级)。
105
+ - **设备换绑判定半场 `listDevices` / `readSessionBinding` / `rebindSession` + 纯判定 `reconcileRebindOutcome` / `rebindProvesRequestNotApplied`(型 16 个)**(CC-320 ①;**§122 SA-2**):换绑那一条 UX 的三步各一只发射口,经宿主 live 客户端的 devices 资源发,结局恒是判别值、绝不抛。拒码一张闭集表、状态码与码合取:501 `capability.device_lane_required` / 501 `capability.run_store_required`(`lane-absent`,后者带 `runStoreOnly`)· 404 `not_found.device`(读面 / 换绑 `not-found`,列面 `refused`)· 409 `device.rebind_active_run`(`activeTaskId` 取 sdk 具名位)· 409 `device.rebind_rev_conflict`(`currentRev` 只认非负整数)· 503 `auth.service_token_required`(`refused`,不折成车道缺席);换绑表外失败交至多一次尺(`refused` / `unconfirmed`;有状态码 `server-error`、无状态码 `transport`,两格都 `mayStillBeRunning: true` —— HTTP 5xx 证明不了处理器已收工,网关超时时上游那一笔写可能还在跑,回读看见旧态只判 `unknown`)。换绑成功形要回显会话逐字等 ∧ 落在目标设备 ∧ rev 恰 +1(或前态本来就在目标上且 rev 不动),否则 `unconfirmed / accepted-unreadable`,绝不拿请求值回填;`workspaceCarryover` 只认字面 `'none'`;`expectedRev` 不是非负整数 ⇒ 本地拒、零请求。回读对账只交判决词 `landed` / `already-there` / `unchanged` / `unknown`(呈现句留宿主)。回体与错误对象上的位一律按自有数据位读。
106
+ - **sdk 设备行型十一名经根入口 type 再导出**(CC-581;接入文档 **§122 SA-7**):`DeviceSummary` / `DeviceListResult` / `DeviceBinding` / `DeviceSessionBinding` / `DeviceRebindRequest` / `DeviceRevokeRequest` / `DeviceRebindResult` / `DeviceEnrollToken` / `DeviceEnrollRequest` / `DeviceEnrollResult` / `DeviceRevokeResult` —— 端声明设备面端口与映射行形时从本包取型,不再直接从 sdk 取;型与 sdk 恒等,零运行期字节。同批:设备换绑读面的前态型由 `DeviceBinding` 改名 `DeviceBindingReading`(读数投影:只读、`boundAt` 缺席照收,与 sdk 原型同名不同形;本版新口,无已发存量),原名让给 sdk 原型。
107
+ - **引擎 env 组来源判定 `resolveEngineEnvSourcing(input)` / 读视图 `engineEnvView(env, caseInsensitive)`(型 7 个)**(CC-321;**§122 SA-5**):起本机引擎那一刻,来源写了某个「全有或全无」组的一半、那一半被忽略、子进程 env 里缺席,且按组声明起不来 ⇒ 安全组或声明不可跳过的组 `refuse-explained`(照旧交引擎拒启),其余 `skip`(只删这一组自己的开关)。纯函数;组声明(含镜像引擎启动校验的谓词)、忽略判据、别名表由宿主给;退役 env 改名表的属主是设置契约 `RETIRED_ENVS`,宿主直读后经 `aliases` 交进来,本包不 import、不转口、不存任何一行。出参:要删的键、逐组读数(碰过的键带来源里写的原名与来源)、逐键来源与理由(`repo-half-ignored` / `dropped-with-group`);告知句留宿主。宿主谓词抛 ⇒ 按「没忽略 / 起得来」处置(不删、不说)。
108
+ - **引擎托管 MCP 连接态读口 `mcpEngineLegConnectionOf(serverName, rows)` / 型 `McpEngineLegConnection`**(CC-325;接入文档 **§122 SB-3**;根入口 +1 名):「这台服务器在引擎这一轮运行上连着没有」只读这一轮 `wiring_manifest.mcp[]` 里这一台的 `status` —— 三态 `connected`(带非负整数 `toolCount?`)/ `not_connected`(`failed` 带读得出的 `errorCode` / `delivered` / `httpStatus`、`skipped`、`not_listed`)/ `unknown`(`unobserved` / `ambiguous` 带行数 / `unreadable` / `unrecognized_status` 带原词)。工具名册与端本地自连的 client 都不是这句话的说话人;同一行的活性格不读(活性仍读 `mcpEngineLegLivenessOf`,两口按名找行共用同一只查找);三词表与引擎型编译期双向钉。读数是这一轮运行拨号那一刻的判词,不是此刻的健康(KL-696)。
109
+ - **切模型两件公共判定**(CC-324;**§122 SB-4**;根入口 +3 名:`modelSwitchProbeOutcomeOf` / `runModelSwitchProbe` / `createModelSwitchFallbackLedger`;型 9 个):① 切换前探活的结果分型 —— 车道(`live` / `mock` / `engine_absent` / `unwired`)× 判决口结局 ⇒ 放行(`probed` 说这一次真探了没有)或不切(`rejected` = 判决口说这个模型不成立;`unavailable` = 探活没跑成、对模型没有结论,`cause` 分说 `unwired` / `probe_missing` / `probe_threw` / `unchecked`),`reason` 是判决口原话(不可信串);编排口只在需要时调判决口、永不 reject。② 切换后首发空流的回落台账(实例,按会话分格):用户发起的切换 `noteSwitch` 记一笔(带单调序号;宿主交不出「最近真答过的模型」就不记);`advisoryFor` 纯读 —— 结果帧终局码 `stream_torn`(经 `resultErrorCodeOf`)、失败的就是切过去那一个(先比流入口名,不中再比帧上的 `_sema_selected_model`,经 `resultSelectedModelOf`)、它还没真答过,四条全成立才交回那一笔;`release(sessionId, seq)` 比序号才销(旧判定销不掉新切换),宿主投递成功后再销。文案与投递留端。
110
+ - **忙卡接管出路 `attach` · 与 resume 三选卡同一只判定 `runningAttachOffered(canAttach)` · Cancel 已受理确认句 `resumeRunningCancelConfirmedRow(taskId)`**(CC-536;接入文档 **§122 RS-1 – RS-3**):「run 还在跑且可接管 ⇒ 给 attach」只有一条规则、一只判定 —— resume 三选卡(`resumeRunningOptions`)与 Leave 之后再撞 running 的忙卡(`activeRunSelfHeal` 的三选 steer / cancel / wait)都经 `runningAttachOffered` 决定给不给(只认严格 `true`;供给位缺席 ⇒ 不给出路,没说不等于不可接管)。忙卡一侧:`ActiveRunSelfHealDeps.canAttachRunning`(可选,语义与 `ResumeRunningCardInput.canAttach` 同:durable 事件动词在场且宿主有接管消费口)→ 请求 `RunningChoiceRequest.canAttach?: true`(在场即严格 `true`;宿主不给供给位时请求的键与旧版逐字同)→ 呈现口回执加词 `'attach'` → 新结局 `{ kind: 'running-attach'; taskId }`:本层零写请求(不 steer、不 cancel),接管由宿主做;处置档 `not-delivered`(被拒的那条消息没送出,不回灌);行句 = 重放披露原句(`resumeAttachReplayDisclosure`)+ 消息没发出去的出路;不产出续听意图。卡上只剩 attach 一条真出路时照样出卡(与 resume 卡同律);系统注入件恒不问人、恒不 attach(没有正文可送而供给位在场也不例外);存活对账先于出卡,幽灵 / 已终结的 run 不递 attach。确认句:`resumeRunningCancelConfirmedRow` 与 `resumeRunningCancelUnconfirmedRow`(字节不变)经包内同一只私有铸造点出其一,两句互斥 —— 确认句只说回执证得出的事:引擎受理了、那条 run 可能还要一会儿才停(取消口回 `cancelling` 受理体或终态 no-op,受理不证明活被丢弃、已停或会话已空出来)。根入口 +2 名。**型面两向**:对实现 `offerRunningChoice` 的宿主是放宽(旧实现只回三词照常编过;新请求位、新 deps 位都可选);对按回执词或按结局 `kind` 穷举(`never` 分支)的宿主,联合各加一员 ⇒ 加词这一版编译红一次,改法是补 `'attach'` 一臂调接管口、补 `running-attach` 一臂(行句可用 `activeRunSelfHealRow`)。无硬破坏:不删不改既有成员语义。
111
+ - **终态属主表五张 + 成员型六个 + 谓词八只 + CC 行词投影 `ccTaskTerminalStatusOf`**(CC-78;接入文档 **§122 TW-1 / TW-2**):冻结字面元组 `SDK_RUN_TERMINAL_STATUSES`(completed / failed / blocked / 历史行 timeout)/ `SDK_FLEET_TASK_TERMINAL_STATUSES`(completed / failed / killed)/ `CORE_TASK_NOTIFICATION_TERMINAL_STATUSES`(completed / failed / killed / cancelled)/ `CORE_SEMA_TASK_TERMINAL_STATUSES`(同四词,登记任务面)/ `CORE_TERMINAL_CAUSE_KINDS`(生成物原名直出),成员型 `SdkRunTerminalStatus` / `SdkFleetTaskTerminalStatus` / `CoreTaskNotificationTerminalStatus` / `CoreSemaTaskTerminalStatus` / `CoreTerminalCauseKind` 由元组派生,端的型面从此派生、不再手抄词。三问按属主各一只:结了没 `is…Terminal`,成没成功只出否面 `is…TerminalNotSuccess`(🔴 任何谓词的 `false` 都不是「成功」);能不能合成终帧只有 run 行有,包内判。`ccTaskTerminalStatusOf(status)` 把任一属主的终态词折成 CC 本地任务行的三词(`CcTaskTerminalStatus` = completed / failed / killed):`blocked` / `timeout` ⇒ `failed`,`cancelled` ⇒ `killed`,其余原样;非终态与表外词 ⇒ `undefined`(不翻行)。fleet 表此前是 `ReadonlySet<string>`,本版换冻结数组(`.has` 改调谓词)。
112
+ - **同一只审批的持有者读口 `joinApprovalHolder(identity, signal?)`**(CC-593;接入文档 **§122 XH-1 / XH-3**):宿主自己的耐久审批路(收到 `approval_request` 帧 → 开卡 → 耐久决断)开卡前调一次 —— 本进程此刻持有这只审批的活卡(卡在屏,或答复在送)⇒ 等它放手再交回 `{ kind: 'joined', outcome }`(持有者已结算:本路不开卡、不发决断;`outcome` 是持有者结局的拷贝,带 `joinedInFlight: true`)或 `{ kind: 'free' }`(没有持有者;或持有者放手而这一问没结算 —— 答复没送达、正在停驻、转停驻、卡被撤 —— 本路照常开卡)。身份 `ApprovalHolderIdentity`:带 `approvalId` 只按它认;不带则按 `taskId` + `toolCallId`(两侧会话都在场时还须同会话),且只认还在等人答的卡;读不出的分量 ⇒ 不认。根入口 +1 名;型 `ApprovalHolderIdentity` / `ApprovalHolderJoin`。`surfaceToolApprovalFrameAndRespond` 多一个可选第 6 参 `run?: { taskId?, sessionId? }`(这只帧属于哪条 run;包内帧路由自己传,直调的宿主可不传 —— 不传 ⇒ 只能按 `approvalId` 被认出;子代审批帧不收这一参,run 只取帧上的 `sourceTaskId`)。
113
+ - 无根入口新增名。包内叶 `ownKey` 多两只读法原语(`ownDataField` / `ownSendableField`,不上公面):读外来对象一位自有数据值,自有访问器与(送出用的)不可枚举位抛、不执行取值器;读器族与座位门共用这一只读法(CC-516 / CC-525 ③;**§122 CR-3 / CR-4**)。
114
+ - **活卡结局帧的「非人结局」成因读口 `approvalCompleteCauseOf(frame)`;帧型 `ToolApprovalFrame` 加 `cause?`、帧键镜像 `TOOL_APPROVAL_FRAME_KEYS_MIRROR` 加 `cause`(37 → 38)**(CC-570;服务端 7.124.0 / sdk 19.0.0;**§122 PK7-3**):十四词闭集(问账行十词取 sdk `ASK_ROW_ENDING_CAUSES`,窗到期 / 广播全灭 / 断流 / 投递不出四个等待类词两向钉在 sdk `ApprovalSettleCause` 型上),只读帧上的自有数据位;键缺席 = 人答的结局或更早的服务端,读作缺席、不反推任何一词;表外词读作缺席。根入口 +1 名。
115
+ - **决断拒收分类读数加 `conflict`(型 `DecisionRefusalConflict`)**(CC-570;**§122 PK7-4**):`classifyDecisionRefusal` 在 409 上把服务端 7.124.0 起「一码一因」的四形分开 —— `binding_mismatch`(绑定席)/ `row_integrity`(无 `field` 的行完整性拒)/ `format_version`(`checkpoint.unsupported_version`)/ `answer_invalid`(问答载荷不合法:7.124.0 的 `resume_outcome_invalid` 与更早服务端借绑定不符码发的那一形同答);认不出 ⇒ 缺席。`standing` 不变。
116
+ - **`checkpointUnsupportedVersionFromError` 读数加 `writerVersion?` / `readerVersion?`**(CC-570;**§122 PK7-5**):服务端 7.124.0 起这一拒带两只版本键;两键都是非空串才一起带,只有一键 ⇒ 都不带。写下停驻的引擎比读它的这台新 ⇒ `checkpointUnsupportedVersionContent` 的出路改说「回到那一版或更新的引擎上继续」;相等 / 更旧 / 缺席 / 任一方不是纯 `x.y.z`(预发布、构建尾同,与 `engineVersionTier` 同一读法)/ 读它的这台低于本包支持底线 ⇒ 句子逐字同旧。
117
+ - **`CenterWiringView.worker?`**(CC-570;服务端 7.124.0;**§122 PK7-7**):引擎向中心登记的 worker 名,present-iff 引擎报了(配了名且可披露);在场而不是非空串 ⇒ 整条读数按畸形删格(与这一格其余可选位同律)。
118
+ - **技能两表 `allowedTools` / `disallowedTools` 上 wire**(CC-590;接入文档 **§122 SK-1**):技能 frontmatter 的 `allowed-tools` / `disallowed-tools` 此前到不了请求体 —— `skillCommandsToSpecs` 只投 name / description / content / baseDir,用户写的 deny 表因此在引擎上不生效。现 `SkillCmdLike` 多两只可选成员 `allowedTools?` / `disallowedTools?`(`readonly string[]`),`SkillSpecsOptions` 多一位 `skillToolLists?: SkillToolListsReading`(宿主交 `observedSkillToolLists()` 的读数),`TaskAgentWireSkill` 多两只可选成员。🔴 **上不上 wire 只看能力位**:唯一判官 `skillToolListsAvailable` 答 `'yes'` 才带两表;选项缺席 / 未观测 / 老服务端没报 / 明说否 / 读数不是读数 ⇒ 一律不带(逐字节同 0.94.0;老服务端对顶层技能上的两表照收但引擎不读,对子代技能 `agents[].skills[]` 上的两表整条拒)。带的时候逐字原样 —— 不归一、不去重、不截断、不过滤、不改序,空数组照带 `[]`(服务端 ≥7.116.0 把两表读作这一次运行的 allow / deny 规则来源,空表 = 不贡献规则 = 与缺席同效),只做浅拷贝。唯一的本地判断是值形:非数组 / 含非串项(含稀疏洞)/ 报不出合法长度的外来数组 ⇒ `TypeError`(点名技能与表名、不回显条目;属性读 / 长度读 / 下标读抛出的,换成不带抛出物的 `TypeError`;交了读数位的宿主才判,先于能力位判 —— 坏声明不许借「这一次不发」被吞;只对真会被发出的技能判;选项缺席的宿主不读不判两表,逐字节同 0.94.0)。条目级(每表 > 1000 条、deny 侧读成空的条目、空串元素)一概交上游受理口 400 响亮报,本包不立第二判官。`projectAgentsForWire` 的 `skillSpecs` 吃同一份产物,`agents[].skills[]` 与顶层同形。公面运行期导出零变化。
119
+ - **`EngineInstance.startedAt?` / `HealthResponse.startedAt?`:引擎进程起点有了型位**(CC-446;接入文档 **§122 FX-E1**):来源只有 `/health.startedAt`(服务端 ≥7.67.0 无条件发),读法仍只有 `engineIdentityOf` 一条;三处型位(读数 `EngineIdentityView.startedAt`、`EngineInstance`、`HealthResponse`)在编译期互钉同型(两向)。缺席 = 这台引擎说不出来,**不是**「它没重启过」;不铸 0,不借 `Date.now()`,不借同名异义的 `EnginePortFile.startedAt`(那是壳写文件的落盘时间戳)。纯类型,运行期导出零变化。
120
+ - **`engineCredentialRequirementOf(answer)` / 型 `EngineProbeAnswer` / `EngineCredentialNeed`**(CC-461 ①;**§122 FX-E2a**):「不带任何凭据探一次引擎」的回答 ⇒ 这台引擎要不要凭据的纯函数判词(零宿主状态、永不抛)。回答三形 `{ ok: true }` / `{ status }` / `{ transport: true }` ⇒ `open` / `requires` / `undetermined`:只有明确的成功是 `open`,只有 401 / 403 是 `requires`,其余一律 `undetermined` —— 别的状态(含 2xx 出现在 status 臂)、传输失败、零臂、多臂互相矛盾、臂值坏形、非对象、原型链上的键、自有访问器(取值器不执行)、敌意代理。判不出就是判不出:既不当 `open`(宿主不能据此以为什么都不用带),也不当 `requires`(宿主不能据此往没证明身份的口上发本机凭据)。根入口 +1 名,型 +2。
121
+ - **`storePostureHeadWord(reading)`**(CC-461 ②;**§122 FX-E2b**):窄面板的句首判词 —— 只在 `storePersistence` 答 `not_durable` 时给词 `NOT durable`,持久 / 没报 / 没观测 / 读数坏形一律 `undefined`(不替没说的引擎断言「不持久」)。整句 `storePostureDoctorDetail` 的不持久段开头与它取同一个常量(字面在源码里恰一处),整句输出逐字节不变;词里不带后端词与降级成因,不随后端词长度被挤掉。根入口 +1 名。
122
+ - **`isSessionIdPathSegment(id)`:会话 id 路径段校验单源**(CC-392,原已知限制;**§122 FX-E4**):会话 id 会被拼进 `/v1/sessions/<id>/…`,`encodeURIComponent` 对 `.` / `..` 原样放行、URL 解析把它们当点段吃掉。判定 = 非空字符串 ∧ 不是点段 `.` / `..` ∧ `encodeURIComponent` 不抛(含孤立代理项);`%2e%2e` 之类字面串编码后不是点段,照常放行。根入口 +1 名;同调点见 Fixed。
123
+ - **`forgetSettledTerminalRow(id)` / `forgetSettledTerminalRowFor(sessionKey, id)`**(CC-332;**§122 FX-F1**;根入口 +2 名):按行 id 摘掉一条已结算的终态行(行帧车道说它结了的行:live 集里还没等到离场帧的终态行,以及已离场、在留存窗内继续展示的保留行),返回是否摘了。仍在飞的行与只由通知推定的退休行不摘(返回 `false`);只动展示面,终局事实台账原样。keyed 变体只动该会话登记的账本。
124
+ - **`engineRewindRefusedNow(option, reading?)` / `decideRewindEngineAction(option, resolved, reading?)` / `previewEngineRewind(option, resolved, reading?)` 与四型 `RewindRestoreOption` / `RewindTargetPosition` / `RewindTargetResolution` / `RewindEngineAction`**(CC-167;接入文档 **§122 FX-H4**;根入口运行期导出 +3):`/rewind` 的两只三端共用判定自终端壳上收。派发闸 `engineRewindRefusedNow`:**此刻**引擎是否明说这一档不能 —— 三档各读 0.82.0 的可用性判官(`both` = 对话锚 ∧ 文件历史、`code` = 只回退代码位、`conversation` = 对话锚),只有 `off` 才拒,没报 / 读不出 / 没观测一律不拒(不灰掉),表外选项答 `false`。引擎侧处置 `decideRewindEngineAction`:选项 × 壳解析好的目标位置 × 能力读数 ⇒ `arm`(带请求键;`both` 的 `restoreFiles` 随纪元位)/ `reopen`(会话根上带 `resumeAt` 的两档:服务端不许回卷到会话根之前)/ `none`(带原因 `not-an-engine-rewind` / `no-engine-turn-to-rewind` / `unresolved`;位置判不了什么都不动);`previewEngineRewind` 就是它的 `kind`(确认屏按这一条消息筛档用)。目标位置的解析(在壳的消息表上找引擎手柄与会话根位置)与执行面(挂预挂 / 重开会话 / 清预挂)留在宿主;缺省读数读当前引擎目标。终端仓里的两份同名副本与本包逐例同答,删副本改调本包即可(**§122 FX-H4**、122d)。
125
+ - **续跑被拒那一族的读口 `refusedParkFromError(failure)`、拍平失败事实型 `RefusedParkFacts`、出句口 `refusedParkContent(input)`、自动腿不放回句 `refusedParkBlockedContent(taskId, lane?)`**(CC-410;接入文档 **§122 FX-D2**):服务端 409 的三个码 —— `checkpoint.unsupported_version` / `checkpoint.walltime_axis_retired` / `checkpoint.config_refused` —— 都拒在认领之前、零写,同一个决定原样再发每次都被同样拒;拒体 `retriable: true` 读作「卡仍待决」,不是「重试会成功」。此前包里只有第一个码的读口(`checkpointUnsupportedVersionFromError`,服务端口吻的一句话),另两码与被拍平的失败事实(没有状态码 / 没有 `extra` 的 `{ errorCode }`)由终端壳内自写了一套判型与两句话。现在包出:读口(SDK 错误对象或拍平事实 → `{ code, field?, stillPending? }` 或 `null`;状态码缺席 / 409 才认;`field` 只读 `config_refused`、token 形;`stillPending`:错误对象上明说 ⇒ `true`、读得到而没说 ⇒ `false`、读不出 ⇒ 缺席,拍平事实只在明说 `true` 时才 `true` —— 不知道不渲 `false`;逐键隔离、读数冻结、永不抛)、出句口(交互车道零 HTTP 路径 / `-p` 车道点名机读码与取消动词;`stillPending === false` 不说「占着会话」;怪形 run id 落 `<run id>` 占位;表外码不上屏)、自动腿不放回那一句。措辞与终端旧实现逐字节同,四处有意差分见 §122b。根入口运行期 +3 名、型 +3 名(只增)。
126
+ - **`readApprovalRememberRefused(v)`**(CC-442;接入文档 **§122 FX-A2**):审批卡上「引擎声明这张卡的本会话放行不会被记住」(`rememberRefused`,服务端 ≥7.116.0)那一位的读口上根入口。入参是任何带这一位的载体(活卡帧 / 待决列表行 / 卡请求 / v1 审批卡信封 / 审批流对应帧);自有键 ∧ 严格 `true` ⇒ `true`,其余 ⇒ `false`(含取值器或代理陷阱抛 —— 永不抛)。包内活卡帧与耐久待决行两条腿调的就是它,私有读口退役;端不再各手写一份窄读。`false` 答的是「引擎没有这句声明」,不是「记得住」:老服务端(≤ 7.115.x)的所有面结构性不带这一位,包里不从强制 / 真人位 / 治理出身去推断。根入口 +1 名。
127
+ - **`rememberRefusalOf(error)` / 型 `RememberRefusalCode`**(CC-486;**§122 FX-A3**):带 `remember:"session"` 的那一发是否被服务端以 remember 专属码拒绝的判官 —— 五码(`remember_not_in_proof` / `remember_requires_binding` / `capability.store_required` / `decide.workflow_remember_unsupported` / `decide.parked_remember_unsupported`)之一 ⇒ 答该码,否 / 读不出 ⇒ `undefined`,永不抛。包内停泊行腿(去掉 remember 重发恰一次纯批准并告知「没记住」)与宿主自己发 remember 的迟到决断路径同用这一只,宿主不再抄五码表;无机读码的 400(不认 remember 键的老服务端)不在这一问之内:停泊腿对它只回退重发、不出「没记住」的告知;机读码读不出(取值器 / 代理陷阱抛)的 400 不回退(读不出 ≠ 没有)。根入口 +1 名,型 +1。
128
+ - **`-p` 车道两句归包**(CC-441;接入文档 **§122 FX-G1 / FX-G2**;根入口 +3 名 `permissionsAllowKeptNotice` / `limitsSupportNotice` / `explicitLimitFlagNames`,型 +1 `PermissionsAllowKeptFacts`):① `permissionsAllowKeptNotice(report, settingsRead, facts?)` —— 设置读不干净、设置文件层 allow 这一发没送的那一句:读报告口 `kept[]` 里 `settings_read_not_clean` 的行数 + 读健康三态 + 宿主才知道的事实(问题条数 / 托管策略还没拿到 / 去哪看是哪个键);`partial` / `unreadable`(含缺席与表外值)/ 托管策略三形各一句,句子不带规则原文,坏形按缺席(报告与事实逐格受保护读,取值器抛 / 已撤销的代理都不逃逸);② `limitsSupportNotice({ observed, version }, flags)` —— 限值旗「这台引擎认不认」那一句:caps 没观测到或版本在支持底线之上不说,低于底线说「可能被忽略」,观测到却没报版本 / 读不懂说「确认不了,照发了」;版本只经 `engineVersionTier`,旗面词只回显固定三只;`explicitLimitFlagNames(parsed)` —— 用户显式给了哪几只限值旗,与 `parseLimitsArgv` 读的旗、句子回显的旗同一张旗面表。0.93.0 删 `engineLimitsSupportWarning`(0.93.0 退出公面)时说的「替代句口」在此交付;终端壳里这两句的判定与措辞可整段删(等 caps 探测落定的有界等待是宿主装配,仍在壳里)。
129
+ - **`displayBody(text, 'delegation_report')` 在委派报告框架支上多交帧头展示槽位**(CC-444;**§122 FX-C3**;型面只增、根入口运行期导出零变化):`DelegationReportFrame` 多四个缺席式可选成员 `status?` / `error?` / `stats?` / `headRest?`(与后台子代 TaskOutput 头部槽位 CC-376 / CC-379 同形;键不存在 = 没读到,不是空串、不是 `undefined` 值),`PROTOCOL_MARKERS` 多一名 `delegationFieldLine`(字段行唯一读法)。读法:帧头行与结果段标签行之间,第一行必须是规范 `status:` 行且是区间内唯一的 `status:` 行 ⇒ `status`(两端修剪);其后区间内恰一条规范 `error:` 行、其后紧跟规范的 `error_kind:` / `observer:` / `stats:` 之一(引擎的铸序)、且它之前没有 `worktree:` 行(那一行里的路径与清理失败的异常文本是未消毒的多行插值,其后形如 `error: …` 的行认证不了是引擎自己铸的;有 `worktree:` 行的报告 error 留在 `headRest`)⇒ `error`,恰一条规范 `stats:` 行 ⇒ `stats`(原样不修剪);其余没被认领的行 —— 前置告警、worktree 行、阻断原因、`error_kind`、内部 id、步骤清单、认不出的字段行 —— 原样按序每行带换行进 `headRest`(帧头行与结果段标签行含部分发现前缀句是已认领的框架行,不在其中;全空白 ⇒ 键不存在)。状态行不紧邻帧头、非规范(键后无空格 / 空值 / 值内带 CR · U+2028 · U+2029 · U+0085)、或区间内有两条以上 `status:` 行(帧头行里的任务描述原样插入、可带换行,描述里的假状态行 / 假 error 行因此读不成槽位)⇒ 四键全缺席、字节全在 `headRest`;`before` / `after` 仍逐字交出、`before + 摘出的一段 + after === 入参` 不变。默认车道(不声明来源)与纯围栏形零 `frame`。此前端自己数行拼(终端按『恰四行 + 借 `taskOutputStatus` 读状态行』判常态),现在读槽位:常态完成 = `status === 'completed'` 且 `error` 与 `headRest` 都缺席(122d)。
130
+
131
+
132
+
133
+
134
+ ### Changed
135
+
136
+ - **面板的五本账收成一条记录**(CC-76;**§122 PR-3**):身份归一漏斗的七张模块级表、常驻集合、running 历史 / ended 账 / 缓着的首见终态行、fleet 投影按会话台账里的周期副本、委派提示的转录锚连接表,收成归约口状态里**一条记录 + 一张别名索引**;代际只有一只判据(`isStaleEngineAgentPanelEnd` 与 `isNewEngineAgentPanelCycle` 是它的两个视图,后者对全部输入逐值不变);面板终态事实只有一个构造器(关卡 / 通知 / 终态 tick / fleet 投影四条腿只交事实)。旧事件口 `subscribeEngineAgentPanel` 与缺席口 `subscribeEngineAgentPanelAbsence` 的投递语义不变(既有两道面板门 273 格原样绿;只在自相矛盾的周期输入与各字段上限被顶满时有边角差别,见本段末条与 KL-661 / KL-662 / KL-664)。
137
+ - **转录锚读面一个键空间**(CC-76;**§122 PR-4**):`getEngineTranscriptId(id)` 按尾段 / 先发布的 UUID / 消费端键一律命中同一条。此前锚按行 id 尾段记、消费端按自己那把键查 —— 子代的 UUID 先上屏(先发布的键为准)那一形读空,委派 prompt 取件腿整条静默。
138
+ - **fleet 账本收通知只按尾段一种比较**(CC-76;**§122 PR-5**):通知 id 在入口归一一次;对裸尾段通知与此前逐值同,复合形通知(`runId childId`)按尾段收齐双生行。
139
+ - `resolveEnginePanelTaskId` 改为纯读(不再顺手续命别名索引的 LRU 序;续命只发生在归约口真走过归一的那一步)。
140
+ - fleet 投影的「上一帧是哪一代」改读记录上的唯一水位(投影不再持周期副本):同一行两帧 `cycleSeq` 相等而 `startedAt` 不同(自相矛盾的输入)时,用量粘性按同一代处理(此前投影自比 `startedAt` 判新一代);投影接受的周期(含缓着的首见终态行)计入水位 —— 比缓行更旧的终态事实不再写进 ended 账(旧事件口照旧递达,行差分口判掉)。KL-661 / KL-662。
141
+ - **终帧拒绝清单「可声称完整」读本流覆盖**(CC-382;接入文档 **§122 KA-1**):判别位 `_sema_permission_denials_absent`(= CC 那条 `permission_denials` 不可声称完整)此前只看账本自己(行读得出 / 判词认得 / 三键齐)。账本只记人审,规则 / hook / 分类器没问过人的拒只有流内那一半看得见,而重连后的流、耐久回放、没交被拒调用表的自建管线上这一半看不全 —— `[]` 加判别位缺席 = 「零拒绝」在最该保守的两形上被说满。现在「可声称完整」须同时:账本侧完整 ∧ 本流见到流首 `meta` ∧ 交了被拒调用表(终帧投影器第三参 `streamSawRunOpen` / `deniedToolNameByCallId`);覆盖读数缺席 = 不知道 ⇒ 判别位落下,清单读作「至少这些」。走 `runStream` 的端零接线,活流上零拒绝的正面事实仍可达;直调终帧投影器的自建管线不交这两格就会拿到判别位(此前没有)。
142
+ - **终帧拒绝清单:账本行遇本地中止与流内补行同一种处置**(CC-382;**§122 KA-2**):同一件事(这次调用最终是本地中止)此前两种处置 —— 流内补行按合并后分类剔中止两词,账本行照列并带 `toolDenialKind: 'cancelled'`,人审拒绝后又被本地打断的调用 `-p` 终帧仍报一条拒绝、还可能让 `_sema_zero_output_denied` 成立。现在两处读同一张合并后分类表:落在中止两词(`interrupted` / `cancelled`)的调用两边都不列(CC:中止不计进拒绝);无 id 的账本行对不上分类表、分类缺席 / 表外词不猜,照列。
143
+ - **`LiveWorkflowController.status().code` 回到型注写的值域**(CC-383;**§122 KA-4**;退役一条读法):型注写「降级时 501 / 404,其余 null」,实现却对任何 `APIError` 都写状态码(401 / 403 / 5xx 都非 null、`degraded` 为假),于是「凭据没被接受」有两条读法(`status().code === 401` 分不出身份类两码;`resolution().kind === 'unauthorized'` 经判官)。现在 `code` 只在降级(501 / 404)时有值(非 null 时 `degraded` 必为真;空列表与造不出 client 仍是 `degraded` 而 `code` 为 null,同前);别的失败状态只留在 `lastError`(`<状态> <句>`)。「凭据没被接受」只剩 `resolution()` 一条读法。读 `status().code` 判 501 / 404 的端零改动。
144
+ - **文件历史一句的判定改读「装配那一拍」的能力位读数**(CC-384;**§122 KA-5**;🔴 型面 BREAKING):`FileHistoryLegNoticeInput.capability` 改名 `assemblyCapability` 并改义 —— 不再是接线回执到时的 `observedFileHistoryCapture()`,而是提交那一拍宿主据以拼声明片段的读数;`FileHistoryDeclarationLedger.declared(requestKey, fact, capabilityAtAssembly?)` 多一个可选第三参,账本多一口 `capabilityAtAssemblyOf(runId)`(同一请求键、同一次绑定;没记 / 没绑 / 键间矛盾 / 那一拍就没读到 ⇒ `{ kind: 'unobserved' }`)。修前:提交时能力探测还没落地 ⇒ 片段口给空片段、引擎照常捕获,回执到时探测已落地 ⇒ 判定的「开关在、端刻意没带」被说话时的读数误满足 ⇒ `not_declared`;现在这一形落 `unknown`(提交时没读到能力位的「没带」不是「刻意没带」)。出句的态不变(仍只有 `not_honored` 一态出句),变的是零句态的判定词与审计行。
145
+ - **持久规则列举错误:`request.query_invalid` 不交游标位时答通用 `error`**(CC-390;**§122 KA-7**;退役 KL-620):`classifyRulesFailure(e, context?)` 在调用方没说这一发带没带游标时(不交第二参 / `cursorSent` 不是布尔 / 读它就抛)不再沿用 0.93.1 的答案 `cursor-stale`(「丢游标重列」对没带游标的那一发永远无效,说不清时说出一个具体因果是编了一个没确认过的事实)。`cursorSent: true` ⇒ `cursor-stale`、`false` ⇒ `query-refused` 不变;本包的列举口永远交这一位。
146
+ - **开发依赖换钉**(CC-524 / CC-540 / CC-521;**§122 UP-0**):`@sema-agent/core` `~7.48.0`、`@sema-agent/sdk` `^18.2.0`、`@sema-agent/settings-schema` `^11.2.0`;peer sdk 地板 `>=18.1.0` 不动。构建期生成表随之重生(值零变化,只换头注版本);生成器读 settings-schema 的 zod 模式改读 zod 4 结构(11.0.0 起依赖 zod 4)。
147
+ - **「本机」判定与 URL 层级式判定改读设置契约的判官**(CC-521 ⑵ ⑶;**§122 UP-2**):`isLoopbackWireUrl` 的主机名判定改读 settings-schema `isLoopbackAuthHost`(鉴权放宽那一只,窄:只认字面),联网搜索 endpoint 的层级式判据改读 settings-schema `isHierarchicalUrl`。两只都以构建期生成物进包(运行期零新依赖)。对 URL 入参逐值不变(上游多认的 socket 形 `::ffff:127.0.0.1` 不会是 `URL.hostname` 的取值)。
148
+ - **models 域的缺省模型与 @ 提及:两代输入归一,影子文档出 10 一代投影**(CC-521 ⑷ ⑸;**§122 UP-4 / UP-5**):settings-schema 10 的 `default` / `atModelAllowlist` 与 11 的 `roles.default` / `atMention` 都经同一只归一器落成一份规范化策略(缺省模型:`default` 在场先于 `roles.default`;@ 提及:`atMention` 在场先于 `atModelAllowlist`,空名单 = 全部可 @),影子 models 文档只出 10 一代的投影(`default` / `atModelAllowlist`,与 0.94.0 同形)—— 支持底线内的本机引擎(服务端 ≤ 7.123.0 内带 settings-schema 10)直接读得懂,11 一代的本机引擎经一次性迁移读成同一份策略。`only` 名单的收窄读设置契约的 `narrowAtMention`(构建期生成物);整张悬空仍原样保留(KL-54);`none`(一个都不许 @)在 10 一代写不出 ⇒ 不写、记 `{ key:'atModelAllowlist', at:'atMention', reason:'unsupported' }` 并出一句 warn(KL-665);`atMention` 读不懂 / 10 形名单不是数组 ⇒ 不写、记 `unreadable`(带 `at`)并出一句 warn(此前 10 形坏值静默忽略);缺省模型从 `roles.default` 归一出来时它不另写;被 `default` 盖住的 `roles.default` 照常按角色写(10 一代里两键各自生效 —— 主任务跑 `default`、`default` 角色解到 `roles.default`;11 一代本机引擎经一次性迁移读成 `default` 那一个,被压过的那一位由迁移自己记回执),悬空照剔、照留痕。`CloudModelRefIssue` 型零变化。Model Hub 删除判定 `computeDeleteWarnings` / `computeDeleteBlockers` 读同一只归一器:11 形 `only` 名单删空的后果句是「一个都不许 @」(10 形照旧「全部可 @」),`roles.default` 指着它报 `default` 拒删(坐标 `roles.default`);`DeleteWarningsInput.doc` 增可选位 `atMention`。
149
+ - **展示出口:被洗的值不再吞掉收尾的结构字符**(CC-528;接入文档 **§122 OL-4**):`displayUntrusted` / `displayUntrustedMarks` 与本包合成终局行 / 结果帧 `errors[]` 共用的凭据面,值恰好止于收尾一段同行代码段的那一串反引号时,那一串留在记号外(`` `api_key=<值>` `` 记号之后收尾反引号照留);值里的反引号一律不截断值(与上一版同);URL 片段末尾**没有配对**的 `)` / `]` 不再算地址的一部分(`[文档](https://h/s?q=<值>)` 的收尾括号、`(https://h/p#<值>)` 的收尾括号留在记号外,配平的括号照旧是地址的一部分)。以反引号起头的值读法不变(整只代码段一枚记号)。
150
+ - **展示出口:「凭据标签 + `token` 方案词 + 值」整只一枚记号**(CC-360;**§122 OL-6**):`password: Token https://h/<值>/x` 此前只遮 `Token`、地址主机 / 路径原样(半洗),现整只一枚记号;`password: Token <值>` / `token: token <值>` 由两枚记号变一枚(遮盖范围不变)。`Authorization: Token <值>` 照旧「方案词留、凭据段换记号」。凭据标签(含 `Authorization:`)的值是 `bearer` / `basic` + 地址时,地址整只一枚记号、方案词留(此前地址按地址豁免、路径原样;`Authorization: Basic <口令>@<主机>` 由 `«redacted:userinfo»@<主机>` 变整只一枚);`bearer` / `basic` + 非地址值读法不变。
151
+ - **展示出口:值前 JSON 转义的制表符 `\t`(字面两字)按分隔读**(CC-528;**§122 OL-2**):标签后的值此前从反斜杠处起读、转义字母 `t` 随值进记号(`password:\«redacted:secret»`),现转义符留在记号外(`password:\t«redacted:secret»`)。紧贴在一枚落单反斜杠之后的方案词是路径段、不读(`C:\repo\basic\test\foo.spec.js` 原样;成对反斜杠之后照认);标签值恰是 `Token`、其后是方案词那一遍会放行的词(`auth_token: Token not found`)时只遮 `Token`、不把后一个词并进记号。
152
+ - **缺省模型改读 `defaultModel`**(CC-465;**§122 WB-2**):`liveDefaultModelName()` 与 `imageVisionOf` / `effortLevelsOf` 的「未指定 ⇒ 缺省」改读 `liveDefaultModelOf`。两行同 id 时改答服务端那一行(此前按 id 形老键 `default` 落第一行);只带老键、不带 `defaultModel` 的目录上改答「不知道」(服务端在本包支持底线以下就恒发 `defaultModel`)。成文改口见 §122b WB 段。
153
+ - `RewindMode` 由运行期元组 `REWIND_MODES` 派生(值不变);`SEAT_CAPABILITY_NAMES` 闭集增员 `rewind`(对 `SeatCapabilityName` 穷举分支的端编译红一次)(CC-466;**§122 WB-6**)。
154
+ - 适配层收口帧撤卡读 `approvalCompleteParked`:`parked: true` 配不是 `expired` 的结局(契约里没有的形)不再算转停驻,撤卡后不再提示「转停驻」(CC-466;**§122 WB-8**)。
155
+ - **hooks 投影读托管层读数**(CC-488;**§122 RD-1**):`hooksForWire()` / `hooksWirePlan()` 在信任门之后、读 `policySettings` 之前读一次 `SettingsPort.managedPolicyReading()`(一轮恰一次),`unreadable` ⇒ 同「读 `policySettings` 抛错」一个成因(`governance_unreadable`)。宿主不接这一口 = 今天的行为一个字节不变。
156
+ - **`reconnectMcpServer` 的注入面就是 sdk 的签名**(CC-432;**§122 RD-4**;🔴 型面 BREAKING,见 Removed):动词按 `(sessionId, server: string, opts?)` 调 —— 第二实参裸串、有 `signal` 时第三实参恰 `{ signal }`。sdk 的 `AgentClient` 实例不经适配直接传入;编译期钉在 `AgentClient` 与 `McpReconnectClientLike` 两个真类型的赋值关系上(sdk 改了签名或有人把注入面改回别的形 ⇒ build 红)。判决臂、体门、回声身份、`unsettled` 读法一字不变。
157
+ - **至多一次判类尺先取快照再判**(CC-319;接入文档 **§122 SA-1**):自愈 steer / cancel 两路、新的 interrupt 与设备换绑发射口共用的判类,先把抛出物上的状态码 / 状态码别名 / 机器码 / 类名四位逐位受保护地各读一次,判类与结局都用这一份读数,不再回读。对真 sdk 错误对象(四位都是数据位)判类逐例不变;只在外来的抛出物上有差:机器码取值器会抛时此前连状态码一起读不出、判「送达未知」,现在只丢机器码、按状态码判(4xx ⇒ 确定没送到);两读两样的取值器不再让判类与结局各说各的。
158
+ - **支持底线抬升:服务端 7.106.0 → 7.115.0、引擎 7.35.2 → 7.40.1**(**§122 RX-6**;sdk 底线 18.1.0 不动):终端附着门槛 7.119.0 已在主干、三端回报的底线均 ≥ 7.119.0;服务端 7.106.0 – 7.114.x 出支持范围,本包不再见证它们(根公面 `SUPPORT_FLOOR` 的值随之变,型面不变)。`engineVersionTier` 的门槛跟着抬:7.106.0 – 7.114.x 由 `engine` 改答 `legacy`;`coreVersionTier` 的下限 7.35.2 → 7.40.1(`coreVersionTier('7.38.3', '1.288.0')` 由 `engine` 改答 `legacy`)。
159
+ - **`isAlreadyResolvedFailure` 收成「门已决」的唯一判据,入参放宽为两形**(CC-354 / CC-346;**§122 SC-1**):端侧判据链上多出的四臂并进来 —— 本地安全停一律不算已决、引擎「门已决」四码(`approval_stale` / `checkpoint.already_resolved` / `not_found.approval` / `not_found.checkpoint`)按码判已决、sdk 把这一族映成的错误类(`ApprovalStaleError` / `NotFoundError`)判已决、续跑启动期错误类不算已决;判序 = 闭集码闸最先 → 四臂 → 其余(门还在 / 续跑启动期失败的码、停驻挪动族、`gone.ask`、文案兜底)。入参除决断腿的拍平结局外也收决断口抛出的错误对象(型为 `unknown`,只放宽);拍平结局上的本地安全停位与闭集码同一读法,文字里的类名不当机读信号。包内两条决断腿:四码此前多经失败文字判成已决,现在按码判;唯一的行为差是 `checkpoint.already_resolved` 的「checkpoint is <状态> — the token is consumed …」那一句在状态不是 resolved 时(文字里没有词表的词)此前判「真失败」、现在判已决(续读流,与终端同)。对终端现行组合逐格同答:拍平结局 770 格、抛出物 1 650 格。
160
+ - `GATE_FAILURE_CODES` 只定义一次(CC-346;**§122 SC-3**):`HitlSafetyCode` 与 `GateFailureCode` 都由这一只元组派生(此前另有一份同员联合靠双向编译钉对齐);根入口同名同值。
161
+ - 子代内容账本的缺省会话槽身份改取 `DEFAULT_SESSION_KEY`(CC-348;**§122 SC-6**;包内件):此前手抄同值一份、靠门对值。
162
+ - 通知终局事实 `getBgTerminalFacts` 的语义成文(CC-348;**§122 SC-7**):它是「最近一条被收下的后台通知说了什么」(历史事实),不是这一行的当前终态 —— 之后的终态行帧不改写它,行的当前终态读账本的行(`project().tasks` / `readEngineActiveBgTasks`)。行为不变,边界由门钉住。
163
+ - **子代尾随 / 子代终报 / `/compact` 的能力位只读总缓存**(CC-344;**§122 SB-1**):三处各自的按地址私有能力表删除,读数只在 `engineCapsCache` 的快照里 —— 有身份键 ⇒ 读快照(未落地就经它 kick 一次、等落定至多 60 s;宿主自己的探测在飞就等它),没有身份键(注入连线不给 `capsBaseUrl`)⇒ 只探这一发、不存。判据不变(尾随 / 终报读数恰为真才开;`/compact` 只有明说 `false` 才答 `unsupported`)。🔴 行为差:true 不再永久固化、false 不再 5 分钟后自己重探 —— 两者都只随 `invalidateEngineCaps` 换代(KL-699);宿主已 kick 的快照直接读,注入 client 不再为这三处另发探测。调用方中止只结束自己的等待,共用探测照常落地。
164
+ - `centerWiring` 键缺席一律读 `none`、`executionLane.isolated` 缺席一律按手分(`no_hands` / `unreadable`)—— 不再拿同体 `store` 在不在分「新一代 / 老一代」(CC-344;**§122 SB-5**):本包支持底线服务端 7.106.0 起 `store` 恒在场,见证对受支持的服务端没有判别力;只在不带 `store` 的回体上有差别(此前答 `not_reported`)。`store` / `sql` 两只读器读 `store` 座的那一只读法不变。
165
+ - **`mcpEngineLegLivenessOf` 对投影后被丢掉的坏行不再答「不在上面」**(CC-325;**§122 SB-3**):段投影器 `projectMcpSection` 丢掉的「名字读得出、`status` 读不出」的行按名记在它产出的那只数组上(不可枚举的符号键;JSON / 展开 / 键枚举与修前逐字节同),两只按名找行的读口把它们算作「在,但读不出」—— 活性由 `not-listed` 改答 `unreadable`,同名一好一坏由只读好的那一行改答 `ambiguous`(与同一份原始行直接喂进来同答);宿主拷贝过的段丢掉这一记号(KL-700)。
166
+ - doctor 句 `executionLaneDoctorDetail` 的「没报」那一句改口:不再说「客户端照旧推断」(0.92.0 起已不推断),改说 baseDir 在引擎报告之前不发(CC-344;**§122 SB-6**)。
167
+ - `engineCapState` 对一份读键就抛的能力回体(宿主探测交来的取值器 / 撤销式代理)答 `unprobed`,不再把异常抛给调用方(CC-344;与本模块其余口「绝不抛」同一条)。
168
+ - **resume 三选卡的 attach 供给位改读 `runningAttachOffered`(严格 `true`)**(CC-536;**§122 RS-4**):`ResumeRunningCardInput.canAttach` 的类型是 `boolean`,按类型传值的宿主行为与 0.94.0 逐字节同;纯 JS 宿主若交非布尔真值(函数引用、`1`),0.94.0 会给 attach、本版不给(KL-717)。
169
+ - **`engineAgentTerminalAfterDropLine(label, status, hasReport)` 的 `status` 型由 `RunTerminalStatus` 收成 `CcTaskTerminalStatus`**(CC-78;**§122 TW-2**;🔴 型面 BREAKING,只对传 `blocked` 的调用方):这一句描述的是 CC 本地任务行的终态,行词表只有 completed / failed / killed;传引擎别的终态词先过 `ccTaskTerminalStatusOf`。句子逐字节不变。
170
+ - **`<task-notification>` 的种子扫描只认通知词域的四个终态**(CC-78;**§122 TW-3**;成文改口):此前按「通知表 ∪ run 行表」的并集判,多认一个 `blocked`。`<status>` 的词域属引擎 `TaskNotificationStatus`;包内与终端写这条 XML 的生产者逐个核过,都不写 `blocked`。`<status>blocked</status>` 的块从此不记「已通知」(KL-714)。
171
+ - **`SUPPORT_FLOOR` 改为声明的构建期生成物**(CC-397;运行期值、`Readonly<SupportFloor>` 型与根入口导出都不变,无 API 变化):`scripts/gen-support-floor.mjs` 把机读声明 `scripts/support-floor.json` 的 `floor` 写成包内 `src/declared/supportFloorDeclared.ts`(一个冻结字面对象,零注释零 import),`src/supportFloor.ts` 只引那一个对象 —— 此前是声明的手写镜像,抬底线要同批改两处、靠门逐项对拍兜着;现在只改声明、跑一次生成器(`node scripts/gen-support-floor.mjs --write`)。新文件进 `dist` 但不上根入口。
172
+ - **能力位读器族读数改从总缓存的落地派生**(CC-344 余项 #238 / #240 / #241 / #245;**§122 CR-1**):29 只 `observed*` 不再各存一张按地址的格表 —— 「这台引擎的某一位能力读出来是什么」= 那一位的投影作用在总缓存当前落地的那份回体上,按「这一次落地」记忆化并逐层冻结(同一次落地两读交同一只对象;同一只回体再落一次、或失效后替代探测落地 ⇒ 重新投影);没有落地(没 kick / 在途 / 探测抛 / 回体非对象 / 被失效)与投影答畸形一律 `unobserved`(每次新铸)。读数型、`observed*` / `project*` 签名与根入口名数不变。**行为差(与 0.94.0 比,两向)**:① 探测闭包里(落地之前)读口答 `unobserved`(此前闭包里先调 `noteEngineCapsFor*` 再读,同一拍就读到);同一拍要用读数的宿主读手上这一发的投影 `project*Capability(caps)`(纯函数),或 `await engineCapsSettled` 之后再读(KL-725)。② 宿主不调 `noteEngineCapsFor*` 也读得到(此前恒 `unobserved`)。
173
+ - **「引擎明说不能回退对话就不补 `/rewind` 出路句」的判官随模块加载接上**(**§122 CR-5**):此前(含 0.94.0)判官挂在 `noteEngineCapsForRewindArchive` 上,宿主第一次喂读数时才接;`noteEngineCapsFor*` 成空调用后不再调它的宿主永远接不上,`offersRewind: { engineBaseUrl }` 对象形下引擎明说无对话锚时仍补出路句。现在判官在包加载时接上、读总缓存的落地(没落地 ⇒ 判不出 ⇒ 照补,同前)。
174
+ - **需要 sdk ≥19.0.0**(peer 地板 `>=18.1.0` → `>=19.0.0`;CC-570;**§122 PK7-1**):🔴 型面 BREAKING / 硬破坏三句 —— ① 本包的型取 sdk 19 的 `AskRowEndingCause` / `ApprovalSettleCause`、运行期闭集与码表取 sdk 19 包根常量(构建期生成),sdk 18 上编译红;② 410 读数位改名(下一条);③ 订阅读口在终帧上结束本腿交给 sdk 19(审批推送腿不再自己截断,见下下一条)。支持底线 sdk 一项同批 18.1.0 → 19.0.0。
175
+ - **410 `gone.ask` 读数 `AskGoneDetail.deniedReason` 改名 `endingCause`,值域由开集收成闭集**(CC-570;服务端 7.124.0 把体键 `deniedReason` 换成 `cause`;**§122 PK7-2**):`askGoneFromError` 按键在场判两代 —— 体上有 `cause` 键即新一代、只读它(读不出也不回落旧键),没有才读旧键 `deniedReason`;两支同一张闭集(sdk `ASK_ROW_ENDING_CAUSES`)、同一条分组律(`DENIED` 只配路由失败那一词,`VOID` 配其余九词),表外 / 组外 ⇒ 缺席(修前 `VOID` 组的表外词原样带)。`askGoneContent` 的句子逐字不变。型面 BREAKING:读 `.deniedReason` 的写法编译红一次。
176
+ - **run 死亡判决码表 `RUN_DEATH_VERDICT_CODES` 取 sdk 19 包根同名常量**(CC-570;**§122 PK7-8**):公面名与值不变;三只单码名与三句出路句钉在 sdk 码表的成员型上(sdk 增删一码 ⇒ 本包编译红)。
177
+ - **店形拒同族的第二码 `memory.scope_home_not_directory` 有了专读**(CC-372;服务端 ≥7.118.0 / 引擎 7.44.0;**§122 FX-E3a / FX-E3b**):一只作用域家被换成链或文件时,所有触记忆店的路由同答 409 + 这一码(此前平铺布局答 500 `internal.memory_control_plane_corrupt`)。会话属主抹除口:`SessionMemoryEraseUnconfirmedWhy` 多一员 `store_home_not_directory`(`SESSION_MEMORY_ERASE_UNCONFIRMED_WHYS` 九 → 十),归「没法确认」档、重发姿势 `needs_operator`(上游不给提交点判别位,与 `store_link_outside` 同读法;不说「什么都没抹」);记忆治理五动词判官 `classifyMemoryFailure`:`MEMORY_VERB_UNKNOWN_WHYS` 多一员 `store_form_refused`(九 → 十),同时收 `memory.target_outside_store`(此前落 `unclassified`)与新码,同为「说不清」。按码读 —— **`detail.form` / `detail.path` 不在 wire 上**(服务端只发码 + 固定句,路径只进运维日志),本包不读它们,即便将来回体多带,结局的文本与诊断位也不带出路径或盘形词。更老的服务端对同一盘形答 500,仍落 `control_plane_corrupt` / `engine_fault`,不变。型面:两个闭集各增一员,对它们做带 `never` 兜底的穷举 `switch` 的宿主编译红一次。
178
+ - **代际判据抽到第 0 层叶子 `cycleOrder.ts`,fleet 账本与面板记录共用一只比较**(CC-555;**§122 FX-F3**;实现收口,不在新增公面名):此前账本的 `raiseCycleWatermark` 与通知退休处对周期号整数直比,与面板的 `cycleOrder` 是同一问的第二条读法,「合法周期号」的整数判也有六份(面板判据自带一份、行投影一处、账本两处、通知消费者给面板终态事实与常驻标清除用的周期身份两处)。现在比较一律经 `cycleSeqOrder`(`cycleOrder` 的数值视图)、合法性一律经 `cycleSeqValue`(≥ 1 的整数,其余整键缺席);两层各自的**状态**不合并(面板记录上的 `cycle` 水位;账本里按任务的有界水位)。公面不变:`isStaleEngineAgentPanelEnd` / `isNewEngineAgentPanelCycle` 仍是判据的视图,型 `EngineAgentPanelCycleIdentity` 同名同形;对全部合法输入逐值不变,坏形(0 / 负 / 小数 / NaN / 非数)按缺席 ⇒ 判不出 ⇒ 现行为。
179
+ - **hooks「本端执行器能不能跑这一只」在没有型表时只剩一种读法**(CC-387;接入文档 **§122 FX-H3**):`shellHookEvents` 报了事件而没交 `shellHookTypesByEvent`(或交的是坏形)时,此前插件条目读「报了事件 = 全型」、设置来源条目读「prompt / agent 本端跑不了」—— 同一个 (UserPromptSubmit, prompt) 两只谓词答案相反。现在三处判定(插件条目的「壳执行」、设置来源条目的执行者、被拿掉条目的 `notRun`)读同一只:没有型表 ⇒ command / http 按事件、prompt / agent 视为本端跑不了;型表在场而没列某个事件 ⇒ 该事件全型(不变)。行为差只在「报了事件却不交型表」的宿主上:prompt / agent 型的**插件**条目由「本端跑」改判「不跑」并进未执行清单(此前静默声称本端会跑);设置来源条目照旧留在请求体上由引擎跑。交了型表的宿主(终端)零差。
180
+ - **门记录对裸帧只读一次;ask 出身词 `origin` 只有一把读法**(CC-395;**§122 FX-A1**):① `gateOutcomeOf(frame)` 与分类词读器 `ccToolDenialKindForToolEnd(frame)` 共用一只记录读器 —— 裸帧每个属性只读一次,门记录视图与「结算段 / 成因 / 分类归属是否在场」三个位出自同一份快照(此前分类词读器先读一遍成视图、再读一遍裸帧取在场;取值器 / 代理 / 会变的帧上两次读到不同值,答出的词对不上任何一拍,现以第一拍为准)。JSON 形帧逐帧同值(对 0.94.0 实现的 ≥ 6000 只纯数据帧池对拍)。② `origin` 全包只有一把读法 —— 自有键 ∧ 非空串 ⇒ 原文字节:门记录视图、放行账与分类器状态读器的观测座此前按原型链取值,与活卡帧 / 待决行 / 卡请求 / 自动车道判定的自有键读法是两套,现统一。行为差只在非 JSON 形入参上:只在原型链上的 `origin` 不再算(此前观测座会把它当成「分类器真跑过」的肯定事实)。
181
+ - **🔴 型面 BREAKING:悬挂 ask 的会话范围必须显式选**(CC-333;接入文档 **§122 FX-G3**):`suspendedSubagentAsks(snapshot, filter)` / `countApprovalsAwaitingDecision(snapshot, filter)` / `createSuspendedAskTracker(filter)` 的 `filter` 由可选改必填,`SuspendedAskFilter` 由 `{ sessionId?: string }` 改为三形恰一:`{ sessionId }`(只该会话)/ `{ allSessions: true }`(显式不分会话)/ `{ identityPending: true }`(本端会话身份还没落地)。修前缺省 / 缺席 `sessionId` = 全体:多会话共用一台引擎、本端身份未落地时,会把别的会话的审批数成自己的、把别人的卡出到自己面前。现在身份未定(显式声明,或缺席 / 空串 / 非串 / 两形同给 / 在场却不合法的位 / 非对象 / 取值器抛 / 已撤销的代理 / 原型链上的位)⇒ 计数三格 `null`(不知道归谁,不渲 0、也不渲全体数)、视图空、跟踪器零 delta;范围随跟踪器构造固定(身份落地后宿主换一只新的)。硬破坏三句:`filter` 可选改必填、联合三形取代 `{ sessionId?: string }`;不改就编译红(`createSuspendedAskTracker()` / `{ sessionId: string | undefined }` / 不给范围的两口);JS 宿主不改:缺席 / `{ sessionId: undefined }` 一律按身份未定处置(计数 `null`、卡不出),不再默认全体。
182
+ - **`SEMA_ATTACHMENTS` 的产品缺省多一键 `todoReminder`**(CC-544;行为面,提交体多一键;接入文档 **§122 FX-G4**):缺省路径(取值缺席 / 空清单 / 单个未登记词 / `default` 词)现在产出 `{ backgroundTasks: true, toolsDelta: true, todoReminder: true }`,缺省表只此一处;引擎库缺省不变(`TaskSpec.attachments.todoReminder === true` 才开),自拼 `attachments` 对象的宿主不经本口、不受影响。要关:`SEMA_ATTACHMENTS=off`(五拼法;整条撤,literal-true 族删键、永不发 `false`)或写不含它的显式清单(`backgroundTasks,toolsDelta` 即此前的缺省)。`default,-todoReminder` 仍被拒(literal-true 族不接受减号),句子指向逐项列清单的写法。
183
+ - **`CONFIG_REFUSAL_CODES` 订正名分**(CC-560 ②;接入文档 **§122 FX-G6**;成文改口 —— 0.94.0「两只准备期拒码进配置拒绝识别表」一条里的「识别表」与「渲染按 `config.` 前缀走既有处置」两处作废):它是已登记成员的冻结清单,**不参与任何判定**;包内零读点,「这是不是一条配置拒绝」只有一条读法 `isConfigRefusalCode`(`config.` 前缀,开集);包内也没有按前缀渲染的代码,那是宿主读谓词的事。成员、值与导出面不变;门钉零读点与表上的注释。
184
+ - **引擎 Bash 结构化位『交出后台』只有一个读点**(CC-418;**§122 FX-C2**;实现收口,行为面只在引擎不铸的一形):此前同一个 `detached` 位有三处读法 —— `wireOutputToBody` 的 T14 排除读 `detached === true`、`structuredToToolUseResult` 的 bash 臂读 `detached === true` ∧ `task_id` 是串(空串也算)、`detectEngineBgShellDetach` 读 `task_id` 非空串,判据字面不同、今天同答只因为引擎不铸空串 task_id。现在三处读同一只私有读点的同一个量(`detached === true` ∧ `task_id` 是非空串;`registerFailed` 只否决登记、卡照渲)。行为差只有一形:`detached: true` 而 `task_id` 为空串 —— 此前 bash 臂渲出 `backgroundTaskId` 为空串的『已转后台』卡(T14 照排除、登记不铸,三处各说各话),现在落普通 bash 卡、T14 不再排除。不带 `detached === true` 的输入与 0.94.0 / 0.93.1 / 0.92.0 发布产物逐位同。
185
+
186
+
187
+
188
+
189
+
190
+ ### Deprecated
191
+
192
+ - **`subscribeEngineAgentPanel` / `subscribeEngineAgentPanelAbsence`**(CC-114;**§122 PR-2**):过渡口,本版行为不变;消费端改订 `subscribeEnginePanelRows`、删掉旧口调用之后的下一个本包版本删除(复核期 0.96.0;退役登记 RL-89 / RL-90)。
193
+ - `sessionReadRedaction` 的布尔读法(CC-540 B;**§122 UP-7**):服务端 7.123.0 起历史读面 assistant `errorMessage` 叶同一只脱敏而位值不变 —— 位为真不答这一叶的射程(KL-667)。服务端换成叶名表之后的下一个本包版本改读叶名表(复核期 0.96.0;退役登记 RL-92)。
194
+ - 影子 models 文档的 10 一代投影(CC-521;**§122 UP-4**):支持底线的服务端一项抬到 7.124.0 之后的下一个本包版本改出 11 一代的形(`roles.default` / `atMention`,`none` 照写)、删 10 一代投影(退役登记 RL-94,按支持底线自动判期)。
195
+ - models 域归一器的 10 一代输入臂(读 `default` / `atModelAllowlist`;CC-521):终端换钉 settings-schema ≥ 11 之后的下一个本包版本删除(复核期 0.97.0;退役登记 RL-95)。
196
+ - 在线目录型上的 id 形缺省老键 `LiveModelCatalog.default`(CC-465;**§122 WB-2**):本包读口自本版起不读;三端删掉对它的读点(改读 `liveDefaultModelOf`)之后的下一个本包版本从型上去掉(复核期 0.97.0;退役登记 RL-107)。
197
+ - **`isAlreadyResolvedGateReason` / `isGateStandingErrorCode` / `isCodeClassifiedGateFailure` 三只拼装件**(CC-354;**§122 SC-2**):只为端自拼「门已决」判据链而在根入口;本版起端整只换读 `isAlreadyResolvedFailure`。终端删掉自拼的组合、桌面端会话宿主的扫词读点改调 `isAlreadyResolvedFailure` 之后的下一个本包版本退出根入口(包内照用;复核期 0.97.0;退役登记 RL-103)。
198
+ - **`recordBgTerminalFacts` 根入口写口**(CC-348;**§122 SC-7**):通知终局事实的写者只该是 fleet 账本收通知那一臂;三端零写者。下一个本包版本退出根入口(包内照用;复核期 0.96.0;退役登记 RL-104)。
199
+ - **fleet 账本兼容入口 `ledger.applyFrame`**(CC-348;**§122 SC-8**):与 `issueStream()` 的 ingress 并存使「有没有活流」两读。终端改走 ingress 之后的下一个本包版本,兼容入口与 `connected` 判活读法一起退(复核期 0.97.0;退役登记 RL-105)。
200
+ - `resetManualCompactCapability()`(CC-344;**§122 SB-2**):本版起 no-op —— `/compact` 的能力位不再有私有表,失效只走 `invalidateEngineCaps`(对总缓存零副作用,不替调用方失效别的能力位)。消费端在引擎温切处删掉这一行调用之后的下一个本包版本删除(复核期 0.96.0;退役登记 RL-101)。
201
+ - **29 只 `noteEngineCapsFor*`**(CC-344 余项;**§122 CR-2**):本版起空调用(读数只从总缓存的落地派生,宿主探测闭包里不必再调;对任意入参不抛)。消费端删掉这些调用之后的下一个本包版本删除(复核期 0.96.0;退役登记 RL-113)。
202
+ - **29 只 `__reset*ReadingsForTests`**(CC-344 余项;**§122 CR-2**):本版起只清读器自己的记忆(下一次读按落地重新投影);要清读数改调 `__resetEngineCapsCacheForTests`。消费端删掉这些调用之后的下一个本包版本删除(复核期 0.96.0;退役登记 RL-114)。
203
+
204
+
205
+ ### Fixed
206
+
207
+ - **审批推送腿在排空终帧上结束本腿、按梯重开**(CC-558 / CC-570;**§122 DR-1** / **PK7-9**):此前对 `error` + `draining` 那一帧 `continue`,把「结束本腿」交给了 sdk `approvals.stream` 资源层的重连环(帧解析成功即清失败计数、流尽即重连 —— 排空帧本身就是一帧,对每次都回排空帧的对端是每拍一次 GET 的慢循环);与 sdk 19 搭配时排空收场又被当成一次推送失败、按 `streamRetryMs` 才重开。现在本腿在排空终帧上结束 —— 由 sdk ≥19 的 `approvals.stream` 结束(交出终帧之后自己结束本腿、不重连;本包不另设第二份终止判定),推送腿记下「本腿以排空帧收场」、回落轮询不盲、按三端同读的 `streamDrainingDecision` 梯(1 / 2 / 4 秒,三次)重开推送腿,排空不计 `streamFailures`,三次仍在排空按一次常规故障处理(有界)。
208
+ - **服务端排空时 run 事件流按梯重开、不再停在排空帧上**(CC-597;**§122 DR-1a**):sdk 19 起 `runs.events` 在排空终帧上结束本腿、不再自己重连 —— 此前决断后续读的那条 run 事件流(`bridgeAskUserQuestionGates`)把排空帧原样交给宿主后就收场,这一轮停在那里;无头续收(`withHeadlessR1Reconnect`)把它当成一次撕裂,零等待重开,连着两次就耗尽重连预算、落「引擎空闲」那句判死。现在两条腿与审批推送腿、workflow 活动流读同一只排空收场账:以排空终帧**正常结束**的腿按 `streamDrainingDecision` 梯(1 / 2 / 4 秒,三次)从已读到的最后一个事件重开同一条 run —— 不重发决断、不计连接失败(无头腿不扣重连预算、不探活)、排空帧不交宿主;梯尽或 run 句柄未知 ⇒ 按断线收场(决断腿干净结束、不铸终帧、不抛,由宿主对断线的既有处置接手;无头腿先查 run 行,取得到终局即收尾,否则进它自己的重连预算);调用方已停 ⇒ 中断出口。排空帧在任何出口都不交宿主。抛出仍按断线处理。资源层自己重连的 sdk(18.x 在排空帧之后流不结束)上不会多开一条流。同批:workflow 活动流在排空帧之后又抛出时按断线处理(1.5 秒重连),此前也走排空梯。
209
+ - 子代 UUID 先上屏的那一形,详情页「委派 prompt」不再恒空(见 Changed 第二条)。
210
+ - **短命子代的终态事实按它的 UUID 先到、终态行后到**:此前那条终态行被当成历史行永远缓住(两个订阅口都看不到这一行与它的最终用量);现在行自己的转录锚在本进程递达过终态事实 ⇒ 不是历史行,照发行帧(带最终用量)与这一行自己的终态(**§122 PR-6**)。
211
+ - 直接发布口送来的**可证更旧一代**的行帧不再把周期水位回滚(此前随后的前代终态会被当成当代);行差分口对它零差分,旧事件口照旧过境(**§122 PR-6**)。
212
+ - **计划审阅卡上的自由文本反馈不再丢字**(CC-557;**§122 PF-1 / PF-2**):用户在计划卡上写的反馈(`AskAnswer.note`)此前从不被读 —— 空 `selected` 加 `note` 被判成 `dismissed`(等同 Esc),选「No」也从不带理由,引擎侧「审阅人备注」通道没有生产者,写下的字没有上线。现在 `planReviewChoiceFromAnswer` 读 `note`:恰一题、`selected` 为空或恰为 No 标签、`note` 非空白 ⇒ `{ decision: 'reject', reason: <note 原文> }`;选 Yes 又写了字 ⇒ 照旧批准(`note` 不改决定、不上线,只留一行 debug 日志,日志不含正文);空 `selected` 且无 `note`(Esc)与矛盾多选 / 多题 / 不在本卡标签的作答仍是 `dismissed`(`note` 救不回它们)。首呈卡与重开卡两个作答口把理由随决断递交,经审批拒因同一只窄化器(trim / 空白不落 / 超 4096 字符截断),请求体键序 `decision` → `reason` → `permissionModeAfter`;不带 `note` 的作答请求体与 0.94.0 逐字节同。型面只增:`PlanReviewChoice` 的 reject 臂多可选 `reason?: string`;`ReopenPlanReviewOpts.deliverDecision` 多可选第三参 `reason`(有反馈时才传;没有反馈时调用形不变)。宿主记账口 `notePlanReviewAnsweredIfDecisive` 把非空白 `note` 的自由文本作答算作决断性作答。
213
+ - **后台视图 assistant 源的 401 与 fleet 源同判**(CC-383;**§122 KA-3**):同一个服务端铸点(全局凭据门的 `401 auth.unauthorized`)此前在 fleet 源落 `unauthorized`、在 assistant 源落 `unavailable` —— 配了服务凭据而客户端没带对时,后台视图两源一个说「凭据没被接受」、一个说「连不上」。现在 assistant 源调同一只判官 `isReadCredentialRefusal`、同一个先后(面不在的 `not-configured` 先于凭据);caps 探针自己也 401 时不改写这一判。两源对同一抛出物同答;`BackgroundSourceHealth` 的 `unauthorized` 一员不是新增(0.86.0 起),只是 assistant 源现在也会落它。
214
+ - **print 车道 `tool_use` 块不再带三只非 CC 键**(CC-385;**§122 KA-6**;根入口 +1 名 `stripToolUseSideChannels`,即三键的唯一摘除口):`-p --output-format stream-json` 出帧的 `tool_use` 块此前带 `label` / `eventId` / `parentToolCallId`(`tool_start` 臂为交互面桥铸在块上的侧信道,桥负责在渲染前摘掉;print 车道没有桥)。现在 print 车道(`EmitContext.lane === 'print'`)出帧前经与交互面适配层同一只摘键函数,块只剩 CC 形 `type` / `id` / `name` / `input`;子代归属仍在信封层(`parent_tool_use_id`、`message.id`)。交互面(车道缺席 / `'interactive'` / `'utility'`)块上照旧带这三键。入参对象不动。
215
+ - 控制面按 settings-schema 11 发 models 域时,@ 提及限制不再被影子文档静默丢掉(0.94.0 只认 `atModelAllowlist`,读不到 `atMention` ⇒ 本机引擎上谁都能 @;**§122 UP-4**)。
216
+ - **展示出口凭据网补漏七形**(CC-528 / CC-360 / CC-414;帖 [9734] / [9753];接入文档 **§122 OL-1 – OL-7**;只多遮):① `Bearer (<值>)` / `Bearer [<值>]` 与标签后的 `api_key=(<值>)` / `api_key: (<值>)` —— 括号里恰一只裸值且紧跟配对收尾 ⇒ 遮括号里那一只(括号里是占位形 `(API_KEY)` / `(your-token)`、有空白、`[文字](` 链接形照旧原样);② `Bearer\t<值>`(JSON 转义制表符作分隔)此前整形不认;③ 没有任何标签的裸不透明值(`key <值> is invalid`、解析器报错里引出的原体)按长度 + 字符三类 + 香农熵 + 段形判,十六进制哈希(含大小写混写)/ UUID / Base64 图片头 / 完整性摘要 / 服务商对象 id / 常见标识符不动;④ 关联数组箭头 `'api_key' => '<值>'`(引号包住的标签、同一行的引号值);⑤ 凭据标签(含 `Authorization:`)之后「方案词 + 地址」的地址主机 / 路径 / 查询:`password: Token https://h/<值>/x` 整只一枚,`password: Bearer https://h/<值>/x` / `"token": "basic https://…"` 方案词留、地址整只一枚(无标签的地址与说明句照旧);⑥ 粘在下划线 / 连字符之后的已知前缀凭据(`mcp__x__sk-ant-<值>`、`x_sk-ant-<值>`、`MY_ghp_<值>`,URL 路径段同判)—— 遮盖从前缀起,标识符前半截留着;`mcp__x__skill` 一类普通标识符不动。`Parsing error: Unexpected token =>` 一句与上一版同字节。
217
+ - 两行模型同一个上游 id 时,缺省模型(选单打勾、看图 / 思考档的未指定形)不再落到第一行,改落服务端说的那一行(CC-465;**§122 WB-2**)。
218
+ - 座位上渲染端送的两只子代载荷位(`forwardSubagentEvents` / `retainSubagentSessions`)有了判官(此前没有包侧判据,宿主自写的入站门不读它们);座位目录不再丢掉没有 `id` 的模型行(CC-465 / CC-466;**§122 WB-4 / WB-5**)。
219
+ - **托管层读不出时 hooks 不再照全源投**(CC-488;**§122 RD-1**):见 Added 第一条。受影响的宿主只有「托管层读坏时按源读口返回 `null` 而不抛」的那一形;接上 `managedPolicyReading()` 并在读不出时报 `unreadable` 即得;不接的宿主不受影响(KL-686)。
220
+ - **sdk 客户端直接传给 `reconnectMcpServer` 时请求体不再是 `{"server":{"server":"alpha"}}`**(CC-432;**§122 RD-4**):修前注入面把 `{ server }` 对象当第二实参交给 sdk 的 `mcpReconnect(sessionId, server, opts?)`,sdk 把它整个序列化成 `server` 的值;JS 宿主绕过类型检查直传 sdk 客户端会发出一个被服务端拒绝的请求体。现在体恰为 `{"server":"alpha"}`。
221
+ - **models 域归一器对「读到一半抛」的答法**(absence-fold 诚实化;**§122 UP-4 / UP-5**):此前 `modelsPolicyOf` 的 catch 折成空策略(= 「文档没说」),两处读者看不出差别 —— 云投影把缺省模型与 @ 提及两键静默不投、零留痕零句,Model Hub 删除判定读成「没人指着它、可以删」。现在读抛 ⇒ `{ unreadable: true }`:云投影两键不投且各留一条 `unreadable` 痕(@ 提及那条 `at: 'models'`)并各出一句 warn;删除判定产一条 `unreadable` 阻断(fail-closed 拒删,与「调用方没读到文档」同一口径)。JSON 回体 / 盘上 JSON 上不可达(访问器 / 代理陷阱 / 撤销代理才到),敌意形钉行为;`CloudModelRefIssue` / `PoolDeleteBlocker` 型零变化。
222
+ - **Bash 结果「按退出码算不算失败」两车道同一只判定**(CC-347;**§122 SC-5**):`-p` 车道此前自带正则只锚首行 `exit code: N`,交互车道反解完整框架 —— 负退出码(`-p` 判不出)、首行之后不是框架的文本(`-p` 判失败)、structured 只带 `exitCode`(交互车道退回反解正文)三形两车道答案相反。现在两车道与结构化投影都读同一只退出读数:structured 是 bash 形且 `exitCode` 是数 ⇒ 权威;否则只认完整框架;良性注记在场不算失败。交互车道的正文两槽来源不变(structured 带 stdout / stderr 串才读它,否则反解框架);正文不是框架而 structured 带非零 `exitCode` ⇒ 按失败卡渲原文。
223
+ - **已取消的后台任务通知不再挂成「在跑」、不再被结成成功**(CC-78;**§122 TW-3**):`task_notification` 帧的终态判据此前借 run 行那张表(有 `blocked`、没有 `cancelled`)⇒ 一条 `cancelled` 通知既不收面板行、也不发 `notification_terminal`,行挂成「在跑」;后台子代通知(`bg_notification` 与空闲期补发)的 `isError` 此前借 run 行否面谓词 ⇒ `cancelled` 答 `false`,面板把一条已取消的子代结成**成功**。两处改读通知面属主谓词:`cancelled` 收行且 `isError: true`、发 `notification_terminal`。`blocked` 不在通知词域里,通知帧上读到它不再当终态。
224
+ - **活卡在屏时,同一只审批不再从耐久路开出第二张卡**(CC-593;**§122 XH-1 / XH-2**):单一持有登记里活卡与停驻行两种键构造上不相交,「同一只审批同时只有一个持有者」只在各自那一路内成立 —— 活卡在屏期间同一只审批从耐久路再进来(包内停驻行审批口 `surfaceFsApprovalAndDecide`;或宿主在现场答复没及时收口后走的耐久决断路),会开出第二张卡,工具行停在等待、残留的停驻卡挡住后续审批卡。现在停驻行审批口在取件之后、持有之前按「同 run + 同被门住的调用」查活卡登记:活卡在屏 ⇒ 等它放手,结算了就交回它的结局(`joinedInFlight: true`,零卡零决断),没结算就重新取件、照常持有;宿主自己的耐久路经 `joinApprovalHolder` 读同一只判定。射程 = 走「现场卡 → 耐久决断」回落的调用路径;按帧型显式选路、没有定时回落的宿主不经这一处,行为不变。
225
+ - **能力位读器族不再执行宿主能力回体上的取值器**(CC-516;**§122 CR-3**):此前 28 只 `project*Capability` 对宿主交来的能力对象按普通取值读 —— 取值器(`get`)会被执行,手造的「取值器返回 `true`」对象读成 present,而头注写的是「只读自有数据属性」;取值器抛的处置各读器各有一说。现在全族(含 `projectMcpReconnectCapability`、`store` 座的共用读法与候上游的附件席位占位)每一次读(顶层与各层段、数组的 `length` 与逐项)经同一只自有数据描述符读:自有访问器 ⇒ 整格畸形(读成 `unobserved`;`sql` 的 `store` 座读不出 ⇒ `not_reported`;逐位读器 `rewindArchive` 上也是整格畸形),取值器零执行;只在原型链上的键 ⇒ 族规「没报」;读描述符本身就抛(代理陷阱 / 已撤销代理)⇒ 同一结局、不外抛。**收紧方向**:服务端的真回体是 JSON、没有访问器,读数不变;只有宿主手造的带访问器对象(测试夹具 / 自建适配层)从 present 变成畸形或缺席。
226
+ - **座位门不再按普通取值读载荷**(CC-525 ③;**§122 CR-4**):座位的 `check*`(会话状态 / 设置状态 / 发送请求 / 能力表 / 各 ack 等)此前按普通取值读,取值器可以在「过门」与「宿主结构化克隆送出」之间给出两个不同的值(实测 `{ get extra() { this.sessionId = 42 } }` 过门、克隆出 42)。现在每只 `check*` 的每一次读经同一只自有数据描述符读,外包一层先扫整棵载荷树:任何一层有访问器(含不被校验的透传位)⇒ 拒,拒绝的 `field` 带点号路径,`reason` 为 `must be a plain enumerable data property (accessors are refused and never executed)`;被校验的位不可枚举 ⇒ 拒(克隆只带可枚举自有位);读就抛(代理陷阱)⇒ 拒,门自己永不抛;`checkSendMessageRequest` / `checkSeatCapabilitiesState` 里各自内联的描述符读收进同一只。**收紧方向**:宿主若用访问器或不可枚举属性拼座位载荷,本版起那一发整条被拒;函数引用与覆盖表登记不变。
227
+ - **中断撤卡撞「那一问已经不在等了」不再出「session may stay locked」告警**(CC-561;**§122 PK7-6**):中断时把挂着的那一问结算成一次拒绝,那一发若收到带「已结束」成因词的 404(行上成因十词,或 ≤7.123.x 的 `voided` / `denied`;取消撤卡、停驻换卡都带词)、410 或「已被决」的 409,与本地「取件时已不在」同归良性、零告警 —— 判定建在决断拒收分类之上、只在 404 上多要成因词(修前观察器只认本地那一形,同一只 404 在分类器里是「已在别处结算」、在这里是 10 秒的假告警)。404 不带成因词或成因是 `unknown_or_other_replica`(本副本不认识 —— 那一问可能在别的副本上仍在等)⇒ 照旧出句(没有结束的证据就不当结束);真失败(409 别的码、5xx、422、超时、网络断)照旧出句。
228
+ - **决断口问答载荷不合法不再被说成「待决动作变了」**(CC-570;**§122 PK7-4**):更早服务端借绑定不符的码发这一形,修前本包铸成绑定不符的安全停;现在两代都原样上抛、失败文字补一句「答案不合这一问,改了再发」。绑定席与无 `field` 的同码形照旧铸安全停。
229
+
230
+
231
+
232
+
233
+ - **「本会话放行」那一发被拒后不再自动补发一次纯批准**(耐久审批腿):带 `remember:"session"` 的决断被拒时,只有服务端明说不接这把键(remember 专属五码,或不带机读码的 400 —— 不认它的老服务端)才去掉 remember 再发恰一次;其余拒绝(任何 409 —— 含问答载荷不合法的两代形、7.124.0 起技能清单变了要先拒再激活的 `resume_outcome_invalid`;404 / 429 / 5xx)恰一发、结局 `failed` 带机读码,与纯批准那一发失败同一处置。修前会用人对这张卡给的答案自动再发一次纯批准。
234
+ - 控制面发的 `atMention` 多带一把键时不再整只读不懂(修前 ⇒ 影子文档不写名单 = 本机谁都能 @、删除提示不出):只读 `mode` / `models`,多余键忽略,与设置契约同读(**§122 UP-4**)。
235
+ - 先按 UUID 上屏、后来复活的后台子代,详情页「委派 prompt」不再显示另一代的 prompt:转录锚写在这一代的行所在的键上(认领它的 UUID 已结 ⇒ 写尾段自己),读口不再把被认领尾段上的下一代锚读给前一代(**§122 PR-6**)。
236
+ - 面板归约:一条终态 / 一次锚读空的成本不再随会话历史线性增长(「哪些尾段被这把 UUID 认领」改读记录上的反向索引;找缓行只在有缓行时扫)(**§122 PR-6**)。
237
+ - **会话 id 是 `.` / `..` 时,请求不再被改投到别的路径**(CC-392;**§122 FX-E4**):修前只有抹除口一处本地拒点段;`readSessionMemoryStatus` / `fetchMcpPanel` / `reconnectMcpServer` / `stopEngineSessionBackground` / `readEngineAgentRegistry` / `fetchDelegatedPrompt`(转录锚)经 sdk 动词拼路径都不防(`..` 实发到 `/v1/background/stop`)。现七个调用点(含抹除口)同调 `isSessionIdPathSegment`,点段一律走各点既有的坏入参出口、不发请求:`failed` / `undefined` / `invalid` / `unavailable`·`bad_input` / `unavailable`·`read_failed` / `skipped`(没有可用的转录锚,与无锚同出口)/ `not_sent`·`bad_input`;不新增结局词。抹除口原有的点段与孤立代理项本地拒读数不变。
238
+ - **被用户停掉的子代不再在页脚挂满一分钟**(CC-332;**§122 FX-F1**):`task_remove` 不带 `removeReason`(引擎已结算,区别于陈述级的 `orphaned`)而留存池里这一行是行帧车道结算的 `killed` 时(含行帧先报别的终态词、随后被通知升级成 `killed` 的行),账本当场摘掉它,不再挂满 `TERMINAL_RETAIN_MS`(转录里已写「stopped by user」而页脚还挂着计时停住的一行,读起来是「没停掉」)。成文边界不变:离场不是终局证据,本规则只提前结束一条已是终态的保留行的展示,不据离场 settle、不改状态词、不碰终局事实台账。completed / failed 的行照旧走保留窗;陈述级离场(含表外原词)、前代迟到的离场(live 行已是更新一代,或池里条目比离场帧所报的代际更新)、通知车道推定的退休行(在飞读面按在飞计的保守默认)都不摘;离场先于终态帧时不留任何记忆(之后到的终态帧照常入池)。终端过渡件 `withoutSettledStoppedRows` 在换钉后可删。
239
+ - **「会话已有在跑的 run」的拒收帧判别只剩公面判别口一条读法**(CC-391;**§122 FX-D1**):`activeRunBusySignal` 此前对服务端幂等重放臂(宿主对两次提交钉同一把 `Idempotency-Key`、撞上在飞那一发时,服务端把原始 409 冲突体逐字放进 `done.result`、带 `replay: true`;冲突体没有 `status`)答 `null`,投递账本却另加了一臂特判认它 —— 同一件事两条读法。现在公面口自己认这一形(`result.status` 缺席的非数组对象,仍按 `errorCode` / `activeTaskId` 两腿判;`replay` 位不参与判别,缺席 / false / true 同答;`status` 是别的取值、数组、无 busy 位 ⇒ 仍 `null`),账本只调它一次,特判臂删除,账本行为零变化。**升级后行为差**:读公面口的宿主(409 改写、自愈分诊)从此在重放臂这一帧上也得到非空信号。
240
+ - **宿主回调「同步抛 + 异步拒绝」的隔离只有一只实现**(CC-562;**§122 FX-D3**):`/compact` 手动压缩的结局接收口 `onSettled`(0.94.0 起)只包了同步 `try / catch` —— 宿主传 `async` 函数(或返回被拒 promise 的函数)时,拒绝无人接,成了未处理拒绝(Node 缺省整进程崩);而同一个包里的 `onDecideOperation` 观察者早有完整守卫。现在两者与另外五处手写的同形守卫(审批帧路由的 `onReplayedApproval` / `onToolApprovalOutcome`、fleet 账本的 `onTaskRemoved` / `onBgNotificationAccepted`、子代尾随的 meta sink)收成包内一只守卫:回调同步抛、返回的拒绝、读 `.then` 就抛、留痕口自己失败,都只留一行 debug 痕迹、不外溢;痕迹行前缀逐字节不变。同批补上留痕口本身的一个洞:宿主装的日志口 / 探针口是会拒绝的 `async` 函数时,它返回的拒绝此前被诊断口出口丢掉(未处理拒绝),现在同样只丢那一行诊断(`hostLog` / `hostProbe` 的全部调用点受益)。公面零变化。
241
+ - **决断出口对敌意抛出物一律走兜底句**(CC-560 ①;接入文档 **§122 FX-G5**):审批卡 approve · deny 与提问卡三条出口,遇 `message` 取值器抛 / `toString` 抛 / 已撤销的代理 / `status` · `errorCode` · `name` 取值器抛的抛出物,此前把取值器自己的报错拼进句子(「decide(approve) failed: Error: …」):决断桥的失败分类(绑定不符 / 瞬断 / 超时)在 catch 块里无保护地读抛出物,取值器一抛,那一次读的报错替换了原抛出物。现在分类对每一格的读取受保护、逐格互不连坐,判型(`instanceof`)同;原抛出物原样上抛,出口落抛出物自带的 `message` 或固定兜底句,原抛出物进宿主日志。方向不变(判不出一律非瞬断):`status` 读不出 ⇒ 不重试;别的格读不出 ⇒ 这一格不当证据(`name` 读不出而 `code` 是瞬断码 ⇒ 照旧重试一次)。同批 `readDecideCurrentPending` / `readWireErrorCode` 两口按「读不出即 `undefined`」的合同补上受保护读;出口读安全停码(判型过了不等于实例上的 `code` 读得出)同受保护。0.94.0 同条「取值器抛 ⇒ 落兜底句」的承诺在这三条出口上此前不成立(§122z DC-6 ②),本版成立。
242
+ - **子代读面的结果段标签行不再对特制输入平方回溯**(CC-400;**§122 FX-C1**;既有,不是 0.92.0 的 CC-376 / CC-379 引入):`PROTOCOL_MARKERS.taskOutputResultLine` 带 `m` 旗标,`^` 认 LF / CR / U+2028 / U+2029 四种行起点,而括注类只排 LF —— 子代输出是不可信文本,『行分隔符 + `--- result (`』重复 8000 次(约 104 KB)的输入让每个行起点都把括注扫到整串尾再回溯,读口卡 2.5 – 7.8 秒。现在括注里的 CR / U+2028 / U+2029 / U+0085 照旧是括注原文(`resultNote` 原样交出),只有『行终止符紧跟 `--- result`』处括注到此为止 —— 那里就是下一个行起点,一个起点的括注扫描越不过下一个起点,线性、同输入毫秒级。与旧形只在『括注吞下另一个行起点』一类输入上答不同(引擎不铸;旧形吞下它、新形不认这一行,答 null 或更靠后的标签行);既有语料逐例同答。🔴 **源码字节换新**:终端的协议字面登记按这条正则的整条字节钉住,换钉同批要更新那一处登记(122d);同族普查(同文件带 `m` 旗标的另三条与无旗标五条)实测线性、无改动。
243
+ - **chrome 臂 `bgshell_register` 的 `laneProof` 与同卡信封取同一个值**(CC-418;**§122 FX-C2b**):此前恒 `{ lane: 'main' }`,带父调用 id 的子代 Bash / Monitor 的登记也标 main。现在与同卡 tool_result 行信封上的 `parent_tool_use_id` 取同一个值(收卡帧优先、开卡块兜底):缺席 ⇒ `{ lane: 'main' }`,在场(含空串)⇒ `{ lane: 'subagent', parentToolCallId }`;登记体与铸不铸不变。三端消费口都不按 lane 过滤这一臂(122d)。
244
+ - **已结算的审批再来一帧重复帧,不再重开一张可答的旧卡**(CC-526;**§122 FX-21**;基线 0.93.1 即如此):流内审批帧腿此前只对「带账本位置且不在本段 preamble 里」的帧过判定口;一问已经结了(人答过 / 卡被中止且已发中断拒绝 / 引擎收口帧到过)之后,同 `approvalId` 再来一帧 —— 不带账本位置的(按协议恒当活的)、或带位置而 preamble 又列着它的 —— 都当新问题再呈一张卡,用户答了服务端回 404,屏上落「没落定」一句。现在帧腿在判之前先问「本桥已见这一问的结局吗」(判定口新增第 0 条,与位置键 / preamble / 清单无关):已见 ⇒ `decided`(新可选键 `settled`:`answered` / `interrupted` / `closed_by_engine`,与崩溃收敛的 `cause` 互斥),不呈卡、不发决断、不读清单、不上屏通告,帧经 `onReplayedApproval` 交宿主一次。只记确定的结局:宿主撤卡、respond 抛(没落定)不记,重复帧照旧开卡;结局首个为准、不随换连接清、有界 4096(被挤出的问回到修前行为)。`replayedApprovalSentence` 为 `settled` 加三句(只说「那一问早已有结局、这一份重复的没当新问题呈、没发决定」,不说批还是拒)。型面只增:`ReplayedApprovalDisposition` 的 `decided` 臂与 `ReplayPendingBasis` 各多一把可选键 `settled`,公面运行期导出零变化。射程见 Known limits(KL-744 / KL-745)。
245
+
246
+ ### Gates
247
+ - **dist-comments 门:模板字符串 `${}` 之后的尾段按扫描器既定用法重扫**:此前尾段里的 `//` / `/*` 会被数成注释(本版生成表里一处 `` `${u.protocol}//` `` 被误判、门假红);两格自证反钉(尾段里的 // 与 /* 不算;模板串之后的真注释照算)。只改门,产物零变化。
248
+
249
+ - `run-retirement-ledger-test` 加「挂链首」臂(CC-565):登记行可带结构位 `blockedOn { ticket, landsIn, ruling }`;到期行带合形 blockedOn 且 ruling 正文引用同一裁定号 ⇒ 不计入到期红,改打 `BLOCKED-DUE` 可见行并由 C′ 格限 ≤ 10 行(本版清账普查实得挂链首十行;超过 = 台账在用挂链首当延期,上板申请裁定);裸挂(缺裁定号 / 裁定号不在 ruling 里 / 票号坏形)⇒ 合形红照旧。自证四格(S2′–S2⁗)。首例 RL-35(server 7.124.0 双生行带 workflowRunId)。
250
+ - 新门 `run-panel-reduce-test.mjs`(包侧投影门三件之一;64 格):公面闭集 / 纯(同入参同差分且不改入参、不读时钟、两份状态不串、重放零差分、值级 import 闭集、零可变模块态)/ 代际单判据(网格逐值 + AST:周期两键不进任何比较)/ 终态单构造(AST:面板终态事实字面量与 `terminal` 字面量全包各恰一处)/ 一个键空间(状态键闭集、面板族可变模块态只在宿主持有处、锚两向命中、账本通知单比较)/ 端到端十二组序列(两 lane 交错 / 先发布的键 / 复活 / 重连缺席 / 迟订阅快照 / 短命子代用量两序 / 历史行 / 缺席不伪 0 / sweep 射程 / 过渡口与差分口分工 / 有界淘汰 / 快照成因)/ 发布前复核找到的四条序列(前代终态先到而新一代行后到、UUID 终态先到而行后到、更旧一代的行帧、旧口回调里重入发布)。
251
+ - `run-integration-doc-freshness-test` ②a:冻结段(已发段)里引到的、本版删掉的文件改由活段「已删文件名录」一行补偿(与 ⑧c 已退役名的补偿格同形;活段裸引照旧红,名录行引的坐标冻结段里没有 = 死行红,自带判别力自证);②b 入库方向只问在盘的坐标。
252
+ - `run-absence-fold-census-test` ⑤ 与 `run-terminal-status-vocabulary-test` D5 的站点反钉跟着投影判定搬到 `panelReduce.ts`(原文件改为薄壳后仍钉零 `isError: false`)。
253
+ - 新门 `run-sdk-witness-compile-test.mjs`(CC-421;**§122 GT-1**):见证集里版本不低于 peer 地板的每一份 sdk(地板读自 `package.json`,见证集与公面门、地板门共读同一张表)各编译一遍 `src`,零诊断为绿 —— 换钉、来新探针、型面变化的当拍就会响,不再等下游装上新 sdk 才暴露。每一份各带三类尺子格:Program 含磁盘上每个 `src` 文件、`src` 里每条 `@sema-agent/sdk` import 真落在被测的这一份里(不回落到开发依赖)、内存里植入的两处旧形(`ControlClient.config.put` 缺必填 `baseVersion`、`RunStatus` 闭集联合里没有的词)必须报错而带 `baseVersion` 的对照新形必须零诊断;夹具根里装着而环境钉没列的探针为红;探针缺席为诚实跳段(必跑档为红),不当绿。
254
+ - `run-client-core-portability-test.mjs`(CC-523 + CC-552;**§122 GT-2**;96 → 110 格):剥注释 / 剥串两只手写词法器(按字面引号与反引号配对、不认正则字面量)换成 TypeScript 真语法 —— 正则字面量里的反引号 / 引号 / `//` 会让旧词法器配对错位,错位两个方向都会发生:说明文字被读成代码(假红,源码里靠一枚恒假正则拨回),与真读取被当成字符串吞掉(假绿;构造片段可复现)。同门里另两条行首锚正则(纯类型登记项的零值级导出、产物零残留裸包 import)一并换成 AST 读器(旧正则认不得同行形 / `export async function` / `export abstract class`,多行 `import {…} from` 整条漏)。每个读器两向对照:该逮的逮住、该放过的放过;带语法错的输入一律抛,不吐一份看似干净的结果。
255
+ - `run-plan-review-decide-verify-test` 加 ⑫ 段(G-PF1 – G-PF7、G-PF9:纯判读四形 + dismissed 射程、首呈卡 / 重开卡端到端的请求体逐字节、窄化与直接调用 `decidePlanReview({ reason })` 同一只、note 优先于调用方 reason);`run-plan-review-dismissal-test` 加 E6d – E6f(G-PF8:自由文本是决断性作答,撤用户关卡记号并投递恰一次 reject;纯空白 note 与矛盾多选不撤)。
256
+ - 五票的红先格与判别力自证:`run-permission-denial-projection-test` 新段 P(覆盖读数 × 账本侧完整的各形、重连后的流、账本行遇中止的两词 × 两种到达序 × 反向三格)并把原来只看账本的「判别位缺席」格改为带覆盖读数、新增同一份账不交读数 ⇒ 判别位在场的反格 · `run-read-credential-refusal-projection-test` 的 assistant 源 401 取舍格改成同判 + 老部署对拍 + 面不在优先 + 两源同答,新段 W8(`status().code` 值域)· `run-file-history-leg-notice-test` 账本多记一份事实的 L7 系列、端到端「提交时没读到能力位」E9 – E12(含冻结的 0.94.0 判定对同一事实答 `not_declared` 的判别力自证)· `run-subagent-durable-divert-test` 段 P9(print 车道块键恰为 CC 形 / 交互面三形负控 / 与适配层摘键函数整块深等 / 三键名单单源)· `run-rules-side-test` 把「不交游标位 ⇒ `cursor-stale`」的取舍格改成通用 `error` 并加两向负控。
257
+ - 新门 `run-models-dropped-entries-projection-test.mjs`(包侧投影门三件之一;27 格):三态读数、诚实缺席(缺席 ≠ 空数组)、服务端 7.123.0 判据样本逐字、坏行只丢自己、开集、读法纪律、出包型派生自 sdk。
258
+ - `run-upstream-tables-test` G18 / N18:设置契约函数批(三只纯函数取原件源码)与原件独立样本逐个同答、自含(函数体外的名字 / 未登记全局 ⇒ 拒生成)、读者是生成物、源码里回环字面等值比较零处;G11 与生成器读 zod 4 结构,zod 3 形拒生成。
259
+ - `run-cloud-effective-projection-test` S4k 告警种类读实装 settings-schema `WARNING_KINDS`(不再手写种类表);「本机引擎真读」各格改用 10 一代的读法(夹具服务端 7.122.0 树里带的 settings-schema;缺席 ⇒ SKIPPED-SECTION),新增 S8(两代输入 ⇒ 同一份影子文档逐字节同;同一份文档经 10 一代读法与 11 一代一次性迁移读到同一限制;`none` / 读不懂 / 两形并存 / 10 形坏值)与 S9(Model Hub 删除判定两代各一形);`run-additive-key-passthrough-test` G7 改读 zod 4 结构。
260
+ - `HealthResponse` 不再 pick `restart`:`run-tick-model-and-config-drift-test` Y1 / Y6′ / Y6″、`run-upstream-tables-test` G12 a4 / a5 / a9 / a10、`run-server-7122-pick-test` S2(地板线 sdk 上编新读口的型)同批改。
261
+ - 扩门 `run-display-untrusted-projection-test`(586 → 613 格;CC-528 / CC-360 / CC-414):OL 段 —— 七形各一正一负(正形修前在 0.94.0 发布件上红;值里的反引号不截断值另一格、凭据标签 + `bearer` / `basic` + 地址另一正一负)、裸不透明值负控池 26 形、探窗覆盖上游字面形判据最短匹配的自证、幂等与线性各一格;按改读重写的既有格:K25(粘在连字符后的 `sk-` 出负控)、H4g / H14c / H15b(标签 + `token` 方案词一枚记号;H14c 另四行 `bearer` / `basic` + 地址整只遮)、X41b / Y19(`Authorization:` 头值里方案词后的地址整只遮)、YB6(同行箭头两行);OL11 三格(路径段整段是方案词不读 / 标签 `Token` 后跟放行词不延 / 真凭据七形照遮)。
262
+ - 扩门 `run-display-untrusted-baseline-diff-test`:B9 三票池(2 000 正形 + 420 负形,同进 B1 / B4 / B6)—— 正形秘密本版零露、上一版露(判别力)、负形十五出口与上一版逐字节同、十形登记分歧逐字节钉(上一版读法一并钉)、形状判据对纯随机串的判中率读数(下限 0.9 回归绊线);B7b 非块形池里本来就有的同行箭头形按改读单列 B7b′(只许多遮)。
263
+ - `run-replayed-approval-disposition-test` 加 WC 段(**§122 G-WC1 – G-WC6**;19 格):账本位置谓词真值表、与判定口 `live_leg` 闸互为反面、端自写「只认非空串 id」与根入口谓词的九形分歧、读位抛原样抛;句子表逐字(无成因 / 意外停止 / 有序关停 / unknown)、全域每一句过禁词(不说已批 / 工具已跑)、三向互异、成因闭集从出包型读出且每词各有一句、表外成因落中性句、判定口真崩溃收敛行端到端、工具名各形与显示消毒、敌意名字经判定口真处置只出现在引号内、敌意入参不抛、出包 `dist` 里这句只在一处。
264
+ - `run-allow-rule-shadow-projection-test` 加 WC 段(**§122 G-WC7 – G-WC9**;11 格):缺席 ⇒ `undefined`、两代同句(裸帧 / 已盖形 / 活卡帧路径 / 耐久行路径八形逐字相等,三个样本串)、逐形成句逐字、读不出 ⇒ 说读不出、消毒(双向覆盖符 / 控制符 / ANSI / 换行 / 凭据形 / 封顶)、卡级读口对裸帧回落同一读数、帧级读口与旧派生函数不在根入口、出包 `dist` 里这句只在一处。
265
+ - 新门 `run-model-catalog-read-projection-test.mjs`(包侧投影门三件之一;115 格):公面 / 回体读口(信封三坏形、坏行只丢自己、同名后到、深拷贝冻结、`defaultModel` 形判、`droppedEntries` 读数不变)/ 缺省模型(只读 `defaultModel`、两行同 id、`defaultModel.id` 只比行的 `id`、绝不取第一行)/ @ 三态 / 兼容声明三态(不是第二条档位读法,源码零读点)/ 行视图逐行同答、不设下限 / 座位出站门 / 出包型编译。
266
+ - 新门 `run-seat-carriers-test.mjs`(包侧投影门三件之一;193 格):入站判官逐键(含子代两位与未登记键)/ 回退载体与投影口同一元组、出身表引擎请求键 = 投影产出键并集 / settings 子键出身表 / 能力表 `rewind` / 停驻位 present-iff 与单一读口 / 型。
267
+ - `run-seat-contract-keys-test` 覆盖表 20 → 21 组(−`SeatModelCatalog` −`SeatModelInfo` +`LiveModelCatalog` +`SendMessageRequest` +`SeatRewindIntent`)、`listModels` 回执格改在线目录形;`run-seat-task-request-origin-test` 认第三种出身(投影口 + 引擎请求键逐名对 sdk 型面直读);`run-seat-wave2-test` S1 能力名两员;`run-human-turn-encoding-test` HT8a、`run-request-uplift-test` G-RQ5b、`run-client-core-pure-test` 在线目录段的夹具补 `defaultModel`(成文改口)。
268
+ - 新门 `run-hooks-managed-policy-reading-test.mjs`(CC-488;包侧投影门三件之一;44 格;判据 **G-RD1 / G-RD2**):型面 AST(可选 / 零参 / 三词闭集 / 既有两员仍必填)· `unreadable` 整条腿关(四源 + flag + `/goal`;计划路径插件排除理由)· 只收紧(policy 文档五形 × 读口缺席 / `absent` / `in-effect` 三答逐字节同)· 读口异常当读不出(抛错 / 返回 undefined、null、串、{}、大小写不同、词表外、数组 / `state` 取值器抛 / 撤销代理 / 写成属性 / 取成员抛)· 顺序与次数。
269
+ - 新门 `run-park-expiry-judgements-test.mjs`(CC-550;包侧投影门三件之一;46 格;判据 **G-RD5 – G-RD8**):终端壳离线套 A-a … A-h(闭合帧三态)/ B-a … B-i(行到期三档)/ J-a … J-c(迟到决断端点)逐格搬来,另补 24 小时边界、四象限真值表、被收割读口逐形(只认 `approval.expired`、读不到恒 false、按方法调且恰一个实参、永不抛)、码单源 AST、真 `AgentClient` 假 fetch 直入;内嵌壳原实现的冻结副本差分 1500 余例逐例同答。同名影子对账门 `run-layering-shadow-export-test.mjs` 因此新增四行豁免(`divergent-copy`,差分格 `cc550-park-expiry-judgements` 直接摘终端源码上的四只与本包同名读口逐例比:零类外分歧;唯一已知类 `client-read-guard` 只属 `runReapedByDeadline` 一行)。
270
+ - 新门 `run-usage-analytics-projection-test.mjs`(CC-511;包侧投影门三件之一;76 格;判据 **G-RD9 – G-RD13**):三口投影(缺席位不编 0、`estimated` 只认显式 false 为精确、序列点 `estimated` 严格布尔)· 失败分诊(按码、读失败不说成「没有」)· 三口消费口(永不抛、只转交给了的键)· 三态视图(不可用卡零数字、热力图与活跃天数仅日序列读成功且完整时才有、峰值与最常用模型同律〔序列 / 分桶有读不懂的点·行或自己被截 ⇒ 不报〕、分桶失败 ≠ 空、400 种判决组合总函数;网页端自检金样逐格搬来)· 真 `AgentClient` 假 fetch 端到端(恰四次 GET、全 501、仅分桶 501、全 401、abort)· TypeScript checker:sdk 客户端直入注入面零诊断。
271
+ - `run-mcp-reconnect-test.mjs` 加 S8(CC-432;判据 **G-RD3 / G-RD4**):动词第二实参裸串、有 `signal` 时第三实参恰 `{ signal }`;真 `AgentClient` + 假 fetch 不经适配器直入(体恰 `{"server":"alpha"}`、503 `state.mcp_reconnect_unsettled` ⇒ `unsettled`、409 ⇒ `not_running`);TypeScript checker:`AgentClient` 可直接赋给 `McpReconnectClientLike`(零诊断),旧 `{ server }` 适配形赋给注入面 ⇒ 编译诊断。黑盒 G-MU8 去掉 adapter 一句(见 §122c)。
272
+ - 新门 `run-interactive-interrupt-emitter-test.mjs`(包侧投影门三件之一;70 格;G-SA1 – G-SA4):结局映射(回执布尔只认自有数据位、九种坏形回执、确定判决九形、没拿到判决七形、抛出物读抛不出境)、判类单源(216 只抛出物逐只与自愈两路的至多一次尺同答)、调用形(恰一发、保接收者、bare、`session` 只在非空串时带、零幂等键)、真 sdk 客户端桩 fetch 端到端并接 `planInteractiveHalt`。
273
+ - 新门 `run-device-rebind-judgement-test.mjs`(包侧投影门三件之一;105 格;G-SA5 – G-SA9):列面坏行逐行丢并计数、读面回显闸、换绑本地前态自校验零请求 / 体恰两键 / 成功形不变式九个反形 / 闭集六码与错状态码反格 / 表外抛出物逐只与至多一次尺同答、真 sdk 客户端桩 fetch(具名位、写动词 5xx 恰一发、2xx 坏体)、回读对账全格对冻结的先前宿主判定转写。
274
+ - 新门 `run-engine-env-sourcing-test.mjs`(包侧投影门三件之一;25 格;G-SA10 – G-SA13):对冻结的先前宿主判定循环转写做 1 500 组种子差分、别名与来源压序 / 大小写 / 安全组与不可跳过组 / 只删开关 / 逐键来源与理由 / 宿主谓词抛各定点格、墓碑零镜像(构建产物对设置契约 `RETIRED_ENVS` 全部旧名零命中、零 import、零平台读、零模块级变量)。
275
+ - 退役行为面的红先格(CC-309 / CC-377 / CC-401 / CC-426 / CC-322 / CC-281;**§122 G-RX1 – G-RX6**):`run-terminal-cause-projection-test` G-PR2a(根入口无 `providerRejectionResend`、包内模块路径上仍是函数)· `run-engine-cap-reader-factory-test` F7a / F15d(二十九个名不在根入口)+ F7b / F7c / F15e′ / F15f / F17s / F18 改钉唯一失效口 `invalidateEngineCaps` 与测试钩 reset(爆破半径恰是被点名那一个 baseUrl)· `run-allow-rule-shadow-projection-test` L5 / L5b(源码零写法 + 型面 AST:`ApprovalCardRequest` 无此成员、`ToolApprovalFrame` 仍有)与 L1 – L3 / L7 / B / F 段改钉「卡上无旧字段、披露与让位证据逐例同答」 · `run-permission-modes-capability-test` PM4b(形参个数 1)· `run-model-identity-resolvability-test` S4g / `run-request-uplift-test` G-RQ4h⁗(三态串 ⇒ `proceed`)· `run-resume-refusal-copy-test` CC-281 段(粗码形改判 `null`,夹具腿的 <7.115.0 一代读 `null` 且不再是必跑档)· `run-support-floor-projection-test` SF1f / SF1g / CT1a 按新底线重钉;`run-retirement-ledger-test` 把 RL-16 / 22 / 54 / 58 / 82 / 91 挪进已退役栏(F 段钉锚不复活),RL-21 / 35 / 36 / 38 / 39 / 40 / 41 / 46 / 78 / 83 十行带 `blockedOn`,RL-37 重分类为常驻(不进已退役栏)。
276
+ - `run-hitl-gate-honesty-test` F19h(G-SC1;五格)钉四臂并包与两形入参;F19-T 改为「并包后零差」对拍:拍平结局 770 格与抛出物 1 650 格逐格同答终端现行组合,认终端两代(从拍平文字抠类名的那一代,不同答只许落在文字以类名开头的格上);F19-T3 加全安全停闭集与 `retriable` 两维,不同答只许落在两处登记口径差(拍平结局只带 `safetyCode: 'no_pending'` / 卡仍待决的 `retriable`)、方向固定。
277
+ - `run-print-bash-iserror-test` ⑥(G-SC5):负退出码 / 只有首行 / structured 只带 exitCode 三形 + 十六形两车道逐形同答,⑥b 钉 structured 只带 exitCode 时正文两槽仍从框架反解;`run-bash-benign-exit-interpretation-test` ③d 改口(首行之后不是框架 ⇒ 不算失败)。
278
+ - `run-plan-review-dismissal-test` H 段改走台账登记,H2(G-SC4)钉退役谓词不再被调用;`run-client-core-pure-test` R6h(G-SC3)钉缺省会话槽身份只定义一次;`run-panel-cycle-identity-test` S4m(G-SC6)钉通知终局事实与行当前终态的边界。
279
+ - 新门 `run-engine-caps-single-source-test.mjs`(CC-344;包侧门三件之一;26 格;判据 **G-SB1 – G-SB22**):包内读口有键 / 无键 / 宿主快照 / 调用方中止 / 有界等待五形;三处迁移对宿主快照与换代各一正一负(修前在 0.94.0 上红);AST 静态扫描 —— 私有能力表与两代见证标识零处、每一处 `.capabilities(` 都在交给总缓存的探测闭包里(例外两处登记、带死行钉、植入违例自证);两代读法与旁证参数退役(声明面 AST)。
280
+ - 新门 `run-mcp-engine-leg-connection-test.mjs`(CC-325;包侧投影门三件之一;24 格;判据 **G-SB30 – G-SB47**;G-SB42 – G-SB44 是发布前复核采纳项的红先格):三态 + 成因逐形、缺席与畸形(读不完 ≠ 不在上面)、与活性读口按名找行逐池同答、源码按名找行的循环恰一处、连接态不读活性格、经包内段投影器逐形、声明面三态。
281
+ - 新门 `run-model-switch-fallback-test.mjs`(CC-324;包侧投影门三件之一;25 格;判据 **G-SB50 – G-SB74**):探活分型逐臂、编排(只在需要时问判决口)、回落台账(不记三形、序号单调、四条判据、负控十一形、判定纯读、销账比序号、按会话分格、格数有界、读帧不执行取值器)。
282
+ - 能力位四道既有门随 CC-344 翻面(各格注明翻面理由,判别力不降):`run-execution-lane-capability-test` S3a / S3b / S5d / S6b / S6b2 / S6d / S6p / S6s;`run-store-center-wiring-capability-test` S4d / S4d2 / S4h / S6a / S6b / S9a – S9d(`store` 座的读法改钉 `storeSeatOf` 只供 store / sql 两只读器);`run-engine-cap-reader-factory-test` 表加 `absentKind` 列(centerWiring 键缺席 ⇒ `none`,族规各格按列取期望);`run-subagent-injected-wire-test` / `run-client-core-pure-test` 去掉两只退役测试钩的调用。
283
+ - `run-selfheal-reopen-test` 加 **G-RS** 段(CC-536;**§122 G-RS1 – G-RS7**;38 格):① 同一组供给输入(`true` / `false` / 缺席 / `'yes'` / `1` / `null`)上 resume 卡与忙卡对 attach 逐格一致且只有严格 `true` 才给;宿主不给供给位 ⇒ 忙卡请求没有 `canAttach` 键(键集逐字同旧);注入件恒不问人 ② 选 attach ⇒ `{ kind: 'running-attach', taskId }` 恰两键、零 steer / 零 cancel、处置档 `not-delivered`、行句含重放披露原句、不进「选过 Do nothing」登记、不产出续听意图 ③ 回执说 attach 而本轮没供给(缺席 / `false`)⇒ 零动作 ④ 仅 attach 在场照样出卡、三条路都没供给一张不铸 ⑤ 幽灵 / 已终结的 run 供给位在场也不出卡 ⑥ 确认句 / 未确认句:未确认句字节同 0.94.0、确认句字节与不替引擎断言终态(不含丢弃 / 已停 / 已结束 / 会话已空出来的说法,且明说可能还要一会儿)、互斥(互不含对方特征词)、产物里两句特征串各恰一处且同在 `cancelRow` 体内、两只读口是它的薄包装 ⑦ 产物里 `canAttach` 的读点只此两处且都经 `runningAttachOffered`(忙卡一侧还验该函数取自 resumeRunningCard)。
284
+ - **终态词表参数化属主对账门**(CC-78;`run-terminal-table-provenance-test` 原地重写;**§122 G-TW1 – G-TW9**):一张登记表一行一张表 × 一只比较器;上游联合与本包成员型都用 TypeScript checker 从开发依赖包根解析(不再按正则或散文锚抠 `.d.ts`),双向对账(上游多一词 / 少一词、表多一词 / 少一词、分区重叠、历史扩员撞现役词、开集成员都红,植入假件逐形自证);命名规则机检(表名 = 前缀 + 上游符号名);属主模块之外零终态表声明、零对终态表的 `.has` / `.includes`,且不看名字:登记表只在登记处被导入(别名 / 命名空间 / 动态 import / 转出都算)、零由两个以上不同终态词组成的字符串数组字面量或相等比较链(AST;检视实证名字匹配漏掉匿名私抄与别名导入两形后收紧,同批两处内联判据 —— `workflow_complete` 合同两词与 fleet 行「失败洗成成功」判据 —— 改读属主谓词,行为不变);十余处读点逐处真读属主谓词;运行期值 == 型面且冻结;CC 行词投影逐词;改属主之后的两条行为红先(取消通知收行 / 子代取消 isError);真 TaskRegistry 取消回归保留。`run-terminal-word-source-test` 的上游对账两段并入本门(余下分水岭 / 形制 / 谓词 / 读器四段换新名);`run-terminal-status-vocabulary-test` 族扫的属主文件与正向证据换新名。
285
+ - **新门 `run-approval-cross-leg-holder-test.mjs`**(CC-593;G-XH1 – G-XH8):宿主时序复现(活卡 1.1 s 才答、750 ms 宽限后走耐久路)、负控(无持有者 / 现场答复 404)、身份读不出、三形中止、停驻行审批口 join(allow / deny)、同一调用的下一只审批、转停驻接手、射程。修前 18 格红。
286
+ - **门脚本剥注释 / 剥串换成共用的 TypeScript 记号层读器**(CC-559;判据 = 可移植门 ④d 植入集自证格):`scripts/_gate-lib.mjs` 收口读器 `lexParse` / `lexStripComments` / `lexStripCommentsAndStrings` / `lexCommentCount`(可移植门里的两只读器搬进来作首例)与十一形植入集 `LEXER_BATTERY`(正则字面量含 `//` · `/*` · 引号 · 反引号;模板串里的说明文字与 `${…}` 里的真读取;JSDoc 里写着 `import(`;嵌套模板串;孤立撇号;串里的 `//` 与 `/*`);用读器的每一道门带一格植入对照,另有一格钉「带语法错的输入必须抛」。旧尺子逐类自证:按引号配对的手写词法器(五只)与正则式 / 行过滤式剥注释(十一种写法)各让植入集里 2 – 7 形漏读(真读取被当注释 / 串体吞掉)或误读(注释漏过 / 串体处置错)。真 `src` 里的实案:5 个文件(`diagnostics` · `displayUntrusted` · `model/catalogLoader` · `webSearchWireCaps` · 生成表 `settingsSchemaFns`)含 `://` 串,`//[^\n]*` 类尺子会在上面吞掉同行后半。换过去的门共 40 道:点名四道(`engine-caps-ledger` · `sdk-floor` · `sdk-registry-transit` · `retired-vocabulary-census`)、`engine-vocab-floor`、`dist-comments`、可移植门,以及 33 道此前用正则或行过滤剥注释的门;今天的真 `src` 上逐门判决不变(全绿),只是尺子从此对正则字面量与模板串读得准。
287
+ - `run-sdk-floor-test` 另修一处恒绿假钉(CC-559 附带):第四种 `costUsd` 写法(方括号取值 `stats['costUsd']`)的正则跑在已清空串体的文本上,在真 `src` 上永远判不到(正向对照拿未经剥离的样本喂它,所以一直绿);现在枚举器收原文,方括号取值与带引号的属性名(`{ 'costUsd': 1 }` / 解构里的 `'costUsd': c`)按语法读,串体 / 注释里的同样字样不数。植入验证:往 `src` 植入 `stats['costUsd']` ⇒ 修前绿、修后红。
288
+ - `run-dist-comments-test` 从裸扫描器改解析器(CC-559;自证四组 → 八组):裸扫描器没有解析器上下文,认不出正则字面量的起点 —— `/[//]/`、URL 前缀正则 `/^https?:\/\//`、`/\/*/` 都被数成注释(假红,本版生成表里模板串尾段那一例同源);现在注释只在记号之间的缝里数。植入验证:往 `dist` 追加一条 URL 前缀正则 ⇒ 修前红(假)、修后绿;追加一行普通注释 ⇒ 两版都红。
289
+ - `run-client-core-portability-test` ④d 门脚本族扫(CC-559;113 → 118 格:共享植入集两格 + 族扫四格):语法树读 `scripts/*.mjs` 的两形 —— A 形「正则字面量含块注释剥离」(三种写法)零存量;B 形「同一函数体里比较三种引号字符加 `/` `*`」= 手写按引号配对的 TS 词法器,只许登记的存量(登记不许空转)。尺子自证:植入各形都响、干净 / 近邻形不响、TypeScript 对少数合法 `.mjs` 报语法错时按恢复树读的植入照样读得到。本机实读 230 份,其中 14 份 TypeScript 报语法错(箭头函数体是括号对象字面量、紧跟下一行 `{` 的写法),按恢复树读。index 闭包 290 → 291(新增 `src/declared/supportFloorDeclared.ts`,见 Changed)。
290
+ - `run-terminal-facts-projection-test` C 段两臂事实键集改**声明派生**(CC-394;原写死两键名,又按 `_sema_effective_` 前缀扫,看不见第三键 `_sema_response_model`):TypeScript 检查器读 `EffectiveFactParts` 的声明(交叉 / 继承形也展开),每个声明键配一份输入夹具并与声明键集双向对账;成功臂与错误臂对每个声明键都真带、逐字节同,事实键族不多铸声明之外的键,另按键各自独立。自证:植入第三键 ⇒ 派生键集多恰这一键、对账点名「声明有而无夹具」;删一键 ⇒ 点名「夹具有而声明里没有」;交叉型展开、不存在的类型名各一格。植入验证:声明 + 成功臂 + 错误臂三处同加第四键(编译照过)⇒ 修前绿、修后红。
291
+ - `run-support-floor-projection-test` 加 SF5 构建期生成物(CC-397;106 格):盘上 `src/declared/supportFloorDeclared.ts` == 用声明重新生成(逐字节,生成目录零孤儿)· 生成物零注释零 import 恰一条语句 · 运行期 `SUPPORT_FLOOR` 与 dist 生成模块的 `DECLARED_SUPPORT_FLOOR` 是同一个对象 · `src/supportFloor.ts` 零纯 `x.y.z` 字面量且 `SUPPORT_FLOOR` 的初始化式就是导入标识符(手写镜像回潜当场红,`SF1d` 的「常量 ≡ 声明」仍逐项判);自证格:声明改了而生成物没跟 · 生成物被改一格 · 被植入注释(行 / 块各一形)· 生成器漏一键 / 改键序 / 少结尾换行 / 引号换形 · 孤儿 / 缺席 · 空计划拒判 · 坏声明十二形各自被拒生成;生成目录名只经生成器声明的那一个目录常量(门里不另写一份),且与上游表生成器的生成目录互不相同也互不嵌套(两边的孤儿判定不数对方目录里的文件)。植入验证七枚(生成物手改 / 声明改了没生成 / 手写镜像回潜 / 生成器漏一行 / 生成物与生成器一起漂成带头注 ⇒ 只有零注释格能抓 / 两个生成器指向同一目录 ×2 个方向)各红在预期的格上。
292
+ - 新门 `run-engine-cap-snapshot-readers-test.mjs`(CC-344 余项 / CC-516 / CC-525 ③;包侧投影门三件之一;894 格;判据 **G-CR1 – G-CR33**):读数只从总缓存落地派生(不调 tee 也读得到、tee 不写;落地前 / 失效后 / 探测抛 / 坏形 / 非对象回体 ⇒ `unobserved`;按落地记忆化 + 冻结;投影途中重入同一读口)· 全族自有数据律(29 只投影 + 附件席位占位 + `store` 座共用读法逐只用记录器代理断言零 `get` / 零 `has` 陷阱;顶层与嵌套每一位逐位换成取值器 ⇒ 畸形且取值器零执行)· 座位门同律(覆盖表每只 `check` 的每个被校验位逐位换成取值器 ⇒ 拒且零执行;整棵载荷树含透传位的访问器 ⇒ 拒并带点号路径;不可枚举被校验位 ⇒ 拒;抛出物只按身份认)· 本包 `src` 零处调用 `noteEngineCapsFor*`、工厂 `note` 空体、退役口 29 名逐字面量 = 根入口导出集 · 「只回退对话」判官随模块加载接上(新进程里只落地、不调 tee)。
293
+ - `run-engine-cap-reader-factory-test` 重写以对应新律(2436 → 1894 格):F4 成文改口 —— 旧判据眼「顶层取值器恰读一次且 present」作废,新判据眼「返回合法值的取值器零执行、读成畸形」(CC-516);F3 / F9 / F17 的 tee 专属臂退役(写入口没了),其余格起手改经总缓存落地;F18 改钉「每读 = 投影作用在最近一次落地上、同一次落地同一只对象、取值器零执行」。读器表挪进 `scripts/_cap-readers-table.mjs`,与新门共读。
294
+ - 19 道既有读器门的 tee 起手改经总缓存落地(`_gate-lib.mjs` 的 `landEngineCaps`:两参原子失效 + 等落定),各格注明改口理由、判别力不降:sql-engine / execution-lane / approvals-stream-live / peer-lane-rules-write / store-center-wiring / rewind-archive / steer-tier / mcp-probe-face / hitl-words-readout / session-policy-wire / permissions-declaration / wiring-instructions-attribution / memory-entries-wire / human-turn-encoding / tool-history-mismatch-projection / terminal-cause-projection / multicause-wording / server-7119-fixture / request-uplift;另 8 道(sealed-key / approval-decided-by / session-read-redaction / output-style-seat / permission-modes / file-history-capture / device-executor-management / web-search-backend)同法。「顶层取值器恰读一次」类格一律按 F4 成文改口;「探测闭包里同一拍读到」类格(wiring-instructions-attribution G-RP2b)按 KL-725 改口(闭包里答 `unobserved`、手上投影给读数)。
295
+ - `run-engine-caps-ledger-test` 订正一行:`deviceExecutor` 本包一直在读(`deviceExecutorManagementCapability.ts` 的车道读器),此前登 `not_read` 是登记错 —— 老写法 `Object.hasOwn(c, 'deviceExecutor')` 对本门第 ④ 形(`<fn>(caps, '<key>')`)隐形,读器族改经 `ownDataField(caps, …)` 后这一形可见;现登 `read`(台账 read 45 / not_read 71)。
296
+ - 棘轮账:`typeshape.unknownExport` 547 → 550、`typeshape.bareUnknownReturn` 0 → 2(`ownKey` 的两只读法原语返回未验数据、一只抛出物判别口收 `unknown`,包内件不上根入口)、`portability.index` 291 → 290(删 `engineCapsGenerationGuard`);`singleton-manifest` +1(`ownKey.REFUSAL_KEYS` 弱表,low)。
297
+ - 新门 `run-server-7124-pick-test`(G-PK7-1 – G-PK7-11):410 成因两代一只判官 / 结局帧成因 / 404 成因零读点 / 409 分码与安全停与补句 / 两版本键 / 中断撤卡观察(含真活卡腿时序)/ run 死亡判决码表 / sdk 19 读口在排空帧上自己结束(前提见证)/ worker / 预览零读点 / 服务端 ≥7.124.0 成因表对拍。既有门随版改口:approval-frame-keys 镜像 38、server-7116-fixture C9 读数位改名与体键按代际、store-center-wiring-capability S8g – S8i(成员 `worker` 按代际)、approvals-feed-unknown U12 改 sdk 19 收场形 + U13、server-7122-pick D9 假流按 sdk 19 收场、retirement-ledger G11a(RL-46 按条件退役)、sdk-floor ②d-3(地板 19.0.0 的理由见证)。
298
+ - 新门 `run-run-events-drain-reopen-test.mjs`(CC-597;包侧投影门三件之一;47 格):排空收场账本身(梯 1 / 2 / 4 秒、别的帧归零、抛出不给决策、每腿记号用后即清)/ 决断后续读腿(决断已发 / 未发两形各一格:决断恰一次、游标续读、真时钟等待;梯尽 / 句柄未知按断线形收场且不交排空帧、等待期中止走中断出口;sdk 18 形不多开;抛出照旧)/ 无头续收腿(不探活、不扣预算、梯尽查 run 行、抛出照旧、等待期中止)/ 开发依赖 sdk 19 真读口经两条腿各恰两次连接且第二次带 Last-Event-ID、sdk 18 见证不双重连 / workflow 活动流迁账 / 语法树名册(账恰四个调用点且不进根入口、`runs.events` 消费点恰两处)。负控一枚(排空判型恒假)。`run-server-7122-pick-test` D11 / D12 与 `run-server-7124-pick-test` T2 随迁账改锚(判型口 / 决策口在 `src` 里只剩舰队账本、包内排空收场账与 `wireErrorTriage`)。
299
+ - 新门 `run-skill-tool-lists-projection-test.mjs`(CC-590;包侧投影门三件之一;411 格):读数六形 × 两表六形矩阵(非 `present` 零键、`present` 逐字)/ 不截断不改序不别名(1000 / 1001 / 5000 条)/ 值形拒(两键 × 十一种坏形 × 四种读数,不回显条目)/ 选项缺席逐字节同 0.94.0 / 子代同形 / 单源判官词法扫(判官恰一处、无上游帽与判官名的手抄)/ 真能力缓存端到端 / 夹具腿(每一份 ≥7.116.0 的真受理口收原样产物,≥7.117.0 超帽 1001 条产物仍 1001 条而上游句子「拒而不截」、deny 读成空的条目被上游判官点名而产物仍带它;每一份 <7.116.0 老一代:真能力路由读数 `not_reported`、产物零键且被收,硬带两表的子代技能被整条拒)/ 型面编译探针。负控一枚(能力位判恒真)。
300
+ - 新门 `run-engine-target-facts-projection-test.mjs`(CC-461;包侧投影门三件之一;107 格):凭据需求判词三形主路 / 状态码 100 – 599 全域扫(requires 恰 {401, 403};status 臂永不给 open)/ 坏形逐格(status 十一形、臂值七形、多臂五形、非对象九形、原型链键、自有访问器不执行、全陷阱与已撤销代理)/ 独立生成池 5832 个入参与一份独立写的参照实现逐个对拍;句首判词三态 + 不持久六形同词且不带后端词 / 整句含「<词>: 」而持久 / 没报 / 没观测的整句不含 / 整句六形逐字节不变 / 十五形坏读数不抛 / 与 `storePersistence` 同判;源码形:判词文件零宿主状态、「NOT durable」字面恰一处。
301
+ - 新门 `run-session-id-path-segment-test.mjs`(CC-392;包侧投影门三件之一;94 格):判定本体 —— 逐形 + 4681 串独立生成池与 WHATWG URL 解析对拍(自证 URL 解析真把 `.` / `..` 判成点段、`%2e%2e` 字面串不是);七个调用点的行为(假 sdk 客户端计动词调用,点段零调用、合法 id 正控照发;停止口先把能力位落地,免被能力门遮住守卫);调用点花名册(AST:`<…>.sessions.<动词>(id)` 所在文件 ≡ 登记六件,每处落点都被一条**支配**它的 `if (!isSessionIdPathSegment(id)) { …离场 }` 守卫 —— 在某层外围函数里、位置在前、不在分支里;同名形参只在别的函数里判定 / 判定结果被丢弃 / 判定在请求之后 / 判定落在分支里 / 判假不离场都不算;拼 `/v1/sessions/${…}` 的模板所在文件 ≡ 抹除口且同样被守卫支配;点段手写判断在判定本体之外为零),尺子自证十四格(植入违例必响)。
302
+ - 既有门随版改口:`run-engine-identity-test` 新 F 段(消费方视角 tsc 探针:`EngineInstance` / `HealthResponse` 带可缺的数 `startedAt`、与读数同型两向、`EnginePortFile.startedAt` 仍必填;串 / 缺落盘戳 / 显式 `undefined` 三类负向)· `run-session-memory-erase-projection-test` J2 / J8 加新码一档、J17 三格(回体多带 `detail` / 句内路径时结局逐位相同且无路径无盘形词;老一代形仍落 `control_plane_corrupt`)、X10b 真服务端按码(≥7.118.0 一代 409 新成因,更老一代落 500 `internal.error`)· `run-memory-verbs-wire-test` 码表 22 → 24 条、同一个 409 上九格互异改十格(F2b)、说不清表 10 词每词仍由一次真调用产出过(L2)· `run-upstream-tables-test` G12-2 的 `HealthResponse` 键集十一 → 十二位(`startedAt`)。
303
+ - 棘轮账:`portability.index` 294 → 296(+ `engineCredentialRequirement.ts` / `sessionIdSegment.ts` 两个纯叶);根公面运行期导出 +3(`engineCredentialRequirementOf` / `isSessionIdPathSegment` / `storePostureHeadWord`);门清单 +2。
304
+ - **规则名判官对拍**(CC-563;**§122 FX-H1**):`run-session-policy-deliverable-test` 新增 G-JR1 – G-JR3 —— 开发依赖引擎 7.48.0 起包根导出的 `judgeRuleToolName` 是引擎对「规则里这个工具名够不够得着任何工具」的唯一判读;门用 400 余名生成池(协议前缀 × 段形 × 工具段形含空工具段 + 引擎退役名全表 + 无前缀 `__` 名)逐名对拍本包各条消费路径的**终局**:引擎答非 current 的名字,会话规则可送判定一个都不送且读得懂,请求体 allow 桶一条不投、deny / ask 投出的都进 `unreachable[]` 或原样即引擎认的现名。工具段为空的协议名(`mcp__srv__`)实证:引擎答 `unmintable_segment`,本包两条路径都扣下(会话判定落 `peer_wide`、装配口落 `incomplete_protocol_name`)。只加门,产物零变化。
305
+ - 新门 `run-rewind-engine-action-test`(CC-167;**§122 FX-H4**):派发闸整张表(3 档 × 65 张读数)、引擎侧处置整张表(16 种目标解析 × 3 档 × 5 类读数)对独立手写真值、`previewEngineRewind` ≡ `decide.kind`、非引擎选项与敌意入参、读法单源(模块零档位串字面量、闸函数体零位名);终端参照树上的同名副本由归层对账门的差分格逐例比。
306
+ - `run-registry-conflict-projection-test` 随副本退役改写(CC-538;**§122 FX-H2**):单读法见证(根入口三名不在、副本文件不在、子路径入口出的就是上游同一函数对象、src 机器词串字面量零处)+ 上游读法逐例钉 + 上游两只映射口的 scope-gone 类 ⟺ 判读答 `gone` + registry 服务真铸点腿;`run-sdk-registry-transit-test` 名单 +1 值 +1 型。
307
+ - `run-plugin-hooks-projection-test` G-HK0b-5 改钉、新增 G-HK0b-6 / 6b(CC-387;**§122 FX-H3**):36 格(型表缺席 / 坏形 / 只列别的事件 / 全列 × 三事件 × http · prompt · agent)插件条目与设置来源条目答案逐格相同,且等于谓词的真值表。
308
+ - failloud 门加第 ④ 段(CC-562):宿主回调隔离口的站点名册(对 `invokeHostCallbackIsolated` 的调用站点 7 个,与源码等值 —— 多一个红、少一个也红)+ 守卫文件之外零手写 `typeof x.then === 'function'` 探测(第二份手写守卫即违规)+ 自检语料(手写守卫判 1、走守卫判 0)。
309
+ - 新门 `run-refused-park-family-test.mjs`(CC-410;包侧投影门三件之一;101 格):读口金样(三码 × 错误对象 / 拍平事实、状态码政策、`field` token、`stillPending` 三态、取值器 / 撤销式代理逐键隔离)· 与终端旧实现逐字节对拍(门内嵌冻结的旧判型与措辞:读口矩阵 180 形、出句口 120 组合、自动腿句 18 组合,四类有意差分逐类钉)· 出句口性质(车道、占位、表外码不上屏、卫生禁表、不命中「门早已决」词表)· 与 CC-339 读口的关系。红先:模块缺席 83 格红。
310
+ - 投递账本投影门加 F1c(CC-391):公面判别口认重放臂(三形 + 材料位同读 + `replay` 三值同答)、收紧方向九形仍 `null`、账本「不记 delivered」⇔ 公面口认的 16 帧逐帧等价、`frameProvesDelivery` 源码钉(恰一次调用公面口、无 `.status` 读、无手拼 `failed` 帧)。红先 5 格红。
311
+ - HITL 读口门 G-HW8 加格(CC-562):`onSettled` 是 `async` 函数 / 返回被拒 promise / `await` 之后才抛 ⇒ 回传恰一次、只留痕、零未处理拒绝;抛出物读就抛的撤销式代理不外溢;idle 臂扇出时前一个 async 拒绝不连坐后一个。红先 4 格红(加总判「未处理的拒绝」)。
312
+ - 既有五门加格(CC-395 / CC-442 / CC-486):permission-denial-projection M7 – M8(裸帧读次数 + 取值器两拍快照 + 对 0.94.0 实现的纯数据池对拍)· classifier-status G7 · gate-vocabulary C3 – C5(自有键读法 + 「只经一只读法」的结构钉)· additive-key-passthrough G9f – G9k · hitl-gate-honesty F4-e。棘轮账:`typeshape.unknownExport` 565 → 567;`singleton-manifest` +1(`REMEMBER_REFUSAL_CODES`,low);公面运行期导出 +2。
313
+ - 扩门(同批,只扩既有套):`run-hitl-words-readout-test`(G-HW1h:三出口 × 七形敌意抛出物 + 决断发数;G-HW1 经桥格由「不抛、无类名前缀」收紧为兜底句)· `run-live-pending-ask-test`(S2x:会话范围三形 × 十八种缺席 / 坏形、跟踪器零 delta、三口范围入参必填的出包型编译)· `run-limits-env-failloud-test`(LN:限值旗那一句与旗面表)· `run-permissions-declaration-test`(PN:allow 没发那一句)· `run-upstream-tables-test`(G3-5 / G3-6:登记表零读点与表上的注释)· `run-client-core-pure-test`(G-TR:产品缺省;冻结收的语料里缺省路径各行改口)。同名影子豁免表 +2 行(终端的 `limitsSupportNotice` / `explicitLimitFlagNames`,分类 divergent-copy,新差分格 `cc441-print-limits-notice`)+ 同义 1 行(`describePrintLaneAllowKept` ≈ `permissionsAllowKeptNotice`),到期 0.96.0。
314
+ - `run-model-facing-anchors-test` 加 A-D4c – A-D4h(CC-400;**§122 FX-C1**):『行分隔符 + `--- result (`』四种换行 × N 的线性时间格(线性时间助手:本线程 CPU 钟、n 与 4n 各量取最快、倍数 < 10 或 4n 在 250 ms 内,不达标原样重量一次;旧形实测倍数约 16)、端到端经 `parseModelFacingTaskOutput`、`PROTOCOL_MARKERS` 八条读不可信文本的正则 52 个〔正则 × 单元 × 换行〕普查、既有语料 38 例逐例同答、生成池(11 个记号、深度 6、1 948 717 例)与冻结的 0.94.0 形逐例对拍(差异类只有『括注吞下另一个行起点』,3 例全部不同答)、源码字节钉。`run-display-body-test` 加 H11(CC-444;**§122 FX-C3**)、H2f 订正帧键集;`run-client-core-pure-test` 加 G-BG6(CC-418;**§122 FX-C2 / FX-C2b**)—— `.detached` 读点源码扫、40 形网格三处同答、登记臂车道五形,B5 普查加 `delegationFieldLine`(parse 角色 10 → 11 处),G-BG5 对拍再加 6 个不带 detached 的锁形(三版基线 0.92.0 / 0.93.1 / 0.94.0 逐位同)。
315
+ - `hitl-gate-honesty` +3 格(F6-d3 / d3b / d3c):决断首发抛出物的机读码**读不出**(取值器 / 代理陷阱抛)而另带瞬断特征时恰一发、原错上抛、不铸安全停、不重试(读不出 ≠ 不是绑定拒绝;同形 F4-e9);机读码读到「没有」的同形仍走瞬断分诊;码读不出但 sdk 类名是绑定不符仍铸安全停。`client-core-pure` B7 的 409 不重试冻结段按三态形重铸。
316
+ ### Known limits(本版新增)
317
+
318
+ - KL-628 射程扩(CC-528 同窗复核):`displayUntrusted` 对 DCS / APC / PM / SOS 控制串排在块序列项(`api_keys:` 一类标签换行 `- ` 之后)与值之间的文本,经点形 / 空格形载体(`{ mark: 'dot' }` 缺省折行点形、保排版点形、`{ mark: 'space' }`)再洗一遍时,第二遍多遮第一遍画出的控制串残骸(`api_keys: - .P1$r.\«redacted:secret»` → `api_keys: - «redacted:secret»\«redacted:secret»`),两遍都不露值;OSC / CSI 控制串、流序列、逗号清单、单值幂等。此前 KL-628 只写了键名清单 × 不可见单元那一形;0.94.0 接入文档 G-DO9 的「洗两遍 = 洗一遍」以此为例外(接入文档 §122 DC-14)。
319
+ - KL-660:`remove` 只在有界淘汰(行表 8192,已结的先让位)时发;缺席行的硬 TTL 回收仍由宿主经登记读数判(要读登记 = IO,不进纯归约口)。
320
+ - KL-661:同一行两帧 `cycleSeq` 相等而 `startedAt` 不同时按同一代(唯一判据只比 `cycleSeq`)。
321
+ - KL-662:投影接受的周期计入唯一水位;比缓着的首见终态行更旧的终态事实不再写进 ended 账。
322
+ - KL-663:行差分口不订阅不缓冲;迟订阅拿到的是当前行表快照,不是中间变化的历史(复活 / 缺席的中间态折进当前态)。
323
+ - KL-664:有界淘汰挑「最早建档」的那一条,不再是「最近最少写」的那一条(只在各字段上限被顶满时有差别)。
324
+ - KL-670:`_sema_permission_denials_absent` 的覆盖读数缺席一律落下 —— 自建管线直调终帧投影器不交 `streamSawRunOpen` / `deniedToolNameByCallId`、耐久回放腿、重连后的流都拿不到「零拒绝」的正面事实;同一只调用的归因矛盾(两只 wire 帧层名 / 结算词不同或两只本地中止词不同)使合并后分类缺席时,一次本地中止仍会按收集侧的「拒了」补行(CC-159 起的已知限,未变)。
325
+ - KL-671:`status().code` 不再带降级之外的 HTTP 状态;宿主要原始状态只能读 `lastError` 的 `<状态> <句>` 前缀(散文前缀,不是机读位)。
326
+ - KL-672:账本读回口 `capabilityAtAssemblyOf` 把「宿主没交第三参 / 没绑 / 键间矛盾」与「那一拍就没读到」同读 `unobserved`;提交时没读到能力位而用户关了文件检查点的那一发,判定落 `unknown`、屏上仍不说话(KL-244 的宿主义务:关了检查点时第一次提交前先等能力读数)。
327
+ - KL-673:print 车道只摘 `label` / `eventId` / `parentToolCallId` 三键,适配层摘键口的另两件(引擎子代入参的 CC 名重映射、入参里 `_sema_*` 键剥除)不随车道搬过来 —— 终帧 `permission_denials[].tool_input` 与块上 `input` 是同一只对象的契约(CC-235)要求入参不动;print 车道上引擎子代工具的块 `input` 仍是引擎形。
328
+ - KL-680:sdk 见证编译门的植入尺子依赖 sdk 根入口导出 `ControlClient` 与 `RunStatus` 两个名;sdk 将来改名或移出根入口时植入文件自己编不过,门报「尺子哑了」(尺子位红,不是 `src` 红),植入要同批改。
329
+ - KL-681:sdk 见证编译门的「夹具根里每份探针都在见证集」一格按版本号比对;见证集按版本去重,与开发依赖同版本的探针目录漏列时不报(那一版仍被开发依赖那一份编译到)。
330
+ - KL-682:sdk 见证编译门只判地板之上的见证;地板之下的见证在册、打印、不编译,门不判地板偏不偏高(地板由公面门与地板门的理由见证管)。
331
+ - KL-710:重开卡的宿主自带投递口 `deliverDecision` 的第三参 `reason` 是新增位;不认第三参的老投递口照常收到 reject,理由落空(宿主要转进 `decidePlanReview` 的 `reason`)。
332
+ - KL-711:选 Yes 又写了字,字不上线(批准不带反馈;引擎只在拒绝时读理由),只留一行不含正文的 debug 日志。
333
+ - KL-665:控制面发 `atMention: {mode:"none"}`(一个都不许 @)时影子文档写不出这一态(10 一代空名单 = 全部可 @)⇒ 不写、本机 @ 不受限、出一句 warn;支持底线抬到服务端 7.124.0 后随 RL-94 照写。KL-54(整张悬空原样保留)仍在。
334
+ - KL-667:`sessionReadRedaction` 位为真不答 assistant `errorMessage` 叶是否已脱敏(7.120.0 – 7.122.x 该叶原样、7.123.0 起脱敏,位同值)。
335
+ - KL-675:无标签的裸不透明值按形状判是概率判据(约 4% 的 24 字随机串仍露,B9d 池读数 0.961 – 0.993;两类字符 / 23 字以内 / 粘着 `+` `/` `=` 的 Base64 凭据不判;缩写密集带数字的长标识符与无文件签名的 Base64 文本会被遮)。
336
+ - KL-676:收尾反引号只在值末尾留在记号外(值恰好止于收尾一段同行代码段的那一串);值里的反引号一律不截断值;收尾反引号之后紧跟值字符时它随值进记号(与 0.94.0 同)。URL 片段末尾不配对的 `)` / `]` 留在记号外。
337
+ - KL-678:值前 JSON 转义空白只认制表符,转义行断不作分隔(它们是 YAML 块 / 清单读法的行断);方案词恰是路径段尾半截(`…\my-token\test.txt`)时其后的 `\t` / `\T` 仍按转义制表符读、下一段被遮(整段是方案词的路径段已不读)。
338
+ - KL-383 收窄:括号 / 方括号包着的值已按其升级判据收口,余项为尖括号 / 花括号与括号里的占位形 / 多个词。KL-467 收窄:同一行的引号标签箭头形已遮,余项为箭头后换行(保排版出口)/ 不带引号的标签 / 箭头后不是引号值。KL-573 删行(CC-414 收口:粘在下划线 / 连字符后的已知前缀本版起遮)。
339
+ - KL-683:重放审批帧 `decided` 且无成因时,句子只说「引擎的待决清单里没有它」,不分人决过 / 过期 / 转入停驻 —— 待决清单与崩溃收敛清单都不列已决行的结局,包不自造「已批」或「已过期」。
340
+ - KL-707:回体读口只带信封四键(`models` / `default` / `defaultModel` / `droppedEntries`);服务端将来在信封上新加的键不随在线目录过境,直到本包认得它(行上的新键照带)。
341
+ - KL-708:座位回退载体只带渲染端看到的锚点 `uuid`;锚点 → 引擎条目的映射(含被选消息之前没有进过引擎的轮时要重开会话、`code` 档只回文件)在宿主,本包不给映射口;映射不出的宿主不报能力 `rewind`。
342
+ - KL-709:座位上没有后台子代的插话 / 续跑 / 停止动词(桌面端宿主没有子代台账);座位 lane 上不提供这三个动作,本版只给每轮两只子代载荷位补判据。
343
+ - KL-686:`SettingsPort.managedPolicyReading` 是可选口 —— 宿主有托管层却不接它时,托管层读坏仍读成「没有托管策略」(只有读抛错才关);包不假设宿主一定沿用,不告警(没有托管层的宿主不实现它是正确答案)。
344
+ - KL-687:引擎 ≥7.73.0 在 `GET /v1/usage/series` 的点上逐点带 `estimated`,sdk 18.2.0 的 `UsageSeries` 型还没声明这一键;本包按结构读(严格布尔才收,缺席不折 false)。
345
+ - KL-688:`runReapedByDeadline` 的 `runs.get` 单发、无期限、不传 `signal`(与终端壳同形):传输层挂住时 decide 的 404 归因那一行会一直等;宿主要有界等待就在自己传入的 client 上包一层期限。
346
+ - KL-691:设备换绑经 sdk 发,2xx 的状态码看不见 —— 「恰 200 才算成功形、202 = 还在办」那一判不可得,改由回体不变式判;2xx 体不是 JSON 时 sdk 抛无状态码的解析错 ⇒ 落 `unconfirmed / transport`(`mayStillBeRunning: true`),回读对账只认目标态。
347
+ - KL-693:env 组声明(含镜像引擎启动校验的 `refuses` 谓词与告知句)由宿主给,本包不镜像引擎判官;每个起本机引擎的宿主要持有同一份声明,直到引擎或设置契约导出组校验。
348
+ - KL-701:子代内容账本对聚合帧的两道去重恒都跑 —— 同一 turn 里两段逐字相同的子代正文在耐久腿上折成一段(内容闸是承重的:耐久续读跨重连回放同一段时带新的事件 id)。
349
+ - KL-702:「门已决」判据的文案兜底臂仍给无码 / 码不在任何一张表里的失败(宿主自带传输层的普通错误等);失败文字恰含 already / resolved / not found 时按已决处置(多读一轮流,同因连续第二次即诚实收场)。
350
+ - KL-420 删行:「门已决」判据比终端少四臂的限制随本版并包收掉。
351
+ - KL-696:`mcpEngineLegConnectionOf` 的读数是这一轮运行拨号那一刻的判词;运行中途服务器掉线这一格仍读 `connected`(活性另读 `mcpEngineLegLivenessOf`),下一轮整份替换。
352
+ - KL-697:回落台账「真答过」的证据(`lastServed`)由宿主交;宿主没有这份证据 ⇒ 台账不记、不指路。
353
+ - KL-698:子代尾随 / 终报在快照未落地时等共用探测落定至多 60 s(宿主的探测挂住时等满);调用方中止只结束自己的等待。
354
+ - KL-700:段投影器的丢行记号只随它产出的那只数组对象走;宿主展开 / 序列化往返过的段看不见被丢的坏行,两只按名找行的读口回到「不在上面」的读法。
355
+ - KL-699:能力读数换代只随 `invalidateEngineCaps`;引擎在同一地址换代而宿主不调它时,三处读的仍是上一台的位(此前 false 会在 5 分钟后自己重探一次)。
356
+ - KL-716:忙卡的接管行句复用 resume 入口的重放披露原句,其中「a run that outlived its shell」按 resume 入口写成;忙卡上被接管的那条 run 常是本进程里背景化的一轮,屏上已有它此前的输出 ——「会再出现一次」「不重复计账」照实,「outlived its shell」对这一形读起来偏窄。要换措辞的宿主用 `rowFor` 整行覆盖;不为一行措辞另铸第二份披露。
357
+ - KL-717:attach 供给位只认严格 `true`;纯 JS 宿主交非布尔真值(函数引用、`1`、`'yes'`)给 resume 卡的 `canAttach` 时,0.94.0 给 attach、本版不给 —— 按类型(`boolean`)传值的调用方不受影响,不为类型违例的输入保留真值读法。
358
+ - KL-728:忙卡(Leave 之后再撞 running 的三选卡)对同一条 run 已呈过一次、用户选了「什么都不做」之后再撞 running:只出一行现状,这一行不提「可以接管观看」。
359
+ - KL-712:`ccTaskTerminalStatusOf` 把 `cancelled` 折成 `killed`、把 `blocked` / 历史行 `timeout` 折成 `failed` —— CC 本地任务行上看不出「取消」与「被停」、「自报走不下去」与「失败」的差别(原词仍在通知 / 行帧上)。
360
+ - KL-713:参数化对账门只读开发依赖那一版上游的包根(引擎 7.48.0 / sdk 18.2.0);peer 地板与见证集上的其它 sdk 版本若词表不同,本门看不见。
361
+ - KL-714:`<status>blocked</status>` 的通知块不再记「已通知」;今天没有生产者写它,若某份历史转录里有,重开会话时那一条可能再投一次。
362
+ - KL-729:跨腿单一持有只设「耐久路查活卡」一个方向;停驻行审批口已持有时同一只审批再来现场卡不查表(现场 → 停驻单向转移,判为没有铸帧来路)。
363
+ - KL-730:宿主自己的耐久路开出的卡不进本包的持有登记 —— 宿主那一路能经 `joinApprovalHolder` 问到本包的活卡,本包的停驻行审批口看不见宿主那一路在屏的卡(推断形,未见实测)。
364
+ - KL-722:门脚本里仍有几处按行或按片段读注释的写法不在门脚本族扫认得的两形里 —— `run-client-core-pure-test.mjs` 的行级去注释(域词表-09 普查,带前提自校)与 web 分类器表的行尾 `//` 剥离(条件腿),`run-hitl-words-readout-test.mjs` G-HW10 找签名之后第一条非 `//` 行,`run-retirement-ledger-test.mjs` 的 `stripCommentMarker`(归一注释正文,不是剥注释)。
365
+ - KL-723:`run-engine-caps-ledger-test.mjs` 的能力位读点普查对已剥注释的 `src` 文本仍用正则找 `engineCap*(` 调用头、按括号配平取实参,并用按引号配对的 `splitArgs` 切开实参。
366
+ - KL-724:宿主在能力回体落地之后就地改写自己交出的那只对象 ⇒ 读器保留这次落地的首读投影,按键现读的口(`engineCapState` / `engineCapValue` / `engineCapTrue` / `engineCapString`)跟着改,两类读口对同一位可能分叉(CC-344 余项)。
367
+ - KL-725:宿主探测闭包里(落地之前)读 `observed*` 答 `unobserved`;同一拍要用读数读手上这一发的投影 `project*Capability(caps)`,或 `await engineCapsSettled` 之后再读(此前闭包里先调 `noteEngineCapsFor*` 同拍读得到;CC-344 余项)。
368
+ - KL-718:没有持久问账的部署(或行上没记成因的存量行)上,中断撤卡那一发撞 404 时体上不带成因词,告警照出 —— 那一问可能已经结束(假告警),也可能在别的副本上仍在等,wire 上分不出,按「可能锁住」说。
369
+ - KL-719:`approval_binding_mismatch` 无 `field` 的行完整性拒仍铸安全停 `binding_mismatch`(宿主按「待决动作变了」重取重呈;同一决断再送照样被拒);分类读数里它是 `row_integrity`,安全停只给有权威依据的答案席那一形放宽。
370
+ - KL-720:sdk 的终帧判据不在包根导出(只在 sdk 包内,且判的是原始 SSE 帧);`isInStreamDrainingEnd` 保留自己对投影后对象的三形分支。舰队流与 workflow 流不在 sdk 的终帧读口名单里,排空帧照旧由本包判型、随服务端关流结束。
371
+ - KL-721:预览 `objectivePreview` 本包零读点;服务端 7.124.0 上「建过预览、剥完没有用户正文」与「没记录」在会话列表上同为 `null`、在任务列表上同为键缺席(两张面分不出),只有任务名展示面带服务端自己的「(notification turn)」字样;本包不铸占位、不渲 0。
372
+ - KL-731:重开撞上提交前的 503 `draining`(排空期由中继 / 代理拒订阅时)按抛出处理、不走排空梯 —— 决断后续读腿把错误冒给宿主,无头续收腿扣它的重连预算(服务端 7.124.0 排空期照收订阅,只拒新提交)。
373
+ - KL-732:排空收场账不在根入口;自带 run 事件读者的端要连续次数,用 `isInStreamDrainingEnd` + `streamDrainingDecision` 自记(CC-600:0.96.0 上根入口)。
374
+ - KL-733:后台子代尾随(`runs.subagentStream`,单腿)排空时不重开(与 sdk 19 之前同形)。
375
+ - KL-734:技能两表 `allowedTools` / `disallowedTools` 在能力位 `skillToolLists` 不是 `yes` 时不发且不逐请求告知(CC-590;`skillToolListsDoctorDetail` 读口可见;上游对未知键整条拒,发了反而整只技能失效)。
376
+ - KL-735:提示被 UserPromptSubmit 钩子拦下时「Run blocked: …」终帧句原样带出引擎信封文本、不渲 `terminal.detail.cause`(铸点在本包;CC-603 0.96.0 改 CC 形句 + 信封零上屏)。
377
+ - KL-522 改写(CC-344 余项随 CC-516:读数改从总缓存的落地派生后,「第一拍 / 切换后未落定 ⇒ `unobserved`、`now` / `later` 本地拒」这一形的推荐序改成先 `engineCapsSettled(baseUrl, { withinMs })` 再取读数再发;宿主不必也不能再喂读数)。
378
+ - KL-655 删行(CC-597 收口):审批推送流与 run 事件流在排空终帧之后的重开等待都归本包的排空决策口(sdk 19 起两条流都在排空终帧上结束、不再自己重连;四条订阅腿同一只排空收场账)。
379
+ - KL-736:`displayUntrusted` 凭据前缀网不认 `%XX` 编码的分隔与路径前导(高熵真形由裸值网兜住;低熵 / 短形与 `/` 前导原样);解码后再过同一张网归 CC-604(0.96.0,与 CC-288 合并收口)。
380
+ - KL-737:托管策略读数端口 `managedPolicyReading` 只交三词,沿用覆盖 / 远端未到 / 被盖住三维读不出 ⇒ 托管层读坏而壳沿用上次名单时,发给引擎的 hooks 腿与壳本端执行腿处置不一;归 CC-601(0.96.0)。
381
+ - KL-738:`LiveWorkflowConfig.baseUrl` 只收串,引擎换口时 workflow 详情源 / 监视器仍连旧口(`authToken` 已是取值函数,两者不对称;CC-292 收账 P3)。
382
+ - KL-739:`run-session-memory-erase` 60 ms 取消计时格与同形固定窗计数格在全门并发下偶红(单跑绿);正向计数格改有界等待前先单跑复核(CC-564 收账 P3)。
383
+ - KL-740:fleet 账本结算级离场自摘只摘行帧车道结算的 `killed` 行,终态通知推定的 killed 行挂满保留窗(≤ 60 s)才走(CC-332;终端换读本包后比壳内过渡件多等一窗)。
384
+ - KL-741:fleet 账本无离场墓碑,重连间隙里离场帧先到、`killed` 终态帧后到时该行留到下一条离场 / 快照;自摘不看 `viewingTaskId`(CC-332)。
385
+ - KL-742:委派报告帧槽位(`DelegationReportFrame` 的 `status` / `error` / `stats` / `headRest`)只在引擎铸的位置上读 —— 状态行紧邻帧头;任务描述(上游原样插进帧头行、可带换行)把帧头行撑成多行、或描述里塞了 `status:` 行时四个槽位全缺席、字节全进 `headRest`(端退回逐行原样渲,多渲不丢);有 `worktree:` 行(引擎里唯一未消毒的多行插值:路径与清理失败的异常文本)的报告,引擎自己铸的 `error` 也不上槽、留在 `headRest`;根治在上游把那一行消毒成单行(CC-444;**§122 FX-C3**)。
386
+ - KL-743:结果段标签行 `taskOutputResultLine` 的括注读到『行终止符(CR / U+2028 / U+2029)紧跟 `--- result`』即止 —— 括注里恰夹着另一个标签行起头的输入(引擎不铸)0.94.0 的正则整段吞作括注,现在不认这一行;与旧形仅此一类输入答不同(CC-400;**§122 FX-C1**)。
387
+ - KL-744:「本桥已见结局」只记流内帧腿自己见到的结局(它呈的卡被答 / 被中止,以及它收到的引擎收口帧);悬挂 ask 腿(宿主驱动)与宿主自己的 chrome 卡那一路上结算的问不进这本账 —— 那两路上同 `approvalId` 的重复帧仍按各自既有的判定处置(帧带位置时读清单判活)。被有界淘汰挤出的问、重启后的新桥同样回到修前行为(重复帧再开一张卡)。(CC-526)
388
+ - KL-745:答复送出后服务端回 404(没落定)的结局不记入「已见结局」 —— 非粘性多副本上那一发可能只是落到了别的副本、这一问仍在等,压掉重复帧会压掉唯一一张还能答的卡;代价是此后的重复帧会再开一张卡(答它再回 404,与修前同形;KL-506 同源)。(CC-526)
389
+
390
+
391
+
392
+
393
+ ## 0.94.0(2026-10-10)
394
+
395
+ > 主题:**minor** —— 终端 1.0.146 对接版:引擎 7.45 – 7.47 / 服务端 7.120 – 7.122 / 配置层 10 / sdk 18.1 提货 · 请求装配与审批判定归包 · 到期登记物按预告硬删 · 凭据遮蔽两件 · 附件信封外套标签
396
+
397
+ > 净值(相对 0.93.1):根公面运行期导出 1485 → 1547;测试钩 71 → 74;门清单 198 → 209;退役登记在册 35 → 25 行、已退役 25 → 38 行(本版退 13 · 改窗 5〔0.94.0 → 0.95.0〕· 新登 3,其中 RL-81 当版登当版退;弃用预告 1 处 = RL-82);peer sdk 地板 `>=12.0.1` → `>=18.1.0`;开发依赖引擎 `~7.44.0` → `~7.47.0`、配置层 `^8.0.0` → `^10.0.0`、sdk `^12.0.1` → `^18.1.0`;型面 BREAKING:RX-1 – RX-5 五处按预告硬删 · 来源词 `'absent'` 退役(RQ-2)· peer 地板抬升与七条过渡臂退役(SP2-7)· 必填成员增加(`CoreValuePorts` 十一 → 十七件、`LocalSessionsApi` +1 动词 +1 store、`FileHistoryDeclarationLedger` +2 口)· 闭集 / 联合增员(`MODE_ARBITRATION` 键、`GateModeReleaseReasonWord`、`PermissionsKeptReason`、`AutomaticAnswerLane`、`ModelSetupDecision`、`RulesFailure['kind']`、`EngineNoticeFactsCode`、附件描述符与「没带上」原因);已知限制本版新增 31 行(KL-613 – KL-659 之间)· 删 1 行(KL-594)· 改写 6 行(KL-85 / 177 / 427 / 428 / 554 / 611)。
398
+
399
+ ### Removed
400
+
401
+ - **`HeadlessPermissionResolution['source']` 去掉 `'absent'`**(CC-173;接入文档 **§121 RQ-2**):0.27.0 起 `resolveHeadlessPermissionMode` 就不再产这一词,只是为旧消费端留在型上;本版退役。对 `source` 做 `=== 'absent'` 比较或 `case 'absent'` 的写法编译红一次,删掉那一分支即可。
402
+ - **`ABORT_CAUSES` 的手写三词 / `STATUS_DERIVED_COARSE_CODES` 的本地九词 / `ASK_GONE_DENIED_WORD` 的手写字面**(CC-522;退役登记 RL-70 / RL-18 / RL-45;**§121 SP2-7**):两只公面常量 `ABORT_CAUSES` / `STATUS_DERIVED_COARSE_CODES` 与一只包内常量 `ASK_GONE_DENIED_WORD` 改取 sdk 包根同名导出(`ABORT_CAUSES` / `STATUS_DERIVED_COARSE_CODES` / `DENY_REASON_ROUTING_FAILURE`)的构建期生成物,名、型、值与序今天逐字节不变。🔴 硬破坏一句:今后 sdk 改这几张表,本包下一版随之改,不再由本包的手抄挡一版 —— 按它们做穷举或快照的写法跟 sdk 走。
403
+ - **`PermissionMode`(= `TaskRequestPermissionMode`)的并词 `| 'dontAsk'`**(CC-522;退役登记 RL-73;**§121 SP2-7**):型改为 sdk 的 `NonNullable<TaskRequest['permissionMode']>`。🔴 硬破坏一句:装 sdk < 17.1.0 的宿主上这只型只剩五词,`'dontAsk'` 赋不进去(编译红);在地板 18.1.0 上六词逐字同。
404
+ - **出处键 `decidedBy` 的自铸字面型**(CC-522;退役登记 RL-74;`HitlDecideDenyOutcome.decidedBy` / `RespondToolApprovalOpts.decidedBy`;**§121 SP2-7**):型改为 `Extract<ApprovalDecidedBy, 'policy'>`。🔴 硬破坏一句:sdk < 17.0.0 没有 `ApprovalDecidedBy`,出包 `.d.ts` 在那一代上找不到这个名(`skipLibCheck` 关时编译红,开时这一位退成 `any`);在地板 18.1.0 上与修前同一个 `'policy'`。
405
+ - **`parkedResumeStartupFromError` 的成因词兜底读位 `extra.cause`**(CC-522;退役登记 RL-72;**§121 SP2-7**,改口 §119 SC-1 的读序):只读具名位 `startupCause`。🔴 硬破坏一句:装 sdk 12.x 的宿主(低于地板)上,422 `parked_resume.startup_failed` 的读数不再带 `startupCause`(那一代 sdk 只把词放在 `extra` 上);sdk ≥13.0.0 的抛出物恒带具名位,读数不变。
406
+ - **结算词镜像表编译期正向钉的滞后词放宽**(CC-522;退役登记 RL-20;非公面):钉收回 `readonly Settlement['kind'][]`。硬破坏面:对宿主无(只在本包内部);今后 sdk 的 `Settlement` 联合若再落后于引擎结算词表,本包构建即红、不再放宽一格。
407
+ - **`PlanReviewWire.capsBaseUrl` 位删除**(RX-1;退役登记 RL-75;接入文档 **§121 RX-1**;0.93.0 `### Deprecated` 已预告;🔴 型面 BREAKING):计划审阅注入连线型上没有这一位了,宿主按 `{ client, capsBaseUrl }` 写的对象字面量编译红,删掉这一键即可。0.93.0 起它零读者,读数与行为一个字节不变(纯 JS 宿主多带这一键照常被忽略:计划审阅口只把 `client` 透给共用连线解析器,这一键的值——含取值器抛 / 代理拒读——一次也不被碰)。
408
+ - **`resolveHeadlessDetach` 的第一参与第三参删除**(RX-2;RL-76;**§121 RX-2**;预告同上;🔴 型面 BREAKING):签名收成 `resolveHeadlessDetach(env?)`(仍返回 `Promise<DetachResolution>`),两实参 / 三实参的 TS 调用编译红,删掉第一实参(与第三实参)即可。🔴 纯 JS 宿主的两实参调用不报错,但第一实参会被当成 env 读:关闭开关 `SEMA_HEADLESS_DETACH` 读不到、恒走默认开 —— 必须同批删第一实参。读数不变:开关为关闭拼写 ⇒ `{ on: false, reason: 'env-off' }`,否则 `{ on: true, reason: 'default-on' }`,任何车道都不探测。
409
+ - **`LimitsParseResult` 的 `ok: true` 臂删 `flaggedFlags`**(RX-3;RL-77;**§121 RX-3**;预告同上;🔴 型面 BREAKING):`parseLimitsArgv` 与 `limitsForPrint` 的结果对象不再带这一键,读它的写法编译红,删掉即可。`limits` 在不在场的读数不变(显式给了限值旗才有;只有环境默认值时 `parseLimitsArgv` 无 `limits`、`limitsForPrint` 有)。
410
+ - **两只常驻放行旧口 `askSurvivesPosture` / `askSurvivesStandingAnswer` 退出根入口**(RX-4 / RX-5;RL-56 / RL-57;**§121 RX-4 / RX-5**;🔴 型面 BREAKING;🔴 行为面:只对仍在调这两口的宿主):根入口运行期导出 −2、类型 −4(`AskPostureFacts` / `AskPostureSurvivalRoad` / `AskPostureVerdict` / `StandingAnswerVerdict`)。0.92.0 起这两口只是自动车道单一判定 `automaticAnswerVerdict` 的取较严者包装(0.92.0 `### Changed` 已写「两只旧口保留一版」,其后按登记顺延到本版),本版整件删:旧出身表判法、0.91.0 判法与两处取严合成不再存在,姿态与常驻回答的判定只读 `automaticAnswerVerdict(card, 'mode_posture' | 'standing_rule', facts?)`。改读时三态换名(`posture_may_answer` ⇒ `may_answer`;`must_ask` 的 `by` ⇒ `road` / `askClass`)。常驻回答那一口两边逐例同答;姿态那一口有两形输入新口比旧口松(宿主报「没命中」且卡上类集不免疫时:出身词 `rule_store_unavailable` 旧口恒必问、新口按类集判;不认识的出身词旧口答 `unknown`、新口不读出身词只看类集),另一形处置不变(宿主报「命中」而卡上没有类集:旧口 `must_ask`〔`by: 'settings_ask_rule'`〕、新口 `unknown`〔`why: 'classes_absent'`〕,都是出卡)。`MODE_ARBITRATION` 的值与根入口名不变(定义点挪进判定模块)。
411
+
412
+
413
+ ### Added
414
+
415
+ - **202 停驻体窄读上根入口 `readToolApprovalRespondParking(body)`**(CC-535;cli [9766] 请托,三端 [9776] / [9777] / [9779] 同拍消费;**§121 PK-2**):0.93.1 起只供包内结局臂用的那一只读器原样上根 —— `reason === 'parking_in_progress'` 才认,`approvalId` 非空串承载停驻事实、`retryAfterMs` 有限非负、`decidePath` / `message` 非空串,坏值只丢各自那一键、按键隔离读、永不抛;读数型 `ToolApprovalParkingBodyReading`(`parking` / `claimed_unreadable`)。直调 `respond` 的宿主(终端 legacy 回落腿 / 管理台 / 网页端 / 桌面端)换读这一只、删本地镜像;经包活卡路径的宿主仍拿结局上的 `parking` 位。根公面 +1。
416
+ - **`mandatedApprovalDetailOf(card)`**(CC-447 ⑦;接入文档 **§121 CP-7**):强制卡上「清不掉」那一句的按问类版本。通用句 `mandatedApprovalDetail()` 点名三类答者(这里的人 / hook / 部署跑的自动检查);卡上问类的折叠行既不放自动模式分类器、也不放沙箱准入时(例:`dangerous_delete`),这一句不再说「自动检查能答」,只说这里的人或 hook。读不出问类(缺席 / 坏形 / 集合里有本版不认识的类)⇒ 与通用句逐字节同。在本来渲通用句的地方(`approvalIsMandated(card)` 为真)改渲它即可;逐类「为什么」那半句仍由引擎写在卡的 message 里。
417
+ - **值级端口第十二件 `compileAllowList` 与同名读口**(CC-356 ①;**§121 CP-12**):引擎 allow 层读一张 allow 列表的读法。装配口在新形下用它复核整张 allow 表;没装 ⇒ 读口 `undefined`,装配口按老形投(与 0.93.x 逐字节同)。
418
+ - **allow 能力位读数多一位 `layer?`**(CC-356 ①;**§121 CP-11**):`/v1/capabilities` 同一节点上的第二只叶子 `settings.permissions.allowLayer`(服务端 7.117.0 起恒铸)读进 `PermissionsAllowGrantReading` 的 `present` 臂:布尔 ⇒ `layer` 原样;缺席 ⇒ 不落这一键;在场而不是布尔 ⇒ 整格畸形(读口答未观测、allow 不投)。
419
+ - **通告 `permission.allowed_tool_not_granted` 的事实读器 `readAllowedToolNotGranted`**(CC-457 C ①;接入文档 **§121 SV-1**;服务端 7.120.0 判据 G14 / G15):许可清单里读成空的条目逐条交出 `source` / `entry`(机读位 = 服务端给的脱敏原值,7.120.0 起 C0 控制符原样到端)/ **`entryShown`**(= `displayUntrusted(entry)` 单行形:控制符写成可见转义、凭据形换记号 —— 端上屏只用它)/ `reason` 与可选的 `skill` / `list` / `verdict` / `currentName` / `valueType`,`sessionId` 可选(部署清单那一形无会话)。条目表坏一条整只缺席、可选位坏只省自己;按码派发口 `readEngineNoticeFacts` 对本码由 `undefined` 改答 `{ code, audience: 'user', facts }`(`EngineNoticeFactsCode` 联合 +1)。根入口 +1 名;型 `AllowedToolNotGrantedFactsView` / `AllowedToolNotGrantedEntryView`。
420
+ - **能力位 `sessionReadRedaction` 读器 + 判据 `sessionReadRedactionAdmitted`**(CC-457 L;接入文档 **§121 SV-4**;读器家族第 27 只):服务端 7.120.0 起恒报「会话历史读面与 live 帧同一只脱敏」;端渲历史里的推理 / 工具输出前**按位判**,不按服务端版本号阈值判(7.119.x 已脱敏却不报本位 ⇒ 读成 `not_reported`,按「未证明」处置)。三态读数与同族恒真位同形;本位在历史读面缺席(`sessions: false`)时照真 —— 它不答读面在不在。根入口 +5 名(+ 测试钩 1)。
421
+ - **输出风格的每轮一句座**(CC-480 ②;接入文档 **§121 SV-5**;服务端 7.121.0 判据 G27):能力位读器 `outputStyleSeat`(读**顶层** `outputStyle`;读器家族第 28 只;判据 `outputStyleSeatAdmitted`;根入口 +5 名 + 测试钩 1)+ live 兜底层 `applyLiveRequestDefaults` 两个新入参 `outputStyleSeat?: { name, turnReminder? }` / `outputStyleSeatReading?` —— 读数认才把座落成请求顶层 `outputStyle`(原样浅拷贝,不裁键不判形;调用方已带不覆盖);不认 / 没给 ⇒ 不落(老 worker 对顶层键整份 400)。风格正文仍走 `settings.outputStyle`,两个座位两件事。`LIVE_DEFAULT_FIELDS` +1 行 `outputStyle(每轮一句座,见位才落)`。
422
+ - **两只准备期拒码进配置拒绝识别表**(CC-457 A ① / CC-480 ②;接入文档 **§121 SV-5 / SV-7**):`CONFIG_AGENT_UNKNOWN_TOOL` = `config.agent.unknown_tool`(子代工具清单里有一条名不对任何工具 —— 大小写孪生 / 退役拼法 / 文法不成立 —— 引擎 7.46.0 起开跑前拒、模型零触达)与 `CONFIG_OUTPUT_STYLE_INVALID` = `config.output_style_invalid`(顶层每轮一句座值形坏,服务端 7.121.0 起可达;受理后在准备期拒,不是 400)。只登记、不新增按码分派臂:渲染按 `config.` 前缀走配置拒绝族的既有处置(通用句 + 原码上屏),认不出的码回落通用句的律不变。根入口 +2 名。
423
+ - **`ModelUnreachableFactsView.taskId?`**(CC-480 ①;接入文档 **§121 SV-2**;服务端 7.121.0 判据 G26):`server.model_unreachable` 的事实读器多读一个可选位 `taskId`(这一次运行的 run 资源 id:流式提交 = `X-Task-Id` = `meta.taskId`,后台提交 = 提交回执的 `taskId`);缺席 = 老服务端 / 没有 run 店的流式提交 / 读不出,不补不借;读坏只省这一键。
424
+ - **请求键 `approvalReach` 与片段口 `approvalReachDeclaration` / `approvalReachDeclarationSettled`**(CC-365;**§121 RQ-1**):「这条运行上没有人能答审批」的逐运行声明(值闭集由引擎包根 `APPROVAL_REACH` 构建期生成,今天唯一一词 `"none"`)。端只交一位事实 `approverReachable`(这一车道上有没有能答审批的面);`false` 且能力位 `approvalReach` 为真 ⇒ 片段 `{ approvalReach: "none" }`;没报(服务端 ≤ 7.117.x,带这一键会整份 400)/ 为假 / 没读到 / 读不懂 ⇒ 空片段 + `withheld { cause, text }`。车道表末尾新增 `approvalReach` 一行:只有无人值守车道有座,交互 / 一次性车道回执 `off_lane`;闭集外的值构造期按名拒、不回显值。型 `ApprovalReachDeclaration` / `ApprovalReachWithheldCause` / `ApprovalReachWord`。
425
+ - **`isApproverUnavailableGate(g)`**(CC-322 ②;**§121 RQ-3**):门记录「审批口答没人可达、而引擎没有可停放的持久审批席」那一形的具名谓词 —— 拒 ∧ 结算词 `approver_unavailable`;与兄弟谓词同签名,与窗到期 / 限额回落 / 停驻三形互斥。
426
+ - **`LocalEngineModelIdentityReading.routeGap?` 与型 `ModelRouteGapReading`**(CC-322 ③;**§121 RQ-4**):宿主报的路由判读(`endpoint_missing` / `lane_credential_missing` / `none`)并进模型身份三态 —— 有模型名而路由起不来的那一形判 `not_resolvable`,句子点名缺哪条路;缺席 = 不判路由。
427
+ - **`effortLevelsOf(model, catalog?)` / `effortLevelHonored(reading, level)` 与型 `EffortLevelsReading`**(CC-326;**§121 RQ-5**):按在线模型目录行的 `supportedEffortLevels` 答「这只模型接受哪几档思考档位」—— `clamped` / `not_clamped`(推理模型、不夹档)/ `not_applicable`(非推理模型)/ `unknown`(五因);整只目录缺席与单行缺键分开判;`LiveModelInfo` 多声明 `supportedEffortLevels?`。
428
+ - **附件描述符 `mcp-resource` 与「没带上」四个新原因**(CC-315 增量;**§121 RQ-6**):`{ kind: 'mcp-resource', server, uri, name, parts, truncated }` 写成数据信封(文本段逐行编号、二进制段只记类型、截短一句事实句);`not-included` 多一形 `target: 'mcp-resource'`(带 `server` / `uri`);原因闭集 +`approval-required` / `server-not-connected` / `resource-not-listed` / `read-failed`;型 `UserAttachmentMcpResourcePart`。
429
+ - **`PermissionsDeclarationInput.clientOwnedServers?` / `PermissionsDeclarationReport.clientOwned?` / `WIRE_RULE_TRUST_ORDER`**(CC-413;**§121 RQ-7**):客户端自己挂上的 MCP 服务器交名字,本包按引擎的铸名端口铸整服务器 allow、并进 allow 桶(不受读健康门罩,受能力位门罩),报告口单列每只的去向;请求体权限规则的来源信任序公面导出(冻结,与装配口排序是同一只)。型 `PermissionsClientOwnedStatement`。
430
+ - **`requestEngineCompact` 的 `opts.onSettled` 与类型 `EngineCompactOutcome`**(CC-512;接入文档 **§121 HW-4**):手动压缩那一发的发射结局回传。形 `{ kind: 'accepted' } | { kind: 'refused', status, errorCode? } | { kind: 'failed', detail, status?, unconfirmed?: true } | { kind: 'offline' }`:`accepted` = 引擎受理(HTTP 2xx;名字刻意不叫「已压缩」—— 受理不等于压完:压完的证据是那条 run 流上的 `compacted` 事件,无事可压时不出事件);`refused` = 引擎答了、没收(4xx,或 501 + `capability.*` / `feature.*`);`failed` = 没拿到明确答复(5xx / 传输失败 / 注入形 60 秒截止 / client 自身时限;`unconfirmed: true` = 这一发可能已被受理);`offline` = 发射那一刻造不出 client。至多回调一次、绝不在 `requestEngineCompact` 返回之前同步重入、接收口抛了只留痕不外溢;404 在单次重试之后才落定;idle 时 arm 的请求,结局在下一条 run 绑定后的发射落定时到(同槽攒下的多个接收口各收一次)。缺席 `onSettled` = 与 0.93.1 逐字节同(无回传)。同步返回值四个词与类型一个不动,语义改口为「已请求」(见 Changed)。
431
+ - **决定口拒收的三端公共判定**(CC-438;接入文档 **§121 HD-2**):`classifyDecisionRefusal(err)` → `{ standing, status, errorCode?, transient? } | undefined` —— 只按状态码与机读码分三类:`settled-elsewhere`(404 / 410 / 409 ∧ `conflict.ask_decided`:那一问已不在等)/ `ambiguous`(5xx 非 501:可能已落库,不许断言没生效)/ `refused-pending`(其余 4xx 与 501:引擎在裁决之前拒收了这一发);状态码读不出 400–599 整数 ⇒ `undefined`(没拿到判决)。另报瞬时性 `transient: true`(present-iff:408 / 425 / 429 / 502 / 503 / 504,或拒体自有 `retriable: true`)。`liveAskPendingReading(envelope, approvalId)` → `pending` / `not_pending` / `unknown`(读审批列表的活卡段;没报 / 坏形 / 抛 / 有坏行被丢 ⇒ `unknown`)。`decisionRefusalClosesOut(refusal, pending)` 恰在「不是 settled-elsewhere ∧ 不是瞬时拒收 ∧ 读数 pending」时为真(瞬时拒收之后仍在等是正常可恢复状态,不据它停 run)。`undeliverableDecisionContent({ status, errorCode?, end, runId? })` 是收口之后的唯一一句(`end` ∈ `run-stopped` / `run-unconfirmed` / `turn-stopped`)。端只保留编排(收口端口、拒收那一刻绑定车道、同一问只收一次)。
432
+ - **「为什么没放行」的原因口与两条自动拒车道的拒因句**(CC-439;**§121 HD-3**):`noAllowCauseOf(card, ladder)` → `no_allow_rule` / `ask_rule` / `budget` / `other` / `undefined`,由卡上规则车道判定与宿主规则阶梯的判决证据位(`RuleLadderNoAllowFacts`,只认自有数据属性上的严格 `true`)合出;`policyDenyReason({ lane, toolName, cause?, allowRuleFlag?, budgetSetting? })` 是无审批口车道与 dontAsk 模式各四形的拒因一行,与 `HITL_POLICY_DENY_MESSAGE` 同一铸口,只说这一次调用、宿主专有的出路(规则旗名 / 预算设置名)只在宿主给出时出现。
433
+ - **自动车道判定第三车道 `permission_request_hook`**(CC-450;**§121 HD-5**):`automaticAnswerVerdict(card, 'permission_request_hook')` 答「钩子这类自动作答者能不能答这张卡」—— 同一张仲裁表、读 `hookAskFloor` 列;真人位 / 治理位 / 强制族 / 出身词经列先行;让位证据与宿主事实不读;缺席 / 坏形 / 表外 ⇒ `unknown`。`permissionRequestHookScope(verdict)` → `allow_or_deny` / `deny_only` / `skip`(may_answer / unknown / must_ask;读不懂的判决 ⇒ `deny_only`)。型 `AutomaticAnswerLane` +1 词、`AutomaticAnswerAskFace`、`PermissionRequestHookScope`。
434
+ - **审批卡三个可选位与三句人话**(CC-433 / CC-283;**§121 HD-1 / HD-6**):`ApprovalCardRequest.boundGrants?`(Skill 卡批准时还授予什么:技能名或 `null` + 两只清单;只在活卡帧腿,坏形整键缺席,冻结)/ `classifierNoRuling?`(分类器没判的成因词,开集,只在活卡帧腿)/ `priorCardsForCall?`(同一调用上更早呈出、问的是另一件事的卡:`ApprovalPriorCard { approvalId?, origin?, mandate?, outcome? }`,冻结);人话 `approvalBoundGrantsDetail` / `classifierNoRulingDetail` / `approvalPriorCardsDetail`(各自唯一铸点;授予清单那一句只给条数,不嵌部署文本)。
435
+ - **座位能力表与 `pickFolder`**(CC-469 ①;接入文档 **§121 SW-1**):`LocalSessionsApi.pickFolder(): Promise<string | null>`(宿主原生目录对话框;`null` = 用户取消)与能力表 store `seatCapabilitiesState`(态 `{ pickFolder?: boolean }`);读口 `seatCapability(state, name)` 三态(`reported` / `not_reported` / `malformed`,只认自有数据属性)、订阅口 `watchSeatCapability`(先订阅再读现势,迟订阅者第一拍就是现势)、禁用句 `seatCapabilityUnavailableDetail`(三句,没报 ≠ 做不到)、闭集 `SEAT_CAPABILITY_NAMES`。可缺的座位动词能不能用只由宿主发布的能力表答,不靠调用失败判。
436
+ - **会话记录键 `LocalSessionRecord.cwd?`**(CC-469 ②;**§121 SW-2**):开场时用户选的文件夹,`start({ cwd })` 的值原样回显(项目分组只读这一位);缺席 = 没选。
437
+ - **`deviceFlowPollingPlan(reading)` 与型 `DeviceFlowPollingPlan`**(CC-504;**§121 SW-5**):设备码登录轮询的握手寿命(`timeoutMs`)与轮询间隔(`intervalSeconds`)—— 响应里的有限正数优先,缺席或坏形取设置契约数(构建期生成,不手写),间隔 ≥ 1;读数不是对象 ⇒ `undefined`。
438
+ - **`askProbeReasonDetail(card)`**(CC-191;接入文档 **§121 HW2-3**):卡上「为什么问」那一句的唯一读口 —— 探针原话在场 ⇒ 原话经 `displayUntrusted` 单行形(干净文本逐字节不改写);缺席而结构因由在场 ⇒ 本包一句「自动检查清不掉这一问、引擎没说具体原因」,码词形合(`<domain>.<snake_case>`)才在句尾带原码;两者都缺 / 读不出 ⇒ `undefined`。活卡与停驻卡装配出的卡同一句。
439
+ - **`subagentStateDetail(carrier)`**(CC-231;**§121 HW2-4**):引擎结构卡(`task-output` / `agent-transcript` 的 `agentState`、`list-agents` 每行的 `agentState`)上的子代状态读数说成一句 —— 状态词与审批词原样(引擎包根只有类型、没有运行期词表,本包不手抄)、最后活动按引擎读数时刻 `readAt` 算(不读本机钟)、读不出就说未知。
440
+ - **`ToolApprovalFrameOutcome.aborted?: true` / `joinedInFlight?: true`**(CC-514 / CC-493;**§121 HW2-1 / HW2-2 · FX-2**):活卡被中止(没被引擎收口帧撤走)⇒ `aborted`(包发起了恰一发中断拒绝);同一审批已有一路持有这张活卡 ⇒ 本路拿持有者结局的浅拷贝、带 `joinedInFlight`(语义与停驻卡同名位逐字同)。
441
+ - **结果帧 `_sema_` 串型超集键的读口族**(CC-312;接入文档 **§121 RP-1**):`resultErrorCodeOf` / `resultSelectedModelOf` / `resultSalvagedResultOf` / `resultParkFailedReasonOf` —— 读帧上**自有数据位**的非空串(原字节);非对象 / 数组 / 只在原型链上的同名键 / 取值器(不执行)/ 空串 / 非串 / 读描述符就抛的代理一律 `undefined`,永不抛。旧名 `errorCode` / `model` / 错误信封上的 `result` 本包 0.83.0 起零铸点,本族不并读。包内读这几位的两处(adapt 的错误信封抢救正文、结果帧投影读帧上的停车真因)改走同一条读法。根入口 +4 名。
442
+ - **接线回执 `instructions` 段的归属读口**(CC-313;**§121 RP-2**):能力位 `callerCwd` 读器(读器家族第 29 只:`projectCallerCwdCapability` / `noteEngineCapsForCallerCwd` / `observedCallerCwd` / `forgetCallerCwdReading` + 测试钩;判据 `callerCwdAdmitted` 只认 present ∧ `true`;型 `CallerCwdReading`)—— 宿主在探测回调里先 note 再读,同一拍就读到这一次的读数;`legCwdOfBody(body, reading)`(读数认 ∧ 真出站的体序列化后带非空 `cwd` ⇒ 那一串;与文件历史关断声明同一只出站体读法);声明事实账本多记一份事实 `declaredLegCwd(requestKey, cwd)` / `legCwdOf(runId)`(同一只账本、同一只绑定帧判据);`engineSelectedInstructionsFile(view, { legCwd, currentCwd, realPathOf })` —— 腿 cwd 与当前目录逐字相等 ∧ 首员是安全的相对路径(无 `..` / 绝对 / 盘符 / 反斜杠 / 空段;展示出口原样不动:无控制、双向、格式类、行段分隔符)∧ 按宿主的真路径口解析后仍在当前目录之内(符号链接指出去不认)⇒ 那一员,否则 `undefined`。根入口 +7 名(+ 测试钩 1);型 `InstructionsAttributionInput`。
443
+ - **core 值级端口路由判官五件与同名读口**(CC-478;**§121 RP-3**):`routeKeyOf` / `joinRequestUrl` / `resolveRouteCredential` / `adjudicateModelRoute` / `routePairingStatus`(引擎包根 `brain/route-adjudicator` 同名五只原样装进来;凭据必须与它打的地址配对的那条律只有引擎一份实现)。没装 ⇒ 读口 `undefined`(不照抄、不编「可走」),引擎对坏值的 `TypeError` 原样上抛。型 `RouteModelView` / `RouteCredentialInputView` / `RouteCredentialView` / `RouteAdjudicationView` / `RouteRefusalDetailView` / `RoutePairingStatusView` / `PerModelAuthView`(词按开集读)。根入口 +5 名。
444
+ - **订阅流排空终帧的判型口与决策口 `isInStreamDrainingEnd(frame)` / `streamDrainingDecision(frame, attempt, opts?)` / `STREAM_DRAINING_RECONNECT_MAX`**(CC-519;接入文档 **§121 SP2-4**;服务端 7.122.0):服务端实例进入排空(或硬停起点)时,八条只读订阅流各收一帧 `event: error` + `errorCode: "draining"` 后被关闭 —— 这是「这台在下线、换一台重连」,不是失败。判型口认 sdk 投出的三种形(扁平 / 事件包 / 舰队流未知帧透传),与提交前 503 的同码错误对象、`failed` 终态帧上的同码、流帽与 workflow 失败帧两向分开;决策口答 `{ reconnectAfterMs }`(等待就是 `drainingRetryDelayMs` 那一条退避梯,帧体没有等待窗)或 `{ giveUp: 'not_draining_end' | 'attempts_exhausted' }`(连续三次终帧之后放弃)。
445
+ - **leader 车道 422 拒收码 `REQUEST_AUTONOMY_LANE_REFUSED` 与读口 `autonomyLaneRefusalFromError` / 一句话 `autonomyLaneRefusalContent`**(接入文档 **§121 SP2-2**;服务端 7.122.0):部署自主档是 plan 时,`POST /v1/leader` 答 `422 request.autonomy_lane_refused`(leader 运行没有审阅计划的通道);读口只按码认,一句话说清没启动、为什么、两条出路,不带服务端原句。
446
+ - **活卡 202 停驻读数多一位 `message?`**(CC-518;接入文档 **§121 SP2-3**;服务端 7.122.0 起体上恒带):`ToolApprovalRespondParkingView.message` 与判别口 `parking.message` 原字节交宿主,只认自有数据位上的非空串;坏形只丢它、停驻照认。本包的用户面一句不变、不拼它;宿主要显示它,先经 `displayUntrusted`。
447
+ - **子代工具清单拼法预判 `agentToolListFlaws(agents, roster?)`**(CC-457 A ②;接入文档 **§121 SP2-5**):`disallowedTools` / `tools` 里的退役拼法(带现名)、含 `__` 却无协议前缀的名、与挂载名册只差大小写的孪生(带现名)逐条交出;与引擎对子代 deny 表的判官逐条同答(deny 表的内容形条目 `bash(rm *)` 按括号前的名判,引擎对它同样整跑拒)。`projectAgentsForWire` 同批带出 `toolListFlaws?`(present-iff)与告警;宿主开 `withholdRefusedDenyLists` ⇒ deny 侧有问题的 agent 不送;`toolRoster?` / `agentSourceLabel?` 两个可选入参。
448
+
449
+
450
+ ### Changed
451
+
452
+ - 🔴 **`modelSetupDecision` 的第一参收读数**(**§121 FX-4**;CC-322 ③ 同版):`modelSetupDecision(identity: ModelIdentityResolvability | ModelIdentityReading, hostCanConfigureModel)` —— 交读数时与 `modelIdentityResolvability` / `modelIdentityDetail` 走同一次分析,路由缺口那一形的 not_resolvable 落 `explain_route_gap`;交三态时与 0.93.x 同(三态里分不出路由缺口,要那一臂请交读数);三态入参是过渡臂,本版两形都认,0.95.0 删(Deprecated 一条;退役登记 RL-91)。🔴 **型面 BREAKING**(只对穷举写法):`ModelSetupDecision` 联合 +1 员 `explain_route_gap`(对它做 `never` 穷举的写法编译红一次,措辞取 `modelSetupNotice`)。
453
+
454
+ - **用户附件信封外套闭集标签 `<attachment path="…">`**(CC-539;🔴 行为面:提交体多一层标签,公面导出 / 型零变化;**§121 ET-1 – ET-3**):`mintUserAttachmentEnvelope` 铸出的每一块附件信封、装配口 `encodeHumanTurn` 拼进提交正文的每一块,外面再套一层 `<attachment path="<路径>">` … `</attachment>`(开标签、闭标签各占一行);降级成引用句的附件(内容一字不带)是自闭合的一行 `<attachment path="<路径>" />`,换行后跟原引用句;多附件多块、各自外套,块与块、块与用户正文之间仍是 `\n\n`。标签内文本与 0.93.x 的信封逐字节同(围栏 / 行号 / 显形规则一概不变,标签行自身不带行号);`path` 属性取信封里「Full path:」之后写的同一个形,再把 `&` `"` `<` `>` 写成实体 `&amp;` `&quot;` `&lt;` `&gt;`(解实体一遍恰得那个形)。MCP 资源两形没有路径位 ⇒ 仍套标签、不带属性(`<attachment>` / `<attachment />`)。为什么:按标签名剥「非用户块」的读者(会话标题、转录摘要)认不出无标签散文,会拿附件正文当用户的话。三端经包零改码;终端的逐字节金样与一处探针断言要随换钉改真(§121d)。已知限制 KL-656(正文里的 `</attachment>` 字面串不显形)。
455
+ - **开发依赖引擎 `~7.44.0` → `~7.47.0`,生成表重生**(CC-447 / CC-452 / CC-499;**§121 CP-1 – CP-4**):通告码册 86 → 87(`permission.rule_row_dropped`,受众 user,只登记、不加读器,端渲引擎原句);问类仲裁表 +1 行 `dangerous_delete`(保护位置上的删除,任何模式 / 规则 / 分类器都清不掉)—— 🔴 **型面 BREAKING**(只对穷举写法):根入口 `MODE_ARBITRATION` 的键型 +1;放行原因词表 `GATE_MODE_RELEASE_REASON_WORDS` +1 词 `write_protection_unresolved`(引擎在 shell 面放行一次写目标解析不出的调用时带的披露词)—— 🔴 **型面 BREAKING**(`GateModeReleaseReasonWord` 联合 +1,对它做 `never` 穷举的写法编译红一次)。
456
+ - **请求体 allow 桶按接收它的那一代引擎选形**(CC-356 ①;**§121 CP-10 / CP-11**):能力位 `allowLayer` 为真且宿主装了 `compileAllowList` 端口 ⇒ 新形 —— 内容形 allow(`Bash(git:*)` / `Read(//dir/**)` / `Edit(src/**)`)按原串投出,名字层几关照旧;投完按引擎 allow 层整表复核,会让别的条目跟着读成空的那一条(今天:`*`)不投、报告口理由 `voids_allow_list`,复核答不上来 ⇒ 整桶留下 `judge_failed`。老形(只有 `allowGrant`,或宿主没装端口)与 0.93.x 逐字节同,理由 `content_form_not_grantable` 只在老形出现。doctor 句新形一句(命中不问,强制类除外)。🔴 **型面 BREAKING**(只对穷举写法):`PERMISSIONS_KEPT_REASONS` 十三词 → 十四词。
457
+ - 🔴 **型面 BREAKING:`CoreValuePorts` 多一只必填成员 `compileAllowList`、`CORE_VALUE_PORT_NAMES` 十一件 → 十二件**(CC-356 ①;**§121 CP-12**):按完整 `CoreValuePorts` 型建端口袋的宿主编译红一次 —— 把引擎包根同名函数原样加进 `installCoreValuePorts({...})` 即过;用 `Partial` 袋的宿主不受影响(没装 ⇒ 老形)。
458
+ - **请求面权限模式词表改由引擎包根生成**(CC-453;**§121 CP-9**):成员不变,序改为引擎序(`default` / `acceptEdits` / `plan` / `auto` / `bypassPermissions` / `dontAsk`)。🔴 根入口两只副本 `PERMISSION_MODE_INTENTS` / `HEADLESS_PERMISSION_WIRE_MODES` 的元素序随之变,座位入站门与 headless env 旋钮的拒句 / 告警里列词的序也随之变;按成员判的写法不受影响。
459
+ - **`unsupported.path_base` 那一句改口**(CC-452 ②;**§121 CP-6**):引擎 7.46.0 起只在「声明了不可用的基」时铸这一码(没给基的相对规则按这一跑的树判),老一代在「没给基」时铸 —— 句子改成两代都真:「基缺席或不是可用的绝对路径」。
460
+ - **「用户输入没被用上」读口的车道与条数位改读生成表**(CC-447 ④;**§121 CP-8**):`readUserInputUndrained` 不再按两只码串手判,改读引擎包根 `USER_INPUT_UNDRAINED_FAMILIES` 的生成物;读数与句子逐字节不变。
461
+ - **`dontAsk` 按名投影;回落只在字段投影口判一次**(CC-426;接入文档 **§121 SV-6**):别名口 `normalizeShellPermissionModeForWire` 的别名表只剩 `manual → default` 一行,`dontAsk` 读数怎么给都按名原样交出(修前读数不认时在别名口归一成 `default`,与字段投影口 `permissionModeField` 的读数不认臂是同一个回落写两处;那一行退役)。发不发 `dontAsk` 只由 `permissionModeField` 按能力位 `permissionModes` 判:认 ⇒ 原样发;不认 ⇒ 表了态(`stampDefault`)落 `default`、没表态落 `{}`。合用写法 `permissionModeField(normalizeShellPermissionModeForWire(m), { stampDefault, permissionModes })` 在每种读数下与 0.93.1 产物逐字同;headless 两车道同(env 车道的降档警示改从字段投影口的产物读,句子不变)。🔴 两处可观测差:① 把别名口返回值**直接**当 wire 词发的调用方(不经字段投影口)拿到 `'dontAsk'` 而不是 `'default'`(老服务端对它 400);② 只给字段投影口读数、不给别名口读数的半接法,读数认时由发 `default` 变发 `dontAsk`(收紧方向:引擎自己拒要问的调用)。
462
+ - **持久规则列举:`request.query_invalid` 按「这一发有没有带游标」分臂**(CC-457 E ①;接入文档 **§121 SV-3**;服务端 7.120.0 判据 G20 / G33;🔴 `RulesFailure` 联合 +1):`classifyRulesFailure(e, context?)` 多一个可选第二参 `{ cursorSent?: boolean }` —— `false` ⇒ 新臂 `{ kind: 'query-refused', message }`(列举的查询被拒,今天即 `?scope=` 的 project 根不是绝对路径;句子原样、不重列);`true` 或不给 ⇒ 照旧 `cursor-stale`。`listAllPersistedRules` 自己交这一位:首页(不带游标)被拒 ⇒ `query-refused`(修前 `cursor-stale`,端据此提示「清单变了、刷新」)。不带 scope 过滤的列举零变化。对 `RulesFailure['kind']` 做 `never` 穷举的写法编译红一次。
463
+ - **开发依赖 `@sema-agent/settings-schema` `^8.0.0` → `^10.0.0`;私钥 PEM 头只有一只定义**(CC-490;构建期,不进运行期依赖、不进 `peerDependencies`、不出包;接入文档 **§121 SV-8**):10.0.0 起配置层写侧判据在串中任意位置认私钥 PEM 头,并从包根导出这只定义 `PRIVATE_KEY_PEM_HEADER`(不锚定、不分大小写);本包生成表同批生成它(`SETTINGS_PRIVATE_KEY_PEM_HEADER`;`SECRET_LITERAL_RE` 两版逐字同,仍是串首锚)。展示出口两处改读它:① 整串判据(`looksLikeKnownSecret`,与配置层写侧判据逐条对拍)串中任意位置的私钥头判阳(修前只认串首);② PEM 块切分的块头由它拼成 —— 修前包内另写一份块头(`BEGIN` 后要字面空格、分大小写),小写块头 / `BEGIN` 后不带空格的私钥块主体整块上屏,本版与常规形一样主体换记号、块头块尾原样。公钥 / 证书照旧不认。干净文本逐字节不变。
464
+ - **无人值守车道的权限模式恒显式**(CC-173;🔴 行为面只一形;**§121 RQ-2**):`resolveHeadlessPermissionMode` 在旗给了本层不认识的词时,修前不盖模式(请求不带 `permissionMode`),现在盖 `default` —— 这条车道的请求从此恒带显式模式(旗 / 环境变量都缺 ⇒ `default` 在 0.27.0 起就是如此)。服务端 7.115.0 起把缺席也读成 `default`,显式盖章与它同答;在支持底线内更老的服务端上是收紧方向。交互车道的 `stampDefault` 门、环境变量两句告警的一次性射程不变。
465
+ - **`modelIdentityDetail` 来路臂改句**(CC-322 ③;🔴 措辞面;**§121 RQ-4**):修前「… supplies a model name, so the local engine can start with it」在缺端点 / 车道零凭据两形上不成立;现在宿主报 `routeGap: 'none'` 才说起得来,没报只说有模型名、路由与网关认名各是另一项检查。
466
+ - **车道表 `REQUEST_FIELD_MATRIX` 末尾 +1 行 `approvalReach`**(CC-365;**§121 RQ-1**):按整表快照断言的判据按新字节改;其余各行逐字节不变。
467
+ - **用户面失败句不再带错误类名**(CC-508;🔴 行为面:措辞;**§121 HW-1**):七处把 `String(e)` 直拼进用户面句的出口 —— HITL 桥取件(`approvals.list failed: …`)、审批卡 approve / deny 两条决断出口(`decide(approve|deny) failed: …`)、提问卡决断出口(`decide failed: …`)、取件等待(`probe threw: …`)、本地规则解析(`rule text did not parse (…)`)、后台停止的非对象抛出物(`the stop request failed: …`)—— 改走包内既有的「抛出物 → 可渲染句」读口:取抛出物自带的非空 `message`;抛出物本身是非空串 / 数 / 布尔时取其文本;其余(对象没带 `message`、`null`、取值器或转换钩子抛、`message` 为空的带类名错误)落固定一句 `the call failed with an error this client could not render`,不再是裸类名 / `[object Object]` / `null`。类名与读口名不进句子;原抛出物(含类名)只进宿主日志(取件 / 两条审批出口 / 提问卡出口各一行 debug;取件等待与本地规则解析两处是零宿主依赖的纯模块,不留日志)。同形存量同批改齐:瞬断重试耗尽错把内层传输错误文本带进 `reason` 的那一段(此前是「…: TypeError: fetch failed」)、计划审阅决断「够不着引擎」句。`decideFailureNote` 的补句组合与 `errorCode` / `currentPending` 等机读位不动。
468
+ - **`resumeContextUnavailableContent` 的三句与保留时长句改英文单源**(CC-513;🔴 行为面:措辞;**§121 HW-2**):此前只有中文,与本包其余用户面句不一致,多语言的端也无法按码选句。现在三段(` · ` 分隔)恒为英文:`This approval has nowhere to be delivered: …` · `Nothing was decided and your decision was not consumed; this card is still waiting` · 第三句按 `runId` 在场与否给恢复指引(`The error carries this run's id: …` / `The error carries no run id: …`),`staleAfterSec` 在场才在句尾带 `(this deployment keeps conversations for N seconds)`、缺席不渲。端按 `code`(`conflict.resume_context_unavailable`)自行本地化,不要拿这几句当 i18n 键。旧中文句整句作废,不留双语开关。
469
+ - **计划审阅决断撞 409 `conflict.resume_context_unavailable` 走缺席句**(CC-513;**§121 HW-2**):修前该码落进通用 4xx 句(模型与宿主只拿到「HTTP 409 …」一行);现在结局句 = `This <approve|reject> was not applied. ` + 上一条的同一只措辞(带 / 不带 `runId` 两形)。机读位 `effect` 仍是 `not_applied`(与修前同值,只换句子)。别的 409 码照落通用句。
470
+ - **计划审阅的 `permissionModeAfter` 不再按决断词预检**(CC-509;🔴 行为面;**§121 HW-3**):`HitlBridge.reviewPlan` 与 `decidePlanReview` 此前在本地只放行 `approve` 带这一键(`edit` / `reject` 带它 ⇒ 本地拒、一个字节不发),那是服务端规则的手写镜像 —— 服务端 7.122.0 起 `edit` 也受理,镜像把合法的 `edit` + 模式词拦在本地。现在本地只核**值集**(闭集两词 `default` / `acceptEdits`;词表外 ⇒ 本地拒、零请求,拒句不再说「只配批准」),其余照发,拒绝由服务端的 400 `request.field_conflict` 说话:`reviewPlan` 原样抛给调用方;`decidePlanReview` 的结局 `still_parked`(状态未动),`reject` + `acceptEdits` 的句子是 `The plan reject was NOT applied: the engine refused the post-approval permission mode that was sent with it …`(不借 approve 那一句的成因);`approve` 的既有两句逐字不变。老服务端对 `edit` + 键同样 400 同码 ⇒ 同样原样抛、决断没生效(不静默降档重发)。`default` 撞 400 去键重发恰一次的既有行为不变。
471
+ - **手动压缩:同步返回值语义改口为「已请求」**(CC-512;🔴 行为面;**§121 HW-4**):`requestEngineCompact` 的 `fired` / `armed` / `offline` / `unsupported` 四个词与返回类型不变,但 `fired` 只表示「这一发已经出手、结局未定」,`armed` 只表示「等下一条 run 绑定后才发」—— 壳不要据此报「已压缩」,要等 `onSettled` 的结局(见 Added)。409 `compact.not_running`(这条 run 在压缩落到它之前已经结束,什么都没压)另经 HITL 宿主面同族口上屏一句 `engine run finished before compaction was applied; nothing was compacted`(warning / 立即顶替 / 10 秒自清;无宿主口 ⇒ 静默),不依赖命令行还在不在。
472
+ - **`project*Capability` 直调遇取值器抛 ⇒ 吞返 `undefined`(全族单律)**(CC-507;**§121 HW-5**):全族 26 只导出的能力位投影函数此前对「读就抛的取值器 / Proxy」有两种处置 —— 4 只吞(`approvalDecidedBy` / `centerWiring` / `permissionModes` / `storePosture`)、22 只直接抛(只在读口工厂的 tee 落点被统一吞成「整格删」)。现在全族同一处置:直调同样吞返 `undefined`(畸形、整格删),读口工厂 tee 路径的行为不变。单律的口径是「取值器抛且抛出物逃逸到投影函数外层 ⇒ `undefined`」:以 `store` 为见证的读器(`sqlEngine` 等)的见证口把抛吞在内层(见证读不出 ⇒ 老一代 ⇒ `not_reported`),没有抛出物逃逸,外层律不触发,这不是例外;见证口之后的读抛(例 `store.sql` 取值器)照样被外层吞成 `undefined`。
473
+ - **姿态车道按卡所在的工具面读 bypass 列**(CC-436;🔴 行为面:命令面工具上带写保护未决的卡;**§121 HD-4**):工具面只由卡上工具名在生成表命令面名单里**逐字**判出(引擎 `askFaceOf` 派生,今天 `Bash` / `Monitor`;读不出 / 不在表 ⇒ 另一面 = 引擎的无面读法),某类在某面上放不放只读生成表 `releasableAskClassesFor(face)`。前:`write_protection_unresolved` 在姿态车道一律必问(判法第 5 行强制词、第 10 行折叠)。后:命令面上它放(宿主报没命中 ask 规则时 `may_answer`,披露词按引擎放行原因表),文件工具等其余面照问;集合里别的免疫类照拦;规则 / 钩子两车道不读面。`foldModeArbitrationRow(classes, askFace?)` 加可选面参(缺席 = 另一面,与修前同答)。终端在 Bash 面改写这一词的那段视图随换读删除(§121d)。
474
+ - **耐久决断单一持有登记的身份加了行实例**(CC-283;🔴 行为面:同一调用先后两条停驻行;**§121 HD-6**):身份 = 行的会话 + run + `callKey` + 行的 `createdAt`。前:同一调用的第二条停驻行(引擎为另一道检查再停一次)与第一条同键,第二路会 join 第一条在飞 / 刚落定的决断。后:两条行各自是一次决断;同一条行实例两路取到照旧相遇。行上没有 `createdAt` 时与修前同(KL-637)。
475
+ - **上游表生成器要求开发依赖 core ≥ 7.47.0**(CC-436):问面批(`ASK_FACES` / `askFaceOf` / `releasableAskClassesFor`)生成 `src/generated/engineAskFaceTables.ts`(只进生成物、不上根入口);更老的 core 拒生成并一次点齐缺席名。
476
+ - **冒号之后同行的短横是列表符号不是值**(**§121 DO-3**):`token: - 甲` 此前把短横当值遮成记号、真值原样在后;现在短横让位、值从它之后读(`api_key: - not set` 的短横不再遮)。洗过的块序列在缺省单行载体上折成 `键: - «…» - «…»`,再洗一遍不动它(一轮即不动)。只少遮短横这一个字符,不少遮任何值。
477
+ - 🔴 **型面 BREAKING(只对座位宿主实现方):`LocalSessionsApi` 多一只必填动词 `pickFolder` 与一只必填 store `seatCapabilitiesStateStore`**(CC-469;**§121 SW-1**):`LOCAL_SESSIONS_SPEC` 动词 17 → 18、store 3 → 4;按完整型写宿主实现的一方编译红一次 —— 实现 `pickFolder` 并发布能力表即过(弹不了框的宿主发布 `{ pickFolder: false }`)。只读接口的渲染端零编译红。
478
+ - **会话记录出站门多一条**(CC-469 ②;**§121 SW-2**):`cwd` 在场而不是非空串 ⇒ 拒(`field: 'cwd'`)。
479
+ - **上游表生成器设置契约批 +2 名**(CC-504):`DEVICE_CODE_TTL_SECONDS` / `DEVICE_POLL_INTERVAL_SECONDS` 生成进 `src/generated/settingsSchemaTables.ts`(只进生成物、不上根入口);不是正有限数 ⇒ 拒生成。
480
+ - **叫法**(CC-515;**§121 SW-6 / 121a′**):源注释里配置中心的旧名改为 web-admin;已发段落不回改,读法见 §121a′。
481
+ - 🔴 **行为面:活卡被中止(`{ kind: 'aborted' }`)发恰一发中断拒绝,除非这张卡已被引擎的收口帧撤走**(CC-514;**§121 HW2-1 · FX-2**):一条规则,两条腿同律 —— 中止的卡(不论中止来自调用方信号 Esc / Ctrl+C、卡上的中止键,还是宿主自己收卡)发一发 TOOL 级中断拒绝把挂着的那一问结算掉:与停驻卡同一句拒因 `Interrupted by user`,经 `note` 发(能力位 `approvalDecisionNote` 明确为真才带),不带信号、不带归因键;即发即弃,用户立即拿回控制,失败 / 超时由有界观察器上屏一行;结局 `{ decision: 'unresolved', aborted: true }`,判别口 `unsettled` / `interrupted`(与停驻卡中止同一格),结局便签 `{ settled: false }`;那一发落定之前同一审批再来的调用方 join 这次结局、不再呈卡。**已被收口帧撤走的卡**(同一问已由引擎结算:停驻 / 过期 / 别处已决 —— 停驻卡已决之后宿主把活卡结算成中止正是这一形)⇒ 一个字节都不发,结局 `retracted`。修前(0.93.1)中止也发一次 deny,但等回体、落成 `decision: 'deny'`,收口帧先到的那一形照发(引擎回 409 `approval_stale` 或 202 停驻中,后者还多一句「去停驻卡上再答」)。
482
+ - 🔴 **行为面:流不再等卡**(CC-493;**§121 HW2-2**):活卡呈到卡口后桥立即接着拉帧,结局在卡落定之后回交(`onToolApprovalOutcome` 的调用时刻随之后移)。同一审批的收口帧(`tool_approval_complete`)在卡还等人时到达 ⇒ 包经卡请求的 `signal` 撤卡,这张卡上的任何答复都不发,结局 `retracted`;宿主不听 `signal` 时人在旧卡上答了也不发,收口帧带停驻位的再上一句「去停驻卡上再答一次」(与 202 停驻中同一句)。人先答的照旧 respond。卡请求的 `signal` 在活卡上恒在场。活卡同一审批两路(流内帧与悬挂问)共用停驻卡那一张单一持有登记:只呈一张、只发一次。卡口要能同时收多张卡请求(同流多张活卡、活卡与停驻卡并存)。
483
+ - 🔴 **型面 BREAKING:`CoreValuePorts` 多五只必填成员、`CORE_VALUE_PORT_NAMES` 十二件 → 十七件**(CC-478;**§121 RP-3**):按完整 `CoreValuePorts` 型建端口袋的宿主编译红一次(少哪一件点名哪一件)—— 把引擎包根同名五只原样加进 `installCoreValuePorts({...})` 即过;用 `Partial` 袋的宿主不受影响(没装 ⇒ 读口 `undefined`)。
484
+ - 🔴 **型面 BREAKING(只对自写替身):`FileHistoryDeclarationLedger` 接口 +2 必有成员 `declaredLegCwd` / `legCwdOf`**(CC-313;**§121 RP-2**):把自写替身赋给该接口型的端编译红一次;经 `createFileHistoryDeclarationLedger()` 拿账本的端零改。关断声明的读法与答案逐字不变(出站体读口抽成通用一只 `readOutboundBodyField`,包内件)。
485
+ - **合成终局行在 adapt() 重建口也过凭据两张网**(CC-312 ②;**§121 RP-1**):凡经本包投影口交出、带行类旗 `_sema_api_error_message === true` 的行,正文恒已洗 —— 旗本身就是「包铸且已洗」的机读依据(不另设位),端可删兜底洗法。修前重建口信上游已洗,旧转录(0.83.1 之前落盘)或别处送来的带旗未洗行原文照交;现在同一只洗法再过一遍(铸点已洗的逐字节不变)。模型行(无旗)一个字节不碰。
486
+ - **cancel 撞 409 的处置句只有一个说话人**(CC-406;🔴 行为面:措辞;**§121 RP-5**):`ControlRouter.cancel` 的 `cancel_lost_race` 不再带路由器自持的那一句(「the pending gate was decided or expired concurrently (lost CAS race) …」),`advice` = `cancelConflictContent` 按读口 kind 交的那一句(`approval_settled`:那一问已在别处决定 / 过期,先看那个决定做了什么;码缺席 / 认不出:两种可能都摆),message 前缀带原码(`runs.cancel 409 conflict.approval_settled — …`;码缺席仍是 `runs.cancel 409 — …`)。安全码不变。「这是不是 cancel 的 409」只剩读口一只判官(路由器另一只按类名或状态判的退役):状态码不是 409 而类名是 `ConflictError` 的抛出物(sdk 不会铸)不再落 `cancel_lost_race`。`cancelConflictFromError` 读位逐键隔离:状态已判 409 而读码时取值器抛 ⇒ `unrecognized`(修前整只答 `null`)。
487
+ - 🔴 **型面 BREAKING:peer 地板 `@sema-agent/sdk` `>=12.0.1` → `>=18.1.0`;开发依赖 `^12.0.1` → `^18.1.0`**(CC-522;接入文档 **§121 SP2-1 / SP2-7**):出包 `.d.ts` 从本版起引用 sdk 17.0.0 / 17.1.0 才声明的型(`ApprovalDecidedBy`、六词的 `TaskRequest['permissionMode']`)—— 装 sdk 12.0.1 – 18.0.x 的宿主 `npm install` 报 peer 冲突;其中低于 17.1.0 的,`skipLibCheck` 关时类型检查红(开时这几位退成 `any` 或少一词;17.1.x 编得过,但不在支持面)。先把宿主自己的 `@sema-agent/sdk` 升到 ≥18.1.0,再换钉本包。运行期不向 sdk 多要任何名字(三张上游表经构建期生成物取,见 Removed);支持底线 `SUPPORT_FLOOR.sdk` 同值改 `18.1.0`。`HealthResponse` 多 pick 一位 `restart`(sdk 18.0.0 起 `version` / `since` 是数)。
488
+ - **本包三只订阅读者认排空终帧**(CC-519;接入文档 **§121 SP2-4**;🔴 行为面):审批推送腿不再把终帧计成一次推送、不再当拍重取(sdk 随后自行重连,新流以 meta / synced 开头,那两帧触发重取);舰队账本不再把它记成未知帧;workflow 活动流以终帧收尾时的重连等待改取决策口(连续三次 ⇒ 收口为 error,可被下一次 ensure 重开)。
489
+ - **子代 agent 投影对拼法问题多出告警**(CC-457 A ②;接入文档 **§121 SP2-5**;🔴 告警面):这类条目在任何一代引擎上都管不住它想管的工具,告警恒出;扣不扣送由宿主一位开关定(缺省不扣)。
490
+
491
+
492
+ ### Deprecated
493
+
494
+ - **`modelSetupDecision` 的三态入参**(CC-322;接入文档 **§121 RQ-4 / FX-4**;退役登记 RL-91):本版两形都认 —— 交读数 `ModelIdentityReading`(推荐,路由缺口那一形拿 `explain_route_gap`)/ 交三态 `ModelIdentityResolvability`(与 0.93.x 同,分不出路由缺口)。终端改传读数之后的下一个本包版本(登记 0.95.0)删三态入参臂,第一参型收成读数。🔴 硬破坏三句:**谁受伤** —— 传三态串的宿主那一行编译红一次;**补偿** —— 本版两形都认,先改传读数(同一只 `modelIdentityResolvability` 的入参)再升下一版即零改动;**消费方矩阵** —— 终端改传读数(首启门与路由缺口叠层两处),网页端 / 桌面端 / 管理台零读点。
495
+
496
+ - **`normalizeShellPermissionModeForWire` 的第二参**(CC-426;接入文档 **§121 SV-6**):0.94.0 起不读(`dontAsk` 按名投影,按位判只在字段投影口),只为不在没有预告的版本里改签名而留;**0.95.0 删**,签名收成 `normalizeShellPermissionModeForWire(mode)`(两实参调用编译红,删第二实参即可)。
497
+
498
+ ### Fixed
499
+
500
+ - **订阅流排空判型口把外层 `failed` 的混形帧认成排空终帧**(**§121 FX-1**;CC-519 同版):事件包那一支修前不看外层 `type`,`{ type: "failed", event: "error", data: { errorCode: "draining" } }` 被判成终帧、决策口给「等一拍重连」,读者把一次失败当成换台。现在事件包那一支只认外层 `type` 缺席(事件包形)或 `"unknown"`(舰队流透传形);外层是 `failed` / 别的臂 / 非串 / 空串 / 自有访问器 ⇒ 不是终帧(决策口 `not_draining_end`),访问器代码不执行。
501
+ - **用户在活卡上 Esc / Ctrl+C 之后引擎那一问挂到窗满**(**§121 FX-2**;本版 CC-514 初版引入,0.93.1 无此病):CC-514 初版把活卡上的一切中止一刀切成「零发」,中止不再结算挂着的那一问,而同样的中止在停驻卡上仍发拒绝。现在一条规则(见 Changed CC-514 那一条):中止的卡发恰一发中断拒绝,除非已被收口帧撤走;CC-514 初版加的判别口词 `not_sent` / `aborted` 与便签句 `APPROVAL_NOTE_ABORTED_DETAIL` 随之撤回(未发布;相对 0.93.1 `ApprovalNotSentCause` 零增删)。
502
+ - **强制卡那一句说「钩子也能当场答」,而本包的钩子车道对强制卡答「跳过钩子」**(**§121 FX-3**;🔴 措辞面):`mandatedApprovalDetail()` 与 `mandatedApprovalDetailOf(card)` 两句的答者清单改跟同一张判定表 —— 强制卡在 `permission_request_hook` 车道恒 `must_ask` ⇒ `permissionRequestHookScope` 答 `skip`,所以两句都不再提钩子(通用句:「by you here or by an automatic check the deployment runs」;按问类版:「by you here」)。CC-450 处置里「钩子可答强制卡」那半句作废。
503
+ - **宿主报了路由缺口(有模型名、缺端点 / 车道凭据)时决策口弹「没配模型名」的向导**(**§121 FX-4**;本版 CC-322 ③ 引入,0.93.1 这一形不弹):同一读数的 detail 句说「有模型名、缺路由」,决策口却给 `offer_setup` 与「no model name is configured … opening model setup」。现在把读数交给 `modelSetupDecision` ⇒ 新臂 `explain_route_gap`(不开向导、不读本端可配位),`modelSetupNotice('explain_route_gap')` 一句说「模型名在、没有到它的路由、向导帮不上」。
504
+ - **`approvalPriorCardsDetail` 遇取值器元素 / 陷阱抛的代理 / 已撤销代理会抛**(**§121 FX-5**):文档说坏入参给 `undefined`,实测整只抛。现在每一位按自有数据属性读(访问器不执行、原型链不算、读抛当缺席),一位读不出只丢它那半句话;长度读不出或超过账本上限 ⇒ `undefined`;永不抛。
505
+ - **`readAllowedToolNotGranted` 只给 `entry` 的展示形**(**§121 FX-6**):同一条目上的部署文本 `skill` / `currentName` 原字节交出(C0 控制符原样)。现在两位各多一个展示形 `skillShown` / `currentNameShown`(= `displayUntrusted(…)`,与 `entryShown` 同一只出口;与原位同在同缺),原字节位照留作机读。
506
+ - **同一调用的卡账本把 202 停驻中记成「已批准」**(**§121 FX-7**;本版 CC-283 引入):卡口一答 allow 就记放行,respond 回 202 停驻中(这一发没生效)时下一张同调用卡的句子仍说「you already approved an earlier one」。现在账本记**引擎收下的**决断:两条腿的结局经判别口读,落定才记 `allowed` / `denied`;停驻中 / 发送失败 / 决断被拒 ⇒ 不记(句子说「先呈过一张」)。
507
+
508
+ - **新形下一条 `*` 不再读空整张 allow 表**(CC-356 ①;**§121 CP-10**):服务端 7.117.0 起把 allow 整份交引擎 allow 层,而引擎读到一条 `*` 会把**整张** allow 表读成什么都不授予;修前本包按老形照投 `*`。现在新形下它被拦下、报 `voids_allow_list`,其余条目照投。老形(宿主没装 `compileAllowList` 端口)不变(KL-614)。
509
+ - **手动压缩撞已结束的 run 时屏上谎报「已压缩」**(CC-512;**§121 HW-4**):idle 时敲 `/compact` 会 arm,壳先跑完摘要 run 把 arm 消费掉,约 1.5 秒后延迟发射的那一发落到已结束的 run 上 ⇒ 409 `compact.not_running`;修前这一状态只留 debug 日志,而命令行在落定之前就按同步返回值报了「已压缩」,上下文其实没压。现在 409 经宿主面上屏一句说明、结局经 `onSettled` 回传。
510
+ - **审批 / 取件失败时屏上出现错误类名**(CC-508;**§121 HW-1**):终端在引擎换代之后的取件失败,屏上是 `approvals.list failed: EngineGenerationChangeReadError: …`;现在只剩 message。
511
+ - **计划审阅决断撞 409 `conflict.resume_context_unavailable` 时模型与用户只看到通用句**(CC-513;**§121 HW-2**)。
512
+ - **失败结局读口遇到已撤销的 Proxy `extra` 会抛**(CC-508 发版复核;**§121 HW-1**):包内「抛出物 → 结构快照」读口对 `extra` 的判形(`Array.isArray`)在撤销后的 Proxy 上抛 `TypeError`,于是接上它的失败出口(七处用户面句、压缩发射结局)会在 catch 块里再抛一次、失败结局或 `onSettled` 回传丢失。现在判形受保护:读不出按 `unreadable` 处置,`message` / `status` / `errorCode` 等已读到的格照留。
513
+ - **合法的 `edit` + `permissionModeAfter` 被本地拦下**(CC-509;**§121 HW-3**):服务端 7.122.0 起受理的组合,在本包预检处就被拒、一个字节不发。
514
+ - **同一调用的第二张停驻卡被第一张的决断吃掉**(CC-283;**§121 HD-6**):同一只调用先因 ask 规则、后因写保护各停一次时,第二条行与第一条共用单一持有登记的身份 —— 第一张卡还在屏上(被别处决掉)或取件读起点早于第一张落定时,取到第二条行的那一路不呈卡、拿第一张的结局交回(第二张卡没人答、引擎那一问一直等)。现在两条行各自持有、各自呈卡;第二张卡上带 `priorCardsForCall` 与一句「这是另一道检查」。
515
+ - **展示出口凭据遮蔽认 YAML 节点属性**(CC-460;安全类;外部验收 [9381];**§121 DO-1**):标签冒号与块标记(或单行值)之间夹着类型标签(`!!binary` / `!!str` / `!` / `!local` / `!<…>`)或锚点(`&名`)时,上一版的记号落在属性上、块标记与真值原样在后(无已知前缀的值;0.90.0 起同形)。现在冒号之后零到多枚节点属性先读掉:属性与其后的值**各遮一枚记号**(属性可能是被误读成属性的口令前缀,不放宽),块标量整块一枚,单行值 / 引号值 / 块序列项里的值同形;属性之后同行没有值时读法与上一版逐字节同。
516
+
517
+ - **展示出口凭据遮蔽认清单值**(CC-459;安全类;外部验收 [9381];**§121 DO-2**):标签冒号之后的值是块序列时,上一版只把短横遮成记号、各项原样;流序列与 JSON 数组连记号都没有;逗号清单只遮首项。现在三种清单形同一只判法、逐项各一枚记号 —— 裸复数 `keys` 后全是键名形、`tokens` 后全是整数的清单一项不遮(负控),任一项像值则整张清单逐项遮(含本来像键名的项);逗号清单只在复数标签上认,单数标签后的逗号读法同上一版;单数标签后只有一项且含空白的方括号(`password: [required for login]`)是说明文字、不当清单。
518
+
519
+ - **`retry_status` 的 `error.formatted` 不再带引擎原字节**(CC-503;纵深防御;**§121 DO-4**):`rate_limited` / `circuit_open` / `gave_up` / `retrying` 四条 error 臂此前把引擎 `detail` 原样铸进 `formatted`(可含 ESC / OSC / 双向覆写 / 换行 / 凭据形)。现在四臂同过同一只 `displayUntrusted`(缺省单行载体,先洗后折);干净文本逐字节不变,引擎没给 detail 时读数不变。`errClass` 码位早已随每条臂交出(present-iff、开集),端按码选句不必渲 `formatted`(§121 DO-5)。
520
+ - **活卡在屏时同流后续帧被卡住**(CC-493;**§121 HW2-2**;外部验收 [9533]):帧路由在流循环里等卡结算,人没答之前同流的停驻帧、并行工具与子代进度帧一帧都拉不出来(实测 ≥ 9 s);引擎已把这一问转停驻,屏上仍是一张已没有决断口的卡。
521
+ - **停驻卡已决之后活卡再发一发拒绝**(CC-514;**§121 HW2-1 · FX-2**;外部验收 [9653]):同一问的收口帧先到、包已撤卡 ⇒ 宿主之后把活卡结算成中止(或答 allow / deny)都一个字节不发,结局 `retracted`。
522
+
523
+
524
+ ### Gates
525
+
526
+ - **layering-shadow-export** 对终端参照树 1.0.145(tag v1.0.145 = 7c1c7101):影子豁免表删八条死行(`eventToSdkMessage` / `runStream` / `makeHitlCanUseTool` / `attemptActiveRunSelfHeal` / `parseLocalAllowRule` / `persistedRulesLaneAvailable` / `persistedRulesGovernanceAvailable` / `drainingRetryDelayMs` —— 09-25 基线存量,终端 1.0.145 已删包装或改名未登,按删行期限律(终端删掉包装之后的下一个本包版本)= 本版;门 E3 对新参照树实红先、删后绿)。同义表 `projectEngineRuleNames` 行终端 1.0.145 仍在调(`settingsRulesWire.ts:355`),删行期限未到,窗按裁定 → 0.95.0。豁免表 +1 行 `agentToolListFlaws`(终端主线同名壳侧原型,同名不同物,终端 1.0.146 换钉时删,dueBy 0.95.0)。
527
+ - **layering-shadow-export** 对终端参照树 1.0.145(tag v1.0.145 = 7c1c7101):影子豁免表删八条死行(`eventToSdkMessage` / `runStream` / `makeHitlCanUseTool` / `attemptActiveRunSelfHeal` / `parseLocalAllowRule` / `persistedRulesLaneAvailable` / `persistedRulesGovernanceAvailable` / `drainingRetryDelayMs` —— 09-25 基线存量,终端 1.0.145 已删包装或改名未登,删行期限 = 终端删掉包装之后的下一个本包版本 = 本版;门 E3 对新参照树实红先、删后绿)。同义表 `projectEngineRuleNames` 行(dueBy 0.94.0)终端 1.0.145 仍在调(`settingsRulesWire.ts:355`),删行期限未到,窗候裁。
528
+
529
+ - 既有门扩格(CC-447 / CC-452 / CC-453 / CC-356 / CC-499):upstream-tables(G15 第十二批生成与逐面折叠差分、N15 负控、U2 改钉生成物、G4-4 尺子两向)· engine-notice-catalog(码册按装着的引擎分两代、G-RD、G-UI7)· permission-rule-issue-codes(PB)· permissions-declaration(LF1 – LF8、CF1 分两代、R1 新形读数、理由闭集十四词)· core-value-ports(第十二件)· automatic-answer-verdict(K 段)。
530
+ - **新门 session-read-redaction-capability**(CC-457 L):读器三态 / 读账四口 / 判据单源 / 服务端两代体形(7.121.0 present 且历史读面缺席时照真、7.119.0 not_reported)/ 公面声明 / src 去注释后按版本号判历史脱敏的读法零处(尺子对植入违例自证)。
531
+ - **新门 output-style-seat**(CC-480 ②):读器三态 / 判据单源 / 服务端两代体形(顶层位与嵌套的风格正文位不混读)/ live 兜底层见位才落、原样不判形、调用方已带不覆盖、风格正文座不受影响 / 准备期拒码在识别表 / 登记(兜底层字段表、两车道登记判据、装配口回执 `other_channel`)。
532
+ - 扩门:permission-modes-capability PM4 改写(别名口按名投影 + 合用写法 22 格逐格同 0.93.1 + 半接法两形 + 别名表恰一行源码钉;PM3j / PM3m″ 改钉合用写法);engine-notice-catalog G-AN3 成文改口 + G-AN5 读器逐形(体形抄服务端 tag v7.121.0 测试)+ J4 / J6 / L9 同批 + M10 `taskId` 可选位;rules-side G2q / G3q;display-untrusted-projection U40 对拍语料 +6 与 U40c–U40i;upstream-tables G11-1 / G11-3 / N11b 的 PEM 头三格;client-core-pure VOCAB① 十一员 + G-SV1 / G-SV1b、C-flag 三格改口、B4 兜底层字段十一件;server-7119-fixture 老一代 P6 闭环改口(别名口按名、字段投影口落 default、真受理口受理);engine-cap-reader-factory 表 +2 行(28 只)。
533
+ - 登记物:`scripts/public-export-baseline.json` 1485 → 1498(+13 名)、测试钩 71 → 73;`scripts/gates-manifest.json` +2 条、README 门表 +2 行、`docs/GATE-NEGATIVE-CONTROLS.md` 行为套 +2 行(派生面,生成器重写);棘轮 `typeshape.unknownExport` 498 → 503、`portability.index` 265 → 267、`singleton.highRiskCeiling` 141 → 143(单例清单 +3:两只读器的 `reader` 与生成物 `SETTINGS_PRIVATE_KEY_PEM_HEADER`),`scripts/registry.json` 同批追三条 ledger;退役登记 +RL-82(行,`package-version` 0.95.0)与已退役栏 +RL-81(别名表 `dontAsk → default` 一行,锚钉不复活)。
534
+ - 新门 **`run-request-uplift-test.mjs`**(78 格;判据 G-RQ1 … G-RQ7):`approvalReach` 车道表一行 / 坏值 / 读序 / 片段口五态 / 有界异步变体 / 夹具腿(新一代受理面收本包装出的体,老一代 7.117.0 对带键的体整份 400、经片段口装出的体过受理面);无人值守权限模式穷举组合恒带模式与告警射程;`isApproverUnavailableGate` 四格金样;路由缺口五形与修句;思考档位读器五读数与判据;MCP 资源信封(正文夹带指令留在围栏内的负控)与三条载体零「调用了工具」形;客户端自挂服务器表态与信任序单源。在 0.93.1 产物上跑:新面各格红、回归格绿。
535
+ - **upstream-tables** 第十二批 G15 / N15(`APPROVAL_REACH` 生成、逐项同序、冻结、字面元组、消费模块值级 import、引擎判官同判;上游加员 / 坏形 / 缺名点齐)· **gate-vocabulary** 结算词逐词对账登记 `approver_unavailable` ⇒ `isApproverUnavailableGate`(六条谓词)· **client-core-pure** 两格按 RQ-2 成文改口(不认识的旗词落 `default`;大小写判别力换到会被模糊匹配改值的词上)· **disable-skills-wire** 车道表行数 46 → 47、回归读数滤掉新行 · **layering-shadow-export** 新差分格 `cc413-wire-rule-trust-order`(终端同名常量逐位比)。
536
+ - 登记物:公面运行期导出 1485 → 1491 · 单例清单 +9 −0(改名一条:信任序常量)· 棘轮 `typeshape.unknownExport` 498 → 499(装配口坏值判定的入参)· `portability.index` 265 → 266(`approvalReachWire.ts`)· 同名影子登记 +1(终端 `WIRE_RULE_TRUST_ORDER`,`divergent-copy`,dueBy 0.95.0)· 门清单 +1。
537
+ - **新门 `scripts/run-hitl-words-readout-test.mjs`**(G-HW1 – G-HW10;CC-508 / CC-513 / CC-509 / CC-512 / CC-507):七处用户面句(带类名 `Error` 与非 Error 抛出物各一行,断言句子含 message / 抛出物文本、不含类名,原抛出物进宿主日志)· 瞬断耗尽错的内层文本与计划审阅「够不着引擎」句 · 英文单源(无 CJK、`·` 三段、带 / 不带 `runId` 两形、不命中「已决」扫词表)· 计划审阅 409 缺席句两形(带 / 不带 `runId`)+ 别的 409 码不认领 · `reviewPlan` / `decidePlanReview` 预检退役(`edit` / `reject` + 模式词照发、词表外本地拒、老服务端夹具 400 同码)· 压缩发射结局四形(409 / 404 单次重试 / 5xx / 注入形 60 秒截止)+ 显示值(同一次请求 `fired` 与 `refused` 并存)+ 回调纪律(异步、至多一次、抛了不外溢)+ idle 臂 · 全族 26 只投影函数逐口一行「取值器抛」+ 源码扫描钉每只导出的投影函数都在 `try` 里(新增者缺守卫 ⇒ 红)。
538
+ - **既有门的判据眼随成文改口更新**:`decide(approve|deny) failed: …` 与 `rule text did not parse (…)` 的期望串由 `String(e)` 形换成 message 形;`resumeContextUnavailableContent` 的基线串换成英文;`permissionModeAfter` 的「非 approve 本地拒」格换成「词表外本地拒、合法词照发」;`projectDeviceExecutorManagementCapability` 直调遇取值器抛的格由「抛」换成「吞返 `undefined`」。
539
+ - 新门 **`run-decision-refusal-standing-test.mjs`**(46 格;CC-438):金样 15 形与 409 码近邻、不是判决的十五形、受保护读、活卡结局便签同判、码的可上屏形、瞬时拒收六形与 `retriable`、权威读数十二形、收口真值表与瞬时拒收不收口、三句逐字、单源(码字面量与分类函数各恰一处)。红先:修前 25 格红;瞬时拒收两组另红先 5 格。
540
+ - 新门 **`run-no-allow-cause-test.mjs`**(40 格;CC-439):原因口金样(终端离线格对位)、判序两两冲突、严读、两车道 × 四原因八句逐字、旗名 / 设置名两向、工具名不安全形不进句、单源(拒因句只在一个模块铸)。红先:修前 38 格红。
541
+ - 新门 **`run-approval-card-face-projection-test.mjs`**(42 格;CC-433 / CC-283):授予清单与成因词的窄读上卡(坏形表、取值器不跑、原型链不算、耐久腿缺席)与人话逐字;同一调用的更早的卡(两张顺序、重放、停驻孪生、未结先到、乱序、不同调用、跨腿、有界账本)与人话三形。红先:修前 27 格红。
542
+ - **automatic-answer-verdict** +FC / +HK 两组(CC-436 / CC-450)与 O1′;T 段成文改口(终端参照树自动放行 ⊆ 旧 ∪ 命令面写保护未决按面放行)。**upstream-tables** +G17 / +N17(问面批;合并时由 G15 / N15 改号,第十二批 G15 / N15 收窄为权限模式词表与用户输入车道表,按面可放类只在问面批生成物)。**durable-decision-single-holder** +G-SH13(同一调用的第二条停驻行两序,红先 4 格)。
543
+ - 登记物:门清单 198 → 201 · 退役登记 +RL-83(`liveAskPendingReading` 的列表读法,候服务端按问取状态的读口)· RL-60 锚随折叠函数签名改。
544
+ - **display-untrusted-projection** 552 → 579 格(DO 段 27 格):DO1 – DO4 节点属性(块标量 264 形 / 单行值 132 形 / 退回读法 / 块序列项,含引号键同缩进块序列与 JSON 转义形缩进);DO5 四种清单形 × 九个标签 171 形;DO6 键名清单与整数清单负控 15 形;DO7 混合清单;DO8 邻形族逐形一格(Unicode 空白 / 名字位空白 / 着色序列 / 控制串 / C1 / 不可见单元 / 双向符 / 制表符 / 全角冒号 / 行断写法 / 方案词);DO8b 洗两遍的最小形;DO9 一轮即不动(670 余形 × 14 出口)与线性;DO10 清单与属性线性;DO11 回归与误遮守卫;DO11b 冒号后同行短横让位;DO12 – DO14 `error.formatted` 四臂过出口 / 缺席读数 / `errClass` 七臂 present-iff;DO15 凭据标签族词表现状(族内全遮 / 族外按原样)。
545
+
546
+ - **display-untrusted-baseline-diff** 25 → 32 格,新 B8 清单与节点属性池(定种子 2 600 清单 / 属性形 + 约 320 串形似清单的非清单形;对上一发布产物差分):B8a 池内的项与属性之后的值在十四出口一格不露(上一版在同一池上露 33 873 / 36 400 格 ⇒ 判别力 B8a′);B8b 形似清单的非清单形十四出口与上一版逐字节同,封长出口另列(B8b′:截断落在清单中间的多遮);B8c / B8c′ 有意改读的三形登记为分歧并钉上一版读法。池在车内中间态上抓到的回退形(转义形载体把行断读成不可见单元时,孤立短横让位之后的值跨过行断被读成映射键而漏遮;引号键同缩进块序列未被认;洗两遍不稳 352 格)已修并进投影门。全池读数(对 0.93.1):1 196 670 格 · 旧遮新露凭据位 0 · 洗两遍不稳 0 / 2 106 076 · 到帽 0 / 752 170。
547
+ - 新门 **`run-seat-wave2-test.mjs`**(128 格;判据 G-SW1 … G-SW5;CC-469 / CC-504 / CC-515):座位能力表读口三态(取值器不跑、原型链与污染不算、读就抛不抛)与没报两个折叠方向 · 禁用句逐字与单源 · 端到端「发布过门 → 作废 → 迟订阅」+ 坏形被门挡住 + 退订 + store 缺席 / 读就抛 · 能力表出站门与读口同一条读法(取值器拒且不跑、读就抛判失败不抛、门 → 结构化克隆 → 读口同答)· 订阅口退订先关本地闸(宿主退订抛了 / 重复退订 / 退订后迟到的推送)· `pickFolder` 出站门 · 记录键 `cwd` 出站门(路径带索引)· 设备码轮询装配口逐形表 + 生成物两数等于设置契约 + 模块不手写契约数 · `src/` 零配置中心旧名。红先:修前 86 格红;发版复核补的两组另红先 6 格。
548
+ - **seat-contract-keys** 按新面改计数(动词 18 / store 4 / 覆盖表 20 组 / 逐形豁免 +`PickFolderResult`;J 段 +`pickFolder` / `seatCapabilitiesState` 两例;E 段记录键 +`cwd`)。
549
+ - 登记物:`scripts/public-export-baseline.json` 1518 → 1523(+5 名,测试钩不变)· 单例清单 +2(`SEAT_CAPABILITY_NAMES` / `SEAT_CAPABILITY_PHRASES`)· 棘轮 `typeshape.unknownExport` 509 → 511(`seatCapability` / `deviceFlowPollingPlan` 两只读口的 `unknown` 入参)、`portability.index` 271 → 272(`src/deviceFlowPolling.ts`)· 门清单 +1、README 门表 +1 行、`docs/GATE-NEGATIVE-CONTROLS.md` 行为套 +1 行(派生面,生成器重写)。
550
+ - **新门 `scripts/run-hitl-wave2-test.mjs`**(G-HW2-1 – G-HW2-10;CC-514 / CC-493 / CC-191 / CC-231):活卡三形 × 两回体(撤卡零发、中止恰一发中断拒绝〔发版复核定形,1a – 1u:没被收口帧撤走 ⇒ 一发 / 撤走 ⇒ 零发〕、拒绝 202 停驻 / 409 `approval_stale`)、悬挂问同律;卡在屏 + 后续帧 + 收口帧(后续帧有界内出桥、撤卡、零发)、宿主不听 `signal` 的回退两形、人先答、发送段屏障(拒绝收口帧盖拒绝记号)、两路同键一张卡一发 + join 方中止 + 落定后再来、桥退出不撤卡;入口与登记模块零呈卡 / 发引用(语法树,尺子对植入违例自证);两只新读口的坏形表。红先:修前 22 格红(后续帧 0 帧 / 1501 ms 等)。
551
+ - **既有门的判据眼随成文改口更新**(CC-514 / CC-493):活卡「用户放弃 ⇒ deny 照发」三处(approval-card-retract S1b、terminal-cause-projection B9-③S4 / S4′、approval-decided-by-capability AB4e)按发版复核定形改为「恰一发中断拒绝、即发即弃、结局 `aborted`」(CC-514 初版曾改为零发);直调路由后读回交 / respond 的格先等本桥活卡处置完(approval-card-retract S4、approval-respond-parking G-PK1n、pure #229⑥、replayed-approval-disposition 全段);respond 停驻读器的调用点改在活卡持有者体(G-PK8b);停驻卡结局 `joinedInFlight` 计数只数那一型(durable-decision-single-holder G-SH9f);登记表不上公面的名单换成今天的表名(G-SH11f);判别口词表覆盖格:活卡中止落 `unsettled` / `interrupted`(approval-resolution G4;CC-514 初版的 `not_sent` 词 `aborted` 随定形撤回)。
552
+ - **新门 `scripts/run-wiring-instructions-attribution-test.mjs`**(判据 G-RP2a … G-RP2f;CC-313):`callerCwd` 读器三态与判据单源 · 探测闭包里 note 之后同一拍读到(总缓存此刻仍「没探过」)· 出站体读口敌意形 · 账本时序(先记后绑 = 先绑后记、meta / 409 拒收帧不绑、矛盾不挑边)· 成员安全路径判的敌意形 + 注入真路径口的符号链接判 + 真盘临时目录实测 · 端到端。
553
+ - **新门 `scripts/run-layering-direction-test.mjs`**(判据 G-RP4;CC-506)+ 分层表 `docs/LAYERING.md`(本包 = L3 契约包 + 客户端运行时;包内四层 wire 读器与端口 / 投影 / 宿主面 / 公面;跨仓边表;豁免表四行):语法树收边(含型级边)只向下、src 每个文件恰一层、豁免按对与边数只缩、包外边逐包逐种对表(引擎只许型级)、出包声明只引用 `dependencies` ∪ `peerDependencies`、植入违例逐形自证。
554
+ - 扩门:result-frame-projection E 段(CC-312:读口族公面 / 读回 / 旧名不并读 / 坏形与取值器不执行 / 包内读点零裸读 / 合成行两投影口已洗与幂等 / 机读口与端兜底洗法池上逐字节同)· core-value-ports ⑦(CC-478:引擎包根五件装进端口型零类型错、完整型少任一件编译红且点名、透传与上抛、真引擎端到端)· wire-refusal-copy S3c 成文改口 + S3d – S3f(CC-406)· steer-refusal-advice SR-C2 登记改变(CC-406)· file-history-leg-notice S5 成文改口(账本五只口)· engine-cap-reader-factory 表 +1 行(29 只)。
555
+ - 登记物:公面运行期导出 1518 → 1534(+16)、测试钩 73 → 74;单例清单 +1(`callerCwdCapability#reader`,high);棘轮 `typeshape.unknownExport` 509 → 517、`portability.adapt` 39 → 40、`portability.index` 271 → 274、`singleton.highRiskCeiling` 144 → 145,`scripts/registry.json` 同批追四条 ledger;门清单 +2、README 门表 +2 行(派生面重写)。
556
+ - **`run-server-7122-pick-test.mjs`**(新;接入文档 §121c G-SP2-A / P / D / T):拒收码读口与一句话 · 两代 202 停驻体形与 `message` 严读 · 排空终帧判型 / 决策 / 三只读者 / 调用点名册 · 拼法预判与开发依赖引擎 deny 表判官逐条对拍;服务端夹具 ≥7.122.0 时另钉铸点并起真服务端打真排空口读真终帧(更老的夹具跑代际见证格、其余打一行 SKIPPED-SECTION)。
557
+ - **sdk 换钉同批重核**(CC-522):凡是把「开发依赖 sdk」当成「peer 地板 sdk」来量的格,改读地板线见证(与 peer 地板同 major 的最低一份;本版地板抬到 18.1.0 之后即 18.1.0 那一份) —— `run-sdk-floor-test.mjs` ②d、`run-rules-legacy-tool-name-projection-test.mjs`、`run-client-core-pure-test.mjs` G-SL2(sdk 12 半场撤:低于地板)、`run-registry-conflict-projection-test.mjs` I2 撤(低于地板;开发依赖一代 I2′ 接替)、`run-disable-skills-wire-test.mjs` T2、`run-task-request-omission-receipt-test.mjs` J4b、`run-gate-vocabulary-test.mjs` T2d(两张滞后表清空、滞后词别名不在、正向钉收回原形);开发依赖追上之后按各自退出条件撤登记 —— `run-approval-frame-keys-test.mjs` 领先登记八行撤、卡键台账 +4 行,`run-decide-receipt-test.mjs` 未声明豁免撤,`run-engine-caps-ledger-test.mjs` 能力位台账 +14 行 read、−3 行(sdk 已删位),`run-durable-card-display-keys-test.mjs` 待决行转发账 +7 行,`run-tick-model-and-config-drift-test.mjs` `restart` 改为具名 pick(Y1 / Y6 / Y6′);新门 G-SP2-S 把整只出包 `.d.ts` 对地板线见证与开发依赖两份 sdk 各做一次宿主类型检查(`skipLibCheck` 关)。
558
+ - **peer 地板抬到 18.1.0 同批**(CC-522;退役登记执行七行):`run-sdk-floor-test.mjs` `FLOOR` 18.1.0(②d 改钉地板线见证的三只上游常量 / `ApprovalDecidedBy` / 六词请求模式)与负控锚同批 · public-surface 地板格读 `>=18.1.0` · support-floor-projection SF1f 改钉 sdk 18.1.0 · upstream-tables 第六只生成物(sdk 批,逐字节对已装 sdk 重算)· retirement-ledger G2 改钉 RL-18 / RL-20 已退 · parked-resume-startup U8 组凡落 `extra.cause` 的格改判「不读」(含低于地板的 sdk 12 见证)· tick-model-and-config-drift Y6′ 与新门 G-SP2-S2 的地板线见证按 peer 地板的 major 取。
559
+ - 登记物:门清单 205 → 206 · 公面运行期导出 1518 → 1525 · 棘轮 `typeshape.unknownExport` 509 → 512 · `portability.kernel` 25 → 26 / `portability.adapt` 39 → 40 / `portability.index` 271 → 273(新叶 `engineRefusedToolName.ts` 与零 import 生成叶 `generated/sdkFactTables.ts`)· 单例清单 +1 · 退役登记七行挪进已退役(RL-18 / RL-20 / RL-45 / RL-70 / RL-72 / RL-73 / RL-74)、RL-71 收窄(`restart` 已先行 pick)。
560
+ - **常驻放行旧口的 `ask-survives-posture` 套整套删除**(RL-56 / RL-57):十一个出身词的处置表对拍、返回形与三条真卡口端到端三组随旧口一起退役;其中「真卡口交出去的卡请求 → 判定」端到端一组迁进 `automatic-answer-verdict` 套的 R 段,改读单一判定;该套的 X 段(旧口对上一发布产物「只缩不扩」)随之删。`upstream-tables` 套 SA 段、`allow-rule-shadow-projection` 套 V1、两只服务端夹具套的常驻回答格改读 `automaticAnswerVerdict(card, 'standing_rule')`;`retirement-ledger` 套按名钉 RL-56 / RL-57 / RL-75 / RL-76 / RL-77 的退出(根入口 / 构建产物 / 门脚本代码位置三处名不在;`resolveHeadlessDetach` 形参个数 1;`flaggedFlags` 不在构建产物);`plan-review-injected-wire` 套 W3h 读构建产物里 `PlanReviewWire` 接口的成员表钉 `capsBaseUrl` 不复活,W3j 钉计划审阅口不碰这一键的值(取值器抛 / 代理拒读也照常送出)。公面基线 1542 → 1540,`export-liveness` 的 removed 账 `0.94.0` 键 +2 名,可移植棘轮 `portability.index` 277 → 275。
561
+
562
+
563
+ ### Known limits(本版新增)
564
+
565
+ - KL-657 能力位 `sessionReadRedaction` 只交「历史读面已同一只脱敏」这一位(`sessionReadRedactionAdmitted`)与一句建议;位不认时(服务端 < 7.120.0 / 没观测 / 读不出)历史里的推理与工具输出怎么洗、洗到什么程度,由各端自定 —— 包里没有「历史文本 → 展示形」的读口
566
+ - KL-658 KL-594 删行之后,§112c 真机格 G-T5 / G-M3 的 `dontAsk` 那一半(门记录 `deniedBy: "mode"`)还没在真终端上补跑:包侧判据已到位(字段投影口按能力位发 `dontAsk`,§121 SV-6),终端接上能力位读数之前真机读数仍是 `deniedBy: "ask_resolution"`
567
+ - KL-659 姿态车道按**构建期**生成表(开发依赖引擎 7.47.0 的按面可放类)判,不随铸这张卡的引擎代际:命令面工具(`Bash` / `Monitor`)上问类 `write_protection_unresolved` 的卡答 `may_answer`(放行原因同名),而引擎 7.45.0(服务端 7.119.0 夹具)在任何面上都对这一类 bypass 免疫(`foldArbitrationRow` 在 shell 面答 `bypassImmune: true`、`arbitrateByMode('bypassPermissions')` 答 `denied_by_mode`;7.47.0 在 shell 面答 `released`)—— 放宽方向,宿主在老一代引擎上可能替人放掉一张引擎自己不放的卡
568
+
569
+ - KL-613 强制卡按问类句不认读面:收窄读面上 `probe` 一类分类器不答,但卡上不带读面,那一形仍落通用句。
570
+ - KL-614 宿主没装 `compileAllowList` 端口 ⇒ allow 桶按老形投:内容形不投,一条 `*` 照投(服务端 ≥7.117.0 上它读空整张 allow 表)。
571
+ - KL-615 新形下 allow 的名字层几关(退役名 / 无前缀短名 / 段铸不出 / `~/` / 编译器拒收的整工具名)照旧在本包留下;服务端 ≥7.118.0 受理它们、由引擎通告「读成空」—— 收紧方向,用户看到的是报告口理由而不是引擎通告。
572
+ - **KL-619**(CC-480 ②):每轮一句座在读数不认时静默不落 —— live 兜底层只交请求体、没有回执位,端要提示「这台服务端不支持每轮一句」就自己读 `outputStyleSeatAdmitted`;风格正文那一座不受影响。
573
+ - **KL-620**(CC-457 E ①):`classifyRulesFailure` 不给第二参时,`request.query_invalid` 照旧答 `cursor-stale`(说不清这一发带没带游标);包内的列举口自己交这一位,三端今天的列举都经它,直调判官的读点只在撤销 / 导入两口(那两口不会得到这个码)。
574
+ - **KL-594 删行**(CC-426 收口):别名表那一行已退役,终端以 `dontAsk` 起会话时请求面发什么由终端是否把能力位读数交给字段投影口决定(接入文档 §121d SV-6);门记录 `deniedBy: "mode"` 的真机一半(§112c G-T5 / G-M3)候终端接上读数后补跑。
575
+ - KL-639 路由缺口的判官仍在宿主侧(引擎没有导出起服前可调的纯函数);宿主不报 `routeGap` 时,有模型名而路由起不来的那一形本包仍答 `resolvable`(句子不断言起得来)。
576
+ - KL-640 allow 的来源信任地板不在本包判:宿主交进来、来源写着项目 / 本地层的 allow,能力位与读健康都过时照投 —— 哪一层的 allow 能生效由宿主读设置时判。
577
+ - KL-641 客户端自挂服务器的表态在请求体上与用户规则同形(服务端 allow 桶只收串),分开审计只在报告口。
578
+ - KL-642 「这一运行实际生效哪一档思考档位」在开跑时没有读口(上游读点未定形);终局结果上的生效档照旧可读。
579
+ - KL-643 `approvalReach` 只在无人值守车道有座;交互车道上没有能答审批的面的宿主今天发不出这一声明。
580
+ - KL-644 MCP 资源附件「没带上」时给用户的那一句仍由端自己出;本包只铸给模型看的信封。
581
+ - KL-630 idle 时 arm 的请求,若这条会话槽再没有下一条 run 绑定,`onSettled` 永不被调(不编结局)。端不要把「没回调」读成「成功」。
582
+ - KL-633 姿态车道的工具面只按卡上工具名逐字判:部署自己注册了与内建命令面工具同名的工具时,那张卡也按命令面读。
583
+ - KL-634 钩子车道的类列只读 `hookAskFloor`:几类「真人专属」的问靠卡上同带的真人位 / 强制位 / 治理位接住;只带这类问类、却不带那几位的卡,钩子车道答可放。
584
+ - KL-635 瞬时拒收(408 / 425 / 429 / 502 / 503 / 504 或拒体 `retriable`)本包从不据「仍在等」收口:端若一直重送不成,那一问照引擎自己的审批窗结算(本包不替端定重送节奏)。
585
+ - KL-636 同一调用的卡账本是进程内、有界的;同一进程两个 run 复用调用 id 时可能误标,问的三样恰都相同的两道检查不会被标。
586
+ - KL-637 待决行没有 `createdAt` 时,单一持有登记退回修前的身份(同一调用先后两条这样的行仍会相遇)。
587
+ - **KL-625 清单值读法的射程**(CC-459):逗号清单只认复数标签;块序列只列同缩进的相继短横行与更深的嵌套序列(紧凑嵌套整棵子树整块遮);已折成一行的块序列认不出清单;VT / FF / NEL / LS 作行断的文本不认行结构;`{…}` 项整段遮、markdown 链接文字与 `[object Object]` 一类占位不当清单。
588
+
589
+ - **KL-626 节点属性的射程**(CC-460):属性之后的值写在下一行不跟(退回上一版读法);属性与值各一枚记号;属性紧贴引号 / 括号 / 分号不算属性。
590
+
591
+ - **KL-627 凭据标签族词表重看结论**(CC-285):本版不补词(候共享检测定义的原语包);`passphrase` / `passwd` / `pwd` / `pass` / `auth` 等族外键照旧原样显示,门 DO15 钉现状。
592
+
593
+ - **KL-628 键名清单 + 不可见单元 + 点形载体再洗一遍**(CC-459):第二遍多遮短横,不露值。
594
+ - **KL-650**(CC-312 ②):「带旗即已洗」只对经本包投影口(流投影 / adapt 重建)交出的行成立;端直接读自己落盘的旧转录行(0.83.1 之前写下的带旗行可能未洗)而不经 adapt 的,不能拿旗当依据。
595
+ - **KL-651**(CC-313):指令文件归属只判首员;符号链接判在调用那一拍(之后盘上被换不知道);没给真路径口 / 真路径口抛 ⇒ 不指。
596
+ - **KL-652**(CC-478):端口镜像按方法签名声明(参数双变),引擎五件的参数型若收窄,型探针仍过;只有返回型严格对拍。
597
+ - **KL-653**(CC-506):分层门是单文件语法读法(不建 Program):路径映射 / 自定义条件这类编译选项决定的解析不在射程;根目录未显式列名的文件一律按第 0 层判(最严一侧)。跨仓共用门形候引擎 7.49.0。
598
+ - **KL-85 补注**(CC-312 ②):本版只交「已洗」的机读依据;引擎归一化视图上剥 Cf 之后的粘连形(外部读数 [9267])仍按 KL-85 原样记,不在本票射程。
599
+ - KL-654 子代工具清单拼法预判看不到引擎另并的委派工具池:池里才有的工具的大小写孪生判不到(交引擎判);池里恰有一只与退役拼法逐字同名的工具时,预判仍报退役拼法(引擎其实收)。
600
+ - KL-655 订阅流排空终帧之后,审批推送流与 run 事件流由 sdk 自己当拍重连,等待时长归 sdk,本包的排空决策口管不到这两条;只有本包自己开流的读者(workflow 活动流)按决策口等。
601
+ - KL-177 改写:成因词兜底读位退役后,「sdk 12 上词只在 `extra`」那半句撤。
602
+ - **KL-656**(CC-539):附件正文 / 路径 / 目录条目 / MCP 资源文本里的 `</attachment>` 字面串不显形(正文字节不动):按「串里第一个 `</attachment>`」收口的读者会在那一处提前收口,该块余下的文字与真闭标签落在标签外;按行读的读者(开标签恒为第一行、闭标签恒为最后一行,中间没有任何一行以 `<attachment` 起头或恰等于 `</attachment>`)不受影响。
603
+
604
+
605
+
52
606
  ## 0.93.1(2026-10-09)
53
607
 
54
608
  > 主题:**patch**,两件 —— 其一,耐久停驻审批的决断口单一持有者(CC-491;外部验收 [9516]):同一只停驻审批被两条路各接一次(终端在引擎换代之后重摆的那张卡,与停驻解析器在新流上重接的那张)时,宿主只呈一张、只答一个,另一路此前永远等 —— 卡停在屏上、下一张卡不来、不自愈。现在同一把审批身份键同时只有一次决断在路上,后到的调用方拿同一个结局、自己不呈卡不发决断。`FsApprovalOutcome` 四臂各 +1 可选位 `joinedInFlight?: true`。其二,活卡审批 respond 回 `202 parking_in_progress` 读成明确的「停驻中、这一发没生效」结局(CC-492;外部验收 [9533]):引擎上这张卡的行正转停驻时,用户按下的答复没有生效,而修前这个 202 体没有 200 回执的 `delivery` 键、被读成「没有回执」,结局落成已批准 —— 终端据此注销卡、屏上不说话,重启后要再答一次。现在结局带 `parking` 位、判别口读成既有 `unsettled` 臂的新 cause `parking_in_progress`,包替用户上屏一句,不重发、不去键、不换名。**型面**:`ApprovalUnsettledCause` 词表 +1 词(对 cause 做 `never` 穷举的写法编译红一次;`kind` 联合仍三臂,按 `kind` 的写法不受影响,既有对 `unsettled` 的有界重呈对它默认安全);`ToolApprovalFrameOutcome` +1 可选位 `parking?`;根公面运行期导出不变(读器是包内件)。**谁必须动**:终端换钉 `^0.93.1` 时删工具门行上的「拒开第二张」判读,并改 respond 包装处(§120d);管理台与桌面端的直调点必改(§120d);网页端已有本地判读,可换读这一 cause(零必改)。