@zq-silk/yui 2.7.1 → 2.8.1

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 (92) hide show
  1. package/dist/cli/commandCatalog.js +8 -7
  2. package/dist/cli/updateCommand.js +3 -0
  3. package/dist/cli/updatePorts.js +20 -0
  4. package/dist/commands/configCommands.js +1 -0
  5. package/dist/commands/globalRoleCommands.js +42 -35
  6. package/dist/commands/inboxCommands.js +60 -40
  7. package/dist/commands/taskCommands.js +7 -3
  8. package/dist/commands/taskRoleRuntimeStatus.js +2 -0
  9. package/dist/context/runContextPack.js +48 -3
  10. package/dist/context/taskContext.js +36 -12
  11. package/dist/controlPlaneCli.js +64 -17
  12. package/dist/controller/controller.js +5 -0
  13. package/dist/controller/fileSchedulerStoreAdapter.js +9 -4
  14. package/dist/controller/globalInputDelivery.js +17 -5
  15. package/dist/controller/globalRuntimeAttention.js +135 -5
  16. package/dist/controller/runtime.js +4 -0
  17. package/dist/controller/structuredProviderObservation.js +51 -15
  18. package/dist/controller/taskHostTerminalRecovery.js +33 -0
  19. package/dist/executor/fileRoleLaunchPlanner.js +4 -9
  20. package/dist/message/inboxReceipt.js +30 -0
  21. package/dist/message/taskInboxOwnership.js +25 -3
  22. package/dist/models/modelManagement.js +469 -0
  23. package/dist/models/modelManagementConfig.js +46 -0
  24. package/dist/models/modelManagementFiles.js +90 -0
  25. package/dist/models/modelManagementHttp.js +90 -0
  26. package/dist/models/modelManagementTypes.js +1 -0
  27. package/dist/output/boundedRead.js +43 -14
  28. package/dist/runtime/agentEndpointIdentity.js +8 -4
  29. package/dist/runtime/agentEndpointOwnership.js +5 -6
  30. package/dist/runtime/agentHost.js +62 -10
  31. package/dist/runtime/agentHostImplementation.js +18 -0
  32. package/dist/runtime/managedCaller.js +25 -1
  33. package/dist/runtime/managedIdentity.js +1 -1
  34. package/dist/runtime/providerRetry.js +19 -1
  35. package/dist/runtime/sessionCaller.js +53 -0
  36. package/dist/storage/contextRecords.js +28 -0
  37. package/dist/storage/maintenanceCaller.js +69 -0
  38. package/dist/storage/sqliteSchema.js +12 -2
  39. package/dist/storage/sqliteStore.js +9 -5
  40. package/dist/storage/storageVersions.js +1 -1
  41. package/dist/storage/taskStore.js +4 -0
  42. package/dist/task/completionReadiness.js +3 -3
  43. package/dist/web/assets/assetManifest.js +28 -2
  44. package/dist/web/assets/client/app/manage.js +6 -0
  45. package/dist/web/assets/client/app/models.js +20 -0
  46. package/dist/web/assets/client/app/settings.js +41 -9
  47. package/dist/web/assets/client/i18n/en.js +180 -2
  48. package/dist/web/assets/client/i18n/zh-CN.js +178 -2
  49. package/dist/web/assets/client/index.js +8 -0
  50. package/dist/web/assets/client/layout/manageShell.js +94 -0
  51. package/dist/web/assets/client/lib/api.js +13 -1
  52. package/dist/web/assets/client/lib/i18n.js +5 -3
  53. package/dist/web/assets/client/views/dock/conversation.js +231 -80
  54. package/dist/web/assets/client/views/models.js +777 -0
  55. package/dist/web/assets/client/views/skills.js +22 -15
  56. package/dist/web/assets/shared/icons.js +2 -0
  57. package/dist/web/assets/shared/manageNav.js +13 -0
  58. package/dist/web/assets/shell/manage.js +54 -0
  59. package/dist/web/assets/shell/models.js +7 -0
  60. package/dist/web/assets/shell/settings.js +1 -35
  61. package/dist/web/assets/shell/settingsContent.js +30 -0
  62. package/dist/web/assets/shell/sidebar.js +1 -0
  63. package/dist/web/assets/styles/index.js +6 -0
  64. package/dist/web/assets/styles/views/conversation.js +133 -0
  65. package/dist/web/assets/styles/views/manage.js +71 -0
  66. package/dist/web/assets/styles/views/models.js +129 -0
  67. package/dist/web/assets/styles/views/settings.js +28 -14
  68. package/dist/web/assets/styles/views/sidebar.js +1 -0
  69. package/dist/web/webServer.js +59 -9
  70. package/docs/cli-information-contract.md +42 -11
  71. package/docs/cli-information-contract.zh-CN.md +28 -7
  72. package/docs/managed-turn-and-session-runtime.md +47 -1
  73. package/docs/managed-turn-and-session-runtime.zh-CN.md +32 -0
  74. package/docs/release-workflow.md +80 -7
  75. package/docs/release-workflow.zh-CN.md +55 -4
  76. package/docs/storage-baseline.md +6 -1
  77. package/docs/storage-baseline.zh-CN.md +4 -1
  78. package/docs/testing/review-evaluation.md +148 -0
  79. package/docs/testing/review-evaluation.zh-CN.md +117 -0
  80. package/docs/testing/verification-levels.md +6 -2
  81. package/docs/testing/verification-levels.zh-CN.md +3 -0
  82. package/package.json +1 -1
  83. package/skills/yui-leader/VERSION +1 -1
  84. package/skills/yui-leader/references/execution.md +29 -0
  85. package/skills/yui-leader/references/replicated-execution.md +7 -0
  86. package/skills/yui-operator/SKILL.md +5 -1
  87. package/skills/yui-operator/VERSION +1 -1
  88. package/skills/yui-reviewer/SKILL.md +35 -0
  89. package/skills/yui-reviewer/VERSION +1 -1
  90. package/skills/yui-runtime/SKILL.md +53 -7
  91. package/skills/yui-runtime/VERSION +1 -1
  92. package/skills/yui-runtime/references/recovery.md +24 -5
