@dsh-enhanced/assistant-verifier 0.1.64 → 0.1.66

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 (69) hide show
  1. package/README.md +77 -8
  2. package/lib/creation-review-store.d.ts +80 -1
  3. package/lib/creation-review-store.d.ts.map +1 -1
  4. package/lib/creation-review-store.js +520 -11
  5. package/lib/creation-review-store.js.map +1 -1
  6. package/lib/creation-review.d.ts +182 -46
  7. package/lib/creation-review.d.ts.map +1 -1
  8. package/lib/creation-review.js +283 -32
  9. package/lib/creation-review.js.map +1 -1
  10. package/lib/drivers.d.ts +20 -5
  11. package/lib/drivers.d.ts.map +1 -1
  12. package/lib/drivers.js +50 -4
  13. package/lib/drivers.js.map +1 -1
  14. package/lib/index.d.ts +2 -2
  15. package/lib/index.d.ts.map +1 -1
  16. package/lib/index.js +1 -1
  17. package/lib/index.js.map +1 -1
  18. package/lib/linux-behavior-assets.d.ts +17 -0
  19. package/lib/linux-behavior-assets.d.ts.map +1 -0
  20. package/lib/linux-behavior-assets.js +73 -0
  21. package/lib/linux-behavior-assets.js.map +1 -0
  22. package/lib/linux-behavior-runner.d.ts +10 -0
  23. package/lib/linux-behavior-runner.d.ts.map +1 -0
  24. package/lib/linux-behavior-runner.js +69 -0
  25. package/lib/linux-behavior-runner.js.map +1 -0
  26. package/lib/linux-behavior-runtime.d.ts +67 -0
  27. package/lib/linux-behavior-runtime.d.ts.map +1 -0
  28. package/lib/linux-behavior-runtime.js +500 -0
  29. package/lib/linux-behavior-runtime.js.map +1 -0
  30. package/lib/memory-review-native.d.ts +13 -1
  31. package/lib/memory-review-native.d.ts.map +1 -1
  32. package/lib/memory-review-native.js +11 -2
  33. package/lib/memory-review-native.js.map +1 -1
  34. package/lib/memory-review.d.ts +2 -0
  35. package/lib/memory-review.d.ts.map +1 -1
  36. package/lib/memory-review.js +110 -7
  37. package/lib/memory-review.js.map +1 -1
  38. package/lib/plugin-behavior-config.d.ts +10 -2
  39. package/lib/plugin-behavior-config.d.ts.map +1 -1
  40. package/lib/plugin-behavior-config.js +75 -6
  41. package/lib/plugin-behavior-config.js.map +1 -1
  42. package/lib/plugin-behavior-runner.d.ts +6 -4
  43. package/lib/plugin-behavior-runner.d.ts.map +1 -1
  44. package/lib/plugin-behavior-runner.js +41 -14
  45. package/lib/plugin-behavior-runner.js.map +1 -1
  46. package/lib/review-authority-lineage.d.ts +109 -0
  47. package/lib/review-authority-lineage.d.ts.map +1 -0
  48. package/lib/review-authority-lineage.js +135 -0
  49. package/lib/review-authority-lineage.js.map +1 -0
  50. package/lib/review-maintenance.d.ts +20 -0
  51. package/lib/review-maintenance.d.ts.map +1 -0
  52. package/lib/review-maintenance.js +19 -0
  53. package/lib/review-maintenance.js.map +1 -0
  54. package/lib/revision-regression-review.d.ts +4 -1
  55. package/lib/revision-regression-review.d.ts.map +1 -1
  56. package/lib/revision-regression-review.js +59 -7
  57. package/lib/revision-regression-review.js.map +1 -1
  58. package/lib/revision-review.d.ts +7 -0
  59. package/lib/revision-review.d.ts.map +1 -1
  60. package/lib/revision-review.js +48 -4
  61. package/lib/revision-review.js.map +1 -1
  62. package/lib/service.d.ts +2 -0
  63. package/lib/service.d.ts.map +1 -1
  64. package/lib/service.js +11 -2
  65. package/lib/service.js.map +1 -1
  66. package/lib/version.d.ts +1 -1
  67. package/lib/version.js +1 -1
  68. package/package.json +27 -14
  69. package/runtime/plugin-observer-launcher.c +246 -0
package/README.md CHANGED
@@ -65,7 +65,11 @@ Goals Host 的 `prepareGoalAssessment(input, template)` 从已持久化的初始
65
65
 
66
66
  `isolated-process-behavior` 只用于 `goal-step` / `goal-outcome`,使用 `task-acceptance/v4` 与 `task-verification/v4`。条件包含 `id`、`authority: { id, digest }`、`artifactPath`、`testSetId`;不允许与旧 criterion 混用。v1/v2/v3 的原有格式和摘要保持兼容。
67
67
 
