@zq-silk/yui 0.16.1 → 1.0.0-alpha

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 (193) hide show
  1. package/ARCHITECTURE.md +12 -0
  2. package/ARCHITECTURE.zh-CN.md +8 -0
  3. package/README.md +9 -4
  4. package/dist/agent/agent.js +4 -9
  5. package/dist/agent/executionComponents.js +4 -4
  6. package/dist/agent/managedRuntimeEnvironment.js +0 -4
  7. package/dist/agentRun/agentRun.js +13 -23
  8. package/dist/artifacts/managedGit.js +3 -56
  9. package/dist/brief/taskBrief.js +3 -3
  10. package/dist/cli/agentConfigurationPicker.js +24 -21
  11. package/dist/cli/commandCatalog.js +18 -10
  12. package/dist/cli/roleWizard.js +41 -30
  13. package/dist/cli/updateCommand.js +35 -13
  14. package/dist/cli/updateOrchestrator.js +73 -44
  15. package/dist/cli/updatePorts.js +76 -86
  16. package/dist/cli/upgradeCommand.js +4 -8
  17. package/dist/cli.js +39 -33
  18. package/dist/commands/controllerCommands.js +2 -2
  19. package/dist/commands/executionAuditCommands.js +2 -2
  20. package/dist/commands/projectCommands.js +1 -1
  21. package/dist/commands/releaseCommands.js +9 -38
  22. package/dist/commands/taskCommands.js +91 -81
  23. package/dist/commands/taskCompletionGate.js +0 -117
  24. package/dist/commands/taskRoleRuntimeStatus.js +2 -2
  25. package/dist/commands/taskUpstreamCommands.js +93 -54
  26. package/dist/context/runContextPack.js +30 -54
  27. package/dist/context/runInputContract.js +9 -0
  28. package/dist/context/sessionBootstrapManifest.js +11 -19
  29. package/dist/controller/agentHostObservation.js +4 -2
  30. package/dist/controller/agentRuntimeObserver.js +4 -4
  31. package/dist/controller/clientRuntime.js +19 -44
  32. package/dist/controller/controller.js +24 -10
  33. package/dist/controller/fileSchedulerStoreAdapter.js +91 -24
  34. package/dist/controller/globalInputDelivery.js +31 -8
  35. package/dist/controller/globalRuntimeAttention.js +34 -0
  36. package/dist/controller/jobSupervisor.js +3 -3
  37. package/dist/controller/operatorNotification.js +31 -0
  38. package/dist/controller/providerRetryAdmission.js +3 -1
  39. package/dist/controller/providerRetryDelivery.js +136 -119
  40. package/dist/controller/runtime.js +2 -28
  41. package/dist/controller/sessionOwnerReconciliation.js +42 -24
  42. package/dist/controller/structuredProviderObservation.js +28 -1
  43. package/dist/controller/updateReconciliation.js +72 -20
  44. package/dist/coordination/workMailbox.js +4 -4
  45. package/dist/core/controllerIdentity.js +25 -0
  46. package/dist/core/controllerProcessIdentity.js +2 -2
  47. package/dist/core/controllerServer.js +4 -2
  48. package/dist/core/protocol.js +1 -1
  49. package/dist/doctor/doctor.js +2 -1
  50. package/dist/domain/validation.js +6 -0
  51. package/dist/event/taskEvent.js +3 -3
  52. package/dist/execution/workItemExecution.js +2 -2
  53. package/dist/executor/agentAdapter.js +28 -96
  54. package/dist/executor/agentConfigurationCatalog.js +13 -68
  55. package/dist/executor/agentConfigurationFields.js +120 -0
  56. package/dist/executor/agentConfigurationProbe.js +55 -80
  57. package/dist/executor/agentExecutor.js +11 -8
  58. package/dist/executor/effectiveLaunch.js +3 -3
  59. package/dist/executor/executorRegistry.js +0 -9
  60. package/dist/executor/fileRoleLaunchPlanner.js +12 -11
  61. package/dist/grant/capabilityGrant.js +2 -2
  62. package/dist/input/inputRequest.js +4 -4
  63. package/dist/integration/changeSet.js +3 -3
  64. package/dist/integration/integrationAttempt.js +3 -3
  65. package/dist/integration/integrationSourceApplication.js +1 -1
  66. package/dist/interaction/operatorPresentation.js +2 -1
  67. package/dist/job/durableJob.js +1 -1
  68. package/dist/job/jobRunner.js +2 -2
  69. package/dist/message/message.js +8 -6
  70. package/dist/message/messageContinuation.js +8 -9
  71. package/dist/milestone/milestone.js +3 -3
  72. package/dist/observability/executionAudit.js +1 -10
  73. package/dist/observability/runtimeIdentity.js +0 -23
  74. package/dist/output/agentConfigurationPresentation.js +4 -2
  75. package/dist/profile/agentProfile.js +3 -3
  76. package/dist/release/releaseHandover.js +2 -2
  77. package/dist/release/releaseIdempotencyStore.js +0 -23
  78. package/dist/release/releaseWorkflowPorts.js +8 -4
  79. package/dist/release/runtimeRelease.js +9 -7
  80. package/dist/repository/gitWorkspace.js +66 -19
  81. package/dist/repository/project.js +3 -3
  82. package/dist/repository/taskWorkspacePreparer.js +75 -68
  83. package/dist/resources/liveReferences.js +1 -1
  84. package/dist/resources/resourceRegistry.js +90 -44
  85. package/dist/resources/sqliteResourceRegistry.js +5 -7
  86. package/dist/review/reviewRound.js +5 -5
  87. package/dist/role/role.js +7 -8
  88. package/dist/runtime/acpProtocol.js +2 -3
  89. package/dist/runtime/acpSession.js +21 -5
  90. package/dist/runtime/agentDriverObservation.js +1 -1
  91. package/dist/runtime/agentEndpoint.js +4 -1
  92. package/dist/runtime/agentHost.js +25 -65
  93. package/dist/runtime/agentHostCleanup.js +85 -0
  94. package/dist/runtime/agentHostProtocol.js +3 -3
  95. package/dist/runtime/builtinAgentDrivers.js +46 -119
  96. package/dist/runtime/builtinTranscriptObserver.js +10 -6
  97. package/dist/runtime/codexAppServerRuntime.js +55 -89
  98. package/dist/runtime/codexInteractiveHost.js +1 -1
  99. package/dist/runtime/jsonLineChannel.js +35 -7
  100. package/dist/runtime/launchBroker.js +1 -1
  101. package/dist/runtime/processExitObservation.js +1 -1
  102. package/dist/runtime/providerContinuationReconciliationService.js +86 -38
  103. package/dist/runtime/providerRetry.js +15 -0
  104. package/dist/runtime/providerRuntimeIdentity.js +3 -3
  105. package/dist/runtime/providerRuntimeReconciler.js +12 -2
  106. package/dist/runtime/runtimeCoherence.js +7 -3
  107. package/dist/runtime/runtimeObservation.js +3 -3
  108. package/dist/runtime/sessionOwnerIdentity.js +1 -1
  109. package/dist/runtime/structuredProviderHost.js +106 -81
  110. package/dist/runtime/taskRuntimeIsolation.js +3 -3
  111. package/dist/runtime/tmuxAdapters.js +3 -3
  112. package/dist/scheduler/activeRoleRunDelivery.js +5 -1
  113. package/dist/scheduler/operatorInputNotificationProcessor.js +7 -17
  114. package/dist/scheduler/taskWake.js +1 -1
  115. package/dist/storage/baselineSchema.js +606 -0
  116. package/dist/storage/homeLayout.js +5 -16
  117. package/dist/storage/recordValidation.js +16 -4
  118. package/dist/storage/sqliteSchema.js +106 -1741
  119. package/dist/storage/sqliteStore.js +16 -14
  120. package/dist/storage/storageSchema.js +8 -7
  121. package/dist/storage/storageVersions.js +23 -16
  122. package/dist/storage/taskStore.js +3 -29
  123. package/dist/storage/upgrade/upgradeOrchestrator.js +14 -112
  124. package/dist/task/nextAction.js +33 -23
  125. package/dist/task/task.js +17 -8
  126. package/dist/task/taskActivation.js +5 -4
  127. package/dist/telemetry/sqliteTelemetryStore.js +2 -2
  128. package/dist/verification/gateArtifact.js +5 -3
  129. package/dist/verification/verificationPlan.js +6 -7
  130. package/dist/web/assets/assetManifest.js +2 -0
  131. package/dist/web/assets/client/app.js +72 -3
  132. package/dist/web/assets/client/components.js +2 -1
  133. package/dist/web/assets/client/i18n.js +2 -0
  134. package/dist/web/assets/client/taskSummary.js +345 -0
  135. package/dist/web/assets/client/taskSurface.js +44 -26
  136. package/dist/web/assets/client/view.js +33 -0
  137. package/dist/web/assets/shell.js +1 -0
  138. package/dist/web/assets/styles/cards.js +21 -0
  139. package/dist/web/webServer.js +39 -5
  140. package/dist/web/webSessions.js +165 -0
  141. package/dist/web/webSnapshot.js +23 -0
  142. package/dist/web/webTaskSurface.js +23 -0
  143. package/dist/workItem/workItem.js +6 -6
  144. package/dist/workspace/cleanupInspection.js +1 -9
  145. package/dist/worktree/managedWorkspace.js +3 -3
  146. package/docs/managed-turn-and-session-runtime.md +50 -7
  147. package/docs/managed-turn-and-session-runtime.zh-CN.md +36 -5
  148. package/docs/observability/README.md +47 -0
  149. package/docs/observability/README.zh-CN.md +37 -0
  150. package/docs/project-refresh.md +9 -0
  151. package/docs/project-refresh.zh-CN.md +8 -0
  152. package/docs/provider-retry.md +35 -0
  153. package/docs/release-workflow.md +70 -214
  154. package/docs/release-workflow.zh-CN.md +53 -157
  155. package/docs/roles-and-configuration.md +30 -0
  156. package/docs/roles-and-configuration.zh-CN.md +20 -0
  157. package/docs/sqlite-control-plane-design.md +48 -289
  158. package/docs/sqlite-control-plane-design.zh-CN.md +37 -53
  159. package/docs/storage-baseline.md +132 -0
  160. package/docs/storage-baseline.zh-CN.md +106 -0
  161. package/docs/task-delivery.md +110 -2
  162. package/docs/task-delivery.zh-CN.md +82 -2
  163. package/docs/task-discovery.md +9 -0
  164. package/docs/task-discovery.zh-CN.md +6 -0
  165. package/docs/testing/verification-levels.md +42 -164
  166. package/docs/testing/verification-levels.zh-CN.md +29 -115
  167. package/i18n/README.zh-CN.md +7 -4
  168. package/package.json +1 -1
  169. package/skills/yui-leader/SKILL.md +11 -0
  170. package/skills/yui-leader/references/execution.md +22 -0
  171. package/skills/yui-leader/references/planning.md +6 -2
  172. package/skills/yui-operator/SKILL.md +45 -13
  173. package/skills/yui-operator/references/task-delivery.md +99 -0
  174. package/skills/yui-runtime/SKILL.md +5 -3
  175. package/skills/yui-runtime/references/publication.md +56 -5
  176. package/skills/yui-runtime/references/recovery.md +12 -2
  177. package/dist/runtime/agentHostCompatibility.js +0 -127
  178. package/dist/storage/migrations/agentFailureContext.js +0 -22
  179. package/dist/storage/migrations/agentRunContract.js +0 -159
  180. package/dist/storage/migrations/artifactsToGit.js +0 -338
  181. package/dist/storage/migrations/collapseWorktreeLayout.js +0 -963
  182. package/dist/storage/migrations/currentInputContract.js +0 -86
  183. package/dist/storage/migrations/currentRuntimeContract.js +0 -228
  184. package/dist/storage/migrations/historicalVerificationPlan.js +0 -35
  185. package/dist/storage/migrations/integrationContinuation.js +0 -105
  186. package/dist/storage/migrations/narrowAgentFailureContext.js +0 -65
  187. package/dist/storage/migrations/notificationOnlyWakes.js +0 -74
  188. package/dist/storage/migrations/removeRuntimeGeneration.js +0 -207
  189. package/dist/storage/migrations/submitIntent.js +0 -126
  190. package/dist/storage/migrations/unifyHomeLayout.js +0 -925
  191. package/dist/storage/migrations/verificationPlanV1.js +0 -162
  192. package/dist/storage/migrations/verificationPolicy.js +0 -74
  193. package/dist/storage/migrations/workItemHistory.js +0 -46