@@ -51,6 +51,58 @@ 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.8.1 compatibility and migration notes
55
+
56
+ This patch fixes maintenance startup for an existing Operator conversation
57
+ that supplies only its native identity, including Codex Desktop. `doctor`,
58
+ `upgrade` and `update` authenticate against the supported Home before requiring
59
+ current storage, so an older Home can reach the updater's read-only preflight.
60
+ Structured preflight failures retain their original diagnosis and recovery
61
+ guidance. Ordinary commands still require current storage and current authority.
62
+
63
+ Storage remains **1.8**. The existing contiguous **1.0 through 1.8** migration
64
+ chain, backup, maintenance lock and exact Controller handover are unchanged.
65
+ Use `yui update --version 2.8.1`; no manual intermediate upgrade or replacement
66
+ native Session is required for supported Homes. Pre-1.0 / 0.x Home formats are
67
+ outside this release's supported migration contract; no historical authorization
68
+ exception or legacy conversion is introduced.
69
+
70
+ Verification includes an isolated published 2.7.1 CLI with storage 1.7 and a
71
+ live Controller/Host: one native-only update preserves the original Host and
72
+ native conversation, migrates storage and processes new input afterward.
73
+ Only the external Provider is simulated. Publishing does not update a user's
74
+ global CLI, Home or production Controller.
75
+
76
+ ### 2.8.0 compatibility and migration notes
77
+
78
+ This minor adds native metabridge model management: provider configuration,
79
+ cached model catalogs, and manual subscription-quota observations through the
80
+ supported CPA extensions. Models and Settings share navigation, canonical
81
+ section URLs, browser history, locale and theme handling. Content-versioned
82
+ static assets improve repeat navigation; HTML and account APIs remain uncached.
83
+ The release also includes the chat-style Conversation dock, bounded runtime
84
+ diagnostics, native caller/inbox corrections, and review-context improvements
85
+ merged since 2.7.1.
86
+
87
+ Storage advances from **1.7 to 1.8** through the centralized additive transition
88
+ for optional, non-secret model connection references. Existing Homes remain
89
+ unconfigured. A separately authorized upgrade can use
90
+ `yui update --version 2.8.0`; the updater owns preflight, backup, migration and
91
+ Controller replacement. Do not open an upgraded Home with an older binary or
92
+ edit its storage manually.
93
+
94
+ metabridge and CPA remain separately operated services; installing Yui does not
95
+ start, reload or adopt them. Configure their connection references explicitly.
96
+ Saving provider configuration does not prove it is applied or validate inference.
97
+ CPA still owns its upstream OAuth/account pool. Quota refresh may query billing
98
+ services but does not renew credentials, reset quota or run inference. Unknown,
99
+ partial and stale observations remain distinct.
100
+
101
+ Release evidence is deterministic core CI and isolated, fresh-install package
102
+ smoke on supported Linux/macOS and Node versions, not real-model validation.
103
+ Publishing this package alone does not authorize a global CLI update, a Home
104
+ migration, or any production-service restart.
105
+
54
106
  ### 2.7.1 compatibility and migration notes
55
107
 
56
108
  This release delivers the intended 2.7 feature line. The `v2.7.0` attempt stopped
@@ -351,13 +403,27 @@ Home database, including for process custody, native account locations, or
351
403
  execution-environment checks. Only the Controller owns storage and resolves
352
404
  durable facts; malformed current input fails at its normal protocol boundary.
353
405
 
354
- Breaking upgrades do not inherit historical Hosts or processes. Runtime startup,
355
- `upgrade`, `update`, and release activation no longer scan old Host sockets or
356
- processes, infer their capabilities, or negotiate a compatibility handoff. Use a
357
- clean runtime environment; this is not permission to discard pending work or
358
- kill resources of uncertain ownership. Current Controller restart, exact
359
- process-generation checks, handover locks, Session authority and event replay
360
- protection remain enforced.
406
+ Compatible upgrades retain logical Sessions and live Hosts. A build generation
407
+ is diagnostic provenance, not a native-resume gate: after a safe authorized Host
408
+ release, the current built-in adapter may resume the same native identity.
409
+ Model, account, permissions, workspace and current authority are not relaxed.
410
+ No module hot-replacement or old-code installation is used.
411
+
412
+ The supported interoperability range is the existing control/event v1 and RPC
413
+ version 1, not arbitrary historical processes. Host status now advertises
414
+ `controlCapabilities` and `hostImplementation` captured at process load, separate
415
+ from the Endpoint build. Controllers request `reconcile-turn` only when
416
+ advertised. Pre-advertisement v1 Hosts still support status and raw Inbox
417
+ consumption; exact terminal republication is unavailable, not guessed from a
418
+ package version. Unknown protocols remain refused.
419
+
420
+ `update` reports program/storage completion separately from retained Host state.
421
+ It neither interrupts compatible busy Hosts nor automatically replaces an
422
+ unsupported one. A required refresh uses the existing explicit lifecycle, with
423
+ exact Turn, background execution and writer-release evidence before reattachment.
424
+ Idle status alone is insufficient; uncertain state blocks refresh rather than
425
+ authorizing force-kill, input replay or a new native identity. Controller
426
+ handover locks, process-generation fences and Session authority remain enforced.
361
427
 
362
428
  Storage upgrades are limited to the current major's explicit minor steps.
363
429
  Cross-major conversion is independently authorized and is not a runtime fallback.
@@ -375,6 +441,13 @@ reporting alongside durable Run state. Pending native results or known reporting
375
441
  failures require attention; they do not mean the Provider failed, the Run ended,
376
442
  or the work was accepted. The Host's live diagnostics inspect only its own event
