@zq-silk/yui 2.21.0 → 2.22.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 (125) hide show
  1. package/README.md +5 -0
  2. package/dist/cli/commandCatalog.js +85 -25
  3. package/dist/cli/dynamicCompletion.js +4 -1
  4. package/dist/cli/helpRenderer.js +12 -1
  5. package/dist/cli/interactionPolicy.js +2 -0
  6. package/dist/cli/invocationRouter.js +5 -5
  7. package/dist/cli/roleWizard.js +5 -1
  8. package/dist/commands/globalRoleCommands.js +33 -8
  9. package/dist/commands/inboxCommands.js +39 -12
  10. package/dist/commands/operatorCommands.js +2 -5
  11. package/dist/commands/releaseCommands.js +16 -2
  12. package/dist/commands/roleConfiguration.js +25 -2
  13. package/dist/commands/sessionCommands.js +5 -2
  14. package/dist/commands/taskCommands.js +217 -64
  15. package/dist/commands/taskContextCommand.js +26 -4
  16. package/dist/commands/taskFactCommands.js +15 -2
  17. package/dist/commands/taskIntegrationCommands.js +3 -3
  18. package/dist/commands/taskRoleRuntimeStatus.js +15 -5
  19. package/dist/commands/textInput.js +2 -2
  20. package/dist/context/contextFamilies.js +10 -0
  21. package/dist/context/currentSkills.js +6 -4
  22. package/dist/context/runContextPack.js +44 -5
  23. package/dist/context/runInputContract.js +1 -1
  24. package/dist/context/sessionBootstrapManifest.js +7 -5
  25. package/dist/context/sessionSkillNotice.js +53 -0
  26. package/dist/context/taskContext.js +100 -16
  27. package/dist/controlPlaneCli.js +17 -7
  28. package/dist/controller/agentRuntimeObserver.js +57 -12
  29. package/dist/controller/clientRuntime.js +37 -8
  30. package/dist/controller/controller.js +3 -1
  31. package/dist/controller/diagnosticJournal.js +10 -2
  32. package/dist/controller/fileSchedulerStoreAdapter.js +72 -24
  33. package/dist/controller/messageHealth.js +4 -3
  34. package/dist/controller/providerRetryAdmission.js +15 -1
  35. package/dist/controller/providerRetryDelivery.js +18 -2
  36. package/dist/controller/runtime.js +15 -5
  37. package/dist/controller/runtimeEventInbox.js +107 -13
  38. package/dist/controller/runtimeEventProcessor.js +3 -3
  39. package/dist/controller/taskRunRecovery.js +153 -0
  40. package/dist/core/controllerClient.js +16 -2
  41. package/dist/core/controllerServer.js +14 -5
  42. package/dist/core/controllerTelemetry.js +51 -5
  43. package/dist/errors/cliFailure.js +14 -5
  44. package/dist/executor/agentAdapter.js +32 -4
  45. package/dist/executor/agentConfigurationFields.js +2 -0
  46. package/dist/integration/gitIntegrationService.js +3 -2
  47. package/dist/integration/integrationSourceApplication.js +12 -1
  48. package/dist/interaction/notificationPresentation.js +11 -16
  49. package/dist/interaction/operatorPresentation.js +1 -1
  50. package/dist/message/messageContinuation.js +3 -1
  51. package/dist/output/boundedRead.js +36 -7
  52. package/dist/output/rolePresentation.js +3 -1
  53. package/dist/runtime/agentHost.js +12 -3
  54. package/dist/runtime/codexAppServerRuntime.js +110 -24
  55. package/dist/runtime/codexInteractiveHost.js +46 -0
  56. package/dist/runtime/providerRetry.js +5 -2
  57. package/dist/runtime/providerRuntimeIdentity.js +1 -1
  58. package/dist/runtime/structuredProviderHost.js +32 -34
  59. package/dist/scheduler/wakeupQueue.js +10 -4
  60. package/dist/storage/sqliteSchema.js +9 -0
  61. package/dist/storage/storageVersions.js +1 -1
  62. package/dist/tmux/tmuxManager.js +4 -2
  63. package/dist/web/webSettings.js +2 -0
  64. package/docs/authorization.md +18 -3
  65. package/docs/cli-information-contract.md +228 -6
  66. package/docs/cli-information-contract.zh-CN.md +95 -5
  67. package/docs/managed-turn-and-session-runtime.md +82 -21
  68. package/docs/managed-turn-and-session-runtime.zh-CN.md +56 -13
  69. package/docs/provider-retry.md +11 -0
  70. package/docs/release-workflow.md +37 -0
  71. package/docs/release-workflow.zh-CN.md +28 -0
  72. package/docs/roles-and-configuration.md +28 -0
  73. package/docs/roles-and-configuration.zh-CN.md +21 -0
  74. package/docs/storage-baseline.md +4 -1
  75. package/docs/storage-baseline.zh-CN.md +1 -1
  76. package/docs/task-delivery.md +7 -0
  77. package/docs/task-delivery.zh-CN.md +5 -0
  78. package/docs/testing/review-evaluation.md +7 -7
  79. package/docs/testing/review-evaluation.zh-CN.md +7 -7
  80. package/docs/testing/verification-levels.md +45 -2
  81. package/docs/testing/verification-levels.zh-CN.md +21 -2
  82. package/i18n/README.zh-CN.md +6 -0
  83. package/package.json +1 -1
  84. package/skills/yui-leader/SKILL.md +98 -193
  85. package/skills/yui-leader/VERSION +1 -1
  86. package/skills/yui-leader/references/artifacts.md +41 -0
  87. package/skills/yui-leader/references/assignment-execution.md +140 -0
  88. package/skills/yui-leader/references/completion.md +79 -0
  89. package/skills/yui-leader/references/delivery-scope.md +26 -0
  90. package/skills/yui-leader/references/execution.md +16 -487
  91. package/skills/yui-leader/references/implementation.md +81 -0
  92. package/skills/yui-leader/references/planning.md +7 -45
  93. package/skills/yui-leader/references/review.md +90 -0
  94. package/skills/yui-leader/references/task-progress.md +23 -0
  95. package/skills/yui-leader/references/work-allocation.md +118 -0
  96. package/skills/yui-operator/SKILL.md +77 -333
  97. package/skills/yui-operator/VERSION +1 -1
  98. package/skills/yui-operator/references/body-transport.md +62 -0
  99. package/skills/yui-operator/references/configuration.md +47 -0
  100. package/skills/yui-operator/references/lifecycle.md +41 -0
  101. package/skills/yui-operator/references/progress.md +39 -0
  102. package/skills/yui-operator/references/routing.md +57 -0
  103. package/skills/yui-operator/references/submission.md +56 -0
  104. package/skills/yui-operator/references/task-delivery.md +1 -1
  105. package/skills/yui-operator/references/web-lifecycle.md +19 -0
  106. package/skills/yui-operator/scripts/verify-submission.mjs +37 -0
  107. package/skills/yui-runtime/SKILL.md +177 -531
  108. package/skills/yui-runtime/VERSION +1 -1
  109. package/skills/yui-runtime/references/archive.md +51 -0
  110. package/skills/yui-runtime/references/command-discovery.md +41 -0
  111. package/skills/yui-runtime/references/completed-followup.md +65 -0
  112. package/skills/yui-runtime/references/context-ordering.md +3 -34
  113. package/skills/yui-runtime/references/context-reads.md +61 -0
  114. package/skills/yui-runtime/references/dispatched-run.md +61 -0
  115. package/skills/yui-runtime/references/execution-failure.md +105 -0
  116. package/skills/yui-runtime/references/global-context.md +18 -0
  117. package/skills/yui-runtime/references/global-input-controls.md +44 -0
  118. package/skills/yui-runtime/references/host-custody.md +30 -0
  119. package/skills/yui-runtime/references/inbox-recovery.md +77 -0
  120. package/skills/yui-runtime/references/incremental-context.md +40 -0
  121. package/skills/yui-runtime/references/publication.md +4 -111
  122. package/skills/yui-runtime/references/recovery.md +32 -192
  123. package/skills/yui-runtime/references/session-identity.md +18 -0
  124. package/skills/yui-runtime/references/session-replacement.md +45 -0
  125. package/skills/yui-runtime/references/uncertain-execution.md +29 -0