@@ -27,201 +27,54 @@ system sits behind `ReleaseWorkflowPorts`
27
27
  external ports exercise recovery without real GitHub, npm, git, Controller,
28
28
  or model effects.
29
29
 
30
- ## Controller handover fix in 0.16.1
31
-
32
- The updater's stop and exact-identity restoration children now explicitly receive
33
- the parent updater's handover-lock owner identity. They no longer wait on their
34
- own parent's lock; unrelated callers remain fenced. Storage remains at version 37.
35
-
36
- An already-installed older updater, including 0.15.12 or 0.16.0, cannot gain this
37
- fix merely by staging the new package. If it reports `CONTROLLER_HANDOVER_TIMEOUT`
38
- before activation, inspect the original Controller and lock ownership. Once the
39
- failed updater has released its own lock and the original Controller is confirmed
40
- healthy, normally stop it with that installed release's `yui controller stop`,
41
- then retry `yui update`. This preserves managed Agent Sessions and retains the
42
- normal preflight, backup, migration and verification boundaries. Do not delete
43
- an active lock or force-kill a Controller to bypass the failure.
44
-
45
- ## Pre-1.0 contract cleanup
46
-
47
- Version 0.16.0 retires runtime compatibility before the final
48
- 1.0 baseline cutover. It does not reset storage numbering.
49
- Storage 27→28 normalizes only provable singleton Role dispatch dedupe keys;
50
- the old migration ledger, Messages, Task results and unconfirmed effects remain
51
- unchanged. Ordinary opens require storage 37. Existing Homes advance only through
52
- the explicit upgrade boundary; no runtime dual-reader is added.
53
-
54
- This is a breaking pre-1.0 change:
55
-
56
- - `message send` uses `--intent`; `--wake-policy` is no longer accepted by the
57
- CLI or capability API. Draft edits preserve intent.
58
- - Internal command integrations implement `notifyMailboxChanged`; the Task-only
59
- notification adapter has been removed with its callers updated.
60
- - ACP peers must report `configOptions`; there is no `modes`/`set_mode` path.
61
- - Release recovery requires a pinned Home and installation prefix. Unpinned
62
- identities remain unknown, and incomplete handover locks remain fenced.
63
- - Development link/unlink requires the current registry. It does not discover
64
- or adopt older NVM registrations or reconstruct orphan links.
65
- - GC no longer discovers retired deployment layouts or reconstructs removed
66
- worktrees. Unsupported quarantine evidence is retained, never purged as if
67
- it were a current move receipt.
68
- - `task activate` consumes an existing request; no request means no resource
69
- adoption. Request creation, deferred admission and atomic workspace adoption
70
- remain separate, using the same current boundary.
71
- - `task integration queue` and its state machine are removed. The Agent chooses
72
- each WorkItem result's order and strategy and calls the atomic Integration
73
- operations; exact checks, target CAS and completion obligations remain.
74
-
75
- Storage 28→29 preserves every former queue payload verbatim in a Task event
76
- `integration.queue-retired`, with its original queue ID, before dropping the
77
- active table. Event IDs advance past both the stored counter and existing
78
- history. This does not accept delivery, generate an Integration or replay work.
79
- Existing Integrations and Jobs stay intact. Inspect `task event list <task>`
80
- and the referenced WorkItem/Integration before deciding what remains to do;
81
- retiring the queue does not settle an unfinished Integration.
82
-
83
- Storage 29→30 retires Run-linked wakes into `wake.run-link-retired` Task events
84
- with the complete original payload. Current notification IDs, delivery status
85
- and references remain intact, using wake schema 2; Run termination no longer
86
- consumes notifications. Live Runs, owned retries and unresolved claims referring
87
- to a retiring wake block both preflight and migration. The migration does not
88
- stop execution or fabricate acceptance. Global Session sets use an explicit
89
- `providerBinding: null` when no controlled binding exists.
90
-
91
- Storage 30→31 makes every Review's scope explicit. Missing/null scope in a valid
92
- older WorkItem Review becomes `work-item`; Task-final candidate evidence and
93
- the old ledger are unchanged. New and retried Reviews always write their scope.
94
-
95
- Storage 31→32 removes WorkItem `historicalState` from the current record.
96
- Before removal, the entire original payload is preserved verbatim in a
97
- `work-item.execution-state-retired` Task event. Current status, scope, Candidates
98
- and execution groups are unchanged; no Run or acceptance is created. Unrecognized
99
- historical shapes fail without changing the record or advancing the ledger.
100
-
101
- Storage 32→33 retires the Leader rollout/budget settings and VerificationPlan
102
- rollout modes. Active plan bodies gain an explicit schema version; their checks
103
- remain unchanged, while retired Knowledge bodies are preserved. Integration
104
- records gain explicit `rerunChecks: false`, and shadow reuse counters are removed
105
- from cached artifacts. Original settings remain recoverable from the explicit
106
- upgrade backup. This is an approved behavior change, not an assertion that
107
- `record`, `reuse` and `enforce` meant the same thing.
108
-
109
- Admitted `running`/`validating` plan gates block preflight and migration; settle
110
- them with the old release first. No in-flight Job is relabelled under the new
111
- proof contract. That cutover's v3 verification-plan digest excluded older cache entries from
112
- automatic reuse without rewriting historical Job/Integration results or deleting
113
- their logs. Historical plan interpretation is frozen inside the migration
114
- directory so earlier migrations keep their original semantics.
115
-
116
- The current clean-candidate proof uses a v5 L2-only execution digest. Both local and
117
- Job-backed verification check candidate cleanliness, branch and exact HEAD
118
- before publishing reusable success; older cache identities cannot silently pass
119
- this boundary. Existing records/logs remain readable and admitted Jobs are not
120
- relabeled under a new digest. Settle old attempts with their matching contract,
121
- or explicitly abandon them before starting another operation.
122
-
123
- The L1 runner, selector and current plan/artifact type branches are removed.
124
- Storage 34→35 archives the original Project plan payloads and L1 artifacts/logs
125
- in `storage_migration_archive`, then adopts VerificationPlan schema 2 without L1.
126
- The archive is raw audit data, not an alternate execution reader or cache.
127
- Settled historical ChangeSet-source Integrations become full-payload Task Events;
128
- live workspaces, unsettled Jobs and adoption references block their retirement.
129
- The complete earlier migration ledger remains unchanged.
130
-
131
- Session custody now has one source, SQLite. Legacy `launch-env` owner rows or
132
- files in `runtime/session-owners` block this cutover: use the old release to
133
- inspect and settle their exact resources, then explicitly archive obsolete
134
- files outside the active Home. The migration does not kill, infer ownership,
135
- repair malformed records or rewrite immutable Session Manifests.
136
-
137
- Storage 35→36 preserves historical Agent errors and explicitly marks missing
138
- failure configuration as unavailable. Storage 36→37 narrows recorded failure
139
- context to native metadata-query inputs, preserving the original snapshot and
140
- empty optional identity placeholders in migration audit. Current error readers
141
- do not depend on the execution snapshot protocol or reconstruct missing history.
142
- Configuration rejection preserves input without automatic retry; an authorized
143
- Agent can inspect failure-scoped model capabilities, correct the intended
144
- configuration, and explicitly retry the rejected notification.
145
-
146
- `task turn` and the `yui-dev` completion identity are no longer supported.
147
- Before rollout, replace Sessions whose old Manifest still names `task turn`,
148
- and explicitly remove/archive old `yui-dev` completion blocks before installing
149
- current `yui` completion. User shell files are never rewritten by storage migration.
150
- Host control/event compatibility and updater handover safety remain unchanged.
151
-
152
- Storage 33→34 removes Message `wakePolicy` and activation `origin` from current
153
- records, preserving their original representations in audit Events. Historical
154
- save-only Messages become `intent: record`; other user/operator Messages without
155
- intent become `discuss`. Runtime readers never infer a missing stored intent.
156
- Editing record-only context does not wake the Leader. Completion reads actual
157
- pending message references, including an explicit handoff of previously saved context.
158
-
159
- Draft editing also preserves request identity: messages bound to submission,
160
- queue/steer or handoff requests cannot change body in place. Use a new Message
161
- and request ID; identical-body updates are no-ops. Unkeyed discussion edits
162
- honor pending/failed activation, while develop edits never start planning or
163
- create/retry activation. These are operation-boundary fixes, not a new storage
164
- format or a repair of previously edited historical content.
165
-
166
- An origin-less pending immediate Draft activation blocks preflight and migration,
167
- including on a stopped Task. Activate or cancel it explicitly with the old release
168
- first. An admitted current request needs no second origin gate: cancellation,
169
- planning deferral, execution state and exact Session authority remain enforced.
170
- Old origin metadata, including settled-request history, remains in
171
- `task.activation-origin-retired` Events; this never fabricates authorization.
172
-
173
- New `job start` calls require `--request-id`; RPC callers supply `requestId`, and
174
- the capability boundary supplies its invocation identity. There is no implicit
175
- content-addressed request or anonymous Job constructor. Existing Jobs retain
176
- their operation evidence and remain addressable by ID. Retrying the same explicit
177
- request is idempotent, changed input conflicts, and Integration recovery still
178
- finds its original Job across Session replacement. Choosing a new request ID is
179
- an explicit new operation, not recovery of an uncertain earlier result.
180
-
181
- Core Scheduler readers and persistence operations are required ports. A missing
182
- Session/event reader cannot be interpreted as empty evidence or skipped error
183
- persistence. Task execution and Web projections read the current store directly;
184
- queue admission requires its Task lifecycle read. Exact dispatch settlement
185
- remains separate and does not gain an archive gate that could lose late evidence.
186
- Observer, config, Knowledge and workspace-cleanup Store readers are also required;
187
- test doubles implement those contracts rather than selecting production fallbacks.
188
-
189
- Task listing and `/api/dashboard` now expose only the bounded catalog; remove
190
- `--view compact` from callers and use per-Task reads for detail. Scheduler
191
- catalog projections are required internal ports, not optional full-scan adapters.
192
- Extra `schema.json`/`state.json` files cannot override SQLite's version or be
193
- used to reset a development Home; upgrades leave unrelated files untouched.
194
- A missing database in a non-empty Home remains a refusal to initialize.
195
- Unrecognized writer leases are diagnosed without adoption or deletion.
196
-
197
- `controller status` always reports identity and retains the nonzero health exit
198
- for contradictory storage. `YUI_STATUS_IDENTITY` no longer selects another
199
- contract. Update-owned lifecycle capture uses the same resource collector
200
- directly, without requiring the old Home to pass current-schema health.
201
-
202
- Additional current boundaries:
203
-
204
- - Project/artifact file locks and handover locks require exact process-generation
205
- evidence. Missing/invalid owners or unreadable OS identity remain fenced;
206
- age alone never proves a creator exited. No PID-only positive fallback remains.
207
- - PR head lookup uses one `gh pr list --head ... --state open` query. Only an
208
- empty, valid array proves absence. Transport errors, malformed identities and
209
- multiple matches fail without attempting creation.
210
- - Existing Git operations cannot be adopted without the Integration's original
211
- progress receipt. Preserve their files and diagnose explicitly; current
212
- receipt-backed conflict/Job continuation remains supported.
213
-
214
- Before rollout, settle old executions and use explicit cleanup for unsupported
215
- locks, links or quarantines. Preserve those records until their owner and
216
- disposition are established; the runtime does not choose recovery for them.
217
-
218
- The later baseline cutover must first establish a verified bridge/export to the
219
- chosen current format, then replace the old initialization/migration chain with
220
- one clean baseline. Only then remove pre-baseline migrations and their historical
221
- fixtures. Reset the storage baseline once; do not reset it again when tagging
222
- 1.0.0. Keep unknown-version rejection, exact process/Host identity checks and
223
- durable audit evidence. Version tags and real migration/publication effects
224
- require their separate release authorization.
30
+ ## Clean baseline release: 1.0.0-alpha
31
+
32
+ 0.16.2 remains the frozen historical bridge. The 1.0.0-alpha runtime starts the
33
+ distinct storage **1.0** baseline and carries no old migration chain or
34
+ conversion tool. Package 1.0.0 will reuse the final verified prerelease storage
35
+ contract without another reset.
36
+
37
+ Storage versions have two levels. Default updates may advance only contiguous
38
+ minor versions within the same major; pinning a package does not authorize a
39
+ cross-major conversion. Current Yui-owned envelopes and protocols start at 1,
40
+ without resetting business revisions, epochs or audit evidence.
41
+ Any persistent change after an alpha is published requires an explicit new
42
+ minor transition; published schema definitions must not be silently replaced.
43
+ Current bounded automatic recovery, lock waiting, transactions, replay
44
+ protection and valid exact-identity caches remain normal runtime behavior.
45
+
46
+ Use the exact package version `1.0.0-alpha` to opt into this baseline. Stable
47
+ releases use npm `latest`; prereleases use `next`, never the stable default.
48
+
49
+ The old-v37 converter is a separate archive. Its source/target verification,
50
+ offline boundary, full backup, original-payload audit, cold startup and rollback
51
+ are specified in [Storage baseline 1.0](./storage-baseline.md).
52
+ Publish its archive and checksum as durable 1.0.0-alpha release attachments alongside
53
+ the exact tested runtime package. Expiring CI artifacts alone are insufficient.
54
+ The alpha-only `baseline-release` job runs after npm publication, uploads missing
55
+ attachments to a draft without overwriting existing files, downloads and compares
56
+ every attachment against the tested artifact, then publishes the prerelease.
57
+ A retry verifies matching existing attachments; a different byte or an incomplete
58
+ already-published Release is an error, not permission to replace release evidence.
59
+ If this job fails after npm publication, resume only this job with the same
60
+ retained artifacts rather than republishing or rebuilding the package.
61
+ The runtime tarball must contain neither tools/ nor dist/storage/migrations/.
62
+
63
+ Use `yui update --version <exact-version>` for an exact published package.
64
+ Staged metadata must match the requested version, and target-owned storage
65
+ preflight runs before activation and again under the maintenance fence.
66
+ An unsupported Home remains unchanged; use the independent converter rather
67
+ than replacing the global CLI first. Current update/activation children must
68
+ explicitly identify their handover-lock owner.
69
+
70
+ Restoration checks the captured executable/argv, package version, Controller
71
+ protocol and both storage-version bounds against status and live identity.
72
+ Missing contract fields are errors, not an older-Controller exception.
73
+
74
+ The converter source, frozen endpoint fixture and converter-specific tests are
75
+ release-only deliverables for 1.0.0-alpha. Remove them from the 1.0.0 development line
76
+ only after the 1.0.0-alpha release attachments and checksums are durably available
77
+ and verified. Do not delete the only conversion path before publication.
225
78
 
