@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.
- package/README.md +5 -3
- package/dist/cli/commandCatalog.js +56 -21
- package/dist/cli/helpRenderer.js +3 -1
- package/dist/cli/interactionPolicy.js +2 -2
- package/dist/commands/durableJobCommands.js +50 -0
- package/dist/commands/globalRoleCommands.js +30 -9
- package/dist/commands/inboxCommands.js +79 -22
- package/dist/commands/projectCommands.js +4 -33
- package/dist/commands/scheduleCommands.js +45 -0
- package/dist/commands/taskActivationCommands.js +19 -5
- package/dist/commands/taskCommands.js +8 -2
- package/dist/commands/taskFactCommands.js +24 -12
- package/dist/commands/taskProjectDeliveryCommand.js +56 -0
- package/dist/commands/taskPublicationCommands.js +6 -3
- package/dist/commands/taskPublicationVerifyCommand.js +74 -28
- package/dist/commands/taskRemoteDeliveryCommand.js +5 -3
- package/dist/context/runContextPack.js +25 -4
- package/dist/context/runInputContract.js +1 -0
- package/dist/context/taskContext.js +53 -16
- package/dist/context/taskPhase.js +99 -0
- package/dist/controlPlaneCli.js +38 -17
- package/dist/controller/controller.js +35 -0
- package/dist/controller/fileSchedulerStoreAdapter.js +75 -16
- package/dist/controller/globalInputDelivery.js +17 -7
- package/dist/controller/inboxTurnCheck.js +64 -0
- package/dist/controller/jobControl.js +42 -12
- package/dist/controller/jobDefinitionControl.js +304 -0
- package/dist/controller/jobSupervisor.js +47 -32
- package/dist/controller/providerRetryAdmission.js +2 -0
- package/dist/controller/runtime.js +11 -2
- package/dist/controller/scheduleControl.js +176 -0
- package/dist/coordination/workMailbox.js +3 -3
- package/dist/external/githubPublicationVerifier.js +14 -5
- package/dist/external/gitlabPublicationVerifier.js +12 -29
- package/dist/grant/taskAuthorization.js +7 -2
- package/dist/interaction/notificationPresentation.js +12 -3
- package/dist/interaction/operatorPresentation.js +5 -0
- package/dist/job/builtinJob.js +58 -0
- package/dist/job/durableJob.js +72 -49
- package/dist/job/jobDefinition.js +68 -0
- package/dist/job/jobRunner.js +2 -1
- package/dist/job/projectRefreshRunner.js +48 -0
- package/dist/message/globalInboxRecovery.js +44 -0
- package/dist/message/globalInterrupt.js +1 -1
- package/dist/message/inboxReceipt.js +14 -6
- package/dist/message/inboxTurn.js +86 -0
- package/dist/message/message.js +11 -0
- package/dist/message/taskInboxOwnership.js +20 -6
- package/dist/repository/projectRefresh.js +58 -0
- package/dist/repository/taskWorkspacePreparer.js +2 -1
- package/dist/repository/workspaceCleanupInspection.js +6 -1
- package/dist/schedule/schedule.js +108 -0
- package/dist/scheduler/operatorEvent.js +2 -0
- package/dist/scheduler/operatorInputNotificationProcessor.js +8 -0
- package/dist/storage/contextRecords.js +8 -0
- package/dist/storage/jobSchema.js +15 -0
- package/dist/storage/maintenanceCaller.js +1 -1
- package/dist/storage/recordValidation.js +5 -0
- package/dist/storage/scheduleSchema.js +12 -0
- package/dist/storage/sqliteSchema.js +95 -24
- package/dist/storage/sqliteStore.js +123 -10
- package/dist/storage/storageVersions.js +1 -1
- package/dist/storage/storeRpc.js +5 -0
- package/dist/storage/upgrade/jobDefinitionMigration.js +22 -0
- package/dist/task/archiveDiagnostics.js +1 -1
- package/dist/task/archivePreflight.js +1 -1
- package/dist/task/projectDeliveryScope.js +20 -0
- package/dist/task/publicationToolObservation.js +126 -0
- package/dist/task/remoteDelivery.js +19 -8
- package/dist/task/remoteDeliveryService.js +5 -4
- package/dist/task/taskActivationService.js +35 -0
- package/dist/web/assets/client/app/settings.js +7 -1
- package/dist/web/assets/client/i18n/en.js +65 -2
- package/dist/web/assets/client/i18n/zh-CN.js +65 -2
- package/dist/web/assets/client/index.js +2 -0
- package/dist/web/assets/client/views/jobs.js +222 -0
- package/dist/web/assets/client/views/task/deliveryResults.js +6 -2
- package/dist/web/assets/client/views/task/page.js +11 -1
- package/dist/web/assets/shared/manageNav.js +1 -0
- package/dist/web/assets/shared/taskTabs.js +2 -2
- package/dist/web/assets/shell/settingsContent.js +3 -0
- package/dist/web/assets/styles/index.js +2 -0
- package/dist/web/assets/styles/views/jobs.js +19 -0
- package/dist/web/controllerWeb.js +73 -21
- package/dist/web/taskPreviews.js +21 -13
- package/dist/web/webAccess.js +109 -0
- package/dist/web/webJobs.js +52 -0
- package/dist/web/webServer.js +76 -44
- package/docs/architecture/capabilities-and-resources.md +6 -4
- package/docs/architecture/capabilities-and-resources.zh-CN.md +5 -4
- package/docs/cli-information-contract.md +57 -4
- package/docs/cli-information-contract.zh-CN.md +41 -2
- package/docs/job-runs.md +224 -0
- package/docs/project-delivery-scope.md +59 -0
- package/docs/release-workflow.md +86 -0
- package/docs/release-workflow.zh-CN.md +68 -0
- package/docs/schedules.md +132 -0
- package/docs/storage-baseline.md +31 -1
- package/docs/storage-baseline.zh-CN.md +25 -1
- package/docs/task-delivery.md +74 -2
- package/docs/task-delivery.zh-CN.md +39 -1
- package/docs/testing/verification-levels.md +6 -2
- package/docs/testing/verification-levels.zh-CN.md +6 -3
- package/i18n/README.zh-CN.md +6 -3
- package/package.json +4 -3
- package/skills/yui-leader/SKILL.md +44 -1
- package/skills/yui-leader/VERSION +1 -1
- package/skills/yui-leader/references/planning.md +9 -1
- package/skills/yui-operator/SKILL.md +31 -0
- package/skills/yui-operator/VERSION +1 -1
- package/skills/yui-reviewer/SKILL.md +4 -0
- package/skills/yui-reviewer/VERSION +1 -1
- package/skills/yui-runtime/SKILL.md +67 -8
- package/skills/yui-runtime/VERSION +1 -1
- package/skills/yui-runtime/references/context-ordering.md +103 -0
- package/skills/yui-runtime/references/publication.md +44 -4
- package/skills/yui-runtime/references/recovery.md +21 -0
- package/skills/yui-worker/SKILL.md +5 -0
- package/skills/yui-worker/VERSION +1 -1
|
@@ -6,8 +6,9 @@ saved/requested/accepted/unknown facts; `ok: true` means the CLI invocation
|
|
|
6
6
|
succeeded, not that a Task, native Turn or remote delivery completed.
|
|
7
7
|
|
|
8
8
|
This is the current wire contract, not a compatibility mode. Stored Tasks,
|
|
9
|
-
Messages, results, Snapshots and Session histories are unchanged.
|
|
10
|
-
|
|
9
|
+
Messages, results, Snapshots and Session histories are unchanged. Read projections
|
|
10
|
+
add no snapshot/cache store. New activation-source event attributes use the
|
|
11
|
+
declared storage 1.10 → 1.11 transition; historical sources are never invented.
|
|
11
12
|
|
|
12
13
|
## Daily read path
|
|
13
14
|
|
|
@@ -53,10 +54,22 @@ use family discovery when a broader requirement/history audit is needed.
|
|
|
53
54
|
budget inside a 32 KiB response budget. Single inline values are at most
|
|
54
55
|
2 KiB; large values and Message/Run/WorkItem/Knowledge bodies use references.
|
|
55
56
|
Each collection contributes at most eight sampled records at entry.
|
|
56
|
-
- Global entry samples up to eight
|
|
57
|
-
uncertain ones.
|
|
57
|
+
- Global entry samples up to eight current-turn/available inputs, including
|
|
58
|
+
uncertain ones. Historical missing receipts are a separate count and explicit
|
|
59
|
+
`inbox list --view history` read; absence of ACK is not proof of unexecuted work.
|
|
60
|
+
Continue its pending page with `role message list <role> --current --cursor`.
|
|
61
|
+
It does not repeat recent history, Profile bodies, frozen Skill
|
|
58
62
|
packages or accumulated retry details. The Manifest is the Profile pointer;
|
|
59
63
|
explicit Message and Session retry reads retain history and original evidence.
|
|
64
|
+
- `inbox list --view current|history|all` uses the current managed identity,
|
|
65
|
+
prioritizes exact current-turn input and shares originals with automatic
|
|
66
|
+
delivery. `claim` and `ack` accept 1–16 exact IDs with independent results.
|
|
67
|
+
ACK records semantic disposition (including legal routing or supersession),
|
|
68
|
+
not Task completion. Exact terminals emit one bounded handling check without
|
|
69
|
+
ACK or business replay; reminder-only input cannot self-wake indefinitely.
|
|
70
|
+
`inbox retire` disposes only obsolete proven-unsubmitted Global input with an
|
|
71
|
+
explicit reason, preserving its original target. Task retirement remains
|
|
72
|
+
the Leader's existing `task message retire` operation.
|
|
60
73
|
- Run entry samples up to eight records per live category and 16 frozen refs.
|
|
61
74
|
Pointer continuation uses `--view refs` and `pointerPage.nextCursor`; full pack
|
|
62
75
|
document continuation uses `--view full`. Neither changes the frozen authority.
|
|
@@ -91,6 +104,46 @@ concurrent writes. For append-only event traversal use fixed-bound Context delta
|
|
|
91
104
|
Discovery currently scans the selected authorized family to fingerprint it;
|
|
92
105
|
its output, not total storage-reading cost, is bounded.
|
|
93
106
|
|
|
107
|
+
## Intent, source and temporal consistency
|
|
108
|
+
|
|
109
|
+
Current Leader/public Task context projects `phase` (lifecycle, gate, activation
|
|
110
|
+
source and Brief freshness) separately from the managed `caller`'s actual
|
|
111
|
+
execution authority. These are facts, not a semantic permission decision.
|
|
112
|
+
Old Message records carry recording/revision relationships to the adopted
|
|
113
|
+
activation, not an automatic “superseded” verdict.
|
|
114
|
+
|
|
115
|
+
Activation requests accept either `--source-message <id>` or
|
|
116
|
+
`--source-text <exact-input>`; a Leader must provide one. Develop submissions
|
|
117
|
+
link their saved Message automatically. Exact text is retained in the existing
|
|
118
|
+
immutable event with caller attribution, including native Session identity for
|
|
119
|
+
Leader captures. It is not a Provider-verified user Message and is never queued
|
|
120
|
+
again. Same-request retries cannot change that source. The activation wake
|
|
121
|
+
references the event/original explicitly. Missing or changed sources have a
|
|
122
|
+
diagnostic and original-read route, not a fabricated approval or rejection.
|
|
123
|
+
|
|
124
|
+
`task brief show` returns `writeGuard`; `task brief update` requires
|
|
125
|
+
`--if-current <writeGuard>`. New semantic input/results, phase changes or edits
|
|
126
|
+
invalidate stale writers transactionally, independently of timestamps and
|
|
127
|
+
runtime heartbeats. On rejection, reread and reconcile intended fields.
|
|
128
|
+
Task Job saves append a semantic event for status, result, cancellation or
|
|
129
|
+
acknowledgement changes, not for heartbeat, checkpoint or notification receipts.
|
|
130
|
+
Core indicates `refresh-needed`; Leader maintains the actual summary at
|
|
131
|
+
meaningful boundaries. No completion gate or automatic prose rewrite is added.
|
|
132
|
+
|
|
133
|
+
Task event cursors bind the Home and Task. Delta returns `kind: event-history`,
|
|
134
|
+
`fromCursor`, `complete`, `stateChanged` and a fixed `throughCursor`. Keep the
|
|
135
|
+
original `--after` across every `--continuation`; advance only on completion.
|
|
136
|
+
New arrivals remain outside that window. Empty events do not erase a baseline,
|
|
137
|
+
and shared state can change without Task events. Invalid/old cursors require a
|
|
138
|
+
fresh bounded current read. Event numeric IDs order recording within one Task,
|
|
139
|
+
not occurrence, delivery, handling or unrelated Tasks.
|
|
140
|
+
|
|
141
|
+
Run delta uses its exact frozen parent Snapshot and returns complete changed
|
|
142
|
+
`refs` plus `removedRefs`, with normal document pagination. The clipped launch
|
|
143
|
+
`deltaRefs` remains a hint only. Mutable Task facts never widen that Assignment.
|
|
144
|
+
Focused wakes with exact refs no longer absorb other messages merely because
|
|
145
|
+
timestamps overlap; `--history` retains timestamp-window discovery.
|
|
146
|
+
|
|
94
147
|
## Runtime diagnostics
|
|
95
148
|
|
|
96
149
|
Global failure evidence remains ordinary record-only Messages; no aggregate
|
|
@@ -5,7 +5,8 @@ Yui 将命令的效果、发现和完整证据读取分开。查询不会消费
|
|
|
5
5
|
CLI 调用成功,不代表 Task、原生 Turn 或远端投递完成。
|
|
6
6
|
|
|
7
7
|
这是当前通信契约,不是兼容模式。已保存的 Task、Message、结果、Snapshot 和 Session
|
|
8
|
-
|
|
8
|
+
历史保持不变;读取投影没有新增快照或缓存存储。新激活事件的来源字段使用已声明的
|
|
9
|
+
存储 1.10 → 1.11 迁移,不补造历史来源。
|
|
9
10
|
|
|
10
11
|
## 日常读取路径
|
|
11
12
|
|
|
@@ -43,8 +44,16 @@ Run 列表接受 Task 或 `task/work` 目标。
|
|
|
43
44
|
- 当前 Task Context 至多 64 条,记录与 attention 共 24 KiB,响应预算 32 KiB。
|
|
44
45
|
单个内联值至多 2 KiB;大值及 Message/Run/WorkItem/Knowledge 正文用引用。
|
|
45
46
|
入口每个集合最多抽样八条。
|
|
46
|
-
- Global
|
|
47
|
+
- Global 入口最多八条本轮/可用输入,保留效果未知项;历史缺回执单独计数,
|
|
48
|
+
通过 `inbox list --view history` 显式发现,不把缺 ACK 当作未执行。
|
|
49
|
+
pending 页用 `role message list <role> --current --cursor` 续读;不重复 recent、
|
|
47
50
|
Profile 正文、历史 Skill 包和累计 retry 详情。Profile 由 Manifest 精确指向。
|
|
51
|
+
- `inbox list --view current|history|all` 优先展示精确本轮输入,与自动投递共用原始记录。
|
|
52
|
+
`claim`、`ack` 接受 1–16 个精确 ID,分别返回结果。ACK 表示语义处置,
|
|
53
|
+
包括合法转交或被后续要求替代,不等于 Task 完成。
|
|
54
|
+
精确终态只生成一次有界检查通知,不自动 ACK 或重放业务;纯提醒不会无限自唤醒。
|
|
55
|
+
`inbox retire` 仅显式退役已过时且可证明未提交的 Global 输入,保留原始目标和理由;
|
|
56
|
+
Task 输入继续使用 Leader 的 `task message retire`。
|
|
48
57
|
- Run 入口最多 16 个冻结引用和每类八条活跃观察,附总数。`--view refs` 配合
|
|
49
58
|
`pointerPage.nextCursor` 发现更多引用;`--view full` 显式读取完整冻结包。
|
|
50
59
|
若 `input.directiveOmitted` 为 true,行动前用 `--view input` 全文读取分配指令;
|
|
@@ -70,6 +79,36 @@ Run 列表接受 Task 或 `task/work` 目标。
|
|
|
70
79
|
追加事件遍历使用固定上界 Context delta。目前分类发现扫描选定的授权集合来计算指纹;
|
|
71
80
|
有界的是输出,不是总存储读取成本。
|
|
72
81
|
|
|
82
|
+
## 意图、来源与时序一致性
|
|
83
|
+
|
|
84
|
+
Leader/公开 Task 当前视图的 `phase` 投影生命周期、执行开关、激活来源与 Brief
|
|
85
|
+
新鲜度;`caller` 单独展示当前 Session 的实际权限,不代替语义授权判断。
|
|
86
|
+
旧 Message 标明与激活请求的记录/修订先后关系,不自动判为整体失效。
|
|
87
|
+
|
|
88
|
+
激活请求接受 `--source-message <id>` 或 `--source-text <exact-input>`,Leader
|
|
89
|
+
必须提供其一。develop 提交自动关联已保存的 Message。直接原生输入原文保存在既有
|
|
90
|
+
不可变事件中,带调用者及 Leader Session 归属,不伪装成 Provider 验证过的用户
|
|
91
|
+
Message,也不再次入队。相同 request ID 重试不得更换来源。交接 wake 显式引用
|
|
92
|
+
原始事件/Message;缺失或变更来源有诊断和原文入口,不自动批准或拒绝开发。
|
|
93
|
+
|
|
94
|
+
`task brief show` 返回 `writeGuard`;更新必须携带 `--if-current <writeGuard>`。
|
|
95
|
+
新语义输入、结果、阶段变化或编辑在事务中使旧写入失效,不依赖墙钟时间。
|
|
96
|
+
Task Job 状态、结果、取消请求和确认处置在保存事务中追加语义事件;
|
|
97
|
+
心跳、checkpoint 和通知回执不使 guard 反复失效。
|
|
98
|
+
拒绝后重读并协调目标字段。Core 只提示 `refresh-needed`,
|
|
99
|
+
Leader 在关键节点维护实际摘要,不新增完成门禁或自动改写原文。
|
|
100
|
+
|
|
101
|
+
Task 事件游标绑定 Home 与 Task。增量返回 `kind: event-history`、`fromCursor`、
|
|
102
|
+
`complete`、`stateChanged` 和固定 `throughCursor`。续页保留最初的 `--after`,
|
|
103
|
+
用 `--continuation` 读完再推进游标;并发新输入留在下一窗口。空增量不清空基线,
|
|
104
|
+
共享状态也可能在没有 Task 事件时变化。失效游标须重新读取有界当前视图。
|
|
105
|
+
事件序号只表达单 Task 记录顺序,不混同发生、投递、消费或跨 Task 因果关系。
|
|
106
|
+
|
|
107
|
+
Run 增量基于精确父 Snapshot,返回完整变更 `refs` 与 `removedRefs`,长文档照常
|
|
108
|
+
分页;截断的 `deltaRefs` 仅作启动提示。可变 Task 事实不扩大冻结 Assignment。
|
|
109
|
+
带精确引用的 focused wake 不再仅因时间戳重叠纳入其他 Message;`--history`
|
|
110
|
+
仍可发现时间窗口历史。
|
|
111
|
+
|
|
73
112
|
## 重复运行时诊断
|
|
74
113
|
|
|
75
114
|
`role message list <role> --diagnostics` 从原始 record-only Message 派生故障组,
|
package/docs/job-runs.md
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# Job definitions and exact execution Runs
|
|
2
|
+
|
|
3
|
+
A Job is a stable, scoped definition. A JobRun is one execution, with its own
|
|
4
|
+
ID, configuration revision, trigger, immutable execution specification,
|
|
5
|
+
process identity, artifacts and terminal result. Changing a definition never
|
|
6
|
+
changes an admitted Run. No Schedule is needed for immediate execution.
|
|
7
|
+
|
|
8
|
+
## CLI and ownership
|
|
9
|
+
|
|
10
|
+
Commands operate through the Controller's `job.definition` RPC:
|
|
11
|
+
|
|
12
|
+
```sh
|
|
13
|
+
yui job define --global --job probe --title "Local probe" \
|
|
14
|
+
--input '{"kind":"builtin","action":"system.noop","input":{}}'
|
|
15
|
+
yui job run --global --job probe --request-id first
|
|
16
|
+
yui job runs --global --job probe
|
|
17
|
+
yui job run-get --global --job probe --run <exact-run-id>
|
|
18
|
+
yui job logs --global --job probe --run <exact-run-id>
|
|
19
|
+
yui job run-cancel --global --job probe --run <exact-run-id>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Use `--task task-N` instead of `--global` for a Task Job. Its configuration is
|
|
23
|
+
`{kind:"shell",owner,projectId,head,workspace,env,steps}`, with the same managed
|
|
24
|
+
workspace, Project, Assignment and delivery-Session requirements as `job start`.
|
|
25
|
+
The Project target is not the ownership scope. Definitions can be inspected
|
|
26
|
+
with `job show`, listed with `job list`, and revised with `job update --revision
|
|
27
|
+
<observed-revision> --title ... --input ...`. A definition ID is required on
|
|
28
|
+
creation; replaying an identical creation is idempotent. Scope cannot be updated.
|
|
29
|
+
|
|
30
|
+
Global Job management requires the current authenticated Operator Session.
|
|
31
|
+
Other GlobalRoles cannot inspect or manage Task Job definitions either, matching
|
|
32
|
+
the existing Task Context authorization boundary.
|
|
33
|
+
Users can request it through Operator. Literal `caller.scope=user` is not a
|
|
34
|
+
credential on the existing Controller socket. Task Sessions cannot inspect,
|
|
35
|
+
create, modify or run global Jobs. The initial global action is `system.noop`,
|
|
36
|
+
a fixed local no-op implemented by the same standalone runner. It accepts only
|
|
37
|
+
empty input and no Project; it does not call a model or external service.
|
|
38
|
+
`project.refresh` is the controlled Project maintenance action below. Arbitrary global commands,
|
|
39
|
+
environments, workspaces and Agent calls are not accepted.
|
|
40
|
+
|
|
41
|
+
`job run --request-id` is a stable trigger identity within the scoped Job.
|
|
42
|
+
Replay returns the original Run; reusing that identity after a configuration
|
|
43
|
+
change or with a different retry target is a conflict. A new key after a
|
|
44
|
+
terminal result admits a new Run. Queued, running or unknown-effect executions
|
|
45
|
+
return `{created:false,reason:"overlap",run:<existing>}` rather than queueing.
|
|
46
|
+
Returning an existing Run (including replay or overlap) requires permission to
|
|
47
|
+
read that exact Run's original Assignment. If a definition was retargeted and
|
|
48
|
+
the caller cannot read the earlier Run, admission fails with `UNAUTHORIZED`
|
|
49
|
+
without exposing its snapshot or creating another Run.
|
|
50
|
+
Unknown outcomes are never automatically replayed, even after acknowledgement.
|
|
51
|
+
Explicit retry uses `--retry-of <exact-failed-cancelled-or-timed-out-run>`.
|
|
52
|
+
Cancellation addresses a Run, not a future Schedule. Log reads return up to
|
|
53
|
+
64 KiB per completed/checkpointed step; a currently uncheckpointed step is not
|
|
54
|
+
included.
|
|
55
|
+
|
|
56
|
+
The existing `job start` remains the one-shot Task entry point. It creates a
|
|
57
|
+
definition and one Run, and its `job` response is still the **Run**. Existing
|
|
58
|
+
`job get/cancel/acknowledge --task ... --job ...` address exact Runs, not
|
|
59
|
+
definitions or “latest”. `jobs list/retry` is unchanged: it manages Leader
|
|
60
|
+
wake/recovery records and is not this Job module.
|
|
61
|
+
|
|
62
|
+
## Storage and existing consumers
|
|
63
|
+
|
|
64
|
+
Storage **1.8 → 1.9** appends two tables without modifying the published
|
|
65
|
+
baseline: `job_definitions` and `global_job_runs`. `durable_jobs` remains the
|
|
66
|
+
authoritative Task Run table, with `definitionId`, `definitionRevision` and
|
|
67
|
+
`trigger` added to each payload. This retains every Task-local Run ID and
|
|
68
|
+
artifact location. Global Runs have `scope:"global"` and no `taskId`, Task or
|
|
69
|
+
Assignment. They use the same execution state machine and supervisor; their
|
|
70
|
+
terminal notices enter the Operator mailbox, never a Task Leader mailbox.
|
|
71
|
+
|
|
72
|
+
The centralized transactional migration maps each old DurableJob to one
|
|
73
|
+
definition with the same local ID and one preserved Run. Equal commands are
|
|
74
|
+
not grouped. Original payload bytes are retained in `storage_migration_archive`
|
|
75
|
+
under migration 9 / family `durable_jobs`; old results, process evidence and
|
|
76
|
+
Integration references retain their identities. Frozen Context snapshots are
|
|
77
|
+
not rewritten. Ordinary readers accept only current storage; there is no
|
|
78
|
+
dual-format reader. A failed migration rolls back without advancing storage.
|
|
79
|
+
Actual Home upgrades require their own authorization and backup; this change
|
|
80
|
+
does not authorize or perform one.
|
|
81
|
+
|
|
82
|
+
IntegrationAttempt and verification consumers still use
|
|
83
|
+
`getDurableJob(taskId, exactRunId)`. Existing Task Context `job` entries,
|
|
84
|
+
execution audit, readiness/archive checks and HTTP preview tickets likewise
|
|
85
|
+
refer to exact Runs. Definitions alone never count as active execution or block
|
|
86
|
+
Task completion. Started Runs and retained unknown process evidence keep the
|
|
87
|
+
existing Task lifecycle and physical-cleanup boundaries. The management UI
|
|
88
|
+
retains exact references rather than replacing them with latest.
|
|
89
|
+
|
|
90
|
+
## Extension seams for Schedule, Project refresh and management UI
|
|
91
|
+
|
|
92
|
+
- `src/job/jobDefinition.ts`: `JobDefinition`, `JobScope`, `JobConfiguration`
|
|
93
|
+
and `JobTrigger`. Definition revision is optimistic concurrency, not a Run
|
|
94
|
+
status. Project targets stay in configuration.
|
|
95
|
+
- `src/controller/jobDefinitionControl.ts`: `admitJobRun(store, home, scope,
|
|
96
|
+
definitionId, caller, trigger, now, retryOf?)` returns `RunAdmission`.
|
|
97
|
+
It authenticates current scope, rechecks domain prerequisites, finds exact
|
|
98
|
+
trigger replay and excludes overlap inside the Store transaction. Schedule
|
|
99
|
+
can call it inside its own `store.transaction` with advancement in that same
|
|
100
|
+
transaction; no process starts until commit and supervisor reconciliation.
|
|
101
|
+
A rollback discards both. `source:"schedule"` is an internal seam, not an
|
|
102
|
+
accepted manual RPC assertion. Schedule must supply a legitimate current
|
|
103
|
+
authority; it must not invent a Session or reuse a revoked identity. Any
|
|
104
|
+
additional durable scheduled-intent authorization belongs to that feature.
|
|
105
|
+
- `src/job/builtinJob.ts`: controlled action compilation. Add a narrowly
|
|
106
|
+
validated builtin here; snapshot its target/input and compile runner steps
|
|
107
|
+
from trusted code, never caller-supplied shell. Revalidate before spawn.
|
|
108
|
+
A non-Git action uses an explicit all-zero `head` sentinel, never a Project
|
|
109
|
+
commit or Integration proof.
|
|
110
|
+
- `JobRun = DurableJob | GlobalJobRun` shares transitions, heartbeat, timeout,
|
|
111
|
+
cancel, checkpoints, exact OS identity and unknown-effect recovery. Store
|
|
112
|
+
methods preserve distinct scope storage; neither table mirrors the other.
|
|
113
|
+
- `createJobDefinitionControl` backs CLI JSON reads/mutations. A future
|
|
114
|
+
authenticated Web ingress must resolve its own caller and enforce these
|
|
115
|
+
service boundaries; it must not forward arbitrary browser-supplied identity.
|
|
116
|
+
|
|
117
|
+
The independent [Schedule module](schedules.md) adds time rules and transactional
|
|
118
|
+
due admission after this 1.9 foundation. It does not introduce an independent
|
|
119
|
+
daemon, cross-Task dependency engine or release behavior.
|
|
120
|
+
|
|
121
|
+
## Controlled Project refresh
|
|
122
|
+
|
|
123
|
+
An authenticated Operator can explicitly install one maintenance definition
|
|
124
|
+
per registered managed Project, inspect it, and request independent Runs:
|
|
125
|
+
|
|
126
|
+
```sh
|
|
127
|
+
yui job define --global --job project-refresh-project-7 --title "Refresh Project 7" \
|
|
128
|
+
--input '{"kind":"builtin","action":"project.refresh","projectId":"project-7","input":{}}'
|
|
129
|
+
yui job show --global --job project-refresh-project-7
|
|
130
|
+
yui job run --global --job project-refresh-project-7 --request-id refresh-001
|
|
131
|
+
yui job runs --global --job project-refresh-project-7
|
|
132
|
+
yui job run-get --global --job project-refresh-project-7 --run <exact-run-id>
|
|
133
|
+
yui job logs --global --job project-refresh-project-7 --run <exact-run-id>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
These examples configure intent; installation, migration and Project registration
|
|
137
|
+
never install or run a default Job or Schedule. Task Sessions cannot use this
|
|
138
|
+
entry point. The Job remains global; `configuration.projectId` identifies its
|
|
139
|
+
target, not an owning Task. Duplicate refresh definitions for the same Project
|
|
140
|
+
are refused with the existing Job ID; `job list --global` also discovers it.
|
|
141
|
+
|
|
142
|
+
Empty action input explicitly binds the current catalog's Project ID, path,
|
|
143
|
+
ownership, lifecycle, remote URL and stable/development branches into
|
|
144
|
+
`input.targetDigest`. The digest is generated from authoritative configuration,
|
|
145
|
+
not a caller-supplied checkout path. Each Run retains this immutable input.
|
|
146
|
+
Admission, pre-spawn authorization and the domain action after lock acquisition
|
|
147
|
+
recheck the current target. Missing/retired/external Projects and changed targets
|
|
148
|
+
fail closed. After inspecting an intentional configuration change, use
|
|
149
|
+
`job update --revision <observed-revision>` with the same action and empty input
|
|
150
|
+
to bind it explicitly. Run/retry never silently rebinds an old definition.
|
|
151
|
+
|
|
152
|
+
`project refresh <project>` and the Job call the same Project domain service and
|
|
153
|
+
maintenance lock. The existing manual external-Project behavior is unchanged;
|
|
154
|
+
automatic writes require active **managed** ownership. Both require matching
|
|
155
|
+
stable and development branches. Git checks clean/untracked state, exact branch
|
|
156
|
+
and HEAD; fetch isolates FETCH_HEAD, unrelated tracking refs and maintenance;
|
|
157
|
+
only verified fast-forward and compare-and-swap tracking updates are allowed.
|
|
158
|
+
There is no reset, rebase, guessed checkout, user remote rewrite or semantic
|
|
159
|
+
Knowledge/Skill update. Lock waiting is bounded and never retries the Git action.
|
|
160
|
+
|
|
161
|
+
The existing detached Job runner invokes a fixed Project-domain executable.
|
|
162
|
+
That action reads current catalog/Run authority through a read-only Store and
|
|
163
|
+
writes Git only through the shared service. The generic runner remains
|
|
164
|
+
artifact-only. Runtime-owned PATH, HOME, SSH agent socket and Git config
|
|
165
|
+
locations are passed for Git discovery/authentication; callers cannot supply
|
|
166
|
+
commands or environment. Interactive Git prompts are disabled, and the action
|
|
167
|
+
has a ten-minute timeout. At most four supervised Project refresh attempts
|
|
168
|
+
are started concurrently; one Project's failure does not stop another.
|
|
169
|
+
Cancellation/timeout uses the existing process-group and unknown-effect contract.
|
|
170
|
+
|
|
171
|
+
For UI consumers (Task129), the action label is `project.refresh`, target is
|
|
172
|
+
`configuration.projectId`, and `job show/list` adds a **derived** `refresh`
|
|
173
|
+
projection with `lastAttempt` and `lastSuccessfulRefresh` exact Run references,
|
|
174
|
+
revision, trigger, status and timestamps. It is not separately stored.
|
|
175
|
+
A projection includes only refresh Runs for the definition's exact Project and
|
|
176
|
+
target digest; changing action or rebinding a remote/path/branch does not inherit
|
|
177
|
+
another target's successful observation. Full history remains in `job runs`.
|
|
178
|
+
A failed or unknown attempt never advances success. The Run supplies trigger
|
|
179
|
+
source, status, terminal error and artifact identity. `job logs` returns bounded
|
|
180
|
+
step output: successful refresh JSON contains `projectId`, `trigger`, observed
|
|
181
|
+
time, verified remote commit and `refresh.fromCommit/toCommit/tracking`.
|
|
182
|
+
Git-stage failures include `details.refresh` with observed partial HEAD/tracking
|
|
183
|
+
effects and any retained temporary ref. Earlier refusals have no successful
|
|
184
|
+
remote observation. Missing exit evidence, timeout or cancellation must not be
|
|
185
|
+
presented as successful synchronization; inspect retained evidence before retry.
|
|
186
|
+
The Run's all-zero `head` is not a Project revision; use the action's observations.
|
|
187
|
+
|
|
188
|
+
No persistent envelope/table change is needed: action input and output use the
|
|
189
|
+
existing JobDefinition/JobRun JSON and logs. Schedule should reference this same
|
|
190
|
+
global definition and use its existing admission seam, never a second Project
|
|
191
|
+
automation state. The isolated core scenario covers interval-triggered refresh
|
|
192
|
+
Runs, missed-period coalescing and disable behavior against a local Git remote.
|
|
193
|
+
This does not enable a cadence for any real Project.
|
|
194
|
+
|
|
195
|
+
## Local Web management
|
|
196
|
+
|
|
197
|
+
The Task's **Jobs** tab manages only that Task. **Settings → Jobs & schedules**
|
|
198
|
+
manages global definitions. Both use the same component and public services.
|
|
199
|
+
Create/edit a definition, run it immediately, select an exact historical Run
|
|
200
|
+
and read its snapshot/results/logs, or request cancellation of that Run.
|
|
201
|
+
Task shell configuration uses the same explicit managed-workspace specification
|
|
202
|
+
as the CLI; global creation offers only `system.noop` and `project.refresh`.
|
|
203
|
+
Creating or reading a Job never executes it.
|
|
204
|
+
|
|
205
|
+
The HTTP routes are `/api/tasks/:taskId/jobs|schedules` and
|
|
206
|
+
`/api/settings/jobs|schedules`. GET takes `op`, `id` and optional `runId`; POST
|
|
207
|
+
takes the corresponding public operation fields, with `requestId` for manual
|
|
208
|
+
Run admission. Routes fix scope. Browser-supplied `caller`, `scope` or trigger
|
|
209
|
+
authority is rejected. The loopback token authenticates the local-user ingress,
|
|
210
|
+
and writes additionally require an exact same Origin. The adapter resolves the
|
|
211
|
+
current Operator Session from the server store on every call; if none is
|
|
212
|
+
available, management reports that prerequisite rather than fabricating one.
|
|
213
|
+
Its accepted Jobs/Schedules retain the normal Operator binding/revocation
|
|
214
|
+
semantics. Managed RPC callers retain their existing authentication and cannot
|
|
215
|
+
borrow this local-user adapter.
|
|
216
|
+
|
|
217
|
+
Schedule forms support once, anchored interval and five-field cron with an
|
|
218
|
+
explicit timezone. Displayed next due and last success come from the service.
|
|
219
|
+
Disable affects future admissions, cancellation affects one exact Run, and a
|
|
220
|
+
manual Run does not move the cadence. Once `completed` means admitted, not
|
|
221
|
+
successful. Errors retain the draft; an unknown write is not automatically
|
|
222
|
+
resent. Refresh only reads facts and keeps the selected Run exact. No new
|
|
223
|
+
tables, scheduling loop, Project switch, implicit refresh or deletion semantics
|
|
224
|
+
are introduced.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Task Project delivery scope
|
|
2
|
+
|
|
3
|
+
Project bindings, delivery obligations, observed code changes and remote merge
|
|
4
|
+
facts have different meanings. A Task may retain a temporary implementation in
|
|
5
|
+
one Project while delivering its accepted result from another. Do not delete a
|
|
6
|
+
binding or fabricate a Publication to express that decision.
|
|
7
|
+
|
|
8
|
+
Read the original scope instruction and `yui task remote-delivery <task>`.
|
|
9
|
+
An authorized user, Operator or current delivery Leader can record one bounded,
|
|
10
|
+
append-only decision:
|
|
11
|
+
|
|
12
|
+
```sh
|
|
13
|
+
yui task project delivery task-1 project-2 \
|
|
14
|
+
--requirement excluded \
|
|
15
|
+
--reason "The accepted standalone implementation replaces the temporary one" \
|
|
16
|
+
--source-message message-3 \
|
|
17
|
+
--purpose "Only deliver the standalone implementation" \
|
|
18
|
+
--if-current none
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
The Message must be original user/Operator input in this Task and the purpose
|
|
22
|
+
must be an exact quote. The Agent judges whether it authorizes this Project
|
|
23
|
+
change, including an explicit delegation of scope judgment; the CLI verifies
|
|
24
|
+
identity/provenance, not natural-language permission. A Role report, convenient
|
|
25
|
+
reason or invented quote is not authorization to abandon unmet requirements.
|
|
26
|
+
|
|
27
|
+
Use the latest `scopeDecision.id` from remote-delivery instead of `none` for
|
|
28
|
+
subsequent decisions. To restore delivery, record `--requirement required` with
|
|
29
|
+
its current guard and an appropriate original source. A stale guard fails
|
|
30
|
+
without overwriting the current decision. After an uncertain write, inspect
|
|
31
|
+
the decision before retrying; do not issue a new decision blindly.
|
|
32
|
+
|
|
33
|
+
Active and completed, unarchived Tasks with enabled execution accept these
|
|
34
|
+
management decisions. Completed Tasks stay completed; frozen heads, acceptance
|
|
35
|
+
and Publication history remain intact. No new execution or cleanup permission
|
|
36
|
+
is created. Archived, cancelled and stopped Tasks cannot use this operation to
|
|
37
|
+
resume or replace lifecycle intent.
|
|
38
|
+
|
|
39
|
+
The shared projection exposes `deliveryRequirement`, `scopeDecision` and
|
|
40
|
+
`deliveryRequired` alongside unchanged `codeDelivery` and merge/verification
|
|
41
|
+
facts. `codeProjectCount` still counts all changed or unknown Projects;
|
|
42
|
+
`requiredCodeProjectCount` is the obligation denominator, and
|
|
43
|
+
`excludedProjectCount` identifies explicit exclusions. Aggregate merged/verified
|
|
44
|
+
counts and `allMerged`/`allVerified` cover required code Projects only. A zero
|
|
45
|
+
denominator yields `status: none` (no delivery obligation), not evidence that
|
|
46
|
+
excluded code was merged. Missing heads/bases are unknown, never no-change.
|
|
47
|
+
|
|
48
|
+
CLI, current context, Web and ordinary archive use that projection. An unchanged
|
|
49
|
+
Project needs no exclusion; a required changed Project needs exact verified
|
|
50
|
+
remote coverage. Ordinary archive still requires settled WorkItems, inputs,
|
|
51
|
+
reviews, integrations/jobs and stopped execution. Physical cleanup separately
|
|
52
|
+
protects dirty files and excluded, unverified local commits. Logical archive can
|
|
53
|
+
succeed with retained resources, which remain owned and inspectable through
|
|
54
|
+
archive diagnostics and explicit cleanup. Exclusion never authorizes deletion
|
|
55
|
+
or force archive, nor changes Project-global state.
|
|
56
|
+
|
|
57
|
+
Storage 1.11 → 1.12 only admits the new event semantics through the centralized
|
|
58
|
+
minor upgrade chain. It does not rewrite old records or invent scope decisions.
|
|
59
|
+
No new table, workflow state, scan or background recovery service is added.
|
package/docs/release-workflow.md
CHANGED
|
@@ -51,6 +51,92 @@ merely to avoid a version decision. Package versions remain distinct from protoc
|
|
|
51
51
|
and persistent-storage contracts: their compatibility checks and required migrations
|
|
52
52
|
are unchanged, and the storage rules below do not authorize a package release.
|
|
53
53
|
|
|
54
|
+
### 2.10.0 compatibility and migration notes
|
|
55
|
+
|
|
56
|
+
This stable minor includes exact-turn inbox handling and successor recovery
|
|
57
|
+
(Task131 / PR #463 and Task134 / PR #464), plus authenticated trusted-LAN Web
|
|
58
|
+
access and current Operator lifecycle controls (Task135 / PR #465).
|
|
59
|
+
It also includes explicit Task Project delivery scope and safe ordinary archive
|
|
60
|
+
(PR #462), and deployment-specific GitLab publication URLs (PR #461).
|
|
61
|
+
|
|
62
|
+
Web still defaults to loopback. Explicit private/wildcard binding requires
|
|
63
|
+
`--auth-file <absolute-path>` with an owner-only password file; the browser
|
|
64
|
+
username is `yui`. Authentication precedes workbench content, APIs and Terminal,
|
|
65
|
+
while sandbox previews retain their narrower, listener-scoped read tickets.
|
|
66
|
+
HTTP remains unencrypted: use a trusted network, not a public deployment.
|
|
67
|
+
Current Operator starts, `--detach`, and `--json` return Controller-owned
|
|
68
|
+
receipts; inspect with `yui web --status` and stop with `yui web --stop`.
|
|
69
|
+
Credential rotation requires stop/start, and Controller recovery does not
|
|
70
|
+
automatically reopen Web. See [controlled Web access](web-access.md).
|
|
71
|
+
|
|
72
|
+
Inbox consumers should use the current/history views and exact returned
|
|
73
|
+
identities. Missing acknowledgement is not proof that work was never executed.
|
|
74
|
+
A successor inspects original input and prior effects before settling a retained
|
|
75
|
+
claim; it does not replay the input or borrow another Session's authority.
|
|
76
|
+
Exact terminal handling checks remain bounded. Project delivery exclusions
|
|
77
|
+
require original scoped authorization and do not erase bindings or prove a merge.
|
|
78
|
+
See [CLI information contracts](cli-information-contract.md) and
|
|
79
|
+
[Project delivery scope](project-delivery-scope.md).
|
|
80
|
+
|
|
81
|
+
Storage advances from **1.11 to 1.13** through the centralized transitions:
|
|
82
|
+
**1.12** declares Project delivery decisions; **1.13** declares exact inbox
|
|
83
|
+
attempt/target identities, Global input retirement and terminal handling checks.
|
|
84
|
+
Historical messages, claims and acceptance evidence are preserved without
|
|
85
|
+
inventing old Turn ownership or ACKs. Supported **1.0–1.12** Homes use the
|
|
86
|
+
existing same-major update path. With separate update authorization, use
|
|
87
|
+
`yui update --version 2.10.0`; the updater owns preflight, backup, migration and
|
|
88
|
+
Controller handover. Do not open upgraded Homes with an older binary or edit
|
|
89
|
+
storage manually. Package minor numbering is not a blanket compatibility promise.
|
|
90
|
+
|
|
91
|
+
Release gates reuse exact-commit Core CI and test one runtime tarball on
|
|
92
|
+
Linux x64 and macOS x64/arm64 with Node 20/22/24/26 before npm publication.
|
|
93
|
+
These are deterministic and isolated runtime checks, not real-model validation.
|
|
94
|
+
Publishing does not update any global CLI, migrate a production Home, replace
|
|
95
|
+
an Agent Session or start a production Web listener.
|
|
96
|
+
|
|
97
|
+
### 2.9.0 compatibility and migration notes
|
|
98
|
+
|
|
99
|
+
This stable minor includes scoped Job definitions and exact execution Runs,
|
|
100
|
+
persistent Schedules, controlled Project refresh, and their Task/settings
|
|
101
|
+
management UI. It also includes Task124's activation-source and bounded
|
|
102
|
+
temporal-context changes (PR #458) and Task130's tool-neutral publication
|
|
103
|
+
verification (PR #459).
|
|
104
|
+
|
|
105
|
+
There are deliberate interface changes. Job definitions and Runs have distinct
|
|
106
|
+
identities; existing `job start/get/cancel/acknowledge` continue to address
|
|
107
|
+
one-shot Task executions, while `job define/run/runs/run-get` manage the new
|
|
108
|
+
definition/Run model. Schedules reference scoped Jobs and do not replace Run
|
|
109
|
+
results. `task brief update` now requires the `writeGuard` from `task brief show`
|
|
110
|
+
as `--if-current`; reread and reconcile after a stale-guard rejection. Activation
|
|
111
|
+
requests require explicit source provenance for Leaders. Context consumers must
|
|
112
|
+
respect bounded pages, frozen references and Home/Task-bound event continuations.
|
|
113
|
+
See [Jobs](job-runs.md), [Schedules](schedules.md) and
|
|
114
|
+
[CLI information contracts](cli-information-contract.md).
|
|
115
|
+
|
|
116
|
+
Leaders may verify a PR/MR through any authorized CLI/API and record exact
|
|
117
|
+
structured evidence with `task publication verify --observation`. Built-in
|
|
118
|
+
gh/glab adapters remain optional. `publication upsert --verified` can no longer
|
|
119
|
+
assert verification without evidence; use the verification entry point instead.
|
|
120
|
+
Existing historical evidence is retained. Candidate/object binding, immutable
|
|
121
|
+
history, observation freshness and ordinary archive safety remain enforced;
|
|
122
|
+
tool output interpretation remains the authorized Leader's responsibility.
|
|
123
|
+
|
|
124
|
+
Storage advances from **1.8 to 1.11** through the centralized contiguous
|
|
125
|
+
migrations: **1.9** adds Job definitions/global Runs and preserves each old
|
|
126
|
+
Task execution's identity and original payload; **1.10** adds Schedules;
|
|
127
|
+
**1.11** declares activation-source event provenance without inventing historical
|
|
128
|
+
sources or rewriting frozen digests. Supported **1.0–1.10** Homes use the
|
|
129
|
+
existing same-major update path. With update authorization, run
|
|
130
|
+
`yui update --version 2.9.0`; the updater owns preflight, backup, migration and
|
|
131
|
+
Controller handover. Do not open an upgraded Home with an older binary or edit
|
|
132
|
+
storage manually. Missing historical provenance remains an explicit diagnostic.
|
|
133
|
+
|
|
134
|
+
Release validation uses exact-commit Core CI and the existing fresh-install
|
|
135
|
+
matrix for the same runtime tarball on Linux x64, macOS x64/arm64 and Node
|
|
136
|
+
20/22/24/26, with checksums and npm provenance. This is not real-model or company
|
|
137
|
+
API validation. Package publication does not itself update any global CLI,
|
|
138
|
+
Home or Controller; that is a separately authorized Operator operation.
|
|
139
|
+
|
|
54
140
|
### 2.8.1 compatibility and migration notes
|
|
55
141
|
|
|
56
142
|
This patch fixes maintenance startup for an existing Operator conversation
|
|
@@ -36,6 +36,74 @@ Agent 选择一个预先声明的计划,设施从持久状态驱动该计划
|
|
|
36
36
|
不能将不兼容冒称为兼容,也不为回避版本选择新增历史兼容机制。包版本与协议、
|
|
37
37
|
持久存储契约仍然独立:兼容性检查和必要迁移要求不变,下文存储规则不授予发版权限。
|
|
38
38
|
|
|
39
|
+
### 2.10.0 兼容性及迁移说明
|
|
40
|
+
|
|
41
|
+
本稳定 minor 包含精确 Turn 收件箱处理与继任恢复(Task131 / PR #463、
|
|
42
|
+
Task134 / PR #464),以及受认证保护的可信内网 Web 和当前 Operator 生命周期
|
|
43
|
+
控制(Task135 / PR #465)。同时纳入显式 Task Project 交付范围与安全普通归档
|
|
44
|
+
(PR #462),以及部署特定 GitLab 发布 URL 支持(PR #461)。
|
|
45
|
+
|
|
46
|
+
Web 默认仍为 loopback。显式私网/通配监听要求
|
|
47
|
+
`--auth-file <absolute-path>` 指向仅本用户可访问的密码文件,浏览器用户名为 `yui`。
|
|
48
|
+
工作台页面、API 和 Terminal 之前必须认证;沙箱预览保留仅授权当前监听内特定
|
|
49
|
+
服务读取的窄票据。HTTP 仍不加密,只应在可信网络使用,不用于公网部署。
|
|
50
|
+
当前 Operator、`--detach` 和 `--json` 启动返回 Controller 持有的回执;
|
|
51
|
+
通过 `yui web --status` 查询、`yui web --stop` 停止。轮换密码需停止后重启,
|
|
52
|
+
Controller 恢复不会自动重新开放 Web。详见[受控 Web 访问](web-access.md)。
|
|
53
|
+
|
|
54
|
+
收件箱调用者应使用 current/history 视图及返回的精确身份;缺少 ACK 不代表
|
|
55
|
+
工作未执行。继任 Session 先检查原始输入和既有效果,再处理保留的 claim,
|
|
56
|
+
不重放输入,也不借用另一 Session 的权限。精确 terminal 的处理检查保持有界。
|
|
57
|
+
Project 交付排除须有原始范围授权,不删除 binding,也不证明代码已合并。
|
|
58
|
+
详见 [CLI 信息契约](cli-information-contract.zh-CN.md)和
|
|
59
|
+
[Project 交付范围](project-delivery-scope.md)。
|
|
60
|
+
|
|
61
|
+
存储经集中式连续迁移从 **1.11 升至 1.13**:**1.12** 声明 Project 交付决策;
|
|
62
|
+
**1.13** 声明精确 inbox attempt/target 身份、Global 输入退役及 terminal 处理检查。
|
|
63
|
+
历史消息、claim 和验收证据保留,不猜造旧 Turn 归属或 ACK。受支持的
|
|
64
|
+
**1.0–1.12** Home 沿用同 major 更新路径。另获更新授权后使用
|
|
65
|
+
`yui update --version 2.10.0`,由更新器负责预检、备份、迁移与 Controller 交接;
|
|
66
|
+
不要用旧程序打开升级后的 Home,也不要手工编辑存储。包 minor 编号不代表
|
|
67
|
+
对所有接口作向后兼容承诺。
|
|
68
|
+
|
|
69
|
+
发布门禁复用精确提交的 Core CI,并在 npm 发布前对同一 runtime tarball 执行
|
|
70
|
+
Linux x64、macOS x64/arm64 与 Node 20/22/24/26 的全新安装验证。
|
|
71
|
+
这是确定性和隔离运行时证据,不是真实模型验证。发布不会更新全局 CLI、
|
|
72
|
+
迁移生产 Home、替换 Agent Session 或启动生产 Web。
|
|
73
|
+
|
|
74
|
+
### 2.9.0 兼容性及迁移说明
|
|
75
|
+
|
|
76
|
+
本稳定 minor 包含分作用域的 Job 定义与精确执行 Run、持久 Schedule、受控 Project
|
|
77
|
+
刷新,以及 Task/设置页中的管理界面。同时纳入 Task124 的激活来源与有界时序
|
|
78
|
+
上下文改动(PR #458)和 Task130 的工具中立交付验证(PR #459)。
|
|
79
|
+
|
|
80
|
+
本版包含明确的接口变化:Job 定义与 Run 使用不同身份;原有
|
|
81
|
+
`job start/get/cancel/acknowledge` 仍针对单次 Task 执行,新
|
|
82
|
+
`job define/run/runs/run-get` 管理定义/Run 模型。Schedule 引用同作用域的 Job,
|
|
83
|
+
不替代执行结果。`task brief update` 现在必须把 `task brief show` 返回的
|
|
84
|
+
`writeGuard` 作为 `--if-current` 提交;旧 guard 被拒绝后需重读并协调修改。
|
|
85
|
+
Leader 的激活请求必须提供明确来源。上下文消费者须遵循有界分页、冻结引用、
|
|
86
|
+
Home/Task 绑定的事件续读契约。详见 [Jobs](job-runs.md)、
|
|
87
|
+
[Schedules](schedules.md) 和 [CLI 信息契约](cli-information-contract.zh-CN.md)。
|
|
88
|
+
|
|
89
|
+
Leader 可通过任意已获授权的 CLI/API 核验 PR/MR,再用
|
|
90
|
+
`task publication verify --observation` 保存精确结构化证据;内置 gh/glab
|
|
91
|
+
适配器仍为可选路径。`publication upsert --verified` 不再允许无证据声明验证,
|
|
92
|
+
应改用正式验证入口。已有历史证据保留;候选/对象绑定、不可变历史、观察时效和
|
|
93
|
+
普通归档安全边界继续执行,工具输出的语义判断仍由获授权 Leader 负责。
|
|
94
|
+
|
|
95
|
+
存储经集中式连续迁移从 **1.8 升至 1.11**:**1.9** 新增 Job 定义/全局 Run,
|
|
96
|
+
保留每个旧 Task 执行身份及原始 payload;**1.10** 新增 Schedule;**1.11**
|
|
97
|
+
声明激活来源事件属性,不猜造历史来源或改写冻结摘要。受支持的 **1.0–1.10**
|
|
98
|
+
Home 沿用同 major 更新路径。获更新授权后执行 `yui update --version 2.9.0`,
|
|
99
|
+
由更新器负责预检、备份、迁移与 Controller 交接;不要用旧程序打开已升级 Home,
|
|
100
|
+
也不要手工编辑存储。缺失的历史来源仍明确报告为诊断。
|
|
101
|
+
|
|
102
|
+
发布验证使用精确提交的 Core CI,以及针对同一 runtime tarball 的既有全新安装
|
|
103
|
+
矩阵,覆盖 Linux x64、macOS x64/arm64 和 Node 20/22/24/26,并保留校验和及 npm
|
|
104
|
+
来源证明;不冒称真实模型或公司 API 验证。包发布本身不会更新任何全局 CLI、
|
|
105
|
+
Home 或 Controller,这由另行获授权的 Operator 操作负责。
|
|
106
|
+
|
|
39
107
|
### 2.8.1 兼容性及迁移说明
|
|
40
108
|
|
|
41
109
|
本 patch 修复已有 Operator 会话仅携带 native 身份(包括 Codex Desktop)时的
|