377
443
  file identities and never parse or quarantine another producer's newer payload.
444
+ Missing event delivery is unreported, not healthy. `unpersisted` counts original
445
+ facts still held in the Host after an Inbox write failure. Reconciliation first
446
+ retries those exact bytes in observation order, then republishes retained exact
447
+ terminal evidence; it does not execute input. Keep this Host alive until its
448
+ bytes are durable. A filesystem fault followed by process loss cannot be
449
+ repaired by inventing a result. Task and Global full reconciliation use the
450
+ same capability-gated operation, including a final input with no queued successor.
378
451
 
379
452
  ## CLI and Controller release boundary
380
453
 
@@ -36,6 +36,43 @@ Agent 选择一个预先声明的计划,设施从持久状态驱动该计划
36
36
  不能将不兼容冒称为兼容,也不为回避版本选择新增历史兼容机制。包版本与协议、
37
37
  持久存储契约仍然独立:兼容性检查和必要迁移要求不变,下文存储规则不授予发版权限。
38
38
 
39
+ ### 2.8.1 兼容性及迁移说明
40
+
41
+ 本 patch 修复已有 Operator 会话仅携带 native 身份(包括 Codex Desktop)时的
42
+ 维护启动循环。`doctor`、`upgrade`、`update` 先在受支持的旧 Home 上验证调用者,
43
+ 不再要求存储已经升级才能进入只读预检。结构化预检失败保留原始诊断与恢复指引;
44
+ 普通业务命令仍要求当前存储格式和有效权限。
45
+
46
+ 存储仍为 **1.8**,已有 **1.0 至 1.8** 连续迁移链、备份、维护锁和精确 Controller
47
+ 交接保持不变。可使用 `yui update --version 2.8.1`;受支持的 Home 不需要手工先做
48
+ 中间升级或更换 native 会话。1.0 之前/0.x Home 格式不在本次迁移支持范围内,
49
+ 本版本不引入旧格式转换或历史授权例外。
50
+
51
+ 隔离验证使用真实已发布的 2.7.1 CLI、1.7 Home 和运行中的 Controller/Host:
52
+ 一次 native-only update 保留原 Host 与 native 会话,完成存储迁移并继续处理新输入。
53
+ 仅外部 Provider 使用确定性模拟。发布不会更新用户真实全局 CLI、Home 或生产 Controller。
54
+
55
+ ### 2.8.0 兼容性及迁移说明
56
+
57
+ 本 minor 新增原生 metabridge 模型管理:提供商配置、模型目录缓存,以及经受支持
58
+ CPA 扩展手动查询的订阅额度。模型和设置共用导航、规范分区 URL、浏览器前后退、
59
+ 语言和主题处理;带内容版本的静态资源改善重复访问,HTML 与账号 API 仍不缓存。
60
+ 同时包含 2.7.1 之后合入的聊天式 Conversation 面板、有界运行诊断、原生调用者/
61
+ 收件箱修正,以及评审上下文改进。
62
+
63
+ 存储通过集中式增量迁移从 **1.7 升至 1.8**,新增可选、非密钥的模型连接引用;
64
+ 已有 Home 保持未配置。另行授权升级时可使用 `yui update --version 2.8.0`,
65
+ 由更新器负责预检、备份、迁移与 Controller 替换。不要使用旧程序打开升级后的
66
+ Home,也不要手工修改存储。
67
+
68
+ metabridge 与 CPA 仍为单独运维的服务,安装 Yui 不会启动、重载或自动接管它们,
69
+ 需显式配置连接引用。保存提供商配置不代表已生效,也不验证推理;CPA 继续负责其
70
+ 上游 OAuth/账号池。额度刷新可能查询计费服务,但不续期凭据、不重置额度、
71
+ 不执行推理;未知、部分成功和过期观测保持区分。
72
+
73
+ 发布证据为确定性核心 CI 与受支持 Linux/macOS、Node 版本上的隔离全新安装冒烟,
74
+ 不代表真实模型验证。仅发布本包不授予全局 CLI 更新、实际 Home 迁移或生产服务重启权限。
75
+
39
76
  ### 2.7.1 兼容性及迁移说明
40
77
 
41
78
  本版交付原定的 2.7 功能。`v2.7.0` 的运行包冒烟将 macOS 临时路径与其物理别名
@@ -265,10 +302,20 @@ Controller RPC 版本 1。Host 不打开 Home 数据库,包括进程归属、
265
302
  执行环境校验。只有 Controller 拥有存储并解析持久事实;非法当前输入在正常协议
266
303
  边界得到明确错误。
267
304
 
268
- 破坏性升级不承接历史 Host 或进程。启动、`upgrade`、`update` 和 release activation
269
- 不再扫描旧 Host socket/进程、推断旧能力或协商兼容交接。使用干净的运行时环境;
270
- 这不授权丢弃未决工作或终止归属不确定的资源。当前 Controller 正常重启、准确进程
271
- 代际校验、交接锁、Session 权限与事件防重放继续生效。
305
+ 兼容升级保留逻辑 Session 和存活 Host。构建 generation 仅作历史诊断,不再作为
306
+ 原生恢复门槛;通过已有获授权生命周期安全释放旧 Host 后,当前内置 adapter 可恢复
307
+ 同一原生身份,不改变模型、账号、权限或工作区,也不热替换模块或安装旧实现。
308
+
309
+ 支持范围明确为现有 control/event v1 与 RPC 版本 1,不承诺任意历史进程兼容。
310
+ Host status 用 `controlCapabilities` 声明控制能力,并用进程加载时捕获的
311
+ `hostImplementation` 区别于 Endpoint 构建。Controller 仅在明确声明时发送
312
+ `reconcile-turn`。没有能力字段的 v1 Host 仍可读取 status、消费原始 Inbox;
313
+ 精确终态重发能力不可用,不根据包版本猜测。未知协议仍拒绝。
314
+
315
+ `update` 区分程序/存储完成与保留 Host 的状态,不打断兼容的忙碌 Host,也不自动
316
+ 替换不支持的 Host。必要刷新沿用显式生命周期:先证明精确 Turn、后台执行与写入者
317
+ 已释放,再重新附着。仅 idle 不足以证明安全;状态未知时保留现场,不能强杀、
318
+ 重放输入或静默新建原生身份。Controller 交接锁、进程身份围栏与 Session 权限继续有效。
272
319
 