226
79
  ## Authorization model
227
80
 
@@ -270,7 +123,7 @@ Candidate and Task-final ReviewRound records must all carry that one contract.
270
123
  Conflicting records fail closed; there is no rebind event, recovery command, or
271
124
  second contract state machine.
272
125
 
273
- ## Persistent Agent Host compatibility
126
+ ## Current Agent Host boundary
274
127
 
275
128
  A running Host keeps its original Endpoint implementation. It records exact
276
129
  Session/attempt/native-Turn facts in the existing durable Inbox before contacting
@@ -284,24 +137,27 @@ the long-lived Session environment. This preserves pre-adoption evidence even
284
137
  when the frozen Run workspace differs from the Role's default; later activity
285
138
  and terminal facts still resolve solely by their own native input identities.
286
139
 
287
- The supported Host boundary is control `yui-agent-host/v5`, event source
288
- `yui-agent-host-events/v1`, and Controller RPC version 4. Hosts advertising
289
- `storage=controller-owned` do not open the Home database, including for process
290
- custody, native account locations, or execution-environment checks. Home 22
291
- declares the additive Inbox source envelope; valid older Inbox v1 facts and
292
- domain history remain readable. Future changes must retain this wire boundary
293
- or reject incompatible live producers before changing storage. CLI wrapper
294
- refresh and a successful new `doctor` are not Host compatibility proofs.
295
-
296
- `upgrade`, the staged target's `update` preflight, and release activation inspect
297
- live Host capabilities independently. An old Host without this capability,
298
- including an idle Host or one whose response is unconfirmed, blocks adoption.
299
- Checks are repeated at the existing fenced/quiesced handover boundary before
300
- migration or promotion. No Host is killed, replaced, or reloaded by these checks.
301
- Let existing work settle and preserve original pending input/result evidence;
302
- then an authorized Operator can select a safe Session replacement/cleanup before
303
- retrying. Installing this change cannot repair already-loaded legacy Host code
304
- or collect a terminal that that code never durably emitted.
140
+ The current Host boundary is control `yui-agent-host-control/v1`, event source
141
+ `yui-agent-host-events/v1`, and Controller RPC version 1. Hosts do not open the
142
+ Home database, including for process custody, native account locations, or
143
+ execution-environment checks. Only the Controller owns storage and resolves
144
+ durable facts; malformed current input fails at its normal protocol boundary.
145
+
146
+ Breaking upgrades do not inherit historical Hosts or processes. Runtime startup,
147
+ `upgrade`, `update`, and release activation no longer scan old Host sockets or
148
+ processes, infer their capabilities, or negotiate a compatibility handoff. Use a
149
+ clean runtime environment; this is not permission to discard pending work or
150
+ kill resources of uncertain ownership. Current Controller restart, exact
151
+ process-generation checks, handover locks, Session authority and event replay
152
+ protection remain enforced.
153
+
154
+ Storage upgrades are limited to the current major's explicit minor steps.
155
+ Cross-major conversion is independently authorized and is not a runtime fallback.
156
+ Session CLI refresh only retargets the current two-argument quoted wrapper
157
+ named by a valid Manifest. It does not convert retired wrapper forms. Runtime
158
+ diagnostics do not interpret `schema.json`, `state.json`, or a whole-map release
159
+ idempotency file; current SQLite data and per-key release receipts remain the
160
+ authorities, and unrelated files are left untouched.
305
161
 
