@zq-silk/yui 2.8.1 → 2.10.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 (119) hide show
  1. package/README.md +5 -3
  2. package/dist/cli/commandCatalog.js +56 -21
  3. package/dist/cli/helpRenderer.js +3 -1
  4. package/dist/cli/interactionPolicy.js +2 -2
  5. package/dist/commands/durableJobCommands.js +50 -0
  6. package/dist/commands/globalRoleCommands.js +30 -9
  7. package/dist/commands/inboxCommands.js +79 -22
  8. package/dist/commands/projectCommands.js +4 -33
  9. package/dist/commands/scheduleCommands.js +45 -0
  10. package/dist/commands/taskActivationCommands.js +19 -5
  11. package/dist/commands/taskCommands.js +8 -2
  12. package/dist/commands/taskFactCommands.js +24 -12
  13. package/dist/commands/taskProjectDeliveryCommand.js +56 -0
  14. package/dist/commands/taskPublicationCommands.js +6 -3
  15. package/dist/commands/taskPublicationVerifyCommand.js +74 -28
  16. package/dist/commands/taskRemoteDeliveryCommand.js +5 -3
  17. package/dist/context/runContextPack.js +25 -4
  18. package/dist/context/runInputContract.js +1 -0
  19. package/dist/context/taskContext.js +53 -16
  20. package/dist/context/taskPhase.js +99 -0
  21. package/dist/controlPlaneCli.js +38 -17
  22. package/dist/controller/controller.js +35 -0
  23. package/dist/controller/fileSchedulerStoreAdapter.js +75 -16
  24. package/dist/controller/globalInputDelivery.js +17 -7
  25. package/dist/controller/inboxTurnCheck.js +64 -0
  26. package/dist/controller/jobControl.js +42 -12
  27. package/dist/controller/jobDefinitionControl.js +304 -0
  28. package/dist/controller/jobSupervisor.js +47 -32
  29. package/dist/controller/providerRetryAdmission.js +2 -0
  30. package/dist/controller/runtime.js +11 -2
  31. package/dist/controller/scheduleControl.js +176 -0
  32. package/dist/coordination/workMailbox.js +3 -3
  33. package/dist/external/githubPublicationVerifier.js +14 -5
  34. package/dist/external/gitlabPublicationVerifier.js +12 -29
  35. package/dist/grant/taskAuthorization.js +7 -2
  36. package/dist/interaction/notificationPresentation.js +12 -3
  37. package/dist/interaction/operatorPresentation.js +5 -0
  38. package/dist/job/builtinJob.js +58 -0
  39. package/dist/job/durableJob.js +72 -49
  40. package/dist/job/jobDefinition.js +68 -0
  41. package/dist/job/jobRunner.js +2 -1
  42. package/dist/job/projectRefreshRunner.js +48 -0
  43. package/dist/message/globalInboxRecovery.js +44 -0
  44. package/dist/message/globalInterrupt.js +1 -1
  45. package/dist/message/inboxReceipt.js +14 -6
  46. package/dist/message/inboxTurn.js +86 -0
  47. package/dist/message/message.js +11 -0
  48. package/dist/message/taskInboxOwnership.js +20 -6
  49. package/dist/repository/projectRefresh.js +58 -0
  50. package/dist/repository/taskWorkspacePreparer.js +2 -1
  51. package/dist/repository/workspaceCleanupInspection.js +6 -1
  52. package/dist/schedule/schedule.js +108 -0
  53. package/dist/scheduler/operatorEvent.js +2 -0
  54. package/dist/scheduler/operatorInputNotificationProcessor.js +8 -0
  55. package/dist/storage/contextRecords.js +8 -0
  56. package/dist/storage/jobSchema.js +15 -0
  57. package/dist/storage/maintenanceCaller.js +1 -1
  58. package/dist/storage/recordValidation.js +5 -0
  59. package/dist/storage/scheduleSchema.js +12 -0
  60. package/dist/storage/sqliteSchema.js +95 -24
  61. package/dist/storage/sqliteStore.js +123 -10
  62. package/dist/storage/storageVersions.js +1 -1
  63. package/dist/storage/storeRpc.js +5 -0
  64. package/dist/storage/upgrade/jobDefinitionMigration.js +22 -0
  65. package/dist/task/archiveDiagnostics.js +1 -1
  66. package/dist/task/archivePreflight.js +1 -1
  67. package/dist/task/projectDeliveryScope.js +20 -0
  68. package/dist/task/publicationToolObservation.js +126 -0
  69. package/dist/task/remoteDelivery.js +19 -8
  70. package/dist/task/remoteDeliveryService.js +5 -4
  71. package/dist/task/taskActivationService.js +35 -0
  72. package/dist/web/assets/client/app/settings.js +7 -1
  73. package/dist/web/assets/client/i18n/en.js +65 -2
  74. package/dist/web/assets/client/i18n/zh-CN.js +65 -2
  75. package/dist/web/assets/client/index.js +2 -0
  76. package/dist/web/assets/client/views/jobs.js +222 -0
  77. package/dist/web/assets/client/views/task/deliveryResults.js +6 -2
  78. package/dist/web/assets/client/views/task/page.js +11 -1
  79. package/dist/web/assets/shared/manageNav.js +1 -0
  80. package/dist/web/assets/shared/taskTabs.js +2 -2
  81. package/dist/web/assets/shell/settingsContent.js +3 -0
  82. package/dist/web/assets/styles/index.js +2 -0
  83. package/dist/web/assets/styles/views/jobs.js +19 -0
  84. package/dist/web/controllerWeb.js +73 -21
  85. package/dist/web/taskPreviews.js +21 -13
  86. package/dist/web/webAccess.js +109 -0
  87. package/dist/web/webJobs.js +52 -0
  88. package/dist/web/webServer.js +76 -44
  89. package/docs/architecture/capabilities-and-resources.md +6 -4
  90. package/docs/architecture/capabilities-and-resources.zh-CN.md +5 -4
  91. package/docs/cli-information-contract.md +57 -4
  92. package/docs/cli-information-contract.zh-CN.md +41 -2
  93. package/docs/job-runs.md +224 -0
  94. package/docs/project-delivery-scope.md +59 -0
  95. package/docs/release-workflow.md +86 -0
  96. package/docs/release-workflow.zh-CN.md +68 -0
  97. package/docs/schedules.md +132 -0
  98. package/docs/storage-baseline.md +31 -1
  99. package/docs/storage-baseline.zh-CN.md +25 -1
  100. package/docs/task-delivery.md +74 -2
  101. package/docs/task-delivery.zh-CN.md +39 -1
  102. package/docs/testing/verification-levels.md +6 -2
  103. package/docs/testing/verification-levels.zh-CN.md +6 -3
  104. package/i18n/README.zh-CN.md +6 -3
  105. package/package.json +4 -3
  106. package/skills/yui-leader/SKILL.md +44 -1
  107. package/skills/yui-leader/VERSION +1 -1
  108. package/skills/yui-leader/references/planning.md +9 -1
  109. package/skills/yui-operator/SKILL.md +31 -0
  110. package/skills/yui-operator/VERSION +1 -1
  111. package/skills/yui-reviewer/SKILL.md +4 -0
  112. package/skills/yui-reviewer/VERSION +1 -1
  113. package/skills/yui-runtime/SKILL.md +67 -8
  114. package/skills/yui-runtime/VERSION +1 -1
  115. package/skills/yui-runtime/references/context-ordering.md +103 -0
  116. package/skills/yui-runtime/references/publication.md +44 -4
  117. package/skills/yui-runtime/references/recovery.md +21 -0
  118. package/skills/yui-worker/SKILL.md +5 -0
  119. package/skills/yui-worker/VERSION +1 -1
