@orion-agents/orion-code 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +73 -14
  3. package/README.zh-CN.md +63 -13
  4. package/bin/orion +15 -4
  5. package/dist/cli.js +51 -172
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/model-command-handlers.d.ts +2 -2
  8. package/dist/commands/model-command-handlers.d.ts.map +1 -1
  9. package/dist/commands/model-command-handlers.js +113 -32
  10. package/dist/commands/model-command-handlers.js.map +1 -1
  11. package/dist/commands/session-command-handlers.d.ts +1 -1
  12. package/dist/commands/session-command-handlers.d.ts.map +1 -1
  13. package/dist/commands/session-command-handlers.js +121 -16
  14. package/dist/commands/session-command-handlers.js.map +1 -1
  15. package/dist/commands/types.d.ts +14 -2
  16. package/dist/commands/types.d.ts.map +1 -1
  17. package/dist/commands/types.js +1 -1
  18. package/dist/commands/types.js.map +1 -1
  19. package/dist/index.d.ts +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/runtime/agent-loop.d.ts +2 -0
  22. package/dist/runtime/agent-loop.d.ts.map +1 -1
  23. package/dist/runtime/agent-loop.js +4 -3
  24. package/dist/runtime/agent-loop.js.map +1 -1
  25. package/dist/runtime/agent-runtime-controller.d.ts +32 -1
  26. package/dist/runtime/agent-runtime-controller.d.ts.map +1 -1
  27. package/dist/runtime/agent-runtime-controller.js +250 -31
  28. package/dist/runtime/agent-runtime-controller.js.map +1 -1
  29. package/dist/runtime/agent-runtime-runner.d.ts +3 -0
  30. package/dist/runtime/agent-runtime-runner.d.ts.map +1 -1
  31. package/dist/runtime/goal-runtime-coordinator.d.ts +6 -0
  32. package/dist/runtime/goal-runtime-coordinator.d.ts.map +1 -1
  33. package/dist/runtime/goal-runtime-coordinator.js +5 -0
  34. package/dist/runtime/goal-runtime-coordinator.js.map +1 -1
  35. package/dist/runtime/legacy-thread-materializer.d.ts +18 -0
  36. package/dist/runtime/legacy-thread-materializer.d.ts.map +1 -1
  37. package/dist/runtime/legacy-thread-materializer.js +27 -12
  38. package/dist/runtime/legacy-thread-materializer.js.map +1 -1
  39. package/dist/runtime/orion-runtime-v1.d.ts +3 -0
  40. package/dist/runtime/orion-runtime-v1.d.ts.map +1 -1
  41. package/dist/runtime/orion-runtime-v1.js +8 -1
  42. package/dist/runtime/orion-runtime-v1.js.map +1 -1
  43. package/dist/runtime/orion-session-runner.d.ts +7 -1
  44. package/dist/runtime/orion-session-runner.d.ts.map +1 -1
  45. package/dist/runtime/orion-session-runner.js +35 -3
  46. package/dist/runtime/orion-session-runner.js.map +1 -1
  47. package/dist/runtime/product-bootstrap.d.ts +22 -0
  48. package/dist/runtime/product-bootstrap.d.ts.map +1 -0
  49. package/dist/runtime/product-bootstrap.js +374 -0
  50. package/dist/runtime/product-bootstrap.js.map +1 -0
  51. package/dist/runtime/product-orion-runtime.d.ts +2 -1
  52. package/dist/runtime/product-orion-runtime.d.ts.map +1 -1
  53. package/dist/runtime/product-orion-runtime.js +114 -16
  54. package/dist/runtime/product-orion-runtime.js.map +1 -1
  55. package/dist/runtime/protocol/runtime-protocol-v1.d.ts +1 -1
  56. package/dist/runtime/protocol/runtime-protocol-v1.js +1 -1
  57. package/dist/runtime/protocol/runtime-protocol-v1.js.map +1 -1
  58. package/dist/runtime/release-receipts.d.ts +63 -2
  59. package/dist/runtime/release-receipts.d.ts.map +1 -1
  60. package/dist/runtime/release-receipts.js +298 -7
  61. package/dist/runtime/release-receipts.js.map +1 -1
  62. package/dist/runtime/session-history-recovery.d.ts +19 -0
  63. package/dist/runtime/session-history-recovery.d.ts.map +1 -0
  64. package/dist/runtime/session-history-recovery.js +45 -0
  65. package/dist/runtime/session-history-recovery.js.map +1 -0
  66. package/dist/runtime/step-snapshot.d.ts.map +1 -1
  67. package/dist/runtime/step-snapshot.js +22 -2
  68. package/dist/runtime/step-snapshot.js.map +1 -1
  69. package/dist/runtime/subagents/runtime-integration.d.ts +1 -1
  70. package/dist/runtime/subagents/runtime-integration.d.ts.map +1 -1
  71. package/dist/runtime/subagents/runtime-integration.js +5 -2
  72. package/dist/runtime/subagents/runtime-integration.js.map +1 -1
  73. package/dist/runtime/thread-event-store.d.ts +27 -0
  74. package/dist/runtime/thread-event-store.d.ts.map +1 -1
  75. package/dist/runtime/thread-event-store.js +119 -17
  76. package/dist/runtime/thread-event-store.js.map +1 -1
  77. package/dist/runtime/thread-projection.d.ts +10 -0
  78. package/dist/runtime/thread-projection.d.ts.map +1 -1
  79. package/dist/runtime/thread-projection.js +40 -0
  80. package/dist/runtime/thread-projection.js.map +1 -1
  81. package/dist/runtime/thread-runtime.d.ts +3 -1
  82. package/dist/runtime/thread-runtime.d.ts.map +1 -1
  83. package/dist/runtime/thread-runtime.js +6 -0
  84. package/dist/runtime/thread-runtime.js.map +1 -1
  85. package/dist/runtime/thread-session-view.d.ts +88 -0
  86. package/dist/runtime/thread-session-view.d.ts.map +1 -0
  87. package/dist/runtime/thread-session-view.js +327 -0
  88. package/dist/runtime/thread-session-view.js.map +1 -0
  89. package/dist/runtime/thread-ui-adapter.d.ts +4 -0
  90. package/dist/runtime/thread-ui-adapter.d.ts.map +1 -1
  91. package/dist/runtime/thread-ui-adapter.js +193 -5
  92. package/dist/runtime/thread-ui-adapter.js.map +1 -1
  93. package/dist/runtime/ui-events.d.ts +37 -0
  94. package/dist/runtime/ui-events.d.ts.map +1 -1
  95. package/dist/runtime/ui-events.js +1 -0
  96. package/dist/runtime/ui-events.js.map +1 -1
  97. package/dist/runtime/ui-view-model.d.ts +3 -0
  98. package/dist/runtime/ui-view-model.d.ts.map +1 -1
  99. package/dist/runtime/ui-view-model.js +10 -3
  100. package/dist/runtime/ui-view-model.js.map +1 -1
  101. package/dist/services/file-lock.d.ts.map +1 -1
  102. package/dist/services/file-lock.js +42 -17
  103. package/dist/services/file-lock.js.map +1 -1
  104. package/dist/services/global-config.d.ts +25 -0
  105. package/dist/services/global-config.d.ts.map +1 -1
  106. package/dist/services/global-config.js +373 -5
  107. package/dist/services/global-config.js.map +1 -1
  108. package/dist/services/session-storage.d.ts +67 -0
  109. package/dist/services/session-storage.d.ts.map +1 -1
  110. package/dist/services/session-storage.js +327 -61
  111. package/dist/services/session-storage.js.map +1 -1
  112. package/dist/services/settings-coordinator.d.ts +174 -0
  113. package/dist/services/settings-coordinator.d.ts.map +1 -0
  114. package/dist/services/settings-coordinator.js +605 -0
  115. package/dist/services/settings-coordinator.js.map +1 -0
  116. package/dist/services/settings-document-repository.d.ts +138 -0
  117. package/dist/services/settings-document-repository.d.ts.map +1 -0
  118. package/dist/services/settings-document-repository.js +551 -0
  119. package/dist/services/settings-document-repository.js.map +1 -0
  120. package/dist/terminal-ui/launch.d.ts.map +1 -1
  121. package/dist/terminal-ui/launch.js +7 -0
  122. package/dist/terminal-ui/launch.js.map +1 -1
  123. package/dist/tools/web.js +1 -1
  124. package/dist/tools/web.js.map +1 -1
  125. package/dist/tui-ui/chrome-view-model.d.ts.map +1 -1
  126. package/dist/tui-ui/chrome-view-model.js +21 -7
  127. package/dist/tui-ui/chrome-view-model.js.map +1 -1
  128. package/dist/tui-ui/launch.d.ts.map +1 -1
  129. package/dist/tui-ui/launch.js +13 -0
  130. package/dist/tui-ui/launch.js.map +1 -1
  131. package/dist/tui-ui/state.d.ts.map +1 -1
  132. package/dist/tui-ui/state.js +7 -0
  133. package/dist/tui-ui/state.js.map +1 -1
  134. package/dist/web/event-hub.d.ts +39 -0
  135. package/dist/web/event-hub.d.ts.map +1 -0
  136. package/dist/web/event-hub.js +263 -0
  137. package/dist/web/event-hub.js.map +1 -0
  138. package/dist/web/index.d.ts +6 -0
  139. package/dist/web/index.d.ts.map +1 -0
  140. package/dist/web/index.js +28 -0
  141. package/dist/web/index.js.map +1 -0
  142. package/dist/web/launch.d.ts +9 -0
  143. package/dist/web/launch.d.ts.map +1 -0
  144. package/dist/web/launch.js +64 -0
  145. package/dist/web/launch.js.map +1 -0
  146. package/dist/web/protocol.d.ts +346 -0
  147. package/dist/web/protocol.d.ts.map +1 -0
  148. package/dist/web/protocol.js +348 -0
  149. package/dist/web/protocol.js.map +1 -0
  150. package/dist/web/server.d.ts +20 -0
  151. package/dist/web/server.d.ts.map +1 -0
  152. package/dist/web/server.js +498 -0
  153. package/dist/web/server.js.map +1 -0
  154. package/dist/web/workbench-controller.d.ts +63 -0
  155. package/dist/web/workbench-controller.d.ts.map +1 -0
  156. package/dist/web/workbench-controller.js +774 -0
  157. package/dist/web/workbench-controller.js.map +1 -0
  158. package/dist/web-client/assets/index-BAEO71Gp.css +1 -0
  159. package/dist/web-client/assets/index-DSkFy7gM.js +13 -0
  160. package/dist/web-client/index.html +16 -0
  161. package/docs/architecture/v0.3.0-web-api.yaml +1309 -0
  162. package/docs/migration/v0.2.2-to-v0.3.0-settings.md +114 -0
  163. package/docs/migration/v0.2.2-to-v0.3.0.md +55 -0
  164. package/docs/orion.example.json +9 -2
  165. package/docs/plan/v0.3.0-node-runtime-compatibility-plan.md +57 -0
  166. package/docs/plan/v0.3.0-settings-integration-plan.md +740 -0
  167. package/docs/plan/v0.3.0-web-workbench-plan.md +325 -0
  168. package/docs/readme.md +12 -1
  169. package/npm-shrinkwrap.json +1777 -424
  170. package/package.json +33 -9