306
162
  `task role status`, `task role list`, and `task role session inspect` expose Host
307
163
  reporting alongside durable Run state. Pending native results or known reporting
@@ -20,150 +20,43 @@ Agent 选择一个预先声明的计划,设施从持久状态驱动该计划
20
20
  (`src/release/releaseWorkflowPorts.ts`)之后。可用临时 SQLite 和确定性的外部端口测试
21
21
  恢复逻辑,无需真实 GitHub、npm、git、Controller 或模型效果。
22
22
 
23
- ## 0.16.1 的 Controller 交接修复
24
-
25
- 升级器的停止与精确身份恢复子进程,现在显式接收父升级进程的交接锁归属身份,
26
- 不再等待自己父进程持有的锁;无关调用仍被阻止。存储版本保持 37。
27
-
28
- 已经安装的旧升级器(包括 0.15.12、0.16.0)不会因为暂存新包而提前获得此修复。
29
- 若其在激活前报告 `CONTROLLER_HANDOVER_TIMEOUT`,先检查原 Controller 和锁的归属。
30
- 确认失败的升级器已释放自己的锁、原 Controller 仍健康后,使用已安装版本的
31
- `yui controller stop` 正常停止 Controller,再重试 `yui update`。此操作保留受管
32
- Agent Session,仍完整执行预检、备份、迁移和验证;不要删除活动锁或强杀 Controller
33
- 来绕过失败。
34
-
35
- ## 1.0 前的契约清理
36
-
37
- 版本 `0.16.0` 先清退运行时兼容分支,尚未执行最终 1.0 基线切换,也不重置
38
- 存储编号。存储 `27→28` 只规范化可明确识别的单条 Role 调度去重键,旧迁移账本、
39
- Message、Task 结果和不确定外部效果保持不变。普通打开要求存储 37;已有 Home 只通过
40
- 显式升级入口前进,不增加运行时双读。
41
-
42
- 这是一次 1.0 前的破坏性变更:
43
-
44
- - `message send` 统一使用 `--intent`;CLI 与 capability API 不再接受 `--wake-policy`
45
- 或 `wakePolicy` 参数,Draft 编辑保留原提交意图。
46
- - 内部命令集成实现 `notifyMailboxChanged`;Task-only 通知适配器及其调用已统一。
47
- - ACP peer 必须回报 `configOptions`,不再走 `modes`/`set_mode` 路径。
48
- - Release 恢复要求精确 Home 与安装 prefix。缺少固定目标的效果保持 unknown,
49
- 身份不完整的 handover lock 保持围栏。
50
- - 开发 link/unlink 要求当前登记文件,不搜索或接管旧 NVM 登记,不重建孤立链接。
51
- - GC 不再发现旧 deployment 布局或重建已删除 worktree;不受支持的 quarantine
52
- 证据保留,不会被当成当前 move 回执清除。
53
- - `task activate` 只消费已有请求;没有请求就不采用资源。请求创建、延后准入和
54
- 原子工作区采用仍分开,并复用同一个现行执行边界。
55
- - 删除 `task integration queue` 及其状态机。Agent 选择每个 WorkItem 结果的顺序与
56
- 策略,逐项调用原子 Integration;保留精确检查、目标 CAS 和完成义务。
57
-
58
- 存储 `28→29` 在删除活动队列表前,将每条旧 payload 原样保存在
59
- `integration.queue-retired` Task 事件中,并保留原队列 ID。事件编号越过已有计数器
60
- 和历史最大 ID。此操作不验收交付、不生成 Integration、不重放工作;已有 Integration
61
- 与 Job 保持不变。通过 `task event list <task>` 和引用的 WorkItem/Integration
62
- 判断剩余工作;队列退役不代表未完成的 Integration 已结算。
63
-
64
- 存储 `29→30` 将 Run-linked wake 的完整原文移入 `wake.run-link-retired` Task 事件。
65
- 现有通知保留 ID、投递状态和引用,使用 wake schema 2;Run 终态不再消费通知。
66
- 引用待退役 wake 的活动 Run、受管重试或未决 claim 会同时阻止预检和迁移;
67
- 迁移不停止执行、不编造接受。Global Session 没有受控 binding 时统一显式保存
68
- `providerBinding: null`。
69
-
70
- 存储 `30→31` 将 Review scope 统一为显式值:有效旧 WorkItem Review 的缺失/null
71
- scope 转为 `work-item`,Task-final 候选证据和原迁移账本不变。新建和重试均显式写入 scope。
72
-
73
- 存储 `31→32` 从当前 WorkItem 移除 `historicalState`,移除前将完整原始 payload
74
- 原样保存在 `work-item.execution-state-retired` Task 事件。当前状态、工作范围、
75
- Candidate 和执行组不变,不生成 Run 或验收。未知历史形态会报错,记录和迁移账本不前进。
76
-
77
- 存储 `32→33` 清退 Leader 过渡/预算配置以及 VerificationPlan 的模式。
78
- 活动计划显式补上 schema 版本,实际检查保持不变;已退役 Knowledge 原文保留。
79
- Integration 显式补入 `rerunChecks: false`,缓存 Artifact 移除试运行复用计数。
80
- 原配置可从显式升级备份恢复。这是已确认的行为变更,不将三种旧模式声称为等价。
81
-
82
- 已接纳且仍为 `running/validating` 的计划验证会阻止预检和迁移,需先用旧版本完成
83
- 结算;不会把运行中的 Job 改标为新证据契约。该次切换使用 v3 验证摘要,使更早缓存不再被
84
- 自动复用,不重写历史 Job/Integration 结果或删除其日志。旧计划解析冻结在迁移
85
- 目录中,早期迁移保持原有语义。
86
-
87
- 现行干净候选证明采用 v5 L2-only 执行摘要。Job 和本地验证都在发布可复用成功前,
88
- 检查候选工作区的干净状态、分支和精确 HEAD;旧缓存身份不能绕过这一边界。
89
- 旧记录和日志保持可读,已接纳 Job 不会被改标为新摘要。应先按原契约结算旧尝试,
90
- 或明确放弃后再开始新操作。
91
-
92
- L1 执行入口、选择器及当前计划/artifact 类型分支已移除。存储 `34→35` 将
93
- 原始 Project 计划、L1 artifact 与日志保存在 `storage_migration_archive`,
94
- 当前计划改为不含 L1 的 schema 2。存档只是原始审计数据,不是执行 reader 或缓存。
95
- 已结算的旧 ChangeSet-source Integration 转为完整 payload 的 Task 事件;
96
- 仍有工作区、未结算 Job 或 adoption 引用时阻止退休。旧迁移账本不变。
97
-
98
- Session 归属统一使用 SQLite。旧 `launch-env` owner 行或 `runtime/session-owners`
99
- 中的文件会阻止切换:先使用旧版本检查并释放精确资源,再明确将旧文件归档到
100
- 活动 Home 之外。迁移不杀进程、不推断归属、不修复损坏数据,也不重写不可变 Manifest。
101
-
102
- 存储 `35→36` 保留历史 Agent 错误,并将缺失的失败配置明确标为不可用。
103
- 存储 `36→37` 将已记录的失败上下文缩小为原生元数据查询所需输入,原始快照和
104
- 空的可选身份占位值保存在迁移审计中。当前错误读取不依赖执行快照协议,也不
105
- 重建缺失历史。配置拒绝保留原始输入但不自动重试;有权限的 Agent 可查询该次
106
- 失败的模型能力、修正原本要求的配置,再显式重试被拒绝的通知。
107
-
108
- 不再支持 `task turn` 和 `yui-dev` 补全身份。上线前应替换仍依赖 `task turn`
109
- Manifest 的 Session;明确卸载/归档旧 `yui-dev` 补全块后,再安装现行 `yui` 补全。
110
- 存储迁移不会修改用户 shell 文件。Host 控制/事件兼容与 updater 交接安全检查保持不变。
111
-
112
- 存储 `33→34` 从当前记录移除 Message `wakePolicy` 与激活 `origin`,原始表达
113
- 保存在审计事件。旧的仅记录消息转换为 `intent: record`,其他缺少意图的
114
- user/operator 消息转换为 `discuss`;运行时不再解释缺失的持久化意图。
115
- 编辑仅记录内容不会唤醒 Leader。完成检查读取实际待投递消息引用,也涵盖显式交接
116
- 此前仅保存的内容。
117
-
118
- Draft 编辑同时保护请求身份:已经绑定 submission、queue/steer 或交接请求的消息
119
- 不能原地改正文,需新建消息并使用新请求 ID;相同正文更新为无操作。未绑定请求
120
- 身份的讨论编辑仍遵守 pending/failed 激活状态,develop 编辑不启动规划或创建/
121
- 重试激活。这是操作边界修复,不改变存储格式,也不猜测修复过去已被编辑的原文。
122
-
123
- Draft 中缺少 origin 且仍 pending 的旧 immediate 激活请求会阻止预检和迁移,即使 Task
124
- 已停止执行。必须先用旧版本显式激活或取消;升级不替用户做这个决定。当前已接纳
125
- 请求不再经过第二次来源门槛,但取消、planning 延后、执行状态与精确 Session 权限
126
- 仍需检查。旧来源及 settled 请求历史保留在 `task.activation-origin-retired` 事件。
127
-
128
- 新 `job start` 必须带 `--request-id`;RPC 必须提供 `requestId`,capability
129
- 入口使用 invocation 身份。不再从命令内容隐式生成请求,也不再构造匿名 Job。
130
- 已有 Job 的操作证据和按 ID 读取保持不变;相同请求重试防重、不同输入冲突,
131
- Integration 在 Session 替换后仍找回原 Job。新 request ID 表示明确的新操作,
132
- 不是对旧未知结果的自动重放。
133
-
134
- Scheduler 核心读取和持久化操作成为必需接口,缺少 Session/Event 读取不再被当作
135
- 空证据,也不能跳过错误持久化。执行及 Web 投影直接读取当前 Store;
136
- 消息入队必须读取 Task 生命周期。精确投递结算仍独立,不增加会丢失迟到证据的归档门槛。
137
- Observer、配置、Knowledge 与工作区清理所需 Store 读取也成为必需接口;
138
- 测试替身实现现行合同,不再令生产代码降级。
139
-
140
- Task 列表及 `/api/dashboard` 只保留有界目录;调用方去掉 `--view compact`,
141
- 详情使用单 Task 读取。Scheduler 目录索引是必需接口,不再兼容缺失时的全量扫描。
142
- 额外 `schema.json`/`state.json` 不覆盖 SQLite 版本,也不用于开发 Home reset;
143
- 升级保留无关文件。非空 Home 缺少数据库时仍拒绝初始化。
144
- 不认识的 writer lease 明确诊断,不接管、不删除。
145
-
146
- `controller status` 固定输出身份信息,存储矛盾仍返回非零健康退出码;
147
- `YUI_STATUS_IDENTITY` 不再选择另一套契约。升级侧直接复用资源采集器读取生命周期,
148
- 无需让旧 Home 先通过当前 schema 的健康校验。
149
-
150
- 现行边界进一步收敛:
151
-
152
- - Project/Artifact 文件锁及 handover lock 要求精确进程代际证据。owner 缺失、
153
- 格式不完整或 OS 身份不可读时保持围栏;仅凭年龄不能证明创建者退出,不再用
154
- PID-only 存活判断代替身份确认。
155
- - PR head 查询只调用 `gh pr list --head ... --state open`。仅有效空数组证明不存在;
156
- 传输失败、身份格式错误和多个匹配都不允许继续创建。
157
- - 已有 Git 操作缺少原 Integration 进度回执时不再被接管。保留文件并明确诊断;
158
- 有精确回执的正常冲突/Job 续作仍受支持。
159
-
160
- 发布前应先收敛旧执行,对不受支持的锁、链接和隔离资源做显式清理。归属与处置尚未
161
- 确定时保留原记录,运行时不替 Agent 选择恢复方案。
162
-
163
- 后续基线切换必须先验证到目标格式的桥接或导出,再用一个干净基线替换旧初始化和迁移链,
164
- 之后才能删除基线之前的迁移及历史夹具。存储基线只重置一次,不在发布 `1.0.0` 时再次
165
- 重置。未知版本拒绝、精确进程/Host 身份检查与持久审计证据仍应保留。版本 tag、真实
166
- Home 迁移和发布效果需要各自的发布授权。
23
+ ## 纯净基线版本:1.0.0-alpha
24
+
25
+ 0.16.2 保留为冻结历史桥接版。1.0.0-alpha 运行包启用独立的存储 **1.0**,
26
+ 不携带旧迁移链或一次性转换工具;之后的 1.0.0 复用最终已验证的预发布存储契约,
27
+ 不再重置。
28
+
29
+ 存储采用主版本、小版本两级编号,默认更新只允许同主版本内连续的小版本升级。
30
+ 指定软件版本不代表授权跨存储主版本。当前 Yui 自有格式和协议从 1 开始,
31
+ 但不重置业务 revision、epoch 或审计证据。
32
+ alpha 发布后如需改变持久化契约,必须声明新的小版本迁移,不能静默改写
33
+ 已发布基线。有界自动恢复、锁等待、事务、重放保护和精确身份匹配的有效缓存
34
+ 都是当前运行能力,不作为历史兼容删除。
35
+
36
+ 使用精确软件版本 `1.0.0-alpha` 主动选择新基线。正式版使用 npm `latest`,
37
+ 预发布版使用 `next`,不能覆盖默认稳定版本。
38
+
39
+ 恢复 Controller 时,status 和 live identity 都必须匹配此前捕获的执行文件、
40
+ 参数、软件版本、Controller 协议和存储版本上下界。缺少字段直接报错,
41
+ 不再为较早的 Controller 放宽校验。
42
+
43
+ 旧 v37 转换器独立分发;来源与目标校验、离线边界、完整备份、原始负载审计、
44
+ 冷启动和回滚见[存储基线 1.0](./storage-baseline.zh-CN.md)。
45
+ 发布时将转换包及校验和作为 1.0.0-alpha 的长期附件,与确切测试过的运行包一同保留;
46
+ 不能只依赖会过期的 CI artifact。运行 tarball 不得包含 tools/ 或旧迁移目录。
47
+ alpha 专用 `baseline-release` 在 npm 发布成功后向草稿上传缺少的附件,不覆盖
48
+ 已有文件;逐个下载并与经过测试的产物比较后,才公开预发布 Release。
49
+ 重试只接受字节一致的已有附件;字节不同或已公开 Release 缺少附件都明确失败,
50
+ 不自动覆盖发布证据。若 npm 已发布而此步骤失败,只用同一批保留产物重跑该
51
+ job,不重新构建或再次发布 npm 包。
52
+
53
+ 转换器源码、冻结终点样本及专用测试只服务于 1.0.0-alpha 的独立交付。
54
+ 必须先确认 1.0.0-alpha 长期发布附件和校验和可取得且验证通过,才能在 1.0.0
55
+ 开发线上移除它们;不能在发布前删掉唯一转换入口。
56
+
57
+ `yui update --version <exact-version>` 选择精确发布包,实际暂存版本必须匹配。
58
+ 激活前及维护锁内分别执行目标包的存储预检。不支持的 Home 保持不变,应使用
59
+ 独立转换工具,不能先覆盖全局 CLI。当前交接子进程必须显式提供锁持有者身份。
167
60
 