@@ -130,9 +130,10 @@ For every explicitly dispatched managed Task AgentRun:
130
130
  messages; use the expansion command above or the Leader's current Task Context.
131
131
  Reports remain evidence, not authority to enlarge the assignment.
132
132
 
133
- 5. On a later wake, request only the declared delta after the last pack cursor.
134
- If no cursor is available, reload the exact pack; do not reconstruct state
135
- from transcript memory.
133
+ 5. On a later wake, refresh current Task facts separately from frozen Run refs.
134
+ Use a Run delta only against its exact declared Snapshot lineage; `deltaRefs`
135
+ is a hint, not a complete patch. If no baseline is available, reload the
136
+ exact pack; do not reconstruct state from transcript memory.
136
137
 
137
138
  Loading and verifying Context is the start of the work, not its result. Continue
138
139
  with the authorized assignment. In Draft, persist the discussed plan and wait
@@ -190,11 +191,13 @@ unmanaged Session is not silently replaced or adopted; use an explicit Session
190
191
  lifecycle action before enabling controlled delivery.
191
192
 
192
193
  Context reads never consume queue entries. Global Context returns a bounded
193
- `pending` discovery page, not Message bodies, Profile bodies, recent history or
194
- accumulated retry details. The Manifest retains the exact Role profile.
194
+ `pending` discovery page of current-turn and available input, not Message bodies,
195
+ Profile bodies, historical receipt debt or accumulated retry details. Its
196
+ `historyCount` is a separate absence-of-handling-evidence count, not new work.
197
+ The Manifest retains the exact Role profile.
195
198
  Read a referenced