@@ -0,0 +1,114 @@
1
+ # Orion Code v0.2.2 → v0.3.0 Settings 迁移说明
2
+
3
+ v0.3.0 将 Web 端设置升级为 Host 管理的持久 Settings 子系统。迁移不会引入
4
+ `settings.json`;`$ORION_CODE_CONFIG_DIR/orion.json` 仍然是唯一配置真源。
5
+
6
+ ## 迁移前准备
7
+
8
+ 1. 备份现有 `orion.json`。
9
+ 2. 确认文件是有效 JSON,且当前 Orion Code 可以正常启动。
10
+ 3. 不要将 API key、Authorization Header 或其他凭证粘贴到浏览器问题报告中。
11
+
12
+ v0.3.0 的 Settings 页只显示 Provider 的 `ready`/`missing`/`unavailable` 状态,不会返回
13
+ 凭证值、环境变量名、Header 或配置文件路径。
14
+
15
+ ## 主题与动效
16
+
17
+ 旧 Web 页面把主题和动效保存在浏览器 `localStorage`。v0.3.0 将它们保存到:
18
+
19
+ ```json
20
+ {
21
+ "web": {
22
+ "appearance": {
23
+ "theme": "system",
24
+ "motion": "system"
25
+ }
26
+ }
27
+ }
28
+ ```
29
+
30
+ 首次打开 v0.3.0 Web Workbench 时:
31
+
32
+ - Host 已有显式值:Host 值优先,清理旧浏览器值。
33
+ - Host 没有显式值且浏览器有旧值:通过一次 revision CAS 导入;只在 Host
34
+ 确认持久化后删除旧值。
35
+ - 多标签页同时导入:只有一个 CAS 成功,其他页面重读 Host,不覆盖已保存值。
36
+
37
+ “重置为继承值”会删除对应字段,不会把当前 effective value 反写为新的显式值。
38
+
39
+ ## 默认模型与当前会话模型
40
+
41
+ Settings 中的“默认模型”写入根级 `defaultModel`,仅影响之后创建的 Session。
42
+
43
+ - 已打开 Session 不会被 Settings 暗中切换模型。
44
+ - `/model <id>` 仍然是当前 Session 控制,并持久到该 Session metadata。
45
+ - 修改 `/model` 不会更改全局 `defaultModel`。
46
+
47
+ 页面会同时显示默认模型和当前 Session 模型,以避免两种作用域混淆。
48
+
49
+ ## Effort 作用域
50
+
51
+ Settings 中的 Effort 是当前 workspace 的 project default,保存到:
52
+
53
+ ```text
54
+ projects[canonical active workspace].defaultEffort
55
+ ```
56
+
57
+ 有效值的统一解析顺序为:
58
+
59
+ ```text
60
+ Session override → project default → global default → model capability default
61
+ ```
62
+
63
+ Session 已有显式 Effort 时,修改 project default 不会覆盖它。无 Session override 时,
64
+ 新值从下一个逻辑请求开始生效。
65
+
66
+ ## 工具确认策略
67
+
68
+ Settings 中的 `ask`/`allow`/`deny` 是全局 `toolConfirmation` 默认策略。该设置只在
69
+ Runtime idle 边界提交,从下一个逻辑请求开始生效。
70
+
71
+ `allow` 不会绕过工具硬拒绝、allowlist、sandbox、workspace 边界或风险上限。
72
+
73
+ ## 并发编辑与无效配置
74
+
75
+ Settings 使用不透明的持久 revision 和文件锁内 CAS:
76
+
77
+ - 多个标签页或外部编辑同时修改时,旧 revision 会收到冲突;未提交草稿保留。
78
+ - 一次“应用”只发送一个 batch,全部成功或零字段提交。
79
+ - 外部写入非法 JSON 或非法 schema 时,Runtime 保留 last-good 配置,Web 写入被禁用。
80
+ - 修复 `orion.json` 后刷新 Settings,再基于最新 revision 保存。
81
+
82
+ Advanced 页的“打开配置文件”是无 path 的受控操作:浏览器不能指定任意路径,
83
+ 响应也不会返回本地绝对路径。
84
+
85
+ ## 回滚
86
+
87
+ 需要回到 v0.2.2 时:
88
+
89
+ 1. 停止 Orion Code Host。
90
+ 2. 用迁移前备份恢复 `orion.json`。v0.2.2 会忽略未识别的 `web` 字段,但恢复备份
91
+ 可确保与升级前完全一致。
92
+ 3. 不要把 revision key 当作配置文件;它仅用于本机 CAS revision,不包含设置值。
93
+
94
+ 回滚不需要将主题/动效重新写回浏览器。
95
+
96
+ ## 迁移验证记录
97
+
98
+ 2026-08-27 的 v0.3.0 确定性验证已直接覆盖上述迁移边界:
99
+
100
+ - `SET-P0-01` 验证 legacy localStorage appearance 只导入一次,并在刷新、
101
+ 换端口和 Host 重启后保留;
102
+ - `SET-P0-02/03` 验证默认模型/当前 Session 及 project/global/session Effort 的
103
+ 作用域与重启解析;
104
+ - `SET-P0-06..10` 验证多标签 CAS、外部合法/非法编辑、幂等重试与
105
+ 同端口 Host 重启换 nonce;
106
+ - 同一冻结的 `@orion-agents/orion-code@0.3.0` tgz 已在 Node 20.19.5、22.22.3 和
107
+ 24.14.1 各运行 14 个 Settings 场景,全部通过;精确候选哈希在包生成后写入不参与
108
+ npm 打包的资格报告,避免本迁移文档对其所在 tarball 的哈希形成循环引用。
109
+
110
+ 以上 Node 20/22/24 数据是历史迁移验证。当前 v0.3 Runtime 合同为 Node 22.12+/24/26;
111
+ Node 20 已退役,历史 receipt 不能替代当前 Node 26 的 fresh exact-tarball 证据。
112
+
113
+ 详细 receipt、失败—修复记录与发布边界见
114
+ [`v0.3.0 Web E2E Qualification Report`](../test/v0.3.0-web-e2e-report.md)。
@@ -0,0 +1,55 @@
1
+ # Orion Code v0.2.2 → v0.3.0 Migration Guide
2
+
3
+ v0.3.0 adds a local Web Workbench without replacing the existing TUI, terminal or print surfaces.
4
+ Existing sessions, project configuration, Skill roots, MCP configuration and durable Thread logs
5
+ remain the data sources used by both interfaces; no destructive session migration is required.
6
+
7
+ ## Runtime requirements
8
+
9
+ - Upgrade to Node.js `22.12+`, a supported Node 24 release, or Node 26 before installing v0.3.
10
+ Node 20 is upstream EOL and the native dependency line no longer ships a Node 20 prebuild;
11
+ Node 24 LTS or Node 26 Current is recommended.
12
+ - Run `npm install` and `npm run build`; the build now produces both `dist/` server files and
13
+ `dist/web-client/` browser assets.
14
+ - Existing `orion`, `orion --ui terminal` and print-mode commands keep their current behavior.
15
+
16
+ ## Start the Web Workbench
17
+
18
+ ```bash
19
+ orion web
20
+ orion web --no-open --port 3080
21
+ orion web --cwd /absolute/path/to/project
22
+ ```
23
+
24
+ The host listens only on `127.0.0.1`. Static assets and `/api/v1/*` share one origin; v0.3.0 has no
25
+ LAN/public bind option. Model/provider credentials stay in Orion configuration or environment
26
+ variables and cannot be entered through the browser.
27
+
28
+ ## Behavior to note
29
+
30
+ - Web, TUI and terminal use the same product composition and durable Session/Thread sources. Do not
31
+ run them concurrently against one active session and assume multi-writer ownership.
32
+ - Browser refresh, SSE reconnect and tab closure do not approve or reject a pending tool request.
33
+ Explicit denial, runtime abort and host shutdown fail the affected request closed.
34
+ - Approval scopes are now consistently `once`, `project` and `global`; the stale durable-protocol
35
+ spelling `session` is rejected.
36
+ - Plan mode still commits a three-field Plan receipt and then schedules implementation in a new
37
+ logical turn. The Web UI does not add a separate Plan approval or synthetic step state.
38
+ - Goal state shown in the browser comes from the latest valid TurnCommit. A legacy sidecar remains
39
+ migration input only when no committed Goal state exists.
40
+ - Tool-output details are project scoped in v0.3.0 because current artifact metadata does not carry
41
+ a provable Session identity.
42
+ - Web appearance, default model, project Effort and tool-confirmation defaults now use the
43
+ Host-owned, revisioned Settings coordinator. See the dedicated
44
+ [Settings migration guide](v0.2.2-to-v0.3.0-settings.md) before changing precedence, importing
45
+ legacy browser appearance or rolling configuration back.
46
+
47
+ ## Rollback
48
+
49
+ Stop `orion web` and reinstall or run v0.2.2. v0.3.0 does not rewrite old sessions solely to enable
50
+ the browser. New durable Thread facts remain append-only and follow the existing v0.2 recovery
51
+ contract; back up `~/.orion-code` before any broader manual rollback or cleanup.
52
+
53
+ See the [v0.3.0 Web Workbench plan](../plan/v0.3.0-web-workbench-plan.md) and
54
+ [Settings integration plan](../plan/v0.3.0-settings-integration-plan.md), plus the
55
+ [OpenAPI contract](../architecture/v0.3.0-web-api.yaml), for the complete boundary.
@@ -5,7 +5,7 @@
5
5
  "id": "my-provider",