68
- 对应 Host authority 为 `isolated-runner`,配置固定 `stateRoot`、已存在的 `sha256:…` 镜像、绝对 `dockerPath`、固定 `command`、绝对 `expiresAt`、`maxRuns`、`maxTotalDurationMs`、`maxDurationMs`、`maxOutputBytes`,以及 `testSets: [{ id, cases: [{ stdin, expectedStdout, expectedExitCode }] }]`。例如固定命令 `/bin/sh /workspace/artifact < /workspace/input` 在容器内运行复制的 shell 产物。authority 摘要覆盖全部配置和测试向量;验收 profile 必须引用编译后的精确摘要。不能把模型生成的测试向量当作 Host 验收条件。
68
+ 对应 Host authority 保持 `isolated-runner`,按严格后端分支配置:省略 `backend` 或显式 `backend: 'docker'` 时,提供已存在的 `sha256:…` 镜像和绝对 `dockerPath`;Docker 规范化对象不写入 `backend`,原摘要逐字节兼容。显式 `backend: 'linux-native'` 时只提供已准备的 `runtime: LinuxRuntime` 和已委派的 `cgroupRoots`(仅 v1),不能混入镜像或 Docker 字段。两支均保留固定 `stateRoot`、`command`、绝对 `expiresAt`、`maxRuns`、`maxTotalDurationMs`、`maxDurationMs`、`maxOutputBytes`,以及 `testSets: [{ id, cases: [{ stdin, expectedStdout, expectedExitCode }] }]`。例如固定命令 `/bin/sh /workspace/artifact < /workspace/input` 在隔离环境运行复制产物。
69
+
70
+ 原生配置编译从非激活的 `@dsh-enhanced/assistant-isolation/native-resources` 复用纯运行时和 cgroup 路径校验,深冻结副本;此时不创建目录、进程、cgroup 或授权,也不准备运行时。拒绝未知后端、v2 cgroup、路径别名形状及 state/runtime/cgroup 路径重叠。实际目录、文件内容、委派身份与当前隔离能力由既有 `IsolatedVerifierRunner` → `LinuxVerifierRunner` 在执行时再次核验;静态编译成功不证明 Linux 环境就绪。
71
+
72
+ authority 摘要覆盖整个运行时描述、cgroup 根、全部有限条款与私有测试向量;验收 profile 必须引用编译后的精确摘要。服务保留按摘要缓存和 Cordis disposer,复用现有 runner/账本,不重置额度、期限或未知历史。Goals 的可信 producer、owner/Session/定义、接受的产物、静止状态、执行 fence 与派发后产物重读保持原边界。不能把模型生成的测试向量或原始工具退出码当作独立验收条件。单元里的录制 runner 仅证明分派合同,不代替 Linux 实机证据。
69
73
 
70
74
  预期结果只保存在 Host authority 中。容器每次只收到 `artifact` 和当前 `input`;模型反馈、契约、回执不包含测试输入或预期输出。反馈会披露有限的通过/失败信息,这不是密码学意义的测试集保密。
71
75
 
@@ -87,6 +91,12 @@ Goals Host 的 `prepareGoalAssessment(input, template)` 从已持久化的初始
87
91
 
88
92
  macOS 使用显式 `backend: 'macos-seatbelt'`、私有固定 `runtime` 与相同的持久次数、时长和输出预算;部署配置省略 `authorityDigest`,认证 Host 在构造时注入。`validatePluginBehaviorDeploymentConfig` 与 `validatePluginBehaviorRunnerConfig` 是同步严格校验。固定源码在只读 Seatbelt 单进程中加载 Cordis、SystemPrompt、Tools 和候选,只将操作输入传入候选;预期答案、签名私钥和持久账本留在 Host。Host 安全解析 npm tarball 为普通文件,拒绝链接及越界路径;从已核验的 runtime 填入环境与 `macos-seatbelt-single-process-v1` 边界。候选仍与观察代码同进程,其输出和结果均视为不可信,必须由独立私有 held-out 答案裁决;该边界不声称具备 Linux 双进程隔离的等价防篡改性。v2 创建证书签名绑定运行时摘要和固定构建证据摘要,采用及后续调用再次比对运行时;旧 v1 凭证及 Docker 路径保留。
89
93
 
94
+ Linux 原生私有 API 使用 `backend: 'linux-native'`、`runtime: LinuxPluginBehaviorRuntime`、当前用户已委派的 `cgroupRoots` 和相同的有限 authority 字段;调用者不能提供命令、源码、镜像或资源策略。先从 `@dsh-enhanced/assistant-verifier/linux-behavior-runtime` 导入 `prepareLinuxPluginBehaviorRuntime({ runtime: baseLinuxRuntime, root: privateDestination, signal })`,取得独立目录内的固定运行时描述。该目录保存 `behavior.json` 和 `runtime/`,后者只读映射到 `/runtime/0`。原基底、源码身份、安装回执、主人与额度均不被改写。此入口仅供可信 Host 使用。创建验收及有限采用使用专门的 `validateCreationBehaviorDeploymentConfig`,纯校验另从 `./plugin-behavior-config` 导出;通用 `validatePluginBehaviorDeploymentConfig` 仍拒绝 Linux,旧消费方不能据此取得 Linux 创建授权。修订与配对回归已接通同一 Linux 观察器(见下文);无 Docker 安装默认值尚未接线。
95
+
96
+ 原生准备在私有目录中限量复制基底,使用固定 `/usr/bin/cc` 及其已核验的 root-owned 工具链编译已发布 C 资产,不下载依赖、不运行候选或安装脚本。C 字节及父/候选 JavaScript 与 Docker 观察器同源,仅变更固定运行时路径;编译器、依赖、源码和产物摘要绑定到新回执,重用时漂移即拒绝。准备会读基底/系统编译器与头文件、写新私有目录并启动受限编译子进程;运行只接收包和输入,不接触 Host 凭据、浏览器、Docker socket 或验收答案。独占锁协调本 API;崩溃留下的锁拒绝继续,不自动夺锁。该权限边界不隔离同 UID 的恶意 Host 插件。
97
+
98
+ 原生执行保留父/候选分进程、固定 seccomp、Node 权限及父进程保护,外层使用 Linux `ordinary` 隔离策略。Host 逐次核验固定资产和环境,等待私有收据与真实资源结束后才返回 `linux-native-process-seccomp-v1` 观察及运行时摘要。取消和 `close()` 也覆盖执行前的工具链校验;未知历史不重派,准备校验失败不冒称历史资源已经静止。该观察仍需独立验收,不能当作签名证书或发布授权。
99
+
90
100
  `run({ key, artifact, operation, signal })` 接受真实 tgz 的 `Buffer`:`operation: { kind: 'discover' }` 返回工具 schema 与摘要;`{ kind: 'invoke', schemaDigest, calls: [{ id, toolName, arguments }] }` 仅在 schema 摘要匹配时执行调用。每包最多 512 KiB,每轮最多 8 次调用。两轮分别消耗持久预算,key 须绑定候选、操作与调用输入;派发不明的 key 不重放。
