@zq-silk/yui 0.15.9 → 0.15.12

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 (160) hide show
  1. package/ARCHITECTURE.md +8 -4
  2. package/ARCHITECTURE.zh-CN.md +5 -2
  3. package/README.md +13 -5
  4. package/dist/agent/launchEnvironment.js +7 -0
  5. package/dist/agentRun/agentRun.js +3 -0
  6. package/dist/cli/commandCatalog.js +64 -16
  7. package/dist/cli/interactionPolicy.js +7 -3
  8. package/dist/cli/managedDiagnostics.js +1 -1
  9. package/dist/cli/updateOrchestrator.js +24 -1
  10. package/dist/cli/updatePorts.js +7 -3
  11. package/dist/cli/upgradeCommand.js +42 -2
  12. package/dist/cli.js +381 -107
  13. package/dist/commands/executionAuditCommands.js +10 -0
  14. package/dist/commands/globalRoleCommands.js +339 -4
  15. package/dist/commands/projectCommands.js +50 -22
  16. package/dist/commands/releaseCommands.js +18 -0
  17. package/dist/commands/taskActor.js +25 -0
  18. package/dist/commands/taskCommands.js +586 -96
  19. package/dist/commands/taskIntegrationCommands.js +19 -39
  20. package/dist/commands/taskIntegrationQueueCommands.js +1 -1
  21. package/dist/commands/taskOverviewCommand.js +4 -3
  22. package/dist/commands/taskPublicationAdoptCommand.js +127 -0
  23. package/dist/commands/taskPublicationCommands.js +11 -2
  24. package/dist/commands/taskPublicationVerifyCommand.js +23 -39
  25. package/dist/commands/taskRemoteDeliveryCommand.js +22 -11
  26. package/dist/commands/taskRoleRuntimeStatus.js +35 -0
  27. package/dist/context/runContextPack.js +3 -0
  28. package/dist/context/taskCatalog.js +187 -0
  29. package/dist/context/taskContext.js +55 -6
  30. package/dist/controller/agentHostObservation.js +155 -0
  31. package/dist/controller/clientRuntime.js +17 -2
  32. package/dist/controller/controller.js +14 -2
  33. package/dist/controller/fileSchedulerStoreAdapter.js +519 -25
  34. package/dist/controller/globalInputDelivery.js +132 -0
  35. package/dist/controller/jobControl.js +6 -2
  36. package/dist/controller/providerRetryAdmission.js +100 -0
  37. package/dist/controller/providerRetryDelivery.js +218 -0
  38. package/dist/controller/resourceInventory.js +14 -4
  39. package/dist/controller/resourceInventoryLinux.js +2 -6
  40. package/dist/controller/runtime.js +117 -7
  41. package/dist/controller/runtimeEventInbox.js +32 -3
  42. package/dist/controller/runtimeEventProcessor.js +26 -6
  43. package/dist/controller/runtimeHookRunFence.js +75 -19
  44. package/dist/controller/structuredProviderObservation.js +133 -70
  45. package/dist/coordination/workMailboxQueue.js +5 -0
  46. package/dist/execution/workItemExecutionProjection.js +1 -1
  47. package/dist/executor/agentExecutor.js +64 -4
  48. package/dist/executor/executorRegistry.js +3 -0
  49. package/dist/executor/fileRoleLaunchPlanner.js +78 -118
  50. package/dist/integration/deliveryObligation.js +2 -1
  51. package/dist/integration/gitIntegrationService.js +329 -386
  52. package/dist/integration/integrationAttempt.js +30 -4
  53. package/dist/integration/integrationQueueService.js +7 -7
  54. package/dist/integration/integrationSourceApplication.js +323 -0
  55. package/dist/lifecycle/exactRunTerminalization.js +4 -1
  56. package/dist/message/globalInterrupt.js +33 -0
  57. package/dist/message/globalProviderRetry.js +15 -0
  58. package/dist/message/inputControlResolution.js +106 -0
  59. package/dist/message/message.js +367 -0
  60. package/dist/message/messageContinuation.js +126 -3
  61. package/dist/message/taskInterrupt.js +34 -0
  62. package/dist/observability/executionAudit.js +19 -0
  63. package/dist/observability/orchestrationMetrics.js +1 -1
  64. package/dist/release/releaseHandover.js +22 -0
  65. package/dist/release/releaseWorkflowPorts.js +15 -7
  66. package/dist/repository/gitWorkspace.js +430 -107
  67. package/dist/repository/projectMaintenanceLock.js +75 -18
  68. package/dist/repository/taskWorkspaceCoordinator.js +182 -101
  69. package/dist/repository/taskWorkspacePreparer.js +205 -72
  70. package/dist/repository/workItemCandidateSnapshot.js +34 -0
  71. package/dist/repository/workspaceCleanupInspection.js +187 -0
  72. package/dist/resources/resourceDiscovery.js +3 -2
  73. package/dist/runtime/agentError.js +5 -3
  74. package/dist/runtime/agentHost.js +179 -82
  75. package/dist/runtime/agentHostCompatibility.js +127 -0
  76. package/dist/runtime/agentHostProtocol.js +53 -0
  77. package/dist/runtime/builtinAgentErrorMappers.js +91 -0
  78. package/dist/runtime/codexAppServerRuntime.js +34 -3
  79. package/dist/runtime/executionEnvironment.js +0 -19
  80. package/dist/runtime/launchBroker.js +6 -0
  81. package/dist/runtime/providerControl.js +5 -1
  82. package/dist/runtime/providerRetry.js +198 -0
  83. package/dist/runtime/providerRuntimeIdentity.js +28 -2
  84. package/dist/runtime/sessionReconciliation.js +4 -4
  85. package/dist/runtime/sessionTokenMetrics.js +15 -5
  86. package/dist/runtime/structuredProviderHost.js +6 -2
  87. package/dist/runtime/taskRuntimeIsolation.js +30 -6
  88. package/dist/runtime/taskUsageMetrics.js +275 -0
  89. package/dist/runtime/tmuxAdapters.js +5 -3
  90. package/dist/scheduler/activeRoleRunDelivery.js +12 -0
  91. package/dist/scheduler/leaderWakeupProcessor.js +5 -0
  92. package/dist/scheduler/operatorEvent.js +4 -0
  93. package/dist/scheduler/taskExecutionProjection.js +38 -6
  94. package/dist/scheduler/taskObservabilityProjection.js +6 -44
  95. package/dist/scheduler/wakeReason.js +7 -1
  96. package/dist/scheduler/wakeupQueue.js +2 -0
  97. package/dist/setup/setupCommand.js +26 -8
  98. package/dist/storage/homeLayout.js +130 -0
  99. package/dist/storage/migrations/collapseWorktreeLayout.js +963 -0
  100. package/dist/storage/migrations/integrationContinuation.js +104 -0
  101. package/dist/storage/migrations/unifyHomeLayout.js +925 -0
  102. package/dist/storage/sqliteSchema.js +167 -4
  103. package/dist/storage/sqliteStore.js +57 -1
  104. package/dist/storage/storageVersions.js +1 -1
  105. package/dist/storage/storeRpc.js +2 -0
  106. package/dist/storage/taskCatalog.js +123 -0
  107. package/dist/storage/taskStore.js +2 -0
  108. package/dist/storage/upgrade/upgradeOrchestrator.js +95 -2
  109. package/dist/task/archiveDiagnostics.js +129 -0
  110. package/dist/task/archivePreflight.js +124 -0
  111. package/dist/task/nextAction.js +44 -11
  112. package/dist/task/publicationAdoption.js +56 -0
  113. package/dist/task/publicationReference.js +10 -0
  114. package/dist/task/remoteDelivery.js +31 -16
  115. package/dist/web/assets/client/app.js +147 -17
  116. package/dist/web/assets/client/components.js +56 -13
  117. package/dist/web/assets/client/i18n.js +78 -4
  118. package/dist/web/assets/client/taskSurface.js +108 -1
  119. package/dist/web/assets/client/view.js +39 -8
  120. package/dist/web/assets/shell.js +29 -0
  121. package/dist/web/assets/styles/layout.js +8 -1
  122. package/dist/web/assets/styles/widgets.js +12 -0
  123. package/dist/web/webServer.js +131 -4
  124. package/dist/web/webSnapshot.js +16 -6
  125. package/dist/web/webTaskSurface.js +222 -5
  126. package/dist/workspace/cleanupInspection.js +63 -0
  127. package/dist/workspace/workItemChangeSetManager.js +111 -35
  128. package/docs/agent-result-consumption.md +4 -0
  129. package/docs/agent-result-consumption.zh-CN.md +3 -0
  130. package/docs/agent-runtime-drivers.md +7 -0
  131. package/docs/agent-runtime-drivers.zh-CN.md +5 -0
  132. package/docs/architecture/README.md +2 -0
  133. package/docs/architecture/README.zh-CN.md +3 -1
  134. package/docs/architecture/capabilities-and-resources.md +30 -5
  135. package/docs/architecture/capabilities-and-resources.zh-CN.md +23 -3
  136. package/docs/managed-turn-and-session-runtime.md +47 -0
  137. package/docs/managed-turn-and-session-runtime.zh-CN.md +40 -0
  138. package/docs/observability/README.md +62 -0
  139. package/docs/observability/README.zh-CN.md +47 -0
  140. package/docs/project-refresh.md +77 -0
  141. package/docs/project-refresh.zh-CN.md +59 -0
  142. package/docs/provider-retry.md +70 -0
  143. package/docs/release-workflow.md +39 -0
  144. package/docs/release-workflow.zh-CN.md +29 -0
  145. package/docs/sqlite-control-plane-design.md +223 -1
  146. package/docs/task-delivery.md +133 -13
  147. package/docs/task-delivery.zh-CN.md +99 -10
  148. package/docs/task-discovery.md +102 -0
  149. package/docs/task-discovery.zh-CN.md +86 -0
  150. package/docs/testing/verification-levels.md +40 -0
  151. package/docs/testing/verification-levels.zh-CN.md +23 -0
  152. package/i18n/README.zh-CN.md +13 -7
  153. package/package.json +1 -1
  154. package/skills/yui-leader/references/execution.md +154 -51
  155. package/skills/yui-leader/references/integration.md +52 -2
  156. package/skills/yui-operator/SKILL.md +19 -3
  157. package/skills/yui-reviewer/SKILL.md +4 -0
  158. package/skills/yui-runtime/SKILL.md +42 -0
  159. package/skills/yui-runtime/references/publication.md +42 -0
  160. package/skills/yui-runtime/references/recovery.md +24 -0
