@sema-agent/client-core 0.92.0 → 0.93.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 (123) hide show
  1. package/CHANGELOG.md +179 -0
  2. package/README.md +23 -16
  3. package/dist/adapt/arms.js +2 -0
  4. package/dist/adapt/toolCards.js +6 -4
  5. package/dist/adapt.d.ts +1 -1
  6. package/dist/adapt.js +1 -1
  7. package/dist/adapter/runStream.js +3 -1
  8. package/dist/agentsWireCaps.js +1 -1
  9. package/dist/approvalDecidedByCapability.d.ts +16 -0
  10. package/dist/approvalDecidedByCapability.js +47 -0
  11. package/dist/approvalsStreamLiveCapability.js +3 -3
  12. package/dist/askSurvivesStandingAnswer.d.ts +1 -1
  13. package/dist/centerWiringCapability.js +1 -1
  14. package/dist/cloudConfigWireCaps.js +5 -5
  15. package/dist/compensations.js +2 -2
  16. package/dist/decideReceipt.d.ts +2 -0
  17. package/dist/decideReceipt.js +34 -9
  18. package/dist/detachWire.d.ts +2 -14
  19. package/dist/detachWire.js +1 -47
  20. package/dist/deviceExecutorManagementCapability.d.ts +6 -2
  21. package/dist/deviceExecutorManagementCapability.js +61 -15
  22. package/dist/engineConfigDrift.d.ts +20 -0
  23. package/dist/engineConfigDrift.js +54 -0
  24. package/dist/engineErrorCodes.d.ts +3 -0
  25. package/dist/engineErrorCodes.js +12 -4
  26. package/dist/engineInlineTaskStats.d.ts +1 -0
  27. package/dist/engineNoticeCodes.d.ts +2 -2
  28. package/dist/engineWireFor.d.ts +22 -0
  29. package/dist/engineWireFor.js +154 -9
  30. package/dist/engineWireSdk.d.ts +0 -1
  31. package/dist/engineWireSdk.js +0 -3
  32. package/dist/executionLaneCapability.js +2 -2
  33. package/dist/fileHistoryCaptureCapability.d.ts +1 -1
  34. package/dist/fileHistoryCaptureCapability.js +1 -6
  35. package/dist/fileHistoryLegNotice.d.ts +1 -1
  36. package/dist/fileHistoryLegNotice.js +1 -6
  37. package/dist/gateVocabulary.d.ts +1 -5
  38. package/dist/gateVocabulary.js +4 -22
  39. package/dist/generated/engineFactTables.d.ts +4 -3
  40. package/dist/generated/engineFactTables.js +10 -0
  41. package/dist/generated/engineNoticeTables.d.ts +1 -1
  42. package/dist/generated/engineNoticeTables.js +1 -1
  43. package/dist/goalStopHook.d.ts +1 -8
  44. package/dist/goalStopHook.js +2 -58
  45. package/dist/headlessPermissionModeWire.d.ts +3 -2
  46. package/dist/headlessPermissionModeWire.js +46 -5
  47. package/dist/hitl/askParkRowRouting.js +2 -2
  48. package/dist/hitl/frameRouter.js +7 -2
  49. package/dist/hitl/gateLedger.d.ts +1 -0
  50. package/dist/hitl/gateLedger.js +3 -0
  51. package/dist/hitl/hitlBridge.d.ts +1 -0
  52. package/dist/hitl/hitlBridge.js +6 -1
  53. package/dist/hitl/hitlHostSurface.d.ts +3 -2
  54. package/dist/hitl/hitlHostSurface.js +18 -3
  55. package/dist/hitl/parkResolver.js +22 -4
  56. package/dist/hitl/persistedRulesWire.js +29 -17
  57. package/dist/hitl/planReviewWire.d.ts +0 -2
  58. package/dist/hitl/planReviewWire.js +1 -18
  59. package/dist/hitl/sessionPolicyDeliverable.js +3 -3
  60. package/dist/hitl/sessionPolicyWire.d.ts +2 -0
  61. package/dist/hitl/sessionPolicyWire.js +7 -4
  62. package/dist/hitl/toolApprovalWire.d.ts +22 -7
  63. package/dist/hitl/toolApprovalWire.js +133 -54
  64. package/dist/hooksWireCaps.d.ts +1 -1
  65. package/dist/hooksWireCaps.js +1 -1
  66. package/dist/index.d.ts +7 -2
  67. package/dist/index.js +6 -2
  68. package/dist/inheritEnvWire.d.ts +1 -4
  69. package/dist/inheritEnvWire.js +0 -18
  70. package/dist/limitsWire.d.ts +0 -6
  71. package/dist/limitsWire.js +0 -38
  72. package/dist/mcpProbeCapability.js +1 -1
  73. package/dist/mcpProbeWire.js +10 -12
  74. package/dist/mcpReconnect.d.ts +5 -0
  75. package/dist/mcpReconnect.js +28 -0
  76. package/dist/memoryComplianceCapability.js +2 -2
  77. package/dist/memoryOriginCapability.js +2 -2
  78. package/dist/memoryVerbsWire.js +14 -13
  79. package/dist/ownKey.d.ts +2 -0
  80. package/dist/ownKey.js +15 -0
  81. package/dist/peerLaneCapability.js +2 -2
  82. package/dist/permissionModesCapability.d.ts +16 -0
  83. package/dist/permissionModesCapability.js +71 -0
  84. package/dist/permissionRuleIssue.js +1 -1
  85. package/dist/permissionRulesWriteCapability.js +2 -2
  86. package/dist/permissionWireCaps.d.ts +2 -0
  87. package/dist/permissionWireCaps.js +8 -1
  88. package/dist/permissionsAllowGrantCapability.js +7 -2
  89. package/dist/postureKnob.js +1 -1
  90. package/dist/protocolSegment.d.ts +2 -0
  91. package/dist/protocolSegment.js +3 -0
  92. package/dist/readFacePosture.js +1 -1
  93. package/dist/resumeRefusalCopy.d.ts +1 -0
  94. package/dist/resumeRefusalCopy.js +26 -3
  95. package/dist/retryStatus.js +2 -1
  96. package/dist/rewindArchiveCapability.js +2 -2
  97. package/dist/runTerminal.d.ts +16 -0
  98. package/dist/runTerminal.js +32 -3
  99. package/dist/seam.d.ts +1 -0
  100. package/dist/sessionPolicyCapability.js +1 -1
  101. package/dist/sessionSyncFileHistoryCapability.js +2 -2
  102. package/dist/skillToolListsCapability.js +1 -1
  103. package/dist/sqlEngineCapability.js +1 -1
  104. package/dist/steerPriorityCapability.js +1 -1
  105. package/dist/storePostureCapability.js +2 -2
  106. package/dist/supportFloor.d.ts +1 -0
  107. package/dist/supportFloor.js +13 -3
  108. package/dist/taskRequestWords.d.ts +4 -2
  109. package/dist/taskRequestWords.js +1 -1
  110. package/dist/toolHistoryBadTurn.js +1 -2
  111. package/dist/toolResult.d.ts +2 -1
  112. package/dist/toolResult.js +33 -3
  113. package/dist/userInvokedSkillsCapability.js +1 -1
  114. package/dist/webSearchBackendCapability.js +2 -2
  115. package/dist/webSearchWireCaps.d.ts +1 -1
  116. package/dist/webSearchWireCaps.js +40 -2
  117. package/dist/wireFailureShape.js +2 -2
  118. package/dist/wireRefusalCopy.d.ts +9 -3
  119. package/dist/wireRefusalCopy.js +41 -4
  120. package/dist/workflowsJournalCapability.js +1 -1
  121. package/dist/writeProtectionCapability.js +1 -1
  122. package/docs/INTEGRATION-CLIENTS.md +901 -15
  123. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -49,6 +49,185 @@
49
49
  > 挡住 ⇒ 本批把它机械化——④a0 对 `pending` 行**要求段头已是日期形**(`(未发布)` 直接红),阶段一
50
50
  > commit 漏转在发布前就红,不再靠人记。
51
51
 