91
101
 
92
102
  新版镜像的父观察器不导入候选;候选在另一个受限进程中用固定 Cordis、SystemPrompt 和原生 Tools 加载,不提供模拟 Agent、owner 或缺失注入。父进程核对包字节、调用身份和结果大小,自行计算 schema 摘要与环境版本,等候子进程真实退出;候选 stdout/stderr 不作为父观察协议。worker 协议 v2 拒绝旧同进程镜像的 v1 结果,需要重新构建专用镜像。候选没有工具、注入不满足、包非法、超时、结果帧非法或无法确认资源结束时返回 `unknown`。
@@ -109,7 +119,7 @@ macOS 使用显式 `backend: 'macos-seatbelt'`、私有固定 `runtime` 与相
109
119
  | `owner` | `authorityId`, `authorityHash`, `principalId`, `principalRecordId`, `principalVersion`, `workspace`, `agentPreset`。workspace 为已存在的 canonical 绝对路径。 |
110
120
  | `keyPath` | owner 私有、单链接、非符号链接的 Ed25519 PKCS8 文件;不会交给模型或容器。 |
111
121
  | `maxVerifications` | 1–1000;失败与未知派发也消费持久额度,不随重启返还。 |
112
- | `runner` | `stateRoot`, `image`, `dockerPath`, `expiresAt`, `maxRuns`, `maxTotalDurationMs`, `maxDurationMs`, `maxOutputBytes`;使用当前锁文件的专用观察镜像。最坏每次消耗 `1 + maxCases` 个独立容器调用。 |
122
+ | `runner` | Docker 使用 `stateRoot`, `image`, `dockerPath` 及有限期限、次数、时长和输出预算;macOS/Linux 使用上文的显式原生配置。最坏每次消耗 `1 + maxCases` 个独立观察调用。 |
113
123
  | `policy` | owner 固定的验收政策,最多 8192 字节。 |
114
124
  | `maxInputBytes`, `maxOutputTokens` | 输入 4096–262144 字节,每个模型回合 1–32768 输出 token。 |
115
125
  | `maxDurationMs`, `maxCases`, `receiptTtlMs` | 整次验收 1 秒至 30 分钟;2–8 个不同输入;回执 1 秒至 24 小时,受所有原授权窗口收窄。 |
@@ -118,19 +128,58 @@ macOS 使用显式 `backend: 'macos-seatbelt'`、私有固定 `runtime` 与相
118
128
 
119
129
  封存精确 tgz 后,第一轮全新、无工具的原生 Agent 从当前认证任务/纠正正文与候选参数结构生成私有用例;不读取候选代码、测试或调用结果。schema 的说明文字不进入此轮。Host 在调用前持久保存用例,分别在独立子进程执行并精确比较文本或 JSON 值。第二轮全新 Agent 检查实际已核对的源码补丁、任务语义与固定用例;两轮均使用来源 Growth run 的准确模型,不增加默认供应商或隐式恢复切换。
120
130
 