@@ -11,7 +11,7 @@ before acceptance:
11
11
  ```sh
12
12
  yui task work capture <work-id>
13
13
  yui task integration start <task> --project <project> \
14
- --change-set <change-set-id> \
14
+ --work-item <work-id> --strategy <ff|cherry-pick|merge|manual> \
15
15
  --check "<Project Policy command>"
16
16
  yui task work accept <work-id> --summary "<decision and evidence>"
17
17
  ```
@@ -20,7 +20,23 @@ These are distinct decisions; confirm Integration succeeded before acceptance.
20
20
  Preserve each managed workspace's owner and the Task's recorded base. Do not
21
21
  silently advance that base because a remote branch moved.
22
22
 
23
- ## Finish the same attempt
23
+ ## Resolve ordinary Git conflicts yourself
24
+
25
+ `conflicted` is an engineering step owned by the Leader, not a request for
26
+ user authorization. Read both sides' intent and the current Task contract,
27
+ inspect the exact Integration source, target and workspace, resolve and stage
28
+ the files there, then run `integration continue`. No preceding
29
+ `resolve --option manual-resolution` is required for an ordinary conflict.
30
+ Core completes the matching Git operation, records the candidate, runs or
31
+ recovers its exact checks and advances the original target by CAS.
32
+
33
+ Do not close the Task execution gate, stop unrelated work, create an
34
+ InputRequest or end in passive waiting merely because Git conflicted.
35
+ Escalate only a real product choice, changed scope, unavailable external fact
36
+ or new authority. The explicit `manual` strategy still requires a recorded
37
+ resolution rationale; it is not the ordinary conflict path.
38
+
39
+ ## Continue from exact evidence
24
40
 