196
199
  original with `role message show <role> <message-id> --json`. Follow a pending
197
- page's `nextCursor` using `role message list <role> --pending --cursor <cursor>`
200
+ page's `nextCursor` using `role message list <role> --current --cursor <cursor>`
198
201
  when it is incomplete; accepted delivery does not erase the Message from the
199
202
  separate all-message list. Native/transport acceptance is not implementation, and
200
203
  `interrupt-requested` is not a stopped Turn or stopped background resources.
@@ -213,13 +216,24 @@ explicit new control attempt; uncertainty does not.
213
216
 
214
217
  ## Handle your own inbox in the current turn
215
218
 
219
+ For an automatic delivery naming an exact Message or wake, use that entry
220
+ directly: read its original, claim it, and record its semantic disposition
221
+ before ending this turn. Do not first enumerate history to rediscover it.
216
222
  After loading authorized context, at useful work boundaries and before handing
217
- off, use `yui inbox list --json` to discover pending input addressed to your
218
- current managed identity. This applies to Operator, custom GlobalRole, Leader,
223
+ off, use `yui inbox list --view current --json` to discover current-turn and
224
+ available input addressed to your current managed identity. This applies to Operator, custom GlobalRole, Leader,
219
225
  Worker and Reviewer. Do not poll an empty inbox or create another model turn.
220
226
  No target Role, Task or native Session is supplied: Yui resolves your current
221
227
  identity. A native child gains no separate actor or inbox.
222
228
 
229
+ `--view history` discovers old missing receipts explicitly; default `--view all`
230
+ prioritizes current inputs and labels each entry's category. Never treat an
231
+ absent historical ACK as proof that its work was not done. Read history when a
232
+ specific reminder, recovery or user request calls for it, not every turn.
233
+ Current correlation reuses exact delivery/continuation/control identities;
234
+ active claims retain their observed native attempt when available. Missing
235
+ historical correlation is not reconstructed from timestamps or final text.
236
+
223
237
  1. Read the selected `yui inbox show <entry> --json`. Reads never consume input.
224
238
  Follow `nextCursor` and all `contentPage` pages using the rules below.
225
239
  2. Before processing, reserve exact entries with
@@ -240,6 +254,33 @@ identity. A native child gains no separate actor or inbox.
240
254
  Record an obsolete notification as requiring no further action only after
241
255
  checking its originals and current facts, never based solely on age.
242
256
 