121
- 只有实际比较通过、源码审查通过且最终当前来源 fence 有效,才签发 `assistant-growth/creation-verification/v1` Ed25519 凭证。它绑定任务修订、Growth run、精确源码/制品、私有合同摘要、观察作业、SDK 环境、模型和预算。私有 SQLite 在每次派发前持久 claim;崩溃、取消或不明执行不自动重放。含糊任务、不可支持的行为或缺失证据保持 `unknown`。
131
+ 只有实际比较通过、源码审查通过且最终当前来源 fence 有效,才签发 Ed25519 凭证:Docker 使用 `assistant-growth/creation-verification/v1`,macOS 使用 v2,Linux 使用 v3。它们绑定任务修订、Growth run、精确源码/制品、私有合同摘要、观察作业、SDK 环境、模型和预算。私有 SQLite 在每次派发前持久 claim;崩溃、取消或不明执行不自动重放。含糊任务、不可支持的行为或缺失证据保持 `unknown`。
132
+
133
+ Linux 创建验收要求 Control Plane 的双 UID 完整仓库构建。派发前通过私有 `inspectPreparedCreationLinuxBuild` 重读原成功任务的收据和包,核对实际资源已经消失、当前 owner、信任配置、固定基底与全部构建证据;不会重新执行或退款。随后用 `readLinuxPluginBehaviorPreparation` 校验同一基底生成的观察器及其准备回执。v3 分别签名绑定观察器运行时 `runtimeDigest`、构建基底 `buildRuntimeDigest`、完整构建证据 `buildEvidenceDigest` 和准备回执 `observerPreparationDigest`。发现与每条用例都必须返回匹配的 Linux 边界和运行时。512 KiB 制品上限及两轮原模型预算保持不变;有限采用必须显式选择匹配的 Linux 后端。
134
+
135
+ `verifyLinuxPluginBehaviorAdoptionRuntime` 为已采用工具只读复核签名准备回执及实际保留观察器,检查过程中再次核对回执字节与文件身份,并响应取消。其历史基底和编译器来源由独立证书绑定,不重新编译,也不读取原基底或消费构建额度。因此显式保留期可跨越原构建授权到期和基底移除;当前观察器漂移仍拒绝使用。新创建签名的准备读取继续核验实际基底和当前编译器。
122
136
 
123
137
  生成用例与源码审查仍依赖模型语义判断;剥离 schema 说明和禁止工具不证明模型判断总是正确。此凭证仅证明这些任务派生检查通过,不是 owner 审批、通用目标成功、发布许可或采用授权。Control Plane 仍保留 `pending-approval`;之后的有限采用、Cordis 动态加载及真实后续收益必须分别验收。
124
138
 
125
- 新增数据与权限:读取当前 Host 认证任务和检查补丁,向该任务模型供应商发送这些材料;写私有合同、观察摘要、模型 Session、有限额度与签名账本;读取私有签名密钥,并通过固定 Docker executable 执行封存候选。没有浏览器或运行时联网容器权限,没有安装脚本或公开验收写工具。
139
+ 新增数据与权限:读取当前 Host 认证任务和检查补丁,向该任务模型供应商发送这些材料;写私有合同、观察摘要、模型 Session、有限额度与签名账本;读取私有签名密钥,通过所配置的固定隔离后端执行封存候选。Linux 还读取既有构建收据、封存包及独立准备回执。没有浏览器或候选运行时网络权限,没有安装脚本或公开验收写工具。
140
+
141
+ 离线维护内部 seam `CreationReviewStore.openExistingForMaintenance()` 只打开已存在的私有 canonical SQLite;`planGrantHandoff()` 冻结 transaction、installation、profile、三个 review lane 之一、文件 dev/ino、旧新 digest、maximum/used 、全库 grant/历史摘要及已有维护审计的数量和摘要。`applyGrantHandoff()` 仅 CAS 更新目标 grant 的 digest,同事务写不可变审计,不重置额度、不修改 claimed/unknown/rejected、历史证书或证据。精确重试只在完整 after snapshot 未变时幂等;新增验证或维护审计历史、计数不符、文件替换、未知 schema 或非零 SQLite user_version/application_id 均拒绝。普通运行时仍拒绝未经维护的 digest 变化。
142
+
143
+ 内部 v2 `planGrantHandoffV2()` / `applyGrantHandoffV2()` 进一步保存三个 lane 各自的完整公开授权身份、Ed25519 公钥与指纹、owner、review/runner 有限额度和已验证配置的证据引用;除 authority digest 外的政策与额度不得变化。每步记录目标 grant 的全部既有 plan 成员及当时合法终态证书的精确封存,最多 1,000 个成员、64 步维护链,并有独立字节上限。后续新任务可以追加;旧 claimed/unknown/rejected 或未取得封存资格的旧成员,不能通过后续换签名获得历史成功资格。原成员必须保留,原终态封存逐项核验,used/maximum 和业务历史不被迁移改写。
144
+
145
+ 安装器使用包子路径 `@dsh-enhanced/assistant-verifier/review-maintenance`:它导出 `reviewPublicIdentity(lane, config)`(由三个 lane 各自的 `compile*ReviewConfig` 推导 v2 公开身份,会读取 `config.keyPath` 指向的私钥以得到公钥)以及上述 `CreationReviewStore` 和 `lineageHash`;插件主入口不导出这些维护接口。
146
+
147
+ `resolveHistoricalCertificate()` 要求调用方提供数据库之外的可信当前 head、完整当前身份、installation/profile/lane/逻辑角色及当前文件身份;只有精确封存的记录可返回对应旧公开身份和证书。调用方仍须验签并执行原有当前 owner/source/backend 围栏,不能把证书自带的 authority 当作信任根。已有连接的方法使用同一只读事务,支持 live WAL;静态适配器仅支持停止 writer、checkpoint 后的文件。维护和历史读取先校验 SQLite 原始 TEXT 字节,拒绝 NUL、无效 UTF-8 或投影截断,审计文本必须为原始 canonical JSON。v1 的不透明配置摘要不能自动成为 v2 历史信任根。
148
+
149
+ `creationReviews.history`(`resolveHistoricalCertificate()` 的运行时消费者,目前休眠:生产中审查库交接只随 Docker→linux-native 迁移发生,交接前的父版本在采用账本(封存后为空)与回归 lane 的 v3/linux-native 父证书要求处即被拒;按既定方案,这类父版本须在新 authority 下作为新计划重新验证并重新采用。Control Plane 不读取此字段,安装器也不写入;留待将来出现 native→native 原地交接时再接线)可选,字段恰为 `{ headDigest, installationId, profileId, logicalDatabaseScope }`:`headDigest` 为 64 位小写 hex,其余为有界 ID(1–200 字符)。缺省时行为与之前完全相同;它不进入 authority digest,revision 两个 lane 拒绝此字段。仅当当前 authority 验签失败时,`readRetainedCases`(回归审查读取父版本保留用例)才以此 head、由当前配置投影出的公开身份与当前库文件 dev/ino 调用 `resolveHistoricalCertificate()`,再用返回的旧身份验签,要求父证书与封存证书 canonical 相同,最后照常读取保留证据;任一步失败均返回 `undefined`(拒绝)。Control Plane 的验收/采用检查、新审查、claim 及 `inspect`/额度仍只认当前 authority。
150
+
151
+ 这些接口尚未接入 installer,也不注册模型工具。调用方须认证原 owner/配置来源和 stage 复制,持久化受信的外部 head;store 不替调用方完成这些授权,也不提供同 UID 恶意插件隔离。rename 后只能只读核验,不重放 apply;后续复制须由新授权身份与 head 绑定新文件,当前 v2 不支持同 digest 的 copy-only 恢复。保留旧证书不等于取得新 Linux 执行资格,也不证明采用收据连续性或完整升级通过。
126
152
 