@@ -19,7 +19,7 @@ CLI 调用成功,不代表 Task、原生 Turn 或远端投递完成。
19
19
  | 发生了什么变化? | `task context delta <task> --after <cursor>` | 固定上界内的不可变事件,不是可变当前状态的快照 |
20
20
  | Global 收到了什么? | `session context <role>` | 身份、Profile 读取指针、权限、当前 Turn/retry 事实与小窗口 pending 页;历史按需读取 |
21
21
  | 读取 Global 输入 | `role message list <role> [--pending]`、`role message show <role> <id>` | 在自身范围内发现,再读完整原文;队列接受不删除历史 |
22
- | 本次唤醒带来什么? | `task wake show <task> <wake>` | 固定窗口的输入/结果、标明来源的可选摘要和确切原文入口;`--history` 展开诊断历史 |
22
+ | 本次唤醒带来什么? | `task wake show <task> <wake>` | 固定窗口的输入/结果、有界完整普通输入和确切原文入口;`--history` 展开诊断历史 |
23
23
  | 分配了什么? | `task run context <task>/<run>` | 冻结授权与有限 `pointers` 窗口,变化身份和活跃观察附总数;`--view refs/full` 按需扩展 |
24
24
  | 实际配置是什么? | `task role session inspect <task> <role>` | Task/Role 身份、期望绑定、冻结 Session、当前 Provider 绑定、retry 与显式 Host 观察;不复制整个 Task/Role 或 Provider 会话历史 |
25
25
 
@@ -28,15 +28,42 @@ Task Message、事件、WorkItem、Run、决策、里程碑、publication 和 In
28
28
  Role 发现返回 `recordedHealth` 与 `hostObservation: "not-requested"`,不是实时 Host
29
29
  健康度。记录状态正常也不能排除 Host 失败或终态未确认;需沿条目的 `task role status`
30
30
  读取指针检查。
31
+ `task role status <task> <role>` 默认 `--view current`:保留同一计算结果的
32
+ 健康度、Host、投递/重试、清理与配置漂移观察,以 Run/WorkItem 身份和准确详情命令
33
+ 替代输入、报告及历史正文。重试诊断仍通过当前 retry 详情读取;期望配置与实际配置
34
+ 仍可见,未知证据不升级为成功。这是默认嵌套 JSON 契约变化;需要原有完整记录的
35
+ 调用者使用 `--view full`,分页续读保留该选项。底层状态投影及 Web 数据不变。
31
36
  Context 列表还暴露候选、Review、Job、Project Knowledge、工作区等获授权的记录。
32
37
  `--status`、`--after`、`--work-item` 缩小发现范围;续读必须保留过滤条件。
33
38
  Run 列表接受 Task 或 `task/work` 目标。
34
39
 
40
+ `task run show <task>/<run> --view status` 返回身份、记录状态、delivery/retry
41
+ 观察、退役与结果可用性,不复制输入、启动配置或报告正文。重试观察使用与 Task Context
42
+ 相同的当前摘要,并提供准确 Session retry 命令取回原始诊断与历史,不直接携带其正文。
43
+ 它与默认 `--view full`
44
+ 共用授权检查;完整视图仍保留全部审计证据和文档分页。
45
+ `--view result` 返回完整原始结果(包含失败与 Provider 字段)、Run 身份/状态、
46
+ 退役与执行观察,不携带提交输入和启动配置。没有结果时为 `null`,不代表成功。
47
+ 长报告仍需按同一视图续页;`reads.full` 提供完整审计入口,默认仍为 full。
48
+ 处置前须通过 Message、result 或
49
+ 完整 Run 视图读取原始结果;status 不是报告或验收。精确原文仍在当前上下文时,
50
+ 用 status 补充执行事实,避免再读一份报告;不引入读取回执或模型记忆缓存。
51
+
35
52
  当前 Context 的 `attention.messages` 排除明确 ack 或退役的 Message;投递成功不代表
36
53
  处理完成。精确 wake 回执必须覆盖最新原文版本。用 `--view current` 续读当前视图,
37
54
  默认分类列表仍保留完整历史。`collections` 计数与 `omitted` 明确表达发现不完整。抽样不能证明没有更早的待处理
38
55
  或相关输入。读取相关固定 wake 与原始 Message;更广的需求/历史审计使用分类发现。
39
56
 
57
+ 当前 Context 是工作索引,不是每轮重复的配置或需求全文。Task/Brief、Role、
58
+ Project policy、工作区、交付和决策记录即使很小,也只返回摘要与确切引用;
59
+ 生命周期、执行权限、待处理数量和活跃执行/重试观察仍直接显示。
60
+ 在依据需求或权限行动前,用 `context inspect` 读取相关原件;
61
+ `omitted: true` 不代表原件为空。每次读取仍重新计算当前身份并校验范围,
62
+ 没有增加模型记忆缓存、推断 ACK 或陈旧状态自动复用。
63
+ 当前工作区样本优先显示获授权的准确 Run 工作区投影,再显示 Task 主工作区,
64
+ 然后才是其他工作区,避免历史集成目录挤掉主工作区。显式完整家族查询保留原有
65
+ 排序、数量和记录;显示优先级不改变工作区权限,也不授予其他 Assignment 的访问权。
66
+
40
67
  ## 预算与续读
41
68
 
42
69
  - 发现页默认 20 条,可选 1–100,紧凑 JSON 预算 32 KiB,计入成功 envelope、
@@ -46,7 +73,10 @@ Run 列表接受 Task 或 `task/work` 目标。
46
73
  入口每个集合最多抽样八条。
47
74
  - Global 入口最多八条本轮/可用输入,保留效果未知项;历史缺回执单独计数,
48
75
  通过 `inbox list --view history` 显式发现,不把缺 ACK 当作未执行。
49
- pending 页用 `role message list <role> --current --cursor` 续读;不重复 recent、
76
+ pending 页用 `role message list <role> --current --cursor` 续读。
77
+ 托管自身读取另含 `currentOriginals`:本页中与精确当前 Turn 关联的完整记录,
78
+ 每项至多 4 KiB、合计 8 KiB。未来队列、历史和超限记录仍只提供发现信息与
79
+ 原有精确读取入口;检查调用不内联原文。读取不 claim、投递或 ACK。不重复 recent、
50
80
  Profile 正文、历史 Skill 包和累计 retry 详情。Profile 由 Manifest 精确指向。