6
6
  "displayName": "My OpenAI-compatible Provider",
7
7
  "baseUrl": "https://your-endpoint.example/v1",
8
- "apiKey": "sk-REPLACE_WITH_YOUR_KEY",
8
+ "apiKey": "$ORION_CODE_API_KEY",
9
9
  "protocol": "openai-completions"
10
10
  }
11
11
  ],
@@ -41,7 +41,14 @@
41
41
  "allowedTools": [],
42
42
  "projects": {
43
43
  "/absolute/path/to/project": {
44
- "compactInstructions": "Retain architecture decisions, failed verification, and release receipts."
44
+ "compactInstructions": "Retain architecture decisions, failed verification, and release receipts.",
45
+ "defaultEffort": "medium"
46
+ }
47
+ },
48
+ "web": {
49
+ "appearance": {
50
+ "theme": "system",
51
+ "motion": "system"
45
52
  }
46
53
  },
47
54
  "ui": {
@@ -0,0 +1,57 @@
1
+ # Orion Code v0.3.0 Node Runtime Compatibility Plan
2
+
3
+ > 状态:实现完成;本地候选兼容矩阵 `GO`,待 source-clean 发布门禁
4
+ > 基准日期:2026-08-28
5
+ > 目标:让源码构建、npm 安装包、CLI/TUI、Web Host、原生 SQLite 与发布证据在同一套明确的
6
+ > Node 版本合同下工作。
7
+
8
+ ## 1. 支持范围
9
+
10
+ 依据 Node.js 官方 [release schedule](https://github.com/nodejs/Release#release-schedule),本版本采用:
11
+
12
+ | Node 主版本 | v0.3.0 定位 | 最低版本 | 说明 |
13
+ | ----------- | ------------------------- | -------- | ------------------------------ |
14
+ | 22 | supported maintenance LTS | 22.12.0 | 受 Vite 7 工具链最低版本约束 |
15
+ | 24 | preferred LTS | 24.0.0 | 新生产安装的首选版本 |
16
+ | 26 | supported Current | 26.0.0 | 覆盖当前主流开发环境与 ABI 147 |
17
+
18
+ Node 21/23/25 等短生命周期奇数版本不进入发布承诺。`engines.node` 是安装合同,不能超前于
19
+ 真实测试矩阵。Node 20 已结束上游维护,并且当前 `better-sqlite3@12.10.x`
20
+ 不再提供 Node 20 预构建产物;因此它只属于历史证据,不属于 v0.3 的安装或发布合同。
21
+
22
+ ## 2. 实现合同
23
+
24
+ 1. `package.json` 与 `npm-shrinkwrap.json` 必须声明完全相同的 Node 范围。
25
+ 2. dependency policy 必须在 22/24/26 上执行真实 `better-sqlite3` open、SQL query、
26
+ `sqlite-vec` load 与 `vec0` virtual table probe。
27
+ 3. GitHub Actions 的 source build/test、exact-tarball runtime 和 critical Web E2E 三个矩阵都必须
28
+ 包含三个版本,且不允许 skip 记为 pass。
29
+ 4. Runtime/Web E2E/最终 ReleaseReceipt 必须要求三个 Node receipt 全部存在、全部为 `GO`,并绑定
30
+ 同一个 tarball SHA、artifact receipt digest、runner digest 与 installed target digest。
31
+ 5. 本地多版本验证必须使用隔离安装目录,不能用一个 Node 版本编译的 `node_modules` 冒充另一个 ABI。
32
+ 6. CLI 的 `#!/usr/bin/env node` 启动方式保持版本管理器无关;产品代码不得硬编码某个 Node 安装路径。
33
+
34
+ ## 3. 真实验收
35
+
36
+ 对一次冻结的 `@orion-agents/orion-code@0.3.0` tarball,在 Node 22/24/26 分别执行:
37
+
38
+ - clean install,确认 npm engine 无拒绝;
39
+ - package identity、`orion --version`、`orion --help` 与公共 exports;
40
+ - `better-sqlite3`/`sqlite-vec` 原生语义探针;
41
+ - TUI、terminal、print、Web Host;
42
+ - Goal、subagent、Skill、MCP、Compact/resume 旅程;
43
+ - critical real-Chrome Web/Settings 旅程。
44
+
45
+ 硬判定:任一版本缺失、跳过、ABI load 失败、receipt 未绑定同一 tarball,最终结果均为 `NO_GO`。
46
+
47
+ ## 4. 回归门禁
48
+
49
+ - `npm run build`
50
+ - `npm test -- --coverage --runInBand`
51
+ - `npm run deps:check -- --policy-only`
52
+ - `npm run test:runtime-matrix`
53
+ - `npm run test:web-e2e:critical`
54
+ - receipt contract tests and workflow static checks
55
+
56
+ 最终测试环境、精确 tarball SHA 与每个 Node receipt 写入独立测试报告;本计划不把意图或单版本成功
57
+ 当作兼容性完成证据。