25
41
  For direct Integration checks running as a DurableJob, Job success is not
26
42
  the final target update. Read the terminal result, then use:
@@ -32,8 +48,42 @@ yui task integration continue <task>/<integration>
32
48
  This also applies when no manual conflict resolution was needed. Do not start
33
49
  a duplicate Integration or wait for an empty queue to finalize it.
34
50
 
51
+ Resume interrupted Git/Job work on this attempt when its source/candidate and
52
+ Job identities can be proved. A clean HEAD, leftover REBASE_HEAD or successful
53
+ Job alone does not prove source application or target advancement. Read
54
+ diagnostics when evidence is missing or the source, workspace, candidate,
55
+ target or check conditions changed. Never blindly replay a finished rebase
56
+ or repeat a successful unchanged check.
57
+
35
58
  Resolve failures using the exact conflict or check evidence and the supplied
36
59
  Integration workspace. Never bypass compare-and-swap, update managed refs by
37
60
  hand, or create a replacement WorkItem for ordinary Integration correction.
38
61
  Recheck changed behavior or unresolved failures; do not rerun unchanged
39
62
  successful validation without a current reason.
63
+
64
+ ## Abandon an unprovable attempt without discarding delivery
65
+
66
+ If this attempt cannot safely continue, preserve its candidate, modifications,
67
+ logs and successful evidence, then formally `integration abort --reason ...`
68
+ (or reject a pending resolution). A failed attempt does not require keeping
69
+ the same ID forever or repairing a shared installation before any delivery.
70
+ Choose a new Integration or another already-authorized delivery path.
71
+
72
+ For `validating`, `abort` checks the exact target and Jobs under the same Git
73
+ fence as `continue`. An unadvanced target can be abandoned despite changed
74
+ check conditions. If CAS already advanced the target, the action records
75
+ `committed` instead of pretending delivery was aborted. Read the returned
76
+ outcome. A concurrent operation, unknown Job, or ambiguous target requires
77
+ inspection, not a forced status change or rollback of current Project policy.
78
+
79
+ Formal abort preserves history and workspaces. It is not Git abort, branch
80
+ deletion, target advancement, or proof that a Job/process has stopped.
81
+ Inspect all Jobs owned by the exact attempt, including an unbound Job;
82
+ cancel and establish quiescence by exact identity before reusing or cleaning
83
+ resources. Successful Job evidence and Task acceptance remain separate.
84
+
85
+ Direct Task-main delivery is an alternative only when current delivery
86
+ authority, ownership and the Task contract already permit it, with no other
87
+ writer or active check using that workspace. Do not edit managed refs or the
88
+ control-plane DB, modify another owner's workspace, upgrade shared tools,
89
+ or expand publication authority to work around an Integration failure.
@@ -38,11 +38,22 @@ Inspect current Projects, Tasks, and relevant Task context before routing:
38
38
 