273
320
  存储升级仅包含同主版本内明确的小版本步骤。跨主版本转换独立授权,
274
321
  不构成运行时回退。
@@ -282,6 +329,10 @@ Global Context 命令保持自足,供远端 TUI/Desktop 使用。必须正确
282
329
  显示 Host 上报观测。原生结果待落库或已知上报故障需要关注,但不代表 Provider 失败、
283
330
  Run 已结束或业务已验收。Host 诊断只检查自己已投递文件的身份是否存在,不解析或隔离
284
331
  其他生产者的新格式事件。
332
+ 缺少 eventDelivery 表示未报告而非健康。`unpersisted` 是 Inbox 写入失败后仍保留在
333
+ 原 Host 内的原始事实数;协调先按观察顺序重试这些字节,再补发保留的精确终态,
334
+ 不重新执行输入。必须保留该 Host 直至落盘,不能在文件系统故障又进程丢失后编造结果。
335
+ Task 与 Global 的完整协调都使用同一能力检查,包括没有后续排队输入的最后一个 Turn。
285
336
 
286
337
  ## CLI 与 Controller 发布边界
287
338
 
@@ -2,7 +2,12 @@
2
2
 
3
3
  # Storage baseline 1.0
4
4
 
5
- Current storage is 1.7. The declared 1.6 → 1.7 transition adds optional Agent
5
+ Current storage is 1.8. The declared 1.7 → 1.8 transition permits an optional
6
+ Model management connection in Yui configuration. Only service addresses and
7
+ file references are stored; no credentials are imported. Existing Homes remain
8
+ unconfigured, and the SQL layout is unchanged.
9
+
10
+ The declared 1.6 → 1.7 transition adds optional Agent
6
11
  inbox claim and acknowledgement receipts to canonical Messages and Leader
7
12
  wakes, including the exact pending-window identity. Historical records and
8
13
  frozen Context digests remain unchanged; missing handling evidence is never
@@ -2,7 +2,10 @@
2
2
 
3
3
  # 存储基线 1.0
4
4
 
5
- 当前存储为 1.7。1.6 → 1.7 为规范 Message 和 Leader wake 增加可选的 Agent
5
+ 当前存储为 1.8。1.7 → 1.8 允许在 Yui 配置中保存可选的 Model 管理连接,
6
+ 仅保存服务地址及文件引用,不导入凭据;已有 Home 保持未配置,SQL 布局不变。
7
+
8
+ 1.6 → 1.7 为规范 Message 和 Leader wake 增加可选的 Agent
6
9
  信箱领取、确认消费回执及精确待处理窗口身份;不改写历史原文或冻结 Context 摘要,
7
10
  不将缺失的处理证据补写成投递或消费。物理 SQL 结构不变。
8
11
 