51
81
  - `inbox list --view current|history|all` 优先展示精确本轮输入,与自动投递共用原始记录。
52
82
  `claim`、`ack` 接受 1–16 个精确 ID,分别返回结果。ACK 表示语义处置,
@@ -58,11 +88,19 @@ Run 列表接受 Task 或 `task/work` 目标。
58
88
  `pointerPage.nextCursor` 发现更多引用;`--view full` 显式读取完整冻结包。
59
89
  若 `input.directiveOmitted` 为 true,行动前用 `--view input` 全文读取分配指令;
60
90
  默认入口的指令摘要不是指令正文。
91
+ 新冻结的 Task 消息指针在原有 summary 中提供 `Excerpt:` 原文摘录,
92
+ 最多160 UTF-8字节,保留原 revision 和 digest。摘录只辅助选择相关原文,
93
+ 不代表完整正文或授权;后续消息修改不会改变该 Run 已冻结的摘录,
94
+ 也不重新生成既有 Snapshot。
95
+ 有指针时,`reads.expand` 直接展示已有的批量原文展开语法。用相关冻结
96
+ 指针替换占位符,并非默认读全量;既有1–8项选择上限、准确Snapshot
97
+ 校验、完整原文及分页预算不变。
61
98
  - `session skills [--cursor ...]` 只检查当前元信息和可读性,不读技能正文;
62
99
  配置元信息过大时使用相同文档分页。
63
100
  - 不超过 16 KiB 的详情保持普通 JSON。更大详情返回 `contentPage`:确切来源、
64
101
  SHA-256 digest、JSON 字符偏移、总字节数/字符数、文本、完整性与下一游标。
65
- 每块最多 4096 个 UTF-16 单元,不拆代理对,转义后的输出低于 32 KiB。
102
+ 每块长度按完整编码后的 32 KiB 响应预算调整,计入身份与游标,并为小型命令包装
103
+ 预留 256 字节。不拆代理对,偏移仍以 UTF-16 单元计,已发出的旧游标仍可续读。
66
104
  不再因 4 MiB 上限而永久无法读取合法原文。
67
105
  - Task 元信息/next-action/remote-delivery、Brief、WorkItem、Message、Run、
68
106
  决策/里程碑/事件、Role show/status/Session 检查、wake 详情、InputRequest、
@@ -85,6 +123,27 @@ Session,也不授予外部效果权限。
85
123
  `text`,校验相同 source 与 digest,最后一次性解析 JSON。不要分别解析块,也不要把
86
124
  第一块当成完整报告。
87
125
 