39
39
  ```sh
40
40
  yui project list
41
- yui task list
42
- yui task input list
41
+ yui task list --view compact --json
43
42
  yui task context <candidate-task-id>
44
43
  ```
45
44
 
45
+ Use the bounded catalog for discovery, not the detailed legacy list or an
46
+ unconditional traversal of every page. Filter by Project/status/search when
47
+ useful; follow `nextCursor` with the same filters only when more candidates
48
+ are needed. Attention counts cover the authorized catalog before ordinary
49
+ filters and pagination. Follow a category's `--attention` query to enumerate
50
+ its affected Tasks, clearing ordinary filters and retaining its `all` flag.
51
+ `executionSignals` are conservative raw inspection
52
+ candidates (including live Runs and open work), not a computed failure or
53
+ execution status. Inspect the selected Task's Context and original Messages
54
+ before routing or deciding; a summary/ref is not the requirement or report.
55
+ The existing detailed list remains available to explicit legacy consumers.
56
+
46
57
  Route new input to an existing Task when it advances, corrects, narrows, or
47
58
  extends the same bounded outcome and shares final acceptance, delivery, or
48
59
  rollback. Create a new Task only when the new outcome can succeed, fail,
@@ -192,7 +203,12 @@ yui task input cancel <task> <input> --reason "<Leader-owned decision>"
192
203
  After an authorized PR/MR operation or before archive, read
193
204
  [publication and archive boundaries](../yui-runtime/references/publication.md).
194
205
  Record confirmed delivery facts promptly. Completion does not authorize
195
- archive, and archive approval does not authorize forced cleanup.
206
+ archive, and ordinary archive approval does not authorize `--force`.
207
+ When the user explicitly authorizes force archive for an eligible terminal
208
+ Task, archive even if delivery proof or cleanup is incomplete. Report the
209
+ warnings and retained resources without claiming merge verification or physical
210
+ quiescence. Force archive is not permission to delete dirty/uncertain resources,
211
+ kill unrelated execution, abandon delivery or rewrite historical evidence.
196
212
 
197
213
  ## Recover from evidence, not from imagined states
198
214
 
@@ -60,6 +60,10 @@ binding fails before review begins:
60
60
  explicitly so the Leader can judge what remains useful. Core records only
61
61
  the execution boundary and never classifies the meaning of this prose.
62
62
 
63
+ If the current retry projection says infrastructure recovery is already
64
+ waiting or in flight, report that fact without recommending another dispatch.
65
+ Do not manage the retry yourself or reinterpret its preserved candidate.
66
+
63
67
  The Review scope remains the current AgentRun's frozen candidate even if the Leader