52
+ ## 0.93.0(2026-10-09)
53
+
54
+ > 主题:**minor** —— 服务端 7.118.0 / 7.119.0(引擎 7.43.0 – 7.45.0 随带)提货与一批读口归包:审批决定口的出处键 `decidedBy` 与退役键拒绝臂 · 能力位 `permissionModes` / `approvalDecidedBy` 两只读器与 `dontAsk` 按位发词 · workflow 子代审批决定口的两只 409 · MCP 会话内重拨的「没等到结果」臂 · 场景指派悬空的 503 · 终局 `blocked` 的机读成因 · 连接失败现场判读口 · 交出后台的引擎 Bash 登记 · `/health` 配置落地读器与漂移判决 · 引擎装机 core 版本的三态口 · 联网搜索密钥的头值判臂 · 多成因措辞存量两批 · 429 不再一律渲成额度耗尽与错误记录定位句先洗后折两处修复 · 开发依赖引擎 `~7.44.0`。**型面 BREAKING 两处**:0.92.0 预告「0.93.0 删」的八组公面名 / 型位 / 参数按预告硬删(根入口运行期导出 −21 名;支持底线 server 7.106.0 / core 7.35.2 之下的行为不再承诺),与 device 车道读器 `present.management` 由布尔改三态字面;另有四处联合各 +1 员(`DenyAttributionRefusalKind` +`retired_key`、`McpReconnectVerdict` +`unsettled`、`PermissionMode` 一族 +`dontAsk`、联网搜索判决 `malformed` 臂的 `source` +`host`),对这些联合穷举并带 `never` 兜底的写法编译红一次,另有一个导出名与三处公面位标弃用、预告 0.94.0 删。**谁必须动**:换钉 `^0.93.0` 之前,终端与网页端按接入文档 §119d RT 逐处删读点(终端另有两处逻辑改动、一处自补的登记臂要同批删),管理台与桌面端无必改项;编译红清单见 §119y 第 1 条。
55
+
56
+ > 净值(相对 v0.92.0 发布件):根公面运行期导出 1483 → 1485(+23 −21);测试钩 69 → 71;门清单 189 → 196;单例清单 679 → 676;退役登记在册 37 → 34 行、已退役 15 → 25 行(本版退 10 · 改窗 12 · 新登 7;弃用预告 4 处 = RL-22 改窗 + RL-75 – 77 新登);peer sdk 地板 `>=12.0.1` 不动;支持底线 server 7.106.0 / core 7.35.2 / sdk 12.0.1 不动;开发依赖引擎 `~7.42.1` → `~7.44.0`;服务端夹具现役 7.116.0 → 7.119.0(老一代 7.106.0 – 7.115.0 八份 → 7.106.0 – 7.118.0 十一份)。
57
+
58
+ ### Removed
59
+
60
+ - **到期登记物按预告硬删:八组公面名 / 型位 / 参数退出**(CC-431 ①;🔴 型面 BREAKING;接入文档 **§119 RT-1 … RT-8**,换钉 `^0.93.0` 之前的编译红清单见 §119y 第 1 条,端上读点逐名逐坐标见 §119d):0.92.0 在 `### Deprecated` 与 §118 LD-13 预告「0.93.0 删」的各名本版按预告删除,根入口运行期导出 **−21 名**(逐名见 §2z;公面合计 1492 → 1471)。支持底线 server 7.106.0 / core 7.35.2 之下的行为不再承诺。下面逐组写删了什么、读数怎么变。
61
+ - **`RULE_STORE_UNREADABLE_KINDS` / `isRuleStoreUnreadableKind` / `ruleStoreUnreadableDetail` 与型 `RuleStoreUnreadableKind` 退出根入口**(退役登记 RL-12;§119 RT-1):`ApprovalCardRequest.ruleStoreUnreadable` / `ToolApprovalFrame.ruleStoreUnreadable` 两个型位与审批帧键镜像 `TOOL_APPROVAL_FRAME_KEYS_MIRROR` 的同名成员一并删;`askOriginDetail` 现为 `(origin: unknown)` 单参,多传的第二个实参照旧被忽略。读数无变化 —— 0.92.0 起卡与帧上就不再有这一位。
62
+ - **`wireAuthTokenFor` 退出根入口**(RL-63;§119 RT-2):`resolveWireAuth(baseUrl, token?)` 是三态凭证解析的唯一名字,行为与旧名逐字同。
63
+ - **文件历史能力位的 `on-always` 与 `not_offered` 判词退出**(RL-64;§119 RT-3;🔴 行为面:服务端 7.97.0 – 7.103.x 上读数变):`FileHistoryCaptureMode` 少 `'on-always'` 一员,`fileHistoryCaptureMode({ kind: 'present', word: 'on-always' })` 由 `'on-always'` 变 `'unknown'`;`fileHistoryCaptureDoctorDetail` 对这一词落「不认识的词」那一句(带原词、说判不出),不再出「关不掉」那一句(措辞六句 → 五句,仍句句互异);`FILE_HISTORY_LEG_VERDICTS` 5 → 4 词(少 `'not_offered'`),`fileHistoryLegNoticeVerdict` 在「能力位 `on-always` ∧ 用户关 ∧ 该运行上引擎报的词是 `on` ∧ 声明 `not_sent` / `unknown`」上由 `'not_offered'` 变 `'unknown'`,`fileHistoryLegNoticeSentence('not_offered')` 由那一句变 `null`;判定真值表 72 → 54 格(能力位四类 → 三类)。请求片段口 `fileHistoryDeclarationField` 读数不变(这一词此前就给空片段)。
64
+ - **`/goal` Stop 钩的版本分档退出**(RL-65;§119 RT-4;🔴 行为面):`CC_STOP_SEMANTICS_MIN_SERVER` / `ccStopSemanticsFromVersion` / `engineCcStopSemantics` 与同批衍生名 `buildGoalStopHookPrompt` / `getWireSessionStopHookCcSemantics` 退出根入口(后两名不在 0.92.0 的预告名单里:老形整条退役后它们没有第二个用处);`setWireSessionStopHook(prompt: string | null)` 单参(原第二参 `{ ccSemantics }` 删);`hooksForWire()` 投出的 `/goal` Stop 条目(开关未关、未被受管治理挡掉时)是 `{ type: 'prompt', prompt: <原始条件> }`(裸条件,由引擎套 CC 形),不再按服务端版本是否达 1.279.3 分档,版本读不出也一样;环境开关 `SEMA_GOAL_STOP_HOOK_WIRE` 取关闭拼写时照旧不投 `Stop` 钩(`isGoalStopHookWireArmed()` 读法不变,端上「是否对模型宣称拦停」应取它而不是版本);此前未达标或读不出时投的「可执行门 prompt」(带参数占位与 `stop_hook_active` 自收手支)不再产出。`getWireSessionStopHook()` 读回的仍是用户写的原句。
65
+ - **limits / detach 两只引擎版本门与 `/health` 探测退出**(RL-66;§119 RT-5;🔴 行为面:外接引擎):`LIMITS_WIRE_MIN_ENGINE` / `versionSupportsLimits` / `engineLimitsSupportWarning`、`DETACH_WIRE_MIN_ENGINE` / `versionSupportsDetach` / `probeEngineDetachSupport` / `engineSupportsDetach` / `detachSupportDisclosure` 八只名与型 `EngineDetachSupport` 退出根入口;`DetachResolution` 的 `reason` 少 `'old-engine'`。`resolveHeadlessDetach(baseUrl, env?, opts?)` 只剩环境一道 —— `SEMA_HEADLESS_DETACH` 为关闭拼写 ⇒ `{ on: false, reason: 'env-off' }`,否则 `{ on: true, reason: 'default-on' }`;外接引擎(`SEMA_ENGINE_URL`)不再探 `/health`,版本低于 1.196.0 的外接引擎上这一发会照发 detach 头(低于支持底线六个大版本);第一参与第三参本版起不再被读,签名保留。限额旗标 `--deadline` / `--max-turns` / `--max-tokens` 的 `flaggedFlags` 位照旧给出,包内已没有读它的口(此前它触发一行版本警告)。
66
+ - **计划审阅三选卡的引擎版本闸退出**(RL-67;§119 RT-6;🔴 行为面):`PLAN_REVIEW_MODE_AFTER_MIN_ENGINE` / `versionSupportsPlanReviewModeAfter` 退出根入口;`armPlanReviewApproval` 的三选卡(两个 Yes + No)只看 `opts.submittedInPlanMode === true`(此前还要本进程能力缓存里引擎版本 ≥ 7.86.0,读不出 ⇒ 老两选卡);`PlanReviewWire.capsBaseUrl` 位保留、不再被读。
67
+ - **退役键 `ruleSuggestions` 的归一读与 `readRuleOfferSupply` 的第二参退出**(RL-68;§119 RT-7;🔴 行为面:服务端 ≤ 7.45):`readRuleOfferSupply(offers: unknown)` 单参,读法与 `readRuleOffers` 逐例同(`null` / `undefined` 都是缺席);帧 / 待决行上只带 `ruleSuggestions` ⇒ 卡入参没有 `ruleOffers` / `ruleOffersReadOnly`(此前归一成 `kind: 'single'` 候选上卡);两键同场只读 `ruleOffers`(此前也是新键胜);`ToolApprovalFrame.ruleSuggestions` 型位与 `TOOL_APPROVAL_FRAME_KEYS_MIRROR` 的同名成员一并删(镜像 36 → 34,与 RL-12 同批)。
68
+ - **`inheritEnv` 版本闸退出**(RL-69;§119 RT-8):`INHERIT_ENV_MIN_SERVER` / `inheritEnvServerSupport` 退出根入口,型 `InheritEnvServerSupport` 一并删;`InheritEnvWithheldCause` 只剩 `'server_version_unknown'`,`inheritEnvWithheldNotice` 对 `server_too_old` 不再有两句(这个词落通用句,与读不懂的入参同答);`inheritEnvDeclaration` 的读数无变化(0.92.0 起读得懂的版本串一律照发,包括低于 7.106.0 的;版本读不出仍不发)。
69
+
70
+ ### Added
71
+
72
+ - **终局 `blocked` 带的机读成因:`readRunTerminal` 的 `blocked` 臂新增可选位 `detail` + 型 `RunTerminalBlockedDetail` + 成因闭集 `PROMPT_BLOCK_CAUSES`(型 `PromptBlockCause`)**(CC-364 ①;接入文档 **§119 BD-1 / BD-2**):服务端 ≥ 7.113.0、引擎 7.39.0 起,部署的 `userPromptSubmit` hook 把任务的第一条提示挡在提交之外 —— hook 拒绝(`block`)/ 抛了(`crashed`)/ 超时(`timeout`)/ 任务在它筛查时被取消(`cancelled`)—— 时,终局 `blocked` 因由多一只 `detail`(`{ kind: "prompt_blocked_by_hook", cause, hookReason? }`)。此前读器只读 `reason`(引擎按模型侧车道框好的一句话),端分不出「hook 把提示挡了」与「agent 自己报告做不下去」。本版读数的 `detail` 三臂:认得的种类 + 认得的成因词 / 认得的种类 + 表外成因词(`cause: 'unrecognized'` + 原词 `word`)/ 表外种类(`kind: 'unrecognized'` + 原词 `word`);表外词原样带回、**绝不折成已知词**。`detail` 缺席或坏形(不是对象、`kind` 不是非空串、`kind` 认得而 `cause` 缺 / 不是非空串、读属性就抛)⇒ 整键缺席、不补键、不猜 —— 缺席**不等于**「不是 hook 拦的」(服务端 < 7.113.0 不过境、引擎 < 7.39.0 不铸、agent 自己报告「做不下去」也不铸,三者分不开)。`hookReason` 是 hook 自己拒绝提示的话(引擎折成一行、有界;服务端过境时脱敏):非空串才带、逐字,上屏按不可信文本处置。只读自有位;只在因由形上读(扁平形没有这一位);无 `detail` 的 `blocked` 读数与 0.92.0 逐字节同;结果帧不投 `detail`。成因闭集 `PROMPT_BLOCK_CAUSES`(`block` / `crashed` / `timeout` / `cancelled`,顺序同引擎)由构建期从引擎包根生成(生成器第十一批)、冻结,根入口导出(公面 1483 → 1484);成员型 `PromptBlockCause` 由它派生。🔴 本版只出读器与成因表,**不出**「hook 把提示挡了」的出路句 / 判定口(端按 `detail.cause` 自拼;有请托再加)。
73
+ - **连接失败现场判读口 `transportFailureScene(error)` + 型 `TransportFailureScene` / `TransportFailureLayer` / `TransportFailureSocket` / `TransportFailureChainEnd` / `EngineWireNoAnswerKind`**(CC-363;接入文档 **§119 CS-1**):一次传输失败(`fetch failed` 一类)的抛出物,按本包「这一发有没有送出」的同一套判据读成机读现场。`layers`:成因链自身起至多 4 层,每层只取 `name` / `code` / `errno` / `syscall` 与套接字错误自带的四个计数(不取消息正文 / 地址 / 头 / 请求体);`end`:`complete` / `depth_cap` / `cycle` / `unreadable`;`status`:顶层的数字 `status`(有才带);`provablyNotSent`:可证一个字节都没送出 —— 🔴 `false` 是「说不出」不是「已送出」(套接字被对端断开〔`UND_ERR_SOCKET` / `ECONNRESET`〕、读属性抛、证据在第五层以后都落这里);`noAnswer`:本包「没答复」四种来源之一,不是 ⇒ `null`。入参任意、永不抛、返回物冻结。想把传输失败的现场留进日志的端换读它,删掉自写的成因链读法(§119d)。`EngineWireNoAnswerKind`(本包写动词结局早就在用的四词联合)随 `noAnswer` 位上根公面。
74
+ - **交出后台的引擎 Bash 的登记判读口 `detectEngineBgShellDetach(toolName, rawInput, structured, outputText)`**(CC-331;接入文档 **§119 BG-1**):引擎的前台 Bash 中途被转到后台(用户在端上交出后台、超时自动转后台、有排队消息要投递时自动转后台)时,命令在引擎上照跑,收口那张卡的结构化结果是 `{ type: 'bash', detached: true, task_id, … }`。本口只读结构化位 —— `type === 'bash'`、`detached === true`、`task_id` 非空串、不是引擎自述的登记失败(`registerFailed`)—— 铸与回执臂**同一只**登记体(`EngineBgShellRegistration`,`source: 'bash'`;`command` / `description` 取开卡入参,缺席回落与回执臂同);不读回执散文、不看入参的 `run_in_background`;工具名只认 `Bash`;结构化位缺席(老引擎只发散文)⇒ `null`。根入口 +1 名(1483 → 1484),型面不变。
75
+ - **回执臂口 `detectEngineBgShellReceipt` 加可选第四参 `structured?`**(CC-331;**§119 BG-3**):缺席 ⇒ 与 0.92.0 逐字节同;结构化位自述引擎没登记成(`type: 'bash'` ∧ `registerFailed === true`)⇒ 回执臂让位返回 `null`,回执散文不能把「没登记成」改回「在跑」。引擎真铸的登记失败形恒带 `isError`、无句柄,收口总闸本来就拦;本条只改总闸之外的矛盾帧。
76
+ - **子代 tick 的模型位 `InlineTaskTick.model?` / `EngineInlineTaskStats.model?`**(CC-323 ①;接入文档 **§119 TH-1**):wire `task_progress.model`(这条子代那一次运行预备时解析出的模型 id;服务端 ≥7.53 / 引擎 7.0.1 两处铸点无条件带)此前在 `inline_task_stats{op:'tick'}` 的 `stats` 上被丢掉,想渲「解析名」的宿主只能自己在流上截一份台账。现在与 `currentAction` 同形同缺席语义:非空串才带,空串 / 非串 / 缺席 ⇒ 整键不铸(缺席**不是**「无模型」);不带 `model` 的帧输出与 0.92.0 逐字节同,面板 tick 事件、workflow 车道与无父键 tick 不变。内联台账读面带 `model`,`settle` 之后冻结。
77
+ - **`/health` 配置落地五键读器 `readEngineConfigApplyState(body)` + 型 `EngineConfigApplyState`**(CC-323 ②;**§119 TH-2**):`configTargetVersion` / `configAppliedVersion` / `configTargetOrdinal` / `configAppliedOrdinal` / `configApplyStaleMs?` 按结构读(sdk 尚未声明)。序数对是判据 —— 两位都是有限非负整数才算数,**半边在场 = 缺席 ⇒ `null`**;版本对与停滞时长是信息位,不进判决。`null` = 这台引擎说不出来,不是「已收敛」。读器与判决只认自有数据属性(继承来的值 / 取值器读成缺席、取值器不被调用;读的过程中抛 ⇒ 读器 `null`、判决 `ask`)。
78
+ - **心跳 configHash 漂移判决 `configDriftVerdict(input)` + 型 `ConfigDriftVerdict` / `ConfigDriftInput` / `ConfigDriftHealthView`**(CC-323 ②;**§119 TH-2**):四态 `skip` / `in-sync` / `ask` / `advance-baseline`。热应用的默认模型换了(指纹漂、同实例、两序数收敛)⇒ `advance-baseline`,不再挂「重启引擎使配置生效?」的问询;引擎自述要重启(只认布尔 `true`,排在指纹比对之前)/ 换了实例 / 序数缺席半边坏值 ⇒ 仍 `ask`。判据链次序、四态词与缺席一律往 `ask` 倒,逐字搬自宿主壳的同名判决(门里对壳判决源码逐输入对拍 72018 个组合同答);唯一刻意差别:非整数序数按头注收成整数(壳 `advance-baseline` / 本包 `ask`,收紧方向)。
79
+ - **引擎装机里 core 包版本的三态口 `coreVersionTier(version, floor?)`**(CC-355;接入文档 **§119 CT-1**):`engineVersionTier` 判的是服务端包的版本、门槛下限是声明的服务端底线;拿本机引擎装机里 `@sema-agent/core` 包自己的版本喂它,服务端底线之下的任何真实 core 版本都恒答 `legacy`,终端因此留着自己的一份比较。本版导出同形的 `coreVersionTier`:与 `engineVersionTier` **同一只解析、同一个三态型 `EngineVersionTier`**(`engine` / `legacy` / `unknown`;预发布 / 构建元数据 / `v` 前缀 / 首尾空白 / 前导零 / 非串一律 `unknown`),只换门槛下限 —— 取声明的引擎一项 `SUPPORT_FLOOR.core`,`floor` 高于它取 `floor`、低于它被忽略(`coreVersionTier('7.38.3', '1.288.0')` ⇒ `engine`;`coreVersionTier('7.38.3-rc.1')` ⇒ `unknown`);坏形 `floor` ⇒ `TypeError`(先于版本判定、点名自己、不回显值)。版本串由宿主从本机引擎装机读来,本包不读盘;读不到传 `undefined` ⇒ `unknown`,远端 / 附着的引擎没有这一读数(KL-588)。
80
+ - **停泊赎回路径启动失败的读数多一个可选位 `startupCause`(引擎自述的成因词,开集串,逐字原样)**(CC-244;接入文档 **§119 SC-1**):`parkedResumeStartupFromError(err, decision?)` 对 422 `parked_resume.startup_failed` 的读数。sdk 13.0.0 起体上可选的 `cause` 键被读成 `ParkedResumeStartupError.startupCause`(命名不叫 `cause`:那是 ES2022 标准 `Error.cause`〔底层那只错误〕,错误链走读器与日志器会读它,sdk 也不把词赋给标准位)。本版读口按**自有数据位 `startupCause` → 开形透传位 `extra.cause` → 缺席**的序读它(sdk 12 没有具名位,peer 地板 12.0.1 上词只在 `extra.cause`),读到就原样带在读数上;不读标准 `err.cause`;自有访问器 / 原型链上的同名位不读、取值器不被调用;空串 / 非串 / 缺席 ⇒ 整键不在场(不补 `null` / 空串);词不 trim、不改大小写、不截断。🔴 **今天不据词改判**:服务端至 7.117.0 的 422 体还不带 `cause`、引擎(至 7.42.1)的回执也不带成因词 ⇒ 线上恒缺席,词表的属主在引擎侧、尚未发布;`cause`(`resume_rejected` / `undetermined`)仍按调用方声明的决断方向判、两句措辞与决断出口的失败文字不变、词不进任何句子(KL-177)。无词的输入读数与 0.92.0 逐字节同(14000 只输入对拍)。型 `ParkedResumeStartupDetail` +1 可选位,根入口名数不变。
81
+ - **workflow 子代审批决定口的两只 409 进同一只拒绝读器:`decide.workflow_park_forked`(读数多可选位 `runIds`)与 `decide.workflow_parks_unreadable`(读数多可选位 `readableHolderRunId`);根入口 +2 常量 `DECIDE_WORKFLOW_PARK_FORKED` / `DECIDE_WORKFLOW_PARKS_UNREADABLE`**(CC-430;接入文档 **§119 WF-1 / WF-2**):服务端 7.118.0 把 workflow 子代审批卡的路由与赎回收成一个真源 —— 决定交给持有这张卡的那一条 run 记录,证不出持有者时决定口响亮拒、不投递、卡仍待决。`decide.workflow_park_forked`(7.118.0 新码):同一条 run 先后被续跑两次、两支同代次停在这张卡上,体顶层 `runIds`;`decide.workflow_parks_unreadable`(7.75.0 起就有的码,此前本包没有镜像):点名这张卡的记录读不出,或条目没有持有者位(升级那一刻还停驻着的存量卡),体顶层 `runId`,7.118.0 起可选 `readableHolderRunId`。两码进既有的 `decideRefusalFromError`(闭集 `DECIDE_WORKFLOW_LANE_CODES` 两员 → 四员,新员在末尾):只按码、不按句(7.118.0 起拒句按成因分句、还会再换);`runIds` 原样带回(不重排、不去重、冻结拷贝),坏形只丢这一位;`readableHolderRunId` 是线索不是出路(续跑它之后,读不出的那条记录仍压着这张卡);用户面各一句(零机器词、说「没投递、卡仍待决」、不承诺「续跑之后就能决」),`resendable` 两码都是 `false`。`conflict.resume_context_unavailable` 复用既有读口、读数不变。
82
+ - **MCP 会话内重拨的「没等到结果」判决臂 `unsettled` + 用户面一句 `MCP_RECONNECT_UNSETTLED_NOTICE`**(CC-429;接入文档 **§119 MU-1 / MU-2**):服务端 7.118.0 起,`POST /v1/sessions/:id/mcp/reconnect` 对一次重拨的应答最多等 10 秒,期限先到答 503 `state.mcp_reconnect_unsettled`(体只有 `error` + `errorCode`、无 `outcome`、不带 `Retry-After`)—— 说的是**这一口没等到结果,不是重拨失败**:引擎的重拨动词不收取消,到点之后重拨继续跑,落定时才写 / 撤名册。此前这一码落 `reconnectMcpServer` 的 `failed` 臂,端会把一次还没落定的重拨渲成失败。现在 `reconnectMcpServer` / `classifyMcpReconnectFailure` 的判决多一臂 `{ kind: 'unsettled', errorCode, error? }`:**只按码读**(整串相等;状态码不作判据,503 无码与别的 `state.*` 码照旧 `failed`),臂体没有 `outcome` / 结果座,`error` 是远端文本(已消毒封长 200,缺席 ⇒ 无键);抛出的 503 与注入口 resolve 出来的 503 体读同一只口(体里没有 `outcome` 键才认码;带 `outcome` 的体先按 `outcome` 读、不碰它身上无关的 `errorCode`;读口抛 ⇒ 读不出码 ⇒ 不是这一臂,按 0.92.0 的路径读);`MCP_RECONNECT_OUTCOMES` 仍恰三词。给人看的一句单源 `MCP_RECONNECT_UNSETTLED_NOTICE`:没等到结果 / 重拨没被取消、可能还在跑 / 重发前先确认状态(再发一次会再「先关后拨」一遍),不说失败。不带这个码的输入判决与 0.92.0 逐字节同;≤7.117.0 的服务端整个包里没有这个码,这一臂在老服务端上永不触发。🔴 判决联合 +1 个成员:对 `McpReconnectVerdict` 做穷举 `switch`(带 `never` 兜底)的宿主编译红一处;带 `default` / `else` 兜底、把「非 ok」一律渲成失败的宿主不会红,但会把「没等到结果」渲成失败。本机克隆检索三端零处调这个口。
83
+
84
+ - **决定口拒绝读器第四臂 `retired_key`:退役的决定体键 `settledBy` 的 400 按码 + `field` 认**(CC-403 / CC-451 ②;接入文档 **§119 RK-1**):服务端 7.118.0 起 `settledBy` 被 `decidedBy` 取代(零别名),三条工具审批决定口(活卡 respond / 耐久 ask 账 / `/decide`)送它一律 `400 request.body_shape`;**7.119.0 起拒体顶层多 `field: "settledBy"`**(三口同一句)。`denyAttributionRefusalFromError` 的读数 `kind` 联合多第四员 `'retired_key'`(命中 = 状态 400 ∧ 码 `request.body_shape` ∧ `field === "settledBy"`,`extra` 袋优先;**不读句子、不看 `sentSettledBy` 声明**;读数带 `code` / `status` / `field`),`denyAttributionRefusalContent` 多第四句(没落定、审批还在等、换名重发;零机器码)。7.118.0 的同码拒体没有 `field` ⇒ 读数 `null`(7.119.0 的真体去掉 `field` 同样 `null`)。本包不为这一臂做去键重发;首发带旧键 `settledBy` 撞这一臂时,改为把同一个决断只换名成 `decidedBy` 恰重发一次(见本节「退役归因键换名重发」一条),换名那一发也失败才落这一臂的读数。穷举 `switch (kind)` 带 `never` 兜底的宿主编译红一处(§119y)。
85
+ - **能力位 `permissionModes` 读器 + 判据 `permissionModeAdmitted`**(CC-451 ③;接入文档 **§119 PM-1**;读器家族第 25 只):服务端 7.119.0 起 `GET /v1/capabilities` 恒报请求面受理的权限模式词表(引擎全集六词,引擎序;位外的词 `400 request.field_invalid`);≤7.118.x 位缺席、请求面只收五词。根入口 +5 名 `projectPermissionModesCapability` / `noteEngineCapsForPermissionModes` / `observedPermissionModes` / `forgetPermissionModesReading` / `permissionModeAdmitted`(+ 测试钩 1)。三态读数 `present{ modes }` / `not_reported`(老 worker)/ `unobserved`(坏形删格);词表开集收(位里出现不认识的串原样进读数)、判据整张表按读器同一条严格规则验完再做精确比对(命中后跟坏项也不认);格随能力缓存代际自动失效;headless 解析里读数恰读一次(首次认、再读就抛的手拼读数不落空 `fields`)。
86
+ - **场景指派悬空的 503:码常量 `SCENARIO_ASSIGNMENT_UNKNOWN_ERROR_CODE` + 读口 `scenarioAssignmentUnknownFromError` + 型 `ScenarioAssignmentUnknownDetail`**(CC-451 ⑤;接入文档 **§119 SA-1**):服务端 7.119.0 起,配置中心给某主体指派的场景名本部署没有 ⇒ 该主体不带 `scenario` 的提交答 `503 state.scenario_assignment_unknown`(零 run、零计费、不带 `Retry-After`;体 `detail: { scenario, source }`,`source` ∈ `ruling` / `deployment`);此前静默落 `default`。读口按码认(续跑腿折成 `409 resume_blocked_by_policy` 的形按原码认),命中后 `scenario` / `source` 逐位窄读、缺席 / 坏形的位缺席,不出用户面句子。
87
+ - **能力位 `approvalDecidedBy` 读器 + 判据 `approvalDecidedByAdmitted` + 唯一决定函数 `decisionAttributionKeyOf`**(CC-403 装配半场;接入文档 **§119 DB-1 / DB-2**;读器家族第 26 只):服务端 ≥ 7.118.0 起 `GET /v1/capabilities` 恒报 `approvalDecidedBy: true`(三条审批决定口收出处键 `decidedBy`;恒真版本位,不挂谓词),≤ 7.117.x 键缺席。根入口 +6 名(`projectApprovalDecidedByCapability` / `noteEngineCapsForApprovalDecidedBy` / `observedApprovalDecidedBy` / `forgetApprovalDecidedByReading` / `approvalDecidedByAdmitted` / `decisionAttributionKeyOf`)+ 测试钩 1(`__resetApprovalDecidedByReadingsForTests`)。三态读数 `present{ value: true }`(只认自有数据位上的字面 `true`)/ `not_reported`(键缺席或值 `undefined` = 老 worker)/ 其余一切形 ⇒ 投影 `undefined`、读口 `unobserved`(恒真版本位没有有意义的 `false`);判据单源只有自有 `present` ∧ `value === true` 才真,永不抛。`decisionAttributionKeyOf(reading, denySettledBy)` 是策略拒绝的 deny 体放哪一把出处键的**唯一**决定函数(两条决断腿共用,wire 上归因键的字面只在它里面铸;包外第三个发送点读同一只):卡归因 `policy` ∧ 读数认 ⇒ `{ decidedBy: 'policy' }`,卡归因 `policy` ∧ 读数不认 ⇒ `{ settledBy: 'policy' }`,`human` / 缺席 / 表外词 ⇒ `{}`。新可选位:`RespondToolApprovalOpts.decidedBy?: 'policy'` · `HitlDecideDenyOutcome.decidedBy?: 'policy'` · `FsApprovalWireDeps.approvalDecidedBy?` · `ToolApprovalFrameLaneOpts.approvalDecidedBy?`(读数对象,宿主取自 `observedApprovalDecidedBy(baseUrl)`;一个供给点经 `approvalLane` 管两条腿)。过渡型 `decidedBy?: 'policy'` 的自铸字面登退役 RL-74(开发依赖 sdk ≥ 17.0.0 之后改取 sdk 型)。
88
+
89
+ ### Changed
90
+
91
+ - **开发依赖 `@sema-agent/core` 换钉 `~7.44.0`,生成表按 7.44.0 包根重生成**(CC-427;接入文档 **§119 UP-1**;构建期,不出包):包根导出差 +`APPROVAL_REACH` / `PROXY_TUNNEL_REFUSED` / `STEER_REPLAY_FACETS` / `USER_INPUT_UNDRAINED_CAUSES` / `abortedSeatDeny` / `isApprovalReach`,−`USER_STEER_UNDRAINED_CAUSES`(改名;生成常量随之 `CORE_USER_INPUT_UNDRAINED_CAUSES`,公面型名 `UserSteerUndrainedCause` 不动、两词不变);生成器下限抬到 ≥ 7.44.0;生成表可观察变化:`MODE_ARBITRATION` +`classifier_no_ruling`(第 24 类,`bypassImmune: true`)、allow 条目判词闭集 +`tool_name` / `near_miss` / `unmintable_segment`;引擎 7.44.0 起 follow-up 没用上的通告 `detail` 也带 `cause`(本包读口早已透传,只是此前铸点不带)。新常量先进生成表作事实钉,消费读口分别随 CC-365(`approvalReach`)/ CC-374(`detail.differs`)。
92
+ - **已知限制 KL-205 销行**(CC-242):「引擎的拒绝判定对别名的处理有一处上游已认领、尚未发布的修复」已随引擎 7.35.0 到货 —— 会话规则记录与设置那条路对别名同义的前提在引擎 7.33.8 / 7.40.1 / 7.42.1 三代真 Runner 上成立,跨名两格 7.35.0 起由放行变拒(8 / 8);本包判法不变,按已知限制档的过时行流程删行、id 不复用。
93
+ - **`sessionPolicyReadNotice` 入参新增宿主状态臂 `{ kind: 'not_started' }`(这一会话还没在引擎上开始),句子十五 → 十六**(CC-364 ②;**§119 BD-3**):服务端对「会话不存在」与「别人的会话」同回 404,读口分不出「还没开始」,所以不在读口里分 —— 由宿主在**自己还没发过消息**时传这一臂(与 `no_target` 同形:宿主自己的状态,本包的读口永不铸它)。句子:`This session has not begun on the engine yet — nothing has been sent in it — so it has no rule record to read. Send a first message, then look again.` 说的是事实而不是「未知」(这一格里没有未知的内容,所以不说「里面有什么不知道」),也不说成空记录 / 没有规则 / 没有限制;零机器词;只认自有数据位的 `kind`(近邻拼写 `not-started` / `Not_Started` / `notstarted` 落通用话)。既有十五句 + 通用话与 0.92.0 逐字节同(对拍);`{ kind: 'not_started' }` 在 0.92.0 上落通用话。宿主以为没开始而引擎上其实已有这一会话时这一句说错话,本包不替宿主判(KL-583)。
94
+ - **包内:成因链的读法并成一只走读口**(CC-363;**§119 CS-2**):「可证没送出」判词与 `transportFailureScene` 走同一只走读口、同一只证据判词,成因链上限(4 层)只在包内一处。判词与「没答复」的读法与 0.92.0 逐例同、读序逐字同(新门对 0.92.0 的判词在生成语料 / 汇总错误各形 / 读属性抛 / 读数随读次数变的取值器上逐例对拍);无可观察变化。现场口每一位只读一次,层记录里列的码就是判词据以判的那一次读数。
95
+ - **chrome 臂 `bgshell_register` 在「交出后台的引擎 Bash」上也铸**(CC-331;**§119 BG-2**):此前这条臂只为模型自己要的后台命令(`run_in_background` 回执)与 Monitor 铸;交出后台那一形收口时本包不铸,没有自补的端后台面板零行。本版起同一条臂、同一载荷形、先于 `tool_result` 卡铸一条。🔴 **一张卡至多一条**:同一张卡上两个判读口同时成立只出一条(取结构化位的句柄)。**不跨卡压制**:同一 `taskId` 出现在另一张卡上各铸各的 —— 压制的判据只能是消费端有没有这一行,本包不记「我发过」;宿主登记按 `taskId` 幂等。不带 detached 结果的输入,产出与 0.92.0 逐位同(含同 `taskId` 的重复回执卡);唯一例外是结构化位自述登记失败而 `isError` 缺席的矛盾帧(BG-3)。终端须同批删自补臂(§119d)。
96
+ - **包内:`engineVersionTier` 的实现挪到两口共用的内部判官**(CC-355;**§119 CT-1**):读版本串与比大小从此只有一份实现,两个导出口只差门槛下限的来源。对外逐字节同(含坏形 `floor` 的 `TypeError` 文本;对 0.92.0 发布产物 84 万对入参零分歧);无可观察变化。
97
+ - **§112c(0.86.0)真机格的判读口径改口**(CC-301;接入文档 **§119a′**;无代码变化,已发的 §112 不回改):G-HP3 真机格撤(前提「托管 ∧ host 车道」在已读的服务端各代标准启动路径上不会同时成立;句子投影由包层 G-HP1 / G-HP2 判,补格触发写在 §119a′);G-L4 / G-W4 / END 的租约一半缺部署形夹具 ⇒ 包层证 + 真机缺前提记 PARTIAL、不计 FAIL;这套驱动走不到刺激的格登已知限制(KL-593 … KL-596)。读数射程:一轮、驱动 = 终端 1.0.140 × 服务端 7.111.0、每格一次,其余三端本轮没读,换驱动能不能造出本轮没有试。
98
+ - **包内核对:sdk 13.0.0 起两处型面 breaking(`ControlConfigResource.put` 的 `baseVersion` 必填 / `KnownScenario` 删 `team`)对本包零命中**(CC-244;**§119 SC-2**):`src` 全树没有 `ControlConfigResource` / `config.put` / `KNOWN_SCENARIOS` / `KnownScenario` 的引用(场景只经开集联合 `Scenario` 过 `controlRouter.ts`,`team` 在类型位零引用);整包对 sdk 15.0.0 … 16.3.0 八份发布字节(外加 12.0.1 对照)逐份 `tsc --noEmit` 零错误,植入旧形的尺子在 15.0.0 起每一份上两处都红、在 12.0.1 上不红。开发依赖与 peer 地板不动(`>=12.0.1`);换钉 sdk ≥16 时本包源码不会红、无需改动。无可观察变化。
99
+ - **联网搜索 `apiKey` 在提交前就判「能不能当 HTTP 请求头值」:`judgeWebSearchSettings` / `webSearchVerdictFromEnv` / `resolveWebSearchVerdict` 多一道判臂**(CC-428;接入文档 **§119 WK-1 / WK-2**;无新增导出、无型面变化):`apiKey` 会作为请求头值发给搜索后端(brave = `X-Subscription-Token` 头里的 key 本身,tavily = `Authorization: Bearer <key>`);带换行 / NUL / 其余控制符 / DEL / 超出 U+00FF 的字符的 key 运行时发不出去 —— 此前两边只判「是串」,坏 key 被采纳、到搜索那一刻才抛(老服务端上那一抛的文本还带着整串 key);服务端 7.118.0 起受理面对这一形 400 `request.field_invalid`(`error` 句不回显值)、部署的环境变量配置拒启。本版在发之前就判:坏形 ⇒ `malformed`、`field: 'apiKey'`、原因句逐字同服务端那一句(`must be usable as an HTTP header value (it contains a character an HTTP header cannot carry, such as a line break)`),`webSearchVerdictMessage` 点名 `webSearch.apiKey in settings` 或 `SEMA_WEBSEARCH_API_KEY`、不回显 key 的任何字节。判的是**真正发出去的那一串**(tavily 是 `Bearer <key>`,所以首部 CR / LF 对 tavily 拒、对 brave / searxng 收 —— 头值归一化剥掉首部);**首尾空白(含 k8s secret 常见的尾随换行)照收、值原样**;空白串仍按「未设」(先于头值判);判序不变(provider → apiKey → endpoint → …)。`SEMA_WEBSEARCH_API_KEY` 同判(坏形 ⇒ env 的 `malformed`,仍不回落 settings 段);宿主凭据注入回调(`apiKeyFor`)回的非空白串**也同判**(它就是上 wire 的那一把,以前不判);包内回落面据此不报 `WebSearch`。判据是运行时头值流水线(`Headers` 构造归一化 + 发送层字符表)的纯实现 —— 包不引 Node 内置件、不用全局 `Headers`(浏览器里那一只是另一张表);门拿 Node 自带的两只当尺子逐码位对拍。**可观察变化**:坏 key 由「请求照发、搜索失败」(searxng 上是照常搜索)变成「提交前拒、给一句」;合法值与首尾空白的读数与 0.92.0 逐字节同(对拍 828 例)。**读 400 只按码**:这一拒的体只有 `error` 与 `errorCode`、没有机读 `field` 键(上游没铸),包内零处按句子匹配它,字段归属取自提交前判决的 `field`(KL-599)。
100
+ - **`isGateStandingErrorCode` / `isCodeClassifiedGateFailure` 码优先认领 `decide.workflow_parks_unreadable` / `decide.workflow_park_forked`**(CC-430;**§119 WF-2**):两码都是「卡仍待决、零投递」,失败文字(服务端原句,会换)不再交给「已决」扫词臂 —— 句子哪天带上 `already` / `resolved` / `not found`,修前会把一张还待决的卡判成「门早已决」、空转一轮重连。今天服务端 7.118.0 的原句里没有这些词,所以这是抗换句的收紧;不含这两码的输入与 0.92.0 逐字节同。
101
+ - **`DECIDE_WORKFLOW_LANE_CODES` 两员 → 四员**(CC-430;**§119a′ WF**):既有两员位次不动、新员在末尾;按「恰两员」断言的测试要改。
102
+ - **`decideRefusalFromError` 的 `errorCode` / `runId` 两格改为受保护读**(CC-430 发版复核;**§119 WF-2**):取值器会抛的抛出物,修前整只读口抛出;现在 `runId` 取值器抛 ⇒ 这一位缺席、认出的拒绝照给,`errorCode` 取值器抛 ⇒ 读成 `null`(读不出码,不是任何一码)。包内的严格字符串表读法(`readErrorStrictStringList`)同批把数组判定放进保护:校验通过之后才被撤销的代理数组不再让读口抛出(同一读法的另一处使用点是一张拒体键表读)。取值器不抛的输入与 0.92.0 逐字节同。
103
+ - **一句话并列了几种成因的措辞存量逐处判:分得出的拆成分句,分不出的句尾明说本端分辨不出**(CC-120;接入文档 **§119 WD-1**):一个读口把几种成因折成同一个读数时,句子要么按本端真握着的位拆开(各成因一句),要么在句尾承认 `this end cannot tell which`。本版逐处判过十个位置:① **分不出 ⇒ 句尾承认** —— 十七只能力位读口的「未观测」句(`(none received, or the last one was unreadable)` 改为 `(none received, the last one was unreadable, or the last one was discarded when the engine connection was reset; this process cannot tell which)`:共用读口收到读不懂的回体就删格、能力缓存换代后也按未观测答,三种成因的读数逐字同;第三因是发版前的复核抓到的 —— 旧句只列前两因,在引擎连接重置之后是一句假话)· `invalid.cap_exceeded` 的四只帽(引擎规则编译器三处铸同一个码)· 会话规则记录「不存在或是别人的」四句(服务端对两者刻意同码同串)· 推面关着的两因(没有 checkpoint 店 / 工具审批关了)与规则写入口够不着的两因(车道没开 / 这次调用没身份)—— 引擎各只报一格布尔;② **去掉版本号 + 承认分不出** —— `postureKnobDetail` / `readFacePostureDetail` 的「不报」句(「引擎不送」与「送了读不懂」在投影层折成同一个缺席;句子不再点名 7.67.0 / 7.65.0,受支持的引擎底线早已在两者之上);③ **分得出 ⇒ 拆句** —— 丢帧判词 `unknown_arm` / `malformed` 各一句(此前共用「引擎比客户端新 / 帧坏了」的缺省句,而投影器给判词时就知道是哪一种)· `permissionsAllowGrantDoctorDetail` 的「读不干净」按读健康位拆成 `partial` / `unreadable` / 没交或不认识三句(此前并列「有文件读不出或带坏字段、或没交读健康」,三种入参渲同一句)。码、读数、投影、导出面一字不变,只改渲出的句子;**按整句等值断言旧句的测试要更新**(逐处表见接入文档 119b WD)。丢帧缺省句(只剩表外判词用)的句首逐字不动(终端有一道断言按子串读它),句尾见下一条(WD2-3)。
104
+ - **活卡帧键镜像 `TOOL_APPROVAL_FRAME_KEYS_MIRROR` 36 → 37(本版 RT 段先退役两键 36 → 34,再加三键):+`boundGrantDigest` / `boundGrants` / `classifierNoRuling`**(CC-433;接入文档 **§119 FK-1 … FK-3**):帧型位 `boundGrants?: BoundSkillGrantsWire`(新公面型名;本地结构型,与引擎同名型编译期双向钉 —— 出包的类型声明不引用引擎包,装本包不装引擎的下游照常编译);服务端 7.118.0 起活卡帧上的三键(`Skill` 停驻卡的授予绑定摘要与清单;`classifier_no_ruling` 类停驻卡的成因词)入镜像作键集看守,本版**不投卡、不出句**(摘要是服务端对账用、逐字过境;清单与成因词的卡位 0.94.0 设计先行)。端读数与 0.92.0 逐字节同;`ApprovalCardRequest` 无新位。
105
+ - **多成因析取句存量第二批:二十二处逐处判,外加两处同形、两处「键缺席读成引擎版本」、丢帧缺省句句尾**(CC-423 / CC-422;接入文档 **§119 WD2-1 … WD2-3**):判法同上一条。① **分得出 ⇒ 分句**:`runDeathVerdictNoteOf` 的两个「持有者死亡」码各一句(`run.orphaned` 说进程没了 `(it was restarted)`、`run.stalled` 只说它不再报到 —— 服务端只凭心跳过期收割、不查进程死活,所以不断言进程没了;此前并列「重启了 / 不再应答」两因);「不再询问」没过包内核对的通知按三条丢键路径各说一因(两个互斥选择同场 / 下标不是 batch offer / 规则文本不是本帧 single offers 里的任何一条;调用点本来就知道是哪一条);持久规则读写三句 / MCP 探测两句 / 记忆来历一句的「读不懂的 2xx」按坏的那一处各说各的(此前并列整串字段清单;失败体的公面词不变,只有 `message` 变细)。公面常量 `RULE_NOT_SENT_REJECTED_WARN_TEXT` 的值变成「没交成因」那一句(三种都说并承认分不出)、声明由字面类型变为 `string` —— 按「通知文本含该常量」判有没有这条通知的端,改按句首子串 `client-side check` 判(四端检索零处读它)。② **分不出 ⇒ 句尾承认 `this client cannot tell which`**:agents 的「不支持」告警(`taskAgents` 键缺席与值为 `false` 折成同一个 `false`;并删掉早已退出支持的 `server <1.205` 坐标)· 云配置模型条目三句(本机引擎的条目判定口只答布尔)· 决断回执三个码(`decide.not_parked` / `decide.gate_moved`,外加同族的 `decide.claim_lost`;读口只按码判)· 续跑拒绝三句(会话不存在 / 停泊续跑启动失败 / 不传停驻种类的出路句)· 门判词三句(`ancestor_marked` / `safety_tighten` / `probe_unanswered`)· ask 停泊行路由两句(唯一一行证不出归属,外加空队列句)· 存储姿态 `local_unwritable` 降级句(「只读 / 写满」只是例子)。③ **键缺席不读成引擎版本**:`peerLaneDoctorDetail` / `steerPriorityDoctorDetail` 的 `not_reported` 句不再说「引擎老 / 版本信号」(受支持的服务端都铸这两位),只说「回体里没有这一位、本端不知道」;读数与处置(`peerLaneAvailable` 仍答 `'no'`、藏入口)一字不变。④ **丢帧缺省句句尾**(CC-422):`(engine newer than the client, or a malformed frame; this build cannot tell which). It renders NOWHERE.`,句首 `this build's projector has no arm for it` 逐字保留。码、读数、投影、导出面一字不变,只改渲出的句子;**按整句等值断言旧句的测试要更新**(清单与逐处表见接入文档 119a′ WD2 / 119b WD2)。
106
+ - **`dontAsk` 按位发词;请求面意图表与部署旋钮词表多一词 `dontAsk`**(CC-451 ③;接入文档 **§119 PM-2 / PM-3**;🔴 型面联合 +1):`normalizeShellPermissionModeForWire(mode, permissionModes?)` 按位两代 —— 读数 `present` 且词表含精确的 `dontAsk` 才原样发,没给读数(= 0.92.0 的调用形)/ 老 worker / 位不含 / 坏读数一律照旧归一成 `default`(收紧方向,逐字同);`permissionModeField(mode, { stampDefault?, permissionModes? })` 里 `dontAsk` 不是无条件词(§119 PM-5):没有读数认它时,没开 `stampDefault` ⇒ `{}`(与 0.92.0 同),开着 ⇒ stamp `default`(与归一口同向:要的最严拿不到就落最严的可得形,不落「不 stamp」= 服务端缺省模式);`resolveHeadlessPermissionMode(argv, env?, permissionModes?)` 的 flag 车道与 env 车道同按位(env 车道降档带一句警示,按读数分句〔§119 PM-6〕:没交读数 / 还没读到能力 / 引擎不报 / 报了但不含 / 读数读不出)。`PERMISSION_MODE_INTENTS` 与 `HEADLESS_PERMISSION_WIRE_MODES` 由唯一元组派生 ⇒ 六词(原五词与序不动、`dontAsk` 在末),型 `PermissionMode` / `PermissionModeIntent` 联合 +`'dontAsk'`(sdk 17.1.0 起 `TaskRequest.permissionMode` 即六词,本包的并词届时成空操作);座位入站门本版起认 `dontAsk`,发不发上 wire 由宿主据能力位定。
107
+ - **存储姿态降级成因词表:`db_unreachable` 随服务端 7.119.0 不再出现,本包读法保留**(CC-451 ④;接入文档 **§119 SD-1**;无代码变化):配了 DSN 的 SQL 库打不开 ⇒ 服务端窗内重试、到窗拒启,不再退成内存,`STORE_DEGRADED_REASONS` 只剩 `local_unwritable`;≤7.118.x 的 `SESSION_BACKEND=auto` 仍会报 `db_unreachable`,`storePostureDoctorDetail` 的专句与读数里的原词照旧(sdk 17.1.0 的 `StoreDegradedReason` 联合同样保留该词)。`/health.sessionBackend` 的有效店标签(`memory` / `durable(pg|mysql|local)`)恒是串,与 sdk `EngineHealth.sessionBackend?: string` 同型,本包 `HealthResponse` 取的同名键不动。
108
+ - **`council_done` 的 `lenses` / `failedLenses` / `perLens` 本包零读点,门钉住**(CC-451 ⑥;接入文档 **§119 CZ-1**):服务端 7.119.0(引擎 7.45.0)起失败的镜头移到 `failedLenses`(`lenses` / `perLens` 只含成功的);本包没有读点,`src/` AST 零命中,将来有人读了门必翻。
109
+ - **策略拒绝的 deny 体按位选出处键:位真发 `decidedBy: "policy"`,读不出照旧发 `settledBy: "policy"`**(CC-403 装配半场;**§119 DB-2**;🔴 行为面:接了读数的宿主 × 服务端 ≥ 7.118.0):服务端 7.118.0 起 `settledBy` 退役、零别名(送它三条决定口一律 400),此前本包两条决断腿(耐久 `decide` / 活卡 `respond`)无条件带它,所以位真的引擎上每一次策略拒绝都 400(0.93.0 的第四臂 `retired_key` 只点亮了拒绝的读口)。现在读数明确 `present` 时体恰带 `decidedBy`、不带 `settledBy`;`not_reported` / `unobserved` / 坏读数 / 没给读数(= 0.92.0 的调用形)一律照旧发 `settledBy`(收紧方向,逐字同);卡归因 `human` / 缺席 / 表外词与 allow 卡不带键(本包永不发 policy allow)。**不从引擎版本号推能力**:门用真路由实证 ≤ 7.117.x 的活卡口对 `decidedBy` 静默忽略并照回 200、策略拒绝按「人拒」落账,耐久两口则 400。读数与卡归因在第一个 `await` 之前各读一次;宿主的 `approvalLane` 读那一位就抛 ⇒ 当没给。`HitlBridge.decideTool` 的白名单拷贝对两键各正面匹配 `'policy'`、**只读自有数据位**(原型链上的同名键与访问器都不落键 —— 一次 `Object.prototype.decidedBy` 的污染不许把新键注进每只 deny 体,包括去键重发的那一只;`settledBy` 此前是普通属性读,同形存量一并收紧),两键都给只落 `decidedBy`;判据单源 `approvalDecidedByAdmitted` 同样只读读数的自有数据位(访问器伪造的肯定读数不认、访问器不执行)。🔴 宿主注入的 respond 实现要把两键都转进体里(漏 `decidedBy` ⇒ 位真的引擎上静默按「人拒」落账)。
110
+ - **直连门拒绝码随键换名,去键重发律扩成两键;`denyAttributionRefusalFromError` 第二参改名 `sentAttributionKey`**(CC-403 装配半场;**§119 DB-3 / DB-4**):直连门部署上出处键不在签名载荷里 ⇒ 400,码 ≤ 7.117.x `settled_by_not_in_proof`、≥ 7.118.0 `decided_by_not_in_proof`;读口把两个码并列认同一臂 `not_in_proof`(读数 `code` 原样带出),此前 `decided_by_not_in_proof` 读成 `null`。两条腿对这一臂的去键重发仍是恰一次、共用同一只判官,去掉的是体里那一把归因键(哪个在场去哪个),重发体两键都不在;`denyAttributionDropped` present-iff 不变。第二参语义从「带过 `settledBy`」扩成「带过归因键(两名之一)」,位置与类型不变;`decision_conflict` 在 `decidedBy` 形上照认;`retired_key` 臂不动,仍不去键重发。 换名发撞直连门再去键一次:首发带旧键撞退役键拒绝、换名成 `decidedBy` 的那一发又撞直连门时,换名后的体去掉归因键再发恰一次(§119 RK-2)。
111
+ - **`deviceExecutor` 读器扩到车道形三位,`management` 由布尔改三态字面,「车道开着而管理位没报」并进 `present`;新判据 `deviceLaneOpen`**(CC-454;接入文档 **§119 DX-1 / DX-2**;🔴 型面 BREAKING:`DeviceExecutorManagementReading` 的 `present.management` 由 `boolean` 改为 `'present-true' | 'present-false' | 'absent'`,`not_reported.why` 联合少一员 `'management_absent'`;根入口 +1 名 `deviceLaneOpen`):同一个能力位 `capabilities.deviceExecutor` 此前有两条读法 —— 本包的读器只读 `management`(`present` / `not_reported` / `lane_absent` / `unobserved` 四态),终端另在自己的壳里有一份读 `enabled` / `protocolVersion` / `maxInflightPerDevice` / `wsPath` 的读器。本版收成包内**同一只**读器(不另起第二只、不新增读口名):
112
+ - `present` 多带三位 `protocolVersion`(只认有限数)/ `maxInflightPerDevice`(只认有限非负数,0 原样带出)/ `wsPath`(只认非空串),逐位独立:缺席或坏形(串 `"1"` / NaN / ±Infinity / 负数 / 空串 / 非串)只让**那一位**不进读数 —— 不删格、不影响别位、不放宽、不编默认值;读数只带这五个键(`kind` / `management` / 三位),对端多送的键不转手。每一把键只读一次、只认自有键(原型链上的同名键不算)。
113
+ - `management` 三态字面:键值 `true` ⇒ `'present-true'`、`false` ⇒ `'present-false'`、键缺席(含显式 `undefined`;7.88.0 之前的服务端,车道开着而不报管理位)⇒ `'absent'`;其余取值(`null` / 串 / 数 / 数组 / 对象)照旧畸形、读口 `unobserved`。此前「车道对象在、`management` 键缺席」读成 `not_reported`(`why: 'management_absent'`),现并进 `present` ∧ `management: 'absent'` —— 车道开着这件事已经读到了,只是管理位没报;`not_reported` 只剩 `why: 'capability_absent'`(`deviceExecutor` 键整个不存在)。`lane_absent`(整位 `false`)与 `unobserved` 不变。
114
+ - 对象臂的 `enabled` 按契约恒为 `true`:缺席或不是字面 `true` 的对象 ⇒ 畸形(删格,读口 `unobserved`),**不铸 `disabled` 臂** —— 契约里没有「对象但没开」这一形(没有车道时整位是 `false`);服务端 7.106.0 – 7.119.0 十二代的 caps 路由铸点两臂只有 `false` / `enabled: true` 的对象(门 `server-7119-fixture` 新段 DX 逐代实跑)。
115
+ - 判据:`deviceManagementVerbsAvailable(reading)` 语义不变(`'present-true'` ⇒ `'yes'`;`'present-false'` / `lane_absent` ⇒ `'no'`;其余含 `'absent'` ⇒ `'unknown'`),但只认三态字面 —— 上一代的布尔形一律 `'unknown'`;新判据 `deviceLaneOpen(reading)`:`present` ⇒ `'yes'`、`lane_absent` ⇒ `'no'`、其余 ⇒ `'unknown'` —— 与上一条答两件事,车道开着而管理位没报是 `'yes'` 配 `'unknown'`。`deviceExecutorManagementDoctorDetail` 的句子按新形改口:管理位三态各一句,车道三位有则带在句尾、缺则不带(`wsPath` 是对端给的串,进句前转义并封长 64);「管理位没报」那句沿用 `not_reported` 的口吻 —— 不说「没有管理面」,说「不报、直接试探」。
116
+ - 换钉要改的:按 `reading.management === true` / `=== false` 分支的写法改成三态字面或直接调 `deviceManagementVerbsAvailable`;按 `why === 'management_absent'` 分支的改读 `present` ∧ `management === 'absent'`;凭空造 caps 替身的测试,对象臂要带 `enabled: true`。终端壳里那份 `readDeviceExecutor` 可退役、`cloud.ts` 那一处改问 `deviceLaneOpen(...) === 'no'`(接入文档 119d DX)。
117
+ - **联网搜索:宿主注入的那把 key 判坏时,判决来源记 `host`,句子不再指向 settings**(CC-428;接入文档 **§119 WK-3**;🔴 型面联合 +1:`WebSearchSettingsVerdict` 的 `malformed` 臂 `source` 多一词 `'host'`):注入回调 `apiKeyFor` 交回的 key 本版起也判头值(WK-1),但判坏后读数此前记 `source: 'settings'`,用户面一句把错归到 `webSearch.apiKey in settings` 并建议删掉整段 webSearch 配置 —— 出问题的是宿主凭据库里那一把,settings 里可能根本没有 `apiKey`。现在这一形 `source: 'host'`(`field: 'apiKey'`、原因句不变),`webSearchVerdictMessage` 对它出两句:`Web search is misconfigured: the API key your host supplied for webSearch is malformed; it <原因>.` + 提交场景 `The request was not sent — the key needs replacing where your host keeps it.` / 检查场景 `Requests will be refused until the key is replaced where your host keeps it.`;不回显 key 的任何字节。回调没给 key / 回调抛错 ⇒ 判的是段里的 key,来源照旧 `settings`。对 `source` 穷举分支且带 `never` 兜底的宿主编译红一处。
118
+ - **十三句能力位「没报」句不再把键缺席读成引擎版本**(CC-423 同族;接入文档 **§119 WD2-4**):`approvalsStreamLive` / `centerWiring` / `deviceExecutor`(两句)/ `fileHistoryCapture` / `memoryCompliance` / `memoryOrigin` / `executionLane` / `sessionSyncFileHistory` / `rewindArchive`(两句)/ `storePosture` / `webSearchBackend` 的 `not_reported` 句删去「only newer engines advertise it / say …」半句 —— 支持底线服务端 7.106.0 起这些位的能力路由铸点都在,受支持的部署上缺席不来自版本;句子只说「这台引擎没报 / 这一句不说明它在不在」,不断言不存在。按整句等值断言旧句的测试要更新(§112 已发段里引过的那一句不回改,见 §119a′ WD2)。
119
+ - **`permissionModeAdmitted` 只认描述符上的值(访问器不执行)**(CC-451 ③;接入文档 **§119 PM-4**):与同族判据 `approvalDecidedByAdmitted` 同一读法 —— 读数的 `kind` / `modes` 与 `modes` 的每一项都按自有数据位读;此前 `hasOwn` + 取值会执行宿主的访问器,访问器给的 `modes: ['dontAsk']` 也算认。JSON 解析出来的读数(投影口的产物)上零差别;只对宿主手拼的访问器读数改判「不认」(收紧方向:不发 `dontAsk`)。
120
+ - **退役归因键换名重发:首发带 `settledBy` 撞退役键拒绝 ⇒ 换 `decidedBy` 恰重发一次**(CC-403;接入文档 **§119 RK-2**;结局多一位 present-iff `denyAttributionRenamed: true`):宿主没接 `approvalDecidedBy` 读数(0.92.0 的调用形)× 服务端 ≥ 7.119.0 × 策略拒绝,此前每一次都是 400 + 一句「换名重发」,卡一直待决。现在耐久 `decide` 与活卡 `respond` 两条决断口在首发体真带 `settledBy`、拒绝恰是 `400 request.body_shape` 且点名 `field: "settledBy"`、调用方没中止时,把同一个决断只换名成 `decidedBy`(值不变、其余字节不动)恰重发一次 —— 见证是这一发的回体本身(点名了旧键的那台引擎收新键),不从版本号推;7.118.0 的同码拒体没有 `field` ⇒ 不换名。换名那一发成功 ⇒ 决断落定、`denyAttributionRenamed: true`(`denyAttributionDropped` 不置,归因上了 wire);换名那一发撞直连门(`decided_by_not_in_proof`)⇒ 换名后的体去掉归因键再发恰一次(每种重发各至多一次、总共 ≤3 发,都在裁决之前),落定只铸 `denyAttributionDropped`(看落地的那只体说话,`denyAttributionRenamed` 不铸);别的失败不再发、按最后一发归类。allow 族、人拒、首发带的已是 `decidedBy` 的体都不换名(体里没有可换的旧键)。`FsApprovalOutcome` 的 `decided` 臂与 `ToolApprovalFrameOutcome` 各 +1 可选位。
121
+ ### Deprecated
122
+
123
+ 以下公面名本版**标弃用、预告 0.94.0 删除**(CC-309;接入文档 **§119 LD-1**;名与签名不变、值与行为冻结一版;发布包的类型声明没有机器可读的弃用标记,以本节与 §119 为准):
124
+
125
+ - `providerRejectionResend(detail, carrier?)`(根入口导出;「改了重发」那一句的自由函数读法)—— 与 0.91.0 起合成终局行上的 `_sema_provider_rejection_resend` 及行尾那一句是同一事实的两条读法。0.94.0 起根入口不再导出它(型面 BREAKING):三端改读合成终局行上的 `_sema_provider_rejection_resend`(对象,`text` 为非空串即那一句);包内铸点照用,句子与键的形不变。
126
+
127
+ 以下三处公面**位**(不是导出名)本版标弃用、预告 0.94.0 删除(CC-431;接入文档 **§119 LD-2 … LD-4**;本版行为不变、零读者):
128
+
129
+ - `PlanReviewWire.capsBaseUrl`(计划审阅注入连线的可选位)—— 本版起不被任何口读(三选卡的版本闸已删)。0.94.0 起型上没有这一位:宿主按 `{ client, capsBaseUrl }` 写的对象字面量编译红,删掉这一键即可。
130
+ - `resolveHeadlessDetach(baseUrl, env?, opts?)` 的第一参与第三参 —— 本版起不读(外接引擎的版本探测已删)。0.94.0 起签名收成 `resolveHeadlessDetach(env?)`:两实参 / 三实参的调用编译红,删掉第一实参(与第三实参)即可。
131
+ - `LimitsParseResult` 的 `ok: true` 臂上的 `flaggedFlags` —— 本版起包内外零读者(它只喂过已删的版本探测)。0.94.0 起这一臂不再带它;读这一位的写法编译红,删掉即可。
132
+
133
+ ### Fixed
134
+
135
+ - **展示出口「先洗后折」:错误记录定位句的提示预览不再漏块标量形凭据**(CC-472;安全类):`toolHistoryBadTurnSentence` 此前把提示正文**先**折成一行**再**交展示出口,YAML 块标量形(标签、块标记、换行、值)折成一行后凭据网把记号落在块标记上、无已知前缀的真值原样进句;现把去标签后的原文交展示出口缺省单行载体(洗完再折行),残余空白归一后再截 60 码点。门 `tool-history-mismatch-projection` +BT9 四格(块标量 / 单行回归 / 折叠块标量 / 仍单行);同形族扫:本包 `src/` 其余调用点先折后洗零处(`displayUntrusted` 之前无 `replace(/\s+/g` / `trim()`)。
136
+ - **重试覆盖层:429 不再一律渲成额度耗尽**(CC-473;test [9432] 用户报案;接入文档 **§119 RS-1 / RS-2**):`mapBrainStatusToRetry` 对 `rate_limited` 相此前恒铸 `error.rateLimits = {}`(恒真),端据真值把每一次 429 都渲成「Usage limit reached」—— 但 wire 上的重试帧没有任何额度证据(只有 `errorStatus` / `errClass`),CC 也只在统一额度头在场时才给对象。现 `rateLimits` 不再恒 `{}`,一律 `null`;`rate_limited` 与 `retrying` 两相的 `formatted` 带引擎中性 `detail`(缺席 `""`),端在 attempt ≥3 落泛化臂时不再是空标题(X0b)。额度判定随 core 7.48.0 的提货版经终局座 `providerCondition` 接,重试帧不承载额度词:`status` 帧上的判别键两层投影白名单一律不转手,读数型不加位。换钉要改的:`Boolean(rateLimits)` 在 0.93.0 上对每次 429 恒假 ⇒ 端渲节流句、零额度字眼;额度句等提货版;`providerRejection` 的 `rate_limit` 桶与本读数同拍收口(§119 RS)。
137
+ - **审批出处键的能力位读数改在首个 `await` 之前读**(CC-403 装配半场;接入文档 **§119 DB-2**,成文句不变、实现向它靠齐):耐久 `decide` 与活卡 `respond` 两条决断口此前在等卡(耐久口还有取件)回来**之后**才读宿主的 `approvalDecidedBy` 位 —— 宿主在等待期间换了这一位、或原地改了读数对象,发出去的就是后来那一把键(入口说认、卡回来时改成没报 ⇒ 送旧键,新服务端上撞退役键拒绝)。现在入口(与审批身份同一拍)读一次、过判据、冻结成快照,决定函数只吃快照;宿主不在等待期间改位的调用与此前逐字节同。
138
+ - 🔴 **会话规则可送判定:以协议前缀开头、对端段为空的名(`mcp__` / `mcp____x` / `a2a__` / `a2a____x`)不再送,与「对端段铸不出」同类扣下(成因 `not_a_tool_name`)**(CC-437;接入文档 **§119 SP-2**):引擎 7.43.0 起规则工具名判官(`judgeRuleToolName`)多一词 `unmintable_segment`,这类名写口 400 `rules.legacy_tool_name`(拒体判词 `unmintable_segment`);没有任何工具铸在它下面,写进去哪一代都拦不住。本包此前按「以前缀开头 ⇒ 普通名」照送 ⇒ 服务端 ≥7.118.0 整批 400。修在对端段那一步(只看串、不要端口,排在共享叶之前);拒启名判据 `isEngineRefusedToolName` 与窄撤销动词**不动** —— 实装引擎真跑实证这类名在准备期不拒启(模型照常被调到),不是「写进去就砖」那一类。拒体判词 `LegacyToolNameVerdict` 随生成表已含 `unmintable_segment`(三值)。收紧方向;终端 1.0.143 按普通名送 ⇒ 登记分歧(本包更严)。
139
+
140
+ - **durable 停驻出口的连坐位:门本体名与主角调用的拼写不同族时,不再靠「族内唯一」判主角**(CC-242;接入文档 **§119 AL-2**):引擎 7.35.0 起把工具名在权限判定前归一成名册正名,停驻门的 `toolName` 是正名、`tool_start` / `tool_end` 的 `toolName` 仍是模型用的拼写。本包在 durable 停驻的出口给「非主角」的收口帧盖连坐位 `_sema_collateral_abort`,判主角的准入证读门本体名、族成员表读 `tool_start` 的拼写 —— 调用方工具 `Bash` 声明别名 `shell_exec`、模型按别名发起,且同批有一只并发的写文件旁观者时,旁观者被判成「唯一的主角」,主角自己的收口帧被盖连坐位(审批列表读不到的收场路径上)。现在门的主角调用身份在手时,准入证还要求那只调用的拼写也属该族;不属 ⇒ 判不出主角、一个都不盖(与两种拼写一致时同读数)。身份缺席(不带 `toolCallId` 的停驻)与修前逐字节同;内建别名 `ListPeers` 与经 HTTP 请求的三端不受影响(请求体没有声明调用方工具的口)。
141
+ - **durable 停驻「已决断身份」的候选:停驻自带的调用身份在手时一律以它为准,缺席才退回族表最近一只**(CC-242;接入文档 **§119 AL-3**):同一病形的第二处 —— 判「重放的 park 不是失败」所用的候选恒取「最近一只族内拼写起跑的调用」,调用方工具 `Bash` 声明别名 `shell_exec` 时,决断成功后重放同一张 park 而取件读面失败会丢掉恢复(终局停在 `paused`、真结果没上屏),前面另有已决断的族内调用时会借它的记号把从未决断的 park 判成「已解决」。现在两种拼写读数同;身份缺席时与修前逐字节同;身份在手而族表最近一只是之后起跑的别的调用(同拼写)时,修前把已决的重放当成新停驻(丢恢复),现在以身份为准(G-AL3 的 O9e 格)。
142
+
143
+ ### Gates
144
+ - **integration-doc-freshness**(+2 格):`pending` 行在场时(= 正在发的这一版)本版 CHANGELOG 段与接入文档 §NN 段**零占位符**(0.92.0 §118 的导语 / 118y 三条领句 / 包侧缺口首项带占位发出 —— 发车帖写全、文档没填,此前三门全绿;接入文档 119a′「§118 勘误(二)」)。
145
+
146
+ - **approval-frame-keys**(+6 格,265):三键的领先登记三行(开发依赖 sdk 12.0.1 的锚无、sdk 17.0.0 探针锚已含;退出条件 = 开发依赖换到含三键的那一版);`allowRuleShadowed` 的「领先服务端发布版 / 领先探针 sdk」两格按退出条件撤(现役夹具 7.118.0 已带、探针 17.0.0 已含);`persistedRuleShadowed` 登退役保读行(7.117.0 起服务端不发,≤7.116.x 仍发;两代读口不变);现役探针卡键格改按归一换名表对名并加 G-AC9b(卡入参上只有归一名 `allowRuleShadow`、没有 wire 原名)。
147
+ - **abort-cause-projection** AC6i 的 sdk 见证改走 TypeScript checker 解型:sdk 17.0.0 起 `AbortCause` 写成 `(typeof ABORT_CAUSES)[number]`(运行期常量进 sdk,型从常量派生),只读语法节点的尺子对它读不出成员;解型后 16.x 字面联合与 17.0.0 索引访问型解出同一只三词联合,成员不是字符串字面仍红。
148
+ - **automatic-answer-verdict** T 段(终端参照树真判定链)对本树 dist 捆不起来时不再整门崩溃:缺的导出名**全部**在 `scripts/export-liveness.json` 本版起的 `removed` 账里 ⇒ T-GEN 格绿、本段如实报 SKIPPED-SECTION(退出条件 = 参照树换到不再导入这些名的终端版本);有一个名不在账 ⇒ T-GEN 红(本树公面真少了名)。本版参照树终端 1.0.143 仍导入三个已删名(`isRuleStoreUnreadableKind` / `ruleStoreUnreadableDetail` / `versionSupportsPlanReviewModeAfter`;§119y 已列)。
149
+ - **hitl-gate-honesty** F19-T 的求值沙箱绑定改由终端那份文件从本包导入的值名(AST 读 import 块)逐名派生,+F19-T0b(终端导入的每个值名本树 dist 都有;缺名红);终端 1.0.143 起改调包根 `isAlreadyResolvedFailure`,固定绑定表对它读成未定义名。
150
+ - **allow-rule-shadow-projection**(83 → 107 格)两段按代际不按位:F1 真形段用下一代位的夹具,没有下一代位而现役自己 ≥ 7.117.0 时用现役(此前只认下一代位,换代后整段空跑);F5 旧键形改遍历现役 + 老一代列表、在引擎仍铸 `shadowedRule` 的每一份上跑(此前只认现役,现役换到 7.118.0 后整段空跑),一份都不铸才如实报没对象。
151
+ - **engine-notice-catalog** G-UI2 的服务端 crashed 臂按代际取铸点:≤ 7.117.0 `buildCrashedSteerNotice`(只有 steer 一族),7.118.0 起 `buildCrashedUndrainedNotice({ family, … })`;+G-UI2c / G-UI2d(7.118.0 首入的 follow-up crashed 形 `task.user_followup_undrained` + `cause: crashed` ⇒ `{ kind:'followUp', count, cause:'crashed', taskId, sessionId }`,受众 user)。
152
+ - **gate-vocabulary** M8(出包面零引擎包引用)本版实红一次并修:活卡帧型位 `boundGrants` 原直接用引擎型,出包的 `.d.ts` 带了 `@sema-agent/core` 的 import;改本地结构型 `BoundSkillGrantsWire` + 编译期三向钉(两向可赋值 + 键集相等;改一个字段名 build 即红)。
153
+ - **负控** `layering-shadow-export-class-predicate` 改瞄:豁免表里已无 divergent-copy 行,E6 对差分格空转,摘谓词不再经登记行响;改摘 user-attachment-envelope 格绿语料登记的 `oversized-literal-sniff` 谓词、靠门的 V 段尺子自证响(与登记行在不在无关)。
154
+ - 夹具换代(现役 7.118.0 / 老一代 7.117.0 … 7.106.0 / 引擎 7.44.0)翻出的按代际钉格,统一改按代际不按位:**permissions-declaration** MS2 allow 桶 7.117.0 起不编策略、整份原样经 `applyTaskSettings` 落 `TaskSpec.allowedTools`(受理口照收;deny / ask 仍按策略判),allow 受理口那一代(ALLOW_RECEIVER)改挑服务端 ≥7.115.0 且引擎 < 7.42.0 的最新一份;**permission-rule-issue-codes** L3 上一代见证改挑引擎 < 7.42.0(三退役码仍铸)的最新一份;**mandated-card-values** N 段两向(7.118.0 起普通名单卡引擎盖 `ask_rule`、裁决折叠不许规则清 ⇒ 服务端拒记住、帧 / 行带 `rememberRefused`、本包卡入参带它且决断回执 false ⇒ 告知恰一次;≤7.117.0 照旧);**steer-tier** G-ST5c 老一代逐代(≥7.116.0 ⇒ engine)。
155
+ - **session-policy-deliverable**(CC-437):+K12(实装引擎 `judgeRuleToolName` 空名册说「不是现名」的名字本包一个都不送;池含四形空对端段、拼写不一致对端、退役名、无前缀名)· Y1 三版对拍登记第二类分歧(空对端段 ⇒ not_a_tool_name)· 向量表 ①n / +8 / N6 / R20 四行改口为登记分歧「更严」、YV11 / K11 改口 · E1 向量门槛 15 → 11 · G-SP2a 多扣三类并集。红先:E2 对服务端 7.118.0 夹具实红 8 批;初版把它归到拒启名那一臂,被 session-policy-refused-removal E1(真 Runner)证伪 ⇒ 改归对端段那一步。
156
+ - **server-7115-fixture**(288 格)逐代表 +「≥7.117.0」档(能力位 `allowLayer:true`);C2d 两向(≥7.117.0 内容形 allow 在装配口照收、不 422);C4 按 7.118.0 读法纪元入参问拒绝铸点。**server-7116-fixture**(332 格)C8 受理判官 7.118.0 起换 `unmatchableRuleNameOf`(两代判词折成老三词比);C3 事实形两代(7.118.0 读 `grantBinding` + `classes`)。
157
+ - 登记物:单例清单 +1(`_boundGrantsPin`,673 → 674;编译期三向钉载体,运行期无读者)。对拍基线 tgz 抬到 0.92.0 后两处门改口:**client-core-pure** G-TO12a 四只新键(0.92.0 首入)的「仅多新键」按基线版本分向(基线 ≥0.92.0 ⇒ 0);**display-untrusted-baseline-diff** 基线解包改抽整份 `dist`(0.92.0 起 `displayUntrusted.js` 引 `generated/` 表,只抽一件 ERR_MODULE_NOT_FOUND)。
158
+ - 对拍基线抬 0.92.0 后另两处门改口:**terminal-facts-projection** G13b 两键(`projectKey` / `shadowed`)0.92.0 首入,基线 ≥0.92.0 时改比「本版读数与基线逐字节同(含两键)」;**workflow-decide-refusal** P3 对 0.92.0 的 fs 腿结局对拍把本版登记改口(WD2:「this client cannot tell which」两形插入段)当唯一允许差异。
159
+ - **automatic-answer-verdict** T 段(终端参照树真判定链)对终端 1.0.144 的两处代际适配:① 卡口 1.0.144 起成对搬 `askClass` + `classes`(此前不搬;无类直接出卡)⇒ 门按参照树 tag 版本决定搬不搬,T2 在 ≥1.0.144 改为「两链姿态放行相等且 > 0」(此前「新链归零」是终端未搬类时的过渡形);② 终端姿态车道只在「有审批口的车道 × 规则没送引擎」生效(读 leader 审批队列是否登记)⇒ 捆包后登记一只空队列模拟 TUI 车道,否则两代都答「引擎自己跑」、正控假红。参照树换 1.0.144 后本段首次真跑:3210 卡 × 5 模式 × 两规则态 × 三工具,两链自动放行各 1248、放宽 0。
160
+ - **layering-shadow-export** 对终端参照树 1.0.144:影子豁免表再删三条死同义行(`cancelledTerminalOf` / `abortCauseSentence` / `withAbortCauseClause` —— 终端 1.0.144 整删 `runAbortCause.ts`,取消成因句改读本包 CC-295);`runStream` 宿主扩展行的复核记录按 1.0.144 重核(终端删去出口侧取消成因从句那一位,外加段三位 → 两位,核心投影仍调本包 `runStream`,判词不变)。
161
+ - **pure** G-IMG6 按夹具引擎版本分两向:< 7.42.0 零铸点(缺席语义)、≥ 7.42.0 恰铸在 `core/runner/inline-image.js`(G-IMG6b);现役 + 老一代夹具列表逐份判,列表里没有老一代时明说那一半没跑。
162
+ - 生成表随开发依赖 7.44.0 重生成后三处门期望同步:`engine-notice-catalog` G-UI3 / G-UI3b 对 follow-up 的 `cause` 按装着的引擎版本分两代(≥ 7.44.0 带 `leg_end`);`automatic-answer-verdict` M4 的表外例名由 `classifier_no_ruling`(7.44.0 起已入表)换成任何版本都不会出现的串并先断言它不在表里;单例清单改名一行。
163
+ - **terminal-cause-projection**(481 → 584 格):+BD 组(CC-364 ①,G-BD1 … G-BD9):`blocked.detail` 三臂与表外词原样带回(含大小写 / 首尾空白 / 原型键)、缺席与坏形整只缺席不补键、`hookReason` 非空串才带且逐字、只读自有位(含全局原型植入负控)、扁平形与别的因由臂不读;回归三格(无 `detail` 的 `blocked` 读数逐字节同 0.92.0 金样 / 结果帧带不带 `detail` 逐字节同 / 370 只输入上与上一发布产物逐字节同,带 `detail` 的读数 ≥ 6 只防空转);两代夹具真铸点(服务端 ≥ 7.113.0:引擎四种收场 → 服务端脱敏 → 本包读器;老一代同构造无 `detail`)+ 各代事实钉(引擎铸点 ⇔ 引擎 ≥ 7.39.0,服务端过境整形 ⇔ 服务端 ≥ 7.113.0)。
164
+ - **session-policy-wire**(287 → 293 格):+RN2e / RN4i / RN4j(第十六句:`not_started` 臂一句非空话、十六句两两互异、说没开始 / 没发过任何东西 / 没有可读的记录 / 发了第一条消息再看、不说空 / 没有规则 / 没有限制 / 不知道、只认自有数据位的 `kind`、近邻拼写落通用话)、RN6 声明面入参型加这一臂、+RN7 / RN7b(与上一发布产物对拍:既有十五句 + 通用话在 54 只入参上逐字节同,变的只有 `not_started` 一格)。
165
+ - **upstream-tables**(604 → 621 格):+G14 / N14(第十一批:引擎包根 `PROMPT_BLOCK_CAUSES` 生成为冻结字面元组、根入口引用相等 + 初始化式 AST 见证、逐项逐序同引擎、对引擎自己的 `isPromptBlockCause` 同判、读器函数里成因词零串字面量;上游加员 ⇒ 生成物随之变,坏形 / 缺名 ⇒ 拒生成并点名)。
166
+ - 登记物:`scripts/public-export-baseline.json` 1483 → 1484(`PROMPT_BLOCK_CAUSES`);单例清单 679 → 680(`CORE_PROMPT_BLOCK_CAUSES`);接入文档 §0a / §2 / §2b 的数字同步(域 1 名数 79 → 80、`SCREAMING_SNAKE` 子计数 383 → 384)。
167
+ - 新门 `scripts/run-transport-failure-scene-test.mjs`(84 格,G-CS):TS0 公面 · TS1 各形 × 判词(直抛 / 一层 / 套接字被断 / 四层 / 五层 / 循环 / 非 Error 对象 / 非对象入参 / 取值器抛 / 汇总错误 / `status` / 包内标记 / 超时 / 坏形位)· TS2 判词与 0.92.0 逐例同(门内嵌 0.92.0 的判词,三个生成语料 + 读属性抛 + 读数随读次数变的取值器)· TS3 与终端那份读法逐例比(D5 / CY / UR / TK 四类分歧,类外 0 例;`SEMA_CLI_ROOT` 在场时核那份源码仍与内嵌抄本逐字节同)· TS4 只取机读位(含「留下的三个串原样留下」的契约边界)· TS5 单一走读口(源码 AST)· TS6 真 undici 抛出物(本机回环)。
168
+ - **交出后台的 Bash 登记**(`run-client-core-pure-test.mjs` ⑦b 段,格 G-BG0 … G-BG5d,CC-331):判读口正负样本(`run_in_background` 入参五形、超时与排队消息两种自动转后台、缺席语义、十九枚负样本);接线(`bgshell_register` 先于卡本体、卡本体照旧、wire 无正文仍铸);双行防线(同卡互斥 / 两口句柄不一致取结构化位 / 不跨卡压制 —— 同 `taskId` 两张卡各一条、两条流各一条);引擎自述登记失败时两臂都让位(判读口与接线两层);与上一发布产物逐位对拍(不带 detached 的 18 形各自单流与合流一条逐位同,含同 `taskId` 的两张回执卡;带 detached 的三形只多一条 `bgshell_register`、两种矛盾帧少一条;基线 ≥ 0.93.0 时带 detached 的半段自行让位)。登记物:typeshape 棘轮 unknown 出境 490 → 493(+3 入参位)、根公面 1483 → 1484。
169
+ - **parked-resume-startup**(89 → 287 格):+U8 组(CC-244,G-SC1 … G-SC7):读序(具名位优先 / 兜底 / 具名位无效不挡兜底)、缺席与无效形整键不在场且读数逐字节同无词、不读标准 `err.cause`、只认自有数据位(原型链 / 访问器 / 全局原型植入)、值形原样、各格独立受保护、词不改判(词 × 方向 15 格)、决断出口失败文字不带词、各代 sdk 真字节事实钉(见证集 8 份:AST 读 d.ts 声明 + 真 `toApiError` 读数打实得值)、无有效词的 14000 只输入的读数与门内嵌的 0.92.0 读口逐字节同、措辞比对 0.92.0 发布产物的两句冻结全串、读位单源(AST 字面量扫)、前提钉(夹具里每一份服务端 / 引擎发布包的本码铸点今天不带成因词:服务端 10 份 + 引擎 10 份,键扫描不吞展开 / 计算键;哪天变红 = 上游开始铸词,回来重看 KL-177)。包内助手 `src/ownKey.ts` 多一只 `readOwnDataNonEmptyString`(自有数据位、取值器不执行;不上公面)。
170
+ - 新门 `run-tick-model-and-config-drift-test.mjs`(244 格):适配器臂 / 内联台账 / 读器 / 判决 / 对壳判决源码逐输入对拍 / 服务端夹具每一代的真 `/health` 路由 × 真配置落地账 / 与上一发布产物逐字节对拍 / 型面编译钉。
171
+ - 棘轮:`typeshape.unknownExport` 490 → 491(读器入参 `unknown`)、`portability.index` 262 → 263(新文件 `src/engineConfigDrift.ts`);公面 1483 → 1485;退役登记 +RL-71(五键结构读,sdk `EngineHealth` 具名声明后改按具名位读)。
172
+ - **support-floor-projection**(54 → 89 格):+CT 组(CC-355,G-CT1 … G-CT5):CT0 公面(`coreVersionTier` 根入口运行期导出、d.ts 导出形、与 supportFloor 模块是同一引用、三态型只有 `EngineVersionTier` 一个名)· CT1 金样(`('7.38.3', '1.288.0')` ⇒ engine / `('7.38.3-rc.1')` ⇒ unknown / 等于下限 engine / 下方邻居与老一代版本 legacy / 坏形十三种 + 非串 + 空串 unknown)· CT2 门槛(只能抬不能降、坏形 `floor` 的 `TypeError` 点名自己且不回显值、先于版本判定、`engineVersionTier` 的错误文本与 0.92.0 逐字同、敌意入参不抛)· CT3 与 `engineVersionTier` 对拍(同池「读不懂」逐格同答 / 同抬高门槛逐格同答 / 独立判官各按自己下限逐格对拍 / 夹在两条下限之间的版本两口答案相反)· CT4 AST 钉(读版本串与比大小的函数恰一只、两口都调它、两口自己零正则零大小比较零直读、两口各只读 `SUPPORT_FLOOR` 的一项;另写第二套比较 ⇒ 行为格全绿也红)。
173
+ - 棘轮:`typeshape.unknownExport` 495 → 496(`coreVersionTier(version: unknown, floor?)`,与 `engineVersionTier` 同形同由);公面 1488 → 1489(+`coreVersionTier`);接入文档 §0a / §2 / §2b 的数字同步(域 16 名数 170 → 171)。
174
+ - 新门 `scripts/run-multicause-wording-test.mjs`(257 格,G-WD / G-WD2):W1–W2 版本归因两句(整键缺席与在场形坏在投影层同给 `undefined` 的证明 + 句子点明两因、不含版本号)· W3 丢帧判词经真 `runStream` 各跑出各的一句(陌生帧型 / 必填位坏;缺省句句首逐字不变)· W4 能力位读口一族十七只(清空后、「先收一份再收一份读不懂的」之后、「先收一份读得懂的再失效能力缓存」之后三种读数逐字同 ⇒ 句子逐字同,句子点明三因、句尾承认分不出)· W5 `invalid.cap_exceeded`(装着的引擎规则编译器四种触发同铸一个码,句头承认单看码分不出、引擎散文原样跟后)· W6 会话规则记录「不存在或是别人的」四句(经真读 / 收紧写 / 撤销读 / 撤销写跑到)· W7「读不干净」三句(三种读健康两两互异、句首句尾逐字同、装配口仍同走 `settings_read_not_clean`)· W8–W9 引擎只报一格布尔的两因两句 · C 同形存量反钉三格(TypeScript AST 扫源码全部字符串字面量)· 红格先列全再退。第二批(CC-423 / CC-422,G-WD2.1 … G-WD2.18,+135 格):W10–W26 十七节,每处先证明几种成因在真入口上折成同一个读数(引擎散文不同 / 入参形不同而读数逐字同)再断言句尾承认分不出,分得出的各成因各一格;节内抛错 = 判别器自己坏了(退出码 9),不算产品红;C4 / C5 同形存量反钉(凡含登记片段的字面量都带承认、出包面零「把键缺席读成引擎版本」)。
175
+ - 既有门字面断言同步(格数不变):`posture-knob-projection` D4 与 `read-face-posture-projection` D3(不再断言「点名版本地板」,改断言不含版本号 ∧ 承认分不出)· `permissions-declaration` C14 / C15 / C18(「读不干净」由三种读健康同一句改为三句;C15 的反向断言放过 `cannot tell which`;C18 按句首认「读不干净」句)· `session-policy-wire` RN7(与上一发布产物对拍:唯一允许的差异是「会话找不到」那一句在原句里插入了承认分不出的括注,去掉括注须逐字同)。第二批同步:`gate-vocabulary` B6a(`ancestor_marked` 逐字锚加句尾)· `resume-refusal-copy` ⑨-6(不传停驻种类的出路句)· `parked-resume-startup` U8m(0.92.0 冻结全串仍是对拍底:`resume_rejected` = 冻结串 + 恰一处句尾,`undetermined` 一字不动)· `peer-lane-rules-write-capability` PL4d(`not_reported` 句不再断言版本信号;PL3c 的处置断言不变)· `client-core-pure` B7 ruleOffers⑭ 四格(四条丢键路径各按各的一句断言,正控 / 时序负控改按句首子串 `client-side check`)· `server-7116-fixture` U6 / U6b / C10b(两个持有者死亡码各一句:U6 由「前两码同一句」改为「三码三句、两个持有者死亡句的出路半句逐字同」,C10b 按码各断言各的词)。
176
+ - 登记物:`scripts/gates-manifest.json` 191 → 192 条;README 门表 191 → 192 行、`docs/GATE-NEGATIVE-CONTROLS.md` 行为套 148 → 149 行(派生面,生成器重写);公面、单例、类型形、可移植棘轮不变(无新增导出、无新增源文件)。
177
+ - **permission-denial-projection**(383 → 439 格):+O 组(CC-242,G-AL1 / G-AL2 / G-AL3):引擎 7.40.1 / 7.42.1 / 7.33.8 三代真 Runner 按别名与按正名发起的对读 —— 调用方别名工具 + 真内建 `ListPeers` → `ListAgents`;引擎三类来源上的名字、卡与转录按 `toolCallId` 配对、两个名字都不在名字表里的调用面上两条路管线读数换名后逐字节同、三格按名字表分流的读数(拒绝句改写看拼写 / durable 停驻认不认看门本体名 / 拒绝清单账本行取正名流内补行取拼写)+ 结果体形看拼写;O8 连坐位、O9 已决断身份(红先:修前 O8b / O9b 红,修后绿)。变异 15 枚各有一格对应变红。
178
+ - **websearch-verdict**(62 → 89 格;`SEMA_WEBSEARCH_ORACLE_ROOT` / 夹具里有 ≥ 7.118.0 服务端发布包时 92 格):+H 组(CC-428,G-WK1 … G-WK9):H1 金样(合法 key 含内部空格 / HT / U+0080..U+00FF / 4096 长三个 provider 原样采纳;首尾空白含 CR / LF 照收、值原样;首部 CR / LF 对 tavily 拒、对 brave / searxng 收;中段换行 / CRLF / NUL / 其余控制符 / DEL / 超出 U+00FF / 表情 / 孤立代理 / 首尾 NUL 三个 provider 都 `malformed` 且原因句逐字;空白串按未设、先于头值判)· H2 判序与非串 · H3 用户面句子逐字且不回显(settings / env 两源 × 提交 / 检查两场景)· H4 环境变量车道 + 两车道合成 + 凭据注入回调(坏形拒、尾随换行收、回调回空白 / 抛错照判段里的 key、env 坏不回落 settings)· H5 包内回落面不报 `WebSearch` · H6 与 Node 头值流水线逐例对拍(U+0000..U+017F 全码位 × 七种位置形 + 边界码位 / 孤立代理 / 表情 × 三个 provider 共 8400 例,外加定种子随机串 3 万条 × 三个 provider;自证:一只只拦 CR / LF / NUL 的朴素判官在这批语料上有分歧)· H7 本机回环真 `fetch`(U+0000..U+00FF 全码位 + 边界样本 × 首 / 中 / 尾 × brave / tavily 两种发法:包采纳的每一把真发得出去、对端收到的是归一化后的值,包拒的每一把 `fetch` 都抛;采纳 1350 / 拒 216)· H8 与上一发布产物对拍(合法值 828 例读数逐字节同 —— 判官 × 六种回调 × 环境变量判决 × 两车道合成 × 两种用户面句子;坏形 63 例是唯一变化;正控:基线对坏形 key 照收)· H9 400 只按码读(四种句子读数同码、不被 hooks matcher 读口误吞;包源码 263 个文件的语法树扫描:带这句话的字面量只有铸句一处、串匹配调用 0 处,扫描器对植入的四种形态各会响)· H10 服务端判官对拍(服务端 ≥ 7.118.0 发布包;夹具缺席 ⇒ `SKIPPED-SECTION`;判官级 —— 不起服务端进程、不发 HTTP、不测部署拒启,那一半是黑盒验收格 G-WK9):81 个向量逐项同判 + 原因句逐字同、8535 个 key 形与服务端判官同判、其 `isHttpHeaderValue` 与 Node 尺子同答 —— 本次以服务端该版源码里的判官转译后对拍代位,零分歧。A′ 差分随服务端版本分两代:预言机 < 7.118.0 时头值族登为已知分歧(逐条点名、只许这一形)、≥ 7.118.0 零分歧。变异 8 枚各有格对应变红。登记物:`scripts/gates-manifest.json` 与 README 门表的这一行文字同步,条数、公面、单例、类型形、可移植棘轮不变(无新增导出、无新增源文件)。
179
+ - 新门 `scripts/run-workflow-decide-refusal-test.mjs`(177 格,G-WF):S0 公面 · W1 闭集与常量 · W2 forked 读数(原样 / 拷贝冻结 / `extra` 兜底 / 十形坏体只丢 `runIds` / 取值器抛、已撤销与校验中途才撤销的代理 / 句柄各持各的)· W3 unreadable 读数(含 `runId` / `errorCode` 取值器抛)· W4 一句话(四句互异 / 零机器词 / 不承诺续跑后就能决 / 扫词表零命中)· W5 码优先判定与耐久审批卡腿端到端(真 sdk 映射错误 × 今天的句子与换句形)· W6 各代 sdk 见证(8 份)真映射 · W7 复用既有臂读数不变 · F1 服务端夹具逐代(7.106.0 … 7.117.0 十代:今天没有 forked、unreadable 是旧形)· F2 7.118.0 真铸点(夹具到货前打 `SKIPPED-SECTION`)· P 与上一发布产物对拍(基线 ≥ 0.92.0:5280 只不含两新码的输入 × 六只读口 / 判定 + 12 种真 sdk 映射错误的失败结局逐字节同)· Y 型面编译钉。
180
+ - `decide-receipt` 门 E 组按四员改(格数不变;E0 对 `decide.workflow_park_forked` 登记「sdk 还没声明」的有期豁免 —— 开发依赖 sdk 的声明一旦提到它这格红,逐员钉随之恢复)。
181
+ - 登记物:`scripts/gates-manifest.json` +1 条;README 门表 +1 行、`docs/GATE-NEGATIVE-CONTROLS.md` 行为套 +1 行(派生面,生成器重写);公面 1489 → 1491(+`DECIDE_WORKFLOW_PARKS_UNREADABLE` / `DECIDE_WORKFLOW_PARK_FORKED`);接入文档 §0a / §2 / §2b 的数字同步(域 3 名数 243 → 245、`SCREAMING_SNAKE` 子计数 384 → 386);单例清单、类型形棘轮、可移植棘轮不变(无新增源文件)。
182
+ - **mcp-reconnect**(55 → 137 格;S6 的格数随夹具代数变,此数按现役夹具矩阵〔十代服务端〕计):+S5 组(CC-429,G-MU1 … G-MU5):臂可达(抛出物 / 注入口 resolve 的 503 体两形同判)· 只按码读(同码 × 八种状态全是 `unsettled`;503 无码 / 错型码 / 十种近邻码 ⇒ `failed`)· 臂体恰 `kind` / `errorCode` / `error?` 且无 `outcome`、`error` 缺席 / 空串 / 非串 ⇒ 无键、远端文本消毒封长 · 互斥(状态 8 × 码 14 共 112 例每例恰落闭集一档,`unsettled` ⇔ 码字面,既有五条分诊不变;带 `outcome` 的 resolve 体不被同体的码抢读、也不调它身上无关的 `errorCode` 取值器)· 坏形不抛(Proxy / 抛 getter 的拒因与回体、`errorCode` 取值器抛 / `has` 陷阱抛、非对象 / 数组 / 错型码 / 冻结对象)· 真 sdk 错误映射器(S5h:开发依赖 sdk 12.0.1 与探针 sdk 16.2.0)铸的 503 + 码 ⇒ `unsettled`、无码 503 / 别的 `state.*` 码 ⇒ `failed`· 缺席照旧(旧服务端 200 三态 ⇒ `ok`、无码 503 ⇒ `failed`、`MCP_RECONNECT_OUTCOMES` 仍三词)· 用户面一句(单源、单行、含五个要点、不含 fail / refus / withdraw / NOT re-dialed / untouched / error、与交易文案及三态三句两两不同)。+S6 组(G-MU6 / G-MU7):各代服务端夹具事实钉 —— 7.106.0 … 7.117.0 十代夹具整个服务端 `dist` 零处出现这个码、这条路由的全部 `sendError` 站点(TypeScript AST)没有 503 也没有 `state.*` 码(尺子自证:读到 ≥100 个文件 / 对在场的码会响 / AST 读得到 409);≥7.118.0 真铸点格(恰一处 503 站点、恰四参、字符串字面量无 `Retry-After`、文案经读口 ⇒ `unsettled`)候夹具到货,今天打 `SKIPPED-SECTION`(不当绿;写死的是「缺席不红」,必跑档下也不红 —— 到货后须手工改成跟随必跑档);该格的判别力在服务端源码转译的合成件上核过(四种篡改各红,只在注释里写 `Retry-After` 仍绿)。+S7(G-MU2):对上一发布产物(`SEMA_DU_BASELINE_TGZ`)对拍 —— 无此码的抛出物 627 例 + resolve 体 20 形判决逐例同,带码的 33 例基线落 `failed`、本版落 `unsettled`(基线 ≥ 0.93.0 时同),能力位读口与三态三句措辞同。
183
+ - 登记物:`scripts/public-export-baseline.json` 1489 → 1490(`MCP_RECONNECT_UNSETTLED_NOTICE`);接入文档 §0a / §2 / §2b 的数字同步(域 15 名数 221 → 222、`SCREAMING_SNAKE` 子计数 384 → 385);`scripts/gates-manifest.json` 的 `mcp-reconnect` 条文案与 README 门表行、`docs/GATE-NEGATIVE-CONTROLS.md` 行为套行同步(派生面,生成器重写);其余棘轮不变(无新增源文件、无新增 `unknown` 出境)。
184
+ - **retirement-ledger**(34 → 53 格;在册 39 → 29 行、已退役 15 → 25 行):+G8「改窗须裁定号」(对 ≤ 当前版本的最高发布 tag 上那份账逐行比:在册行 retireBy 变了的,ruling 必须带裁定号且只在上一版文字之后追加;不在 git 仓 / 没有可比 tag 如实报没跑)+ G8b(已退役行 retiredIn 不超过「当前」= package.json 版本与 CHANGELOG 首段版本号取大);新增 H 段「已退役行的名字账」(CC-431 ①)—— `retired` 行可带 `names`(公面名)/ `keys`(成员 / 键 / 词)/ `arities`(导出函数名 → 形参个数),逐行判「名不在」:根入口(TypeScript 读的入口导出名 ∪ 运行期键)· 构建产物 `.js` / `.d.ts`(字符串字面量照算)· 门脚本代码位置(注释不算;`names` 才查,`keys` 在门里允许写成「锚有、本包刻意无」的对账登记)· 导出函数形参个数(型面全部调用签名的最大形参数与运行期 `Function.length` 取大:可选 / 默认 / rest / 重载形参都数得到);外加编译期两向钉(`keyof typeof root` 与退役名的交集为 `never`、已知在场名 ⊆ `keyof typeof root`,植一枚在场名当退役名必须红)。判官 `retiredNameLeaks` 有内存自证(S18 – S23:植入名漏在根入口 / 产物 / 门脚本代码位置 / 形参个数各自响,注释里提到不响;S23 型面形参尺子对可选 / rest / 重载数得出,而运行期 `length` 数不到默认值之后的形参)。红先:H 段加入后对 0.92.0 的实现判红(八行逐行红 + 编译期钉红),删除后全绿。另:补偿层 retireOn 行数格(G4)由 8 改 6,新格 G7 钉「T35 / T36 两行(RL-32 / RL-33)误登、只在已退役里、锚源码里零处、补偿表两处 retireOn 为 null」;到期复核批按各行条件改窗(0.94.0 / 0.95.0),已退役行 +2。
185
+ - **layering-shadow-export**(格数不变):影子豁免表删三行(`turnEndUsage` / `backendDeny` / `mintUserAttachmentEnvelope`)—— 终端 1.0.143 上这三处壳侧定义已删,门的「死行」格对它们判红,随之同批删行;其余十二行(识别 / 改名 / 宿主扩展,壳侧定义仍在)不动。
186
+ - 因公面名删除而改的既有门(格数前 → 后):**gate-vocabulary**(499 → 440:R 段〔`RULE_STORE_UNREADABLE_KINDS` 一族四名〕整段退出;B-msg 改钉 `askOriginDetail` 单参,老调用方多传的第二个实参一字不读)· **rule-offers-reader**(176 → 161:⑥ 段改钉单键读法,只带退役键 `ruleSuggestions` 的帧 / 行不出候选,原「旧键归一 / 两代取舍序」各格随删)· **file-history-capture-capability**(47 → 49:`on-always` 改钉落 `unknown` / 落「不认识的词」那一句;措辞五句互异)· **file-history-leg-notice**(184 → 165:真值表 72 → 54 格;与终端现形对拍差由 18 格变 20 格,多出的 2 格 = 退役 `not_offered` 的终端出句 ↔ 本包零句)· **plan-review-decide-verify**(81 → 80:⑧d 版本闸三态随 `versionSupportsPlanReviewModeAfter` 退出)· **plan-review-injected-wire**(129 不变:W3 各格改钉「三选卡与引擎版本证据无关」)· **inherit-env-wire**(101 不变:V 段改钉「读得懂 ⇒ 照发、读不出 ⇒ 不发 + `server_version_unknown`」)· **durable-card-display-keys**(171 不变:③ 改钉「行只带旧键 ⇒ 卡上没有只读候选」)· **client-core-pure**(4635 → 4603:`wireAuthTokenFor` 各格改调 `resolveWireAuth`、limits / detach 版本门各格退出或改钉事实;镜像成员数 36 → 34;C 段断言数下限 51 → 48,随 C-B1 三格退出)· **approval-frame-keys**(`RETIRED_NOT_MIRRORED` 增 `ruleSuggestions` / `ruleStoreUnreadable` 两行〔卡锚上也不在〕,「退役但仍读」整表与其循环删除,卡台账 `ruleSuggestions` 一行删除)· **hitl-gate-honesty**(帧候选换用现役键 `ruleOffers`)· **hooks-merged-disable-projection** / **engine-cap-reader-factory**(调用改单参 / 读器现役词换 `on-optional`;格数不变)· **engine-caps-ledger**(`version` 位的读点由 `goalStopHook.ts` 改登 `modelIdentityResolvability.ts`;格数不变)。
187
+ - **support-floor-projection**(89 → 90 格,CT 组并入后的读数):删 VT6(与 `inheritEnvServerSupport` 读法同源的对拍两格);新增 VP4a:全 `src` 里读版本串的函数恰一只(`src/supportFloor.ts` 的 `releaseTriple`;尺子自证植入六种读法都响、四种干净形不响)。
188
+ - 登记物:`scripts/public-export-baseline.json` 1492 → 1471(−21 名,`scripts/export-liveness.json` 的 `removed` 账新增 `0.93.0` 一版 21 名;export-liveness 门 G″ / G‴ 两段对 v0.92.0 读到 21 名消失且全在账);`export-liveness.json` 登记行 34 → 33(`buildGoalStopHookPrompt`);棘轮 `typeshape.unknownExport` 496 → 493(退役 `isRuleStoreUnreadableKind(v: unknown)`、`askOriginDetail` 的未用第二形参、`readRuleOfferSupply` 的第二形参)、`singleton.highRiskCeiling` 139 → 138(退役 `wireSessionStopHookCcSemantics` 锁存)、`exportLiveness.maxRows` 35 → 33(`engineLimitsSupportWarning` 与 `buildGoalStopHookPrompt` 两名退出公面,各自的登记行删除);单例清单 681 → 673 条(与源码逐名相等);`portability`、门清单(193 条)、README 门表行数不变(无新增 / 删除源文件)。
189
+ - 夹具换代(现役 server 7.119.0 / 老一代 7.118.0 … 7.106.0 / 引擎 7.45.0 / 探针 sdk 17.0.0,下一代见证 sdk 17.1.0)翻出的按代际钉格:**mandated-card-values** N 段改三代(≤7.117.x 普通名单卡可记住、帧 / 行不带 `rememberRefused`、零告知;7.118.x 拒记住、带位、告知恰一次;**≥7.119.0 恢复可记住**:服务端判据函数换成 `standingAnswerHome` 三态,名单的问记在服务端豁免店,帧 / 行不带位、零告知)—— 期望读夹具真函数(第四参 = 部署名单的问由夹具 `deploymentListAsks` 真算),代际只用来写断言文案并钉「这一代该是什么」,二者不一致即红(+N1b:≥7.119.0 有 `standingAnswerHome`、无 `standingAnswerMayRetire`、读数 `server_store`);**server-7116-fixture** C3 事实形按在场的判据函数问(`standingAnswerHome` 带 `deploymentListQuestion`),+两格(引擎盖 `ask_rule` 但不是名单的问 ⇒ 拒记住;名单的问 ⇒ 可记住),逐代表加「≥7.119.0」一档(只有 C3T 一格与「≥7.116.0」档不同:`present` → `home`,另记 C3L `rememberable`),T1 的格数随档;**server-7115-fixture** 7.119.0 的实读与「≥7.117.0」档逐格同,不加档;**approval-frame-keys** 7.119.0 的 `ToolApprovalFrame` 与 7.118.0 键集逐键同(36 键,无新键,镜像不动),读数带夹具版本;**workflow-decide-refusal** F2「7.118.0 真铸点」改为每一份 ≥7.118.0 的夹具都跑(此前挑最老的一份 ⇒ 7.119.0 到货后仍只跑 7.118.0),+自证「≥7.118.0 的夹具都进了循环」;**store-center-wiring-capability** S8b「降级词闭集 ≥ 2 词」改按代际(≥7.119.0 恰 `local_unwritable`、更老含 `db_unreachable` 与 `local_unwritable`,期望读夹具真闭集)+S8b1 / S8b2(读法保留的见证);**seat-contract-keys** 请求面意图表五词 → 六词;**engine-cap-reader-factory** 读器表 +1 行(25 只:在役 24 + 候上游 1);其余受夹具影响的门(abort-cause-projection / allow-rule-shadow-projection / client-core-pure / crash-converged-projection / engine-notice-catalog / permission-rule-issue-codes / permissions-declaration / steer-tier / terminal-cause-projection / automatic-answer-verdict 等)在 7.119.0 上按代际自适应、零改动即绿(读数如实,不是放宽)。
190
+ - **wire-refusal-copy**(+S4f 组):第四臂 `retired_key` —— 命中(`field` 顶层 / `extra` 袋 / 声明真假都认 / `unknownKeys` 形)· 负控(7.118.0 形同一句无 `field`、别的 `field` 值与形、别的状态与码、退役 `code` 键、取值器抛;`request.field_conflict` 带 `field` 仍归第二臂)· 第四句逐字与零机器码 · 两条决断口不去键重发;首发带旧键撞这一臂 ⇒ 换名恰重发一次(S4f-7 / S4f-7b 两次 POST、首发 `settledBy` 重发 `decidedBy`;+S4f-7c 换名那一发被收 ⇒ `decided` + `denyAttributionRenamed`;+S4f-7d 换名发撞直连门 ⇒ 去键落定、恰三发、体序 `settledBy` → `decidedBy` → 无键、结局只铸 `denyAttributionDropped`;+S4f-7e 第三发失败 ⇒ 分类按无键体)。
191
+ - **新门 permission-modes-capability**(73 格):读器三态 / 判据单源 / 按位归一两代 / 字段投影口不无条件发 / headless 两车道 / 六词词表(README Guards 行同批)。
192
+ - **新门 server-7119-fixture**:服务端 7.119.0 发布包夹具真路由对拍 + 逐代表(三档 ≥7.119.0 / 7.118.x / 7.106.0–7.117.x,每档每格存原始读数):R 退役键三口真路由 × 两份 sdk 映射(≥7.119.0 全部 `retired_key`、7.118.x 全部 `null`、去 `field` 即 `null`)· P caps 路由 `permissionModes` 六词 = 夹具引擎 `PERMISSION_MODES`、真受理口(`createAdmission().prepareSpec`)与 `?permissionMode=` 查询对 `dontAsk` 的两代结局、闭环(读数 → 归一 → 字段投影口 → 受理口)· D 降级成因词表两代 + `sessionBackend` 同型(AST)· N 新码 503 的真铸点(`gateScenarioRequest` → 真受理口序列化)与读口 · W sdk 见证(≥17.0.0 的每一份,读 d.ts)· Z council 输出键零读点钉(尺子带植入违例自证)。
193
+ - `run-hook-matcher-verdict-test` R3(≥7.115.0 真受理口拒体 × 本口 refused 逐位对拍)加与 O5 同律的有界复核:本口判拒而服务端单次没答拒体的格隔 500 ms 再问、最多两次,三次都不是拒体才判红;判据不变,复核次数与那一发的原始读数(status / code)写进标签(全门高负载下 7.119.0 F17 / F23 PostToolUse 单次读数偶抖,单跑恒拒)。
194
+ - 退役登记 +RL-73:`taskRequestWords.ts` 根型并词 `| 'dontAsk'` 是过渡臂(CC-451 ③),退役条件 = 开发依赖 sdk ≥ 17.1.0 的那一版(`run-retirement-ledger-test` 按已装 sdk 版本机读,到期即红)。
195
+ - 登记物:`scripts/public-export-baseline.json` 1471 → 1478(+7 名:`projectPermissionModesCapability` / `noteEngineCapsForPermissionModes` / `observedPermissionModes` / `forgetPermissionModesReading` / `permissionModeAdmitted` / `SCENARIO_ASSIGNMENT_UNKNOWN_ERROR_CODE` / `scenarioAssignmentUnknownFromError`),测试钩 69 → 70(`__resetPermissionModesReadingsForTests`);`scripts/gates-manifest.json` +2 条、README 门表 +2 行、`docs/GATE-NEGATIVE-CONTROLS.md` 行为套 +2 行(派生面,生成器重写);棘轮 `typeshape.unknownExport` 493 → 496、`portability.index` 263 → 264、`singleton.highRiskCeiling` 138 → 139(单例清单 +1:`permissionModesCapability.ts#reader`),`scripts/registry.json` 同批追三条 ledger;接入文档 §0a / §2 / §2b 的数字同步。
196
+ - **新门 approval-decided-by-capability**(200 格):读器三态 / 工厂四口 / 判据单源 / 决定函数四形 × 读数九形 × 两条腿(含直接对答)/ 单源 AST(尺子带植入违例自证)/ 去键重发两键律(两个直连门码 × 两种首发键 × 两条腿,重发也撞不再发、不重发的七形、失败分类按最后一发的事实)/ 供给链(`routeFrame` 与 `bridgeAskUserQuestionGates` 经 `parkResolver` 白名单拷贝)/ 桥白名单拷贝 / 公面声明(README Guards 行同批)。
197
+ - **server-7119-fixture** 新段 DB(266 → 536 格):三口真路由(活卡 respond〔真 `ToolApprovalCoordinator.respond`〕/ 耐久 ask 账 / `/decide`)× 逐代 × 两把键 —— 本包按位会发的键三口 200 且路由按 policy 落账,另一把键在位真代际 400 退役键、在位缺席代际 ask / decide 400 而**活卡口 200 却落成「人」**;caps 路由真铸位;本包两条决断腿喂真路由(读数按这一代真值供给 / 宿主没接读数 / 卡报 human / allow 卡);直连门两口的出处键 400 码随键换名,真 400 经 sdk 映射喂两腿做去键重发;G4 `sla_timeout` 三口比码;policy 配放行被拒。逐代表加 DB1T – DB4T 原始读数;W 段加 sdk 见证 ≥ 17.0.0 的位型 / 体型 / 闭集三格。
198
+ - **wire-refusal-copy**(+17 格):`decided_by_not_in_proof` 与 `settled_by_not_in_proof` 并列认 `not_in_proof`(含错状态 / 无状态 / 相近码负控)· `request.field_conflict` 在 `decidedBy` 形上认 `decision_conflict` · 位真一代两条腿 failed 结局带读数。**terminal-cause-projection**(+34 格):发送面行为契约 S1–S4 / S6 的第二代(位真 ⇒ `decidedBy`、读不出 ⇒ `settledBy`、零归因键各形)+ 产物零 `decidedBy: 'person' | 'human' | 'sla_timeout'`。**hitl-gate-honesty**(+1 格 F6-e12b):位真一代去键重发是同一次决断。**engine-cap-reader-factory**(25 → 26 只读器):`approvalDecidedBy` 一行。
199
+ - 退役登记 +RL-74:`HitlDecideDenyOutcome.decidedBy` / `RespondToolApprovalOpts.decidedBy` 的自铸字面是过渡(CC-403),退役条件 = 开发依赖 sdk ≥ 17.0.0 的那一版(`run-retirement-ledger-test` 按已装 sdk 版本机读,到期即红)。
200
+ - 登记物:`scripts/public-export-baseline.json` 1478 → 1484(+6 名,逐名见上),测试钩 70 → 71;`scripts/gates-manifest.json` +1 条、README 门表 +1 行、`docs/GATE-NEGATIVE-CONTROLS.md` 行为套 +1 行(派生面,生成器重写);棘轮 `typeshape.unknownExport` 496 → 498、`portability.index` 264 → 265、`singleton.highRiskCeiling` 139 → 140(单例清单 +1:`approvalDecidedByCapability.ts#reader`),`scripts/registry.json` 同批追三条 ledger;接入文档 §0a / §2 / §2b 的数字同步。
201
+ - **device-executor-management-capability**(46 → 66 格):红先 22 格(`deviceLaneOpen` 公面名 · 对象臂真字节三位逐位 · 7.87.3 真字节并进 `present`/`'absent'` · `not_reported` 只剩 `capability_absent` · `enabled` 非字面 `true` 删格六形 + 原型链上的 `true` · 三位各自缺席 / 坏形 / 正形 · 键集恰五位 · 每把键只读一次含取值器抛 · 两只判据含旧布尔形 `'unknown'` · 经 tee + 读口六形最终读数 · doctor 句车道三位有则带 / 缺则不带 / `wsPath` 转义封长);sdk 声明形钉扩到对象臂另四位(`enabled: true` 必填字面 · `protocolVersion` / `maxInflightPerDevice: number` · `wsPath: string`),带声明删 / 改可选 / 改型 / 行注释伪证四形负控。
202
+ - **engine-cap-reader-factory**(2184 格不变):`deviceExecutor.management` 行的 `presentValue` 带 `enabled: true` 与车道三位、`malformedValue` 取「对象但 `enabled: false`」(比裸串更能照出 `enabled` 判据被摘);F19 的多读器探测替身补 `enabled: true`。
203
+ - **server-7119-fixture**(+新段 DX,逐代表 +`DX1T` 三档同值):服务端 7.106.0 – 7.119.0 十二代的 caps 路由真铸 `deviceExecutor` —— 无 hub ⇒ `=== false`;有 hub ⇒ 自有 `enabled === true` 的对象;只有 hub ⇒ `'present-false'`;hub + store + enrollment + runStore + `remoteExec.maxInflightPerDevice=7` ⇒ `'present-true'` 且上限读成 7(不是缺省 4);真铸体改 `enabled: false` ⇒ 读成畸形。
204
+ - 登记物:`scripts/public-export-baseline.json` +1 名(`deviceLaneOpen`);`scripts/gates-manifest.json` 两条的 `guards` / `readme` 改写(无新增门),README 门表两行、`docs/GATE-NEGATIVE-CONTROLS.md` 派生面由生成器重写。
205
+
206
+ - **additive-key-passthrough**(152 → 160 格):+G-RS 组(`rate_limited` 读数全链:wire `status` 帧 → 内部臂 → chrome `retry_status`):帧上无判别键 / 带两种上游曾用的判别键各两词 ⇒ 内部臂与出站 error 上都没有判别位、`rateLimits === null`、`formatted` = 引擎句;第二层直喂带判别键的内部臂同判。红先:修前出站 error 带判别位。**client-core-pure** 的 `rate_limited` 格改成同一断言(五形:无键 / 两种键名 / 原型链)、S44 同改;**client-core-diff** DIVERGENCE-13 归一只留 `rateLimits` / `formatted` 两处。
207
+ - **approval-decided-by-capability**(209 → 238 格;含换名发撞直连门 ⇒ 去键第三发的 AB6s / AB6w / AB6x / AB6h″):+AB4q … AB4w(读数入口快照:活卡 / 耐久 × 卡回调里换位 / 反向 / 原地改读数 / 取件期间换位,断言送出的体键与结局,不数读取次数)· +AB6r … AB6v / AB6h′(换名恰重发一次:两次发、重发体只换键名、`denyAttributionRenamed` 在场且 `denyAttributionDropped` 缺席;换名那一发也失败不发第三次、按最后一发归类;allow 族 / 人拒 / 首发已是 `decidedBy` / 同码无 `field` / 调用方中止都不换名)· AB6e 改口(首发带的是 `decidedBy` ⇒ 无旧键可换)。红先:修前 AB4q 首发体是 `settledBy`、结局 `unresolved`。
208
+ - **server-7119-fixture**:DB5b / DB6b 按 `field` 分两档 —— ≥ 7.119.0 宿主没接读数 ⇒ 首发 `settledBy` 撞真路由退役键拒体 ⇒ 换 `decidedBy` 重发 ⇒ 真路由 200、按 policy 落账、`denyAttributionRenamed`;7.118.0 的拒体无 `field` ⇒ 恰一发、不换名。红先:修前 7.119.0 档恰一发、`failed`。
209
+ - **permission-modes-capability**(93 → 111 格):+PM3m(访问器给的 `kind` / `modes` / 表项 ⇒ 不认且访问器零执行;判别力自证;归一口与字段口跟着同一只判据)· PM5a / PM5b 拆成「没开 `stampDefault`」两格 + PM5f / PM5f′ / PM5g(`dontAsk` × `stampDefault` × 读数不认五形 ⇒ `default`;认 ⇒ `dontAsk`;别的词在 `stampDefault` 下逐词不变)· PM6j / PM6k 改用描述符陷阱计数(访问器不再执行)· +PM6l(env 车道降档警示五种读数五句,没交读数与还没读到能力两种不说「引擎不收」)。红先:PM3m、PM5f、PM6l 三处各自先红。
210
+ - **websearch-verdict**(92 → 98 格):H4d 改口(注入 key 坏形 ⇒ `source: 'host'`)+H4g … H4l(host 源两场景句逐字、不提 settings / 不叫人删段、不回显 key;回调没给 / 回调抛 ⇒ 仍 settings 源;段里别的字段坏仍记 settings)。红先:修前 `source` 是 `settings`。
211
+ - **multicause-wording** C5 的正则补「only newer engines advertise / say …」一族 + 尺子自证格(植入旧措辞命中、改口后的句子不命中);红先:修前出包面 13 句命中。
212
+ - **session-policy-deliverable**:+PS6b / PS6c / PS6d —— 「对端段为空」的判法只在共享叶 `src/protocolSegment.ts`(可送判定里零处 `.split('__')[0]`、共享叶里恰一处;AST)、共享叶对四形空对端段不要端口也答 `empty`、对端段非空的不答 `empty`;+PS6e / PS6e′ —— 四形经请求体装配口的最终结局:早已(0.92.0 同形)按引擎文法扣下 `kept[].reason = 'incomplete_protocol_name'`、`permissions` 缺席、不进 `unreachable[]`,正常名 `mcp__srv__tool` 照送;装配口投出不变(修前此处写「与 `ok` 同处置」是错的,按最终消费结果改口)。红先:修前可送判定里内联一处。
213
+ - 登记物:退役登记 +RL-75 / RL-76 / RL-77(三处零读者公面位,`package-version`,retireBy 0.94.0)。
214
+
215
+ ### Known limits(本版新增)
216
+ - **KL-580**:成因链读与判只到第 4 层(CC-363):`transportFailureScene` 与「可证没送出」判词都只读自身起四层,第五层起既不读也不判(现场 `end: 'depth_cap'`,`provablyNotSent` 恒 `false`);终端自写的留证读五层。已核的真实抛出物成因链是 2–3 层,抬上限 = 放宽「可证没送出」,须先有真实形状的证据。
217
+ - **KL-581**:现场里套接字计数(`bytesWritten` / `bytesRead`)是**这条连接**的累计读数,不是这一次请求的:被对端断开的连接上之前已有请求时,计数含前面几发的字节。所以计数证不了这一发写出去过、也证不了没写 —— 判词不读计数,`UND_ERR_SOCKET` / `ECONNRESET` 一律「不可证没送出」,现场里列计数只是原样留证(CC-363)。
218
+ - **KL-582**:引擎跑的 `UserPromptSubmit` hook 注入的上下文进了发给模型的那条消息,端上没有单独一行(承接已删行 KL-371 的后半;前半「被拦下的主提交没有机读因由」本版随 `blocked.detail` 收口)。
219
+ - **KL-583**:`sessionPolicyReadNotice` 的 `{ kind: 'not_started' }` 臂由宿主按「自己还没发过消息」给;宿主以为没开始而引擎上其实已有这一会话时这一句说错话,本包不替宿主判。
220
+ - **KL-588**:`coreVersionTier` 的输入只有宿主从本机引擎装机读到的 core 包版本(CC-355):远端 / 附着的引擎端手里没有这一读数、wire 上也没有(KL-407),传 `undefined` ⇒ `unknown`;低于声明下限(`SUPPORT_FLOOR.core`)的 core 版本一律 `legacy`,与那一装机是否真带某项功能无关。KL-407 同步订正「没有输入」一句的射程。
221
+ - **KL-593**:终端 1.0.140 的提交请求没有 `tools[]`,§112c 真机格 G-T3 / G-T4 / G-TD2 在终端上本轮没造出刺激(读数只限终端 1.0.140 × 服务端 7.111.0 一轮,其余三端没读,换驱动没试);G-T3 / G-TD2 由包层格证读口与句子,G-T4 的名字分层是上游字节、本包原样透传、没有包层格,真机一半待一个会发 `tools[]` 的驱动(CC-301)。
222
+ - **KL-594**:终端的 `dontAsk` 三种来源交给引擎的 `permissionMode` 都是 `default`(包内归一表的落点;已读的服务端 7.108.0 – 7.117.0 请求面显式排除 `dontAsk`),门记录 `deniedBy` 是 `ask_resolution` 不是 `mode`,§112c 真机格 G-T5 与 G-M3 的 `dontAsk` 一半在终端上本轮没造出刺激(同上射程);待服务端请求面受理 `dontAsk`(CC-301)。
223
+ - **KL-595**:终端 `-p` 默认档下子代 Bash 先被终端拒、`delegation.ask_unresolvable` 通告 0 条(G-U6),且终端发布字节里 `createBackgroundView` 零调用点(G-W2);两格在终端上本轮没造出刺激(同上射程),待任一驱动起出无审批席的 run、或调用该口(CC-301)。
224
+ - **KL-596**:往设置里加退役名时,写之前就被扣下、写口零请求,§112c 真机格 G-L1 的服务端拒绝臂在新增路径上从终端走不到(存量路径 G-L2 本轮 PASS;同上射程);待某宿主不先过无损判定直接交给 `tightenSessionPolicy`、或引擎新增退役名而本包镜像表未跟进(CC-301)。
225
+ - **KL-591**:引擎工具名归一(别名 → 正名)后,本包按名字表分流的三处只看各自手里那一个名字(拒绝句改写与结果体形看 `tool_end` 拼写、durable 停驻认不认看门本体名、拒绝清单账本行取正名而流内补行取拼写),只在调用方工具拿名字表里的名字当别名时分叉(CC-242;内建别名与经 HTTP 请求的三端不触发)。
226
+ - **KL-599**:服务端对 `apiKey` 头值不合法的 400 `request.field_invalid` 体只有 `error` 与 `errorCode`、没有机读 `field` 键(CC-428):包只按码读、不读句子,所以这一拒到手时读不出「是哪个字段」—— 字段归属只来自提交前的判决 `verdict.field`;宿主没在提交前过包的判决、或判决与服务端分歧而 400 到了,拿到的是服务端原句(不含 key 字节,原样呈现即可)。读句首的字段路径就是按句子匹配,不做;待服务端在这一拒上带 `field`(请托中),到货即加读口(同 `hookMatcherRefusalFromError` 的形)并删本行。
227
+ - **KL-601**:同一个 `decide.workflow_parks_unreadable` 码对应两个成因(更早的引擎写下的记录 / 记录读不出),wire 上没有成因位,用户面一句对两因都说得通,不能告诉用户该「续跑」还是该「修记录」(CC-430)。体上 `readableHolderRunId` 在场能证明是后一因,缺席证不了前一因。
228
+ - (KL-602 已撤:服务端 7.118.0 发布件在收车当天装入夹具目录,两码真铸点格 F2 在其上实跑三格绿;夹具换现役后该格常驻跑,不再是已知限制。)
229
+ - **KL-600**:重拨应答期限先到(`unsettled`)之后,租户侧没有一条读口能读到那次重拨最终落在哪(CC-429):`lastLegMcp` 是那条腿开跑时的名册、重拨不动它,`GET /v1/sessions/:id/mcp` 是一次新的部署面物化而不是这条 run 的活连接,`mcp.server_redialed` 通告在运维面(服务端契约 §G.7c 第 7 条已把它记为已知缺口);本包的判决臂与那一句只说「没等到结果、没取消、可能还在跑、重发前先确认 server 的状态」,不指向某个读口,也不自造「在途」判。出路是等一会儿再看这台的工具是否可用。
230
+
52
231
  ## 0.92.0(2026-10-07)
53
232
 
54
233
  > 主题:⟨发版时汇总⟩