257
+ An input can be settled as executed, legally routed/delegated, a necessary user
258
+ question raised, or superseded/no action after inspecting authoritative
259
+ originals. Put that concrete disposition and useful Task/InputRequest/result/
260
+ Publication references in `--reason`. Routing may be complete while the Task
261
+ is still running; do not hold the input until all downstream work finishes.
262
+ For supersession, identify the later source, not merely its age.
263
+
264
+ At an exact native terminal, engineering checks for unacknowledged inputs
265
+ correlated to that turn and emits at most one existing notification. This is
266
+ missing-evidence detection, never semantic ACK or proof of absent effects.
267
+ Reminder-only turns do not generate another reminder. The retained originals
268
+ remain inspectable if the bounded reminder is also missed; do not start a
269
+ private polling/retry loop or copy the business input to obtain another turn.
270
+ Task Assignment checks go to Leader for inspection and existing handoff or
271
+ retirement, not automatic Worker/Reviewer replay. Exact terminal can end an
272
+ active-consumption notification reservation without acknowledging its input;
273
+ it does not infer or release an uncertain native writer.
274
+
275
+ For obsolete Global input that was conclusively not submitted, use
276
+ `yui inbox retire <entry> --request-id <stable-id> --reason "<disposition>"`
277
+ after inspecting the original and current facts. Retirement preserves the
278
+ original target, claim and explicit management evidence; it is not ACK.
279
+ Accepted input uses normal claim/ack reconciliation. Unknown/pending control,
280
+ transport acceptance and interrupt-then ownership cannot be retired through
281
+ this operation. Task Messages retain the existing Leader `task message retire`
282
+ and exact-Assignment handoff paths.
283
+
243
284
  Claiming prevents ordinary automatic delivery; it is not processing completion.
244
285
  Acknowledgement records Agent handling, not Host acceptance, result acceptance,
245
286
  Task completion, publication or archive. Never acknowledge merely to empty the
@@ -247,6 +288,13 @@ list. On failure or interruption, leave the claim unacknowledged; it remains
247
288
  discoverable and does not expire or replay automatically. A current rightful
248
289
  successor must inspect original input and prior effects before finishing and
249
290
  acknowledging a retained claim. Never replay uncertain external actions.
291
+ After legal Session replacement, initialization can arrive before old handling
292
+ is settled. This recovery notification is not the original business input or
293
+ an acknowledgement. Read the current inbox and prior effects first. For
294
+ `claimed-by-previous-session`, retain the original claim: do not claim again.
295
+ Finish only the still-authorized handling and use a new stable ack request ID
296
+ with a concrete disposition; the receipt retains both the old claimant and
297
+ the current acknowledging actor. New queued input remains separate.
250
298
  For an exact-Session input already claimed by its selected Session, a rightful
251
299
  successor may explicitly settle that handling after inspecting the original
252
300
  and prior effects. This preserves the original target and claim; it grants no
@@ -276,6 +324,12 @@ This claim never sends the input again. A current rightful successor may settle
276
324
  an accepted Global input or Leader window while retaining the original delivery
277
325
  target; it must inspect prior effects first. Pending/unknown acceptance stays
278
326
  blocked and cannot use claim as a replay path.
327
+ An explicitly released Leader notification (`notification.resolved` with
328
+ `released-without-replay`) can be claimed for evidence inspection and settlement
329
+ after verified native stop. Its original delivery status stays unknown or
330
+ unaccepted; handling it cannot retarget Session-specific instructions or
331
+ authorize re-executing unknown effects. If a required fact or user decision is
332
+ unavailable, preserve the claim and report that exact boundary.
279
333
 
280
334
  An ack belongs to the exact original and revision: fixed windows pin
281
335
  `message.updated` event identities, including same-timestamp edits. A later
@@ -290,6 +344,11 @@ exactly-once execution.
290
344
 
291
345
  ## Read bounded information completely when required
292
346
 
347
+ For apparent conflicts, stage handoffs or incremental maintenance, read
348
+ [current intent and temporal reads](references/context-ordering.md).
349
+ It distinguishes stage progression from independent constraints and explains
350
+ source attribution, Brief guards, fixed delta windows and bounded recovery.
351
+
293
352
  Structured CLI results live in the top-level `data`, not a JSON-encoded
294
353
  `output` string. Task current Context includes bounded current facts and
295
354
  message references; it does not include event or terminal Run history.