64
68
  handles new user input or advances Task main while this Review is running. Do
65
69
  not switch to the newer head, cancel the current inspection, or claim the
@@ -91,6 +91,40 @@ Global context grants no Task implementation workspace. Read a Task only after
91
91
  the Operator has routed to its public/task-authorized context command; never
92
92
  invent a Task AgentRun identity for a GlobalRole.
93
93
 
94
+ A GlobalRole's durable input uses the same three actions as a Task Role,
95
+ addressed by the Role's own name instead of a Task. The local-user Web surface
96
+ exposes this contract. The current public CLI catalog does not register the
97
+ top-level `role` path, even though its handlers implement `yui role message
98
+ queue|steer` and `yui role interrupt`; CLI routing rejects these commands as
99
+ unknown. Report this availability gap when it prevents authorized work. Do not
100
+ invent another command, fabricate Task/Run ownership or borrow the browser's
101
+ user authority to bypass a managed Session boundary.
102
+
103
+ Queue and steer
104
+ save an owned Message; bare interrupt records a control request, not a new
105
+ Message. Each uses a stable request id and that Role's own Session; none fabricates a Task or
106
+ runId to reuse Task-scoped delivery. `queue` delivers at the Role's next legal
107
+ opportunity and is idempotent by request id. `steer` and `interrupt` affect only
108
+ the exact current native Turn — a stale `--expected-target`, an incapable plan,
109
+ or an unproven delivery leaves the Message saved and reports the reason, and
110
+ `interrupt` stops only through the Provider's native cancel with an optional
111
+ `--then-message` naming one already-saved GlobalRole Message. When the Role holds
112
+ no live managed Turn, a steer or interrupt is `NO_ACTIVE_TURN` and never falls
113
+ back to another action.
114
+
115
+ New controlled Global Sessions use the existing Host console, not the native
116
+ TUI, with the configured Agent, permissions and workspace unchanged. A live
117
+ unmanaged Session is not silently replaced or adopted; use an explicit Session
118
+ lifecycle action before enabling controlled delivery.
119
+
120
+ Context reads never consume queue entries. Read the referenced Message in full
121
+ from Session Context. Native/transport acceptance is not implementation, and
122
+ `interrupt-requested` is not a stopped Turn or stopped background resources.
123
+ Only an exact terminal and the original Session/writer boundary can release a
124
+ then handoff. An accepted or unconfirmed steer must not be submitted again by
125
+ changing its request id or composing then. A conclusive rejection permits an
126
+ explicit new control attempt; uncertainty does not.
127
+
94
128
  ## Preserve intent and authority
95
129
 
96
130
  An analysis, diagnosis, or review request is read-only unless the user also
@@ -147,6 +181,14 @@ runtime identity and workspace progress; never edit Run status or substitute
147
181
  a native Session behind Yui's back. A timeout is not proof of quiescence and
148
182
  does not authorize replay of unknown input.
149
183
 
184
+ Qualifying transient Provider failures have bounded Controller-owned recovery.
185
+ Read the current `providerRetry`/`retry` projection before dispatching a manual
186
+ successor. `waiting` and `in-flight` mean infrastructure recovery is already
187
+ owned; do not add a private retry loop or resend the input. Only a proven native
188
+ success resets that chain, and it never accepts a WorkItem or completes a Task.
189
+ After recovery, inspect existing work and external receipts before continuing;
190
+ the system's recovery instruction supplies no new user authority.
191
+
150
192
  After an authorized external PR/MR operation, use the shared
151
193
  [publication recording contract](references/publication.md). Recording delivery
152
194
  facts does not authorize the external operation, imply acceptance, or grant
@@ -13,6 +13,26 @@ deployment status. After merge, use `yui task publication verify` only when
13
13
  current authorization covers that external provider read. Otherwise retain
14
14
  reported evidence and state the verification gap.
15
15
 