@@ -0,0 +1,148 @@
1
+ <p align="right"><strong>English</strong> | <a href="./review-evaluation.zh-CN.md">简体中文</a></p>
2
+
3
+ # First-round review: materials and offline evaluation
4
+
5
+ The default is one Reviewer using risk-appropriate perspectives, not a fixed
6
+ number of Agents or findings. Leader judgment still owns acceptance. Generic
7
+ methods live in `skills/yui-reviewer` and `skills/yui-leader`; project commands
8
+ and architecture rules remain in Project Skills/Policy.
9
+
10
+ ## Material handoff
11
+
12
+ Use existing requirements, decisions and verification results. A complex change
13
+ may benefit from a short Task artifact index:
14
+
15
+ - Goal/non-goals and effective decision references.
16
+ - Observable scenarios, expected behavior and independent contract sources.
17
+ - Contract entry points, callers and key risks.
18
+ - Candidate identity and actual check results (commit, environment, command,
19
+ result), distinguishing unexecuted scenarios and uncovered boundaries.
20
+ - For full re-review: repair delta, previous findings' dispositions and still
21
+ applicable evidence. The complete current frozen candidate remains in scope.
22
+
23
+ Save the index with `task artifact save`, then place its returned
24
+ `git:<commit>:<relativePath>` in Brief. New Review snapshots include the Brief
25
+ and active decisions. Read relevant bodies using the exact `store/refId` from
26
+ the Context inventory, following content pagination. A same-Task artifact is
27
+ read at its pinned commit with `task artifact read <task> <path> <commit>`.
28
+ Later Brief/decision edits do not change an existing Review snapshot. This is
29
+ not a document-completeness gate, prose parser or Skill-version freeze.
30
+ Ordinary full review and the existing equivalence Delta Recheck remain distinct.
31
+
32
+ ## Small development corpus
33
+
34
+ `scripts/review-eval/` is an offline file tool, not a scheduler, model adapter or
35
+ new Core store. It never calls a provider. No historical Task cases or results
36
+ are inputs. All eight examples are newly constructed from explicit contracts.
37
+
38
+ | Cases | Capability | Shape |
39
+ | --- | --- | --- |
40
+ | E01 | Half-open interval behavior | Introductory single root |
41
+ | E02 | Persistence failure and repeat identity | Two independent roots in one complete candidate |
42
+ | E03 | Producer/consumer opaque-cursor contract | Two modules |
43
+ | E04–E06 | Lifecycle, partial-result correspondence, authorization effects | Intermediate state/contract cases |
44
+ | E07–E08 | Distinguishing permitted behavior from defects | LRU and progressive-display controls |
45
+
46
+ Every package supplies a complete candidate, not a historical patch; there is no
47
+ required repository baseline. Requirements define inputs, non-goals and effects.
48
+ The scorer catalogue holds root/trigger/violation/impact and repair controls.
49
+ `verify.mjs` probes observable behavior against independent literal expectations,
50
+ checks seven target roots, passing repairs and normal controls. It does not
51
+ prove exhaustive correctness, independent authorship verification or Agent
52
+ effectiveness. Additional valid findings require adjudication.
53
+
54
+ ```sh
55
+ node scripts/review-eval/evaluate.mjs verify
56
+ node scripts/review-eval/evaluate.mjs export E03 basic /absolute/new-participant-directory
57
+ ```
58
+
59
+ Export uses an explicit projection of candidate source and requirements; indexed
60
+ materials add only a navigation index. Both have identical necessary contracts
61
+ and source. Exports contain no gold, repair, scorer code, family labels or Git
62
+ history. Existing destinations are refused. A failed export may leave a partial
63
+ directory: inspect it, do not use it as a complete participant package.
64
+
65
+ Export is NOT a filesystem sandbox. A participant with access to this repository,
66
+ the scorer directory, prior sessions or the network can obtain answers.
67
+ Only claim blind evaluation after a separately provisioned isolated environment
68
+ denies those paths/tools, with access probes and exact evidence. Never use a
69
+ “do not read answers” instruction as isolation.
70
+
71
+ These are public development cases. Unknown holdouts must be separately authored
72
+ after the method/protocol is fixed, with independent contract checking and a
73
+ family-level overlap audit. Renamed, repaired or near-variant development cases
74
+ cannot become holdouts. Keep holdout source, labels and adjudication outside
75
+ participant access and method-tuning conversations. This tool deliberately
76
+ does not fabricate a holdout or claim one has been evaluated.
77
+
78
+ ## Freeze a comparison before running it
79
+
80
+ ```sh
81
+ node scripts/review-eval/evaluate.mjs plan protocol.json
82
+ node scripts/review-eval/evaluate.mjs score plan.json records.json
83
+ ```
84
+
85
+ Capture stdout as separate files using your normal artifact workflow. The
86
+ protocol is a JSON object with nonempty `model`, `effort`, `tools`, `environment`,
87
+ `budget`, `seed`; positive `repeats`; and `baseline`/`improved` maps of relative
88
+ Skill paths to exact UTF-8 contents, including their VERSION and required
89
+ references. Load these only in isolated evaluation configuration, not global
90
+ installation. This file is scorer-side; it contains both methods.
91
+
92
+ The plan assigns A=baseline/basic, B=improved/basic, C=baseline/indexed,
93
+ D=improved/indexed. It fixes corpus/config/source/material/Skill digests and run
94
+ IDs, seed-orders case/repeat blocks and balances group position by Latin rotation.
95
+ Three repeats over eight development cases means 96 runs, not an authorization
96
+ or statistical-power claim. Do not change models, budgets or tools between groups.
97
+ An extra independent-Reviewer comparison is a separate experiment with all
98
+ producer and synthesis costs, optionally with matched total budgets.
99
+
100
+ There is no live execution or automatic retry command. Actual runs require
101
+ explicit resource/effect authorization, fresh participant sessions and verified
102
+ isolation. Preserve exact inputs, actually loaded Skills/configuration, raw
103
+ outputs and execution/tool evidence. Do not infer a successful run from dispatch.
104
+ Predeclare any retry protocol separately, retain original failures and every
105
+ attempt's costs; do not replace a failed planned record with a successful retry
106
+ in the primary analysis. This minimal tool reports one attempt per planned run.
107
+
108
+ ## Adjudicate before aggregation
109
+
110
+ `records.json` is an array. Each supplied record contains its planned `id`,
111
+ `planDigest`, observed `candidateDigest`, `materialDigest`, `skillDigest`, `configDigest`, and
112
+ `status` (`completed`, `timeout`, `infra-failed`, `not-run`). Executed records
113
+ also contain `evidenceRef` and `rawOutput`; incomplete records require `reason`.
114
+ Identity digests are evidence supplied by the execution recorder, not attestation
115
+ by this offline tool. Preserve the actual model/tool/environment configuration
116
+ in that evidence and exclude protocol deviations rather than relabeling them.
117
+ `configDigest` hashes the JSON object containing `model`, `effort`, `tools`,
118
+ `environment`, `budget` in that order. Other digests use the exported `digest`
119
+ helper (SHA-256 of `JSON.stringify(value)`). Reports bind the complete supplied
120
+ record array with `recordsDigest`; retain that file alongside the plan/report.
121
+
122
+ Completed records require `findings` (empty is valid). Each finding contains
123
+ `id`, original `claim`, and `verdict`: `valid`, `invalid`, `pending`, `gap` or
124
+ `suggestion`. Valid/invalid adjudications also require `root`, `reason` and
125
+ `evidence`. Match meaning, triggers, violated constraints and impact, not wording
126
+ or line numbers. Use the catalogue root ID only after checking evidence.
127
+ Unlisted valid roots use `novel:<stable-key>` after separate verification;
128
+ never automatically label them false positives. Keep disputes pending.
129
+ Use a scorer who does not see group labels when practical; disclose if author,
130
+ checker and scorer are the same person/Agent.
131
+
132
+ Optional `coverage` entries contain `perspective`, `scenario`, `expected` and
133
+ `evidence`, using the case's applicable perspectives. These remain claims to
134
+ inspect, not automatic proof. Optional `metrics` contains nonnegative `wallMs`,
135
+ `agentCalls`, `toolCalls`, `inputTokens`, `outputTokens`, `contextBytes`, `cost`
136
+ (one predeclared currency). Missing values remain missing, never estimated.
137
+
138
+ The report includes per-case repeated recalls, macro/micro known-root recall,
139
+ adjudicated unique-root precision, false positives and control false-positive
140
+ rate, duplicate/novel/pending counts, planned completion and discovery yield,
141
+ cost availability and Skill/material/interaction contrasts. Zero denominators
142
+ are null. Partial outputs are retained in originals but excluded from completed
143
+ first-round metrics. Missing planned runs remain `not-run`; they are not clean
144
+ reviews. Failed-run costs still count. Completed-only contrasts can be biased:
145
+ inspect failures, denominators and per-case variation before interpretation.
146
+ If gold changes, preserve the old plan and rescore every group under the same
147
+ new adjudication version, reporting both results. No automatic acceptance
148
+ threshold or generalization claim follows from this small synthetic corpus.
@@ -0,0 +1,117 @@
1
+ <p align="right"><a href="./review-evaluation.md">English</a> | <strong>简体中文</strong></p>
2
+
3
+ # 首轮审查:材料与离线评测
4
+
5
+ 默认单 Reviewer 按风险使用互补视角,不固定 Agent 或 Findings 数量。
6
+ 验收仍由 Leader 判断。通用方法位于 `skills/yui-reviewer` 和
7
+ `skills/yui-leader`;项目命令与架构规则保留在 Project Skill/Policy。
8
+
9
+ ## 材料交接
10
+
11
+ 复用有效要求、决定和验证结果。复杂变更可以保存简短的 Task 工件索引:
12
+
13
+ - 目标/非目标及有效决定入口。
14
+ - 可观察场景、预期行为和独立契约依据。
15
+ - 契约入口、调用方及关键风险。
16
+ - 候选身份和实际检查结果(提交、环境、命令、结果),区分未执行场景与未覆盖边界。
17
+ - 完整复审追加修复 delta、历史 Findings 处置及仍适用证据;当前完整冻结候选仍在范围内。
18
+
19
+ 通过 `task artifact save` 保存索引,将返回的
20
+ `git:<commit>:<relativePath>` 放入 Brief。新的 Review Snapshot 包含 Brief
21
+ 及 active 决定。按 Context inventory 的精确 `store/refId` 读取相关正文并跟完内容分页。
22
+ 同 Task 工件通过 `task artifact read <task> <path> <commit>` 读取固定提交。
23
+ 后续 Brief/决定修改不改变既有 Review Snapshot。这不是文档齐全门禁、
24
+ 自然语言解析器或 Skill 版本冻结机制。普通完整复审与已有等价性 Delta Recheck 保持不同语义。
25
+
26
+ ## 小型开发集
27
+
28
+ `scripts/review-eval/` 是离线文件工具,不是调度器、模型适配器或新增 Core 存储。
29
+ 它不调用 Provider,不以任何历史 Task 案例或结果为输入。八个题目均由明确契约新构造。
30
+
31
+ | 案例 | 能力 | 形态 |
32
+ | --- | --- | --- |
33
+ | E01 | 半开区间行为 | 入门单根因 |
34
+ | E02 | 持久化失败与重试身份 | 一个完整候选内的两个独立根因 |
35
+ | E03 | 生产者/消费者不透明游标契约 | 两个模块 |
36
+ | E04–E06 | 生命周期、部分结果对应、授权副作用 | 中等状态/契约题 |
37
+ | E07–E08 | 区分合法行为与缺陷 | LRU 与渐进展示正确对照 |
38
+
39
+ 每包提供完整候选,不是历史补丁,也不要求仓库基线。要求明确输入、非目标和副作用。
40
+ 评分侧目录保存根因、触发、违反约束、影响及修复对照。
41
+ `verify.mjs` 用独立的字面预期检查可观察行为,验证七个目标根因、通过的修复及正常对照。
42
+ 这不证明穷尽正确性、独立出题核实或 Agent 效果。额外有效发现需要裁定。
43
+
44
+ ```sh
45
+ node scripts/review-eval/evaluate.mjs verify
46
+ node scripts/review-eval/evaluate.mjs export E03 basic /absolute/new-participant-directory
47
+ ```
48
+
49
+ 导出仅投影候选源码与要求;indexed 材料只增加导航索引。两组的必要契约与源码完全相同。
50
+ 导出不含 gold、修复、评分器、家族标签或 Git 历史,拒绝已有目标目录。
51
+ 导出失败可能留下部分目录,应检查并避免当作完整受测包使用。
52
+
53
+ 导出不是文件系统沙箱。若受测者能读本仓库、评分目录、先前会话或网络,仍可能获得答案。
54
+ 只有另行配置的隔离环境确实拒绝这些路径/工具访问,并留存探针证据,才能声称盲测。
55
+ “禁止看答案”的提示词不能代替隔离。
56
+
57
+ 这些是公开开发题。未知保留题必须在方法与协议确定后单独编写,独立核实契约并做家族重叠审计。
58
+ 开发题的改名、修复和近似变体不能变成保留题。保留源码、标签和裁定材料不得进入受测权限或
59
+ 方法调优会话。本工具明确不伪造保留集,也不声称已评测保留集。
60
+
61
+ ## 运行前固定比较协议
62
+
63
+ ```sh
64
+ node scripts/review-eval/evaluate.mjs plan protocol.json
65
+ node scripts/review-eval/evaluate.mjs score plan.json records.json
66
+ ```
67
+
68
+ 按正常工件流程将 stdout 保存为单独文件。协议 JSON 包括非空
69
+ `model`、`effort`、`tools`、`environment`、`budget`、`seed`,正整数 `repeats`,
70
+ 以及 `baseline`/`improved` 两个“Skill 相对路径 → 精确 UTF-8 内容”映射,
71
+ 包含 VERSION 和必要引用。只在隔离评测配置加载,不修改全局安装。
72
+ 协议文件属于评分侧,含两种方法,不能整体交给受测者。
73
+
74
+ 计划固定 A=baseline/basic、B=improved/basic、C=baseline/indexed、
75
+ D=improved/indexed,记录题库、配置、源码、材料、Skill 摘要与 run ID。
76
+ 按 seed 排列案例/重复块,并以拉丁轮换平衡组别位置。八题各重复三次是 96 次运行,
77
+ 不是资源授权或统计效力承诺。各组不得更换模型、预算或工具。
78
+ 额外独立 Reviewer 属于另一项试验,计入全部生产者与汇总成本,可补同总预算比较。
79
+
80
+ 没有真实执行或自动重试命令。实际运行需要明确资源/副作用授权、全新受测会话和已验证隔离。
81
+ 保留精确输入、实际加载的 Skill/配置、原始输出与执行/工具证据,不能把投递当成功执行。
82
+ 重试规则须另行预先规定,保留原失败及全部尝试成本;主分析不得以成功重试覆盖失败的计划记录。
83
+ 此最小工具每个计划 run 只统计一次尝试。
84
+
85
+ ## 先裁定,再汇总
86
+
87
+ `records.json` 是数组。每条记录包含计划 `id`、`planDigest`、
88
+ 实际观察到的 `candidateDigest`、`materialDigest`、`skillDigest`、`configDigest` 及 `status`
89
+ (`completed`、`timeout`、`infra-failed`、`not-run`)。
90
+ 已执行记录还包含 `evidenceRef`、`rawOutput`;未完成记录需要 `reason`。
91
+ 身份摘要来自执行记录者,本离线工具不为其真实性背书。
92
+ 实际模型/工具/环境配置保留在证据中;协议偏离应单列排除,不能重标为合规运行。
93
+ `configDigest` 对依次包含 `model`、`effort`、`tools`、`environment`、`budget`
94
+ 的 JSON 对象取摘要。其他摘要使用导出的 `digest` helper
95
+ (`JSON.stringify(value)` 的 SHA-256)。报告通过 `recordsDigest` 绑定完整输入记录数组;
96
+ 该文件应与计划、报告一同保留。
97
+
98
+ 完成记录必须有 `findings`(允许空数组)。每条含 `id`、原始 `claim` 和
99
+ `verdict`:`valid`、`invalid`、`pending`、`gap` 或 `suggestion`。
100
+ valid/invalid 还必须有 `root`、`reason`、`evidence`。
101
+ 按语义、触发、违反约束及影响匹配,不按标题或行号匹配;核实证据后才使用题库根因 ID。
102
+ gold 外有效根因经单独核实后用 `novel:<stable-key>`,不自动判误报;争议保留 pending。
103
+ 可行时让评分者不见组别;编题、核实和评分由同一人/Agent 完成时必须披露独立性限制。
104
+
105
+ 可选 `coverage` 条目含 `perspective`、`scenario`、`expected`、`evidence`,
106
+ 使用案例适用视角。它仍是待检查的覆盖声明,不是自动证明。
107
+ 可选 `metrics` 包含非负 `wallMs`、`agentCalls`、`toolCalls`、`inputTokens`、
108
+ `outputTokens`、`contextBytes`、`cost`(预先约定同一币种)。
109
+ 缺失值保持缺失,不估造。
110
+
111
+ 报告包含逐题重复召回、已知根因宏/微召回、已裁定去重有效比例、误报及正确对照误报率、
112
+ 重复/新增/待裁定数、计划完成率与发现产出、成本可得性、Skill/材料/交互差异。
113
+ 零分母为 null;部分输出保留在原记录,但不混入完整首轮指标。
114
+ 缺失计划 run 保持 not-run,不算“审查无问题”;失败运行成本仍计入。
115
+ 完成子集的比较可能有选择偏差,须结合失败、分母及逐题波动解释。
116
+ gold 修改后保留旧计划,在统一新裁定版本下重算所有组并同时报告新旧结果。
117
+ 此小型构造集不产生自动验收阈值或真实项目泛化结论。
@@ -50,12 +50,12 @@ is required.
50
50
  ## Permanent core smoke