168
61
  ## 授权模型
169
62
 
@@ -204,7 +97,7 @@ Session 使用普通的 `yui` 命令,兼容性由协议和存储身份检查
204
97
  Task-final 的 ReviewRound 记录必须全部携带那唯一的合同。冲突的记录 fail closed;
205
98
  不存在重新绑定事件、恢复命令或第二套合同状态机。
206
99
 
207
- ## 常驻 Agent Host 升级兼容
100
+ ## 当前 Agent Host 边界
208
101
 
209
102
  存活 Host 保持原 Endpoint 实现,先把准确的 Session/attempt/nativeTurn 事实写入现有
210
103
  持久 Inbox,再联系 Controller。只有当前 Controller 解析 Run 归属、校验权限、工作区、
@@ -215,18 +108,21 @@ ACK 不会重放用户输入或模型工作。
215
108
  环境。即使冻结的 Run 工作区不同于 Role 默认值,登记前的证据也能保留;后续活动和
216
109
  终态仍只按各自的原生输入身份解析归属。
217
110
 
218
- 支持边界为控制协议 `yui-agent-host/v5`、事件来源协议 `yui-agent-host-events/v1`、
219
- Controller RPC 版本 4。声明 `storage=controller-owned` 的 Host 不打开 Home 数据库,
220
- 包括进程归属、原生账号位置和执行环境校验。Home 22 声明 Inbox 的新增来源字段,
221
- 不改写有效历史事实与业务记录。后续版本要么保留该线协议,要么在修改存储前拒绝不兼容
222
- 的存活生产者。刷新 Session CLI wrapper 或新 `doctor` 成功都不能证明旧 Host 兼容。
223
-
224
- `upgrade`、`update` 的目标版本预检及 release activation 独立检查存活 Host。
225
- 没有此能力的 legacy Host(包括 idle)以及兼容响应不确定的 Host 都阻止采用;
226
- 在既有隔离/静默交接边界再次检查,先于迁移或发布切换。检查不会 kill、替换或 reload
227
- Host。先让原有工作结束并保留原始未决输入/结果证据,再由获授权的 Operator 在安全
228
- 边界选择 Session 替换或清理,之后重试。安装新代码不能修改已加载的 legacy Host 内存,
229
- 也不能回收它从未持久投递过的终态。
111
+ 当前边界为控制协议 `yui-agent-host-control/v1`、事件来源协议 `yui-agent-host-events/v1`、
112
+ Controller RPC 版本 1。Host 不打开 Home 数据库,包括进程归属、原生账号位置和
113
+ 执行环境校验。只有 Controller 拥有存储并解析持久事实;非法当前输入在正常协议
114
+ 边界得到明确错误。
115
+
116
+ 破坏性升级不承接历史 Host 或进程。启动、`upgrade`、`update` 和 release activation
117
+ 不再扫描旧 Host socket/进程、推断旧能力或协商兼容交接。使用干净的运行时环境;
118
+ 这不授权丢弃未决工作或终止归属不确定的资源。当前 Controller 正常重启、准确进程
119
+ 代际校验、交接锁、Session 权限与事件防重放继续生效。
120
+
121
+ 存储升级仅包含同主版本内明确的小版本步骤。跨主版本转换独立授权,
122
+ 不构成运行时回退。
123
+ Session CLI 刷新只重定位有效 Manifest 指向的当前双参数引号 wrapper,不转换
124
+ 退役形态。运行时诊断不解释 `schema.json`、`state.json` 或整表 release 幂等文件;
125
+ 当前 SQLite 与逐 key release 回执仍是权威,无关文件保持原样。
230
126
 