@@ -1 +1 @@
1
- 6
1
+ 10
@@ -0,0 +1,103 @@
1
+ # Current intent, provenance and temporal reads
2
+
3
+ Use this when a handoff, changed requirement, stale summary or incremental read
4
+ appears to conflict with earlier material. Core supplies facts and source
5
+ relations; the Agent decides meaning within its existing authority.
6
+
7
+ ## Resolve the apparent conflict
8
+
9
+ Read the current Task view first, then the relevant exact original sources:
10
+ Task requirements, `phase.activation.source` event and its linked Message,
11
+ current request, Brief, and the Session's actual authority. The `phase` and
12
+ `caller` projections are observations, not permission granted by a summary.
13
+ Do not fetch all history merely because the sources differ.
14
+
15
+ Classify the difference before deciding:
16
+
17
+ - **Stage progression:** an earlier “discuss only” limits that planning stage.
18
+ A later explicit request to start the same work, legally adopted Activation,
19
+ enabled gate and delivery-authorized Session establish the next stage.
20
+ Continue without asking for the same authorization again. The old words stay
21
+ in the audit trail; they are not a fresh stop.
22
+ - **Same-scope replacement:** a later authoritative original can replace the
23
+ particular requirement it changes. Explain the scope of that replacement in
24
+ Brief; preserve unchanged requirements and the original references.
25
+ - **Independent restriction:** “do not publish”, resource limits, material
26
+ exclusions and unrelated prohibitions remain unless explicitly changed by an
27
+ authorized source. Development authorization is not release authorization.
28
+ - **Actual contradiction or missing evidence:** read the exact source and
29
+ current facts first. If the material ambiguity remains, request only the
30
+ missing user decision; do not fabricate provenance or resolve it by timestamp.
31
+
32
+ Active lifecycle alone never authorizes implementation of a new analysis-only
33
+ request. An old planning Session never promotes itself. Stop, archive,
34
+ Assignment, workspace and grant boundaries remain independent checks.
35
+
36
+ An activation event's `sourceText` is exact text supplied by the recorded
37
+ caller; `leader-attested-native-input` explicitly identifies the Leader's
38
+ capture, not a Provider-verified user message. Read it as attributed evidence
39
+ together with the adopted request. `sourceMessageId` names the original shared
40
+ Message; its body digest detects edits, while handling receipts do not change
41
+ the source body. Missing/changed/unavailable provenance is visible and calls for
42
+ an exact-source read, not an automatic prohibition or an automatic grant.
43
+ Do not select whichever summary arrived last as the winning authority.
44
+
45
+ `phaseRelation: recorded-before-activation-request` is recording order only.
46
+ It does not declare every old requirement superseded. A delayed result or an
47
+ acknowledged Message retains its original scope, source and version.
48
+ `revised-after-activation-request` means an existing Message was edited after
49
+ that boundary; its old ID must not hide the new revision.
50
+
51
+ ## Keep the shared working summary current
52
+
53
+ Description owns the goal and durable boundaries; Brief owns the current
54
+ semantic interpretation, progress, blockers, next action and original refs.
55
+ Core owns lifecycle, gate, Activation, Session and operation facts. Do not
56
+ manually mirror them into a competing state machine.
57
+
58
+ At a changed requirement, phase handoff, resolved blocker, meaningful result or
59
+ completion, reconcile affected Brief fields. Routine unchanged steps need no
60
+ write. `phase.brief.refresh-needed` is a mechanical hint, not a semantic verdict
61
+ or completion gate. Compare originals before editing.
62
+
63
+ Read `task brief show <task>`; update with its `writeGuard` as
64
+ `task brief update <task> --if-current <writeGuard> ...`. A new semantic event,
65
+ Brief edit or changed Task boundary invalidates the guard even at the same
66
+ timestamp. On rejection, reread current facts and reconcile only the intended
67
+ fields; do not blindly copy an old summary under a newly read guard.
68
+ An old Session still cannot write through this operation.
69
+
70
+ ## Maintain a baseline and incremental history
71
+
72
+ For current Task facts, retain `coreCursor` from `task context <task>`.
73
+ `task context delta <task> --after <coreCursor>` returns **event history**, not
74
+ a replacement current view. Retain the same `--after` on every continuation;
75
+ use `--continuation` until `complete: true`, then advance to `throughCursor`.
76
+ The window's upper bound is fixed. Later arrivals belong to the next read.
77
+
78
+ Deduplicate by source Home + Task + event ID, and process numeric event order
79
+ within that stream. `createdAt` is occurrence/recording metadata, not a global
80
+ causal clock; native acceptance, delivery and acknowledgement are separate
81
+ facts. Never apply a late event's old payload over a newer current record.
82
+ Re-read affected current refs with their digest when making a decision.
83
+ An empty delta preserves the baseline; `stateChanged` can still require a
84
+ current read because not every shared fact is a Task event.
85
+
86
+ Cursors from another Home/Task, incompatible or invalid continuations, missing
87
+ baselines and source changes require a fresh bounded current read. Do not join
88
+ pages from different windows or versions. A failed original-detail digest
89
+ requires rediscovery; a content page must be reassembled only with its own
90
+ source digest. None of these reads consumes input or permits replay.
91
+
92
+ Frozen Run context is a different stream. Keep its exact Snapshot and
93
+ Assignment. `deltaRefs` is a launch hint, not a complete patch. The explicit
94
+ Run delta reports complete changed `refs` and `removedRefs` against its named
95
+ parent Snapshot, with large documents paginated. Apply removals only to that
96
+ frozen inventory; an empty delta is a no-op. Mutable Task facts and current
97
+ inbox clarifications must be refreshed separately within read scope; they
98
+ never expand the frozen Assignment or change a Review candidate.
99
+
100
+ Focused wakes use exact input refs, including delayed and same-timestamp
101
+ inputs. Timestamp-window discovery is under `--history` (or a historical wake
102
+ without refs), not new delivery authority. Original event and Message reads
103
+ remain available without rewriting or replaying them.
@@ -67,9 +67,49 @@ whose result is delivered; do not duplicate the same PR/MR across Tasks to
67
67
  substitute for missing ownership or acceptance evidence.