126
+ 可复制的 Node.js 消费示例见
127
+ [详情读取示例](cli-information-contract.md#copyable-detail-reading-example):
128
+ 只对指定的 `task context inspect` 原文沿游标续读,验证 source/digest/连续 offset,
129
+ 直到 `complete: true` 才拼接解析一次;不是“两页读完”,也不自动重试拒绝或源变化。
130
+ 示例只读取,不代替 Agent 阅读、claim 或 ACK;大输出须保存在自有临时目录并分段读取。
131
+ 不要把半页 `text` 传给 `jq fromjson`,其错误可能回显整段长文。
132
+ 已获取页面的元数据可用
133
+ `.data.contentPage | {offset,len:(.text|length),complete,nextCursor}` 查看,不必重取正文。
134
+ 此示例按需查阅,不是每次通知的新必读内容。
135
+
136
+ 同一 Task 中已经确定的 1–8 条独立原文可一次读取:
137
+ `task context inspect <task> --refs '<发现结果中的 ref 对象 JSON 数组>'`。
138
+ 手写命令可改用重复的 `--context-ref <store/refId@digest>`,复用 dispatch
139
+ 的精确引用写法,避免 JSON 引号。两种选择格式不能混用,也不能混入单条选择参数。
140
+ 每条必须含 `store`、`refId`、`digest`;可选 `revision` 仅为发现元数据,
141
+ 不另作新鲜度校验。返回 `{taskId, items}`,每项与单条 inspect 相同。
142
+ 整批共用原有 32 KiB 预算;出现 `contentPage` 时保留相同顺序的引用并沿
143
+ `--cursor` 续读。任一引用过期、重复、不可用或越权都拒绝整批读取。
144
+ 各原文独立绑定 digest,不建立跨记录原子快照,不自动选材,不 claim/ACK,
145
+ 也不扩大权限。只需一条时继续使用原有单条入口。
146
+
88
147
  列表包含 `items`、`total`、`complete`、`nextCursor`。计数、条目和游标校验处于同一
89
148
  授权范围。游标是不透明位置,不是通行令牌:每页重新授权。集合或文档改变时明确报错,
90
149
  重新读取,不混合版本;无需持久分页 Session。可变集合不保证并发写入期间无中断遍历。
@@ -136,7 +195,23 @@ Run 增量基于精确父 Snapshot,返回完整变更 `refs` 与 `removedRefs`
136
195
  ## 效果与例外
137
196
 
138
197
  Message send/queue/steer 回执保留身份、digest、正文字节数及原有提交/投递/control
139
- 状态,不回显正文。Brief 更新返回 saved 引用。没有新增等待、重试、确认或审批阶段。
198
+ 状态,不回显正文。`operator submit --json`采用同一结构:
199
+ `data.taskId`、`data.message`(有界消息回执)、`data.submission`(保存时的
200
+ phase/planning/activation/delivery/next-step事实),不再只返回`output`字符串;
201
+ 普通文本输出不变。同key重试复现原提交反馈,不用Task后来的状态重新解释。
202
+ 回执不是原文,也不证明Leader已经完成。
203
+ `task decision record|supersede --json`返回有界保存回执:`data.taskId`、`effect: "saved"`、
204
+ `data.decision`(身份、状态、时间戳、整记录digest及rationale字节数)。
205
+ 完整保存记录的JSON不超过2048 UTF-8字节时,
206
+ `decision`同时包含该记录全部字段,`contentOmitted: false`,可直接核对
207
+ 实际短值,不再附带`read`后续读取指针;更大记录设`contentOmitted: true`,
208
+ 附带准确`read`入口,省略标题、rationale及取代原因
209
+ 正文而不截断。digest始终对应完整原始记录,不包含回执额外字段;
210
+ 需要完整读取时仍用`decision show`。人类文本不变,
211
+ JSON调用方改读`data`而非旧`output`字符串。
212
+ 这证明保存状态而非语义验收;丢失响应不授权重复record。
213
+ Brief 更新返回 saved 引用。
214
+ 没有新增等待、重试、确认或审批阶段。
140
215
  重复读游标绝不能重放变更。
141
216
 
142
217
  激活、完成、集成和输入控制仍是完整事务业务操作,即使内部有多步工程机制。
@@ -148,6 +223,21 @@ Message send/queue/steer 回执保留身份、digest、正文字节数及原有
148
223
  读取仍有自己的用途契约;不宣称它们全部受 32 KiB 限制。Web 全详情投影是独立消费者,
149
224
  不会被 CLI 摘要悄悄替代。大 Project Knowledge 与 Task 证据用定向 Context 发现。
150
225
 
151
- 典型通知读取一次当前 Context、一次固定 wake,再逐条读取相关原文(或其全部文档页)。
226
+ 典型通知读取当前 Context 和固定 wake,再补取尚未完整返回的相关原文及其全部文档页。
227
+ 聚焦 wake 的 JSON 对普通 Message 直接返回完整 `value`:每条最多 4 KiB,
228
+ 合计最多 8 KiB,标记 `contentOmitted: false` 并附当前版本的精确 `ref`。
229
+ 已有完整值可直接使用;长消息与结果报告保留读取入口,完成通知不替代报告。
230
+ 完整内联值的 `refreshRead` 仅用于按需刷新当前来源,不是必需的后续读取;
231
+ 只有原文省略时才返回 `read`。原先无条件跟随 `messages[].read` 的消费者应先检查
232
+ `contentOmitted`,完整时使用 `value`。纯文本输出只展示摘要,因此仍保留原文链接。
233
+ 当前 Leader 的 `inbox show <wake>` 在 `originalContext` 返回相同聚焦原文;
234
+ 已有完整值无需再次 `wake show`。权限、外层分页、claim/ACK 边界不变。
235
+ 对已有 `wake-*` 的变更回执,导航字段由 `originals` 改为 `refreshOriginals`:
236
+ 仅在聚焦原文缺失、不完整或需要刷新时使用,不因 claim 本身重复读取。
237
+ 对 `pending-*` 的 claim(含相同请求的幂等重试)仍返回 `originals`,
238
+ 因为初次查看尚未提供固定窗口原文。这是 JSON 导航字段变化,消费者需区分两类入口;
239
+ 不记录读取历史,也不免除完整读取相关原文的要求。
240
+ 固定窗口选择的是身份,不是可变消息正文的历史快照;后来修改由精确引用区分。
241
+ `--history` 不附带这些正文,claim 与 ACK 语义不变。
152
242
  不要为了入口故意省略的详情重复读聚合。只有原文超过内联预算才增加原文分页调用;
153
243
  摘要不能代替完整原文。
@@ -29,9 +29,21 @@ submitting, unknown and interrupt-owned input still retain their handling path.
29
29
  scopes, phase/read costs and sampled event-loop lag are separate facts.
30
30
  Samples use a process-monotonic clock and hashed target/request labels, with
31
31
  at most 16 recent and 16 active samples plus the slowest completed sample.
32
- In-flight request count is not queue depth, and pre-routing wait is not
33
- measured. These observations neither identify an old incident retroactively
34
- nor establish quiescence; restarting a Controller does not refresh live Hosts.
32
+ In-flight request count is not queue depth; total client-to-route wait is not
33
+ measured by the server alone. These observations neither identify an old incident
34
+ retroactively nor establish quiescence; restarting a Controller does not refresh live Hosts.
35
+
36
+ `observations.commands.routes.transport` correlates socket accept-to-route,
37
+ complete-frame receive-to-route and route-to-local-flush stages by the same
38
+ request hash as route service time. A close before the response finishes is a
39
+ failed transport observation, even if the business handler later succeeds.
40
+ Client socket failures retain local monotonic connect/write/first-response/end
41
+ timestamps in `details.diagnostic.controller.timing`; null means not observed.
42
+ Match the request ID's SHA-256 prefix before comparing these with server stages.
43
+ These are local events, not peer acknowledgement or pure kernel queue time.
44
+ The interval before the server's accept callback includes unobserved socket and
45
+ event-loop delay; sampled lag alone cannot attribute it to a scheduler phase.
46
+ No timeout, coherence check, receipt, retry or stop/start policy is changed.
35
47
 
36
48
  `observations.persistence` separates main-thread database lock/body/commit
37
49
  costs from persistence-worker round trips, worker execution and worker reads.
@@ -54,6 +66,24 @@ admission and other lifecycle writes still require their own boundary analysis.
54
66
  Status responsiveness during these maintenance operations is not proof that
55
67
  every possible Controller stall has been eliminated.
56
68
 
69
+ The worker-backed runtime drain reads its immutable inbox files asynchronously,
70
+ as does native-Session discovery during launch. The 64-event fold limit is not
71
+ a limit on the initial directory scan: a large retained backlog must not be
72
+ read synchronously on the socket thread before that limit takes effect.
73
+ Sorting, per-file validation, event identities, fold order and commit-before-ACK
74
+ remain unchanged. This trades some backlog throughput for control responsiveness;
75
+ it is not a bound on total backlog memory or every CPU operation. Synchronous
76
+ producer deduplication and explicit worker-off drains still need separate
77
+ boundary analysis.
78
+
79
+ Controller stop retains the captured PID/start-generation fence through both
80
+ graceful drain and physical recovery. If the ownership inventory is unreadable,
81
+ a protected Home-validated discovery can retain that fence, but cannot authorize
82
+ a signal. No physical match is not proof of exit: before allowing successor
83
+ startup, the captured generation must be provably gone. A still-live generation
84
+ times out; unavailable generation evidence refuses recovery. Explicit physical
85
+ stop still revalidates UID, entrypoint, Home, PID and start identity before signalling.
86
+
57
87
  Idle Global inbox recovery and already-settled retry checks use read-only
58
88
  snapshots, without reserving SQLite's writer. Creating a recovery notice or
59
89
  settling an outstanding retry still rechecks the current Session/claim/input
@@ -85,12 +115,17 @@ pin a read snapshot, uncommitted writes cannot publish a reusable cache token,
85
115
  and only 16 recent Task projections are retained. Cache entries never authorize
86
116
  dispatch or replace exact mutation-time checks.
87
117
 
88
- A newly created global Operator conversation requests the native title
89
- `Yui · Operator · MMdd`, using Yui's configured time zone. The request is made
90
- only after the provider returns the exact new conversation identity; restore
91
- and reconnect paths never replay it. Providers without a post-create rename
92
- capability keep the usable Session and expose a diagnostic instead of treating
93
- metadata failure as Session-creation failure.
118
+ Role instance codes and generated Session/planning titles are Yui presentation
119
+ metadata, using Yui's configured time zone where a date is included.
120
+ Managed Codex retains this launch title but does not submit native title
121
+ synchronization, including on restore and reconnect. This intentional omission
122
+ is logged locally, not emitted as a failed operation or recovery notification.
123
+ An unsubmitted name is never persisted as an applied native title; the native
124
+ conversation and business execution remain usable.
125
+ The native title mutation has been observed to persist without replying and
126
+ block later Goal/Turn requests, even with a separate metadata client. Automatic
127
+ synchronization must not be restored merely by increasing a timeout or retrying
128
+ an unknown write; it requires a verified nonblocking native path.
94
129
 
95
130
  ## Authority
96
131
 
@@ -177,14 +212,27 @@ continuations and the complete-original reading protocol.
177
212
  Run Context freezes Assignment, source references, effective configuration and
178
213
  workspace boundaries. A Role edit does not rewrite an existing Assignment.
179
214
  Reading either Context does not acknowledge input or create execution authority.
180
- Every managed input points to the exact Session Manifest and CLI entry. The
215
+ Initial or changed managed input points to the exact Session Manifest and CLI entry. The
181
216
  Run Pack is a reference directory: read the relevant requirement and message
182
217
  bodies before acting, rather than treating a successful load as the deliverable.
183
218
  Planning Packs expose no Project write scope or Task-completion permission.
184
219
 
185
- The Manifest pointer is a recovery locator, not a read receipt. At the start of
186
- every turn run `yui session skills --json` through the Session's CLI/Home. It
187
- checks current paths, internal `VERSION` files and readability, without reading
220
+ The Manifest pointer is a recovery locator, not a read receipt. The managed Host
221
+ checks current paths, internal `VERSION` files and readability before submit/steer,
222
+ including the native Operator TUI relay. Unchanged inputs carry a short check
223
+ notice, not repeated Skill lists or a request for another Agent tool call.
224
+ The ordinary notice is only a check result: it does not repeat compaction or
225
+ loading procedures. Those belong to the launch contract and event-specific
226
+ entry guidance. After lost context, reconstruct the current working set from
227
+ the Runtime/Role entry points and references applicable to the next action;
228
+ do not restore the union of every procedure used earlier in the conversation.
229
+ This is instruction routing, not a claim that the Host detects compaction,
230
+ can evict old text, or knows what the model remembers.
231
+ First input, changed metadata and Host reattachment/recovery supply current pointers.
232
+ Only confirmed Provider acceptance advances the Host-local notice state; failures
233
+ and unknown submissions do not. This state is ephemeral, not a loading receipt.
234
+ Unmediated clients retain `yui session skills --json` through their Session CLI/Home.
235
+ The check operates without reading
188
236
  Skill bodies or walking/snapshotting resources. Builtins use the running
189
237
  installation's `skills/<id>` entry; configured Skills use `YUI_HOME/skills/<id>`.
190
238
  These paths do not contain a Session/content digest. After changing installation
@@ -200,6 +248,8 @@ compacted/uncertain context. Reuse only when versions are unchanged and the full
200
248
  instructions remain available now. Yui stores no "already read" state and does
201
249
  not claim to inspect the model's context. Historical packages remain audit only;
202
250
  missing/corrupt snapshots do not prevent valid Session resume or input delivery.
251
+ Provider compaction is not reliably observable here: missing instructions still
252
+ require Agent-directed reload even when engineering reports unchanged versions.
203
253
  Missing current files report their exact path and recovery action. Session
204
254
  identity, scope, writer fences and real CLI/Home incompatibility still reject.
205
255
  Always refresh dynamic facts. Leader notifications use
@@ -411,7 +461,7 @@ The three failure ingresses retain their native fencing/classification, while
411
461
  record creation and deduplication share one writer and supervisor notices use
412
462
  the existing event-routing boundary.
413
463
 
414
- Unknown Leader notifications preserve their wake and input window:
464
+ Unknown or rejected Leader notifications preserve their wake and input window:
415
465
 
416
466
  ```sh
417
467
  yui task wake show <task> <wake>
@@ -419,14 +469,20 @@ yui task wake resolve <task> <wake> --reason <quiescence-evidence>
419
469
  ```
420
470
 
421
471
  Resolve releases the claim after native-effect fences are clear. It neither
422
- replays the notification nor invents acceptance or completion. Independent
472
+ replays the notification nor invents acceptance or completion. A rejection,
473
+ including one recorded after an unknown outcome, is not quiescence evidence.
474
+ If an execution stop removed the operational mailbox, the exact durable
475
+ notification attempt can still be explicitly released for inbox inspection
476
+ and handling; a different current batch is never released. Missing delivery
477
+ evidence is refused, not guessed. Original delivery events and handling claims
478
+ remain unchanged; a repeated resolve adds no second disposition. Independent
423
479
  Role work and legal local facts are not a Task-wide recovery lock.
424
480
 
425
481
  Wake status records notification delivery, not Message implementation. For
426
482
  ordinary Leader notifications, `consumed` means native acceptance. Native Turn
427
483
  completion and Task delivery need their own runtime evidence and durable results.
428
- A rejected wake stays `dispatched` with its claim until explicit retry or Session
429
- replacement; an explicitly released historical wake can remain `dispatched`
484
+ A rejected wake stays `dispatched` with its claim until explicit retry, no-replay
485
+ resolve or Session replacement; an explicitly released historical wake can remain `dispatched`
430
486
  without a claim. Unknown acceptance cannot use `wake retry`.
431
487
  Session replacement preserves queued input for a new wake and current Context;
432
488
  it does not retroactively mark an old wake accepted. Late receipts cannot settle
@@ -725,10 +781,15 @@ Goal `stalled` alone neither establishes the cause nor warrants clearing Goal.
725
781
 
726
782
  In this candidate, `task wake retry` requires a proven-rejected, unconsumed
727
783
  exact claim, a corrected cause and no accepted/uncertain native execution.
728
- `task wake resolve` supports an unknown exact claim after shared-native
729
- quiescence; it releases scheduling without replay or semantic acknowledgement.
730
- Deferred delivery meets neither precondition. Do not assume another recovery
731
- package's extended behavior is installed. For Global Roles, this candidate
784
+ As an alternative, not a sequence, `task wake resolve` supports an unknown or
785
+ rejected exact notification attempt after shared-native/background/writer
786
+ quiescence and persisted evidence; rejection (including after unknown) is not
787
+ quiescence. It releases scheduling without replay or semantic acknowledgement.
788
+ If the operational mailbox is absent, exact durable wake/attempt evidence is
789
+ still required; another current batch is never released. Original claims,
790
+ delivery events and saved alerts remain unchanged. Deferred delivery meets
791
+ neither precondition. Refresh current installed capabilities before acting.
792
+ For Global Roles, this candidate
732
793
  does not establish a dedicated targeted Host-stop command: inspect original
733
794
  input/control and `session retry <role> show`, then discover current authorized
734
795
  capabilities. There is no guessed Task equivalent or stop-all fallback.
@@ -14,9 +14,20 @@ interrupt-owned 输入仍保留原处理路径。
14
14
  `controller status --json` 的 `identity.runtime.observations` 分别呈现已认证请求、
15
15
  调度待处理范围、阶段/读取成本及采样的事件循环延迟。样本使用进程单调时钟,
16
16
  目标/请求标签仅保存哈希;每组最多保留 16 个近期样本、16 个活动样本及最慢完成样本。
17
- in-flight 请求数不是排队数,路由前等待尚未测量。观测不能反推旧事故的唯一根因,
17
+ in-flight 请求数不是排队数,服务端不能独自测量客户端到路由的完整等待。
18
+ 观测不能反推旧事故的唯一根因,
18
19
  也不构成静止证明;重启 Controller 不会刷新存活 Host。
19
20
 
21
+ `observations.commands.routes.transport` 使用与 route service time 相同的请求哈希,
22
+ 分别关联 socket accept→route、完整帧 receive→route、route→本地 flush。
23
+ 响应完成前连接关闭会记录 transport 失败,即使业务 handler 随后成功。
24
+ 客户端 socket 失败在 `details.diagnostic.controller.timing` 保留单调时钟的
25
+ connect/write/首个 response/end 时间戳;null 表示未观测到。
26
+ 比较服务端阶段前须匹配 request ID 的 SHA-256 前缀。这些是本地事件,
27
+ 不是对端确认或纯内核排队时间。服务端 accept callback 之前仍有未观测到的
28
+ socket/事件循环延迟,不能仅凭采样 lag 归因到某个调度阶段。
29
+ timeout、coherence、receipt、重试及 stop/start 策略均未改变。
30
+
20
31
  `observations.persistence` 将主线程数据库锁等待/事务体/提交成本,与持久化
21
32
  worker 的往返耗时、执行和读取成本分开。worker 摘要搭载既有响应,保留 worker
22
33
  实例标识;status 只读缓存观测,不另发诊断 RPC。比较往返和执行时间时须匹配
@@ -31,6 +42,18 @@ worker 的往返耗时、执行和读取成本分开。worker 摘要搭载既有
31
42
  隔离:启动准入、邮箱领取、到期 Job 准入及其他生命周期写入仍需分别分析边界。
32
43
  这些维护操作期间状态请求可响应,不代表 Controller 的所有长停顿都已消除。
33
44
 
45
+ worker 模式的 runtime drain 改用异步读取不可变 inbox 文件,启动时的原生 Session
46
+ 发现也使用同一路径。64 条折叠上限不限制前置目录扫描,不能在该上限生效前,
47
+ 先在 socket 主线程同步读取整个积压。排序、逐文件校验、事件身份、折叠顺序及
48
+ 先提交后 ACK 保持不变。这以部分积压吞吐换取控制面响应,不构成总积压内存或
49
+ 全部 CPU 操作的上限;同步生产者去重及显式关闭 worker 的 drain 仍需分别分析。
50
+
51
+ Controller stop 在优雅停止和物理恢复两条分支都保留所捕获的 PID/启动代次。
52
+ 所有权扫描不可读时,经权限及 Home 校验的 discovery 可以保留该代次约束,但
53
+ 不能据此发信号。未找到物理匹配不等于已退出:允许启动后继前,必须证明原代次
54
+ 已消失;仍活着则超时,代次证据不可读则拒绝恢复。显式物理停止在发信号前,
55
+ 仍复核 UID、入口、Home、PID 及启动代次。
56
+
34
57
  空闲 Global 收件箱恢复检查、已处分的重试检查使用只读快照,不申请 SQLite
35
58
  写锁。真正创建恢复通知或处分未完成重试时,仍在原写事务内复核当前
36
59
  Session/claim/输入。这消除的是空操作等锁,不是所有实际写入的竞争。
@@ -90,10 +113,13 @@ Provider binding,再结算执行占用。Global 停止证据保存为仅记录
90
113
  不触发新的原生输入。待投递通知不能重启已明确停止的 Session;普通 Host 脱离仍
91
114
  保留 active Session,可正常重连。部分切换失败后,仍须先结算旧输入再选择新会话。
92
115
 
93
- 新建 global Operator 对话会按 Yui 当前配置时区请求原生标题
94
- `Yui · Operator · MMdd`。只有 Provider 返回新对话的确切身份后才执行该请求;
95
- 恢复与重连路径不会重放。若 Provider 不支持创建后改名,已创建的 Session 仍保持
96
- 可用,并留下诊断,而不会把元数据失败冒充为 Session 创建失败。
116
+ Role 实例码及生成的 Session/规划标题属于 Yui 展示元数据;包含日期时采用当前
117
+ 配置时区。托管 Codex 保留 launch 标题,但不提交原生标题同步,恢复与重连也不提交。
118
+ 这一有意省略只写本地日志,不作为失败操作或恢复通知;未提交的标题不能记作已应用的
119
+ 原生标题,原生对话与业务执行保持可用。
120
+ 原生命名曾出现写入已生效却无回执、随后 Goal/Turn 请求阻塞的情况,独立元数据
121
+ 连接也未解决。恢复自动同步需要验证不会阻塞执行的原生路径,不能仅增加超时或重试
122
+ 结果未知的写入。
97
123
 
98
124
  ## 权威
99
125
 
@@ -137,8 +163,16 @@ Run Context 冻结 Assignment、来源引用、生效配置和工作区边界。
137
163
  和消息正文,而不是把加载成功当成交付物。规划 Pack 不暴露 Project 写范围或 Task 完成
138
164
  权限。
139
165
 
140
- Manifest 指针是恢复定位入口,不是已读凭据。每轮开始通过本 Session 的 CLI/Home 执行
141
- `yui session skills --json`,轻量检查当前路径、内部 `VERSION` 和文件可读性,不读取
166
+ Manifest 指针是恢复定位入口,不是已读凭据。managed Host 在 submit/steer 前检查,
167
+ 原生 Operator TUI 代理也使用同一逻辑。普通未变化输入仅附短检查提示,不重复清单、
168
+ 不要求 Agent 再发工具调用;首次、元数据变化和 Host 重连/恢复才给当前入口。
169
+ 普通提示仅是工程检查结果,不逐轮重发压缩或加载操作说明;这些说明属于启动契约和
170
+ 事件触发的入口引导。丢失上下文后,从 Runtime/Role 入口和当前动作适用引用重建工作集,
171
+ 不恢复历史上用过的全部流程。这是指令路由,不声称 Host 能识别所有压缩、移除历史文本
172
+ 或判断模型记忆。任务原文和必要新鲜状态仍按业务需要读取。
173
+ 只有 Provider 明确接受才推进 Host 进程内的通知状态,失败与未知提交不推进;
174
+ 它不是持久化加载收据。不经过该 Host 的客户端仍通过本 Session CLI/Home 执行
175
+ `yui session skills --json`。检查当前路径、内部 `VERSION` 和文件可读性,不读取
142
176
  正文或遍历/冻结资源。内置入口是当前安装目录的 `skills/<id>`,自定义入口是
143
177
  `YUI_HOME/skills/<id>`,不包含 Session/内容摘要;安装位置变化后由检查重新解析当前入口。
144
178
  Global Manifest 的 `skillCheckCommand` 使用自包含的 `session context <role>`,
@@ -147,6 +181,8 @@ Global Manifest 的 `skillCheckCommand` 使用自包含的 `session context <rol
147
181
  首次进入、版本变化、恢复,以及压缩后全文缺失或可用性不确定时,读取当前 Runtime、
148
182
  Role/custom Skills 全文及必要引用、Manifest 的 profile。只有版本未变且全文仍在当前
149
183
  上下文时才复用。系统不保存“已经读过”状态,也不声称检查了模型上下文。
184
+ 当前接口不能可靠观察 Provider 压缩;即使工程报告版本未变,Agent 发现指令缺失时
185
+ 仍须补读,不能将未发变化提示当作全文仍在的证明。
150
186
  历史冻结包仅作审计:缺失或损坏不阻止合法 Session 恢复与消息投递;当前文件缺失则
151
187
  报告具体路径和修复动作。身份、作用域、writer fence 与实际 CLI/Home 不兼容仍会拒绝。
152
188
  动态事实仍须刷新:
@@ -302,19 +338,23 @@ retry 把被拒绝批次及后续排队输入交回现有 mailbox,不把旧 wa
302
338
  工作区条目或当前 Session 引导协议。三类错误入口保留各自的原生身份检查与分类,
303
339
  错误创建、去重统一一个写入入口,上级通知统一使用事件路由边界。
304
340
 
305
- 未知的 Leader 通知保留其唤醒和输入窗口:
341
+ 未知或被拒绝的 Leader 通知保留其唤醒和输入窗口:
306
342
 
307
343
  ```sh
308
344
  yui task wake show <task> <wake>
309
345
  yui task wake resolve <task> <wake> --reason <quiescence-evidence>
310
346
  ```
311
347
 
312
- resolve 在原生效果围栏清除后释放该认领。它既不重放通知,也不编造接受或完成。独立的
348
+ resolve 在原生效果围栏清除后释放该认领。它既不重放通知,也不编造接受或完成。
349
+ 被拒绝(包括先 unknown 后 rejected)不等于已经静止。执行停止移除临时 mailbox 后,
350
+ 仍可依据该 wake 的精确持久投递 attempt 显式释放,以便在 inbox 检查和结清;
351
+ 不得释放另一当前批次。缺失投递证据时拒绝猜测。原始投递事件与处理认领保持不变,
352
+ 重复 resolve 不增加第二次处分。独立的
313
353
  Role 工作和合法的本地事实不是一把 Task 范围的恢复锁。
314
354
 
315
355
  wake 状态记录通知投递,不记录 Message 的实施结果。普通 Leader 通知的 `consumed`
316
356
  表示原生接受;原生 Turn 完成与 Task 交付应分别依据运行证据和持久结果判断。
317
- 被拒绝的 wake 保持 `dispatched` 并保留 claim,直到显式重试或 Session 替换;
357
+ 被拒绝的 wake 保持 `dispatched` 并保留 claim,直到显式重试、无重放 resolve 或 Session 替换;
318
358
  已显式释放的历史 wake 可以保持 `dispatched` 而不占用 claim。
319
359
  接受状态未知的通知不能用 `wake retry` 重放。Session 替换把待投递输入
320
360
  保留给新 wake 与当前 Context,不会追溯把旧 wake 标成已接受;旧回执也不能结算
@@ -536,9 +576,12 @@ Host 中尚未持久化的事实。stop 请求保存不等于物理清理成功
536
576
  仅显示 Goal stalled 不能确定根因,也不能据此要求清 Goal。
537
577
 
538
578
  本候选的 `task wake retry` 仅适用已纠正原因、原准确 claim 仍未消费的明确 rejected,
539
- 且不能存在已接受或不确定原生执行;`task wake resolve` 仅支持准确 unknown claim
540
- 在共享原生静止证明后释放调度,不重放、不 ACK。deferred 不满足二者前提,不能假定
541
- 其他恢复包的扩展行为已经安装。GlobalRole 未确认有专用准确 Host-stop 命令时,读取
579
+ 且不能存在已接受或不确定原生执行。另一可选动作是 `task wake resolve`:准确 unknown
580
+ 或 rejected 通知 attempt 在共享原生/后台/writer 静止及持久证据确认后释放调度,
581
+ 不重放、不 ACK。两者不是自动依次执行的步骤;rejected(包括 unknown 后的拒绝)
582
+ 不等于静止。operational mailbox 缺失时仍须精确持久 wake/attempt 证据,不能释放
583
+ 另一当前批次。原始处理认领、投递事件与已保存告警不改写。deferred 不满足二者前提,
584
+ 执行前刷新实际安装能力。GlobalRole 未确认有专用准确 Host-stop 命令时,读取
542
585
  原输入/control 和 `session retry <role> show`,再发现当前权限下的能力;不臆造
543
586
  Task 等价命令,也不退化为 stop-all。
544
587
 
@@ -25,6 +25,17 @@ next input. Agents still own semantic recovery and acceptance.
25
25
  accepted failed Turn and original input. The error need not have qualified
26
26
  for automation; manual intent does not waive Session, authority, latest-Turn
27
27
  or background-quiescence checks.
28
+ - A current-owner manual execution retry can recover that same failed Turn
29
+ across a message continuation and subsequent retries only when the durable
30
+ chain proves every intervening attempt was rejected before a Provider write.
31
+ Session, authority, Assignment, launch configuration and workspace must match.
32
+ It carries the current continuation input, not the earlier business directive,
33
+ and preserves the original automatic budget. Missing proof or any intervening
34
+ accepted/unknown input leaves ordinary admission fenced.
35
+ - Once that exact recovery is accepted, its Agent can claim and acknowledge
36
+ the original continuation Message through the same verified lineage. This
37
+ is handling authority, not another delivery: recipient, continuation target,
38
+ prior claims and failure records stay unchanged; no Message is requeued.
28
39
 
29
40
  The records live on the existing Provider binding, with indexed pending-record
30
41
  reads and the existing Controller deadline timer. There is no retry Task status,
@@ -51,6 +51,37 @@ merely to avoid a version decision. Package versions remain distinct from protoc
51
51
  and persistent-storage contracts: their compatibility checks and required migrations
52
52
  are unchanged, and the storage rules below do not authorize a package release.
53
53
 
54
+ ### 2.22.0 compatibility and migration notes
55
+
56
+ Context reads now support bounded discovery, precise batched original retrieval,
57
+ body transport receipts and focused notifications. Runtime/Role Skills organize
58
+ required material around actions and recovery after compaction; pointers and
59
+ transport receipts never prove semantic reading or acknowledge an input.
60
+ Full originals remain available. Automated consumers must follow explicit
61
+ pagination and retrieval references rather than assuming every default response
62
+ contains every body. Help is focused by default; consumers needing the complete
63
+ recursive command tree must explicitly request recursive help, including JSON
64
+ consumers affected by the changed child projection.
65
+
66
+ Host restoration and Controller scheduling/SQLite transaction boundaries are
67
+ bounded without replaying unknown effects. Codex Host native title mutation is
68
+ omitted where it could stall execution; Yui presentation retains Role instance
69
+ codes and planning markers, but an unapplied native title is not recorded as
70
+ success. Codex temporary-directory exclusion options are preserved end to end.
71
+
72
+ Storage advances to **1.26** through the centralized **1.25 → 1.26** migration;
73
+ the already-published 1.24 → 1.25 migration is unchanged. Back up the Home and
74
+ use the normal upgrade/migration path; do not open a migrated Home with an older
75
+ binary. Controller/Host protocols remain v1. Publishing this version does not
76
+ update the global CLI, migrate a production Home or restart its services.
77
+
78
+ The maintained evaluation entry is `scripts/eval/`, with shared infrastructure
79
+ separate from context-specific logic. Context guidance and historical analyses
80
+ live under `docs/evaluations/context/`; the old `scripts/collaboration-eval/`
81
+ entry is retired. Engineering gathers measurements; Agents interpret actual
82
+ experimental and production traces, including compaction boundaries and missing
83
+ evidence. Local output reductions are not a claim of universal token savings.
84
+
54
85
  ### 2.21.0 compatibility and migration notes
55
86
 
56
87
  Ordinary Task, Assignment and frozen-context evidence reads now use the local
@@ -870,6 +901,12 @@ and timeout hierarchy. A no-target activation, help, `--json`, and every other
870
901
  command remain on the global CLI. Activation does not add another ordinary CLI
871
902
  routing path.
872
903
 
904
+ Activation's two storage preflights use the verified target's existing read-only
905
+ upgrade primitive in an isolated process, not its ordinary inactive CLI entry.
906
+ The target must be installed in this Home with matching integrity and smoke
907
+ evidence before each preflight. This neither migrates storage nor permits an
908
+ inactive release or checkout CLI to read/write the Home through ordinary commands.
909
+
873
910
  ## Step catalog
874
911
 
875
912
  The plan is a fixed, predeclared subset of operations. Each plan entry has an
@@ -36,6 +36,30 @@ Agent 选择一个预先声明的计划,设施从持久状态驱动该计划
36
36
  不能将不兼容冒称为兼容,也不为回避版本选择新增历史兼容机制。包版本与协议、
37
37
  持久存储契约仍然独立:兼容性检查和必要迁移要求不变,下文存储规则不授予发版权限。
38
38
 
39
+ ### 2.22.0 兼容性及迁移说明
40
+
41
+ 上下文读取增加有界发现、精确批量原文读取、正文传输回执及聚焦通知。
42
+ Runtime/Role Skill 按动作组织必需材料,并明确上下文压缩后的恢复路径;
43
+ 指针和传输回执不证明语义阅读,也不自动 ACK。完整原文仍可获取。
44
+ 自动化调用方应遵循明确的分页和原文入口,不再假定默认返回包含全部正文。
45
+ help 默认聚焦当前命令;需要完整递归命令树时须明确请求递归 help,
46
+ 使用 JSON 的调用方也应适配子命令投影变化。
47
+
48
+ Host 恢复、Controller 调度及 SQLite 事务边界改为有界处理,不重放未知效果。
49
+ Codex Host 在可能阻塞执行的路径省略原生标题变更;Yui 展示保留 Role 实例码及
50
+ planning 标记,但不会将未应用的原生标题记为成功。Codex 临时目录排除选项
51
+ 贯穿配置及启动链路保留。
52
+
53
+ 存储通过集中式 **1.25 → 1.26** 迁移升级至 **1.26**;已发布的 1.24 → 1.25
54
+ 迁移不变。升级前备份 Home,并使用正常升级/迁移路径;不要用旧二进制打开
55
+ 已迁移的 Home。Controller/Host 协议仍为 v1。发布本版本本身不更新全局 CLI、
56
+ 不迁移生产 Home,也不重启服务。
57
+
58
+ 受维护的评测入口为 `scripts/eval/`,公共基础设施与上下文专属逻辑分离;
59
+ 上下文指导及历史分析位于 `docs/evaluations/context/`,旧
60
+ `scripts/collaboration-eval/` 入口退役。工程负责数据统计,Agent 根据实验和
61
+ 线上实际轨迹分析,包括压缩边界及证据缺失;局部输出减量不代表普遍 token 收益。
62
+
39
63
  ### 2.21.0 兼容性及迁移说明
40
64
 
41
65
  普通 Task、Assignment 和冻结上下文证据读取改按本地资源边界处理,不再将 Task
@@ -647,6 +671,10 @@ CLI、Operator Session 和 Controller 替换保持兼容,而不必把每个命
647
671
  `dist/cli.js`。因此目标发布拥有完整的交接协议和超时层级。一次无目标的激活、help、
648
672
  `--json` 以及其他每个命令都留在全局 CLI 上。激活不新增另一条普通 CLI 路由路径。
649
673
 
674
+ 激活的两次存储预检在隔离子进程中调用已验证目标包现有的只读升级原语,不经过目标包
675
+ 尚未激活的普通 CLI 入口。每次预检前都要求目标已安装于此 Home,且完整性及冒烟回执
676
+ 匹配。这既不迁移存储,也不允许 inactive release 或源码 checkout 的普通命令读写 Home。
677
+
650
678
  ## 步骤目录
651
679
 
652
680
  计划是一个固定、预先声明的操作子集。每个计划条目有一个 id(工作流内唯一)、一个
@@ -155,6 +155,23 @@ different contracts. Provider bypass does not grant writes to another Project.
155
155
  Managed workspace owner, exact Assignment and resource grants enforce Yui
156
156
  operations; broad native permissions are not an OS sandbox.
157
157
 
158
+ Codex configured permissions can explicitly exclude automatic writable temp roots:
159
+ `--sandbox workspace-write --exclude-tmpdir-env-var true --exclude-slash-tmp true`.
160
+ Each exclusion accepts `true` or `false`; `--clear-exclude-tmpdir-env-var` and
161
+ `--clear-exclude-slash-tmp` remove the respective override. Omission preserves
162
+ native defaults, not an implicit exclusion. Both fields require an explicit
163
+ `workspace-write` sandbox and reject other adapters or conflicting strategies.
164
+ Managed launches compile them into per-thread `sandbox_workspace_write`
165
+ configuration on start/resume, never shared-daemon defaults or account files.
166
+ Ordinary interactive launches use equivalent invocation-local structured options.
167
+ The mapping follows the native
168
+ [configuration reference](https://learn.chatgpt.com/docs/config-file/config-reference).
169
+ These exclude automatic `$TMPDIR` and `/tmp` grants, not explicitly authorized
170
+ writable roots within those paths. They do not establish read isolation or
171
+ prevent effects through an authorized Controller RPC. Inspect the actual native
172
+ receipt and validate enforcement in a separately authorized disposable fixture;
173
+ accepting the configuration does not prove OS sandbox enforcement.
174
+
158
175
  A write-intent delivery Leader launched in its own Task-owned main workspace
159
176
  captures that workspace's bound writable Projects without needing an open
160
177
  WorkItem. Accepted results do not remove this direct-delivery scope. An explicit
@@ -236,12 +253,23 @@ yui config role show <global-role>
236
253
  yui config profile show <profile>
237
254
  yui task role add <task> <role> --profile <profile>
238
255
  yui task role show <task> <role>
256
+ yui task role show <task> <role> --view full
239
257
  yui task role update <task> <role> --environment <preparation-id>
240
258
  yui task role update <task> <role> --managed-environment
241
259
  yui task role session inspect <task> <role>
242
260
  yui task role session new <task> <role> --reason "<why a fresh Session is useful>"
243
261
  ```
244
262
 
263
+ `task role show` defaults to the complete desired Role configuration and its
264
+ current recorded Session configuration, not historical Run snapshots. Recorded
265
+ configuration and a retained control target are not live-state or stop evidence;
266
+ use the returned status/session inspection commands for those questions.
267
+ `--view full` retains the previous complete `role`, `sessions`, and `runs`
268
+ document with bounded pagination. JSON consumers needing those historical
269
+ fields must now request that view and retain it on cursor continuations.
270
+ This changes the CLI default JSON view, not storage or the `task.role.show`
271
+ configuration RPC used by the interactive wizard.
272
+
245
273
  The global query uses the calling process's default native context. Task-scoped
246
274
  queries use the Controller's native account environment and the selected Role
247
275
  configuration; they never forward the caller's credentials to another Provider.