127
153
  ## 已采用插件的新任务修订验收
128
154
 
129
- `revisionReviews` 是可选、独立的 Host 配置,字段及限制与上表 `creationReviews` 相同;须单独配置修订 authority、Ed25519 密钥引用、政策和有限额度,密钥文件可与创建验收共用,但两种用途不能互相代用。用 `compileRevisionReviewConfig(config)` 取得 `{ authority, publicKey }`,仅将这两个公开字段交给 Control Plane 的 `revisionVerifications`;还须配置其独立的 `sourceJobs.revision` 授权和保留的已采用父版本源码。`revisionReviews` 缺省时不启用本轨,不借用创建验收引用或额度。修订 authority 使用 `assistant-growth/revision-acceptance-authority/v1` 和独立政策摘要,私有账本位于 `databasePath + '.revision-reviews'`;失败与 unknown 派发也占用修订额度,未知结果不自动重放。
155
+ 创建审查可单独配置 `creationReviews.workItemFailures: true`,接受后台 WorkItem 的工程来源。
156
+ 省略或 `false` 完全保留旧配置与授权摘要;true 进入独立政策摘要,同库旧授权不因修改开关
157
+ 重置已用额度。它不扩展 `revisionReviews` 或 `revisionRegressions`,这两项会明确拒绝 true。
158
+
159
+ Host-only `inspectWorkItemCreationReviewReadiness()` 只读当前已挂载 reviewer、原持久额度与
160
+ 配套 CP 的新协议声明,返回 `assistant-growth/work-item-review-readiness/v1`、工程 context/run
161
+ 协议、`workItemFailures: true`、准确 authority/publicKey、remainingVerifications 和 available。
162
+ 缺少开关、当前依赖或新协议时返回 undefined;完整支持但余量为零时可返回 available:false。
163
+ 它不打开 runner、不建 claim、不起模型;已认领或已签名的同一请求不因本次耗尽最后额度而
164
+ 失效,也不据此重派未知调用。CP 的总探针另负责核对 owner 和创建、审查、采用三份授权。
165
+
166
+ WorkItem 使用独立的 `dsh-prepared-creation/v2` handoff 和 source-run v2;旧前台 v1 保持原形状。
167
+ Verifier 核对 root→当前项的完整、确定编码的真实主人输入链及 manifest/全文摘要,完整 UTF-8
168
+ framing 最多 16 KiB,不用 worker 简报代替目标、不摘要父约束或伪造 Inbox。主人失败反馈及
169
+ worker 报告与目标分开;报告只是背景,不是验收 oracle,主人 testimony 也不等于独立技术成功。
170
+ 首次 claim、隔离执行、两个原生模型回合与证书落账/返回前都核对当前来源及精确三阶段授权 pins。
171
+ 最终围栏沿 Delivery → Evaluation → WorkItems → UsageStore → CP → 独立审查账本;持锁后
172
+ 不反向调用来源 reader。候选冻结后才独立生成私有 held-out cases,模型不能改写验收规则。
173
+
174
+ 证书继续使用既有后端 v1/v2/v3,签名的 growthRunDigest 覆盖完整 v2 来源/context/授权 pins,
175
+ referenceDigest 覆盖新的工作项引用;后端版本本身不授权新的来源。旧 grant 或缺失配套 peer
176
+ 不能降级到前台分支。有限采用和调用仍由 CP 另核独立 grant、真实结果与当前来源。
177
+
178
+ `revisionReviews` 是可选、独立的 Host 配置,字段及限制与上表 `creationReviews` 相同(创建专用的 `workItemFailures` 除外);须单独配置修订 authority、Ed25519 密钥引用、政策和有限额度,密钥文件可与创建验收共用,但两种用途不能互相代用。用 `compileRevisionReviewConfig(config)` 取得 `{ authority, publicKey }`,仅将这两个公开字段交给 Control Plane 的 `revisionVerifications`;还须配置其独立的 `sourceJobs.revision` 授权和保留的已采用父版本源码。`revisionReviews` 缺省时不启用本轨,不借用创建验收引用或额度。修订 authority 使用 `assistant-growth/revision-acceptance-authority/v1` 和独立政策摘要,私有账本位于 `databasePath + '.revision-reviews'`;失败与 unknown 派发也占用修订额度,未知结果不自动重放。
130
179
 