51
51
 
52
52
  `npm test` and `npm run test:core` build the checkout and run the maintained suite.
53
- The stable suite owns current storage 1.7 and its declared 1.0/1.1/1.2/1.3/1.4/1.5/1.6 minor
53
+ The stable suite owns current storage 1.8 and its declared 1.0/1.1/1.2/1.3/1.4/1.5/1.6/1.7 minor
54
54
  transition. It contains no undeclared historical format compatibility path.
55
55
 
56
56
  Current coverage includes:
57
57
 
58
- 1. Fresh storage 1.7, exact schema/record validation, no initialization over
58
+ 1. Fresh storage 1.8, exact schema/record validation, no initialization over
59
59
  unknown data, and rejection of old integer formats without mutation.
60
60
  2. Exact-version staging, mismatched-target refusal, same-major contiguous
61
61
  minor preflight, explicit maintenance-owner identity across handover, and
@@ -102,6 +102,10 @@ including cross-Role links. Entry points and their referenced Markdown must
102
102
  ship together. File/format checks establish availability, not Agent behavior;
103
103
  do not add prose-matching tests or claim model validation from static checks.
104
104
 
105
+ For review-material handoff and the small original development corpus, see
106
+ [review evaluation](review-evaluation.md). Its offline contract probes and
107
+ adjudication aggregation are deterministic; they do not run or measure a model.
108
+
105
109
  ## CI and release
