Record the two-trees partial close and renderer records #116

Merged
weichen merged 37 commits from feature/rdm-two-trees-latest-templates into main 2026-10-19 07:51:30 +00:00
3 changed files with 43 additions and 0 deletions
Showing only changes of commit 7f49f0668d - Show all commits
@@ -96,6 +96,7 @@ RDM保有领域、schema/事件与业务权限;Backend仅补必要通用公开
- [X2跨成员已提交业务审计链接修订r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage6-audit-link-design-adjustment-r1.md):W9发现只凭会话项目会泄露私域或重归属旧操作。建议仅将可信已提交项目事件与宿主行建立不可变链接,再按当前审计/资源权限投影。公开写/读合同改变了阶段4 X2,用户已于本聊天call_bf9116ffe4ff4c5bbc4809a58ab02cbe第0项选择“批准修订,继续跨成员审计(推荐)”;W9可按修订继续实施,但安全owner局部不等于跨成员完整审计。SHA256 `385d9d7570217ddcce9fe60a60c99dc58c9a4875ad790584a724d09a210a6e52`。
- [W2/W4实施顺序修订r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage6-w2-w4-sequence-adjustment-r1.md):W2的并发字典修订与事务回滚在当前RDM分支保留两条RED;将已批准W4事务隔离基础W4a移到W3之前,由W2 owner在同一工作区修复,W3仍等待DHF U1合入,W4提案/真人确认W4b仍在W3后。用户于本聊天call_c6f6ccef6a5b4e92ad473d85623d4b5f第0项选择“批准修订,先实现 W4a(推荐)”;批准对象SHA256 `aaf8c091772149a3547cbec272a7f38de3a47cc41c84b7bcef05e74510efbacf`,原稿保留评审前状态。
- [W9 PostgreSQL审计截止水位修订r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage6-w9-pg-audit-cutoff-adjustment-r1.md):现有序列ID可低号晚提交,固定页游标缺少已提交前缀保证;在序列CACHE 1等前提下串行化在线审计ID分配,并补迁移/回滚/离线复制检查。用户于本聊天call_22d8212219f946d8b117837d7e5ccb3f第0项选择“批准修订,实施并验证(推荐)”;批准对象SHA256 `2357b715a7c8f3451b34cc25a578d655e8a48f3f26d9cf7561ea7a13998ca857`,只放行隔离分支,真实运行库迁移仍按原边界。
- [W6项目模型历史来源逐项复验修订r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage6-w6-source-recheck-design-adjustment-r1.md):独立复审发现候选`resolve_goal`把完整user/judge正文写入长期回执,已有RED证实。建议以实际纳入的稳定来源ID/版本/hash经可选领域接口逐项重验,移除原文持久化;影响X1公开合同和迁移,待人工评审。SHA256 `d46168392d4fd8ea9aa7f73206be039268aff6be100faef63efa052323511616`。
## 阶段6启动记录
@@ -15,6 +15,7 @@
- [X2跨成员审计可信链接设计修订r1](rdm-two-trees-stage6-audit-link-design-adjustment-r1.md):用户已批准受影响公开合同,原对象保留评审前状态。
- [W2/W4关键依赖顺序修订r1](rdm-two-trees-stage6-w2-w4-sequence-adjustment-r1.md):用户已批准W4a先行,原对象保留评审前状态。
- [W9 PostgreSQL审计截止水位修订r1](rdm-two-trees-stage6-w9-pg-audit-cutoff-adjustment-r1.md):用户已批准隔离分支实现/验证;真实运行库迁移未获放行,原对象保留评审前状态。
- [W6项目模型历史来源逐项复验修订r1](rdm-two-trees-stage6-w6-source-recheck-design-adjustment-r1.md):长期回执原文RED后的X1受影响公开合同;待人工评审,W6受影响实现暂停。
- [阶段4源码与在途依赖快照](stage4-sources.json)
- [模板与会议来源台账](rdm-two-trees-source-inventory.json)
- [旧DOC源码补充](rdm-two-trees-legacy-source-addendum.md)
@@ -0,0 +1,41 @@
# 阶段6受影响设计修订:项目模型历史来源逐项复验 r1
记录日期:2026-10-14。状态:**待人工评审**。本修订影响已批准阶段4方案 §7 与阶段5 W6/W7 的 X1 Backend–RDM 公开合同和 Backend `ContextManifest` 存储;不改变项目权限上限、普通私域会话、DYN-01、44份模板范围或模型评测预算。W6 Backend 独立分支当前候选 HEAD `6ba53e43ede296e192bb8875d284ba5a9dc27acc` 尚未推送、合入或部署。
## 发现、复现与立即边界
W6 独立审阅先发现 CompiledWorkflow 的 judge 使用独立模型 guard:若前一步输出含当时有权的受控正文,随后撤权,judge 可把旧 `output.md` 当一条新 user prompt 送模。W6 已在本地增加持久 run/step/执行尝试/已响应模型回执/输出字节 hash 的绑定,judge 前复验;源码及固定 HEAD SELF 全包、race、构建显示这条泄漏路径被阻断。第二轮审阅又发现按目标筛选来源的合法提供方会被空 Goal 误拒;候选修订把原 Goal 写入私有 `context_manifests.resolve_goal` 后恢复了正常流程。
第三轮审阅确认该私有列又引入新的持久化问题:普通 RoleUser 可以是完整任务文本,judge 的 RoleUser 则包含前一步 `output.md`;`attempted` 和 `responded` 两行都把原文复制进长期数据库、迁移与备份。未提交的 `TestContextManifestDoesNotPersistWorkflowOutputInResolveScope` 在 HEAD `6ba53e4` 上为 RED,合成标记 `OLD_RESTRICTED_BODY` 确实落入两行 `resolve_goal`;完整 SELF 收据见 `/tmp/w6-scope-privacy-red-6ba53e4-20261014.json`。该代码仅在未合入分支,不能称生产数据已经泄漏。阶段4已批准的 Manifest 边界是对象版本、hash、实际纳入片段与水位,不是保存完整 prompt/模型产出。
**修订获批前暂停 W6 的公开接口和迁移实现。** 已有安全 RED、原分支与收据保留;不以删掉 goal-sensitive 正例、撤权负例或把正文藏进另一个通用日志来过关。
## 方案取舍
| 路线 | 能否同时满足正常按目标检索、撤权与内容最小化 | 建议 |
|---|---|---|
| 永久保存原 Goal/Target 后重新 `Resolve` | 可重得当时筛选集合,但直接保存完整受控正文,重复进备份 | 拒绝 |
| 只保存 Goal hash、仍调用 `Resolve` | 无法从 hash 恢复合法提供方的原筛选集合,正常 critic 误拒 | 拒绝 |
| 将原 Goal 放独立加密短期存储 | 需密钥/ACL/TTL/恢复语义,过期时仍 fail closed;增加新的敏感正文存储 | 暂不采用 |
| 保存已实际纳入来源的稳定 ID/修订/hash,由领域提供方按当前权限逐项复验 | 不存 prompt/output,能复验同一来源和撤权;须增加可选公开复验接口 | 推荐 |
## X1 最小公开合同增量(四要素)
| 要素 | 修订内容 |
|---|---|
| 用户场景 | 同项目成员正常对话或 CompiledWorkflow 多步骤工作时,先前模型实际用过的来源在下一次调用、任一步骤消费旧产物、judge、后台恢复前须按**当前**项目/对象/文档职责/发布状态复验;有权且来源未变时正常推进,撤权/升版/正文改变时旧机器内容不得回流模型。 |
| 希望的公开符号 | Backend `pkg/extension`给**同一已注册 X1 提供方**增加**可选** `ProjectContextSourceRechecker.Recheck(ctx, ProjectContextSourceRecheckRequest) (ProjectContextSourceRecheckResult, error)`;不强加给旧 `ProjectContextProvider` 或通用 Host。请求仅含从受信持久 run/会话/任务取得的 actor、plugin、project、conversation、task、run/step、当前对象 ID,及旧可信 Manifest 中**实际纳入**的 sourceID/revision/sourceHash/inputSHA256、实际展示给模型的 `OfferedReferences` 和已读 `ReadEvidence` 稳定引用;不含 Goal、完整 prompt、output 或正文,已丢弃/未提供的候选项不能冒充实际所见。响应为每项当前可读/发布状态、精确身份/版本/hash、授权的当前 `Text` 或等价可复算的规范输入、当前授权的相同 EvidenceRef、权限/发布 epoch 与领域水位。Backend 在受信调用内逐项核对数量、ID/revision/sourceHash,再临时复算 `Text` 的模型输入 SHA;这些文本不写入通用回执。当前 EvidenceRef 经重新授权后仍须调用 `ReadEvidence` 再读正文并复算 InputSHA256,不能只回显旧 hash 当再鉴权。具体类型名可按代码规范等价命名,但受信输入、逐项结果和 fail-closed 语义不得删。 |
| 当前组合不足 | 现有 `Resolve(Goal)` 可按 Goal 筛选;单存 Goal hash 不能重新选出当时 Source A,空 Goal 只得 Source B 会误拒。现有 `ReadEvidence` 只覆盖详细引用,不能证明旧短摘要/要求项仍有权;仅比较项目 epoch 可能漏掉资源级撤权或正文替换。 |
| 兼容方式 | 非项目会话和现有普通 `Resolve`/`ReadEvidence` 保持原行为;旧 X1 提供方不实现复验接口时,项目态旧机器产物/judge/恢复明确受阻,不退化为无来源放行。RDM W7 消费真实 Backend 发布版时实现该接口并按对象逐项查 IAM、文档职责、批准/发布与版本;不能从调用者自报的 sourceID 推断权限。 |
Backend 仍独占最终模型输入及可信回执。`Recheck` 请求只能从受保护 Manifest、持久 run/step/attempt 与当时实际纳入清单构造,客户端/模型/任意插件不可补造;响应仅由同一注册的领域提供方返回,受 3 秒上限约束,超时 fail closed。新增入模门禁:Included 若缺稳定 sourceID/revision/sourceHash,或 OfferedReferences 缺可再鉴权 ID,当轮就拒绝计入可恢复的项目模型输入,不能到恢复时才发现无法定位。`InputSHA256` 是模型所见 `Text` 摘要,不等同于领域 `SourceHash`;Backend 逐项重算,不能接受提供方只回显请求中的 hash。当前 EvidenceRef 必须重新授权并经 `ReadEvidence` 再读正文。少一项、同ID异正文、跨项目/主体、提供方拒绝/超时、同一步骤混有 attempted/unknown 未定回执、并行归属不明、目标切换或当前 epoch/水位不一致均拒绝旧产物进入下一模型调用。候选检索或已丢弃片段不可充当旧模型实际所见。普通用户本轮自主输入与旧机器产物分开处理。
内部工作流不能只在 judge 校验:第二个 prompt、blackboard 汇总、`{{steps.X.output}}` 插值及其他把旧步骤输出带入模型的消费点均须绑定原 run/step/执行尝试与实际字节,调用上述逐项复验;无法识别旧机器来源时项目态拒绝发送。一次模型请求中的全部早轮/并行来源都要重验,不能只取最后一个 responded 回执。普通本轮用户自主输入不从旧机器片段继承权限。
## 数据、恢复与测试
- 新回执只保存受信 run/step/model attempt、项目、实际纳入项/证据引用的稳定 ID、revision/hash、输入摘要、预算裁剪、权限/发布 epoch 与来源水位;不在 `context_manifests`、通用 audit、导出或日志保存 Goal、judge prompt、`output.md` 正文。无法建立稳定来源的旧项目机器产物 fail closed。
- 当前 v34 仅在未合入分支。实施时修订尚未发布的 v34,让**新安装路径从一开始就不创建含原文的列**;对已经运行过候选 v34 的隔离库提供条件式向前清除/删除原文列的迁移与核对,不以改文件声明既有字节已从备份消失。`storage-migrate` 若目标表无原文列会忽略旧源列,但其旧源快照/备份仍可能有正文;`cmdBackup` 遇旧 v34 源须先净化或明确拒绝,不能把目标复制成功当全链清零。历史回执缺可信逐项来源/attempt 时不能猜测补齐;若曾生成包含原文的本地备份,列为受控隔离/处置清单。与 W9 的 v31/v32 顺序冲突在真实串行合入后重排并重测。
- 先使上述数据库无正文 RED 转绿;完整 goal-sensitive `prompt→judge` 同权限正例、A→B 多轮后撤回早轮 A、第二个 prompt/blackboard/步骤插值负例、发布变化、内容替换、输出字节替换、错误 run/step/attempt、无 rechecker/恶意响应、同一步骤含 attempted/unknown、恢复、并发和取消负例覆盖实际模型请求。SQLite 和隔离 PostgreSQL 的新库、候选 v34 升级以及现有 `storage-migrate` **SQLite→隔离 PostgreSQL** 复制/核对与幂等重跑,分别证明目标库无原文、旧源快照/备份被拒绝或经受控净化;不虚构不存在的 PostgreSQL→SQLite 回迁。RDM W7 真实提供方和真实模型前后对照保留阶段5预算与阶段7验收。
请评审是否批准“按已实际纳入的稳定来源逐项重新授权”的 X1 加法合同与去原文迁移边界。批准只放行 W6 隔离分支继续实现和测试;公开 tag 发布仍为用户双钥匙操作,RDM W7/Dev 组合及阶段6、7出口仍需后续证据和评审。