131
180
  新的普通认证失败任务经 Growth 冻结 `revisionAcceptance`、原任务模型及预算,并选择同 owner 已采用父版本后,Control Plane 原生 SourceJobs 才能调用 Host-only `verifyPluginRevision({ protocol: 'assistant-growth/revision-verification-request/v1', planId })`。它不注册为模型工具。Host 重新核对当前 owner/任务、父版本签名归档、精确源码基线、父绑定及封存制品;任务纠正、撤回、授权或 provider 变化会使旧验收失效。父绑定含 `planId`、`certificateDigest`、`artifactSha256`、`sourceArchiveDigest`、`sourceDigest`,并同时进入持久 claim、最终 fence 和凭证。
132
181
 
133
- 验收沿用两个全新的无工具原生模型回合与有界 Docker 行为观察:先依据这次任务和工具结构生成私有用例,不看候选源码;再对实际补丁、已观察用例及父绑定作源码审查。两轮使用这次新任务冻结的 supplier,另受 `revisionReviews` 的独立模型调用、输出和时限预算约束。通过后签发独立 `assistant-growth/revision-verification/v1` Ed25519 凭证,绑定父版本、当前任务、Growth run、精确制品/源码、观察环境与结果;修订签名域与旧创建凭证不互通。验收仅覆盖本次新任务及这些检查,不能推断父版本全部行为已回归通过。结果保留为 `prepared-revise` / `pending-approval` 候选;本阶段不授权执行、替换当前版本、扩大旧创建采用额度或声称版本回滚与后续收益已验证。
182
+ 验收沿用两个全新的无工具原生模型回合与有界 Docker 行为观察:先依据这次任务和工具结构生成私有用例,不看候选源码;再对实际补丁、已观察用例及父绑定作源码审查。两轮使用这次新任务冻结的 supplier,另受 `revisionReviews` 的独立模型调用、输出和时限预算约束。通过后签发独立 `assistant-growth/revision-verification/v1` Ed25519 凭证,绑定父版本、当前任务、Growth run、精确制品/源码、观察环境与结果;修订签名域与旧创建凭证不互通。验收仅覆盖本次新任务及这些检查,不能推断父版本全部行为已回归通过。结果保留为 `prepared-revise` / `pending-approval` 候选;本阶段不授权执行、替换当前版本、扩大旧创建采用额度或声称版本回滚与后续收益已验证。Linux 配置沿用同一两回合与原生观察:派发前经 Control Plane `inspectPreparedRevisionLinuxBuild` 重开双 UID 全仓构建并复核完整构建证据,再用 `readLinuxPluginBehaviorPreparation` 只读校验保留的观察器准备回执;端口缺失或构建证据、构建基底、准备回执、观察器描述任一项漂移,在准入与 claim 之前按 stale-source unknown 返回,不派观察器、不扣额度、不耗模型回合。通过后在独立签名域签发 `assistant-growth/revision-verification/v2`,execution 绑定 `linux-native-process-seccomp-v1` 边界及观察器运行时、构建基底、构建证据、准备回执四个摘要;发现与每条用例的观察都必须返回匹配的边界与运行时,durable unknown 占用额度且不重放。
134
183
 
135
184
  `revisionRegressions` 是另一个可选 Host 配置,用于对上述候选做父版本保留用例回归。它需要独立的 `authorityId`、有限额度及 runner 配置,不能由 `revisionReviews` 或 `creationReviews` 自动启用。配置字段为 `authorityId`、`owner`、`namePrefix`、`keyId`、`keyPath`、`expiresAt`、`maxVerifications`、`runner`、`maxDurationMs`、`maxCases`、`receiptTtlMs`;类型是创建验收配置去掉 `policy`、`maxInputBytes`、`maxOutputTokens`,其余字段沿用上表校验。`maxCases` 为 2–8,`runner.maxRuns` 至少为 `maxVerifications * (2 + 2 * maxCases)`,覆盖每次两侧发现及每条用例两侧调用。`compileRevisionRegressionReviewConfig(config)` 返回独立的 `{ authority, publicKey }`,公开引用使用 `assistant-growth/revision-regression-acceptance-authority/v1`;部署时将其配置到 Control Plane 的独立回归授权。旧配置缺少此字段时本轨保持关闭。
136
185
 