106
110
 
107
111
  `ci.yml` runs core plus one assembled-package normal-path smoke per supported
@@ -70,6 +70,9 @@ package-start 检查跟随已安装树中的本地 Skill 引用,包括跨 Role
70
70
  的 Markdown 必须一起发布。文件/格式检查确立可用性,而不是 Agent 行为;不要添加基于
71
71
  散文匹配的测试,也不要从静态检查中宣称模型验证。
72
72
 
73
+ 审查材料交接与小型原创开发集见[审查评测](review-evaluation.zh-CN.md)。
74
+ 其中离线契约探针和裁定汇总属于确定性检查,不运行或测量模型。
75
+
73
76
  ## CI 与发布
74
77
 
75
78
  `ci.yml` 在每个 PR 上构建一次,运行 core 及一个组装包正常链路检查,不重复 lint,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zq-silk/yui",
3
- "version": "2.7.1",
3
+ "version": "2.8.1",
4
4
  "description": "Local control plane for long-running native agent CLI sessions backed by tmux.",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -1 +1 @@
1
- 2
1
+ 3
@@ -303,6 +303,24 @@ authority. Never invent authorization, impersonate Operator, or modify the core
303
303
 
304
304
  ## Validate and make the review judgment
305
305
 
306
+ Prepare useful evidence, not a documentation gate. Supply or reference the
307
+ effective goals/non-goals and decisions, independently grounded expected
308
+ behavior, key user paths/constraints, contract entry points and relevant callers.
309
+ Keep three things distinct: a behavioral scenario and its expectation, an
310
+ executable test reference, and an actual result with candidate/environment/
311
+ command. Disclose real gaps rather than deriving acceptance from current code.
312
+
313
+ Small tasks can reference existing materials directly. For complex tasks, put a
314
+ short review index in Task artifacts and its commit-pinned reference in Brief.
315
+ Keep Brief an up-to-date summary, not a copy of documents or accumulated history.
316
+ Review Context carries the frozen Brief and active decisions; inspect the
317
+ actual pointer inventory when a material's delivery is uncertain. Read referenced
318
+ same-Task artifacts at their fixed commits, not HEAD. Do not assume a path in
319
+ `--input`, a WorkItem-only `--context-ref` option, or a summary grants Review
320
+ access. Recover a missing authorized reference through existing mechanisms;
321
+ do not ask the Reviewer to bypass scope. Materials guide independent inspection,
322
+ not its upper bound.
323
+
306
324
  Use the smallest evidence that establishes the accepted behavior and material