16
+ Keep the completion head as the original acceptance evidence. If an authorized
17
+ post-completion integration produced a different publication candidate, record
18
+ its exact local commit, then read `task publication diff <task>/<publication>`.
19
+ Inspect the complete delta against the original acceptance, including removals,
20
+ conflict resolutions and additional changes. Only when that candidate still
21
+ satisfies the result and its relevant increments are accepted, record
22
+ `task publication adopt <task>/<publication> --reviewed-diff <sha256> --acceptance <text>`.
23
+ Explain the semantic judgment and verification/review evidence in the acceptance.
24
+ When an existing Task Integration produced that exact candidate, include
25
+ `--integration <id>` in diff and adopt to bind its committed evidence.
26
+ Ancestry or Integration success alone is not acceptance; do not reopen the Task,
27
+ rewrite completion, or mark a merge verified to bridge an evidence gap.
28
+
29
+ Adoption records a fixed decision, not remote verification or publication
30
+ authority. The verify operation observes the exact Publication candidate through
31
+ its provider and records contrary head/state facts as reported successors,
32
+ invalidating previous verification. Metadata and verification updates may retain
33
+ adoption while the candidate is unchanged; a changed candidate needs a new
34
+ decision. Archived history is read-only to these adopt/verify operations.
35
+
16
36
  Use `yui task remote-delivery <task>` to explain external delivery. Publication
17
37
  is not Candidate acceptance, Review, Integration or Task completion.
18
38
 
@@ -20,3 +40,25 @@ Completion does not authorize archive. The Operator obtains authorization for
20
40
  the exact Task, checks archive eligibility, then uses `--integrated` for verified
21
41
  merged delivery or `--abandon` for deliberate non-delivery. General archive
22
42
  approval never implies `--force` authority. Preserve the Task record.
43
+
44
+ With explicit force authorization for a completed or cancelled (retired) Task, use
45
+ `yui task archive <task> (--integrated|--abandon) --force`. Force commits the
46
+ archive and stops new Task scheduling before attempting safe foreground cleanup.
47
+ Missing/stale delivery evidence, unresolved execution and cleanup errors become
48
+ warnings with retained resource references; they do not block that commit.
49
+ Authority, lifecycle, identity and mandatory audit persistence still fail closed.
50
+
51
+ Force does not verify a merge, accept work, stop unknown execution, discard dirty
52
+ data or imply abandonment. Keep the requested disposition and original
53
+ Publication/completion evidence. Unverified local commits and resources that
54
+ cannot be safely released stay owned and traceable. Late runtime events remain
55
+ source evidence, not authority to resume or settle unknown input.
56
+
57
+ Read `task show <task> --json` for `data.archive.warnings`,
58
+ `data.archive.retainedResources` and `data.archive.cleanupEvents`;
59
+ `task context` also retains the original records/events. A successful archive
60
+ exit means `archived=true`, not that cleanup fully succeeded. `cleanupFinished`
61
+ means the foreground pass finished, not that every resource was removed.
62
+ If cleanup was interrupted, the Task stays archived. Repeating archive only
63
+ reports current facts; use explicit, exact-owner resource operations after
64
+ inspection instead of re-running broad cleanup. No background retry is implied.
@@ -12,6 +12,30 @@ affected WorkItem, ReviewRound or Integration. Use `task next-action` and
12
12
  `execution audit` as decision support, not as an automatic plan.
13
13
  Active or quiet observations are not a Task-wide lock or proof of failure.
14
14
 
15
+ ### Bounded infrastructure retry
16
+
17
+ The Controller, not the Agent, counts and schedules qualifying transient
18
+ Provider retries: at most five automatic executions after the initial failure,
19
+ within one ten-minute recovery window. Native acceptance, activity and partial
20
+ output do not reset that count. Unknown delivery remains fenced for exact
21
+ readback; it is never replayed.
22
+
23
+ Inspect the current projection in Context, or use
24
+ `task role session retry <task> <role> show`; Global Sessions use
25
+ `session retry <role> show`. While `waiting` or `in-flight`, do not dispatch a
26
+ duplicate. A readable failed Run remains immutable evidence while its recovery
27
+ successor handles the same responsibility and frozen Review boundary.
28
+
29
+ `cancel` withdraws pending automatic recovery; `disable` additionally disables
30
+ future automatic chains on that Provider binding. Neither stops an admitted
31
+ native Turn. `enable` permits future failures to qualify, without replaying
32
+ old failures. These controls require the existing user/supervisor authority.
33
+
34
+ `exhausted`, `cancelled` and `needs-attention` preserve the error, input and
35
+ work. Read their exact reason, then choose an authorized next action. Unsupported
36
+ Hosts/Adapters or unprovable Session/background state do not trigger automatic
37
+ replacement, cleanup, model switching or a new grant.
38
+
15
39
  A failed AgentRun is immutable; retry creates a new attempt. Reuse a recoverable
16
40
  Session when useful and load the new attempt's current context, not an old
17
41
  Assignment from memory. A new Host process need not mean a new native Session.