68
68
 
69
69
  Track PR/MR identity, state, commits, URL, merge time and evidence, not CI or
70
- deployment status. After merge, use `yui task publication verify` only when
71
- current authorization covers that external provider read. Otherwise retain
72
- reported evidence and state the verification gap.
70
+ deployment status. Verification is tool-neutral: the Leader may use any available
71
+ CLI or API within the existing external-read authority. No particular brand,
72
+ installation or second gh/glab query is required. A summary saying "merged" is
73
+ reported evidence, not a tool observation; `upsert --verified` is refused.
74
+
75
+ First record the exact local candidate, PR/MR URL (including its service host)
76
+ and target branch. Inspect that object with an authorized tool, checking the
77
+ repository, PR/MR identity, target branch, remote source head and integrated
78
+ commit against the actual output. Then use
79
+ `task publication verify <task>/<publication> --observation '<json>'`.
80
+ The JSON fields are `taskId`, `publicationId`, `projectId`, `provider`,
81
+ `repository`, `externalKind`, `externalId`, `externalUrl`, `targetBranch`,
82
+ `localCommit`, `state`, `headCommit`, `remoteCommit` (required for merged),
83
+ `observedAt`, `tool`, `command`, `output`, and optionally `mergedAt`.
84
+ Use full lowercase SHAs and ISO timestamps; `output` is a sanitized relevant
85
+ tool-response excerpt, not an unsupported conclusion or credentials. `command`
86
+ describes the exact CLI query or API request; Yui does not execute it.
87
+ Read the original output and resolve ambiguous/conflicting results before
88
+ asserting a known state. Do not fabricate evidence or normalize failure into merge.
89
+
90
+ The observation must name the current immutable Publication, match its candidate,
91
+ URL and target, and be recorded within 24 hours without future dating. The tool
92
+ read may precede the first upsert or a title-only update: these are bookkeeping,
93
+ not changes to the observed object. Observations must not predate the latest
94
+ material change in the immutable lineage (candidate, object, target or remote
95
+ facts), including a changed-then-restored candidate. When only bookkeeping has
96
+ changed, read the current record and bind the same actual result to its current
97
+ ID; do not repeat the external query just for that update.
98
+ Identical immediate retries reuse the saved receipt.
99
+ Later candidate/URL/target changes invalidate verification; use fresh evidence,
100
+ not an old JSON edited to look current. Inspect `publication show` after an
101
+ uncertain save before retrying. Original records and their full evidence remain.
102
+ These are caller-attested tool facts: Core checks exact binding and freshness,
103
+ not the semantic truth of arbitrary output. It trusts the authorized Leader's
104
+ inspection, not the executable's brand.
105
+
106
+ Without `--observation`, `verify` uses the optional gh/glab adapter and performs
107
+ an external read, requiring that read's existing authority. Missing adapters
108
+ are not missing user authorization when another authorized tool is available.
109
+ If no usable evidence or authorized read exists, retain reported evidence and
110
+ state that specific gap. A recorded verification is fixed evidence, not live
111
+ monitoring; no clock-based re-query is required just to archive it. Known later
112
+ changes must be recorded as successors before relying on delivery.
73
113
 