@@ -138,6 +187,8 @@ Host-only `verifyPluginRevisionRegression({ protocol: 'assistant-growth/revision
138
187
 
139
188
  通过后独立签发 `assistant-growth/revision-regression/v1` Ed25519 凭证,绑定父凭证合同摘要、两侧观察、候选验收凭证、精确源码摘要、冻结的新任务 Growth run 与回归 authority。它只证明这些父保留用例在本次两个制品的隔离观察中达到原期望,不授予候选执行、工具版本切换、旧创建额度扩张或回滚权限。
140
189
 
190
+ Linux 配对回归只接受 creation v3 父证书与 revision v2 候选证书:两侧 execution 的边界、观察器运行时、构建基底与准备回执必须全等,非 Linux 后端遇到 v3/v2 证书或任一族类不符,都在准入前按 stale-source unknown 处理,不派观察器、不读部署回执、不扣额度。它不要求构建期基底仍在场,而是经 `readLinuxPluginBehaviorDeploymentPreparation` 复用部署期共享观察器只读重开 `<root>/behavior.json`,核对观察器描述、历史基底与准备回执后对父/候选两侧重新发现与调用。通过后在独立签名域签发 `assistant-growth/revision-regression/v2`,execution 绑定边界、观察器运行时与准备回执;准入后的观察不明仍是 durable unknown,回放不增加派发。
191
+
141
192
  父私有用例必须在首次签发时完整可用;已完成的同一 plan/binding 重试在当前来源围栏与授权窗口内返回原签名凭证,不重新读取用例、派发观察或恢复额度。签发后的私有记录丢失不撤销当时的历史证明,但不能据此为新候选恢复或重建用例。Control Plane 消费签名凭证时核对父凭证及合同摘要,不获得私有用例读取权限。
142
193
 
143
194
  ## 独立源码审查
@@ -202,11 +253,29 @@ tokens、每次 5 分钟;配置更改不能给原授权续期或补额度。Po
202
253
  subject `assistant-memory-learning`(绑定 workspace/principal),action `review`、memory resource
203
254
  `learning:<authorityId>`;可通过该规则的持久预算进一步限制调用。未配置时没有默认审查权限。
204
255
 
256
+ `workItemExperiences: true` 是独立的显式授权扩展,允许共享合同 v2 的 WorkItem 经验来源;
257
+ 省略或 `false` 完全保留旧配置摘要和 v1 行为。启用值参与授权摘要,不能修改既有授权后
258
+ 重置审查额度;需要当前配套 Delivery 来源检查与同步 fence 接口。可用性探针仅在配置启用
259
+ 且当前 Delivery 具备这两个接口时附带 `workItemExperiences: true`;缺少新接口不改变旧前台
260
+ 审查的可用性,未挂载运行服务则仍返回 `available: false`,不宣告 WorkItem 支持。
261
+
262
+ v2 由 Verifier 独立读取准确 WorkItem、当前 owner 评价和实际静止/预算结算 proof,匹配完整
263
+ 来源摘要与展示摘要,继承原任务冻结的 supplier(或显式审查模型覆盖)。任务简报及 worker
264
+ 报告作为机器产生的不可信材料,不能充当 owner 陈述;引用只允许来自认证的 owner 反馈。
265
+ 每片展示的截断/脱敏标志随审查输入冻结;截断来源拒绝审查,脱敏来源可依据可见材料审查,
266
+ 但不能推测遮蔽片段。仅由脱敏占位符组成的引用在付费前拒绝。
267
+ 仅允许经验,替换或删除也必须独立读取准确版本、受管且 kind 为 experience 的目标。主人
268
+ 评价是 testimony,不是独立技术成功;反馈更正、撤回、来源或目标变化会阻止旧批准落盘。
269
+ 最终 v2 fence 按 Delivery → Evaluation → WorkItems 持有来源锁,再进入 review ledger;
270
+ 本包只在该来源锁范围内核对本地授权、目标和冻结指纹并写审查账本,不重入来源读取。
271
+ 旧 v1 原文与审查语义不变。
272
+
205
273
  原生审查使用新会话、固定规则和零工具,每次至多一次模型调用。它只判断候选是否受来源支持,
206
274
  不证明事实在现实中为真或后续任务得到改善,也不直接写入 Memory。完整原文被截断时拒绝审查。
207
275
  `.memory-reviews` 私有 SQLite 使用独立授权和持久 claim;重复调用/重启只回读既有结果,unknown
208
- 不重派。来源、owner、canonical 状态与目标版本在结束后重验,批准落盘使用
209
- Delivery → Evaluation → review ledger 同步 writer fence;卸载会先取消并等待在途审查。
276
+ 不重派。来源、owner、canonical 状态与目标版本在结束后重验:v1 批准落盘保留
277
+ Delivery → Evaluation → review ledger 同步 writer fence,v2 使用上述包含 WorkItems 的锁序。
278
+ 卸载会先取消并等待在途审查。
210
279
 
211
280
  普通任务的自动发现、提取与调度见独立 [assistant-memory-learning](../assistant-memory-learning/README.md);
212
281
  有限采用与下一任务召回由 [Memory](../personal-memory/README.md) 负责。批准回执不能替代采用时的当前来源与权限检查。新增数据权限仅为读取这些
@@ -1,8 +1,86 @@
1
1
  import { type PluginCreationVerificationCertificate } from '@dsh-enhanced/assistant-growth-contract';
2
+ import { type LineageScope, type ReviewPublicIdentity, type RowSeal, type TrustedHistoryRequest } from './review-authority-lineage.js';
3
+ declare const maintenance: unique symbol;
4
+ declare const readOnlyMaintenance: unique symbol;
5
+ export interface ReviewGrantHandoffScope {
6
+ transactionId: string;
7
+ installationId: string;
8
+ profileId: string;
9
+ lane: 'creation-reviews' | 'revision-reviews' | 'revision-regressions';
10
+ /** Frozen owner/key/publicKey/expiry/configuration evidence, checked by the caller. Not authentication. */
11
+ configurationDigest: string;
12
+ authority: string;
13
+ toDigest: string;
14
+ }
15
+ interface GrantSnapshot {
16
+ digest: string;
17
+ maximum: number;
18
+ used: number;
19
+ grantsDigest: string;
20
+ historyDigest: string;
21
+ historyCount: number;
22
+ }
23
+ export interface ReviewGrantHandoffPlan extends ReviewGrantHandoffScope {
24
+ protocol: 'dsh-review-grant-handoff/v1';
25
+ file: {
26
+ path: string;
27
+ dev: number;
28
+ ino: number;
29
+ };
30
+ before: GrantSnapshot;
31
+ auditBefore: {
32
+ count: number;
33
+ digest: string;
34
+ };
35
+ planDigest: string;
36
+ }
37
+ export interface ReviewGrantHandoffProof {
38
+ plan: ReviewGrantHandoffPlan;
39
+ after: GrantSnapshot;
40
+ }
41
+ export interface ReviewLineagePlan {
42
+ protocol: 'dsh-review-grant-handoff/v2';
43
+ scope: LineageScope;
44
+ file: {
45
+ path: string;
46
+ dev: number;
47
+ ino: number;
48
+ };
49
+ before: GrantSnapshot;
50
+ auditBefore: {
51
+ count: number;
52
+ digest: string;
53
+ };
54
+ members: string[];
55
+ seals: RowSeal[];
56
+ planDigest: string;
57
+ }
58
+ export interface ReviewLineageProof {
59
+ plan: ReviewLineagePlan;
60
+ after: GrantSnapshot;
61
+ }
2
62
  /** Every dispatch is claimed durably first. A claimed or unknown stage is never replayed. */
3
63
  export declare class CreationReviewStore<Certificate = PluginCreationVerificationCertificate> {
4
64
  #private;
5
- constructor(path: string);
65
+ constructor(path: string, mode?: typeof maintenance | typeof readOnlyMaintenance);
66
+ /** Offline private stage only. Caller must stop writers and authorize frozen configuration. */
67
+ static openExistingForMaintenance<Certificate = PluginCreationVerificationCertificate>(path: string): CreationReviewStore<Certificate>;
68
+ /** Snapshot only; no schema, grant, audit or journal-mode changes. */
69
+ planGrantHandoff(scope: ReviewGrantHandoffScope): Readonly<ReviewGrantHandoffPlan>;
70
+ /** CAS and immutable audit commit together. Reuse only before any writer resumes. */
71
+ applyGrantHandoff(plan: ReviewGrantHandoffPlan): Readonly<ReviewGrantHandoffProof>;
72
+ planGrantHandoffV2(scope: LineageScope): Readonly<ReviewLineagePlan>;
73
+ applyGrantHandoffV2(plan: ReviewLineagePlan): Readonly<ReviewLineageProof>;
74
+ /** Same existing connection, one read transaction. Does not claim, migrate, or change quota. */
75
+ resolveHistoricalCertificate(request: TrustedHistoryRequest): Readonly<{
76
+ certificate: Certificate;
77
+ identity: ReviewPublicIdentity;
78
+ }>;
79
+ /** Offline checkpointed adapter only. Live runtime should use its already-open store method above. */
80
+ static resolveHistoricalCertificate<Certificate = PluginCreationVerificationCertificate>(path: string, request: TrustedHistoryRequest): Readonly<{
81
+ certificate: Certificate;
82
+ identity: ReviewPublicIdentity;
83
+ }>;
6
84
  close(): void;
7
85
  remaining(authority: string, digest: string, maximum: number): number;
8
86
  /** Historical private evidence only; no grant read, claim, or quota mutation. */
@@ -26,4 +104,5 @@ export declare class CreationReviewStore<Certificate = PluginCreationVerificatio
26
104
  unknown(plan: string, binding: string, reason: string): void;
27
105
  certificate(plan: string, binding: string, certificate: Certificate): void;
28
106
  }
107
+ export {};
29
108
  //# sourceMappingURL=creation-review-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"creation-review-store.d.ts","sourceRoot":"","sources":["../src/creation-review-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,qCAAqC,EAAE,MAAM,yCAAyC,CAAA;AAmBzH,6FAA6F;AAC7F,qBAAa,mBAAmB,CAAC,WAAW,GAAG,qCAAqC;;gBAGtE,IAAI,EAAE,MAAM;IAqBxB,KAAK,IAAI,IAAI;IAOb,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IASrE,iFAAiF;IACjF,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;QAAE,WAAW,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QACrG,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,SAAS;IAe/C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GACrF;QAAE,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE;IAqCvG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAGnE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAGhE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAIvF,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAQnF,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAOhD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAG3D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAa5D,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI;CAG3E"}
1
+ {"version":3,"file":"creation-review-store.d.ts","sourceRoot":"","sources":["../src/creation-review-store.ts"],"names":[],"mappings":"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"}