231
127
  `task role status`、`task role list` 和 `task role session inspect` 在持久 Run 状态旁
232
128
  显示 Host 上报观测。原生结果待落库或已知上报故障需要关注,但不代表 Provider 失败、
@@ -136,6 +136,36 @@ requests for the same scope share the active probe, including refresh requests;
136
136
  once it settles, an explicit refresh probes again. Retained results are labelled
137
137
  as cached rather than as a new live response. No cleanup timer or worker is added.
138
138
 
139
+ Catalog `source` describes the metadata query: `live` is a successful current
140
+ query, `cache` reuses an identity-matched observation, and `fallback` has no
141
+ usable native observation. It does **not** confirm every configuration field.
142
+ The same catalog can combine native model/help enumeration, local profile names,
143
+ and declared static adapter inputs. Field `reason` and catalog `warnings` identify
144
+ these boundaries; `available: false` marks an unavailable native enumeration or
145
+ capability, not permission to guess values. `allowCustom` permits explicit input,
146
+ not a promise of Provider acceptance.
147
+
148
+ Missing or unparseable help enums stay empty. Known static contracts (such as
149
+ Yui's permission strategies and supported configuration syntax) remain available
150
+ with an explicit static label; they are not described as server-discovered options.
151
+ The permission picker never supplies its own list when a field is absent, and
152
+ retains an existing value as an explicitly unreported current setting. A query
153
+ does not change configuration, permissions, model, or account.
154
+
155
+ Cache responses retain the original `fetchedAt`, last probe `attemptedAt`, field
156
+ reasons, warnings, and any failed refresh's error. Identity matching is not a
157
+ freshness guarantee: native files, account entitlements and remote policy may
158
+ change, so use explicit refresh when needed. The discovery contract is part of
159
+ cache identity; older derived caches that could contain guessed help values are
160
+ not reused by this contract. Durable Home schemas and migration history are
161
+ unchanged.
162
+
163
+ Doctor inspects installation and help only, using the same declared fields and
164
+ enum parser. Its field counts distinguish help-observed, static/unverified, and
165
+ unavailable fields; it does not enumerate account models. The retained minimum
166
+ versions and latest offline producer evidence have different meanings; see
167
+ the source repository's `docs/provider-protocol-contracts.md`.
168
+
139
169
  On Role creation, explicit Agent settings require `--agent`. On update, omitted
140
170
  `--agent` targets the active binding; a named binding is updated without being
141
171
  activated. `task role bind` changes selection. A live Session requires the
@@ -110,6 +110,26 @@ yui task role session new <task> <role> --reason "<why a fresh Session is useful
110
110
  正在进行的查询,结束后显式刷新才重新查询。缓存命中标为缓存,不冒充新的实时响应。
111
111
  这不增加清理定时器或后台 worker。
112
112
 
113
+ 目录的 `source` 描述元数据查询来源:`live` 是本次查询成功,`cache` 是复用身份
114
+ 匹配的历史观测,`fallback` 表示没有可用原生观测;它不表示每个配置字段都已获
115
+ 原生确认。同一目录可同时包含原生模型/help 枚举、本地 profile 名称及明确声明的
116
+ adapter 静态输入合同。字段 `reason` 和目录 `warnings` 说明这些边界;
117
+ `available: false` 表示原生枚举或能力不可用,不允许据此猜测值;`allowCustom`
118
+ 只允许显式输入,不承诺 Provider 会接受。
119
+
120
+ help 枚举缺失或解析失败时保持为空。Yui 权限策略、支持的配置语法等确定静态合同
121
+ 仍可使用,但明确标为静态,不冒充服务端枚举。权限选择器不再为缺失字段自行补列表;
122
+ 已有设置可作为“本次目录未报告的当前值”保留。查询不修改配置、权限、模型或账号。
123
+
124
+ 缓存返回保留原始 `fetchedAt`、最后一次查询的 `attemptedAt`、字段说明、警告和刷新
125
+ 失败原因。身份匹配不等于实时有效:原生文件、账户权限、远端策略仍可能变化,需要时
126
+ 显式刷新。发现合同也参与缓存身份,因此可能包含猜测 help 值的旧派生缓存不再复用;
127
+ Home 持久 schema 与迁移历史不变。
128
+
129
+ Doctor 只检查安装和 help,复用相同静态字段和枚举解析,分别统计 help 已观测、
130
+ 静态/未确认、不可用字段,不枚举账户模型。保留的最低支持版本与最新离线生产者
131
+ 证据含义不同,详见源仓库的 `docs/provider-protocol-contracts.md`。
132
+
113
133
  创建 Role 时,显式的 Agent 设置需要 `--agent`。更新时,省略 `--agent` 针对活动
114
134
  绑定;一个具名绑定会被更新但不被激活。`task role bind` 更改选择。在更改期望设置
115
135
  之前,活动 Session 需要该命令的显式确认。