307
325
  boundaries. Do not repeat a successful unchanged check. Run the Project's
308
326
  complete local delivery validation once on the final candidate when its Policy
@@ -328,6 +346,10 @@ Use one direct main Reviewer by default. If independent replicas materially
328
346
  improve evidence, read [replicated execution](replicated-execution.md)
329
347
  before dispatch or synthesis. Honor required review contracts even when a
330
348
  cheaper execution path is otherwise available.
349
+ One Reviewer should use the applicable complementary perspectives in one round.
350
+ Consider independent replication for genuinely complementary cross-system risks,
351
+ not a fixed headcount or file/frontend/backend partition. Keep the same candidate
352
+ and common requirements; risk emphasis must not hide cross-layer contracts.
331
353
 
332
354
  When several WorkItems contribute to one outcome, prefer one independent
333
355
  Task-final Review after their accepted results are integrated over repeating a
@@ -358,6 +380,13 @@ main synthesis through its exact AgentRun, preserving its selected source snapsh
358
380
  A Worker or Reviewer AgentRun result is evidence, not acceptance. Inspect the
359
381
  result, diff, checks, and current Candidate before deciding.
360
382
 
383
+ Group confirmed findings by root cause and repair other reachable instances
384
+ within scope together. For ordinary full re-review, preserve the current complete
385
+ candidate and requirements; add repair delta, prior finding dispositions and
386
+ still-valid evidence. Delta is an attention aid, not the full-review boundary.
387
+ Do not conflate this with an explicitly authorized equivalence Delta Recheck.
388
+ Neither finding counts, fixed round counts nor a majority vote decides acceptance.
389
+
361
390
  If a result is insufficient, reject it with bounded feedback and redispatch
362
391
  the same WorkItem and Role while scope remains valid. Before accepting isolated
363
392
  Git changes, read [Integration](integration.md) to capture and
@@ -31,6 +31,9 @@ Retry main synthesis through its exact AgentRun, preserving the source snapshot.
31
31
 
32
32
  A Producer independently inspects or implements its exact frozen Assignment
33
33
  in the supplied Lane workspace and returns one complete original result.
34
+ For Review, give Producers common requirements/contracts and the same candidate.
35
+ Different risk emphases are not file ownership or permission to omit cross-layer
36
+ interactions. Form independent initial results before reading sibling conclusions.
34
37
  Its evidence does not authorize a Candidate, ChangeSet, Integration or
35
38
  acceptance decision outside the assigned protocol.
36
39
 
@@ -40,3 +43,7 @@ judgment, and returns one authoritative report. Do not mutate source results,
40
43
  omit selected evidence, rerun Producers, or substitute a winning Lane for
41
44
  synthesis. A Review report remains evidence for Task acceptance, not acceptance
42
45
  itself.
46
+ Deduplicate by root cause while retaining distinct triggers, coverage and
47
+ unexamined risks. Explain disagreements and unresolved evidence; do not discard
48
+ a valid minority finding or substitute voting for checking its contract and
49
+ reachability.
@@ -239,12 +239,16 @@ do not wait for another wake or copy pending notices into new input. Read every
239
239
  relevant original and finish the authorized routing/disposition before ack.
240
240
 
241
241
  Use JSON reads and their top-level `data` field.
242
- Use Global Context's `pending`/`recent` pages to find Messages, then
242
+ Use Global Context's bounded `pending` page to find Messages, then
243
243
  `role message show operator <id>` for the original. A successful send receipt
244
244
  contains saved identity and delivery/control facts, not another copy of the
245
245
  submitted body. Follow Runtime's bounded-read contract for list continuations
246
246
  and long `contentPage` details; do not decode `output` as nested JSON or print
247
247
  an entire Context again merely to extract one already-returned reference.
248
+ History and diagnostic aggregates are explicit `role message list` reads.
249
+ Use `--diagnostics` for classified occurrence counts and `--diagnostic <key>`
250
+ for evidence discovery within the caller's authorized Role scope. Do not
251
+ automatically traverse all history or ask a failing Operator to wake itself.
248
252
 
249
253
  Report the facts needed to understand the outcome:
250
254
 
@@ -1 +1 @@
1
- 2
1
+ 3