74
114
  Preserve each completion head as that acceptance's evidence. After an authorized
75
115
  reopen, finish the new work and record its own completion; retain the earlier
@@ -88,7 +128,7 @@ rewrite completion, or mark a merge verified to bridge an evidence gap.
88
128
 
89
129
  Adoption records a fixed decision, not remote verification or publication
90
130
  authority. The verify operation observes the exact Publication candidate through
91
- its provider and records contrary head/state facts as reported successors,
131
+ an authorized tool or the optional adapter and records contrary head/state facts as reported successors,
92
132
  invalidating previous verification. Metadata and verification updates may retain
93
133
  adoption while the candidate is unchanged; a changed candidate needs a new
94
134
  decision. Archived history is read-only to these adopt/verify operations.
@@ -122,6 +122,27 @@ context and fixed notification references, then chooses which still-valid
122
122
  assignment to continue. Released Leaders retain scoped diagnostic reads but
123
123
  cannot regain write authority.
124
124
 
125
+ Leader initialization is delivered separately from old inbox handling and
126
+ new queued business. A retained claim cannot block this lifecycle notification.
127
+ The current Leader reads `yui inbox list --view history --json`, then the exact originals and
128
+ prior effects. Claims survive unchanged; use `inbox ack` only after actual
129
+ handling, with the successor's own disposition. Do not claim an already-claimed
130
+ entry again. Repeated reconciliation or Controller restart does not settle
131
+ anything or repeatedly wake an idle handler.
132
+
133
+ A legally started GlobalRole successor with claims from a previous Session
134
+ receives one Session-pinned recovery Message in its existing inbox. It requests
135
+ the same inspection, not replay of those Messages. A stopped Global Session
136
+ is not started by this notice. Worker/Reviewer Assignment changes still require
137
+ the existing explicit handoff or retirement; no bulk transfer is implied.
138
+
139
+ Replacement waits for exact native/resource stop and writer release. Missing
140
+ proof requires repairing that observation or a genuinely missing user decision,
141
+ not a timeout, another name, force-ACK or record deletion. Uncertain old
142
+ notification submissions are released from scheduling without replay, retaining
143
+ their fixed wakes and `notification.resolved` evidence. They become explicitly
144
+ inspectable/settleable, not automatically accepted or resubmitted.
145
+
125
146
  ## Handle uncertainty and failed cleanup
126
147
 
127
148
  Never replay a notification whose acceptance is unknown. After evidence
@@ -29,6 +29,11 @@ final report. Current-Assignment `inbox show` is an authorized way to read new
29
29
  directed clarification during this turn without redispatch. Claim before
30
30
  handling and ack only after disposition; never use it to read another
31
31
  Assignment, expand Project permissions, or accept your own result.
32
+ For delayed or conflicting material, follow Runtime's
33
+ [temporal read contract](../yui-runtime/references/context-ordering.md).
34
+ Refresh relevant current originals without replacing the frozen Assignment.
35
+ Report genuine scope conflicts to Leader; older stage-only wording is not a
36
+ new prohibition after a legally authorized handoff.
32
37
 
33
38
  Leader clarification and continuation arrive as Messages in the exact bounded
34
39
  Context Pack. Read those authorized refs; do not request pack-external Leader
@@ -1 +1 @@
1
- 2
1
+ 3