Record the two-trees partial close and renderer records #116
@@ -0,0 +1,139 @@
|
||||
# 最新模板驱动的两树一网、成员工作上下文与完整可读审计
|
||||
|
||||
修订:r12;更新时间:2026-10-19;需求负责人:用户;记录/准备:实施记录。
|
||||
当前阶段:**2026-10-19 按部分交付收口**(用户决定)。已交付并合入各仓 main:W2/W4a 项目结构与只读快照隔离、W4b 真人确认、W6 历史来源逐项复验、W9 审计截止水位,以及统一文档渲染器 Task 1–12 与 44 份 DHF 模板发布。未交付:W3 递归文档实例、W5 追溯网、W7 上下文提供方、W8 RDM 审计投影、W10 正式前端、W11 DHF 全量保真、W12 含真实模型的全组合验收、W13 收口,以及新增 X3/R3/F3/V3 产品链;这些另立后续大任务按 manual 逐增量评审。E1 保真判据仍未通过,正式运行验收 NOT_RUN,未部署。
|
||||
|
||||
## 目标与成功标准
|
||||
|
||||
根据最新`.templates`模板及`.tmp`材料补全RDM两树一网:细致完整的内容结构、每项目可扩展的节点与要求、随资料和进度提出调整并经人确认生效;同项目成员工作时自动使用当前权限内的项目依据;完整记录人物、时间、动作、内容、结果、依据和影响,以人可读的摘要与结构化详情展示审计。
|
||||
|
||||
成功须同时具备44份新模板的可核查接入、动态递归结构与原子版本化确认、成员真实工作上下文、完整操作留痕/追溯及可读审计。原28项及新增TT-N03/R01合计30项已确认子需求;当前目录或模板条目数量不能代替真实能力与验收。准确来源计数和差距见原对象,不缩成标题导入、只处理部分模板或仅翻译op码。
|
||||
|
||||
## 唯一当前记录与原对象
|
||||
|
||||
- [阶段1需求拆解r1原对象](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-requirements-r1.md):用户选择“确认需求,继续按阶段人工评审”;SHA256 `60fd0296840a74982ae65cc4bd1e6a810ace5109e103e8408a94d4db0573bad7`。
|
||||
- [阶段2需求评估r1及E1试验提案原对象](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage2-evaluation-r1.md):用户“批准”;SHA256 `61733945c077ae6b8f8488ee5a0e41337d7e4a019854dc647e93fecbb4b72178`。原对象保留批准前文字,当前结论在本记录更新。
|
||||
- [阶段3需求与验收条件r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage3-requirements-r1.md):28项完整范围、优先级、依赖及可判定验收,用户已确认;需求主表在Dev任务卡并逐项引用本稿。
|
||||
- [阶段4方案设计r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage4-design-r1.md):推荐路线、共享DHF合同、项目结构/版本、X1/X2扩展、完整可读审计及恢复/验证;用户已批准。SHA256 `568aa26f6b2276f786109e2298b3ae36c6c14d3be5a54e0dfc95bf1b2db4603b`。
|
||||
- [阶段5实施与测试计划r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage5-implementation-test-plan-r1.md):W0–W13跨仓分工、依赖、测试环境/费用上限和全部28项证据映射;用户已批准。SHA256 `b755ef629fae37854b8d0bc344b3f14c6933e4455be74244b9821a6d71b64ebe`。
|
||||
- [E1结果报告r1](/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/e1-20261014-091421/REPORT-r1.md):原件保全;解析路径部分可行,自动保真未通过;全部原始产物/完整SELF收据按批准范围留源码外,未发布为正式模板。
|
||||
- [来源、固定对象与完整SELF收据](../records/2026-10-14-rdm-two-trees-latest-templates/README.md):原字节保留,历史状态不冒充当前事实。
|
||||
|
||||
原对象正文只在records各维护一份;本文件维护当前目标、批准、推进与接续状态。任务卡和项目入口引用本主记录,不另维护另一套方案。
|
||||
|
||||
## 用户确认与授权
|
||||
|
||||
| 决策/阶段 | 对象与结论 | 确认人及依据 | 当前有效范围 |
|
||||
|---|---|---|---|
|
||||
| DYN-01 | 提出变更,确认后应用;已确认 | 用户;本聊天call_8724a18c54b243c5b0e6edfb0c1d50b2第0项答复 | 所有动态结构候选确认后才生效;受控文档仍遵守三权 |
|
||||
| 阶段1 | 需求拆解r1,通过 | 用户;call_22243aaf29ae4ad19c4322a1d7fd8b0f第0项答复;批准对象hash见上 | 确认目标、场景、28项子需求;继续按阶段人工评审 |
|
||||
| 工作区 | 原负责人先收尾并同步 | 用户;同一call第1项答复 | 本任务没有接管旧现场;待其完成后建立独立任务工作区 |
|
||||
| 阶段2/E1范围 | 通过/批准执行 | 用户;本聊天原话“批准”,承接阶段2r1及E1评审请求;2026-10-14,消息时间仅记录日期精度 | 按第8节运行源码外E1,试验后形成阶段3需求表;不是阶段4–7连续推进授权 |
|
||||
| E1结果/阶段3 | 通过需求及风险处理边界 | 用户;本聊天call_87e7dc7218214a27a6a6d4911a44a387第0项:“确认阶段3,进入方案设计(推荐)”;2026-10-14,日期精度 | 确认28项及原件保全/候选/未解决不发布;授权阶段4设计,不代表E1保真通过或实施获批 |
|
||||
| 阶段4 | r1通过 | 用户;本聊天call_69f62a2617e74bfd93b75a8bef7d9809第0项:“批准方案,进入实施计划(推荐)”;2026-10-14,日期精度 | 批准固定方案及剩余风险处理;授权形成阶段5计划,不授权业务实现 |
|
||||
| 阶段5 | r1通过 | 用户;本聊天call_6e90e72546514d5480737f686898f013第0项:“批准计划,进入实施(推荐)”;2026-10-14,日期精度 | 确认W0–W13、DHF U2–U6原owner续办及模型48次/300,000 tokens/人民币150元任一上限;仅隔离副本迁移演练,进入阶段6 |
|
||||
| 增补阶段4 | r1通过 | 用户;本聊天call_a6853c4232f34285a6cbae19dfbeeec5第0项:“批准方案,进入实施计划(推荐)”;2026-10-14,日期精度;固定hash见下 | 确认TT-N03/R01的X3观察/动作前风险判断、私域候选双重分享许可与HITL时序;只放行增补阶段5计划,未放行新接口代码 |
|
||||
| 增补阶段5 | r1通过 | 用户;本聊天call_497a8a4c28bd4231a2cfd63d84375f2a第0项:“批准计划,进入实施(推荐)”;2026-10-14,日期精度;固定hash见下 | 放行X3/R3/F3/V3本地实现、隔离测试和原预算内模型评测;不含真实库迁移、tag发布、部署和增量验收 |
|
||||
| 阶段6 | 增量A实施中 | W0–W4先形成可审查代码/测试;W6/W9可在独立分支并行准备 | 每增量用户确认实现产物,必要设计变化重审 |
|
||||
|
||||
本次记录时间见页首;用户确认的消息引用是审批依据,不由本地SELF命令代签人工或非作者Review。
|
||||
|
||||
## 内容范围与职责
|
||||
|
||||
1. 模板/文档内容:44份DOCX/DOC逐文件、章节/字段/表格/重复块/附件及适用性;原件与模板版本/hash、文档实例和历史版分开。E1已验证14份旧DOC可转换及结构提取,但分页/图形顺序/修订/字体等保真仍未关闭;转换稿仅候选。
|
||||
2. 两树一网:资料切片、结论、递归文档节点、项目阶段/主题/工作事项扩展、结构提案与确认、稳定ID、CAS/幂等/原子事件/重放、受控版本关系和直接/间接影响。
|
||||
3. 工作上下文:普通工作自动取得当前项目任务要求、已确认结论、授权共享资料和可读正文;固定实际依据和版本,预算内渐进读取,撤权/恢复/切换时刷新;不以手动@knowledge代替。
|
||||
4. 审计/显示:成功事件与失败尝试区分,时间/人物/操作/内容前后/来源/结果/影响及实际任务关联完整;人可读摘要、字段差异、对象路径、影响清单、筛选、完整归组/历史及权限内证据跳转。
|
||||
5. 验证:全部28项到当前对象证据;44模板对照、并发/失败/重启/撤权、两项目两成员真实模型与浏览器、精确pins/当前HEAD CI。组件局部SELF和提前独立审阅已有记录;全目标真实模型/浏览器、阶段7正式验收及当前HEAD CI仍为NOT_RUN。
|
||||
|
||||
RDM保有领域、schema/事件与业务权限;Backend仅补必要通用公开能力,Frontend/UI消费已授权的读契约和既有设计系统。新增扩展仍须四要素提案,不能导入Backend internal、改写pins内容、绕过IAM或以管理员身份取得业务正文。团队存储架构替换、线上数据操作、部署及tag发布未纳入本阶段授权。
|
||||
|
||||
## 准备及在途依赖
|
||||
|
||||
- 原共享工作区已恢复干净并包含权威origin/main;本次启动检查返回READY,完整收据由task-start原样导入。Dev R0为`add097d06137c4912a4ed9279e98ca353e4e4cf1`。
|
||||
- 独立Dev worktree:`feature/rdm-two-trees-latest-templates`;Documents候选分支同名,最初从其origin/main `a7ff466d9ae91fc67a53d2bf4991f47fc63a2a4c` 建立;本次恢复已按父仓权威pin快进至 `7bd4e17827d4c7c88647bf3c9199c495b60cb107`。保存阶段记录只代表本地候选,不表示已推送、合入、部署或业务完成。
|
||||
- 阶段2的7仓main、10相关PR快照及最新复核均保留;审计导出/水位(RDM#301/#307、Dev#488;Frontend#73已合入)和快慢通道工作来源(Backend#193、Frontend#79、Documents#95、Dev#512)按最终主干结果协调复用,不重复起另一套入口。快照不是未来准入证明。
|
||||
- 关联规划:[原两树审计集成方案](2026-10-11-rdm-two-trees-trace-audit-integration.md)、[模板与对话生成方案](2026-10-11-rdm-template-dialog-generation.md)、[系统项目与私域协作](2026-10-13-system-project-membership.md)。本目标补齐最新模板、动态结构、默认上下文与完整审计,不用旧任务完成状态代替本轮验收。
|
||||
|
||||
## 阶段与下一动作
|
||||
|
||||
| 阶段 | 状态 | 产物/出口 |
|
||||
|---|---|---|
|
||||
| 1需求拆解 | 用户通过 | 固定hash原对象及确认依据 |
|
||||
| 2需求评估 | 用户通过 | 固定r1原对象及E1范围获批 |
|
||||
| E1探索试验 | 执行结束,风险处理已获确认;保真仍未通过 | 14份转换成功,原件hash不变;59分54秒内闭合自动环节,保真判据未通过 |
|
||||
| 3需求表 | r1用户通过 | 全部28项的优先级、依赖、条件和验证方法,明确E1剩余风险 |
|
||||
| 4方案 | r1用户通过 | 方案SHA256 `568aa26f6b2276f786109e2298b3ae36c6c14d3be5a54e0dfc95bf1b2db4603b`;全部28项映射 |
|
||||
| 5实施/测试计划 | r1用户通过 | W0–W13、28项映射、44资产和模型预算;SHA256 `b755ef629fae37854b8d0bc344b3f14c6933e4455be74244b9821a6d71b64ebe`;放行阶段6本地实施与隔离测试 |
|
||||
| 6实施 | 增量A进行中,W0及组件局部代码已提交但未合入 | W2/W4a原并发/回滚与迁移失效问题已局部修复,读隔离按批准修订实施;独立时间重放RED待闭合。W6/W9基座候选及组合探针有SELF证据,RDM消费与W3–W12仍有缺项;各增量完成后人审 |
|
||||
| 7正式验收 | NOT_RUN | 固定全目标候选和需求到证据映射,人审出口 |
|
||||
| 8代码Review、9合入、10收口 | NOT_RUN | 按已批准范围、当前HEAD CI/平台准入及清理授权办理 |
|
||||
|
||||
当前按已批准阶段5计划实施:W0机械来源守护代码提交 `38ef548637f426e2e36c33a50ae6b8af8c9da453`,16项SELF定向测试及44项实际目录核对通过;只证明来源身份,0项已发布。W2/W4a原并发/回滚及迁移跨实例失效已局部修复,现按已批准读隔离修订继续;`8f80e55a4d`另保留三项时间重放RED,不能用排除该用例的绿色结果宣称W4a完整通过。W6基座上下文固定候选 `d8129abe`、W9基座审计固定候选 `130ac344` 均有局部SELF及限域独立审阅;与Backend main `8e80e261` 的迁移和公开槽冲突在独立探针 `d9b00c23` 形成隔离PG全包/race/build SELF证据,尚未推送、合入或成为产品组合。DHF原工作区owner继续原任务;本任务不覆盖其脏现场。阶段6增量A形成后提交人工评审。
|
||||
|
||||
2026-10-14T15:34:17+08:00的依赖SELF快照显示:DHF U1所在RDM PR #365仍开放、未合入,head `3467a178`,原owner工作区有在途修改;目录hash `65cad94f20f31a32bee26e142004288c4e5b473a93fc0c537d5c6fef1d13ca48`,44项均为needs-review、0项published。完整命令输出已由evidence写入Dev任务卡(收据 `a770d013c48e077da35061ce52b3a309748b77abf29c9ed962d246a99afa83fc`)。W3等待唯一U1内容块合同实际合入后消费;通用结构开发无需等待44项全部发布,W11逐模板发布/生成/Word验收仍须完整满足。
|
||||
2026-10-14T16:21:32+08:00的后续SELF已核验RDM远端main及PR #365实际合入,merge SHA `57d2214feb0ac4a534fa58623fff7d02f93a860a`;唯一DHF U1合同已可消费,原owner工作树已不存在。44项目录hash与needs-review状态未变,合入合同不表示44份资产已发布。完整收据 `dc68957a407f534b79904e59bc4bcd1c7a7f5ef59267c2f9abcc075f495db3ae` 已在Dev任务卡。W2已同步该主干;W3的U1依赖解除,仍按已批准顺序在W4a读取隔离和时间修复后开始。
|
||||
|
||||
当前未决项:E1的保真差异和49字符未定位片段;44份资产逐项语义/格式人工裁定;基座X1/X2真实公开发版、旧数据兼容实测和正式模型/浏览器环境。E1结果是SELF探索证据;局部代码测试不能代替真实模型/浏览器、阶段7验收、当前HEAD CI、合入或部署,这些仍为NOT_RUN。
|
||||
|
||||
本轮修订不改阶段1/2原对象字节,不把试验执行成功记为保真通过。已在隔离工作区提交局部代码并执行测试;原DOC/DOCX、真实运行库与服务保持原状。E1临时环境和唯一成果仍保留,尚未执行清理。
|
||||
|
||||
|
||||
## 阶段4调查及恢复记录
|
||||
|
||||
- 本次恢复前评审稿未提交,首次precheck拒绝;将本任务两仓文件、patch/hash及stash保存至源码外stage4-resume-backup,再同步权威main。Documents按新pin显式快进,后续task-sync通过;新precheck READY及task-resume收据已原样导入。原稿与上游无路径内容冲突,已逐文件恢复;旧证据保持历史对象范围。
|
||||
- Dev当前设计基线main为`f00165e8d71e4dc8ba0ceb7dc50c1a8a3deb6d60`,任务合并后HEAD为`279ddf05b180576a70c817fed48371b72b26c089`;R0不变。仅纳入上游已合入文档/治理变化,未推进新的组件组合。
|
||||
- [阶段4源码及在途快照](../records/2026-10-14-rdm-two-trees-latest-templates/stage4-sources.json):RDM/Backend/Frontend main未变化,Documents#89与Dev#489已合入;相关审计导出、工作发现PR仍开放。DHF专项已有本地U1及E1-R1在途,详见阶段4§2,不把候选或任务叙述当发布/验收证据。
|
||||
- 方案复用DHF的TemplateAsset/ContentBlock并补齐共同合同;本专项负责项目扩展/实例/动态确认/上下文/审计,阶段5固定依赖及非重叠工作项,不接管其他工作区。
|
||||
|
||||
## 阶段5规划状态
|
||||
|
||||
- 本计划不改变阶段4已批准对象字节;DHF U1本地候选仍是40 needs-review、4 blocked、0 published。追加E1-R1四份转换稿为候选、人工格式未审核;原E1与本任务E1的输出方法不同,不能互相代签通过。
|
||||
- 2026-10-14阶段5依赖快照见[记录](../records/2026-10-14-rdm-two-trees-latest-templates/stage5-dependencies.json):Frontend#73已合入其main;其余相关导出与来源PR仍需按交付时最新状态重查。Frontend main当前快照为`5313cfad4e633d0909ed40dcdfa28a11bc1902c0`;此快照不是未来精确组合候选。
|
||||
- 阶段5计划r1已获用户批准,实施及有上限的模型评测进入其授权范围。是否实际执行、花费及产物仍以独立任务卡/收据为准;本稿不把未来结果写成已通过。
|
||||
|
||||
## 阶段6已形成的候选与依据
|
||||
|
||||
- [W0逐文件资产对照](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage6-w0-template-ledger-r1.md):44/44原件路径、来源Git字节、DHF逻辑ID与类型候选匹配;当前目录44 needs-review、0适用性确认,内容/保真/合同仍待审核。SHA256 `6347ca86c09e00588b202e3a6f0039ac7aec426ed2d64efe5d273ca265b62235`,SELF。
|
||||
- [X1/X2公开扩展申请](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage6-public-extension-requests-r1.md):四要素、可信作用域和兼容/权限负例,Backend独立工作项消费;仅申请/方案记录,尚未发布接口。SHA256 `2afc37801d96d4c73099f0e2a73658b35ec37c0e6bdd793f835c5fca4a4dd137`。
|
||||
|
||||
## 本轮新增需求评估
|
||||
|
||||
- [阶段2受影响需求评估:工作信息拆解与主动风险澄清r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage2-work-observation-risk-evaluation-r1.md):用户补充要求用户发言、智能体已提交回复、实际检索及可见分析结果逐来源拆解,并在任务中及时发现歧义/风险,以对话/HITL/工作卡澄清。原`.tmp/08`已有“对话/上传/检索统一切片、切片互撞”的目标,但已批准28项未逐类验收普通工作入口、处理回执和相关动作前澄清。用户于本聊天`call_aea78d4156fe4ca89f4b9b6883b2b23f`第0项确认增补并进入需求表;评估稿SHA256 `2627342f7d6e94137d5e7418d995ce57218093f6512f67fb7b221f01067da04d`。原阶段2结论保持原范围有效,新增能力仍待阶段3–5受影响评审。
|
||||
- [阶段3工作信息拆解与主动风险澄清需求表r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage3-work-observation-risk-requirements-r1.md):只新增TT-N03(四类普通工作来源逐项处理)和TT-R01(任务内风险/矛盾及时澄清)的可判定验收条件,原28项原字节不变;总数30项。用户于本聊天`call_b517d0f07af54aa188a01ddb100485b9`第0项确认两项并进入方案设计;固定稿SHA256 `552a9fdea996bb547c185949b5072a51efafdce1339a9eaafd49537dfedd91b4`。新公开观察接口和对应产品代码仍待阶段4/5评审,原W2/W4a/时间及不受影响的W3可继续。
|
||||
- [阶段4工作来源观察与主动风险澄清方案r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage4-work-observation-risk-design-r1.md):Backend受信X3观察与动作前风险决定,RDM负责私域候选、当前权限/来源比对和既有HITL卡,确认后才成为项目有效事实。两轮限域设计复核已闭合消息/outbox的处理屏障、可见正文时序、私域片段双许可与撤权、RDM风险卡唯一owner等问题。用户于本聊天`call_a6853c4232f34285a6cbae19dfbeeec5`第0项批准方案并进入实施计划;固定稿SHA256 `c9edb25c1decbbcb31220ef0cec8703c37e4aaa87bee31eb308169000b335d8c`;原阶段4批准对象不受影响的条款继续有效。
|
||||
- [阶段5工作来源观察与主动风险澄清实施及测试计划r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage5-work-observation-risk-implementation-test-plan-r1.md):X3/R3/F3/V3的仓库owner、依赖、每路观察/风险/私域分享/恢复与浏览器验收、两项需求证据映射和原预算复用;用户于本聊天`call_497a8a4c28bd4231a2cfd63d84375f2a`第0项批准进入实施,固定SHA256 `10b91e3489ac8145eafec73759a019cb6d3b73fd50e7c74563bbbb6d18e5462c`。
|
||||
|
||||
## 阶段6受影响设计及决定
|
||||
- [W4b真人确认受影响设计修订候选r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage6-w4b-human-confirmation-design-adjustment-r1.md):固定Backend公开Host/Request尚不能证明本次决定来自绑定确切提案修订与hash的一次性真实人响应;建议基座X3可选证明能力加RDM事务内唯一消费。候选文件SHA256 66c1bb8a1f7c1d0be3a1fe1181541b3e490c52a8a5601c3eb6410cabe2442b10;尚待阶段4受影响方案人工评审,W4b决定写入口不实施。W3可按已批递归实例合同继续,W2限域REPLAY不构成增量A验收。
|
||||
- [W4b本地实现进展](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage6-w4b-implementation-progress-r1.md):按已接受的实施计划完成本地链路。Backend `a4d6404`、RDM `528dd0c`、Dev组合测试前的指针提交见该记录。已实现并有SELF证据;未合入、未部署。隔离PostgreSQL、真实模型与真实基座确认路径为NOT_RUN。W3 RED `TestDHFInstantiateMaterializesTemplateBlockIdentity`仍不在本次范围。
|
||||
- [领域时间持久化与历史缺项修订r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage6-time-contract-design-adjustment-r1.md):独立时间RED和固定源码核查发现新态与重放时间不同、ReviewCard时间丢失、CNode同版本更新覆盖原时间/主体。建议新字段显式持久化、事件schema 2及仅针对事件INSERT的最低写版本门禁;旧缺项保持历史兼容投影并明确来源。用户已于本聊天call_6ce04b5a3ca3496487ab2714ed208965第0项选择“批准修订,隔离实施验证(推荐)”;原稿保留评审前文字。授权在读取隔离固定后由原owner继续时间合同与隔离测试,真实库迁移和部署仍未放行。 固定评审对象SHA256 `d78849440e6346482fc09925d402790a7ad257ef76c85275610046a845a45f37`。
|
||||
- [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`,原稿保留评审前状态。
|
||||
- [W4a项目只读快照指针隔离修订r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage6-w4a-read-isolation-design-adjustment-r1.md):RDM固定RED证实`WorldFor`返回的Slice/Doc/Dictionary裸指针可污染同项目缓存而无事件。私有canonical、每次读独立状态图、同代共享真正sealed事件日志及发布水位/性能验证,已由用户于本聊天call_42834c379e204aa781677882d24b54c7第0项选择“批准修订,继续 W4a(推荐)”。批准对象SHA256 `3cabd9d137eaa504e50698c333f8867aec4e2f80e16ffef08fd83d513f2456d4`。旧重放时间漂移另列未决,不由复制方案冒充已修。
|
||||
- [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经可选领域接口逐项重验,移除原文持久化;用户于本聊天call_751be0cc02914fe2b1fe591042d029ec第0项选择“批准修订,继续 W6(推荐)”。批准对象SHA256 `d46168392d4fd8ea9aa7f73206be039268aff6be100faef63efa052323511616`;仅放行隔离分支,真实库迁移/tag/阶段验收仍按原边界。
|
||||
- [W9全部审计写入口截止水位修订r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage6-w9-all-writers-cutoff-adjustment-r1.md):独立复审发现并在隔离PG以测试-only RED实测显式在线低ID绕过已批r1默认函数,`committed-prefix`误报并跨页漏行。所有INSERT同事务锁/单调门禁、UPDATE/DELETE不可改、排他离线复制与只前进序列由用户于本聊天call_4f521a6ddd0542178769f8d7231916b5第0项选择“批准修订,隔离实施验证(推荐)”;批准对象SHA256 `44f6f7cd34bf95a9c1eb844bfdd70a5c2233e1b5ffc89b3091359dcb5fc3b5d8`。仅隔离分支续办,真实运行库迁移仍未放行;当前W9 `63ebc85`本身不能强报已提交前缀。
|
||||
- [Backend X1/X2与最新main组合探针r1](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage6-backend-combination-probe-r1.md):最新Backend main v31账号审计与W6/W9迁移重号在独立本地工作树按v31–v40重排,两个公开槽与surface合并;固定探针HEAD `d9b00c2` 的隔离PG全包/race/build SELF通过,独立限域复审未见新增高影响问题。仍非正式组件合入/CI/产品验收。
|
||||
- [W4a读取隔离P2独立限域复审](../records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage6-w4a-p2-independent-review-r1.md):固定RDM `57a8d7caedf72d9be4bdca179ae2a93e456ba009` 的独立源码副本先验证源码/精确pins,再重放最小race集合;未发现新的高影响P2问题。报告、脚本与原始收据逐字节保存在records;工具标签仍为SELF,独立身份和被测archive在报告/输出中核验,不能用外层Dev HEAD代替被测RDM SHA。原时间RED另行修复,性能成本留增量A人审;当前结论不等于W4a、W3/W4b或全目标完成。
|
||||
|
||||
## 阶段6启动记录
|
||||
|
||||
- 用户已批准阶段5r1(见上方审批表),同意DHF原工作区owner续办U2–U6及模型预算上限;这项授权不表示资产审核或基座tag发布已完成。
|
||||
- 启动时本任务Dev/Documents保留评审稿,尚无业务代码提交。独立任务从各组件权威main及各自precheck建立;W2、W6、W9可在不同工作区并行准备,共享合同/消费关系按阶段5§2处理。
|
||||
- W0初始对齐以DHF已记录的44逻辑资产/41原件hash及唯一ContentBlock候选为基础;所有资产当前仍未published,E1-R1四份仅为候选。用途/格式人工结论和单一合同版本仍须实际固定,未完成前W1/W11不放行发布。
|
||||
|
||||
## 阶段6 X2受影响方案审批
|
||||
|
||||
- 批准时间记录:2026-10-14T11:49:19.752273+08:00(本地记录时间;用户消息仅能确认2026-10-14日期精度)。批准对象为stage6-audit-link-design-adjustment-r1.md,SHA256 `385d9d7570217ddcce9fe60a60c99dc58c9a4875ad790584a724d09a210a6e52`。
|
||||
- 批准范围:已提交项目业务事实的受信宿主链接、当前audit.read与资源权限字段投影、旧无链接记录不补造;W9/W8/W10相应实现与测试恢复授权。私人会话不因项目绑定自动发布;Tag发布仍按双钥匙。
|
||||
|
||||
## 阶段6局部代码与审阅(2026-10-14T11:52:25.226437+08:00)
|
||||
|
||||
- W2 RDM局部提交与W9 Backend私域安全切片各有作者SELF测试,但独立代码审阅均发现需要修复的实质问题;负责工作区继续改进,当前不构成阶段6增量或完整W2/W9验收。W6仍在接完整普通工作链。具体分支/HEAD和缺项见Dev任务卡,结果变更后重验。
|
||||
- W9跨成员可信宿主链接的受影响设计已获用户批准;新增公共合同与消费链尚未实现/发布,旧私人会话仍保持私域。
|
||||
|
||||
## 阶段6新发现(2026-10-14T12:05:20.542456+08:00)
|
||||
|
||||
- W0新增可重跑DHF目录保护脚本与6类红绿测试;当前44份原件/逻辑身份核对通过、0已发布。F01/F02在DHF业务复核后有2项类型候选变化,仍未确认适用性或完成版本字典登记;原阶段1候选清单保留历史,不将此变化误报为原件损坏。
|
||||
- W2独立审阅的既有5项失败路径已修复,但同一World项目字典修订与资料入库同时访问仍可能竞争,需修复并补并发负例。W6/W9各自Backend分支碰到迁移v31重号,最终组合前必须按真实合入顺序重排并重验。
|
||||
@@ -24,6 +24,8 @@
|
||||
实施已合入:Backend PR #198 于 2026-10-14 合入(`2716b9e`,发布为 v0.5.0);Frontend PR #86(`6db528d`)、RDM PR #380(`7c968d9`)与 Dev 组合 PR #626(`7716b28`)于 2026-10-19 合入。
|
||||
用户在部署环境上的业务验收待完成;生产部署不在本条目范围内。
|
||||
|
||||
- [最新模板驱动的两树一网、成员上下文与完整可读审计 r12](2026-10-14-rdm-two-trees-latest-templates.md):2026-10-19 按部分交付收口。已合入各仓 main:W2/W4a 项目结构与只读隔离、W4b 真人确认、W6 历史来源复验、W9 审计截止水位,以及统一文档渲染器(44 份 DHF 模板发布)。剩余 W3/W5/W7/W8/W10–W13 另立后续大任务,E1 保真未通过、正式运行验收 NOT_RUN。
|
||||
|
||||
- [IAM I1 权限边界与公开扩展合同 r1](2026-10-13-iam-i1-permission-contract.md):
|
||||
依据已批准的[用户、职位角色与分层权限统一方案 r1](2026-10-13-identity-role-permission-plan.md)
|
||||
(Documents `a088809`)冻结系统/项目/资源边界、管理员无业务 bypass、创建者 cap、独立 `audit.read` 与公开扩展四要素。
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
# 两树一网本轮来源与原始评审对象
|
||||
|
||||
当前推进状态只在 [方案主记录](../../proposals/2026-10-14-rdm-two-trees-latest-templates.md) 维护。
|
||||
|
||||
本目录按原字节保存阶段1/2原对象、源调查及SELF收据;用户已批准阶段2及E1范围,当前结论在主记录更新,原对象保留批准前文字。对象中的旧工作区状态、绝对路径和/tmp引用是历史执行环境,不代表当前工作区准入状态。初次保存收据的完整副本在evidence目录,摘要在preservation-manifest.json;不改写已批准对象去覆盖历史。
|
||||
|
||||
- [阶段1原对象](rdm-two-trees-requirements-r1.md)
|
||||
- [阶段2原对象与E1试验范围](rdm-two-trees-stage2-evaluation-r1.md)
|
||||
- [工作信息拆解与主动风险澄清的阶段2受影响评估r1](rdm-two-trees-stage2-work-observation-risk-evaluation-r1.md):用户已确认增补并要求进入阶段3;原稿字节保留,不改变原阶段2已批准对象。
|
||||
- [阶段3工作信息拆解与主动风险澄清需求表r1](rdm-two-trees-stage3-work-observation-risk-requirements-r1.md):用户已确认TT-N03、TT-R01新增条件;原28项仍按原批准对象,原稿字节保留。
|
||||
- [阶段4工作来源观察与主动风险澄清方案r1](rdm-two-trees-stage4-work-observation-risk-design-r1.md):受影响公开接口、候选/HITL/卡片、权限和恢复方案,用户已批准固定版本。
|
||||
- [阶段5工作来源观察与主动风险澄清实施及测试计划r1](rdm-two-trees-stage5-work-observation-risk-implementation-test-plan-r1.md):TT-N03/R01 的代码 owner、依赖、隔离测试、全链路验收与原预算复用,用户已批准固定版本。
|
||||
- [阶段6 W4b 真人确认受影响设计修订候选r1](rdm-two-trees-stage6-w4b-human-confirmation-design-adjustment-r1.md):固定公开 Host 缺可信一次性人工证明的合同差距、候选 X3 能力和 RDM 原子消费/恢复/测试边界;待阶段4受影响方案人工评审,确认写入暂不实施。
|
||||
- [阶段3需求与验收条件r1原对象](rdm-two-trees-stage3-requirements-r1.md):已获用户确认,原字节保留。
|
||||
- [阶段4方案设计r1](rdm-two-trees-stage4-design-r1.md):用户已批准,原字节保留。
|
||||
- [阶段5实施与测试计划r1](rdm-two-trees-stage5-implementation-test-plan-r1.md)
|
||||
- [阶段5依赖状态快照](stage5-dependencies.json)
|
||||
- [W0逐文件模板/目录对照r1](rdm-two-trees-stage6-w0-template-ledger-r1.md)
|
||||
- [X1/X2基座公开扩展申请r1](rdm-two-trees-stage6-public-extension-requests-r1.md)
|
||||
- [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先行,原对象保留评审前状态。
|
||||
- [W4a项目只读快照指针隔离修订r1](rdm-two-trees-stage6-w4a-read-isolation-design-adjustment-r1.md):同项目缓存污染RED后的受影响读合同已获用户批准,原对象保留评审前状态;W4a继续隔离实现/验证。
|
||||
- [领域时间持久化与历史缺项修订r1](rdm-two-trees-stage6-time-contract-design-adjustment-r1.md):固定时间RED后的数据合同已获用户批准(call_6ce04b5a3ca3496487ab2714ed208965);原稿字节保留,旧历史不补造,仅隔离实施/测试。
|
||||
- [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仅隔离分支续办。
|
||||
- [W9全部审计写入口截止水位修订r1](rdm-two-trees-stage6-w9-all-writers-cutoff-adjustment-r1.md):显式在线ID绕过后的DB门禁与排他复制修订已获用户批准,原对象保留评审前状态;强coverage仍待修复和验证。
|
||||
- [W9隔离PG显式低ID跨页RED原始SELF收据](evidence/backend-w9-explicit-low-red-20261014-01.json):从Backend独立工作树源码外收据逐字节复制,副本与原件SHA256均为`21999df9ca7304288df42a5a0ac62687870636291bc61a8b1340fd92729bfd96`;退出码1是预期的失败用例,不是代码已修复或验收通过。
|
||||
- [Backend X1/X2与最新main组合探针r1](rdm-two-trees-stage6-backend-combination-probe-r1.md):仅本地合并/测试证据,未推送或合入组件。
|
||||
- [W4a读取隔离P2独立限域复审](rdm-two-trees-stage6-w4a-p2-independent-review-r1.md)、[完整原始收据](evidence/rdm-p2-review-57a8d7ca-replay-20261014-01.json)及[重放脚本](evidence/rdm-p2-review-57a8d7ca-replay.sh):逐字节保留审阅者原件。RDM固定对象57a8d7ca与外层Dev收据对象不同,输出已核验archive及pins;旧时间RED与性能人审未由本结论代替。
|
||||
- [阶段4源码与在途依赖快照](stage4-sources.json)
|
||||
- [模板与会议来源台账](rdm-two-trees-source-inventory.json)
|
||||
- [旧DOC源码补充](rdm-two-trees-legacy-source-addendum.md)
|
||||
- [固定main及PR快照](stage2-sources/remote-snapshot.json)
|
||||
- [相关PR变更文件](stage2-sources/overlap-snapshot.json)
|
||||
- [额外源码哈希](stage2-sources/extra-source-snapshot.json)
|
||||
|
||||
JSON的localCopy字段记录调查时源码外缓存的位置;仓内保留源码commit/path/hash和远端链接,不在Documents复制另一套业务源码。公开依赖仍以各仓真实源码及当前pin为准。所有本地执行收据均为SELF,不能替代CI、独立重放或人工批准。
|
||||
|
||||
E1已按批准范围执行,全部原始产物及完整收据留源码外:[报告与逐文件结果](/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/e1-20261014-091421/REPORT-r1.md)。14份转换成功,完整保真未通过;原件未改变。组件本地实现及隔离自检已开展,真实模型/浏览器、正式验收和部署仍未执行;各项当前结论见主记录。此机器绝对路径只定位当前保存材料,不表示已在远端发布或可在其他机器直接取得。
|
||||
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+22
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
repo=/home/weichen/projects/Agent-System-RDM-wt-feature-rdm-two-trees-project-dictionary
|
||||
snapshot=/tmp/rdm-p2-review-8shrap
|
||||
source_sha=57a8d7caedf72d9be4bdca179ae2a93e456ba009
|
||||
verify_dir=$(mktemp -d /tmp/rdm-p2-receipt-verify-XXXXXX)
|
||||
git -C "$repo" archive "$source_sha" | tar -x -C "$verify_dir"
|
||||
diff -qr -x pins "$verify_dir" "$snapshot"
|
||||
printf 'SOURCE_SHA=%s SOURCE_TREE=IDENTICAL_TO_GIT_ARCHIVE\n' "$source_sha"
|
||||
for pin in agent-system-backend agent-system-core agent-system-frontend agent-system-ui; do
|
||||
expected=$(git -C "$repo" ls-tree "$source_sha:pins" "$pin" | awk '{print $3}')
|
||||
actual=$(git -C "$repo/pins/$pin" rev-parse HEAD)
|
||||
test "$actual" = "$expected"
|
||||
test -z "$(git -C "$repo/pins/$pin" status --porcelain=v1)"
|
||||
printf 'PIN_%s=%s MATCHES_GITLINK CLEAN\n' "$pin" "$actual"
|
||||
done
|
||||
diff -qr -x .git "$repo/pins" "$snapshot/pins"
|
||||
printf 'PIN_SOURCE=IDENTICAL_TO_VERIFIED_PIN_CHECKOUTS\n'
|
||||
printf 'SNAPSHOT_PATH=%s\n' "$snapshot"
|
||||
cd "$snapshot"
|
||||
GOWORK=off go test -race -v ./internal/domain ./internal/rdmapp -run 'TestFrozenWorldCopySeparatesNestedStateAndSharesOnlySealedLog|TestEventLogDoesNotAliasEventInputsOrOutputs|TestEventLogCloseSealsSettersRestoresAndTransactionClosures|TestPublishedReadPointersCannotPolluteOtherReaders|TestRuntimePrivateSeedSurvivesPublicDictionaryMutationBeforeFirstProjectRead|TestRuntimePublicDictionaryCannotPoisonProjectOrHistoricalReaders|TestRetainedTransactionWorldCannotPoisonCommittedCanonical|TestWorldForSharesOnlySealedLogWithinRevision|TestSameRevisionCanonicalCannotBeReplacedByAnotherProjection|TestLaterInstanceCommitRejectsOlderPendingCanonical|TestReaderWaitsForLocalCommitPublication|TestProjectTransactionPublishesOnlyAfterCommit|TestProjectTransactionSQLiteTwoInstanceCAS|TestLegacyAttributionRefreshesOtherRuntimeSQLite|TestCancelInFlightUpdatesCardSameSource' -count=1 -timeout 90s
|
||||
|
||||
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
+34
File diff suppressed because one or more lines are too long
@@ -0,0 +1,117 @@
|
||||
[
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/rdm-two-trees-requirements-r1.md",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-requirements-r1.md",
|
||||
"sha256": "60fd0296840a74982ae65cc4bd1e6a810ace5109e103e8408a94d4db0573bad7"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/rdm-two-trees-stage2-evaluation-r1.md",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-stage2-evaluation-r1.md",
|
||||
"sha256": "61733945c077ae6b8f8488ee5a0e41337d7e4a019854dc647e93fecbb4b72178"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/rdm-two-trees-legacy-source-addendum.md",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-legacy-source-addendum.md",
|
||||
"sha256": "4157703086f11f06b367927824f0f0345ff0f1108eade8ee5926c9608a7f2784"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/rdm-two-trees-source-inventory.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/rdm-two-trees-source-inventory.json",
|
||||
"sha256": "7f55ac6fbd6088727855b49395e130bf81c8f3cb4e835bb2bdeb9bb3e3087bcd"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/remote-snapshot.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/stage2-sources/remote-snapshot.json",
|
||||
"sha256": "3e61710ebc9c51af7ed7d530484b4b9c53eeb7efd4aadf45b6dccb1671a29956"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/overlap-snapshot.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/stage2-sources/overlap-snapshot.json",
|
||||
"sha256": "e3b4f07086145cc4b2bd48d91a9dba6ca78e3ce4a2b512bd5257d2b122e6921f"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/extra-source-snapshot.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/stage2-sources/extra-source-snapshot.json",
|
||||
"sha256": "60576c5fc8163c9981c4a7147102993be0fe8e6b84616df9f9d7860d780bd494"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-01a13639-artifact-check.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-01a13639-artifact-check.json",
|
||||
"sha256": "d433ea42b7ad4d13e5d0889b4c1a289708b86090f857cf05310f7939bbfbff61"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-01a13639-legacy-source-receipt.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-01a13639-legacy-source-receipt.json",
|
||||
"sha256": "39012119226daf018c09677384558ba78e400afd0f53b525c41ede95957a18a5"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-01a13639-meeting-inventory-v2.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-01a13639-meeting-inventory-v2.json",
|
||||
"sha256": "3cb936c388deddcc07e0cfaab4f72e954656bc3d42d245d43daf74956f314784"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-01a13639-meeting-inventory.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-01a13639-meeting-inventory.json",
|
||||
"sha256": "b6021e9adb656a48d5e01e6d1cdbf8fd7e413e4131008f495783bb0848f32c87"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-01a13639-template-inventory-v2.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-01a13639-template-inventory-v2.json",
|
||||
"sha256": "1ccb9e2f1c1bfc21f68066c9700d0db4c9239405640879f159f909250f39a0cd"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-01a13639-template-inventory.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-01a13639-template-inventory.json",
|
||||
"sha256": "9ed0ea32c52436b4d17157a29ba4d8d85879b11d9bba1b3a4bb96aadab80a2f2"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-20261014-01a13639-start.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-20261014-01a13639-start.json",
|
||||
"sha256": "833f2f4a4c8f8d327520be31fe7ee33d582a8864537beb5a4adbf6587eaee0a4"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-stage2-check-01a13639.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-stage2-check-01a13639.json",
|
||||
"sha256": "19e47e7f1050cbb370dd93f1aa01c2a2cabf2eb283b84278733cf41b05c5bd06"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-stage2-extra-sources-01a13639.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-stage2-extra-sources-01a13639.json",
|
||||
"sha256": "ee94eebd5e0ac20eb45d0eb535c73c9aa23c493b854d1accda948b0a46af3cc2"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-stage2-gitea-token-01a13639.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-stage2-gitea-token-01a13639.json",
|
||||
"sha256": "2b9901681248b74f0c467f8fffd508153a94ce1add9dec5a07a90a6a7577eeb5"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-stage2-gitea-version-01a13639.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-stage2-gitea-version-01a13639.json",
|
||||
"sha256": "c5647906354f86438559c5f4206044223e28501ec7605e3c96086c5d6cf482e0"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-stage2-overlap-01a13639.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-stage2-overlap-01a13639.json",
|
||||
"sha256": "123ffcfcbd414a80531e9262581dc45689e5dc37e8ca365c02b879dd3b50b5f7"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-stage2-refresh-20261014-01a13639.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-stage2-refresh-20261014-01a13639.json",
|
||||
"sha256": "f90188e833699834df7476696d37e7ee9822eeea8deb98797664019d4b13d89d"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/evidence/rdm-two-trees-stage2-remote-01a13639.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-stage2-remote-01a13639.json",
|
||||
"sha256": "ce2eaf499e3fe62e8f91e47abb578fb57d83dbb52d00366e89e4e1c05acc5492"
|
||||
},
|
||||
{
|
||||
"source": "/tmp/rdm-two-trees-recheck-20261014-084650-01a13639.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/evidence/rdm-two-trees-recheck-20261014-084650-01a13639.json",
|
||||
"sha256": "fcae2cb5e4dd7755b8dad093ca1cc7ff83403a5d81e119aea77fdcbdcf2e870a"
|
||||
},
|
||||
{
|
||||
"source": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-refresh-20261014-084314/snapshot.json",
|
||||
"saved": "docs/records/2026-10-14-rdm-two-trees-latest-templates/stage2-refresh-20261014-084314/snapshot.json",
|
||||
"sha256": "b241e0e4f7eb3c48c9bc04f3105af4ef14df125e96b01f0a21d098d568cea5ce"
|
||||
}
|
||||
]
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
# 两树一网来源核对补充:旧 DOC 模板接入
|
||||
|
||||
更新时间:2026-10-14T01:25:29+08:00。状态:SELF 只读源码证据;阶段1需求范围及后续阶段仍待用户评审。
|
||||
|
||||
本补充不修改已提交评审的 [需求拆解 r1](rdm-two-trees-requirements-r1.md),r1 SHA256 为 `60fd0296840a74982ae65cc4bd1e6a810ace5109e103e8408a94d4db0573bad7`。
|
||||
|
||||
本轮44份模板中的14份 `.doc` 文件均为实际 OLE Word 容器,文件头与来源哈希逐份核对;两份内嵌ZIP对象的DOC也仍是旧Word文件。
|
||||
|
||||
Backend 当前源码 `5d5fc9891c0eb8994545ccb8b740535d9b99fb0e` 的 [解析入口](/home/weichen/projects/Agent-System-Dev/modules/backend/internal/ingest/ingest.go:85) 明确对 `doc/xls/ppt` 返回“不解析,请转存后重传”的提示。RDM实际pin中的对应源码与之逐字节相同。故14份旧DOC不能通过现有内置解析器直接得到完整模板章节/表格/样式。当前源码调查没有运行解析器、模板渲染或转换工具,不宣称运行验证。
|
||||
|
||||
这使 TT-T01(全部模板接入)和 TT-T02(细粒度内容完整)的后续方案必须明确旧DOC的正式转换或解析路径及其核验:原资产保持不变,转换/解析产物绑定来源哈希;章节、表格、示例/固定文本、图片和排版不能默默丢失。具体实现路线待对应设计阶段确认;不能将这些模板标为空、跳过后声称44份完整覆盖。
|
||||
|
||||
源码外全文提取只能支持需求调查,不能当作产品模板导入能力。完整命令输出由 evidence 工具保存到 `/tmp/rdm-two-trees-01a13639-legacy-source-receipt.json`,复制后保存于本目录 `evidence/`。
|
||||
|
||||
当前共享Dev仍有Documents及Guidelines两个gitlink漂移,未接管、未同步、未创建任务worktree。当前没有本任务阶段1需求评审结论或连续推进授权;动态方式DYN-01已确认且不重问。待用户回复此前两个问题后,按照确认范围从最早未满足的节点继续。
|
||||
+232
@@ -0,0 +1,232 @@
|
||||
# RDM 两树一网最新模板需求拆解与来源核对 r1
|
||||
|
||||
状态:阶段 1 需求拆解,待用户评审;整体实现目标仍未完成。
|
||||
记录人:Codex;负责人:用户;更新时间:2026-10-14T01:21:03+08:00。
|
||||
本记录暂存于源码外,因为启动检查返回 `SHARED_WORKSPACE_BUSY`;没有创建任务 worktree、修改项目代码、迁移数据、部署或更改其他任务现场。恢复准入后须导入 Documents 主记录和本任务卡,不能把此暂存物当作仓内已交付方案。
|
||||
|
||||
## 1. 用户目标及已确认决定
|
||||
|
||||
依据当前用户原始请求:用 `.templates` 的最新模板和 `.tmp` 的项目材料补全两树一网,结构细致完整,允许不同项目按内容与进度动态扩充;同项目成员工作时将其作为上下文和依据;各种操作须完整留痕,追溯审计以人可读的结构化方式显示。
|
||||
|
||||
已确认决定 DYN-01:用户本轮选择“提出变更,确认后应用”。这只确认动态变更方式,不等于需求表、方案、实施计划或连续实施授权已经通过。
|
||||
|
||||
需求优先口径:当前用户要求及本轮决定;当前项目有效需求与 IAM 合同;最新模板中的内容要求;已裁定的历史会议。历史讨论保留来源,但被后续裁决替代的条款不恢复生效。模板中某个产品的示例、数值、姓名、企业信息和测试结果不成为其他项目的事实;模板列出的法规版本也不构成当前法规适用性证明。
|
||||
|
||||
## 2. 本轮已核对的材料与证据边界
|
||||
|
||||
- `.templates/DHF 文件模板` 实际含 **44 份 Word 模板:30 DOCX、14 DOC**,覆盖目录 0–6 七个阶段。`.DS_Store` 排除。44 份文字已提取;30 DOCX 提取表格行/单元格结构。14 DOC 目前为二进制主文字提取,**表格层级、样式、图片及最终排版未验证**;自动识别的 heading 只是候选,不能直接当已批准章节。
|
||||
- `.tmp/Discussion-Meetings` 及根目录的 16 份原始 DOCX 已提取并登记哈希;会议输出与 `further-objective` 共 56 份 Markdown 建立来源索引。重点复核《08 核心数据模型》《13 架构与知识树讨论纪要》及权限、需求、设计的相关条款;索引不表示每份全文已作独立审阅。
|
||||
- 当前本地 RDM 源码快照:`f3ed2d3b762a8f7f6d136d9b77808c2279825de8`。Dev 及 Backend、Frontend、Documents、Guidelines、RDM pins 的实际 SHA 和源码文件哈希见 [来源台账](rdm-two-trees-source-inventory.json)。此为本地源码调查 **SELF**,不是部署环境或最新远端准入证明。
|
||||
- 新模板有四份阶段评审文件字节完全相同:输出、验证、转移、确认评审。应复用资产解析,但保留各自逻辑用途和阶段绑定。输入与转换两个风险报告也应分别绑定,不能用相同名称覆盖实例。
|
||||
- 启动检查原始收据:[启动检查](/tmp/rdm-two-trees-20261014-01a13639-start.json)。当时 Dev `feature/rdm-increment-acceptance-note`,HEAD `648d6ee12c99b326a854a760db135f0b13106c10`,工作树显示 Documents/Guidelines 两个 gitlink 漂移,落后本次 fetch 的主干 30 提交。后续检查两个子仓本身 clean,但其检出不归本任务;不能自行切换或丢弃其现场。
|
||||
- 模板首次提取两项失败的收据保留;根因为旧 DOC 中内嵌 ZIP 被错误判断成 DOCX。改以文件头识别后 44 份文字提取成功:[修正后完整收据](/tmp/rdm-two-trees-01a13639-template-inventory-v2.json)。抽取成功不代表模板内容、样式或业务验收通过。
|
||||
- 业务单测、组合 test/build、浏览器、真实模型对照、CI、运行验收、迁移和部署均 **NOT_RUN**。本轮不引用旧任务测试作为此次实现通过的依据。
|
||||
|
||||
## 3. 当前能力与本次需求差距(源码事实)
|
||||
|
||||
| 范围 | 本轮源码可确认 | 本次需要补齐 |
|
||||
|---|---|---|
|
||||
| 两树与追溯网 | 已有 `NoteTree`、`DocTree`、一般追溯边、15 类受控节点/11 类合规边、结论、事件重放、项目分片 | 细粒度内容契约、项目可扩展结构与确认后的结构变更链路 |
|
||||
| 模板 | 字典 69 文档类型;注册表 73 条,其中 69 为生成骨架 | 多数骨架含“章节名待补/内容要求待补”,不能代替本轮44份标准模板;须逐文件、逐章节、逐表格绑定 |
|
||||
| 字典 | 14 阶段、69 类型、9 主题,随包内嵌种子;标签校验只接受受控值 | 同一项目版本化扩展阶段、主题、工作事项、专业/产品维度;不能绕过权限或污染其他项目 |
|
||||
| 文档结构 | `structure.go` 按类型+标题、章节标题幂等补缺;`Section` 没有父章节/内容块字段;自举 YAML 定义 10 文档/22要求 | 稳定节点 ID、嵌套章节、字段/表格/重复块;重命名、移动、调整内容要求、废止、模板升级不能靠标题识别 |
|
||||
| 笔记结构 | 支持骨架新增、切片多挂载;已有标签与软删除事件 | 正式的项目结构提案/确认/拒绝、层级调整、用户入口与版本冲突处理 |
|
||||
| 工作上下文 | 已发布知识具备台账和资源授权;起草 Compose 通过章节条件取素材;普通对话初始知识注入由 `@knowledge` 触发;自动 Memory 适配器读 owner 的 `memory_entries` | 普通工作自动取得当前项目结构/阶段/结论/任务要求及相关已发布知识;不能把个人记忆或“检索工具存在”当作所有工作已使用两树一网 |
|
||||
| 审计记录 | 事件有时间、actor、op、target、detail、operationId;审计列表归组并分页,DTO不返回原始重放 payload | 完整人物/来源、内容变更、前后版本、原因、结果、影响与实际上下文依据;覆盖失败/拒绝/后台/宿主动作并保持不同事实语义 |
|
||||
| 审计页面 | `RdmAuditWorkspace.tsx` 已有四入口;事件行直接显示 `ev.op`、actor ID、截断 detail;关系行显示英文 layer/state 和对象 ID | 中文业务动作、人物名称、对象路径、结构化差异、影响列表、权限内证据跳转;人可读的筛选与分组 |
|
||||
| 授权 | 当前 IAM 要求独立 `audit.read` grant;创建者/管理员身份不自动赋予业务审计 | 成员日常上下文与业务审计分动作;审计权限不替代文档三权/当前正文权限,权限变更和跨项目均服务端执行 |
|
||||
|
||||
以上仅是需求调查;没有声明所有现有写路径已完成完整性或并发审计。
|
||||
|
||||
## 4. 用户场景与成功标准
|
||||
|
||||
1. 新建软件项目或含软硬件/无菌的项目后,以适用模板建立初始内容清单;软件项目可对不适用的材料/灭菌事项标“不适用+依据”,记录仍保留。项目差异不靠复制固定树硬编码。
|
||||
2. 上传或整理资料后,成员先得到来源明确的知识切片、相关节点和缺项;系统提出增加主题/章节/需求/关系或调整挂载的提案,展示理由与影响,用户确认后才改变有效结构。
|
||||
3. 两名成员在同项目的个人会话中做不同任务时,均自动使用各自可访问的共同项目知识、当前要求与已确认结论,输出可回指实际使用的节点及版本;原始会话、个人草稿、原件不因成员身份自动共享。
|
||||
4. 对某一需求、章节、风险控制或测试结果查看追溯时,能分辨“有来源”“已确认”“待复核”“缺少验证”,可定位确切版本、相关资料和受影响文档。
|
||||
5. 在审计页查看一次结构调整或文档更新,能读出谁、何时、为何、从什么改成什么、谁确认、成功或失败、直接/间接影响;分页不拆散一次操作、不丢事件,不显示机器 payload 作为业务记录。
|
||||
6. 重启、并发修改、后台任务恢复、撤销成员/职责、切换项目/账号后,上述结构、权限、历史与上下文仍一致;未知历史信息明确“当时未记录”,不补写假事实。
|
||||
|
||||
## 5. 两树一网的内容分工与细粒度要求
|
||||
|
||||
### 5.1 笔记树:项目知道什么、依据是什么
|
||||
|
||||
浏览骨架可按项目阶段、工作事项、子系统和主题组织;知识本体允许多处挂载,保持唯一 ID。需要覆盖:项目目标/范围、用户场景、原始资料切片、会议决议、已确认结论、需求与约束、技术方案、风险与控制、验证证据、转换/确认资料。问题、冲突、假设和缺项在登记册维护并关联相应树节点;不能塞入正式正文假装内容完成。
|
||||
|
||||
每条知识至少可定位:类型/标题/摘要、原文或证据引用、来源主体与上传/产生/确认者、原始文件或对话发言锚点、页/章节/表格/段落、归属项目/阶段/工作事项/主题、适用范围、有效/待确认/取代/废止状态、版本、时间、取代链、确认及共享状态。扩展属性需有字段语义和来源,不能用无约束 JSON 代替可验证的业务结构。
|
||||
|
||||
### 5.2 文档树:需要交付什么、每一处应写什么
|
||||
|
||||
实例层级允许“阶段 → 文档 → 多级章节 → 段落/字段/表格/重复项/附件引用”。模板定义、项目文档实例和历史版本分别记录。通用字段包括稳定 ID、父节点、排序、节点种类、内容要求、输入/证据条件、必填/可选/条件适用、填写说明/示例区分、字段类型/单位/验证方法、表格列和重复规则、负责人/三权、当前内容版本、进度及缺项。
|
||||
|
||||
进度不能只用有无文字:应区分未开始、素材不足、草稿、待确认、评审中、已批准、依据变更待复核、不适用。数量统计须说明范围与截止版本;“不适用”保留理由及确认记录,不物理删除必需项。蓝字/斜体示例与固定文本的含义要从原模板解析,不能按整段正文无差别复制。
|
||||
|
||||
项目建议书最新模板至少要求:项目内容/定位/竞品差异/目标/意义;立项依据/行业/客户/技术基础;产品型号/组成/性能;人员/场地设备/经济预算;其他说明;修订历史和编制/审核/批准元信息。
|
||||
|
||||
最新用户需求模板包含 **12 组**内容:临床与用途、用户与场景、功能与性能、安全风险、生物化学安全、可用性、兼容接口、灭菌感染控制、包装运输储存、软件数据、标识信息、法规合规。既有会议的六维分类仍保留为分类维度,不能据此裁掉本轮模板中的具体组项。
|
||||
|
||||
系统需求与设计输入要求保留 UN/SR/DI 的编号、来源、条件/行为/约束、子系统与可验证方法;各类测试保留用例、需求引用、环境/被测版本、预期/实际结果、执行者与证据。软件配置计划、配置报告、维护计划,软件详细设计、集成测试、追溯报告,以及设计验证/确认记录、试产总结等须分别建模其用途。
|
||||
|
||||
### 5.3 追溯网:事实出处、实现与证据链、变化影响
|
||||
|
||||
保留一般来源/操作关系与受控合规关系两套现有语义,经统一读取展示。至少能表达资料→结论、模板要求→章节、UN→SR→DI→设计实现→验证、风险→控制措施→需求/实现/验证、软件需求→架构/详细设计→单元/集成/系统测试→结果,及设计输出→转换/确认。
|
||||
|
||||
受控关系绑定端点的确切版本;候选关系经确认才生效;端点升版后显示待复核,不能自动把旧测试宣称为新版验证。影响范围同时展示直接对象和可追踪的间接对象,区分“本次操作当时记录的影响”与“按当前版本重新分析的影响”。资料来源、法规条款、模板、会议发言等作为证据可回查,不能把操作日志数量当作合规覆盖率。新增受控类型和 DI 与当前15类节点的绑定方式留待方案设计明确。
|
||||
|
||||
### 5.4 项目动态扩展(已选方式)
|
||||
|
||||
触发包括新资料、新需求、阶段推进、发现缺项、模板升级或成员主动整理。提案须说明新增/重命名/移动/调整要求/取代/废止的对象、具体差异、证据、理由、直接/间接影响、适用范围和风险;允许接受、修改后接受或拒绝。
|
||||
|
||||
确认时重验当前用户权限、当前节点/结构版本、模板版本及受控状态;发生并发冲突返回可读差异,不覆盖他人修改。修改结构及关联事件整批原子保存,幂等重试不重复生成节点,失败不出现半棵树。受控正文/已批准内容的实质变更仍遵守既有三权与重审规则;新增普通结构节点的确认不代替文档批准。
|
||||
|
||||
## 6. 成员工作上下文的必需内容
|
||||
|
||||
每次工作根据可信项目身份与当前主体获取:项目概况/范围/阶段,任务对象与内容要求,相关已确认结论,相关当前文档内容(按权限),来源知识、未决冲突/缺项和本次依据版本。先提供短摘要与稳定引用,按任务相关性拉取细节,并有预算与截断说明;无需每轮读取所有文档,也无需用户输入 `@knowledge` 才得到项目依据。
|
||||
|
||||
上下文在新任务、项目/任务切换和相关有效变更后刷新;后台恢复与执行前重验权限及版本,历史对话里的已撤权正文不能继续作为授权读取入口。模板只用于约束任务,原始资料中的指令视为数据。记录实际向模型提供的对象、版本、检索范围、有效水位、摘要/裁剪及来源;“系统预期会使用”不算实际使用证据。
|
||||
|
||||
共享的是经确认/发布且当前有权限使用的项目知识;审计读取、结构元信息、受控正文、原件和个人对话分别按现行 IAM 授权。同项目成员能使用工作依据不意味着自动获得全员原始对话、草稿或审计全量权限。撤销/废止后新工作排除相应依据;仍相关的冲突必须作为冲突显示,不能靠“最新内容优先”悄然裁决。
|
||||
|
||||
## 7. 完整记录与可读审计
|
||||
|
||||
### 7.1 操作覆盖矩阵
|
||||
|
||||
| 对象 | 需记录的操作 | 必须解释的影响 |
|
||||
|---|---|---|
|
||||
| 模板与项目结构 | 导入、解析、版本绑定、初始化、增加、重命名、移动、排序、修改要求、废止、升级、提案/确认/拒绝 | 哪些实例/章节/资料挂载/职责/缺项/后续任务受影响 |
|
||||
| 知识与资料 | 上传、相关性判定、确认/拒绝、解析、切片、标签变更、挂载/摘挂、发布/撤销、结论确认/修订 | 来源、共享范围、引用它的章节/需求、索引及依据有效性 |
|
||||
| 文档 | 起草、提案、采纳/拒绝、编辑、版本化、提交、批注、审核、驳回、批准、撤回、导出 | 正文/版本/审签状态及受影响引用,原件和输出证据 |
|
||||
| 需求/风险/测试/追溯 | 条目增改、分解、候选边、确认/废止、端点升版、风险控制、测试执行/结果登记、基线快照 | 直接/间接影响、失效关系、验证缺口与待复核范围 |
|
||||
| 权限与成员 | 成员加入/移除、角色/职责/权限变更、拒绝访问、授权后的查看/下载/导出 | 当前与原有效权限/职责、受影响工作与可读范围,隐藏未授权正文 |
|
||||
| 智能体与后台工作 | 任务发起、模型/工具执行、获取上下文、确认等待、恢复、取消、重试、失败、完成、投递 | 发起人/执行主体、实际输入依据、输出对象、结果、错误与未完成项 |
|
||||
|
||||
这里只定义与本项目工作有关的操作覆盖,不把每次鼠标 hover 等 UI 噪声当业务操作;同一次后台重试保留尝试信息但不重复宣称业务生效。
|
||||
|
||||
### 7.2 记录字段与事实语义
|
||||
|
||||
- 时间:发生、开始/结束、提交/生效、确认与失败时间(适用时),统一保存明确时区/精度,页面按用户时区展示;未知值写未记录。
|
||||
- 人物:稳定用户 ID、当时显示名/角色/职责、发起人与执行主体、智能体/任务/run、确认/审核/批准者;账号改名后历史身份仍可辨认,系统动作和人工动作可区分。
|
||||
- 定位与操作:项目、请求/操作/批次/关联任务/会话的受控引用,动作类型、对象类型/ID/标题/路径、作用范围、预期版本、实际前后版本、幂等键/因果链。
|
||||
- 内容与依据:操作前后字段或结构差异、不可变原文/版本引用及哈希、原因与用户意见、模板ID/版本/hash、知识/文件/章节/表格锚点;网络来源保留URL、查询词、检索时间和具体引用;模型相关动作保存可用的模型/工具与输入依据引用。
|
||||
- 结果与影响:成功/失败/拒绝/取消/待确认/部分完成的真实状态,错误类别、实际已发生效果、直接/间接影响对象、需要重审/重做/补证的条目及影响分析的版本/范围。
|
||||
- 记录完整性:schemaVersion、完整操作批次、seq/commit水位、可信执行来源及缺项。历史没记录的字段不靠当前值或模型补造。
|
||||
|
||||
成功结构变更与相应事件必须一致提交;失败/拒绝/取消属于操作尝试,不能插入“已生效”的结构事件去伪造结果。跨库/跨宿主记录要保留真实投递状态和恢复链路,具体事务与尝试日志实现由方案阶段确认。公开 DTO 与内部重放 payload 分开,敏感值、凭据、未授权原文不随审计摘要泄漏。
|
||||
|
||||
### 7.3 页面可读结果(示例,非真实审计记录)
|
||||
|
||||
> **某成员于 10:42 调整了“设计输入 / 用户需求 / 使用环境”**
|
||||
> 操作:将“门诊场景”移至“医院使用场景”;依据:已确认会议结论与用户需求模板。
|
||||
> 变更:父节点从“补充资料”变为“医院使用场景”,知识正文保持同一不可变来源。
|
||||
> 确认:另一名具备该动作权限的成员确认,结构版本 8 → 9,结果“已生效”。
|
||||
> 影响:2 份相关文档、3 个需求条目需要复核;其中 1 个已批准章节的依据发生变化。
|
||||
> 展开:前后差异 / 来源依据 / 当时影响 / 当前关联 / 有权限的对象详情。
|
||||
|
||||
默认以一次业务操作展示一张摘要或一行时间线,中文动作、人名、对象名称/路径、时间和结果直接可读。展开为可比较的前后字段、原因、确认链、内容引用与影响对象列表;需要更多证据时再打开现有唯一文件预览。技术操作码、原始 JSON/base64 payload、数据库记录不作为页面的业务记录展示,也不能用通用 AI 生成未经证实的审计解释。
|
||||
|
||||
按时间、人物、业务动作、对象、结果和任务筛选;重试/批次按一次操作归组,操作跨页时仍可完整展开。新旧项目、账号或历史水位切换必须丢弃迟到响应。历史模式提供可读时间/正式版本选择,完整批次截止语义仍保留。已废止对象可审计,但是否能看历史正文仍取决于当前权限。页面只消费 `DESIGN.md` 的令牌、MotionKit、Collapsible,沿用现有四入口、三栏与唯一预览。
|
||||
|
||||
## 8. 候选子需求清单(供阶段1评审;不是已批准需求表)
|
||||
|
||||
| ID | 需求 | 可判定成功条件 | 来源 |
|
||||
|---|---|---|---|
|
||||
| TT-T01 | 完整登记44份最新Word模板,保留原文件/哈希/格式与阶段用途 | 44份均有解析结果或明确阻塞,不以占位骨架计为标准模板完成 | 当前请求、.templates |
|
||||
| TT-T02 | 内容要求覆盖多级章节、表格字段、重复块、附件与填写约束 | 逐模板对照不丢必需项,示例不进入项目事实 | 模板、《08》§三、C-08 |
|
||||
| TT-T03 | 按产品/项目适用性选择并确认内容 | 软件/硬件/无菌等不同项目的必需/可选/不适用项目可解释、可追溯 | 当前请求、模板说明 |
|
||||
| TT-T04 | 模板定义、实例、文档版分别绑定版本 | 升级预览差异,确认后应用;旧实例可回查原模板hash | 模板、既有模板方案 |
|
||||
| TT-N01 | 项目知识、来源、结论与问题完整组织 | 知识唯一ID、多挂载、来源可定位,结论取代与软删除可回放 | 《08》§二、§十、R1–R5 |
|
||||
| TT-N02 | 项目自有阶段/主题/工作事项/类型扩展 | A项目扩展不污染B项目,两个树的标签语义一致且有版本 | 当前请求、《08》§四 |
|
||||
| TT-D01 | 文档树支持稳定ID与递归内容结构 | 移动/重命名后ID及引用保持,重复表格与附件可表达 | 当前请求、44份模板 |
|
||||
| TT-D02 | 动态结构提案、差异、确认/拒绝 | 确认前有效树不变;接受/拒绝可审计且重启后保存 | 本轮 DYN-01 |
|
||||
| TT-D03 | 并发、原子保存、幂等、故障恢复 | 旧版本写入拒绝;事件中途失败零部分结构;重复确认不生成双份 | 《08》§十五、既有U2合同 |
|
||||
| TT-D04 | 受控正文与结构变更不绕过审签 | 已批准正文需既有重审;普通结构确认不自动批准文档 | 现行三权、J-04 |
|
||||
| TT-G01 | 一般来源与受控合规链均可追溯 | UN/SR/DI/设计/测试及风险/软件链可按版本查看,候选/缺项明确 | 最新模板、《08》§十六 |
|
||||
| TT-G02 | 端点升版与关系影响可复核 | 旧关系不宣称新版有效,直接/间接影响及分析水位可辨认 | 《08》、C-01 |
|
||||
| TT-G03 | 来源主体与证据锚点完整 | 人工/规则/模型、模板、网络、知识引用分别可定位 | 《08》§十、SR-D6 |
|
||||
| TT-C01 | 日常工作自动获得项目结构与依据 | 普通成员无需@knowledge;实际模型输入含当前项目任务相关依据 | 当前请求、SR-G10/G11 |
|
||||
| TT-C02 | 任务相关检索与渐进上下文 | 不全量读全部文档;素材、模板要求、冲突、缺项和截断有说明 | C-08/C-09、J-07 |
|
||||
| TT-C03 | 共享与私域及当前权限闭环 | 跨成员只取已授权共享/职责正文;跨项目/撤权后不泄漏 | 现行 IAM、私域合同 |
|
||||
| TT-C04 | 上下文依据与版本可审计,恢复时刷新 | 记录实际输入ID/版本/水位;恢复不继续用撤权或失效依据 | 当前请求、行为面验证要求 |
|
||||
| TT-A01 | 覆盖结构/内容/关系/权限/智能体各类操作 | 操作覆盖矩阵每格有记录或明确不适用,不虚报全量 | 当前请求、SR-G3 |
|
||||
| TT-A02 | 时间、人物、操作、内容、影响完整 | 具备§7.2字段及缺项标识,能定位前后版本与确认链 | 当前请求、《08》§八/十/十四 |
|
||||
| TT-A03 | 成功和失败/拒绝/取消语义准确 | 失败保留尝试及实际副作用,不能成为已生效事件 | 当前请求、R4/R5 |
|
||||
| TT-A04 | 宿主/后台关联及历史诚实出口 | 真正关联操作/run,无法取得的面标明未覆盖,旧信息不补造 | 现有inspection coverage |
|
||||
| TT-U01 | 审计自然语言摘要与结构化详情 | 无内部op码/原始payload冒充业务记录,用户可读前后差异与影响 | 当前请求、DESIGN.md |
|
||||
| TT-U02 | 来源/影响对象和证据可读可跳转 | 人可识别标题/路径/关系含义,进入权限内详情及唯一文件预览 | 旧追溯方案、《08》 |
|
||||
| TT-U03 | 可读筛选、完整归组、分页及历史查看 | 时间/人物/动作/对象/结果可筛,跨页操作不拆失,迟到响应丢弃 | 当前请求、异步/seq规则 |
|
||||
| TT-U04 | 审计动作与正文权限分离 | metadata/差异/历史/导出统一披露规则,audit.read不自动赋予正文权 | 当前 IAM、隐私合同 |
|
||||
| TT-V01 | 模板/结构/重放与故障有需求到证据映射 | 固定候选和精确pins;正常、并发、失败、重启场景可重放 | 根AGENTS、verification |
|
||||
| TT-V02 | 真实模型任务级前后对照 | 同项目成员普通工作展示实际依据使用、召回/错误引用/失效处理结果 | policy/delivery.md 行为面验证 |
|
||||
| TT-V03 | 真实浏览器和当前HEAD CI验收 | 两项目两成员流程、审计可读性、动态提案确认与权限回归验证 | 用户目标、交付门禁 |
|
||||
|
||||
## 9. 边界、尚待确认事项与接续
|
||||
|
||||
本次增量围绕标准模板接入、动态两树一网、成员工作上下文与完整可读审计;复用既有项目/IAM、知识发布、受控合规图、审签与审计入口。团队存储架构替换、平台身份重构、飞书发布、法规定版和线上服务变更不由此次请求自动扩展授权。
|
||||
|
||||
仍需后续设计明确:新模板七阶段与现有14阶段的映射;44个资产与69既有类型及新细分类的绑定;示例/固定文本及DOC样式解析;现有项目的升级预览和历史资料适用性;普通成员工作读取面与audit.read差异;默认上下文预算及相关性排序;宿主/失败尝试审计的公开扩展能力。明确待核实,不预写“已就位”。
|
||||
|
||||
按 `policy/delivery.md`,目前仅阶段1需求拆解产物可评审,阶段2–7及10没有本任务人工结论。本轮动态方式已确认。用户可按阶段评审;若明确授权连续推进,须记录对应阶段、允许动作、终点与停止条件。无法取得当前HEAD CI/独立平台批准、基座发版tag必须由用户执行、出现模板或数据身份冲突、需要线上迁移/部署时,按实际边界停止受影响工作。
|
||||
|
||||
建议接续顺序仅用于解释依赖,不构成实施计划已批准:先完成源材料和内容绑定;再明确项目扩展/结构提案与版本合同;随后将工作上下文、写操作审计和可读展示沿真实链路串通;最后固定组合完成模板对照、故障重放、真实模型/浏览器及当前HEAD CI。远端在途任务重叠尚未重新核验,阶段2须核对,不能重复实施已经交付或在途的范围。
|
||||
|
||||
写入准入前需要工作区owner保存并处理现有gitlink漂移/分支现场,再使用新唯一收据重跑启动检查至READY并从origin/main建立登记任务工作区。本任务不代替owner声明“所有写者已退出”。源码外主记录/台账届时导入 `modules/documents/docs/proposals/` 并在 PROJECT.md 及任务卡引用;本记录不声称已完成仓内留存。
|
||||
|
||||
## 附录A. 44份模板逐文件候选绑定
|
||||
|
||||
此表是需求调查候选,所有新类型名称与阶段映射尚未批准;现有类型不存在时显式标出,不以类似名称假装已覆盖。未提供标准模板的既有69类条目保留并标缺项,不以44份替换后声称全部模板完成。
|
||||
|
||||
| # | 来源文件(均在`.templates/DHF 文件模板/`) | 阶段目录 | 候选docType | 注意事项 |
|
||||
|---|---|---|---|---|
|
||||
| 1 | 0.1初始要求申请表.docx | 0. 商务阶段 | `bd_intake` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 2 | 1.1、731QCP29-F01 项目建议书 02.docx | 1. 策划阶段 | `rd_proposal` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 3 | 1.2、731QCP29-F02 设计开发计划任务书 02.docx | 1. 策划阶段 | `rd_design_plan` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 4 | 1.3、731QCP29-F07 设计开发(策划)评审记录 02.docx | 1. 策划阶段 | `rd_planning_review` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 5 | 2.10.1、731QCP29-F13 配置管理计划 02.docx | 2. 设计输入阶段 | `rd_sw_config` | 现有类型合并配置与维护,计划/报告不得混用 |
|
||||
| 6 | 2.10.2、软件维护计划模板.docx | 2. 设计输入阶段 | `rd_sw_maintenance_plan` | 现有类型未区分;需新增或评审 subtype |
|
||||
| 7 | 2.11.1、731QCP29-F16设计输入规格书模版.docx | 2. 设计输入阶段 | `rd_design_input_spec` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 8 | 2.12、731QCP29-F05 设计开发输入清单 02.docx | 2. 设计输入阶段 | `rd_design_input_list` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 9 | 2.13、RDDHF0213-xxxx产品系统设计方案.doc | 2. 设计输入阶段 | `rd_system_design` | DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 10 | 2.14、731QCP29-F07 设计输入评审记录.docx | 2. 设计输入阶段 | `rd_input_phase_review` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 11 | 2.1、731QCP29-F14 用户需求模板.doc | 2. 设计输入阶段 | `rd_user_needs` | DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 12 | 2.2、RDDHF0202-xxxx 医疗器械法规和标准清单.docx | 2. 设计输入阶段 | `rd_regs_stds` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 13 | 2.3、RDDHF0203-xxxx 同类产品不良事件信息.docx | 2. 设计输入阶段 | `rd_adverse_events` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 14 | 2.4、731QCP29-F15 系统需求规格书模板.doc | 2. 设计输入阶段 | `rd_system_reqs` | 与 pm_system_reqs 的边界需明确,不能默认按 YAML 顺序选取;DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 15 | 2.5、731QCP29-F07 需求评审记录表.docx | 2. 设计输入阶段 | `rd_req_review` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 16 | 2.6、731QCP29-F03 风险管理计划 02.docx | 2. 设计输入阶段 | `rd_risk_plan` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 17 | 2.7.3、731QCP29-F04 风险管理报告 02.docx | 2. 设计输入阶段 | `rd_risk_report` | 新模板属输入阶段;现有类型归输出阶段,阶段口径需确认 |
|
||||
| 18 | 2.8、731QCP29-Fxx 软件开发计划-模板.doc | 2. 设计输入阶段 | `rd_sw_plan` | DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 19 | 2.9、软件需求规格书模板.docx | 2. 设计输入阶段 | `rd_sw_reqs` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 20 | 3.12、原材料进货检验规范-模版.docx | 3. 设计输出阶段 | `rd_incoming_iqc` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 21 | 3.15、产品技术要求.doc | 3. 设计输出阶段 | `rd_tech_req` | DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 22 | 3.17、731QCP29-F06 设计开发输出清单 02.docx | 3. 设计输出阶段 | `rd_design_output_list` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 23 | 3.18、731QCP29-F07 设计输出评审记录.docx | 3. 设计输出阶段 | `rd_output_review` | 四份阶段评审模板字节相同;保留阶段独立用途 |
|
||||
| 24 | 3.6.2、软件详细设计模板.docx | 3. 设计输出阶段 | `rd_sw_detail_design` | 现有类型未区分;需新增或评审 subtype |
|
||||
| 25 | 3.8、RDDHF0213-xxx采购技术说明-结构&硬件.doc | 3. 设计输出阶段 | `rd_purchase_spec` | DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 26 | 3.9.1、731QCP29-Fxx 工艺流程图模板.doc | 3. 设计输出阶段 | `rd_process_flow` | DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 27 | 3.9.2、RDSOP00xx-00xx xxx作业指导书.docx | 3. 设计输出阶段 | `rd_work_instruction` | 现有类型未区分;需新增或评审 subtype |
|
||||
| 28 | 731QCP33-F01 软件可追溯性分析报告 02.docx | 3. 设计输出阶段 | `rd_sw_trace_report` | 现有类型未区分;需新增或评审 subtype |
|
||||
| 29 | 24.产品有效期验证.doc | 4. 设计验证阶段 | `rd_lifetime` | 使用期限与货架寿命须按正文及适用范围确认;DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 30 | 41.软件单元测试用例-模板.doc | 4. 设计验证阶段 | `rd_sw_unit_test` | 测试用例与测试结果分实体,报告绑定用例及被测版本;DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 31 | 42.软件集成测试用例-模板.doc | 4. 设计验证阶段 | `rd_sw_integration_test` | 现有类型未区分;需新增或评审 subtype;DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 32 | 43.软件系统测试用例-模板.doc | 4. 设计验证阶段 | `rd_sw_sys_test` | 测试用例与测试结果分实体,报告绑定用例及被测版本;DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 33 | 49. 软件配置管理报告-模板.doc | 4. 设计验证阶段 | `rd_sw_config_report` | 现有类型未区分;需新增或评审 subtype;DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 34 | 731QCP29-F07 设计验证评审记录.docx | 4. 设计验证阶段 | `rd_verification_review` | 四份阶段评审模板字节相同;保留阶段独立用途 |
|
||||
| 35 | 731QCP29-F08 设计开发验证记录 02.docx | 4. 设计验证阶段 | `rd_verification_record` | 现有类型未区分;需新增或评审 subtype |
|
||||
| 36 | 756QCP26-F02 验证确认报告 V03-.docx | 4. 设计验证阶段 | `rd_verification_validation_report` | 现有类型未区分;需新增或评审 subtype |
|
||||
| 37 | 731QCP29-F04 风险管理报告 02.docx | 5. 设计转换阶段 | `rd_risk_report_t` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
| 38 | 731QCP29-F07 设计转移评审记录.docx | 5. 设计转换阶段 | `rd_transfer_review` | 四份阶段评审模板字节相同;保留阶段独立用途 |
|
||||
| 39 | 731QCP29-F09+试产总结报告+03-20250730.docx | 5. 设计转换阶段 | `rd_trial_production_report` | 现有类型未区分;需新增或评审 subtype |
|
||||
| 40 | 53. 使用错误评估报告-模板zlx.doc | 6. 设计确认阶段 | `rd_use_error` | DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 41 | 731QCP29-F07 设计确认评审记录.docx | 6. 设计确认阶段 | `rd_confirmation_review` | 现有类型未区分;需新增或评审 subtype;四份阶段评审模板字节相同;保留阶段独立用途 |
|
||||
| 42 | 731QCP29-F11 设计开发确认记录 02.docx | 6. 设计确认阶段 | `rd_confirmation_record` | 现有类型未区分;需新增或评审 subtype |
|
||||
| 43 | 756QCP20-F01 计算机软件确认报告 02.doc | 6. 设计确认阶段 | `rd_sw_validation_report` | 现有类型未区分;需新增或评审 subtype;DOC 已提取主文字;表格层级、样式、图片仍需正式解析核验 |
|
||||
| 44 | 756QCP26-F01 验证确认方案 V03-.docx | 6. 设计确认阶段 | `rd_validation_plan` | 已有类型候选;内容要求与格式仍需逐项批准 |
|
||||
|
||||
## 附录B. 重点可复核源码与来源
|
||||
|
||||
- RDM:`internal/domain/{notetree,doctree,labels,eventlog,tracenet,compliance,conclusion}.go`、`internal/rdmapp/{templates,templates_gen,structure,inspection,inspection_visibility,compose,knowledge_publication,runtime}.go`、`plugins/rdm/plugin.go`。
|
||||
- Dev 固定实际检出:`modules/backend/internal/runtime/llm.go`、`modules/backend/internal/runmgr/memory.go`、`modules/backend/internal/ctxasm/ctxasm.go`、`modules/backend/internal/app/app.go`、`modules/frontend/src/components/RdmAuditWorkspace.tsx`;RDM实际 pins 中已核对初始知识注入入口相同。
|
||||
- 会议重点:`.tmp/Discussion-Meetings/2026-10-08_19-36/Outputs/{01,03,08,10,11,13}*.md`;旧期输出用于保留来源及裁定次序;ASR含转写噪声,不以未核实人名与数字建立正式业务事实。
|
||||
- 关联有效主记录:`modules/documents/docs/proposals/2026-10-11-rdm-two-trees-trace-audit-integration.md`、`2026-10-11-rdm-template-dialog-generation.md`、`2026-10-11-rdm-final-target-completion.md`、`2026-10-13-system-project-membership.md`;原U1–U5已有实施记录,本次是新增内容与能力补齐,旧报告不能替代本轮源核对。
|
||||
|
||||
后续评审与实现只在同一主记录续办,确认DYN-01不重问;其他未完成阶段、当前源码SHA、准入收据、模板绑定候选及NOT_RUN缺项一并保留。
|
||||
+1617
File diff suppressed because it is too large
Load Diff
+152
@@ -0,0 +1,152 @@
|
||||
# 两树一网阶段 2:需求评估 r1
|
||||
|
||||
状态:阶段 1 已获用户确认;本阶段 2 评估待人工评审。整体实现目标尚未完成。
|
||||
记录人:Codex;评审人/需求负责人:用户;记录时间:2026-10-14T03:54:21+08:00。
|
||||
授权方式:manual(按阶段人工评审)。共享Dev工作区由原负责人收尾并同步;本任务继续只读调查及源码外记录,没有接管、同步、创建任务worktree、修改业务代码、迁移或部署。
|
||||
|
||||
## 1. 已确认范围与本次评估对象
|
||||
|
||||
阶段1评审对象:[需求拆解 r1](rdm-two-trees-requirements-r1.md),SHA256:`60fd0296840a74982ae65cc4bd1e6a810ace5109e103e8408a94d4db0573bad7`。用户回复原话:**“确认需求,继续按阶段人工评审”**;现场处置原话:**“由原工作区负责人先收尾并同步”**。来源为本聊天 `request_user_input_async / call_22243aaf29ae4ad19c4322a1d7fd8b0f` 的第0、1项回复。确认的是阶段1需求拆解及后续流程,不是阶段2–7产物已批准。
|
||||
|
||||
已确认动态方式DYN-01:智能体提出结构变更,成员确认后应用。保持28个TT需求及44份新模板逐文件范围,不重新缩成固定三层树、部分模板、手动知识查询或仅审计文案翻译。未提供新标准模板的既有类型保留并明确缺项;不声称最新44个资产覆盖全部69个既有类型。
|
||||
|
||||
本阶段评估价值、可行性、工程和评审成本、风险、依赖、在途任务重叠及模块/公开契约符合度;不冻结新API、数据库迁移方案或实施计划。下一阶段仍须人工评审。
|
||||
|
||||
## 2. 评估结论与推荐取舍
|
||||
|
||||
**整体可行,建议在既有RDM领域能力上补齐完整链路;工程量高。** 现有两树、一般网/受控合规图、原子事件、重放、文档审签、发布授权及四入口审计工作区可复用。主要工作是细粒度模板/节点契约、项目扩展与结构提案、默认项目工作上下文、审计写入信息与读投影,而不是只增加树的显示。
|
||||
|
||||
建议保留全部已确认需求,按可验证增量实施,完整目标不因分批而缩小。先解决模板完整接入和结构/版本依赖,再将成员上下文、操作审计及人可读展示接成真实流程;既有权威数据和权限边界保留。准确顺序、实施单元、接口和测试环境在阶段4–5定稿,本阶段只评估依赖。
|
||||
|
||||
| 路线 | 对目标的满足程度 | 成本/风险 | 推荐结论 |
|
||||
|---|---|---|---|
|
||||
| 复用现有RDM结构、事件、发布和审签;补细粒度契约及必要公开扩展 | 能覆盖44模板、项目动态扩充、成员工作依据及完整可读审计 | 局部领域数据演进、基座扩展/发版依赖、真实模型与组合验收成本较高 | 推荐,进入后续需求表与设计 |
|
||||
| 只导入标题和若干表格,再翻译审计op码 | 无法覆盖多级内容、动态确认、实际上下文和完整操作影响 | 代码量低,但留下用户明确提出的主要缺口 | 不作为本目标交付路线 |
|
||||
| 重写两树/图存储和项目/权限体系 | 可重新建模,但与已交付能力大量重叠 | 迁移和历史保真风险最大,会拖入无关体系替换 | 当前无证据需要全面重写,不推荐 |
|
||||
|
||||
## 3. 当前主干事实、基线与证据等级
|
||||
|
||||
本次使用已验证的Gitea只读API,按完整main SHA读取不可变文件。七仓开放PR清单已分页读取,十个相关PR进一步核对了变更文件并在读取前后核验head一致。清单和源码复制为 **SELF** 调查证据,不是CI/GATE或独立代码Review通过。
|
||||
|
||||
| 仓库 | 本次API核验的main SHA | 当前开放PR数 |
|
||||
|---|---|---|
|
||||
| Agent-System-Backend | `5d5fc9891c0eb8994545ccb8b740535d9b99fb0e` | 3 |
|
||||
| Agent-System-Dev | `add097d06137c4912a4ed9279e98ca353e4e4cf1` | 6 |
|
||||
| Agent-System-Documents | `a7ff466d9ae91fc67a53d2bf4991f47fc63a2a4c` | 2 |
|
||||
| Agent-System-Frontend | `eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b` | 2 |
|
||||
| Agent-System-RDM | `6fcb256205c2384abed35d3b6ab96ca7216e9297` | 2 |
|
||||
| Agent-System-UI | `2c4322ef56df64ad72f65907d25b048a74bb5ffc` | 1 |
|
||||
| Development-Guidelines | `2f5b19872be2a4597838a4131ad75d1be089ee5e` | 0 |
|
||||
|
||||
来源:[主干与PR快照](stage2-sources/remote-snapshot.json)、[相关PR变更文件快照](stage2-sources/overlap-snapshot.json)、[额外固定源码](stage2-sources/extra-source-snapshot.json)。核验时间以各快照 `checkedAt` 为准;正式启动/验收时必须再获取权威目标,不能把此快照当未来main。
|
||||
|
||||
复核的RDM/Backend/Frontend主要业务文件与本地实际检出逐字节相同;Dev PROJECT/delivery及Documents索引存在差异,当前共享检出仍停留在旧任务分支。远端和当前检出的delivery规则都保留阶段1–7人工评审;本轮按用户给定AGENTS与已确认manual授权执行,不擅自切换规范。
|
||||
|
||||
**对阶段1源码判断的补充**:运行时字典已有持久化加载,优先读库内最新字典、缺失时才读种子;Runtime仍持有一个 `Dict` 并交给各项目World。故不能把“有持久化字典”当作“已有每项目独立扩展”。文件种子69类型/14阶段/9主题的数量,只证明该种子资产,不代表当前运行库实际词条数;本阶段没有读运行数据库。
|
||||
|
||||
内置解析器对旧DOC明确“不解析”,本轮14份DOC仍需要正式转换/解析路径。Microsoft提供独立的DOC二进制格式规范,因此将DOC当XML或仅提取可见文本不能证明表格/样式完整。[Microsoft MS-DOC规范](https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-doc/ccd7b486-7881-484c-a137-51170af7cc22)。这影响TT-T01/T02的可行性验证,不能跳过。
|
||||
|
||||
## 4. 28项需求的价值、可行性与符合度
|
||||
|
||||
工作量为相对评估,**不是工期或成本承诺**。高=同时涉及数据、写路径/恢复、权限或公开扩展;中=可局部复用但仍需明确契约和真实验证。当前实现缺口与要求符合度分别记录,源码存在不代表运行可用。
|
||||
|
||||
| 需求组及全部ID | 价值与现有基础 | 可行性/主要缺口 | 符合度 | 相对工作量 |
|
||||
|---|---|---|---|---|
|
||||
| TT-T01、TT-T02、TT-T03、TT-T04 | 用真实模板约束内容与格式;已有注册表和目录资产 | 44份资产逐块解析、适用性、固定版本/hash、实例绑定;14DOC完整性未验证,生成骨架不能算标准模板 | 需调整后符合;DOC路径待验证 | 高 |
|
||||
| TT-N01、TT-N02 | 将资料、结论与依据组织为共同项目知识;已有切片、多挂载、结论/取代 | 现有共用Dict改为具有明确项目作用域的扩展合同;阶段/工作事项/主题有版本和审计,旧数据保真 | 需调整后符合 | 中–高 |
|
||||
| TT-D01、TT-D02、TT-D03、TT-D04 | 不同项目按进展调整,且人确认后才生效;已有DocTree、状态机、TxProject | 递归内容块、稳定ID、结构提案/CAS/幂等、移动/更名/废止、审签影响;不能按标题当身份 | 需调整后符合 | 高 |
|
||||
| TT-G01、TT-G02、TT-G03 | 能回答事实来源、合规证据链及影响;已有一般网与受控版本网 | 最新UN/SR/DI/设计/测试模板字段与现有15类受控节点映射;版本端点、直接/间接影响、来源主体与锚点 | 符合领域定位;映射需调整后符合 | 中–高 |
|
||||
| TT-C01、TT-C02、TT-C03、TT-C04 | 让每个成员的日常工作基于项目最新有效依据;已有发布台账、检索/资源授权与Compose | 普通对话的自动项目依据入口、上下文预算/版本manifest、恢复/撤权刷新;个人Memory与@knowledge不能替代 | 需调整后符合;公开入口需核对/申请 | 高 |
|
||||
| TT-A01、TT-A02、TT-A03、TT-A04 | 完整记录时间、人物、操作、内容、结果和影响;已有结构事件、操作ID/outbox、宿主命令审计 | 成功事件与失败尝试分语义、前后值/来源/当时影响、人物/任务关联、宿主项目级读面及披露、历史缺项诚实显示 | 需调整后符合;宿主读面待设计 | 高 |
|
||||
| TT-U01、TT-U02、TT-U03、TT-U04 | 无需理解数据库或内部代码即可取证;已有四入口和唯一文件预览 | 业务操作摘要/结构化差异/对象名称/影响、可读筛选/历史、完整归组和按字段授权;不新增独立管理屏 | 符合DESIGN布局;读契约需调整后符合 | 中,受上游数据契约制约 |
|
||||
| TT-V01、TT-V02、TT-V03 | 防止模板数量、mock和页面存在被误当用户目标已完成 | 44份对照、并发/失败/重启/撤权;两项目两成员真实模型与浏览器;精确pins及当前HEAD CI | 符合交付规则;本次业务验证NOT_RUN | 高 |
|
||||
|
||||
上述组覆盖28项已确认子需求,没有把高成本项移出本目标。最终优先级与处理结论在阶段3需求表确认,不由本阶段表格自动批准实施。
|
||||
|
||||
## 5. 成本、依赖与模块归属
|
||||
|
||||
### 5.1 成本依据
|
||||
|
||||
- 模板资产:44份逐文件内容核对,候选绑定涉及32个既有类型和12个新增/细分用途;这不是12个类型已经决定新增。其余37个既有类型本次没有对应的新标准资产,须保留兼容或缺项状态。
|
||||
- 文档结构:仅30份DOCX就有 **199个表格对象、1504行、5731个含文字段落、809个标题候选**。计数包括封面、签署、目录、示例与重复内容,不等于正式要求数量;说明不能按几个H2批量生成替代语义核对。14份DOC的正式表格/格式规模尚未计入。
|
||||
- 数据与恢复:涉及项目字典作用域、结构/内容版本、提案与确认、事件schema、重放、历史/导出截止和旧对象绑定。需要迁移/兼容与故障验证,不能按“只增加几个字段”估计。
|
||||
- 公共链路:至少要评估自动项目工作上下文与宿主项目审计读取两个通用能力接缝,必要时还包括可信人物显示信息。下游不能直接读取Backend internal表,也不能给审计用户广泛账号管理权限。
|
||||
- 真实验收:多人多项目、不同文档职责、撤权、恢复与模型实际依据使用都需要准备真实场景和可核查记录。模型样本数量、预算及正式测试环境在阶段5由用户批准;当前没有调用付费模型。
|
||||
|
||||
成本控制采用现有域模型/事务/读面、沿用四入口与唯一预览、复用在途导出/工作摘要、给模型短摘要后按相关性展开;不会通过取消递归结构、只处理少量模板或让用户手动@knowledge来降低成本。
|
||||
|
||||
### 5.2 依赖与归属
|
||||
|
||||
| 能力/接缝 | 主归属 | 现有可复用点 | 必须完成的评估/设计条件 |
|
||||
|---|---|---|---|
|
||||
| 标准模板语义、适用性、schema、发布和实例绑定 | RDM;原始材料来自Dev `.templates` | `templates.go/templates_gen.go`、DocTree、版本/审签 | 先保全原件与hash;发布结构须可审,不凭文件名替换现有docType |
|
||||
| 项目字典、递归结构、结构提案和影响 | RDM领域与应用层 | `WorldFor`、一般/受控图、`TxProjectOp`及事件重放 | 同项目生效版本唯一;跨项目互不污染;固定对象与受控状态重新鉴权 |
|
||||
| 普通工作自动取得项目依据 | RDM提供领域摘要/引用/权限,Backend负责通用注入/恢复/预算 | `Host.KnowledgeSearch`、已发布台账、检索资源授权、ctxasm/运行记忆端口 | 先确认现有注册组合能否满足;不足则在Dev申请可选公开能力,不能导入internal或直接改个人记忆表 |
|
||||
| 结构审计、前后变化、影响与人可读投影 | RDM | 事件日志、operationId、inspection读服务 | 公共DTO与重放payload分离;成功与失败尝试区分;历史不补造字段 |
|
||||
| 宿主命令/后台动作与项目审计关联 | Backend通用能力 + RDM领域读适配 | owner作用域命令审计、Host.Audit、outbox | 需要受信项目/主体/资源及字段披露合同,不能拿全owner审计列表当项目审计 |
|
||||
| 审计与成员工作界面 | Frontend消费确定读契约;UI消费既有原语 | RdmAuditWorkspace、三栏、现有文件预览、tokens/MotionKit/Collapsible | 显示中文动作、人名/可辨账号、对象路径、差异/影响;不向客户端下发受限正文后再隐藏 |
|
||||
| 公共扩展、tag与组合交付 | Dev/Backend/Frontend及RDM按各仓规则 | `pkg/extension`、可选接口惯例、pins/checks | 扩展申请四要素、兼容/隔离;基座tag发布仍由用户亲手执行;不能让RDM合入main时长期依赖未发布本地分支 |
|
||||
|
||||
本轮不会把项目/IAM、任务系统或通用数据存储整体替换。在本次复核的公开面中未找到项目上下文Provider和项目级宿主审计查询;具体符号或路径仍是阶段4设计问题,尚未批准新API。
|
||||
|
||||
## 6. 在途任务与重叠处理
|
||||
|
||||
以下是本次API读取时的真实开放状态,均 `merged=false`;不是“已经合入”。读取的PR head在文件清单核对前后保持一致。仅作依赖/重叠评估,不把PR说明、审批或CI声明当现行主干能力。
|
||||
|
||||
| 在途范围 | 已核验的PR与主要文件 | 与本目标关系及处理建议 |
|
||||
|---|---|---|
|
||||
| 审计导出/水位固定 | RDM #301:persist、export_artifact/report、cgraph_export、xlsx、plugin;Frontend #73:RdmAuditWorkspace/store/styles/workspaces;RDM #307、Dev #488负责pin消费 | 与TT-A/U/G历史取证、DTO、分页/导出语义耦合;优先复用该候选最终主干结果,设计阶段保留同一水位与授权模型,不能重复起另一套导出入口 |
|
||||
| 快慢通道有依据的工作判断/来源 | Backend #193、Frontend #79、Documents #95、Dev #512:runtime/runmgr/上下文相关执行、任务来源、卡片/预览/contract | 与TT-C/A/U的任务依据、来源manifest、进度和显示重叠;复用其可信来源与同一任务卡,不能把未确认发现自动变成已确认项目知识;本次结构确认仍单独持久化 |
|
||||
| 历史方案/交付状态回填 | Documents #89、Dev #489:原两树方案及恢复/账号方案状态 | 主要是文档状态重叠;本轮新需求记录与原方案的状态更新须协调,不能用旧正文或索引表示本目标已完成 |
|
||||
| 账户事务与活动实例保护 | Backend #185、Dev #486/#482 | 对真实身份/审计/验收环境有依赖影响;不会重复实施账户事务、替换当前身份或操作运行实例 |
|
||||
|
||||
- [Agent-System-Backend #193](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/193):`5f834544b0b808cb16214a36725f2ae3cb90bfd4`
|
||||
- [Agent-System-Dev #488](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/488):`334d2e2375095f3b4160ab232296f9c92065c565`
|
||||
- [Agent-System-Dev #489](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/489):`3e7f0360087b126f41fa9ce18dbd1e53d0a8f067`
|
||||
- [Agent-System-Dev #512](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/512):`e31443a8ff1f099f9b2ef320c295b0ddcdaf503d`
|
||||
- [Agent-System-Documents #89](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/89):`b8df6f3c2a3180b06c61d2303bbfea9a3914f186`
|
||||
- [Agent-System-Documents #95](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/95):`c7cb2d8d89aaef0329c9a8a2045fcd42abb36e39`
|
||||
- [Agent-System-Frontend #73](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/73):`d9bb780384b16f661d71a5e6ad288a77426d9d98`
|
||||
- [Agent-System-Frontend #79](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/79):`006c81567546deb1cbd95abbb7ca6a36f99241b2`
|
||||
- [Agent-System-RDM #301](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/301):`6252f62524ef34360fdcdf8844d7e729378ffbfb`
|
||||
- [Agent-System-RDM #307](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/307):`8ae52a6d9a4d8b60e875f9c56862f34dffed7705`
|
||||
|
||||
补充源码核对:Frontend #73候选主要新增概览导出,但其 `EventRow` 仍显示 `ev.op`、actor及截断detail;所以该在途工作并不覆盖本次“详细可读操作记录”。Documents #95候选设计将模型发现与可信依据/待确认判断分开;这是相关约束,不能将其“已批准设计”叙述升级为本轮模型验证或主干已交付能力。
|
||||
|
||||
没有看到上述开放清单中直接实现“44个新标准资产、项目字典独立扩展、递归结构提案、默认两树一网上下文、完整审计投影”的PR。此结论限于已核验的开放PR标题、变更文件与两份候选源码,不代表所有未推送工作都不存在;阶段5启动仍须与当前任务和新main重验。
|
||||
|
||||
## 7. 风险与处理边界
|
||||
|
||||
| 风险 | 影响 | 建议处理 | 当前状态 |
|
||||
|---|---|---|---|
|
||||
| 旧DOC转换只保留文字,丢表格、图片、样式及蓝字示例含义 | 44份标准模板完整性无法成立 | 先做E1受控解析/转换试验;每份有可核查差异台账,缺项不计完成 | 重大未知,E1待批准、NOT_RUN |
|
||||
| 目录7阶段、既有14阶段及12个细分用途语义冲突 | 权限阶段被误映射、计划/报告或验证/确认混用 | 阶段3列逐项适配;阶段4冻结stage/type用途映射与版本 | 待设计;不凭目录名批量覆盖 |
|
||||
| 全局库字典与各项目自由扩展混用 | A项目新增词条改变B项目或旧历史读取 | 项目作用域与版本权威、旧字典兼容/回放必须明确 | 源码缺口已确认 |
|
||||
| 结构/正文确认同名不同版或并发修改覆盖 | 丢资料、半次操作、审签与影响错位 | 预期版本、整批事务、幂等、失败恢复及重放;基线正文仍受审签 | 机制可复用;新操作未实现 |
|
||||
| 所有成员上下文走audit接口,或共享结构顺带读他人私域 | 普通工作被多余审计权限阻塞,或发生越权 | 工作读面/审计/正文/原件分别服务端授权;历史及恢复按当前权限 | 需补新读合同,不能放宽audit/read为捷径 |
|
||||
| 自然语言审计只是前端翻译或模型自由重述 | 人物、内容、影响不完整或凭空产生结论 | 以持久业务事实产生确定摘要/结构化详情,未知显式未记录,候选与生效分开 | 当前DTO字段不足 |
|
||||
| 已有项目升级直接重生成或自动替换模板 | 历史ID/内容/审批依据丢失 | 预览+显式确认,保全原版本、原件及取代关系;不能线上自动迁移 | 本轮迁移NOT_RUN |
|
||||
| 在途PR/main或tag前进,使证据/组合失效 | 新候选错用旧CI,或RDM消费未发布基座 | 当前HEAD、来源和pins重验;tag双钥匙,实施/部署授权分别记录 | 阶段5–9门禁,不在本轮执行 |
|
||||
|
||||
## 8. E1受控试验提案(本次只写计划,未执行)
|
||||
|
||||
目的:回答“能否完整解析/转换本轮14份DOC的内容结构与关键格式,从而为44份新模板建立可靠内容契约”。此试验不实现产品功能,也不批准业务代码、共享现场写入、数据迁移或部署。
|
||||
|
||||
- **对象**:来源台账中固定hash的14份DOC;30份DOCX只作结构/样式对照,原件只读。先用用户需求、软件测试用例、采购技术说明三种复杂度不同的样本判断方法,再覆盖全部14份;样本成功不计整体通过。
|
||||
- **环境**:独立临时目录和独立转换器profile,原件只读挂载,输出留在源码外,禁止运行文档宏和访问外部文档链接;转换进程不获得仓库/用户secret/运行库的写入或读取权限。试验所需软件优先使用已有可用能力;如确需获取,限可核验来源的隔离临时运行环境,不全局安装或修改服务。未能建立此环境则停止并报告缺项。
|
||||
- **候选方法及依据**:优先验证LibreOffice headless导入DOC、导出DOCX,然后用OOXML提取章节/表格/样式/图片/页眉页脚/编号。其官方文档列出无界面转换、独立profile以及Word97–2003与DOCX过滤器;这是方法可行性依据,不证明本轮模板保真。[命令参数](https://help.libreoffice.org/latest/en-US/text/shared/guide/start_parameters.html)、[格式过滤器](https://help.libreoffice.org/latest/en-US/text/shared/guide/convertfilters.html)。当前PATH未找到LibreOffice,不能预写工具已就绪或依赖版本。
|
||||
- **判据**:全部14份都有原件hash→转换器版本/参数→产物hash→内容/表格/合并关系/示例与固定文本/图片/关键格式核对结果;关键要求、表格列/合并和示例语义零静默丢失;差异有可查看依据及处理结论。输出非空、文字数量或转换器exit0不能作为通过。原件前后hash相同。最终输出保真要求若有调整须人工评审,不能以试验失败自行降低。
|
||||
- **限制**:转换与自动核对最多60分钟;每份转换最多120秒;不调用付费模型、不上传材料到外部服务;遇宏/密码、损坏、不可定位字段或环境无法隔离即停止相应路径,保留证据。剩余人工格式确认的时间另行列明,不假装60分钟包含全部人工审批。
|
||||
- **副作用与成果**:只创建可识别的临时转换产物、比较报告和SELF收据;原始模板及现有项目零修改。产物留在当前源码外记录目录供审核,未确认前不作为正式发布模板;回收临时环境先核对唯一成果已保存。
|
||||
|
||||
仅E1被明确批准后才运行;其结果用于阶段3–4的模板边界和方案设计,不代替正式产品验收。若用户选择先进入阶段3需求表,DOC完整性保持待核实,不能宣称已具备或在关键待核实项未处理时放行正式实施。
|
||||
|
||||
## 9. 当前出口与下一动作
|
||||
|
||||
本阶段已形成可评审的取舍与依赖记录:保留28项完整范围;推荐复用现有领域/平台而补齐缺口;不重写项目/权限体系;旧DOC路径通过E1验证;现有结构、数据与三权版本保真;在途导出/工作发现接口协调复用;必要通用能力按公开扩展申请推进。
|
||||
|
||||
**等待用户评审阶段2评估和E1范围**。推荐确认取舍并批准源码外E1试验,试验完成后形成阶段3需求表;也可以确认评估、先整理需求表而保留E1待批准。两个选择都保持manual授权和共享现场由原负责人收尾,不重新询问DYN-01或阶段1范围。
|
||||
|
||||
阶段4方案、阶段5实施/测试计划、阶段6–7产物及验收仍未评审;代码Review/PR合入按既有阶段8–9门禁,清理另审。软件测试、模型对照、浏览器、CI、转换试验、生产数据操作和部署本轮全部NOT_RUN。文档检查与源码/API核对仅SELF。
|
||||
|
||||
本记录暂存源码外。原负责人处理共享现场后,本任务经新的唯一precheck收据取得READY,再建立登记worktree并把阶段1原对象、用户批准、阶段2本记录及完整原始收据导入Documents/任务卡/PROJECT入口;导入不回填不存在的通过结论。
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
# 阶段2受影响需求评估:工作信息拆解与主动风险澄清 r1
|
||||
|
||||
记录日期:2026-10-14(Asia/Shanghai)。状态:**待人工评审**。本稿对应用户本轮新增要求:用户输入、智能体回复、检索结果和可见分析产物都经过拆分分析;有价值的内容进入两树一网;执行任务时主动识别矛盾与风险,及时通过对话或卡片提示、澄清。本稿只评估受影响范围和依赖,不修改此前已批准的阶段1–5原件,也不授权新增公开接口或业务实现。
|
||||
|
||||
## 已批准目标与本次增量
|
||||
|
||||
原始目标仍为44模板、项目差异结构、同项目成员的实际工作依据和完整可读审计。已确认的28项需求保持原ID和原结论;W2/W4a读取隔离和时间合同、Backend X1/X2隔离候选可按已批准范围继续。本次需要把“信息进入两树一网”扩充为**普通项目工作中的可观察来源处理流程**,并把冲突/风险检测扩充为**受影响动作之前的主动澄清**,供阶段3新增可判定条件。
|
||||
|
||||
原始[《08 核心数据模型》](/home/weichen/projects/Agent-System-Dev/.tmp/智能体系统/further-objective/08-核心数据模型-两树一网.md)(本地SHA256 `604cd8a9d0dd505af4c6c480d4ad3ae60dfd86c581d8261919b2daf8e5dc5618`)§二、§六已写“对话/上传/检索→相关性把关→拆解切片→标签→挂载”和切片互撞、切片与基线冲突。原[阶段3需求r1](rdm-two-trees-stage3-requirements-r1.md) TT-N01/G03/C02写了知识来源、问题和矛盾结论,但没有逐类验收**用户发言、助手回复、搜索、可见分析**的普通工作入口、处理回执与权限,也没有规定在可能错误的要求被用于生成/确认前的即时澄清。原[阶段4方案r1](rdm-two-trees-stage4-design-r1.md)§7保留私人对话边界,§5有结构提案HITL,未给上述所有来源提供受信观察入口。Backend最新已核主干 `607c38d7` 的公开面为`2.12.0-experimental`,还没有X1/X2;已批准X1/X2本地组合探针 `d9b00c2` 的公开面为`2.19.0-experimental`,含项目上下文提供方及受信审计链接,两者均未列普通项目消息与逐项检索的通用观察注册口。RDM的`Ingest`面向显式资料入库,不能由其存在推断普通聊天已自动拆解。
|
||||
|
||||
上述公开扩展面的限域SELF检查对固定Backend主干 `607c38d7e64298bb2db31ac9cdf81d341a244884` 与组合探针 `d9b00c23c818bfc4a8d8233c845266fabd863137` 的`pkg/extension/{surface.txt,extension.go,host.go}`执行。探针surface有124个导出条目及`ProjectContextRegistry`,无普通消息观察导出名/Registry或Host声明;主干无该注册面及观察导出。命令、对象和完整输出由Dev任务卡的工具收据 `ad404f00ba0f4cff2b02e07afc00ab4073ed1d91c1745caf826e1ada7209eec6`保存。独立限域源码审阅还指出普通用户消息在Backend持久化后才启动run、助手最终消息在run收口时持久化、检索直接返回命中而工具事件多为摘要;流式消息事件不能证明用户浏览器已呈现。这些是当前源码上的入口与时序差异,不是尚不存在的产品链路已完成的证据。
|
||||
|
||||
用户提供的测试句“要求效率和成本都低于人工”应触发**语义歧义/潜在风险**提示:若“效率”指单位时间产出,更低意味着更慢;用户也可能想表达“耗时和成本更低”或有意接受较低效率。系统不能擅自把原文改成“效率更高”,也不能未经澄清就固定为已批准需求。反例澄清可以问:“这里的效率是指单位时间产出,还是完成时间?您希望效率高于人工、成本低于人工;还是完成时间和成本都低于人工?”原句与答复需分别保留来源、人物、时间和版本。
|
||||
|
||||
## 建议新增的两个需求ID
|
||||
|
||||
| ID | 价值和行为 | 可判定范围 | 优先级 |
|
||||
|---|---|---|---|
|
||||
| TT-N03:工作来源拆解与候选入网 | 普通项目工作中的用户发言、已呈现的助手回复、实际检索/工具来源以及可见分析结果均产生受信处理状态;识别目标、要求、事实、依据、假设、建议、问题/风险等有价值的最小内容,保留原句/资源定位与版本,纳入项目作用域的候选笔记及来源网。审核或发布后才成为其他成员可用依据;无项目或私人来源保持原权限域。 | 两项目两成员实际输入、回复、搜索与分析各正反例;原文拆成多项/重复/撤权/恢复,逐来源看见处理成功、待确认、忽略理由或失败;仅已授权且已确认的条目进入同成员或跨成员下一次模型上下文。助手输出和搜索命中不能自动变成事实。 | P0 |
|
||||
| TT-R01:即时矛盾与风险澄清 | 在要求、结论或结构可能被采纳前,比较新片段自身、项目当前有效依据、同主题候选和适用要求;发现方向/单位/数值/条件不明、跨来源冲突、缺依据或影响受控状态时,展示具体原文、冲突对象、影响和可答复问题。高影响项在相关写入/生成/确认前触发HITL;可延期项进入持久工作卡且有状态。 | 示例句在同轮、相关业务动作前提示;纠正、确认原意、暂缓和误报反馈各自留来源及后续处理;没有真实用户澄清/确认时不写正式需求、不改变已批准正文或有效结构。撤权与项目切换不泄露风险卡正文,失败/重试不重复卡或事件。 | P0 |
|
||||
|
||||
“每条来源经过处理”不等于把所有原始会话或模型思考全文复制进共享项目树。处理完成须有可信状态及理由;只把需要的、可定位且符合权限/确认状态的内容作为候选或正式依据。可见分析结果是已输出/保存的结论、推导摘要或任务产物;不可获取的模型内部推理不冒充项目证据。助手回复的可核来源以**最终提交的消息ID/版本**为准;当前流式增量不等于已提交回复,是否真的在某一浏览器显示需另外的客户端确认,不能自行推断。检索/工具只留截断摘要时不得声称逐项原文已经被拆解;须取得受信命中/资源引用及实际用于生成的片段,缺失项列入处理状态。页面的提示与来源摘要应使用现有中栏对话和右栏工作卡,不另建管理界面。原始[《07 对话完备性方案》](/home/weichen/projects/Agent-System-Dev/.tmp/智能体系统/further-objective/07-对话完备性评估与交互调整方案.md)(SHA256 `520421ec7a4ff56edf6666043e53aa97436b48970545d0a22ea02be7713786b2`)已要求高风险动作通过同一张内联/右栏卡完成最终确认;普通澄清可先以对话提问,高风险应用仍消费现有人审通道。
|
||||
|
||||
## 可行性、重叠和职责
|
||||
|
||||
| 位置 | 当前可复用事实 | 缺口/评估结论 |
|
||||
|---|---|---|
|
||||
| Backend会话与运行 | 会话消息有持久`AppendMessage`;运行侧可产生消息、工具结果;X1候选可信项目身份/运行步骤、上下文manifest,X2候选已提交业务审计链接 | 普通工作未向RDM提供完整且受信的各类来源事件;仅靠提示词或RDM显式上传工具不能覆盖用户/助手/检索/分析四路。预计需独立的、可选公开观察接口或等价受信入口;具体字段/时序待阶段4评审,不能直接读取Backend `internal/`。 |
|
||||
| RDM领域 | 笔记唯一切片、多挂载、登记项、候选追溯边及项目事务;已批准的W2/W4a保留项目隔离 | 需逐项来源标识/引用、原片段位置、处理状态、相似合并/取代、权限/发布和恢复;助手推断与外部网页须保留“未核实”身份,不能直接喂给受控文档或其他成员。 |
|
||||
| 工作与界面 | W6/X1将提供默认授权上下文;W4b会加入结构确认;现有中栏对话/右栏任务卡与HITL命令面可复用 | 需在当前轮的相关动作前检测并提示,用户离开或后台发现时有同一持久卡;不能依靠刷新页面才发现,亦不能让模型自报“用户已确认”。W7/W10/W12需增补消费与真实浏览器/模型证据。 |
|
||||
| 审计与权限 | W8/W9已有业务事件、失败尝试、当前授权投影的计划;阶段4禁止原始私人会话跨成员共享 | 新来源的观察/候选/澄清/确认/忽略/撤销需要操作证据及字段级披露;项目ID只定位,实际成员、资源、正文与文档职责由服务端重验。未经发布的私人片段及卡片保持私域。 |
|
||||
|
||||
新增公开入口跨Backend/RDM并影响数据、权限与运行顺序,属于本项目`policy/delivery.md`中需要受影响设计重审的事项。推荐**受信观察→按项目/来源授权拆解候选→冲突检查→澄清/确认→版本化有效事实及追溯**;普通工作仍先回应用户,遇到影响要求/结构/受控文档的高风险歧义时暂停相关业务动作并即时提问。仅保留提示词的路线不能保证逐来源处理、幂等或后台恢复;把所有消息直接发布为共享知识则会混淆未经核实的模型输出与私人内容。推荐路线复用已有两树一网与HITL,不重建第二套知识库或审批中心。
|
||||
|
||||
## 成本与风险处理
|
||||
|
||||
- **处理量/时延**:每个消息或检索结果都需有处理状态;原文可用来源ID/版本/hash和最小引用定位,语义切片异步细化。会影响本轮要求/生成/确认的明显风险须在该动作前识别或明确阻塞;模型判断超时/不确定时记“待分析/待澄清”,不能默默采纳。指标、队列上限与降级在阶段4/5固定,并在本机及产品链路实测,不据当前源码捏造吞吐结论。
|
||||
- **误报与歧义**:风险发现是候选判断,不是项目事实。一次澄清保存人对当前版本的解释;模型不得代选答案。用户确认原意、指出误报或提供新资料都可关闭/修订卡并留下原判定/变更依据,避免相同版本反复打断。
|
||||
- **权限与保留**:原会话和工具结果可能包含个人或无权正文;新管道只通过受信主体/资源/项目绑定处理,跨成员共享须遵守现有发布与职责规则。撤权、源删除/替换、未完成工作恢复后,候选与模型上下文按当前权限重新评价;旧资料不靠不可验证的回填宣称来源完整。
|
||||
- **费用与依赖**:复用已批准的真实模型最多48次、300,000 tokens、人民币150元先到即停的总边界;新例应占用既有前后对照任务集,不扩容预算。Backend X1/X2本地候选不能代替新入口或已发布tag;公开契约变化需阶段4设计、人审和组件测试,真实服务/DB迁移仍待各自门禁。
|
||||
|
||||
本阶段建议**纳入 TT-N03、TT-R01**,并在阶段3明确验收/权限/例外,阶段4完成受信接口、记录状态及HITL设计,阶段5把W7/W8/W10/W12与新增入口顺序、预算和测试固化。当前28项验收不减少,建议新增后为30项。既有W2/W4a/时间合同及不受影响的W3递归结构可依已批准范围继续。本稿的评审只决定需求取舍与风险处理,不提前批准公开接口、产品实现或运行迁移。
|
||||
+293
@@ -0,0 +1,293 @@
|
||||
# 两树一网阶段3:需求与验收条件 r1
|
||||
|
||||
记录时间:2026-10-14T10:22:37.191427+08:00;需求负责人/评审人:用户;编写:Codex。**待阶段3人工评审**。阶段1和阶段2取舍已批准;E1按用户“批准”执行完毕,结果待评审。本文形成可判定需求,不批准API、迁移、具体实现或正式测试计划。
|
||||
|
||||
## 本次评审范围
|
||||
|
||||
保留已确认的28项需求和44份最新Word模板全部范围,不以固定层数、几个模板、手动知识查询或操作码翻译替代目标。动态变更保持DYN-01:提出变更,确认后应用。需求主表在[Dev任务卡](../../../../../.task/feature-rdm-two-trees-latest-templates.md),每行引用本文对应ID的详细验收条件;当前状态以[主记录](../../proposals/2026-10-14-rdm-two-trees-latest-templates.md)为准。
|
||||
|
||||
处理结论均提议“纳入本增量”,尚待本阶段确认。P0是数据/权限/版本/可用依据及验收的前置项;P1是依赖P0形成完整业务价值的必做项,不表示可取消或本目标之外。具体分批、工时及先后顺序由阶段5计划决定。
|
||||
|
||||
输入沿用[阶段1原对象](rdm-two-trees-requirements-r1.md)、其附录A的44文件绑定候选、[阶段2评估](rdm-two-trees-stage2-evaluation-r1.md)及已保存源码快照。32个既有类型与12个细分/新增用途为候选:全部用途需覆盖,但12个是否新增独立类型、子类型或其他表达留阶段4决定。四份字节相同的阶段评审模板保持用途独立;其余无新模板的既有类型继续兼容。
|
||||
|
||||
## E1结果及本阶段处理
|
||||
|
||||
[E1结果报告](/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/e1-20261014-091421/REPORT-r1.md)及全部原始产物留源码外。14份均转换成功,148个表格/1127行的同引擎往返比较一致;原件hash未变。但有分页7→6、图形/文本顺序变化、批注/修订混入和预览中文缺字;另有49字符片段仍不能定位。**保真判据未通过**,不能发布为可无损替换的标准模板。
|
||||
|
||||
推荐本阶段确认的是“原件保全、转换稿仅候选、未核对不发布、44份内容/格式要求不降级”这些需求约束。阶段4须处理有效内容与图形/修订解析路线、目标字体/渲染基线和逐模板核对方法;正式实现计划放行前关闭关键解析未知或明确经人工批准的替代路线。此次批准不自动授权第二轮转换试验、全局安装软件或替换模板原件。
|
||||
|
||||
## 逐项验收条件
|
||||
|
||||
所有条目当前的产品验收结果均为NOT_RUN。E1和源码检查仅为可行性/差距证据,不代替下列验收。
|
||||
|
||||
<a id="tt-t01"></a>
|
||||
|
||||
### TT-T01 44份模板登记与来源保全
|
||||
|
||||
- 优先级:P0;符合度:需调整后符合;E1保真待解决;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:原44文件清单;E1。
|
||||
- 验收条件:44份均绑定稳定资产ID、原文件名/路径、真实格式、hash、阶段用途、解析器版本及覆盖/缺项;同字节的四份阶段评审模板保留独立用途。30 DOCX、14 DOC逐份可查,解析失败不得冒充已发布模板;已有69类型中无本次标准资产者保留并显示缺项。
|
||||
- 验证方法:逐文件清单与原件hash核对;错误格式、缺字、损坏及解析失败拒绝发布;检查原件可回取。
|
||||
|
||||
<a id="tt-t02"></a>
|
||||
|
||||
### TT-T02 内容要求、表格与示例完整
|
||||
|
||||
- 优先级:P0;符合度:需调整后符合;E1保真待解决;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-T01;E1未决项。
|
||||
- 验收条件:逐模板表达多级章节、固定文本、填写说明、字段类型/单位/条件、表格列与合并、重复块、附件和图形锚点;示例/批注/历史修订与有效要求分开。用户需求保留12组,UN/SR/DI及测试字段完整;不得仅生成标题或把蓝字示例填成项目事实。结构及可用格式通过原件对照后才可发布。
|
||||
- 验证方法:44份逐项对照表;至少包含嵌套章节、合并表格、重复用例、图形、批注/修订样本;专业语义人工核对,格式在中文可读目标环境验证。
|
||||
|
||||
<a id="tt-t03"></a>
|
||||
|
||||
### TT-T03 项目适用性与裁剪
|
||||
|
||||
- 优先级:P1;符合度:需调整后符合;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-T01/T02;项目范围。
|
||||
- 验收条件:每个内容要求具有必需/可选/条件适用规则及依据;软件、硬件、无菌等项目可形成不同结构。条件未知显示待确认;不适用保留理由、责任人和批准记录,不删除要求以抬高完成率;成员可补充项目特有要求。
|
||||
- 验证方法:至少两种差异项目;未知条件、条件变更、不适用拒绝/确认场景;核对必需项及进度分母。
|
||||
|
||||
<a id="tt-t04"></a>
|
||||
|
||||
### TT-T04 模板、实例与文档版本绑定
|
||||
|
||||
- 优先级:P0;符合度:需调整后符合;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-T01/T02;TT-D02/D04。
|
||||
- 验收条件:模板定义、项目实例、文档历史版分别有身份与版本,保留templateId/version/hash;升级展示新增/删除/语义和适用性差异,确认后应用。原实例/原历史仍回指旧模板;升级不自动覆盖正文或批准受控版。
|
||||
- 验证方法:旧实例+新模板、拒绝升级、确认升级、并发升级及历史回查;确认链可追溯。
|
||||
|
||||
<a id="tt-n01"></a>
|
||||
|
||||
### TT-N01 项目知识及问题组织
|
||||
|
||||
- 优先级:P1;符合度:需调整后符合;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:来源/确认/发布合同;TT-G03。
|
||||
- 验收条件:笔记树覆盖目标、资料切片、会议结论、需求约束、方案、风险、验证及转换确认依据;知识唯一ID可多挂载。保存来源/版本/适用范围/状态,结论取代有链;问题、冲突、假设及缺项可关联节点,不冒充已确认事实。
|
||||
- 验证方法:同知识多挂载、撤挂、软删除、结论取代、冲突未决和恢复;原件页/段/表或发言锚点可定位。
|
||||
|
||||
<a id="tt-n02"></a>
|
||||
|
||||
### TT-N02 项目独立字典与扩展
|
||||
|
||||
- 优先级:P0;符合度:需调整后符合;当前共用Dict;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:现有字典兼容;TT-D03。
|
||||
- 验收条件:项目可以增加/调整阶段、主题、工作事项、子系统、节点类型及有语义的扩展字段;两树一网使用一致的项目版本。项目A更名或扩展不改变B与全局种子;旧对象与标签引用可回查,废止保留历史。
|
||||
- 验证方法:两项目同名异义字段、项目扩展和更名、重启加载、旧数据回放;未知字段与非法类型验证。
|
||||
|
||||
<a id="tt-d01"></a>
|
||||
|
||||
### TT-D01 递归文档节点与稳定身份
|
||||
|
||||
- 优先级:P0;符合度:需调整后符合;现有层级不足;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-T02;TT-N02。
|
||||
- 验收条件:支持阶段、文档、多级章节、段落/字段/表格/重复项/附件的递归组合;稳定ID与父节点、排序分离。重名、改名、移动不改变身份和引用;防循环/跨项目父子错误。支持未开始、素材不足、草稿、待确认、评审中、已批准、依据变更待复核、不适用等可解释进度。
|
||||
- 验证方法:至少五层混合节点、重名章节、重复表格行组、附件及移动;循环拒绝与历史引用保持,进度按有效要求统计。
|
||||
|
||||
<a id="tt-d02"></a>
|
||||
|
||||
### TT-D02 动态结构提案与确认
|
||||
|
||||
- 优先级:P0;符合度:需调整后符合;DYN-01已确认;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-D01/D03/D04;可信证据。
|
||||
- 验收条件:新资料、需求变化、阶段推进、缺项、模板升级或成员主动整理可产生提案,列出具体差异、理由、来源、范围、直接/间接影响与风险。确认前有效结构不变;可接受、修改后接受、拒绝;保存提案与实际确认版本,重启后继续。
|
||||
- 验证方法:各触发源覆盖,接受/改后接受/拒绝/取消及重启;普通成员与无权限主体;界面和工具均不得绕过确认。
|
||||
|
||||
<a id="tt-d03"></a>
|
||||
|
||||
### TT-D03 原子、并发、幂等与恢复
|
||||
|
||||
- 优先级:P0;符合度:需调整后符合;复用现有事务/重放;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:当前结构与权限版本;事件合同。
|
||||
- 验收条件:确认时校验当前权限、项目、预期结构/内容/模板版本及受控状态;旧版本冲突返回可读差异。结构变更及成功事件整批提交或均不生效;同幂等键重试不重复,异参同键拒绝;故障恢复不产生半棵树、孤立边或重复业务效果。
|
||||
- 验证方法:两人并发确认、确认时撤权、事务各提交边界故障、超时后重试、进程重启重放;比较业务结构和审计水位。
|
||||
|
||||
<a id="tt-d04"></a>
|
||||
|
||||
### TT-D04 文档职责、版本与审签
|
||||
|
||||
- 优先级:P0;符合度:符合现行三权,须补结构联动;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:现有文档状态机/IAM;TT-D02。
|
||||
- 验收条件:结构确认权限与编制/审核/批准职责分开;实质变更已批准正文或要求时形成新候选并遵守现行重审。保留原批准版、职责和签署证据;普通结构确认不能自动批准内容,项目管理权不自动取得文档职责。
|
||||
- 验证方法:草稿/评审中/已批准三状态×各职责;正文和要求变更;HTTP、工具、后台恢复同规则。
|
||||
|
||||
<a id="tt-g01"></a>
|
||||
|
||||
### TT-G01 来源网与受控证据链
|
||||
|
||||
- 优先级:P1;符合度:需调整后符合;复用两类现有图;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-T02/D01;受控类型映射。
|
||||
- 验收条件:覆盖资料→结论、模板→章节、UN→SR→DI→设计→验证、风险→控制→需求/实现/验证、软件需求→架构/详设→三级测试→结果及输出→转换/确认。一般来源边和受控边语义分明,候选/已确认/缺项可辨;不得用日志数量代替覆盖率。
|
||||
- 验证方法:每条链至少一条完整及缺边样本;候选不得满足正式覆盖,回查具体端点及版本。
|
||||
|
||||
<a id="tt-g02"></a>
|
||||
|
||||
### TT-G02 升版影响与复核
|
||||
|
||||
- 优先级:P0;符合度:需调整后符合;端点已有版本语义;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-G01/D04;分析水位。
|
||||
- 验收条件:受控边绑定确切端点版本;升版不把旧验证自动视为新版有效。显示直接/间接影响、待复核与缺口、分析范围/截止;当时记录影响和当前重算影响分别标明。分析被截断/失败需可见,不声称影响为空。
|
||||
- 验证方法:端点升版、关系失效、循环关联、大图预算截断、历史水位;原影响快照不被当前分析覆盖。
|
||||
|
||||
<a id="tt-g03"></a>
|
||||
|
||||
### TT-G03 来源主体和可定位证据
|
||||
|
||||
- 优先级:P1;符合度:需调整后符合;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:可信来源字段;权限读面。
|
||||
- 验收条件:区分人工、规则、模型与系统来源;记录上传/产生/确认者及原件/模板/知识/章节/表格/发言锚点。网络来源保留URL、查询、获取时间和实际引用;缺少来源显式标明,不编造;引用定位与版本一致。
|
||||
- 验证方法:各来源类型、失效外链、删改对象、缺失页码和权限撤销;正文链接按当前权限检查。
|
||||
|
||||
<a id="tt-c01"></a>
|
||||
|
||||
### TT-C01 普通工作自动取得项目依据
|
||||
|
||||
- 优先级:P0;符合度:需调整后符合;公开入口待设计;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:RDM领域提供方;Backend通用上下文接缝。
|
||||
- 验收条件:同项目成员在普通任务/会话无需@knowledge,即取得当前有权使用的项目范围/阶段、任务要求、相关已确认结论、文档和来源;不能仅注入目录名或个人Memory。实际模型输入和产出引用能证明使用项目依据;无相关依据明确说明。
|
||||
- 验证方法:两项目两成员各自普通任务,包含有/无已发布依据;检查实际输入manifest和输出锚点,配真实模型前后对照。
|
||||
|
||||
<a id="tt-c02"></a>
|
||||
|
||||
### TT-C02 相关性、预算与渐进读取
|
||||
|
||||
- 优先级:P1;符合度:需调整后符合;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-C01/C03;预算合同。
|
||||
- 验收条件:先提供任务相关摘要及稳定引用,再按需读取细节;不每次全量读取所有文档。说明召回范围、水位、排序/预算、裁剪/遗漏和未决冲突;模板作为约束,来源中的指令仅为数据。无关资料不能挤掉必要任务要求。
|
||||
- 验证方法:长文档/多来源超预算、矛盾结论、检索无结果及不可信来源指令;记录实际裁剪原因与按需读取。
|
||||
|
||||
<a id="tt-c03"></a>
|
||||
|
||||
### TT-C03 共享、私域与当前权限
|
||||
|
||||
- 优先级:P0;符合度:符合现行IAM边界,须补全链路;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:可信成员/资源/职责权限;TT-C01。
|
||||
- 验收条件:只跨成员共享已确认/发布且当前可用的项目知识;个人对话、草稿、原件、受控正文各自鉴权。同项目身份不等于全读权;跨项目、任务切换、撤权后新输入不得夹带无权正文,后台恢复和工具也执行相同校验。
|
||||
- 验证方法:两项目、两个普通成员及不同文档职责;恶意projectId/resourceId、共享撤销、成员移除、缓存/恢复/历史对话带旧引用,检查模型实际输入。
|
||||
|
||||
<a id="tt-c04"></a>
|
||||
|
||||
### TT-C04 实际上下文清单与刷新
|
||||
|
||||
- 优先级:P0;符合度:需调整后符合;关联在途工作来源合同;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-C01/C03;任务/run与水位。
|
||||
- 验收条件:记录实际提供给模型的对象/版本/hash、权限及共享范围、检索范围、水位、摘要/裁剪和任务关联。新任务/项目或任务切换/相关有效变更/后台恢复时刷新;执行前重验已撤权或已失效依据,不以计划读取列表代替实际输入清单。
|
||||
- 验证方法:注入后升版/撤权、恢复与切换、读取失败/重试;对照实际模型输入、输出引用和可读审计。
|
||||
|
||||
<a id="tt-a01"></a>
|
||||
|
||||
### TT-A01 业务操作覆盖完整
|
||||
|
||||
- 优先级:P1;符合度:需调整后符合;覆盖矩阵固定;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:阶段1§7.1;宿主审计扩展。
|
||||
- 验收条件:对模板/结构、资料/知识、文档、需求/风险/测试/关系、成员/权限、智能体/后台工作六类操作建立逐动作覆盖矩阵;每格有事件/尝试证据或说明不适用。授权查看/下载/导出和拒绝访问按策略记录;不把UI悬停等噪声当完整性。
|
||||
- 验证方法:逐动作驱动并定位对应记录;宿主未覆盖面必须显式列出,不能用RDM事件总量冒充全覆盖。
|
||||
|
||||
<a id="tt-a02"></a>
|
||||
|
||||
### TT-A02 时间人物内容和影响事实完整
|
||||
|
||||
- 优先级:P0;符合度:需调整后符合;现有DTO信息不足;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-A01/G02/G03;事件schema。
|
||||
- 验收条件:按阶段1§7.2记录适用的开始/结束/生效/确认时间及时区精度,稳定身份和当时名称/职责,发起/执行/确认链,项目/任务/run/operation/batch因果关系,对象标题路径及前后版本、差异/理由/依据/原件hash、结果错误及实际影响,schema和水位;缺项明确。凭据和未授权原文不得因完整审计被泄漏。
|
||||
- 验证方法:更名/离职账号、人工+系统执行、多对象操作、敏感字段、未知历史值;对照不可变前后版与实际生效结果。
|
||||
|
||||
<a id="tt-a03"></a>
|
||||
|
||||
### TT-A03 成功、失败、拒绝和取消语义
|
||||
|
||||
- 优先级:P0;符合度:需调整后符合;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-D03;尝试与业务事件分离。
|
||||
- 验收条件:成功事件与业务提交一致;失败/拒绝/取消保留尝试、错误类别、发生时间、实际副作用及恢复状态,不成为已生效结构事件。等待确认与部分完成可辨;重试关联同一业务操作且不重复计算效果。
|
||||
- 验证方法:无权、并发冲突、提交前/后断开、跨系统部分失败、用户取消和重试;业务事实与展示状态一致。
|
||||
|
||||
<a id="tt-a04"></a>
|
||||
|
||||
### TT-A04 宿主关联与旧历史诚实出口
|
||||
|
||||
- 优先级:P0;符合度:需调整后符合;公开宿主读面待设计;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:Backend通用审计接缝;RDM投影。
|
||||
- 验收条件:宿主命令/模型/后台与RDM操作按真实可信项目/主体/资源和run关联;不能用owner全量审计冒充项目审计。跨宿主投递可恢复且状态明确;旧记录缺少姓名/内容/影响时显示当时未记录,不能用当前值或模型补造。
|
||||
- 验证方法:投递失败/恢复/重复,跨项目owner,旧事件schema及无字段样本;校验真实关联和缺项展示。
|
||||
|
||||
<a id="tt-u01"></a>
|
||||
|
||||
### TT-U01 可读摘要与结构化详情
|
||||
|
||||
- 优先级:P1;符合度:符合DESIGN方向;DTO需调整;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-A02/A03;现有审计入口。
|
||||
- 验收条件:默认按一次业务操作显示中文动作、可辨人物、时间、对象标题/路径、结果和影响摘要;展开是前后差异、理由、确认链、证据与影响清单。原始JSON、base64、内部op码不可充当业务记录;未知动作有诚实可读兜底,不让模型编造解释。
|
||||
- 验证方法:正常/失败/未知/旧数据四类记录的真实页面;用户能回答谁何时为何改了什么影响谁,检查未下发受限payload。
|
||||
|
||||
<a id="tt-u02"></a>
|
||||
|
||||
### TT-U02 可读对象与证据跳转
|
||||
|
||||
- 优先级:P1;符合度:需调整后符合;沿用唯一预览;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-G03/U04;标题/路径读契约。
|
||||
- 验收条件:来源、关系含义、直接/间接影响和历史对象用标题/路径/版本可识别;有权时进入现有对象详情及唯一文件预览,无权/已不存在时给明确状态。技术ID可辅助定位但不能取代业务名称。
|
||||
- 验证方法:文件页/章节/表格锚点、改名/移动/废止对象、权限变化;禁止重复预览界面和失效空白跳转。
|
||||
|
||||
<a id="tt-u03"></a>
|
||||
|
||||
### TT-U03 筛选、归组、分页与历史
|
||||
|
||||
- 优先级:P1;符合度:需调整后符合;复用导出水位在途成果;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-A02/A04;事件seq与读水位。
|
||||
- 验收条件:按时间、人物、业务动作、对象、结果和任务筛选;同一操作多事件/重试可完整展开,跨页不拆失或重复。历史按可读时间/正式版本选择并保留完整批次截止;项目/用户/筛选/历史切换后丢弃迟到响应,异步状态仅一个所有者。
|
||||
- 验证方法:跨页大批次、迟到响应、空列表/错误/加载、筛选往返、历史/当前切换及权限变更;导出沿用同一范围与水位。
|
||||
|
||||
<a id="tt-u04"></a>
|
||||
|
||||
### TT-U04 审计权与正文披露分离
|
||||
|
||||
- 优先级:P0;符合度:符合现行audit.read/正文权规则;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:当前IAM;服务端字段投影。
|
||||
- 验收条件:审计入口需要audit.read及相应资源许可;结构元信息、正文差异、历史原件、导出分别按当前权限制定披露。管理员/创建者或audit.read不得自动得到文档正文;限制在服务端完成,客户端隐藏不能代替。
|
||||
- 验证方法:可审计无正文、可正文无审计、历史撤权、导出/搜索/预览/模型同规则;直接检查网络响应无泄漏。
|
||||
|
||||
<a id="tt-v01"></a>
|
||||
|
||||
### TT-V01 需求到固定对象证据映射
|
||||
|
||||
- 优先级:P0;符合度:符合交付规则;正式验证未执行;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:全部需求;精确组件与配置。
|
||||
- 验收条件:每个纳入需求对应方案/工作项、正常/异常/边界/回归检查及当前对象结果;44模板有逐项对照,结构并发/原子/重放/旧数据/撤权有真实故障路径。明确SHA/pins/配置及SELF、REPLAY、GATE;缺项NOT_RUN不能以文档陈述补齐。
|
||||
- 验证方法:独立最小重放及故障注入;收据通过evidence记录;需求矩阵不得用非当前候选旧绿灯放行。
|
||||
|
||||
<a id="tt-v02"></a>
|
||||
|
||||
### TT-V02 真实模型行为前后对照
|
||||
|
||||
- 优先级:P0;符合度:符合行为面交付规则;预算阶段5确认;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-C/D02;真实模型环境。
|
||||
- 验收条件:用相同任务集比较改前/改后实际项目依据使用、召回、错误引用、失效处理及结构提案确认。两项目两成员、普通工作无@knowledge、权限拒绝/冲突/恢复均有样本;记录模型/配置/输入manifest/输出和判定,不以mock替代。
|
||||
- 验证方法:阶段5确定可复核样本数、模型及费用上限;不能调用时标NOT_RUN并保留验收缺项,不声称行为改善已验证。
|
||||
|
||||
<a id="tt-v03"></a>
|
||||
|
||||
### TT-V03 真实界面与当前HEAD组合验收
|
||||
|
||||
- 优先级:P0;符合度:符合交付规则;正式验证未执行;处理建议:纳入本增量(待确认)。
|
||||
- 依赖:TT-U;精确pins;阶段7环境。
|
||||
- 验收条件:真实浏览器完成两项目两成员流程:初始化/扩展、提案确认/拒绝、普通任务依据、升版影响、完整可读审计及权限回归;使用现有三栏/四入口/唯一预览与UI令牌、MotionKit、Collapsible。精确候选的相关测试、make test/build和当前HEAD CI齐备。
|
||||
- 验证方法:浏览器可见结果及网络权限检查;设计守护、精确组件组合测试;CI运行链接/执行身份/SHA核验,部署另按授权。
|
||||
|
||||
## 设计前必须保留的决策与实施停止条件
|
||||
|
||||
| 事项 | 当前依据/推荐处理 | 责任与关闭节点 |
|
||||
|---|---|---|
|
||||
| DOC及最终格式保真 | E1部分可行、验收未通过;原件不替换、候选不发布;需可读字体环境及逐项内容核对,未定位差异保留 | Codex准备路线/必要试验范围,用户在阶段4确认;关键路线未明确不得进入正式实施 |
|
||||
| 阶段/type和DI等受控映射 | 44项用途全部保留;不按文件名或YAML顺序误选type | RDM领域设计,阶段4给逐项映射及旧数据兼容 |
|
||||
| 项目扩展、递归节点、确认状态 | 范围已确认;具体schema/事件/迁移和冲突语义未设计 | RDM,阶段4;不能以全局字典修改替代项目独立扩展 |
|
||||
| 普通工作上下文和项目宿主审计 | 领域策略属于RDM,通用注入/读取属于Backend;必要公开扩展按四要素申请 | Dev/Backend/RDM,阶段4;不读Backend internal或owner全量审计绕过契约 |
|
||||
| 旧数据/历史/披露 | 旧字段不补造,受限正文不先传客户端;升级/恢复保持版本与身份 | RDM/Backend/Frontend,阶段4;迁移和正式测试另有批准计划 |
|
||||
| 在途重叠 | 沿用阶段2快照作为历史依赖,不宣称当前仍开放;审计导出/水位、快慢通道来源优先协调复用 | 阶段4/5开始核对最新main/PR和公开契约,不重建相同入口 |
|
||||
| 模型、浏览器和正式环境 | 真实任务对照必需,费用与样本/环境尚未批准 | 阶段5提交具体预算及测试计划;当前不运行付费模型、生产数据迁移或部署 |
|
||||
|
||||
本表没有把关键未知写成已解决。可确认需求及上述约束后开展方案设计;方案或试验发现需求范围、权限或验收条件需要改变时,回到本表重审受影响项,不降低既定目标。
|
||||
|
||||
## 人工评审出口
|
||||
|
||||
推荐确认28项全部纳入、优先级/验收条件及E1的风险处理边界,随后进入阶段4方案设计。阶段4产物应提供推荐方案/备选、职责与公开契约、数据/权限/历史兼容、失败恢复及保真后续验证安排;阶段4仍由用户批准后再形成实施计划。
|
||||
|
||||
本稿不是业务完成声明。业务代码、数据库迁移、正式模型/浏览器/CI、PR合入及部署均NOT_RUN。需要修改时按需求ID反馈;DYN-01、阶段1范围和阶段2取舍不重复询问。
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
# 阶段3受影响需求表:工作信息拆解与主动风险澄清 r1
|
||||
|
||||
记录日期:2026-10-14(Asia/Shanghai)。状态:**待人工评审**。用户已在本聊天 `call_aea78d4156fe4ca89f4b9b6883b2b23f` 第0项确认[阶段2受影响评估r1](rdm-two-trees-stage2-work-observation-risk-evaluation-r1.md)(SHA256 `2627342f7d6e94137d5e7418d995ce57218093f6512f67fb7b221f01067da04d`),选择“确认增补,进入需求表(推荐)”。本稿只补两项稳定需求;此前[阶段3原28项r1](rdm-two-trees-stage3-requirements-r1.md)及其批准字节不变。通过本稿后需求总数为30,后续受影响设计和实施计划仍须人工评审。
|
||||
|
||||
## TT-N03 普通工作四类来源逐项拆解与受控候选
|
||||
|
||||
- **优先级/符合度/结论**:P0;需调整后符合;纳入本目标的受影响范围,阶段3待确认。现有显式 `rdm.ingest`、已发布知识和部分对话事件不能证明所有普通项目工作入口已接入。Backend固定主干 `607c38d7` 的surface 2.12和X1/X2本地组合探针 `d9b00c2` 的surface 2.19均无通用消息观察公开口;此结论的命令、对象、输出在Dev任务卡SELF收据 `ad404f00ba0f4cff2b02e07afc00ab4073ed1d91c1745caf826e1ada7209eec6`。
|
||||
- **需求**:在有受信项目工作绑定的普通对话、后台任务及恢复路径中,逐项处理①用户已提交的发言,②智能体最终提交的回复,③实际检索命中/工具提供的资料,④已输出或保存、可定位的分析产物。一个来源可拆出多条目标、要求、事实陈述、依据、假设、建议和待澄清项;同义重复可聚合,但保留每个实际来源及处理回执。对每项说明已形成候选、忽略且有原因、待分析/待确认、因权限受限、失败可重试等真实状态。未公开的模型内部推理、仅有流式片段或截断摘要的未知原文,不冒充完整来源。
|
||||
- **来源和权限**:候选有唯一身份、source kind、原消息/命中/产物稳定ID、版本/hash、原文片段位置或实际资源锚点、产生者/观察时间、受信项目与当前授权域、候选类别/范围/有效状态。搜索保存实际URL/查询/获取时间和已用片段;分析结果保留可见结论及其依据引用。无受信项目、已撤权/私域、无法定位或不可信内容不得借客户端 `projectId` 变成可跨成员项目事实;原始会话、工具大段输出仍按其原有权限保存。项目笔记树可显示受控候选及其来源网,只有符合发布/确认和当前对象权限的内容才进入其他成员的普通工作上下文、正式文档或有效追溯。
|
||||
- **状态和恢复**:来源新增、修订、撤销、换项目、授权变化与异步重试均按源ID/版本幂等处理;重复运行不产生重复切片/边,来源失效后新工作不再引用失效候选。保留已发生操作审计;旧会话不能因缺可靠归属/权限证明而被批量补造为项目知识。同一候选的用户、助手、检索多处引用只增加来源链接,不把模型复述算独立证实。
|
||||
- **可判定验收**:在两个项目、两名普通成员和至少一名受控文档成员的真实工作中,四类来源各有相关和无关样本;一段用户发言含两个不同要求须形成可回指的两项候选,同义助手复述不多造一个已确认事实;实际检索三条命中分别有处理状态,其中一条只有截断摘要须标不足以拆原文。换项目、私会话、撤权、来源修改/删除、后台恢复及重试后,私域正文和候选不进入其他成员或已撤权模型输入;经允许的确认/发布可在下一次普通工作中以精确版本被实际取用,manifest可回查。处理失败有可读状态,不静默丢源。
|
||||
- **验证方法**:领域/存储幂等与来源撤销、Backend实际用户/回复/检索/分析观察入口、RDM候选和授权、两成员两项目的输入manifest及浏览器来源视图分别检查;对“收到一个事件”“模型声称已分析”或后台队列里有任务,不直接判定最终来源已处理。
|
||||
- **依赖和边界**:TT-N01/N02/G03/C01–C04/U04/A02/A04;W2、W5–W10及后续真实模型/浏览器W12。Backend需要受信的可选观察入口/时序,具体公开契约、数据量和延迟在受影响阶段4/5固化;无法取得可验证来源时须明确缺项,不能伪造原句或用户确认。
|
||||
|
||||
## TT-R01 任务内及时发现矛盾、风险并安全澄清
|
||||
|
||||
- **优先级/符合度/结论**:P0;需调整后符合;纳入本目标的受影响范围,阶段3待确认。现有知识冲突、结构提案与HITL原语可复用,但没有普通用户消息/助手输出/检索发现到相关动作之前的一体化检测和可见处理路径。
|
||||
- **需求**:对本轮输入及TT-N03候选先查片段内部的量纲、方向、条件与措辞歧义,再按当前授权比较同主题候选、已确认项目要求、受控基线和来源版本。检测结论是带证据的**风险/矛盾候选**,可为需立即澄清、待成员处理或无问题;不得由模型独自把“可能冲突”裁为正式事实,也不得用“最新消息优先”覆盖批准节点。提示包含触发原句或有限摘录、与哪个有效对象/来源不一致、为何影响当前动作、可回答的问题及处理状态;对无权对象只给不泄露正文的通用阻塞说明。
|
||||
- **即时边界**:若本轮表达影响即将生成/确认的要求、结构、版本、审签或受控内容,在该相关操作生效前、同一轮交互中向有权用户提问或呈现绑定该对象/版本的HITL卡;无法在执行前完成可信判定时,相关业务动作维持待分析/待澄清,不提交为已确认事实。与该风险无关的普通工作可以继续。后台发现或用户离开时,风险持久列在同一右栏工作卡并可从中栏对话定位;右栏收起仍有可用的对话路径。正式高风险应用使用既有一次性真人确认凭据,模型或裸文本 `confirmed=true` 不能代签。
|
||||
- **指定语句**:输入“要求效率和成本都低于人工”时,应在把它写成项目已确认要求或据此生成正式文档前指出“效率低于人工”可能意味着更慢,并询问“效率更高且成本更低”“完成时间和成本更低”或“确实允许效率更低”的实际意思。不能自动改写用户原话。用户选择后保存原句、答复、actor、时间及版本;有意坚持低效率时不反复因同一已答版本打断,后续更改或新证据则可重新提示。此例是可疑表述,不自动认定逻辑矛盾或违规。
|
||||
- **状态和审计**:每条风险有唯一项目/来源/版本/受影响动作键、来源证据、直接影响、创建/发现时间、发起者及当前处理人,状态可待澄清、已回答、误报、已撤销、过期/再评估;重试不重复开卡。真人回复、拒绝/忽略理由和实际业务效果分开留痕;未确认候选不会产生已生效的结构/受控关系。权限撤销、切换项目、原来源修订和卡片迟到响应后重验授权与版本,旧答复不应用到新提案。
|
||||
- **可判定验收**:除指定语句,还测试同主题两个授权来源的不同周期数值、单位混淆、与已基线章节冲突、搜索页面注入伪装确认、助手提出无证据结论、真正允许低效率的反例及普通无关句。对每例观察当前轮消息或工作卡、相关动作零提交/确认后恰好一次生效、确认/暂缓/误报/撤权/重启后的状态与审计;无权成员看不到私人原句、标题或差异。实时流序号较旧的卡响应不得覆盖新的澄清。真实模型样例需检查是否在最终业务动作前提示,而非仅凭模型自述“已经提醒”。
|
||||
- **验证方法**:确定性规则和模型评测只提供风险候选;以受信身份、权限、版本、事务和HITL回执验证业务效果。SQLite/隔离PG做重试/冲突/恢复;真实浏览器在中栏与右栏及收起状态处理;模型前后对照占用原W12已批准预算,不扩容48次/300,000tokens/人民币150元上限。
|
||||
- **依赖和边界**:TT-N03/D02/D03/G02/C03/A02/A03/U01/U03/U04/V02;W4b、W5–W10/W12。当前HITL命令存在不等于普通消息已自动触发;具体同步调用、持久卡、严重度策略和错误降级须在阶段4/5设计并验证。检测时只能比较当前主体可合法使用的来源,不因风险提示泄露其他项目或私域的存在。
|
||||
|
||||
## 对原28项和实施顺序的影响
|
||||
|
||||
| 原ID/工作项 | 保持不变的验收 | 受影响需在阶段4/5补充的证据 |
|
||||
|---|---|---|
|
||||
| TT-N01/G03;W2/W5 | 唯一知识、多挂载、来源锚点、未决问题和追溯 | 由真实用户/助手/检索/分析来源生成候选,区分推断与确认、旧私域与当前可用来源。W2已完成的项目字典/事务基础不用重做。 |
|
||||
| TT-C01–C04;W6/W7 | 普通工作自动取得已授权项目依据,实际输入manifest与撤权刷新 | 经确认的新切片可在下一次普通任务中取得;来源处理未完/风险未决在预算内标示,不将私人消息默认跨成员提供。X1受信上下文并非四类来源的观察注册口。 |
|
||||
| TT-D02/D03;W4b | 结构确认、一次性真人凭据、CAS和无半态 | 风险澄清是变更前的受控输入;处理卡和提案确认复用同一权限/版本/事务边界,不能凭模型提示直接改树。 |
|
||||
| TT-A01–A04/U01–U04;W8–W10 | 人可读操作与当前权限投影 | 新候选、风险、答复及实际确认操作的时间/人物/原因/影响有类型化审计与可读卡片;未记录或无权字段诚实标示。 |
|
||||
| TT-V01–V03;W12 | 需求到固定对象证据、真实模型/浏览器/当前组合 | 新两项纳入矩阵;至少一组指定歧义、一组跨来源冲突、一组无关/误报,与同一总模型预算和两项目两成员场景并测。 |
|
||||
|
||||
原阶段3批准的28项及DYN-01不被替换;本轮只新增TT-N03、TT-R01。受影响的公开观察入口与时序可能改变阶段4方案和阶段5W6–W12分工,故本需求表通过后先形成人审方案及实施测试计划,再编写该新增能力的产品代码。旧数据不补造无出处的消息/命中;已批准W2/W4a/时间和不受影响的W3可依旧授权继续。
|
||||
+426
@@ -0,0 +1,426 @@
|
||||
# 两树一网阶段4:方案设计 r1
|
||||
|
||||
记录时间:2026-10-14T10:50:15.042190+08:00。状态:待人工评审;需求负责人/评审人:用户;方案编写:Codex。当前授权到方案设计,不包含业务实施、追加转换试验、运行库迁移、部署或发布。
|
||||
|
||||
本文承接已批准的[阶段3需求与验收条件r1](rdm-two-trees-stage3-requirements-r1.md),对象SHA256 `d685b9de14e1bd7c19a2a94dfab234c5a942f1281acd113ea924d24887246e15`。用户在本聊天 `call_87e7dc7218214a27a6a6d4911a44a387` 选择“确认阶段3,进入方案设计(推荐)”,同时接受原件保全、转换稿仅候选、保真问题未解决不发布。阶段1/2原对象、28项需求及44份模板范围保持。
|
||||
|
||||
## 1. 推荐方案与取舍
|
||||
|
||||
推荐在现有RDM领域模型、事务事件、持久提案、文档三权和检查工作区上扩展。模板与实例共用一套递归内容块合同;每项目拥有固定基础版本及独立扩展;资料和进度触发结构提案,成员确认后原子生效。基座提供按可信项目/主体调用领域上下文的入口及项目宿主审计读取能力。RDM将业务事件、操作尝试和宿主回执投影成可读操作记录,Frontend直接展示结构化事实。
|
||||
|
||||
| 路线 | 收益与成本 | 结论 |
|
||||
|---|---|---|
|
||||
| 扩展现有领域、提案和公开接口 | 保留已有项目、三权、事件重放与文件预览;需要完成递归模型、项目版本及兼容迁移 | 推荐;覆盖完整目标 |
|
||||
| 以通用知识图谱/动态表单平台整体替换 | 可配置面大,但要重建现有审签、权限、重放、模板与迁移语义,跨仓成本高 | 不采用;本目标不需要替换整套平台 |
|
||||
| 保留固定树,仅补标题/模板文本和审计文案 | 改动少,无法表达项目独立扩展、确认前后版本及真实成员工作依据 | 不满足已批准需求 |
|
||||
|
||||
方案以“已登记、可解析、语义已核对、可发布、实例已确认、文档已批准、文件已生成”分别表示状态,禁止用一个完成标志相互替代。P1需求与P0均在本目标内;没有把未解决的保真和权限问题移出范围。
|
||||
|
||||
## 2. 当前源码及在途工作依据
|
||||
|
||||
本轮SELF只读快照见同目录 `stage4-sources.json`,记录查询时间、源码SHA、文件hash、PR状态和DHF本地候选hash;不是运行验收。源码摘录留源码外,不在Documents复制业务源码。
|
||||
|
||||
| 对象 | 核验基线/关键位置 | 设计依据 |
|
||||
|---|---|---|
|
||||
| Dev | main `f00165e8d71e4dc8ba0ceb7dc50c1a8a3deb6d60`;本任务已合并该基线 | 逐阶段评审和公开模块边界继续有效 |
|
||||
| RDM | main `6fcb256205c2384abed35d3b6ab96ca7216e9297`;`domain/doctree.go`、`rdmapp/structure.go` | 现有Doc/Section为平面章节;装载按类型/标题去重,不能承载任意递归身份 |
|
||||
| 字典/事务 | `runtime.go`、`labels.go`、`tx.go` | Runtime.Dict传给各项目;已有TxProjectOp、opOnce、事件与审计outbox,应复用并补版本CAS及隔离 |
|
||||
| 上下文 | Backend main `5d5fc9891c0eb8994545ccb8b740535d9b99fb0e`;`runtime/llm.go`、`ctxasm`、extension | 普通知识注入仍依赖@knowledge;个人Memory不替代共享项目依据;公开面没有本方案所需Provider与项目宿主审计查询 |
|
||||
| 审计 | RDM `inspection.go`及Frontend main `eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b`的RdmAuditWorkspace | 当前按事件页内归组,DTO以op/actor/detail为主;需操作级完整分页与字段披露后的事实投影 |
|
||||
| Documents/UI | main分别为 `7bd4e17827d4c7c88647bf3c9199c495b60cb107`、`2c4322ef56df64ad72f65907d25b048a74bb5ffc` | 原两树方案状态回填已合入;沿用DESIGN、令牌、MotionKit、Collapsible及唯一文件预览 |
|
||||
|
||||
### 2.1 DHF专项的单一合同
|
||||
|
||||
发现并读取了DHF专项方案r0.1,SHA256 `f99e1424a9bb86f68ad6de91657102a36004c61fb0f36c8427e913d9e0cf9643`,以及 `Agent-System-RDM-wt-feature-dhf-template-assets` 的U1候选。该任务卡记录用户已批准实施U1和独立E1/E1-R1;这是其他任务的授权记录,不扩大本任务权限,也不证明其代码已合入或保真通过。
|
||||
|
||||
本方案采用以下分工,避免双方互等或各建一套:
|
||||
|
||||
- **DHF专项维护** `TemplateAsset`、资产目录/原件谱系、`ContentBlock`基础合同、WordSlot/渲染包及发布校验;44份台账唯一落在RDM模板资产目录。
|
||||
- **本专项维护**项目字典、内容块的项目实例/修订、结构提案/CAS/影响、普通成员上下文和完整审计。对ContentBlock所需字段作为同一合同的版本化扩展提交给DHF路径,不新建第二种模板树。
|
||||
- 文档实例化、模板绑定、生成采纳与整文冻结接口由本专项给出领域约束,DHF生成/导出消费;RDM是共同代码owner。阶段5以确定依赖提交/PR划分非重叠工作项,不把未提交候选当可消费版本。
|
||||
- 当前候选基础类型已有section/paragraph/table/row/cell/field/attachment、语义分类、WordSlot和稳定ID;还缺图形锚点、通用重复组、字段类型/单位/校验等本需求的表达。须在同一合同补足,不能因现有验证器只接受重复row而裁掉其他重复块。
|
||||
- 若DHF的v1合同尚未发布,在唯一合同中共同补齐后冻结;若届时已有发布消费者,则升级schema并提供兼容解码,不能以新增字段为名让旧严格读取器静默丢块。
|
||||
- 初步限制为深度64、每模板10000块的候选实现仅是资源保护,必须通过44份实测定限;超限给明确错误与调整入口,不静默截断或将固定层数变成业务规则。
|
||||
- 本任务E1与DHF的E1/E1-R1使用不同运行记录。只有输入hash、工具版本、差异与人工结论逐项对应才能复用;不以另一任务“已试验”覆盖本任务尚未解决的差异。
|
||||
|
||||
### 2.2 其他在途依赖
|
||||
|
||||
本轮API核验:审计导出/水位RDM #301/#307、Frontend #73、Dev #488仍开放;工作发现/来源Backend #193、Frontend #79、Documents #95、Dev #512仍开放。Documents #89与Dev #489已合入,已进入本轮文档基线。完整head及链接见快照。
|
||||
|
||||
本方案复用它们最终接受的导出截止、可信来源和任务卡合同;不另建导出或后台工作入口。它们尚未覆盖项目独立字典、默认项目上下文和完整审计读投影。阶段5开始及消费前重验当前main/PR,不把本快照当永久状态。
|
||||
|
||||
## 3. 权威对象与职责
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
S[原始模板与资料] --> A[DHF不可变模板资产]
|
||||
A --> P[RDM项目字典与递归实例]
|
||||
K[授权资料与已确认结论] --> P
|
||||
P --> Q[结构或内容提案]
|
||||
Q --> H[成员确认与当前权限校验]
|
||||
H --> T[项目事务: 版本 CAS / 事件 / 回执]
|
||||
T --> P
|
||||
T --> G[一般来源网与受控版本网]
|
||||
P --> C[RDM项目上下文提供方]
|
||||
G --> C
|
||||
C --> B[基座预算组装与实际输入清单]
|
||||
B --> W[成员普通工作]
|
||||
T --> U[可读审计投影]
|
||||
B --> U
|
||||
U --> F[现有审计工作区]
|
||||
```
|
||||
|
||||
| 对象 | 权威数据及不变量 |
|
||||
|---|---|
|
||||
| 模板资产版本 | templateId + version;原件、规范化DOCX、结构、渲染包各有完整hash;发布状态与评审证据绑定确切字节,不以文件名或字典序选最新 |
|
||||
| 项目字典版本 | projectId + dictionaryRevision;固定seed版本加项目扩展;ID与显示名分离,旧key别名可读;两树一网共同引用同一版本 |
|
||||
| 文档实例 | docId + projectId + templateBinding;实例有自己的节点ID,另存templateBlockId;一个模板可有多个同类实例,标题不参与身份判定 |
|
||||
| 递归内容 | 同一ContentBlock合同的实例视图;结构revision与内容revision分离;约束/说明/示例与成员实际填写值分离 |
|
||||
| 提案 | proposalId + revision + kind + baseVersions + bodyHash;草稿/内容/结构使用同一提案生命周期与确认入口;批准永远针对一个不可变提案版本 |
|
||||
| 知识 | 唯一知识ID及不可变来源/版本;挂载为关系,撤挂不删除知识本体;发布状态和索引投递状态分别记录 |
|
||||
| 追溯关系 | 边ID、语义、来源、确认状态、端点确切版本;受控网绑定证据,不把一般关联当正式验证 |
|
||||
| 业务操作 | operationId + requestDigest + actor/project/resource范围;事件和操作成功回执同事务,尝试/失败独立留痕 |
|
||||
| 模型工作依据 | 每次实际调用的ContextManifest,关联run/step、对象版本、内容摘要hash、预算裁剪及授权水位;不记录模型私有推理 |
|
||||
|
||||
RDM提供领域策略、对象和事件;Backend提供通用身份、上下文组装、执行/宿主审计及公开扩展。Frontend只消费授权后的DTO;UI仅复用既有原语。数据库仍走当前RDM store适配,不在本次替换团队存储架构或直接读取Backend internal。
|
||||
|
||||
## 4. 模板资产、内容块及实例
|
||||
|
||||
### 4.1 从原件到发布
|
||||
|
||||
流程为“登记原件 → 解析/规范化候选 → 内容分类与差异核对 → 确认用途/适用性/槽位 → 发布不可变版本”。运行时只消费已发布包,不增加常驻LibreOffice服务。准备工具在隔离环境运行,原件只读,禁宏/外部内容加载;未获批准不继续E1以外的试验。
|
||||
|
||||
资产状态沿用DHF候选 `needs-review / blocked / published / retired`。解析exit0不是发布条件;缺原件、hash不符、未决关键差异、用途未定、示例分类未确认、渲染槽位歧义均阻止发布。已发布版不原地改包,修正产生新版本。
|
||||
|
||||
44份逐文件范围与候选类型沿用阶段1附录A;原件与DHF台账按hash及逻辑用途核对。32个既有类型保留;12个新增/细分用途必须独立可辨,建议用途不同的计划/报告、详细设计、集成测试及阶段记录使用独立docType,最终键在阶段5前与共同合同对齐,不把“12”当固定数据库迁移数量。
|
||||
|
||||
系统需求使用明确的研发用途绑定,不按 `pm_system_reqs / rd_system_reqs` 注册顺序选择。《验证确认报告F02》的过程IQ/OQ/PQ用途、有效期与货架寿命边界、企业固定项/项目示例项等必须在资产评审单裁定;无裁定保持待发布。四份同字节评审模板保留四个阶段用途。无新资产的其余既有类型继续标“历史骨架/待标准模板”,不冒充本批已覆盖。
|
||||
|
||||
### 4.2 递归表达与语义
|
||||
|
||||
基础块沿用DHF的ContentBlock,不另建模板AST。补充合同包括:
|
||||
|
||||
- section、paragraph、field、table、row、cell、attachment及figure/reference;允许可重复的有名group,块种类决定允许的子种类,禁止无约束任意嵌套。
|
||||
- 稳定ID、文档顺序、内容要求、输入证据条件、必需/可选/条件适用、字段类型/单位/枚举/长度/数值范围、重复基数、表格合并与覆盖单元约束、附件类型及证据锚点。
|
||||
- semantic区分fixed/instruction/example/placeholder/signature及历史批注/修订引用。批注和未采纳修订保留在来源侧,默认不实例化为有效要求或项目事实。颜色和斜体只作分类线索。
|
||||
- 源锚点至少含原件hash、OPC part或DOC位置、段/表/单元/图形与可读路径。图形保留原内容及位置关系;无法可信展开的图形保持不透明证据块和待核对状态,不能自动推断业务边。
|
||||
- 适用规则采用受限的字段/比较/布尔表达式,禁止任意脚本;结果为适用/不适用/未知。未知不自动删节点;项目确认“不适用”需理由及确认者,保留原要求。
|
||||
|
||||
表格结构、字段值和重复组均使用此树。实例外层保存project/doc/node身份、父/顺序、源模板块、状态和revision;内容值按节点revision追加保存。模板的填写说明不与实例值共用同一字段。父子关系由同一权威结构生成索引,禁止树JSON和邻接表分别接受写入。
|
||||
|
||||
### 4.3 历史与审签
|
||||
|
||||
旧Section.ID继续有效,作为迁移后对应章节nodeId;旧版本正文保留为该章节下的legacy正文块,不拆分改写已批准文字。为旧段落自动推断模板hash、职责或精细锚点是不允许的。
|
||||
|
||||
模板升级形成提案,展示新增/废止/要求/槽位/适用性差异,按templateBlockId对齐。人工确认后只改变新结构/新候选;旧文档版继续绑定原模板。WordSlot只用于固定渲染包的槽位映射,不充当实例身份。
|
||||
|
||||
文档整版快照固定结构revision、节点内容revision、模板及渲染包hash、依据版本和真实审签。DHF导出从指定快照生成;已批准Word作为该快照的固定交付物保存,下载链接过期不删除批准文件。生成失败显示“文件待生成/失败”,不伪造Word已就绪,也不回滚既有批准事实。
|
||||
|
||||
进度是需求覆盖和工作状态的投影:未开始、素材不足、草稿、待确认、评审中、已批准、依据变化待复核、不适用。已批准状态只能来自审签;有文字、节点数量、提案已确认均不能自动批准正文。
|
||||
|
||||
### 4.4 E1风险的处理路线
|
||||
|
||||
本任务E1发现doc-03分页7→6、doc-01图形文本排序、doc-13图形表示差异、doc-06批注混入、doc-14修订及49字符未定位、PDF中文缺字。对应路线如下:
|
||||
|
||||
| 问题 | 设计处理 | 放行证据 |
|
||||
|---|---|---|
|
||||
| 中文字体/分页 | 固定可读的目标字体和Writer/Office基线,保留渲染环境说明;先分辨原DOC导入与DOCX往返各自差异 | 每文件可读页面、关键格式对照及人工差异结论;像素相同不是唯一判据 |
|
||||
| 文本框/连接线 | 图形源锚点与对象位置保留;阅读顺序由结构位置及核对结果确定 | 图形文字及关系语义可回指,未核对不展开为正式要求 |
|
||||
| 批注/修订 | 当前内容与批注、删除、未采纳修订分别提取;原件不执行接受全部修订 | doc-14未定位片段查清;有效文本选择有业务负责人裁定 |
|
||||
| 原件格式异常 | 只在有批准范围的派生副本修复,记录输入/输出hash及字节修改;原件保全 | 可复现实验、未损害其他内容/样式的对照;不得只看转换成功 |
|
||||
| 自动路径仍不可靠 | 可提出人工按原件重建结构/槽位与派生渲染包,保留差异和双向核对;仍不降低内容/格式要求 | 逐项资产审核;替代路线及额外预算经对应阶段批准 |
|
||||
|
||||
DHF已有独立E1-R1在途,可在验证输入谱系和结果后复用。当前方案不把该追加试验视作已通过,不擅自运行第二轮或声明所有14份可发布。
|
||||
|
||||
## 5. 项目独立结构与动态提案
|
||||
|
||||
### 5.1 项目字典
|
||||
|
||||
每项目引用一个不可变基础字典版本,再叠加该项目的版本化扩展。阶段、主题、工作事项、子系统、文档类型和扩展字段拥有稳定ID;显示名可改,删除采用废止。工作事项不再被迫等同docType,兼容旧WorkItem值时保留旧键与显式映射。
|
||||
|
||||
Runtime.Dict只作为只读默认基础;WorldFor按projectId和有效dictionaryRevision取快照,不共享可变指针。历史重放按事件所绑定的字典版本解释;历史未保存版本时标记解释依据有限,不能用当前名称假装当时名称。更改字典形成提案,验证两树与关系引用,确认后同事务写字典revision和事件,作废该项目缓存。
|
||||
|
||||
扩展字段先定义语义、类型、验证和可见范围再允许赋值。项目A的覆盖不写全局种子,B不受影响。全局种子/模板发布仍经现有仓库治理,不开放运行时全局模板管理权限。
|
||||
|
||||
### 5.2 提案合同与生命周期
|
||||
|
||||
复用既有持久提案服务,扩展kind及版本/目标/差异载荷:`content / structure / dictionary / template-upgrade`。现有草稿记录默认content,旧命令继续只返回旧形状;新增统一读面支持各种kind。结构提案与内容提案保存各自类型化载荷,共用确认、拒绝、幂等及审计服务,不创建第二个审批中心。
|
||||
|
||||
提案字段:projectId、proposalId/revision、发起/生成主体、触发原因、目标范围、baseStructureRevision/baseDictionaryRevision、涉及的doc/content/template版本、changes、evidenceRefs、impactAnalysis、风险、payloadHash、状态和时间。所有权限判断用执行端身份;模型不能指定最终actor或confirmedBy。
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> Pending: 保存候选和来源
|
||||
Pending --> Superseded: 修改形成新修订
|
||||
Pending --> Rejected: 有权成员拒绝并说明
|
||||
Pending --> Cancelled: 发起者取消
|
||||
Pending --> Conflict: 当前版本或权限变化
|
||||
Pending --> Applied: 确认确切修订并事务提交
|
||||
Conflict --> Superseded: 重新分析形成新候选
|
||||
Applied --> [*]
|
||||
```
|
||||
|
||||
不存在长期持久的“已批准但未执行”结构状态。确认与生效是同一事务;网络返回丢失后按operationId查询已提交回执。修改后接受必须先生成新提案修订、重新展示差异与影响,再确认其hash,不能把旧确认套给新内容。
|
||||
|
||||
确认还必须携带由扩展后的现有HITL通道生成、服务端可核验的一次性确认凭据,绑定用户/项目/提案修订/payloadHash及有效期,并在应用事务中消费。模型以用户身份调用工具、传入confirmed=true或伪造confirmedBy均不构成人工确认。对话中的“批准”由真实用户消息与当前待确认对象关联;对象不唯一或已经变化时重新展示差异。UI按钮与对话入口消费同一确认服务,避免存在直接调用decide绕过DYN-01的路径。
|
||||
|
||||
动态触发包括资料发布/撤销、结论变更、新需求、阶段推进、发现缺项、模板升级和成员主动整理。触发只记录待分析任务,按项目水位合并重复触发;分析不得在每条资料变化时无界重建全部树。自动生成的候选不进入有效项目上下文;确认后的结论/结构才成为依据。
|
||||
|
||||
### 5.3 写入及恢复
|
||||
|
||||
确认步骤:可信身份与项目 → 读取提案修订 → 获取项目写事务 → 复验权限/受控状态/预期版本 → 校验整批操作 → 原子提交新revision、领域事件、提案applied、幂等回执和审计outbox → 发布新只读投影。
|
||||
|
||||
允许操作为新增、改名、移动、排序、改变要求/适用性、取代/废止及增加扩展字段。校验循环、跨项目/跨文档父子、重复ID、dangling引用、表格覆盖、字段值和结构规模。跨文档移动视为两个受控对象的变更,须拥有全部相关职责且对两文档生成候选版;普通导航挂载不移动受控正文。
|
||||
|
||||
复用TxProjectOp,增加数据库内project revision的条件更新及请求digest核验;进程内锁不能替代DB CAS。幂等范围绑定项目、主体、动作、资源及请求内容。同键同内容重试返回原回执;同键异参拒绝。所有相关写入口必须更新相同revision约束,不能仅在新API加锁而旧命令绕过。
|
||||
|
||||
读者只取提交后的不可变快照。不能让读服务拿到写事务正在修改的World指针:对既有World缓存增加同一项目读写协调或在隔离工作副本中演算,提交后一次替换;失败作废工作副本。具体锁实现可在阶段5确定,但必须覆盖全部读/写入口,故障测试证明无半新状态。
|
||||
|
||||
提交前错误为未生效尝试;提交结果未知先查回执,禁止重复执行。outbox投递失败不回滚已提交业务,状态显示待投递并按事件ID幂等恢复。旧应用遇不支持的事件schema拒绝继续写/重放,不能跳过未知事件启动空树。
|
||||
|
||||
### 5.4 权限映射
|
||||
|
||||
沿用现有上限∩角色∩项目覆盖∩资源∩职责/状态规则。普通成员在可读范围可提出建议,不能因此应用变更。
|
||||
|
||||
| 变更/读取 | 执行端要求 |
|
||||
|---|---|
|
||||
| 项目字典/阶段与非正文导航调整 | 项目设置权限;阶段推进还需stage.advance;涉及受控要求时同时检查相应文档职责 |
|
||||
| 文档内容/要求/结构采纳 | doc.write及指定编制人/当前文档状态;已批准对象须新候选并重审 |
|
||||
| 资料发布/撤销及结论成为共享依据 | knowledge.publish及对应资源权限;发布成功台账与索引状态分开 |
|
||||
| 受控关系确认/废止 | trace.edit及端点资源权限;不得以自动关联替代确认 |
|
||||
| 审计查询 | audit.read及当前项目许可;每个内容字段/对象再按资源和正文权限披露 |
|
||||
| 默认工作上下文 | 当前项目成员及相关知识/文档read权限;无需audit.read,不能通过上下文读出审计隐含私域 |
|
||||
|
||||
若现有project.settings粒度不能表达结构管理与权限管理的区别,新增专门动作必须同时给出默认/上限/旧角色迁移的明确方案,经权限合同评审;不能暗中给普通成员扩权。跨对象提案要求全部动作授权,不能部分应用后称整批成功。
|
||||
|
||||
## 6. 追溯与变更影响
|
||||
|
||||
一般来源网与受控合规网继续分别保存,统一引用为 `{projectId, kind, id, revision, anchor}`。内容块成为可定位的章节/要求证据落点,不把每个表格装饰单元都升级成受控需求实体。
|
||||
|
||||
UN、SR、DI、风险控制、软件需求/设计、测试用例、执行结果和报告保持不同业务身份;每个实体可绑定一个或多个块来源。候选关系不计入正式覆盖;新受控类型按现有CNode注册/重放合同增加明确语义,不以字符串节点冒充类型已支持。
|
||||
|
||||
端点升版时旧边保留原版本,当前视图标“待复核”;新的确认边绑定新版本,不自动移接旧测试证据。测试用例与测试执行结果分开,被测软件/配置版本在结果侧固定。
|
||||
|
||||
影响分析给出直接对象、传递路径、涉及的批准文档/验证缺口及分析水位。确认时若关键受控影响尚不清楚,阻止应用并要求完成分析;大图非关键补充影响可作为明确pending作业,不能将未计算显示为零。遍历去环、限定资源、返回截断及续查信息。
|
||||
|
||||
审计保存操作当时的影响分析ID及快照;用户另点“按当前版本分析”得到新的分析ID和水位,不能覆盖历史解释。模型建议的因果关系标候选,只有规则/确认事实进入确定性影响路径。
|
||||
|
||||
## 7. 成员工作上下文
|
||||
|
||||
### 7.1 公开扩展申请 X1
|
||||
|
||||
这是拟新增公开合同,尚未实现;符号最终以Dev扩展申请及surface版本为准。
|
||||
|
||||
| 四要素 | 内容 |
|
||||
|---|---|
|
||||
| 场景 | 普通成员在项目内开始、切换或恢复工作,未写@knowledge也应获得当前授权的任务要求和项目依据 |
|
||||
| 希望的公开能力 | 可选 `ProjectContextRegistry.RegisterProjectContextProvider`;提供方有 `Resolve` 和 `ReadEvidence` 两种受限读取;基座按可信run scope调用,不提供任意客户端owner查询 |
|
||||
| 现有组合不足 | AddCommandHandler只在命令调用时运行,KnowledgeSearch不提供默认任务要求/结构版本,ResourceAuthorizer只作许可判断,个人Memory按owner;都不能保证每次实际模型调用和恢复前注入 |
|
||||
| 兼容方式 | 新增可选接口及类型,不给必须实现的Host/Registry强加方法;无项目或未注册插件保持原流程;RDM声明必需能力时缺失须明确不可用,不能静默回退到手动@knowledge |
|
||||
|
||||
Resolve请求由宿主构造actor、pluginId、projectId、conversationId、taskId/runId/stepId、任务目标/当前对象、模型预算及上次水位。项目归属从受信会话/任务记录读取,不能从模型参数覆盖;恢复任务的项目绑定不可由旧payload改变。
|
||||
|
||||
返回ProjectContextBundle:项目概要/当前阶段、任务对象与要求、已确认结论、当前可读文档摘要、授权知识引用、未决冲突/缺项、精确来源版本、候选资料的限制状态、授权/发布epoch与领域commit水位。未知项目/无权/不完整分别返回明确状态,不能跨项目回落到全量World。
|
||||
|
||||
ReadEvidence只接受Bundle内可再鉴权的稳定引用及范围,不接受任意文件路径/owner。RDM通过当前IAM与发布台账选择对象,基座保留资源级model-context授权;多个插件不能覆盖彼此命名空间或把自己结果当全项目权威。
|
||||
|
||||
### 7.2 实际调用链
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant W as 普通成员工作
|
||||
participant B as Backend运行时
|
||||
participant R as RDM上下文提供方
|
||||
participant M as 模型
|
||||
W->>B: 项目内任务/对话
|
||||
B->>R: 可信作用域、任务目标、预算
|
||||
R->>R: 当前权限、发布与有效版本检查
|
||||
R-->>B: 摘要、要求、引用、缺项和水位
|
||||
B->>B: 预算裁剪,固定实际输入清单
|
||||
B->>M: 当前授权上下文
|
||||
M->>B: 必要时请求证据详情
|
||||
B->>R: 指定引用,重新鉴权
|
||||
R-->>B: 当前可读片段或明确拒绝
|
||||
B->>B: 记录实际使用版本及输出引用
|
||||
```
|
||||
|
||||
所有进入模型的路径,包括普通LLM、后台任务、Compose和恢复,使用同一提供方与manifest规则;Compose可提出更具体的块/文档目标,但不能自行从World取无权全量正文。不会把资料内容放入可覆盖平台规则的高权限指令。
|
||||
|
||||
Backend是最终注入和预算的唯一所有者。现有Host.Complete仅有prompt参数,不能靠插件在字符串中自报projectId补齐受信作用域;X1同时提出可选的 `WorkCompletionHost.CompleteForWork`,在已认证分发/任务上下文内解析目标及项目后走同一组装管线。Compose只提供生成目标和任务约束,已组装依据不再二次拼接;无可信工作作用域的普通Complete保留原有非项目能力,不能读取项目共享正文。后台恢复Host须从持久任务重新取得并验证作用域,而不是继承旧prompt内的身份。
|
||||
|
||||
预算顺序:系统/用户本轮目标及必需任务约束 → 项目和对象短摘要 → 必需的已确认依据 → 相关补充片段。每项记录保留或裁剪及原因;排序不静默裁决冲突。同任务先拿索引/摘要再渐进读取,不能在每轮扫描全部文档。
|
||||
|
||||
ContextManifest记录**实际最终输入**:bundle版本、对象ID/revision/hash、来源锚点、提供/丢弃片段、检索范围、模型/运行配置引用、预算与水位。候选检索列表单独记录,不能冒充模型已见;摘要内容保存受控版本或可复核hash,避免以后用新版摘要冒充旧输入。
|
||||
|
||||
### 7.3 撤权、恢复和失败
|
||||
|
||||
每次模型调用、细节读取、后台恢复及有副作用提交前复验当前成员/职责/资源权限及发布epoch;新任务、项目/任务切换和相关有效变更使旧Bundle失效。cache key包含actor/project/任务目标/权限epoch/内容水位,不能跨成员共用已裁剪正文缓存。
|
||||
|
||||
来源支持的历史工具片段及模型引用必须带出处,恢复时重新构造或移除已撤权/失效片段,不能仅检查新检索而继续把旧对话中的受限正文送入模型。无可靠出处的旧机器上下文标legacy,不能当授权读取入口;用户本轮自主输入与资源读取分开处理,不据旧引用授予访问。
|
||||
|
||||
权限在请求已发送后撤销,不能声称可撤回模型已处理的数据;记录实际输入时的授权水位,阻止后续调用和未获授权的派生结果交付/提交。具体外部模型留存政策不在本功能虚构保证。
|
||||
|
||||
提供方不可用/超时:普通对话显示项目依据暂不可用;依赖项目事实的生成/结构确认进入blocked或等待,不以无依据模型输出宣称已完成项目工作。只问一般问题可以继续,但清楚标出未使用项目依据。不得把可选能力故障变成全局平台不可用。
|
||||
|
||||
## 8. 完整审计事实与投影
|
||||
|
||||
### 8.1 三类记录和原子性
|
||||
|
||||
1. **业务事件**:已提交的结构/内容/关系/权限等事实,继续用于确定性重放。新增schema保存必要旧/新版本引用与业务元信息,成功回执与事件同事务。
|
||||
2. **操作尝试**:requested/started/waiting/rejected/failed/cancelled/committed/partially-completed/unknown等结果;保存实际已发生副作用、错误类别及恢复链接。失败不追加“已生效”业务事件。
|
||||
3. **宿主执行回执**:模型/工具/后台步骤/输入清单/投递的真实执行状态,经可信project/run关联读入。不能拿owner全量审计列表拼项目记录。
|
||||
|
||||
在发生副作用前持久化attempt起点;成功事务内写业务结果及attempt对应的commit receipt。若进程在更新attempt终态前退出,恢复根据commit receipt判定,避免“业务成功但审计显示失败”。没有回执且无法确认外部结果时记unknown,先对账再重试。
|
||||
|
||||
审计存储不可用时,要求留痕的写入不得继续无记录生效。受控查看/下载/导出也先记录可信读取尝试,再记录响应准备/流传输完成/中断等服务端可知状态;不能把HTTP完成写成用户已读。未解析为可信项目的恶意ID拒绝事件留宿主安全作用域,不挂到攻击者任意指定项目。
|
||||
|
||||
业务事务失败后在独立短事务结束attempt;两处均失败则保留起点/恢复缺项并明确报警,不宣称审计完整。后台投递用现有outbox扩展唯一sourceEventId,至少一次投递、幂等接收;离线期间显示缺少宿主回执范围。
|
||||
|
||||
### 8.2 操作信封
|
||||
|
||||
| 字段组 | 保存内容及规则 |
|
||||
|---|---|
|
||||
| 时间 | occurred/start/end/commit/confirm/recorded,UTC及原精度;未知显式缺项;页面按用户时区显示 |
|
||||
| 人物 | 稳定actorID、当时名称和角色/职责快照、发起/执行/确认/审核/批准者;系统/智能体/人工区别;来源从受信身份取得 |
|
||||
| 定位 | projectId、operationId、attemptId、requestId、run/task/step、因果父操作、对象kind/id/title/path、预期和实际前后版本 |
|
||||
| 内容/依据 | 类型化字段差异、不可变正文/结构引用及hash、原因和确认意见、模板绑定、知识/原件/发言/表格锚点;网络来源含实际URL/查询/获取时间 |
|
||||
| 结果 | 业务动作、状态、错误分类、可重试性、实际效果、生成产物、宿主投递/恢复状态;不把请求参数当已生效内容 |
|
||||
| 影响 | 直接对象、间接路径、需重审/重做/补证条目、当时分析ID/范围/水位及截断或未计算状态 |
|
||||
| 完整性 | event/schema/projection版本、domain commit水位、宿主source offset、来源标识、缺字段原因、披露状态 |
|
||||
|
||||
保存可记录的业务事实,不收集密码/token、模型隐藏推理、无关个人信息或完整未授权会话。完整输入依据采用受控内容引用/摘要hash和必要片段,不将整份私域正文复制成所有审计读者可见的detail字符串。
|
||||
|
||||
当时名称/路径与当前名称分别标示;旧记录不存在当时快照则显示“当时未记录”,当前解析名称只能作为“当前名称”。依据旧事件重放计算出的差异必须标推导来源与重放水位,不伪装成原操作当时记录。
|
||||
|
||||
### 8.3 公开扩展申请 X2与身份信息
|
||||
|
||||
| 四要素 | 项目宿主审计读取 |
|
||||
|---|---|
|
||||
| 场景 | RDM审计需要同项目的真实模型/工具/恢复/取消/投递事实及run关系 |
|
||||
| 希望的公开能力 | 可选 `ProjectAuditHost.QueryProjectAudit`,参数为可信项目范围、过滤、source cursor与截止;返回允许披露的类型化HostAuditReceipt及coverage |
|
||||
| 现有组合不足 | Host.Audit仅owner写入;现有owner列表无法同时证明项目归属、当前审计权及每个关联对象的披露权限 |
|
||||
| 兼容方式 | 新增可选Host接口;宿主保有可信归属和资源策略,RDM提供audit.read领域授权回调;旧部署返回coverage=unsupported,不得称全量审计已交付 |
|
||||
|
||||
身份显示优先由宿主在事件生成时绑定可信显示名快照;RDM自身写入可经可选最小actor身份接口取得当前主体及本次授权参与者名称。现有AccountLister/Searcher仅授权管理读面,不能为审计用户授予全账号目录权。若需要新身份接口,作为X2的最小附属字段/能力申请,输入限定本操作已验证参与者,返回ID/name/status,不含联系方式。
|
||||
|
||||
X1/X2均需在Dev正式提案、公开surface/契约测试及基座任务完成后按发版tag供RDM消费。阶段4批准不能替代tag发布的用户双钥匙操作,也不能允许改RDM pins内容或import internal。
|
||||
|
||||
### 8.4 可读投影、完整归组及游标
|
||||
|
||||
新增OperationSummary/OperationDetail读模型。由版本化的确定性动作词典生成“某成员调整了某对象”等中文摘要,参数只能来自事实字段;未知动作显示“未识别的历史操作(详情有限)”,不输出原JSON作为兜底,不让LLM生成审计解释。
|
||||
|
||||
列表以**operation**分页,不先截事件再页内分组。操作详情按operationId读取完整已提交批次;大型操作支持其子明细分页,同时始终显示可见范围内的完整性/剩余明细状态。同操作的重试、失败和最终效果关联,不把重试作为额外业务生效。
|
||||
|
||||
建议增加可重建的操作索引与不可变投影修订:记录operationId、project、发生/记录时间、状态、batchEnd、投影版本、关联引用和各来源水位。列表采用固定读取快照及稳定键集游标;游标绑定项目、主体授权版本、过滤hash、截止与最后排序键,篡改/过滤变化/撤权时失效。
|
||||
|
||||
domain seq与宿主offset不能比较成一个天然全局时钟。跨源审计采用本地摄入序列作为读取截止,同时保存domain commit和各宿主source offset;迟到回执在较新快照显示“补收到的执行记录”,旧快照不被悄然改写。历史截止只纳入完整提交批次,沿用在途导出水位合同。
|
||||
|
||||
状态过滤和汇总同样受当前披露规则约束。不能通过隐藏正文但暴露私域对象标题、差异长度或总计数量泄露内容;是否能显示受限对象的存在由字段策略决定,必要时仅“部分信息受限”。读DTO在服务端裁剪,内部重放payload不下发。
|
||||
|
||||
### 8.5 操作覆盖
|
||||
|
||||
实施时将阶段1§7.1六类覆盖矩阵逐动作接入:模板/结构、知识/资料、文档、需求/风险/测试/关系、成员/权限、智能体/后台。每动作至少关联入口→授权→尝试→实际生效事件/拒绝→可读投影→验证场景。
|
||||
|
||||
会话内个人草稿/未发布发现保持私域;项目审计只能见获准共享的关联摘要。宿主不能提供的字段明确not-recorded/unsupported,正式覆盖验收据此判缺项,不用“尽量记录”代替已批准完整范围。
|
||||
|
||||
## 9. 界面与命令合同
|
||||
|
||||
### 9.1 现有工作区内的用户流程
|
||||
|
||||
- 笔记树展示“知道什么、依据和有效状态”;文档树展示“需要交付什么、当前内容和缺项”;追溯视图展示“来源/实现/验证及影响”。项目切换沿用左栏,层级按项目内容展开,长树懒加载。
|
||||
- 成员在对话提出调整,右栏工作卡显示提案差异、理由和影响;确认/修改/拒绝同时有对话内路径。有效树与候选覆盖层视觉区分,不能先改树再要求确认。
|
||||
- 普通工作只在有用时显示“本次依据”短摘要,可展开确切版本与缺项;不把模板hash、schema或内部解析器信息放进默认业务流程。需要核对证据时沿用唯一文件预览。
|
||||
- 审计默认显示操作摘要、时间、人物、对象、结果及可见影响;展开“变更前后、依据、确认过程、影响、执行尝试”。默认无原始JSON/op码/base64。空数据、无权限、部分覆盖、加载和错误状态各自可辨。
|
||||
|
||||
示例仅用于说明设计,不是真实审计:
|
||||
|
||||
> 王某于10:42将“使用环境”移至“医院使用场景”,经李某确认后生效。结构版本8→9。依据为已确认会议结论。2份可读文档需要复核;展开查看前后路径、确认意见和影响条目。
|
||||
|
||||
数字和姓名仅由授权字段提供;受限时不保留该示例中的完整计数。旧记录显示“当时未记录原因”,不生成貌似合理的原因。
|
||||
|
||||
复用@ui tokens、字号标尺、mk-*与Collapsible;正文纸面保留文档字体/颜色。沿用三栏、四类检查入口及唯一文件预览,不新建模板后台或独立审批中心。窄屏和右栏收起仍能从对话完成确认。
|
||||
|
||||
### 9.2 拟定读写面
|
||||
|
||||
以下是方案合同名,不是已存在命令,实施时统一更新schema/公开目录并作兼容测试。
|
||||
|
||||
| 面 | 关键请求 | 关键响应 |
|
||||
|---|---|---|
|
||||
| `rdm.structure.propose/get/decide` | 可信项目、kind、目标/变更或提案ID、expectedRevision/hash、idempotencyKey、意见 | 持久提案/差异/依据/影响;确认回执、newRevision、commitSeq;冲突时返回当前可读差异 |
|
||||
| `rdm.project.schema.get` | 项目、指定revision或current | 有效基础+项目扩展的只读快照及历史限制 |
|
||||
| `rdm.inspect.tree`版本化扩展 | 项目、根/父节点、种类、revision、cursor | 递归子节点、种类、约束/进度、hasChildren、可见范围、稳定cursor |
|
||||
| `rdm.inspect.operations/get` | 项目、时间/人物/动作/对象/结果/任务、截止及cursor或operationId | OperationSummary页或类型化详情、完整性、披露、各来源水位 |
|
||||
| `rdm.context.inspect`(可选诊断) | 本人有权run/step | 已记录实际输入manifest的授权摘要;不能借此读取别人的完整会话 |
|
||||
|
||||
错误统一区分无权、提案/版本冲突、未知schema、必需来源缺失、模板未发布/不适用、保真未核对、分析未完成、提供方不可用、审计不可写、结果待对账。内部错误码用于诊断,页面显示对应动作、原因和可采取步骤。冲突不能自动重试成覆盖写入。
|
||||
|
||||
异步状态由一个store所有。页面请求带project/account/filter/history/request generation,事件按seq推进;旧响应直接丢弃。提案确认后以服务端回执刷新提交水位,不能以乐观更新伪造已生效;读模型追赶时显示同步状态。
|
||||
|
||||
## 10. 数据迁移、兼容与恢复
|
||||
|
||||
新增持久对象按领域分组:项目schema revisions、结构及内容修订/映射、提案类型化载荷、操作attempt/commit receipt、上下文manifest、可重建操作投影索引。已有事件/知识/正文/审批数据继续是各自权威;投影不能反向写业务事实。
|
||||
|
||||
数据库变更采用版本化迁移及最低读写schema fencing,不靠Get()散落DDL默默改变历史。阶段5先在副本建立旧数据基线、源hash和事件水位,演练迁移/重放/幂等中断恢复;运行库切换单独授权。
|
||||
|
||||
迁移原则:
|
||||
|
||||
1. 旧Doc/Section/Version和所有引用ID保持;生成新父子索引及legacy正文块时保存确定性映射,重复迁移不能生成新ID。
|
||||
2. 原版本/批准快照不改写;缺模板绑定或当时字典版本者保留legacy-unbound/unknown,不回填假的hash和审批。
|
||||
3. 新写路径及旧兼容命令统一经过同一事务/版本/权限服务。不能双写两套独立树后靠异步同步消除冲突。
|
||||
4. 事件schema采用兼容解码与明确版本门禁;新schema写入后不支持的旧二进制不得启动写入。回退使用已验证可读版本或迁移前完整副本,不删除新事实伪装回滚。
|
||||
5. 操作投影可按固定事实水位重建,后台重建与当前写入有checkpoint,原始事件和attempt不删除。历史缺字段继续缺字段。
|
||||
6. 数据库、原件/模板包、批准Word、附件及manifest引用作为一致性备份集合;不能只备数据库造成内容hash悬空。普通清理不得删除唯一历史证据。
|
||||
|
||||
故障矩阵应覆盖:确认前撤权、提交前/后进程退出、响应丢失、索引投递失败、宿主审计不可达、模板文件损坏、读投影落后、旧schema、迁移中断、模型运行中资料撤销。每条恢复路径返回实际结果与缺项,不默认重做所有外部动作。
|
||||
|
||||
## 11. 需求到设计和验证的追溯
|
||||
|
||||
下表是测试设计要求,当前产品测试均NOT_RUN;阶段5再给出具体命令、夹具、责任人、模型费用与环境。
|
||||
|
||||
| 需求 | 方案位置 | 必须提供的验证证据 |
|
||||
|---|---|---|
|
||||
| TT-T01 | §2.1、4.1 | 44路径/hash/逻辑用途、失败资产阻止发布、无源码目录的制品加载 |
|
||||
| TT-T02 | §4.2、4.4 | 44逐项内容/样式核对;表格/图形/修订/示例;目标环境可读格式 |
|
||||
| TT-T03 | §4.1–4.2 | 软件/硬件/无菌等差异项目;未知/不适用确认与进度分母 |
|
||||
| TT-T04 | §4.3 | 模板升版/退役/拒绝/旧实例回查,整文快照固定 |
|
||||
| TT-N01 | §3、6 | 唯一知识多挂载、来源锚点、结论取代、软删除和冲突登记 |
|
||||
| TT-N02 | §5.1 | 两项目扩展互不污染、同名异义、重启及历史字典解释 |
|
||||
| TT-D01 | §4.2–4.3 | 五层以上混合结构、重复组、移动/同名不变ID、循环拒绝 |
|
||||
| TT-D02 | §5.2 | 各触发源及接受/修改/拒绝/重启;确认前有效树不变 |
|
||||
| TT-D03 | §5.3 | 并发CAS、同键异参、提交各边界故障、读无半新态 |
|
||||
| TT-D04 | §4.3、5.4 | 三权/状态组合、实质变重新审签、旧批准版保全 |
|
||||
| TT-G01 | §6 | 一般/受控各条完整与缺项链、候选不能满足验证覆盖 |
|
||||
| TT-G02 | §6、8.4 | 端点升版、直接/间接/截断、当时与当前影响分离 |
|
||||
| TT-G03 | §4.2、6、8.2 | 人工/规则/模型/文件/网络来源与确切版本锚点 |
|
||||
| TT-C01 | §7.1–7.2 | 两项目两成员普通工作无需@knowledge,实际输入与输出来源 |
|
||||
| TT-C02 | §7.2 | 超预算、冲突、无结果、不可信来源指令、渐进读取 |
|
||||
| TT-C03 | §5.4、7.3 | 私域/共享、跨项目、撤权、缓存/历史/恢复无泄漏 |
|
||||
| TT-C04 | §7.2–7.3 | 每次调用最终manifest、切换/升版/撤权刷新及实际裁剪 |
|
||||
| TT-A01 | §8.1、8.5 | 六类逐动作覆盖矩阵,宿主缺项显式显示 |
|
||||
| TT-A02 | §8.2–8.3 | 时间/身份更名/前后版本/原因/确认链/影响及缺项 |
|
||||
| TT-A03 | §5.3、8.1 | 失败/拒绝/取消/部分完成/未知与实际效果一致 |
|
||||
| TT-A04 | §8.1、8.3–8.4 | 真实宿主归属、延迟投递/恢复、历史不补造 |
|
||||
| TT-U01 | §8.4、9.1 | 正常/失败/未知/旧记录可读,默认无原始payload |
|
||||
| TT-U02 | §9.1–9.2 | 来源/影响对象标题、权限内锚点与唯一预览 |
|
||||
| TT-U03 | §8.4、9.2 | 操作跨页完整、固定截止、迟到响应、筛选和历史切换 |
|
||||
| TT-U04 | §5.4、8.4 | audit.read/正文权交叉矩阵;网络DTO/导出/历史字段不泄漏 |
|
||||
| TT-V01 | §10–11 | 固定源码/pins/配置,正常/失败/迁移/重放及独立最小重放 |
|
||||
| TT-V02 | §7、11 | 真实模型同任务前后对照,召回/错误引用/撤权/结构提案场景 |
|
||||
| TT-V03 | §9–11 | 正式Frontend两人两项目流程、设计守护、精确组合与当前HEAD CI |
|
||||
|
||||
## 12. 后续实施顺序与评审出口
|
||||
|
||||
建议阶段5按依赖细化以下工作包;这只是方案依赖顺序,不代替尚未批准的实施计划:
|
||||
|
||||
1. 与DHF专项固定唯一ContentBlock/模板资产合同和每文件映射,明确E1未决项的验证/裁定责任;同时设计项目字典与旧对象映射。
|
||||
2. 递归实例/版本、事务与提案服务,先打通并发/恢复/三权,供DHF实例化和本任务动态调整共用。
|
||||
3. 受控关系、直接/间接影响及操作事实/attempt写入;不得等UI阶段再补无法从旧记录恢复的字段。
|
||||
4. X1/X2基座公开能力与RDM适配,接普通工作/Compose/后台恢复的实际manifest;按既有tag发布边界交付。
|
||||
5. 现有树/提案/追溯/审计UI消费新合同,保持唯一状态和权限投影。
|
||||
6. 全44资产与两项目两成员真实模型、浏览器、故障/迁移和精确组合验证;按阶段7–9审阅、Review和当前HEAD CI交付。部署与清理另按授权。
|
||||
|
||||
仍需验证的设计假设:DHF共享合同扩展及逐模板发布条件;X1覆盖所有模型入口且预算可控;现有事务读写协调能防半新状态;项目审计归组在大批次/迟到宿主回执下稳定;存量映射可保持所有旧引用。各项已给出负责模块与验证方法,尚未宣称实现可用。
|
||||
|
||||
本次请评审:推荐路线、单一DHF合同分工、项目版本/提案与权限边界、X1/X2公开扩展、可读审计事实/分页合同,以及E1未决项不放行发布的处理。通过后形成阶段5实施和测试计划;本阶段不运行新的转换试验、付费模型、业务代码测试或生产操作。若审议改变需求范围/权限/验收标准,仅回退受影响需求,不重开已确认DYN-01。
|
||||
|
||||
阶段5可将不依赖具体原件转换结果的结构/权限/上下文工作独立安排;真实资产仍在needs-review/blocked时不得对外宣称44份标准模板已可用。测试夹具只能验证机制,不能取代逐文件内容和格式验收。E1尚未解决的资产问题继续归入本目标最终完成条件。
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
# 阶段4受影响方案:工作来源观察、受控入网与主动风险澄清 r1
|
||||
|
||||
记录日期:2026-10-14(Asia/Shanghai)。状态:**待人工评审**。用户在本聊天 `call_b517d0f07af54aa188a01ddb100485b9` 第0项确认[阶段3增补需求表r1](rdm-two-trees-stage3-work-observation-risk-requirements-r1.md)(SHA256 `552a9fdea996bb547c185949b5072a51efafdce1339a9eaafd49537dfedd91b4`),TT-N03、TT-R01纳入目标,总需求由28项变成30项。本稿只修改[原阶段4方案r1](rdm-two-trees-stage4-design-r1.md)所受影响的普通工作来源、HITL、权限、上下文及审计合同;原W2/W4a、模板/递归节点及时间合同的其他设计结论保持。新公开接口、数据迁移与产品代码待本方案和受影响实施计划依次批准。
|
||||
|
||||
## 1. 现状、选择与接口归属
|
||||
|
||||
已批准Backend X1向RDM项目上下文提供方**拉取**当前已授权依据,X2仅将已提交项目业务事实与宿主审计可信关联;二者没有将普通工作消息和实际检索结果**推送**给RDM的入口。固定Backend主干`607c38d7`的公开surface 2.12与X1/X2本地组合探针`d9b00c2`的surface 2.19都没有通用观察注册口(Dev任务卡SELF收据`ad404f00ba0f4cff2b02e07afc00ab4073ed1d91c1745caf826e1ada7209eec6`)。代码限域复核确认:用户消息持久化后才启动普通run,插件命令处理器只在命中命令时运行;助手最终消息在run收口后才确定ID;检索在运行中直接返回hits,普通工具结果多只留截断摘要。现有`runCtx.AskHITL`已有对话内卡与右栏收件箱投影,但未连接这些来源。
|
||||
|
||||
比较三条路线:
|
||||
|
||||
| 路线 | 能否覆盖普通工作和即时风险 | 成本/风险 | 处理 |
|
||||
|---|---|---|---|
|
||||
| Backend提供可选、受信的工作来源观察与动作前决定口;RDM实现项目候选/风险领域规则 | 可在实际用户消息、检索、工具结果和助手最终落库处取得来源,并在有关写入/生成前提问 | 需新增公开面、宿主持久投递、权限及恢复用例;需和X1/X2同步版本 | **推荐** |
|
||||
| RDM定时读取整个宿主对话/工具日志 | 取不到未落库或已截断的逐项来源,也无法保证相关动作前提示;扩大私人会话读取权 | 易漏、误绑项目和越权 | 不采用 |
|
||||
| 只在提示词中要求模型自行记忆/提醒,继续要求用户手动上传 | 无处理回执、幂等、跨轮恢复或可信真人确认;模型可能漏掉例句 | 与TT-N03/R01验收不符 | 不采用 |
|
||||
|
||||
Backend只拥有跨应用的**受信观察接缝与调用时序**,从当前认证会话/持久run和实际资源构造身份;RDM保有拆解、项目领域候选、冲突语义、权限/发布、人审、入树入网及项目审计。Frontend/UI显示同一个受控状态,不在客户端自行判断哪些原话可共享。新增公开面遵循现有`pkg/extension`与`surface.txt`的可选能力方式,不能让RDM导入Backend`internal/`。其最终surface版本和数据库迁移序号以实施时同步后的权威主干为准,不在本稿假定旧探针已发布。
|
||||
|
||||
## 2. X3建议公开合同:来源和风险决定
|
||||
|
||||
建议新增`ProjectWorkObservationRegistry.RegisterProjectWorkObserver`,与X1注册面一样**可选**。Backend的运行/命令入口在经过原有认证和项目解析后调用注册的`ProjectWorkObserver`;没有RDM提供方的非项目工作保持原行为。RDM产品声明必须具备X3时,未装配或版本不兼容返回可理解的缺能力状态,不能悄悄假装已处理。
|
||||
|
||||
`WorkObservation`是不可由请求、模型或插件回填身份的受信信封,至少含:宿主唯一**观察事件ID**与来源阶段、认证actor、owner/plugin、从持久conversation或run核对的项目绑定、conversationID、持久消息ID或资源/检索命中ID、源种类、原版本与SHA256、时间和作用域/授权水位;可带经限额的原文片段及`partIndex`与UTF-8字节区间。`task/run/step`在实际创建后才出现,**用户消息提交时RunID可空**,聊天命令路径本来没有run;Backend随后用受信关联事件补齐,不因RunID空丢弃已提交消息,也不采信当前chat命令请求里可能为空的`HostProjectID`。Backend保证片段与保存的消息或当次实际命中相符;工具输出若只留下摘要,须标`summary-only`,并提供仍可重验的资源引用或诚实列为不可复原,不把摘要写成全文。助手来源以**最终持久提交的消息**为准,流式`message.delta`不生成独立已完成来源;SSE发送不代表浏览器收到,若需“已显示”另有客户端ACK,不影响本轮候选入网判据。可见分析产物仅指已保存/呈现的推导摘要、结论、工件和依据,未公开的内部推理不是来源。
|
||||
|
||||
公开合同至少区分观察、动作前决定、真人答复和当前来源授权:
|
||||
|
||||
1. `Observe(ctx, observation)`:以`owner/project/hostObservationID/sourceKind/sourceID/sourceVersion/partIndex-or-span`作稳定幂等键,**内容hash作为该键的值校验**;同键异内容拒绝并记录冲突,重投同键同字节返回原回执。不同run再次看到同一资源有新的hostObservationID和处理回执,可将语义候选归并,但不合并掉实际来源记录。返回`accepted/pending/denied/partial`和RDM处理回执ID;`accepted`只表示受信接收并落待处理账本,不表示风险分析完成、事实成立或已分享。每个实际来源/片段须有归并、忽略、受限、失败或候选的终态。消息必须已持久化;检索/工具命中在交给模型继续用之前保留来源引用与确实可见的片段,助手最终消息在收口事务成功后入账。撤销/版本更新以每源单调epoch和墓碑压住乱序旧事件,不因旧Observe迟到重新激活候选。
|
||||
2. `Preflight(ctx, workAction)`:针对即将执行的项目相关生成、正式要求/结构写入、确认或发布,带受信actor/project、动作、目标版本及**本次实际使用来源清单**(观察事件ID、sourceID、版本、hash、part与输入manifest水位),返回`proceed / clarify / pending / denied`及已保存的风险ID、需澄清的原句和可读理由。RDM必须证明清单中每项已经送达、完成对该动作适用的风险分析、没有交付offset空洞/`partial`来源;仅`accepted`或旧项目水位不能放行。本轮用户消息刚落库而outbox未投达时,Backend把同一**持久消息的受信快照**交给Preflight并由RDM在本地事务内先Observe/分析,再判定;也可等待其持久已处理水位,不得先分发chat命令或启动依赖它的模型run。检索/工具回调对后续模型/业务动作同理。待处理、超时或来源不全返回`pending`,相关动作零生效。`proceed`绑定确切来源/风险水位;一个新来源、更高项目版本、撤权或失败处理会使旧决定失效。Backend运行时在继续模型或命令前检查该决定,不能在调用RDM受影响命令后补问。
|
||||
3. `Respond(ctx, riskAnswer)`(仅风险HITL):Backend从当前认证会话、已保存风险卡及用户点击构造actor、riskID/版本、source/action摘要和幂等键,不接受模型参数自报的确认者;RDM在其事务中提交风险CAS与澄清答复并回已提交决定回执。Backend**拿到且核对该回执后**才销卡或恢复等待中的run;RDM未完成、版本过期或网络结果未知时,run继续等待/查回执,重试同键不二次决策。后续正式项目写入另执行W4b一次性真人确认和事务复验。
|
||||
|
||||
X3还需把受信来源检查明确分成**原件读取**与**已批准片段分享**两种用途。`CheckSourceAccess(raw-read)`从Backend当前会话/资源存储判定请求者能否读取**原消息/完整工件**;无权的项目成员不能借发布过摘要去打开原会话。私人来源主人A如要向项目分享,须经绑定来源ID/版本/hash、确切原文片段、**拟公开的实际摘要/文本及其hash**与项目的一次真人卡授权;Backend验证A当前拥有/可读该原来源并保存可撤销的`SourceExcerptGrant`(grantID、原片段hash、拟公开文本hash、项目及撤权epoch),RDM在自身库保存并核对相同grantID的项目发布许可及当前成员/文档职责。若只授权原片段而未批准改写,发布只能使用该原字节或可证明的确定性裁剪;摘要改字、补入其他私人内容或跨来源合成时,每个相关来源主人都须重看**最终将公开的文字**并重新授权,其各自grant绑定对应受控片段与最终发布payload hash。两方不是一次跨库事务:只有两份许可均已提交且当前有效,派生片段才可发布;任一失败保持待授权,不露出内容。Backend原grant先成功而RDM未应用时,它不能使任何RDM候选生效,取消/超时按同一幂等键撤销或恢复该悬置grant。
|
||||
|
||||
`CheckSourceStatus(derived-share)`只对已注册的RDM观察提供方返回来源owner、原版本/hash、当前存在/撤权epoch以及**Backend自己的grantID、原片段范围和拟公开文本hash**,不返回原文;Backend检验源仍属于A、未删除/撤权、原grant与原片段及拟公开payload hash/项目匹配,RDM独立核对其项目许可仍有效、实际派生摘要的**完整发布payload hash与grant相等**及B的当前项目/文档权限。该状态查询不是任意客户端可调用的消息目录;成员B可使用A明确授权的项目摘要,同时仍被拒绝读取A的私人完整会话或其他片段。X1的逐项来源重验继续核对**实际纳入模型输入**的文本hash;上述两种X3检查补当前原件状态和分享范围。任何所需的权威失联、epoch不符或资源已撤权时,相关原文或获准片段、正式项目写入都拒绝,返回可读缺项,不回退旧缓存。
|
||||
|
||||
后台观察投递采用Backend持久outbox:用户消息的受信入账与消息提交同一存储事务(此时只有message/conversation,可后补run关联);助手最终来源与fenced run收口同一提交;检索/工具若存在仅瞬时输出,先持久最小受信引用/片段或明确`partial`,再允许依赖其作为可确认项目证据。Backend向RDM至少一次投递,RDM以同一键去重;RDM提交ACK后Backend才标已送达,崩溃重放不重复生成。**Backend接收ACK只是观察递送结果,不是RDM项目事实提交回执。** 两仓没有分布式原子事务,界面必须明确`观察待送达/待分析/已形成候选/已发布/失败`。`Message`删除、资源撤权、知识版本变化与run恢复会投递失效/重评,而不会改写旧审计事实。现有历史消息只在可证实原项目、来源及当前授权时安全重评;无可靠绑定不补造项目知识。
|
||||
|
||||
覆盖点是四种实际运行器的**最终结果进入下一次模型请求之前**,不是SSE摘要:direct、SubLLM、Squad和CompiledWorkflow分别在授权检索返回、工具真实结果/工件引用和模型输入组装处适配X3,并用X1实际输入manifest核对实际纳入的来源。当前`runCtx.Retrieve`不发逐命中事件,`PartToolResult`只含摘要;仅接它们无法宣称四路已覆盖。一个运行器若无法提供受信的逐项来源/权限/版本,RDM项目所需的观察状态为`partial/unsupported`,相关项目事实生成或写入停在`pending`;未装配RDM的非项目任务继续既有行为。阶段5逐运行器列出入口与重放用例,不能只测direct就宣称完成。
|
||||
|
||||
## 3. RDM候选、风险与有效事实
|
||||
|
||||
RDM用**同一项目事务库**内的私域候选层记录`sourceRef → 分段/声明 → 标签/相关节点/初步来源边`。每个分段保存原文可回指区间、陈述类型(目标/约束/事实/推断/问题/风险等)、有效/待核实/被取代/忽略及原因,和当前项目分类/字典revision。语义相同的多个发言/助手复述可归并为一个候选陈述,但各自有单独来源边与人物,模型重复不增加证据独立性。原文和候选按owner及资源当前权限读取;搜索命中与助手分析一律先按**未核实候选**处理。未发布的私人原话、低可信搜索、个人草稿与处理中片段不能成为其他成员默认上下文或已批准文档事实。
|
||||
|
||||
候选可以在笔记树的“待核实”视图中定位,并在追溯网形成**候选**来源边;这不等于向现有有效`NoteTree`和正式受控网追加已生效事实。**能读一条私人发言与能向整个项目发布是两种权限。**私人消息/工件的来源拥有者须以实际身份和真人卡向Backend签发上述`SourceExcerptGrant`;RDM记录已验证grantID、sourceID/版本/hash、允许披露的原片段hash/范围、**真人看到并批准的最终公开payload hash**、目标项目与授权epoch,再独立核对项目分享职责。项目自有资源则按其发布职责和资源级权限验证。模型不能代授或靠“在项目会话里”取得分享权。公开项目事实可以是经同意的最小摘要;成员B读该派生摘要只需**Backend原片段grant + RDM项目发布许可**均有效、B具项目权限、实际文本hash等于两侧grant及原来源仍有效,**不需要也不取得A原会话的raw-read权**;私人原文/未获准片段与来源边仍按各自权限隐藏。
|
||||
|
||||
分享授权和必要的人审齐备后,RDM在**同一RDM项目事务**内校验当前sourceHash/分享epoch与资源权限、候选/风险/提案revision及项目CAS,消费一次性真人凭据,把候选转为`published`且相应风险/提案标为已消耗,并写入唯一有效`NoteTree`切片/一般来源边/适用Doc修订、项目revision、幂等回执和项目审计outbox,再提交并发布只读代;失败全部回滚。候选与风险状态必须在同一RDM事务库,不能外置后靠异步补状态。Backend观察ACK不得替代该提交回执,业务提交结果未知先查RDM幂等回执。受控文档还走三权与变更/重审,结构修改复用已批准W4b提案;所有现有正式要求/结构/发布写入口(含`rdm.reqs.add`等)经同一当前风险/来源/权限/版本事务门禁,不能靠宿主早先的`proceed`永久放行。拒绝/忽略保留审计依据,绝不在进度分母中当已完成要求。
|
||||
|
||||
来源撤销、项目分享权收回或对象权限变化后,RDM将对应当前候选及已发布切片标失效/待复核,受影响的需求/文档/网边列出直接与间接待复核范围。**失效outbox只是清缓存/留下审计,不是即时权限门禁**:W7/X1每次新模型输入、当前详情/审计字段披露、候选发布与正式提交、真人答复消费时,对**原始正文**执行Backend当前raw-read ACL;对**已批准派生片段**执行Backend原来源有效状态/撤权epoch及`SourceExcerptGrant`片段范围,并在RDM核对自身项目发布许可、成员/职责revision。B可读被授权摘要但不能读A原会话;任何适用的权威失联或epoch不符即拒绝相关文本/动作。这样Backend撤权已提交但RDM还没收到异步失效事件时,已批准片段也不会继续进入新模型输入。Backend原grant与RDM项目许可均可撤销;RDM项目许可的撤销与项目写事务按同一项目revision串行,跨Backend源撤销与RDM事务无法伪装成单库原子操作,提交点取得的来源epoch须入回执,后续读面仍按当前源权威实时拒绝。**历史批准Word及审计原字节保留**;当前请求若已失去正文或分享授权,服务端不把含受限正文的旧Word完整字节交给该主体,只给受限状态与有权元数据,待有职责的人重新裁定。已发布摘要是否可继续共享由其独立分享授权和当前来源政策决定,不能因曾经可读而默认永久有效。
|
||||
|
||||
风险判断顺序为本片段自检(量纲、比较方向、否定词、条件/主体)、同主题当前可读候选、项目已确认要求与受控基线,再分析对正在做的动作的影响。类型化`RiskFinding`至少有riskID、触发sourceID/版本/片段、相关对象精确版本、规则/模型判断来源、原因、严重度、影响动作、最小披露的选项及状态。规则和模型只提出**风险候选**,不得自签人类确认;不确定即标待分析。判断只能使用当前actor可读的比较对象,不能通过卡片存在、数量或措辞泄露无权私域来源。
|
||||
|
||||
对“要求效率和成本都低于人工”,先提出两个可解释的意思(效率更高且成本更低;完成时间与成本更低)并允许用户明确“效率确实更低”。原句、解释、真实actor/时间/版本与其后正式采纳动作各自留痕。澄清回复消除歧义,不自动通过受控要求或结构变更;正式采纳仍消费绑定项目/提案修订/hash的一次性真人凭据。已按同版本回答的问题不反复打断,来源或相关基线变更后重新判定。
|
||||
|
||||
## 4. 时机、HITL与工作卡
|
||||
|
||||
普通项目用户消息在Backend持久化后、相关run或聊天命令分发前,以**消息ID/会话ID、RunID可空**建立观察回执;同轮同步`Preflight`携带该持久消息快照或等待已完成分析水位。Backend从持久conversation重取项目,不能依赖当前chat命令尚未设置的`HostProjectID`。风险未完成或`partial`时,相关命令不进入`Bus.Dispatch`,相关模型任务不消费该要求为已确认依据;RDM内真正写入时再作事务复验。
|
||||
|
||||
为使“回复前发现风险”与现有运行时吻合,RDM项目工作中的**正文增量先由Backend在受信运行内有界缓冲**,先给用户进度/等待状态;当助手拟答复及其实际来源清单完整,完成风险检查、决定可呈现文本,并通过fenced收口保存最终消息后,才发送第一个该答复的可见正文。Backend为已提交消息生成带MessageID/seq的权威正文事件,**先于`run.completed`的流序号**发送;若提交后事件发送中断,重连按消息ID从存储取回并去重,不能把只有终态事件的run当作正文已送达。发生澄清时,显示提问/卡而不把未核实草稿先流出。旧实现的`message.delta`在`finishRun`之前已可见,故单做收口检查不满足此合同;正常非项目聊天继续现有流式体验。缓冲上限、长回复/客户端重连和首个可见文本等待成本列入阶段5测试,超预算时提示待处理并保留任务进度,不能绕过检查先显示未经确认结论。已流出的旧历史回复不能追溯抹去,只能在后来发现风险时给出可读纠正并阻断**后续受影响动作**。
|
||||
|
||||
检索/工具结果在当次run继续依赖前处理可见引用;direct、SubLLM、Squad、CompiledWorkflow各自有实际结果/模型输入边界,必须经过§2的适配或在项目必需模式下返回`partial/unsupported`。后台细分随后发现较轻风险时创建持久待办卡;新风险水位会使先前`proceed`失效,后续RDM正式写事务不得用旧决定。
|
||||
|
||||
高影响或当前动作必需的歧义:Backend在有run的路径复用`AskHITL`及现有同卡内联/右栏投影,等待时释放执行许可;无run的RDM命令通过同一风险ID生成待澄清卡及受控回执,不执行目标命令。**RDM风险账本是风险决定的唯一持久owner**;Backend ActivityCard只是由`riskID + riskRevision`生成的投影和答复通道,中栏与右栏消费同一个状态。用户点击后,Backend先让RDM在其事务中核对当前sourceHash、目标/风险版本、actor、项目权限与答复幂等键;只在取得RDM已提交决定回执后,才更新卡状态/恢复等待中的run。网络结果未知先查询同回执,不把前端点击本身记为“已确认”;RDM CAS冲突、卡被拒绝/取消/超时、项目切换或权限变化时保持相关动作待处理并显示原因。RDM澄清答复与真正结构/文档批准仍是两次有区别的操作。较轻且不阻碍当前动作的发现可进入右栏待处理卡并在当前对话摘要提示。前端单一异步状态owner按事件seq丢迟到响应;右栏收起时中栏仍可回答。UI沿[DESIGN.md](/home/weichen/projects/Agent-System-Dev-wt-feature-rdm-two-trees-latest-templates/DESIGN.md)三栏与令牌、现有卡及Collapsible原语,不增审批后台。
|
||||
|
||||
提供方超时/崩溃:Backend保留已提交用户消息和投递状态;项目会话的风险判断未知时,相关run/命令保持`pending`,只显示进度和“项目内容待检查”,不输出项目依据、正文或推进项目事实。只有Backend能**确定性识别为非项目、不会读取项目资源也不会写项目状态**的白名单动作(如平台帮助)可独立继续;不能凭模型对“这只是一般咨询”的猜测放行项目会话。重启后根据outbox、来源hash和持久风险状态继续,不能让一次模型在无结论时自行继续旧写操作。捕获/细分有界,超长工具内容只保存来源引用和实际有权限的片段;超过预算列出裁剪原因,不伪造“已分析全部”。旧X1有效上下文只取已确认或当前授权的依据,未决风险可按字段政策显示状态给本人;不得把候选自动放进同项目其他成员的模型输入。
|
||||
|
||||
## 5. 审计、兼容与验证
|
||||
|
||||
RDM保存来源接收、提取候选、风险创建/变更、澄清回复、发布/拒绝/撤销与实际业务效果的操作ID、可信人物与各自时间、原/新状态、依据ref/hash、受影响对象及当前披露。Backend X2只对**已提交的项目业务事实**建立可信宿主审计链接;私人观察、原会话和未发布候选不因有项目ID成为跨成员项目审计。W8服务端输出类型化可读摘要和字段差异,W10以中文业务语言呈现风险/答复/影响,内部观察信封和原始payload不直接下发页面。缺失的旧来源、仅有摘要或不知道是否已呈现的内容明确标“当时未记录/仅有摘要/交付状态未知”。时间字段沿已批准schema2时间来源合同;日志seq与项目revision仍是因果/分页水位,不从墙钟构造全局顺序。
|
||||
|
||||
兼容:X3为可选注册面,未安装RDM的普通非项目流程不变;旧二进制/旧surface不能在RDM声明必须X3时默默退化。候选与风险表采用版本化迁移,先在隔离SQLite/PG副本测v1旧项目/旧消息无绑定、崩溃与重试,真实运行库不执行迁移。可回退旧版本不得解释新候选为正式事实;含新事件的降级按现有schema fencing拒写并保存全部原记录。资源权限和来源撤销须在读/模型输入/真人回答时重验,客户端projectId不构成授权。
|
||||
|
||||
验证应覆盖正常四路每种两项目两成员、一个发言拆多候选、助手复述去重、三个搜索命中逐项处理、工具仅摘要、可见分析产物、项目切换/私域/撤权/删除/恢复、相互矛盾的当前可读片段、先前批准要求与新发言冲突、用户给出的效率例句及三种澄清、误报、伪造确认、无权card、超时、崩溃/重试、旧消息不补造。正反例须额外固定:用户消息已落库但run尚未生成、聊天命令没有`HostProjectID`、outbox未ACK而命令立即分发、`Observe accepted`但风险未分析、某一来源`partial`或offset缺口、同键异hash/两处part、撤权墓碑后旧投递迟到、用户点卡但RDM风险CAS失败、RDM已提交答复而Backend回执丢失、模型正文delta早于最终审查、四运行器各自检索与工具原始结果无法取全。私人发言的读权与分享权交叉测试:A批准发布摘要X后项目编辑改成摘要Y或夹入另一私人来源,未重新向各来源主人展示最终文本/取得同hash授权则发布拒绝;B获准看X仍不能打开A原会话。**Backend来源撤权已提交但RDM失效outbox故意延迟**时,新W7模型输入、当前详情/审计字段、正式发布/写入/HITL答复与旧批准Word的当前披露都须按来源权威实时拒绝,历史字节/事实保留。`rdm.reqs.add`等既有正式写入口也要证明风险提交前复验,不能只测W4b新入口。
|
||||
|
||||
前置风险须以**相关业务事务未提交**和人类回复后恰好一次实际效果证明;带缺口的观察不能给`proceed`,Backend观察ACK不能替代RDM提交回执。中栏的首个可见正文应属于经风险决定、fenced提交的最终消息;浏览器是否实际呈现需客户端可核ACK,不能凭SSE发送推断。不能用“模型说已提醒”判PASS。真实模型前后对照在原48次/300,000tokens/人民币150元总上限内替换任务样本,不另购额度;原44模板、旧事件/审签与已经批准的W0–W4等目标继续各自验证。
|
||||
|
||||
## 6. 受影响分工与下一阶段
|
||||
|
||||
本设计需要新X3 Backend公开观察/前置决定口及受信投递;RDM接四类来源候选和风险账本,沿W4b/HITL确认进入有效两树一网;W7只读已授权有效来源;W8/W9链路只审计已提交事实;W10沿现有卡与审计工作台显示;W12做模型/浏览器真链。W2/W4a与时间修复继续解决事务及重放基础,W3递归文档实例继续使用已合入DHF唯一内容块合同,不因X3设计待评而停工。下一阶段5须确定唯一代码owner、基座组件与RDM的先后、X1/X2/X3同一最终公开surface和tag消费条件、最小回放/成本上限及TT-N03/R01完整证据映射。公开tag发布、真实库迁移、服务部署仍受原边界。
|
||||
|
||||
请评审“Backend受信X3观察和动作前决定、RDM私域候选/项目风险与现有HITL卡、确认后才入有效两树一网”的受影响方案。批准仅进入阶段5增补实施与测试计划,不放行新增公开接口或产品代码。
|
||||
+232
@@ -0,0 +1,232 @@
|
||||
# 两树一网阶段5:实施与测试计划 r1
|
||||
|
||||
记录时间:2026-10-14(Asia/Shanghai);需求负责人/阶段评审人:用户;计划编写:Codex。**待阶段5人工评审**。本计划覆盖已确认的全部28项TT需求和44份DHF Word模板;计划获批前不启动本任务的业务代码、迁移、付费模型测试或部署。
|
||||
|
||||
已批准输入:[阶段3需求与验收条件r1](rdm-two-trees-stage3-requirements-r1.md),SHA256 `d685b9de14e1bd7c19a2a94dfab234c5a942f1281acd113ea924d24887246e15`;[阶段4方案r1](rdm-two-trees-stage4-design-r1.md),SHA256 `568aa26f6b2276f786109e2298b3ae36c6c14d3be5a54e0dfc95bf1b2db4603b`。用户于本聊天 `call_69f62a2617e74bfd93b75a8bef7d9809` 选择“批准方案,进入实施计划(推荐)”。本计划细化方案,不改变DYN-01“提出变更,确认后应用”、保真未通过不发布、成员当前授权或受控文档三权边界。
|
||||
|
||||
## 1. 交付终点和现场事实
|
||||
|
||||
交付终点是**整个目标**:44份新模板逐文件发布核对或有明确阻塞且不伪称已就位;项目专属的细粒度递归笔记/文档结构、经成员确认的动态扩展和版本追溯;同项目成员普通工作自动使用当前有权依据;详尽事实审计与人能读懂的审计页;两项目两成员真实模型、浏览器和故障恢复通过。只做一个试点、只覆盖若干模板或只翻译事件码均不构成完成。
|
||||
|
||||
本轮只读依赖快照:[stage5-dependencies.json](stage5-dependencies.json),记录六仓main、PR、DHF工作区HEAD和文件hash及采集时刻,来源SELF。它用于本计划分工,不是未来最新主干、现行部署或CI证据。`rg --files`当前核对 `.templates/DHF 文件模板/` 仍为44份Word。阶段4审阅时Frontend main已推进,Frontend #73审计导出已合入;RDM #301/#307、Dev #488、Backend #193、Frontend #79、Documents #95、Dev #512仍开放。开始对应代码工作和每次同步前重新获取真实状态;已经合入的导出入口及水位合同要复用。
|
||||
|
||||
DHF独立任务 `feature/dhf-template-assets` 已有单一 `TemplateAsset` / `ContentBlock` 候选与44项资产目录:工作记录为40项needs-review、4项blocked、0项published。其初次E1转换10份,追加E1-R1的4份也生成候选,但其结果仍为 `fidelityGate=NOT_PASSED`、`human_fidelity_review=NOT_REVIEWED`、`publishedAssets=0`。本任务自己的E1曾用另一隔离环境取得14份转换产物,亦未通过保真;这些不同路径的“转换成功”不互相证明。统一以原件hash、工具/派生hash、差异台账及逐文件人工裁定核对,不把双方候选任意合并为已批准资产。
|
||||
|
||||
实施采用既有注册worktree和独立任务分支。Dev此任务R0为`add097d06137c4912a4ed9279e98ca353e4e4cf1`,已纳入较新的main;具体每个新组件任务需从其**启动时权威origin/main**固定各自R0。Dev/Documents阶段记录当前仅本地候选,未形成业务提交或PR。阶段6开始前核对上游、共享现场、活跃任务owner与最初precheck;不接管DHF工作区或把其未提交代码当合入事实。
|
||||
|
||||
### 1.1 本计划的共同约束
|
||||
|
||||
- RDM只通过Backend `pkg/extension` 与Core公开类型交互;不导入Backend internal、不改RDM `pins/`内容。X1/X2公共能力按四要素申请,基座实现测试及其批准的发版tag由用户按双钥匙亲手发布;RDM在真实可消费tag后接线。
|
||||
- 项目ID/资源ID仅定位,不能授权;服务端重验项目成员、动作、资源、职责、状态及有效版本。审计读权不自动给正文,管理员/创建者不自动绕过文档职责。
|
||||
- 结构/字典/模板变更必须有不可变提案修订与实际人工确认;模型或工具自报确认无效。确认与业务事件/回执原子提交;失败尝试和已生效事件分别记。
|
||||
- 旧Section/Doc、引用、批准版和原件不被覆盖。迁移先用**隔离副本**验证并保留可恢复全组合;真实运行库迁移、部署及发布另有审批与执行计划,阶段5批准不直接操作线上。
|
||||
- 前端先读Dev `DESIGN.md`,使用`@ui/tokens.css`、`--fs-ui-*`、`mk-*`与Collapsible;三栏、四个检查入口和唯一文件预览不增冗余页面。异步状态只有一个owner,事件按seq丢弃旧响应。
|
||||
- 命令输出经各仓`make evidence`保留完整SELF收据;正式准入还须精确对象的GATE或独立REPLAY。命令、路径和测试环境在下面各任务核对当前仓版本后使用,不能把文档中的期望写成运行通过。
|
||||
|
||||
### 1.2 实施审阅重点
|
||||
|
||||
| 易漏输入/故障 | 应有行为 | 拥有验证的工作项 |
|
||||
|---|---|---|
|
||||
| CFB头异常、原件可导入但中文分页或图形阅读顺序变化 | 原件保全,候选留needs-review/blocked,发布拒绝且差异可查看 | W1的DOC对照、W11逐资产人工裁定 |
|
||||
| 同名节点、重复块或跨项目父节点 | 稳定ID与来源保持;非法父子/循环拒绝,不靠标题去重 | W3递归/旧数据用例,W4提交前校验 |
|
||||
| 模型以用户身份调用确认工具、过期提案或异参同幂等键 | 无实际人审凭据不生效;旧修订冲突、异参同键拒绝并留尝试记录 | W4人审/CAS/恢复用例 |
|
||||
| 成员撤权后后台恢复携带旧会话中的正文片段 | 实际下一次模型输入剔除已撤权来源,记录删去原因;不得跨项目继续引用 | W6受信作用域,W7恢复/撤权模型输入用例 |
|
||||
| 大批操作跨页、宿主回执迟到、审计员无正文权限 | 一次操作完整展开,迟到回执另有水位;服务端DTO不下发受限字段或泄漏计数 | W8操作分页,W9字段披露,W10真实浏览器/网络检查 |
|
||||
|
||||
## 2. 工作归属、依赖图与增量
|
||||
|
||||
RDM仓代码owner为本目标RDM实施分支;DHF资产、原件/渲染、逐文件评审和Word生成由**原DHF任务worktree owner**继续持有;Backend基座与Frontend/UI各有独立组件分支,Dev只做公开扩展申请、任务主记录和固定组合。两条RDM任务共享`ContentBlock`与`doctree.go`,不得同时在不同未合入分支修改同一权威合同。DHF U1先冻结基础合同并经审核合入;本任务随后从更新的RDM main扩展实例/项目语义。DHF后续U2–U6在本计划中作为同一目标的明确依赖和交付工作:阶段5评审同时确认其继续由原任务owner实施,并要求原任务卡引用本计划及本次批准;此前原任务仅有U1/E1-R1授权,不能由本计划草案自动扩权。
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
P0[W0 冻结44清单与跨任务合同] --> P1[W1 DHF U1资产门禁]
|
||||
P0 --> P2[W2 项目字典与笔记]
|
||||
P1 --> P3[W3 递归实例与旧数据兼容]
|
||||
P2 --> P3
|
||||
P3 --> P4[W4 结构提案与确认事务]
|
||||
P4 --> P5[W5 追溯及影响]
|
||||
P2 --> P6[W6 基座X1公开能力]
|
||||
P6 --> P7[W7 RDM工作上下文]
|
||||
P4 --> P8[W8 RDM审计事实与操作投影]
|
||||
P0 --> P9[W9 基座X2宿主审计]
|
||||
P5 --> P10[W10 正式工作区]
|
||||
P7 --> P10
|
||||
P8 --> P10
|
||||
P9 --> P10
|
||||
P1 --> P11[W11 DHF发布/生成/全44]
|
||||
P3 --> P11
|
||||
P4 --> P11
|
||||
P7 --> P11
|
||||
P10 --> P11
|
||||
P10 --> P12[W12 真实组合及正式验收]
|
||||
P11 --> P12
|
||||
```
|
||||
|
||||
W2、基座W6和W9在W0后可从各自main的兄弟分支并行准备;W9与W6涉及同一Backend公开面时,先合入一个,再同步另一个至最新main并验证最终surface。W8可先完成RDM领域事实,接入宿主回执和界面前必须等W9。W3必须等待DHF U1真正合入并消费其**已核验**合同;不得从DHF脏分支私自复制代码。W11的独立资产整理可与W3–W10并行,发布/生成联调按图中的门禁推进。
|
||||
|
||||
阶段6建议四个可评审增量:A(W0–W4:共享合同、项目结构、动态确认)、B(W5–W7:追溯和成员上下文)、C(W8–W10:完整审计与界面)、D(W11及W12:44模板和全链路)。每增量的产物由用户按阶段6评审;局部自检与同一批准范围内的缺陷修复可继续。阶段7只在全目标候选固定后做正式验收;缺失的W11资产不能被A–C成功替代。
|
||||
|
||||
## 3. 近期工作项:合同、字典、递归结构与确认
|
||||
|
||||
### W0. 冻结共享合同和44份逐文件状态
|
||||
|
||||
- **需求/owner**:TT-T01–T04、D01;本任务RDM owner与DHF任务owner共同核对,业务用途和格式由用户/指定模板负责人裁定。
|
||||
- **范围/文件**:Dev `.templates/DHF 文件模板/`只读;DHF仓 `internal/domain/template_asset.go`、`internal/rdmapp/dhf_assets.go`、`internal/rdmapp/templates/dhf/catalog.json`、`docs/records/dhf/`;本任务既有阶段1附录A与E1报告。仅使用DHF的一份catalog和一套ContentBlock,不复制第二份资产表进运行库。
|
||||
- **动作**:逐文件对齐44逻辑ID、41不同原件hash、阶段/用途、候选docType、来源锚点、版式差异与状态;四份同字节评审原件分别保留用途。明确12个新增/细分候选的命名和旧69型兼容;系统需求研发/项目管理用途、《验证确认报告F02》、有效期/货架寿命及企业固定项须有逐项裁定。以字段/图形/通用重复组补齐共同ContentBlock;冻结schema/消费者兼容策略,未获业务裁定项保持blocked。
|
||||
- **验证**:脚本按原路径和hash比较两份E1输入谱系,不把docx文件存在当保真;校验重复内容不合并逻辑用途、未知/损坏/不适用资产拒绝发布。对照`docs/records/dhf/e1-r1-result.json`的4份候选,确认人工格式仍NOT_REVIEWED。
|
||||
- **完成/停止**:44/44处置行、合同版本、共同owner和未决项负责人明确;发布为0仍可完成合同准备。任一原件hash漂移、两个任务对同字段各有定义或需改变已批准保真要求时,停止受影响写入并返回阶段4/需求重审。
|
||||
|
||||
### W1. DHF U1资产基础合入与保真核对路径
|
||||
|
||||
- **需求/owner**:TT-T01/T02/T03/V01;原DHF任务owner,当前本地候选不作已交付事实。
|
||||
- **范围/文件**:RDM `internal/domain/template_asset.go`、`internal/rdmapp/dhf_assets.go`、`internal/rdmapp/templates/dhf/`、`docs/records/dhf/`及相应测试。后续规范化工具和产物只在其批准的隔离范围工作;原件只读。
|
||||
- **动作**:先完成现有U1回归/Review并按其阶段门禁合入;为图形/批注/修订、字段单位/条件与重复块补同一合同。把最初10份及E1-R1的4份转换稿记为不同工具链的候选,各自记录输入/输出hash。准备可读中文字体与目标Word/Writer人工核对表。已发现的分页、阅读顺序、PDF文本、49字符未定位等逐项分配“修复/人工重建/阻塞”决定;额外试验超出已批E1/E1-R1范围时先提交最小试验计划取得批准。
|
||||
- **验证**:`GOWORK=off go test ./internal/domain ./internal/rdmapp -run 'TestContentBlocks|TestDHF|TestBundledDHF' -count=1`(从RDM仓,按实际测试名调整);检查镜像工具版本、沙箱断网和原件hash;业务人员从原DOC/DOCX与候选逐项对照关键内容/表格/图形/修订及中文格式。
|
||||
- **完成/停止**:U1源代码合入且精确合同可消费;44份均保持真实状态,单份只在其审核绑定原件/结构/渲染hash后published。业务/版式未审、独立来源差异未解决或无可读渲染基线时该资产不得发布,W3的通用结构工作可继续但W11全量出口仍受阻。
|
||||
|
||||
### W2. 项目字典与笔记树扩展
|
||||
|
||||
- **需求/owner**:TT-N01/N02/G03;本任务RDM领域owner。
|
||||
- **范围/文件**:`internal/domain/labels.go`、`notetree.go`、`payloads.go`、`replay.go`、`internal/domain/store/store.go`、`internal/rdmapp/runtime.go`;新增聚焦的项目字典版本、知识挂载服务及测试文件。当前Runtime.Dict/WorldFor的读写路径全部纳入。
|
||||
- **动作**:以固定基础字典版本+projectId作用域的版本化overlay实现阶段/主题/工作事项/子系统/类型/扩展字段;词条稳定ID与显示名分离。保留旧WorkItem→docType映射,旧事件无当时字典版显示历史缺项。笔记本体唯一ID,多树挂载作为关系,结论取代/撤回、问题/冲突/假设独立于正式正文;索引及已发布台账与领域状态分开。项目A写入不能修改B或全局种子。
|
||||
- **验证**:RDM领域与存储测试:两个项目同名异义词、名称变更/废止、五类知识来源、同知识多挂/撤挂、旧事件重放、未知类型拒绝;SQLite和PostgreSQL隔离库各跑一次关键迁移/重放。`GOWORK=off go test ./internal/domain ./internal/rdmapp -run 'TestProjectDictionary|TestNoteMount|TestLegacyDictionary' -count=1`为目标测试名。
|
||||
- **完成/停止**:每项目的有效revision唯一,跨项目互不污染、旧ID与来源可回指。若迁移无法保留旧引用或需要全局运行库重置,停止迁移设计实施并回到阶段4调整;不通过覆盖旧值求过关。
|
||||
|
||||
### W3. 递归文档实例、模板绑定与旧数据兼容
|
||||
|
||||
- **需求/owner**:TT-T02/T04/D01/D04;本任务RDM领域owner;DHF U2消费已合并的实例接口,不平行写另一树。
|
||||
- **前置/文件**:W1已合入、W2字典;RDM `internal/domain/doctree.go`、`payloads.go`、`replay.go`、`internal/domain/store/store.go`、`internal/rdmapp/structure.go`、`runtime.go`、`templates.go`、`docsubmission.go`;必要新增`document_blocks.go`、旧对象映射与服务测试。
|
||||
- **动作**:Doc实例固定templateId/version/原件/结构/渲染hash,模板块ID与实例nodeID分开。递归块支持多级章节/段/字段/表/行/单元/重复组/附件/图形及其输入约束;项目自有节点和模板节点可共存。结构、值、整文批准版各有独立revision;旧Section.ID原样维持为章节节点身份,历史内容保存legacy块,旧批准和职责不改写。旧`StructureApply`按标题去重只用于既有兼容/迁移,不再用于新实例身份。
|
||||
- **验证**:深于五级、同名节点、重复表格、合并单元、图形不透明块、移动/改名保持引用;旧数据库备份副本迁移两次结果同值,未知未来事件拒绝启动写入;已批准版与旧下载仍可回取。`GOWORK=off go test ./internal/domain ./internal/rdmapp -run 'TestRecursiveBlock|TestLegacyDocMigration|TestTemplateBinding' -count=1`为目标测试名。
|
||||
- **完成/停止**:一个真实项目实例可表达新项目建议书及用户需求12组要求,旧ID/replay/批准版保留。解析块上限、适用性未知和缺字段均返回可处理状态;不能通过删除必需项抬高完成率。DHF资产未published时只能验证实例机制,不宣称其正式标准模板已可用。
|
||||
|
||||
### W4. 动态结构提案、人工确认与事务恢复
|
||||
|
||||
- **需求/owner**:TT-D02/D03/D04/T04;本任务RDM领域/应用层owner,UI后续消费。
|
||||
- **前置/文件**:W2/W3;RDM `internal/rdmapp/draftproposal.go`、`tx.go`、`runtime.go`、`internal/domain/eventlog.go`、`payloads.go`、`replay.go`、`internal/perms/perms.go`、`plugins/rdm/plugin.go`;新增`structure_proposals.go`及必要迁移/测试。沿用同一持久提案生命周期,不另设审批中心。
|
||||
- **动作**:kind为content/structure/dictionary/template-upgrade的提案保存不可变revision、baseVersions、差异/理由/证据/影响及payloadHash。真实人确认凭据绑定项目/提案修订/actor/hash,一次性消费;模型工具不能自设confirmedBy。项目事务内校验当前IAM、指定编制职责、结构/模板版本、循环与表格规则、请求digest;同键同请求重放原回执,异参同键拒绝。成功结构+事件+提案状态+回执+outbox同事务;失败尝试单独记录,未知提交结果先查询。全部旧写入口必须通过统一版本约束。
|
||||
- **验证**:资料发布/阶段推进/缺项/模板升级/人工触发;接受、改后接受、拒绝、取消、过期确认、模型冒充、并发两成员、确认瞬间撤权;事务每个故障点中断/重启和超时重试,无半棵树/重复边/双重确认。`GOWORK=off go test ./internal/rdmapp ./plugins/rdm -run 'TestStructureProposal|TestProjectCAS|TestHumanConfirm|TestProposalRecovery' -count=1`为目标测试名。
|
||||
- **完成/停止**:确认前有效树字节/版本不变,确认后一次生效且可重放;已批准正文变化进入既有三权重审。若需改变领域/公开权限契约或迁移语义,暂停受影响实现回到方案评审;与DHF同时编辑同一`doctree.go`时先确定唯一owner和合入顺序。
|
||||
|
||||
## 4. 后续工作项:追溯、上下文与审计
|
||||
|
||||
以下工作保持文件/契约、测试和出口,但阶段5批准后由阶段6增量A–C逐项展开到具体提交,不用“远期”豁免28项。
|
||||
|
||||
### W5. 追溯网、版本端点和影响
|
||||
|
||||
- **需求/owner**:TT-G01/G02/G03;RDM领域owner。前置W3/W4。
|
||||
- **文件**:`internal/domain/tracenet.go`、`compliance.go`、`compliance_rules.go`、`payloads.go`、`replay.go`、`internal/rdmapp/trace.go`、`inspection.go`及相应领域/命令测试。
|
||||
- **实施**:明确UN/SR/DI/设计/风险/软件三级测试/执行结果类型和模板块来源的映射;一般来源边与受控证据边分别保留;受控边锁定两端精确revision。端点升版标待复核,关键影响分析未完不得确认;当时影响快照与当前重算分开,遍历有环路/截断/水位。缺证据不得虚报覆盖。
|
||||
- **验证/出口**:六类完整链与缺项链、端点升版、候选未确认、环和超预算、间接影响、旧版本回查;检查事件重放后的关系/待复核状态及两种影响水位。两网统一读面可解释,无旧边自动升级。
|
||||
|
||||
### W6. 基座公开X1:项目上下文和受信生成入口
|
||||
|
||||
- **需求/owner**:TT-C01/C02/C03/C04;Backend基座owner,Dev负责四要素申请与固定公开面。W0后可准备;RDM消费必须等基座发布tag。
|
||||
- **文件**:Backend `pkg/extension/extension.go`、`host.go`、`surface.txt`、`internal/app/hostcaps.go`、`internal/runtime/llm.go`、`internal/ctxasm/ctxasm.go`、`internal/runmgr/`与store受信项目绑定;Dev文档申请、公开边界和CI测试。
|
||||
- **实施**:可选ProjectContextRegistry注册RDM提供方;Backend从认证会话/持久任务解出actor/project/task/run/step,按预算在普通LLM、后台恢复及受信`CompleteForWork`完成一次注入。提供方只返回当前授权摘要/可再鉴权引用;最终组装及实际输入manifest由Backend唯一持有。无项目/无提供方时正常非项目流程不变;RDM声明必需能力却未装配时明确缺失。
|
||||
- **验证/出口**:非项目兼容、默认项目普通输入、跨项目伪projectId、撤权后缓存/恢复/旧消息片段、摘要超预算和提供方超时。接口编译/宿主注入/资源授权正负例与真实发送给模型的manifest一致;未发布tag不得以本地replace或修改RDM pins消费。
|
||||
|
||||
### W7. RDM上下文提供方与实际依据刷新
|
||||
|
||||
- **需求/owner**:TT-C01–C04/N01/G03;RDM应用层owner。前置W2、W5、W6可消费tag;未达到tag时可做纯领域摘要与测试,但不得宣布自动注入完成。
|
||||
- **文件**:`internal/rdmapp/knowledge_publication.go`、`runtime.go`、`compose.go`、`inspection_visibility.go`、`plugins/rdm/plugin.go`;新增`project_context.go`及测试。
|
||||
- **实施**:项目范围/阶段、任务对象要求、当前已确认结论、未决冲突/缺项和已发布知识来源组成短摘要,按任务相关性渐进ReadEvidence。个人草稿、原始会话、未发布发现和无职责受控正文不跨成员;切换/撤权/废止使bundle失效。Compose仅提供目标约束,调用同一受信生成入口,防止双次注入和旧prompt凭据。
|
||||
- **验证/出口**:两项目两成员普通任务不用@knowledge、项目A特有节点不进B、私域资料不共享、恢复/撤权后从实际模型输入中消失,冲突和裁剪显式出现;source ID/revision/hash和输入manifest可回查。不能仅用`KnowledgeSearch`返回命中证明模型真实看到或使用。
|
||||
|
||||
### W8. RDM审计事实、失败尝试和可读操作投影
|
||||
|
||||
- **需求/owner**:TT-A01–A04/U01/U03/U04;RDM领域/应用owner。前置W4/W5,W9宿主部分可并行落入。
|
||||
- **文件**:`internal/domain/eventlog.go`、`payloads.go`、`replay.go`、`internal/domain/store/store.go`、`internal/rdmapp/tx.go`、`inspection.go`、`inspection_visibility.go`、领域操作/权限入口及服务端测试;新增`operation_audit.go`、类型化DTO/词典与投影索引。
|
||||
- **实施**:项目可信操作/attempt/commit receipt、人物当时名称/职责、各适用时间、对象前后版本/差异/理由/证据、实际直接/间接影响、错误及未知状态。成功事实与领域事件同事务,失败尝试不写已生效事件;宿主回执用可信run关联、幂等摄入并保留延迟状态。按**operation**分页,游标绑定项目/主体/授权epoch/筛选/截止,内部payload绝不直下客户端。旧缺项标“当时未记录”,当前名称只标“当前”。
|
||||
- **验证/出口**:阶段1§7.1六类操作逐动作覆盖矩阵,至少各有成功、拒绝/失败和无副作用实例;网络断开、提交前/后崩溃、outbox重试/重复、人物改名、旧schema、跨页多事件、迟到宿主回执、历史截止、权限字段差异。每个操作能回答谁/何时/做了什么/内容前后/依据/真实结果和影响;不以原始op码或JSON作为业务记录。
|
||||
|
||||
### W9. 基座公开X2:项目宿主审计与可信参与者姓名
|
||||
|
||||
- **需求/owner**:TT-A01/A02/A04/U04;Backend基座owner,Dev四要素申请;W0后可与X1兄弟分支开发,最终按主干顺序同步surface。
|
||||
- **文件**:Backend `pkg/extension/extension.go`、`surface.txt`、`internal/app/hostcaps.go`、`internal/store/audit.go`、相关server/hostcaps测试;RDM `perms`/审计适配消费端。
|
||||
- **实施**:可选ProjectAuditHost按受信项目、actor、resource、run、source offset与截止读取,结合RDM `audit.read`回调和每对象正文权作服务端裁剪;为本操作已验证参与者保存最小当时显示名,不给审计员全账号目录。owner全量审计不当作项目流;缺基座能力返回unsupported覆盖范围。
|
||||
- **验证/出口**:同owner跨项目/两成员、恶意projectId、audit.read无正文、正文无audit.read、对象已撤权/删改、历史、导出和长分页;旧记录不补造字段。RDM消费与W8的domain水位/宿主offset组合不声称天然全局时间序。
|
||||
|
||||
### W10. 正式Frontend与现有工作区
|
||||
|
||||
- **需求/owner**:TT-D02/U01–U04/V03及两树一网可读入口;Frontend owner,UI仅有必要新原语时单独组件PR。前置W3–W9稳定读写合同。
|
||||
- **文件**:Frontend `src/components/RdmAuditWorkspace.tsx`、`src/api.ts`、相应项目/任务工作组件与测试;`e2e/rdm-audit.playwright.ts`及新增结构提案/依据场景。维护已合入Frontend #73的导出与水位,不重造第二下载或预览入口。
|
||||
- **实施**:笔记树/文档树递归懒加载、知识多挂载、工作卡呈现候选差异/影响及确认/拒绝;普通对话显露本次实际依据。审计列表业务中文摘要、人物、时间/结果/对象路径,展开字段差异、来源/确认链/当时与当前影响、权限内证据跳转。旧数据/无权限/部分覆盖/加载/错误可读;右栏收起仍有对话确认路径。页面只消费服务端已裁剪DTO,单一异步状态owner按seq丢迟到响应。
|
||||
- **验证/出口**:`npm test -- --run test/design-guard.test.ts`及相关Vitest;`npm run build`;指向auth-on真实RDM产品组合的Playwright测试(现有`e2e/rdm-audit.playwright.ts`扩展,命令`npm run e2e -- e2e/rdm-audit.playwright.ts`按实际配置核对)。视觉检查浅/深主题、窄屏、长对象名和Collapsible;网络响应不得包含无权正文或原始重放payload。
|
||||
|
||||
## 5. 全量模板、正式验证与交付
|
||||
|
||||
### W11. DHF U2–U6:固定实例、生成、Word和44份逐项发布
|
||||
|
||||
- **需求/owner**:TT-T01–T04/D01/D04/G01/V01–V03;原DHF任务owner。阶段5批准若覆盖此跨任务工作,原任务卡先引用本计划及批准对象,再在原登记worktree继续;不得由本任务或另一分支并发改写资产目录。
|
||||
- **前置/文件**:W1已合入,W3/W4/W7接口已就绪;DHF既有方案U2–U6涉及RDM `templates.go`、`templates_embed.go`、`structure.go`、`compose.go`、`draftproposal.go`、`docsubmission.go`、`docx.go`、`doc_export_visibility.go`、`plugins/rdm/plugin.go`、模板包及`docs/records/dhf/`。Frontend消费W10的同一状态/预览路径。
|
||||
- **实施顺序**:U2不可变发布包、显式用途绑定及实例化;U3有依据的逐块生成与真实编制人采纳;U4固定批准快照的原模板槽位渲染、受控下载和历史文件持久保存;U5正式RDM产品的对话/预览/离线包;U6按文档族扩至44逻辑资产。试点用项目建议书、系统需求和F02压力样本,但试点成功只放行该文档族后续,不替代全量完成。
|
||||
- **保真与发布**:每份保留原件、转换派生、结构、渲染与review绑定hash;人工逐项裁定内容、蓝字/斜体/黑字示例、图形、表格/合并、页眉页脚、编号、关键格式与中文可读性。公司固定文字/项目示例、IQ/OQ/PQ/F02用途和旧DOC 49字符未定位单独列裁定。任何未通过项保持needs-review/blocked。可批准人工重建结构/槽位的替代路线,但须有同等级原件对照,不静默降标。
|
||||
- **验证/出口**:每个发布资产一个有真实合成材料的正常样例与一个缺证据/冲突样例;在RDM真实产品运行“对话→生成候选→编制人采纳→审核/批准→固定Word→预览/下载”,三用户职责及撤权通过;旧批准Word在短期工件TTL后字节hash不变。`GOWORK=off go test ./internal/domain ./internal/rdmapp ./plugins/rdm -run 'TestDHF|TestTemplateBinding|TestApprovedWord' -count=1`及`make test`/`make product`或当前真实构建入口辅助验证。44/44均有逐文件结果;**目标完成需要适用且已发布的资产全部通过**,blocked条目明确保持目标未完成,不将44/44“登记”误写为“可用”。
|
||||
- **停止条件**:新转换试验超过既有授权、原件hash漂移、槽位有歧义、关键格式无可读基线、人工语义结论缺失或旧批准文件保全失败,立即停止对应资产发布;其他已授权独立工作可继续。
|
||||
|
||||
### W12. 全目标组合验证、模型行为与正式验收
|
||||
|
||||
- **需求/owner**:TT-V01–V03及全部28项最终证据;Dev协调者、各组件测试owner和用户阶段7审阅。
|
||||
- **场景矩阵**:至少项目A(软硬件结合、用户需求12组、已发布知识/受控文档)与项目B(不同阶段/主题、私域资料、不适用模板规则);每项目两名普通成员,另有文档编制/审核/批准职责的三个真实测试身份。覆盖新建/模板升级、项目自有扩展、提案拒绝/改后接受/确认、并发/失败/重启/撤权/项目切换、UN→SR→DI→设计→测试及风险链、当时/当前影响、可读审计与权限内证据跳转。
|
||||
- **域/数据库**:SQLite与隔离PostgreSQL各完成迁移/重放/幂等;测试备份含原库、模板包、附件和批准Word,注入迁移中断/回滚/未知新schema、两实例并发写及旧二进制拒绝。没有可用PG环境则标NOT_RUN并阻塞对应正式验收,不以SQLite替代。
|
||||
- **真实模型**:改前/改后同一合成任务集,在已经配置且有明确费用上限的隔离模型环境运行;普通工作不加@knowledge,检查实际最终ContextManifest、输出引用/缺项、项目/私域边界、恢复撤权及错误引用。基线`modules/backend/eval/live/`可复用公开HTTP和usage统计,但它的旧用例默认自动选择首个HITL选项;本任务新提案用例**必须禁用自动确认**,由测试操作者用真实用户身份和绑定修订的显式确认动作完成。模型自述不能充当实际输入证明。
|
||||
- **模型试验资源边界**:拟最多48次任务运行(24个改前+同任务24个改后),全部模型总usage不超过300,000 tokens且费用上限人民币150元,三个上限任一先到即停。用不含生产/个人秘密的合成项目材料;每次调用前确认所选实际模型的可计费规则与剩余额度,运行时逐次累加usage。无法获得可信费用/usage数据或配置需更改时停止收费调用,保留NOT_RUN并提交修订预算;不自动购买额度。正式模型使用本计划经阶段5批准后才授权,除此之外的付费模型调用另行批准。
|
||||
- **浏览器/产物**:构建固定Backend/Frontend/RDM组合和模板包,在auth-on隔离实例做真实浏览器流程;包括右栏收起、窄屏、审计筛选/操作跨页/历史、无权网络响应、唯一预览、文件字节和DHF逐文件状态。浏览器证据记录运行制品hash、组件/pins/配置及实例身份;Vite预览不能代替实际产品。
|
||||
- **正式命令/出口**:各仓当前HEAD的`make test`及`make build`;Dev `make test`+`make build`及适用`make test-backend-pg`/`make test-lifecycle`/真实组合检查,缺必需服务为失败或NOT_RUN并阻塞;RDM `make product-smoke`与包外运行。阶段7先`make task-sync`固定候选,按需求ID→工作项→检查→当前SHA/输出形成矩阵,由用户审阅正常/异常/边界/回归与缺项;SELF不升级为CI/独立REPLAY。
|
||||
|
||||
### W13. Review、PR合入、组合核验和收口
|
||||
|
||||
- **owner/顺序**:组件分支各从权威`origin/main`启动;DHF U1和公共X1/X2先过各自Review/CI并在获准条件下合入,RDM消费经用户发布的真实基座tag,Frontend固定UI/Core契约,最后RDM产品与Dev组合。若确需堆叠按仓库`PARENT/PARENT_PR`登记,父先合、子同步回main;同一共享文件由单一owner串行,不跨任务隐式接管。
|
||||
- **准入**:阶段6每增量有人审,阶段7固定候选后有人审;阶段8由智能体审阅者重放最小关键集并解决问题;阶段9在同一目标窗口核验最新base/head/精确pins/必需当前HEAD CI与平台准入后智能体合入,不另请人工点击。相关审计导出/水位和工作发现PR若先合入,重新评估契约及受影响测试。缺CI/失败/取消/跳过、Review失效或基座tag未就绪均不合入依赖PR。
|
||||
- **结果核对**:查询真实PR merge SHA和实际组件指针;核对RDM制品内模板包、Frontend bundle、Backend API与被测候选一致,产品浏览器再现主要路径。部署和生产迁移另经明确授权;阶段10回收前核对全部写者退出及本任务/DHF唯一成果,外部备份stash/原件/收据有处理清单,不强删工作区。任务卡归档及闭合PR按既有门禁完成。
|
||||
|
||||
## 6. 横向覆盖与完成判据
|
||||
|
||||
以下表格将28项需求逐一绑定工作项及证据;阶段5批准后按实际代码/测试版本在任务卡更新。每项的产品测试状态当前都是NOT_RUN。W0/W1的SELF资产现状、E1产物和本计划不能替代正式功能/模型/浏览器证据。
|
||||
|
||||
| ID | 负责工作项 | 最小实际证据 |
|
||||
|---|---|---|
|
||||
| TT-T01 | W0/W1/W11 | 44原件hash、逻辑用途、发布门禁和包外读取 |
|
||||
| TT-T02 | W0/W1/W3/W11 | 多级块、表格/图形/修订/示例的44份原件对照及人工格式结论 |
|
||||
| TT-T03 | W0/W3/W11 | 不同项目适用规则、未知/不适用确认与进度分母 |
|
||||
| TT-T04 | W3/W4/W11 | 模板/实例/批准版三层hash及升级历史 |
|
||||
| TT-N01 | W2/W7 | 知识唯一ID多挂载、来源、结论取代及问题登记 |
|
||||
| TT-N02 | W2/W4 | 项目A/B扩展隔离、旧标签与重放 |
|
||||
| TT-D01 | W1/W3 | 递归混合块、稳定ID、移动/同名与旧Section兼容 |
|
||||
| TT-D02 | W4/W10 | 各触发、确定人工确认、拒绝/重启/改后接受 |
|
||||
| TT-D03 | W4/W12 | 并发CAS、幂等、事务失败、重启后零半态 |
|
||||
| TT-D04 | W3/W4/W11 | 三权职责、状态及旧批准版本保持 |
|
||||
| TT-G01 | W5/W11 | 一般来源和受控UN/SR/DI/风险/软件验证链及缺边 |
|
||||
| TT-G02 | W5/W8 | 端点升版待复核、直接/间接影响与水位 |
|
||||
| TT-G03 | W0/W2/W5/W7 | 人工/规则/模型/文件/网络来源与精确锚点 |
|
||||
| TT-C01 | W6/W7/W12 | 两项目成员普通工作实际输入,无@knowledge |
|
||||
| TT-C02 | W6/W7/W12 | 按需读取、预算裁剪、冲突/缺项及不可信来源 |
|
||||
| TT-C03 | W6/W7/W9/W12 | 发布/私域/职责、跨项目/撤权/恢复无泄漏 |
|
||||
| TT-C04 | W6/W7/W12 | 最终输入manifest、版本/水位与恢复刷新 |
|
||||
| TT-A01 | W8/W9/W11 | 六类逐动作覆盖及宿主缺项 |
|
||||
| TT-A02 | W8/W9 | 当时身份/时间/内容差异/依据/确认/影响字段 |
|
||||
| TT-A03 | W4/W8 | 成功、失败、拒绝、取消、部分完成、未知与实际效果一致 |
|
||||
| TT-A04 | W8/W9 | 受信run/宿主关联、迟到回执、历史缺项诚实出口 |
|
||||
| TT-U01 | W8/W10 | 中文业务摘要/前后差异/影响;默认无原payload |
|
||||
| TT-U02 | W5/W8/W10 | 对象标题路径、权限内锚点及唯一预览 |
|
||||
| TT-U03 | W8/W10 | 按操作分页/完整归组、筛选、历史/迟到响应 |
|
||||
| TT-U04 | W8/W9/W10 | audit.read与正文权限交叉及网络/导出投影 |
|
||||
| TT-V01 | W0–W13 | 需求→当前精确对象→正常/异常/恢复证据矩阵 |
|
||||
| TT-V02 | W6/W7/W12 | 真实模型前后对照与实际依据使用 |
|
||||
| TT-V03 | W10/W12/W13 | 真实浏览器、设计守护、精确组合和当前HEAD CI |
|
||||
|
||||
完成声明须同时满足:44份原件各有经过内容/格式审核的可发布资产及明确适用范围,并在各自适用项目完成生成/审签/Word对照,blocked项清零;一个项目选择“不适用”不能豁免整份资产的交付;项目差异结构及真实人工确认;默认成员授权上下文;完整且可读审计;旧数据/并发/撤权恢复;两项目两成员真实模型和浏览器;当前精确组件与CI/REPLAY/阶段7审阅。哪项缺证据就标NOT_RUN/未达目标,不把局部增量说成整个两树一网完成。
|
||||
|
||||
## 7. 停止、变更和评审事项
|
||||
|
||||
| 触发 | 动作与责任 |
|
||||
|---|---|
|
||||
| 原件、合入的DHF合同或公开扩展与本计划不同 | 负责owner锁定真实SHA和差异;等价细节在阶段6内自检修订,改公开契约/数据/权限/技术路线则回阶段4评审 |
|
||||
| DOC或44资产关键保真无法核对 | DHF owner保留blocked及完整差异,继续不依赖该资产的工作;新试验提交范围/隔离/预算获批后执行,不降低零关键静默丢失条件 |
|
||||
| 同一文件有两个未合入写者/共享工作区脏 | 保留各自现场,指定唯一owner与合入顺序;不强制清理、覆盖或偷用另一分支结果 |
|
||||
| 凭据、真实模型费用或隔离环境不满足预算 | 停止对应模型/浏览器/测试,不补写PASS;用户审阅具体缺项和调整后的资源方案 |
|
||||
| 历史数据、批准文件或权限边界无法保全 | 停止迁移/交付受影响增量,保留备份/固定对象与错误收据,回设计/计划受影响节点重审 |
|
||||
| 组件base/head、tag、schema或CI定义改变 | 重新判断已有证据与批准有效性;阶段7–9按当前目标同步、补测/复审并核验全部必需检查 |
|
||||
|
||||
请在阶段5评审时同时确认:W0–W13的依赖和四个阶段6增量、DHF U2–U6仍由原工作区owner交付并在其任务卡引用本计划、48次/300,000 tokens/人民币150元的模型上限,以及仅在隔离副本进行数据恢复演练。批准本计划才进入阶段6;业务代码、真实模型、浏览器、CI交付和部署在本文编写时均未执行。发布基座tag、真实运行库迁移及部署继续遵守各自明确授权边界。
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
# 阶段5增补实施与测试计划:普通工作来源与主动风险澄清 r1
|
||||
|
||||
记录日期:2026-10-14(Asia/Shanghai)。状态:**待人工评审**。用户在本聊天 `call_a6853c4232f34285a6cbae19dfbeeec5` 第0项批准[受影响阶段4方案r1](rdm-two-trees-stage4-work-observation-risk-design-r1.md),固定 SHA256 `c9edb25c1decbbcb31220ef0cec8703c37e4aaa87bee31eb308169000b335d8c`,只授权形成此阶段5计划。需求依据是[阶段3增补需求表r1](rdm-two-trees-stage3-work-observation-risk-requirements-r1.md)的 TT-N03、TT-R01;[原阶段5计划r1](rdm-two-trees-stage5-implementation-test-plan-r1.md)的 W0–W13、原28项与已批准实施保持有效。本稿获批前不写 X3 产品接口或据此执行收费模型任务;阶段6现有 W2/W3/W4a/时间等不受影响的工作继续。
|
||||
|
||||
## 1. 交付范围、owner 与依赖
|
||||
|
||||
本增补把“观察到、分析完、允许分享、成为项目事实、实际进入模型输入、相关业务动作已提交”分别设为可观察状态,不能用任一中间 ACK 代替后一步。新增 X3 是 Backend 可选公开能力,基座仓 owner 负责来源可信身份、持久 outbox、四运行器接入、同步动作前屏障和最终消息显示时序;RDM 仓 owner 负责来源切片、候选/风险账本、项目权限、HITL 回执、有效两树一网与审计。Frontend 仓 owner 负责在现有工作台呈现来源状态、澄清卡与可读影响;UI 仓仅在已有原语不足时由组件 owner 单独改动。Dev 仓 owner 固定跨仓合同、gitlink、任务卡与组合证据。DHF U2–U6仍由原工作区 owner 续办,新增观察能力不得代替44份逐文件验收。
|
||||
|
||||
实施依赖按实际发布关系而非旧本地探针判定:
|
||||
|
||||
1. Dev 与 Backend owner 先核对最新 `origin/main`、X1/X2 的真实公开状态、已有迁移号和 surface;Backend 在其登记任务工作区实现 X3,并把 X1/X2/X3 合成一份可测试公开面。当前 `d9b00c2` 只是本地 X1/X2 组合探针,不能被 RDM 当已发布 tag 消费。新 X3 与 X1/X2 的 owner、迁移、surface 冲突在 Backend 最终候选里解决,按原仓 Review/CI 处理;正式 tag 仍由用户亲手发布。
|
||||
2. RDM 可先在隔离分支实现不依赖 X3 的候选/风险纯领域逻辑及 SQLite/隔离 PostgreSQL 测试;只有 Backend 最终公开 tag 真正存在、RDM `go.mod` 与 Dev gitlink 指向该固定版本后,才接入受信观察与宣布端到端可用。W2 字典、W3 文档实例、W4b 真人结构确认、W5 追溯网是正式入网的前置业务能力;来源候选可以先落账,但不能假扮这些工作已完成。
|
||||
3. W7 消费被确认、当前授权的候选和 X1 实际输入 manifest;W8 输出类型化审计;W10 使用同一 RDM 风险状态及 Backend 卡投影。W12 在固定组件 SHA 后做两项目两成员、真实模型、真实浏览器与故障注入。每个独立仓先执行自己的 precheck/task-start 或已登记 task-resume;相互依赖的代码顺序推进,共享工作树只允许其当前 owner 写。
|
||||
|
||||
## 2. 工作包、可审查出口与测试
|
||||
|
||||
| 包 / 关联需求 | 唯一代码 owner 与范围 | 局部完成条件和必须重放的测试 |
|
||||
|---|---|---|
|
||||
| X3a 受信信封与事务投递 / TT-N03 | Backend:`pkg/extension` 公开可选 registry、运行/消息持久化、资源/检索引用、outbox 和迁移;RDM只消费公开包 | 用户消息入库时 RunID 可空、命令从持久 conversation 取项目;最终助手 MessageID/seq 与观察同 fenced 收口;每来源/part 有稳定 ID、source版本/hash、actor、时间、scope、处理状态。崩溃前后/重复投递、同键异hash、缺 part/offset、撤权墓碑后迟到事件、跨项目伪造都有确定结果;旧无绑定消息不批量补造。SQLite 与隔离 PG 的失败注入须证明消息/outbox 原子和不丢源。 |
|
||||
| X3b 实际四路捕获与前置屏障 / TT-N03/R01 | Backend:direct、SubLLM、Squad、CompiledWorkflow 的检索/工具真实结果边界、模型输入组装、聊天命令入口、SSE 收口 | 每路分别用三条命中、工具原始结果及只留摘要反例,逐条核对实际给模型的片段和输入 manifest;未知全文标 `partial/summary-only`。本轮用户消息已提交但 outbox 未送达、`Observe accepted` 未分析、缺口/提供方超时均阻止相关模型/命令和后续项目写入;重试恢复恰好一次业务效果。项目回复正文先完成风险决定与 fenced 最终消息提交,再按 MessageID/seq 发首个正文,且先于 run.completed;断线重连不重影。测缓冲上限、长文本、延迟和零项目读写白名单,不能从旧流式 delta 推断通过。 |
|
||||
| R3a 来源候选、双重分享权 / TT-N03 | RDM:项目事务库候选/切片、sourceRef、去重与失效、Backend 受信原件/派生片段检查;Backend owner 实现 SourceExcerptGrant 和权威状态查询 | 一段话拆两要求,用户/助手复述只聚合语义但保留各自来源;搜索 URL/查询/时间/片段、可见分析结论与依据可回指。私人 A 原会话仍只给 A;A 经真人卡批准确切原片段和**最终将公开的文本/hash**,Backend grant 与 RDM 项目发布许可均有效后 B 可读派生摘要 X,却不能打开 A 原会话。X 被编辑成 Y、混入第二私域来源、任一 grant 撤回、源删除/修订或 Backend 权威不可用时,新输入/详情/Word 当前下载/正式写入均拒绝受影响正文;历史批准字节保留。撤权 outbox 故意延迟仍不泄漏。 |
|
||||
| R3b 风险判定、HITL 与业务门禁 / TT-R01 | RDM:同库 riskID/版本/证据/状态、规则与可选模型候选、事务 `Preflight`/`Respond`;Backend 复用现有 AskHITL/ActivityCard 并等待 RDM CAS 回执 | 先查片段的量纲/方向/条件,再比当前可读候选、正式要求、基线;“效率和成本都低于人工”在正式写入前同轮澄清三种意思,不擅自更改原句,也不把它自动判死为矛盾。卡点击只有 RDM 回执提交后恢复 run;回执丢失按同键查询,迟到答复/撤权/版本变化不得套用。风险澄清与 W4b 正式一次性确认分离;`rdm.reqs.add` 等旧正式入口与新入口同做提交前源状态、风险、actor、权限、项目/目标版本复验。误报、忽略、拒绝及动作零生效各有记录。 |
|
||||
| R3c 已确认上下文、追溯与审计 / TT-N03/R01 | RDM W5/W7/W8,Backend X1/X2 owner 维持真实来源/宿主链接 | 仅已确认且当前有权、来源状态有效的节点/片段进入普通成员下一轮模型输入;私域候选可给本人显示待审状态,不变成跨成员有效事实。发布/取代/撤权列出直接和间接网边待复核。审计分开保存观察、候选、风险/答复、确认、实际效果的人物、各自时间、前后差异、依据、影响及未知项;私人观察不因项目ID自动进入跨成员宿主审计。审计服务端 DTO 只投当前可见字段及中文摘要,旧缺项如实显示。 |
|
||||
| F3 可读工作台 / TT-N03/R01 | Frontend owner;按需 UI owner | 中栏与右栏同一 riskID/revision,一处回答另一处同步,右栏收起仍可答;来源分段显示候选/待分析/受限/失败、锚点和受控操作,不显示原始审计 payload。单一异步状态 owner 按 seq 丢弃旧事件;跨项目切换、撤权后卡片/详情/网络响应不泄露私人正文。修改界面前读 Dev `DESIGN.md`,字号/颜色/圆角用 UI tokens、动效用 motion、折叠用 Collapsible,通过两仓 design-guard。 |
|
||||
| V3 固定组合验收 / TT-N03/R01 及原28项 | Dev 组合 owner;各组件 owner 提供当前 SHA 与证据 | X1/X2/X3 真实公开版本与 RDM/Frontend/Dev 精确 pin、Backend/RDM/Frontend 各自直接测试、`make test && make build`、当前 HEAD 的 CI/独立 Review、真实浏览器和受限模型对照均记录命令×SHA×输出。缺某仓 tag/接线、只见局部 SELF、模型自述“已提醒”或只见 SSE 发送,均不得判端到端 PASS。 |
|
||||
|
||||
X3a/X3b 与 R3a/R3b 的公开接口和数据库迁移若实施中改变阶段4职责、权限或时序,先形成受影响设计修订并人工评审;等价的局部缺陷修复仍在阶段6已授权范围内继续。所有版本化迁移只在隔离 SQLite/PG 副本实施,先验证含旧记录恢复及降级 fence;真实运行库迁移和部署不在本计划授权内。
|
||||
|
||||
## 3. 分层场景和测量方法
|
||||
|
||||
**确定性场景。** 每路捕获与RDM领域测试至少包含两个项目、两个普通成员、一个受控文档成员;四类来源各有相关/无关样本、同一源多切片、搜索三命中一条仅摘要、分析产物有/无可见依据、助手复述去重。来源身份/权限矩阵覆盖原始会话、派生摘要、项目成员、audit.read、文档职责和撤权;客户端伪造 projectID/actor/confirmed、搜索页提示注入、同键异参、单个 part 缺失、outbox 乱序、Backend/RDM 崩溃、风险 CAS 丢回执和旧历史缺项都须保留可重放输出。权限测试检查 HTTP/模型输入/浏览器网络正文,不能只验页面隐藏。
|
||||
|
||||
**风险样本。** 固定例句“三种解释”,再覆盖同主题不同周期数值、单位相反、与批准章节冲突、无证据助手建议、伪造用户确认、真允许效率较低、正常无关句及私域不可比较对象。断言必须是:在受影响写入前同轮可见澄清或待处理卡;回答前实际项目事务零提交;有权真人澄清、必要 W4b 正式批准后恰好一次生效;原句/答复/actor/时间/版本/影响可读审计;误报、暂缓、重启、撤权、卡片迟到响应保持正确状态。无权主体只见不泄露原句或隐含对象存在的阻塞状态。风险规则/模型为候选,不能自签批准。
|
||||
|
||||
**真实性和性能。** 对比实际来源逐项处理完成率、风险前置提示/误报、模型最终输入 manifest、阻断前是否有实际效果、用户可读审计。记录每路消息提交至首个可见正文的 p50/p95、缓冲峰值、outbox积压及重放耗时,用隔离样本报告成本与未达场景;本计划不虚构固定性能阈值,超预算时应保持待处理且提供进度。浏览器证明中栏、右栏、折叠、断线重连与审计字段投影;SSE 发出不等于浏览器已显示,若验收需确认可见送达,使用客户端 ACK/可复核浏览器记录。测试数据为合成内容,不把私人或生产原文送至收费评测。
|
||||
|
||||
**真实模型预算。** 继续消耗原 W12 的**同一总额**:最多48次任务运行、累计300,000 tokens、人民币150元,任一先到即停;将指定歧义、跨来源冲突、无关/误报、撤权后的输入刷新替换进原24组前后对照,不新增48次额度。逐次记录模型、配置、输入/输出 manifest、usage、价格依据、累计费用和 SHA;拿不到可信 usage/费用即停止付费调用,标 NOT_RUN 并提预算修订。阶段5获批后才可按这个总预算执行新场景;不能用模型的自我宣称替代事务、UI 和来源证据。
|
||||
|
||||
## 4. 需求到证据与评审出口
|
||||
|
||||
| 稳定需求 | 固定方案和工作包 | 阶段6/7可判定证据;当前状态 |
|
||||
|---|---|---|
|
||||
| TT-N03 | 阶段4§2–3;X3a/X3b、R3a/R3c、F3、V3 | 四来源逐项最终状态、源ID/版本/hash/span与实际检索引用;候选/分享/授权交叉、同义去重、撤权及恢复、下一轮当前模型输入 manifest;两项目两成员浏览器与固定组合。产品链 **NOT_RUN**。 |
|
||||
| TT-R01 | 阶段4§3–5;X3b、R3b/R3c、F3、V3 | 指定语句与风险样本的同轮提示/卡、业务零提交及真人后恰好一次、原话和答复分离审计、无权/迟到/重启/误报/流式前置屏障;真实模型和浏览器。产品链 **NOT_RUN**。 |
|
||||
| 原 TT-N01/G03/C01–C04/D02/D03/A01–A04/U01–U04/V01–V03 受影响行 | 原阶段5矩阵保持;本稿 R3/F3/V3 增补逐来源及动作前条件 | 原证据仍逐项有效但不能覆盖新增来源和风险;阶段6实施记录补每个当前代码 SHA 与失败/未执行项,阶段7全目标候选统一核验。 |
|
||||
|
||||
每个工作包给出 owner、固定代码 SHA、直接相关命令及完整脱敏输出、局部结果和未执行项;Dev 任务卡只用 `make evidence` 导入完整 SELF 收据,CI/独立重放分别标 GATE/REPLAY。阶段6按原 A–D 增量评审:X3/R3 的新候选可提前隔离开发,但新增 TT-N03/R01 不因原增量 A 局部通过而宣告完成;当其真实组合可审查时同相应受影响增量提交人审,阶段7再对30项统一验收。Review/PR/合入依 `policy/delivery.md` 的阶段8–9和当前 HEAD CI;真实迁移、基座 tag、部署各守原边界。
|
||||
|
||||
**停止条件。** 任一来源没有可信绑定/原件、Observe 与风险处理水位不一致、私域许可不全、来源权威无法重验、已有正式入口绕过事务门禁、项目可见正文早于风险决定/最终消息提交、完整源被截断却标完整、风险卡以 Backend 点击代替 RDM CAS、或费用/usage无法核算,停止受影响业务动作及相应通过声明,保留状态和可读原因。局部检测到这些失败先修复和重放;若需改变已批准阶段4接口/权限/成本边界,则形成修订送相应阶段人工评审。
|
||||
|
||||
请评审此增补实施与测试计划。批准仅将 TT-N03/R01 的 X3/R3/F3/V3 本地实现、隔离测试与原预算内模型评测纳入阶段6,不等于批准真实库迁移、发布 tag、部署、增量验收或全目标完成。
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
# 阶段6受影响设计修订:跨成员项目宿主审计关联 r1
|
||||
|
||||
记录时间:2026-10-14T11:44:03.481784+08:00。状态:**待人工评审**;影响已批准阶段4方案§8.3 X2及阶段5计划W9/W8的公共合同与测试。阶段1–3范围、DYN-01、W2项目字典、W6上下文和W9已批准的安全局部不变。W9尚未完整交付,跨成员已提交业务操作的关联功能在本修订获批前不写入正式公共API。
|
||||
|
||||
## 发现和证据边界
|
||||
|
||||
Backend当前 `command_audit` 是owner/会话日志。W9隔离分支通过正负例发现:仅以会话当前projectId连接旧行,可能在会话后来转移时重归属旧操作;若对持`audit.read`者返回同项目全部行,还会暴露别人的**私有会话**。W9正在将新审计行在写入时固定可信projectId,owner仅看自己的项目绑定命令,旧无快照行明确not-recorded。这是安全且可审的局部能力,**不能**作为完整跨成员项目审计。
|
||||
|
||||
已批准X2设想按受信项目和RDM `audit.read`查询宿主回执,但当前Backend没有“某条宿主命令确实对应已提交、可共享的项目业务操作”的可靠关联。`project_event_shares`与`command_audit`缺少共同的sourceEvent/operation关联;会话项目绑定只证明定位,不证明该会话内容已发布。这个缺口影响TT-A01/A02/A04、TT-U04、W8/W9/W12;若不补,用户不能可靠审阅同项目另一成员实际推动的命令/后台操作。
|
||||
|
||||
此结论基于源码及W9当前隔离分支的SELF测试结果;未将其标为已合入或生产验证。W9当前可继续完成固定项目快照、owner私域读取、缺项coverage与负例;跨成员扩展等待本修订结论。
|
||||
|
||||
## 方案选择
|
||||
|
||||
| 路线 | 后果 | 决定建议 |
|
||||
|---|---|---|
|
||||
| 会话当前projectId + audit.read直接共享全部命令 | 私域泄漏且历史归属可变 | 拒绝 |
|
||||
| 永远只读owner自己的命令 | 安全,但缺少同项目已提交业务操作的宿主追溯 | 保留为W9首段能力,不能满足完整目标 |
|
||||
| 对**已提交项目业务事实**建立受信宿主链接,仅共享经字段授权的回执 | 需要新增最小公共写/读合同和幂等索引;可区分私域与项目事实 | 推荐;补齐W9而不重做owner日志 |
|
||||
|
||||
## 建议合同
|
||||
|
||||
在X2基础上增加可选`ProjectAuditPublisher.PublishProjectAuditLink`。申请四要素为:
|
||||
|
||||
| 要素 | 内容 |
|
||||
|---|---|
|
||||
| 场景 | 成员A确认结构/文档/关系等项目业务操作后,具项目`audit.read`且获对象披露许可的成员B可看到此操作相关的真实工具/后台结果;A的普通个人会话不因此共享 |
|
||||
| 希望的公开符号 | 可选`ProjectAuditPublisher.PublishProjectAuditLink(ctx, ProjectAuditLinkRequest)`及`ProjectAuditLinkVerifier`注册回调;扩展`QueryProjectAudit`只返回owner自有行或已验证链接允许披露的项目行,附coverage和稳定分页水位 |
|
||||
| 既有接口不足 | 原`Host.Audit`只写owner日志;会话/项目当前关系不能证明业务提交或可共享性;RDM事件outbox与Backend命令审计缺同一可信关联键 |
|
||||
| 兼容性 | 全部为可选加法接口,旧Host和旧记录不变;无新能力时`coverage=cross-member-unsupported`,未链接旧行不自动回填成项目事实;不修改RDM pins或导入Backend internal |
|
||||
|
||||
链接请求最少含:Backend固定的hostAuditOffset/受信owner+项目,RDM已提交的domainCommit或Backend已提交的projectEvent来源种类与sourceID,operationID、resourceKind/resourceID、runID、disclosureClass和幂等键。**客户端、模型或未受信插件不能自行宣布已提交/可共享。** Backend验证原审计行属于同一owner与当时projectId;RDM注册的校验器以RDM存储核验source event已提交且项目/主体/操作/资源一致;Backend自身项目事件用自己的持久事实验证。只有受信执行链能申请链接。
|
||||
|
||||
索引按hostAuditOffset+sourceKind/sourceID保存不可变关联及项目、操作、资源和披露级别;同绑定重复幂等,异绑定拒绝,不重复增加业务效果。查询端先校验当前project `audit.read`,再调用领域资源披露判定:metadata、内容差异、历史正文、导出分别独立授权。无权正文的字段在服务端不下发;必要时隐藏对象是否存在与计数。普通owner私有会话仍只属于本人,不能只因它有projectId就出现在共享列表。
|
||||
|
||||
领域事务先提交业务事件和待投递outbox;后台把真实hostAuditOffset与domainCommit绑定并可重试。Backend不可达或查询结果未知时,RDM保留领域事件与“宿主链接待核/未知”状态,先查幂等回执后恢复,不回滚已经成功的业务提交,也不伪称宿主证据不存在。日志和索引使用各自source offset及RDM commit水位;完整操作分页在RDM投影层完成,不假定两来源有统一天然seq。
|
||||
|
||||
## 数据、授权及回归判据
|
||||
|
||||
- 新审计行写入时固定当时可信projectId;旧没有可信快照/提交链接的行保持owner私域或历史缺项,不按今天的会话归属回填。
|
||||
- 两成员同项目:A私有会话命令对B不可见;A确认并提交的结构操作经可信链接后,B若有`audit.read`且可看对象元数据则可读授权摘要;正文/差异按当前资源权裁剪。
|
||||
- 会话项目从P1转至P2后,历史链接仍固定P1;P2审计读面不能见P1旧操作。成员撤权、文档职责变化、对象废止和下载另作字段及访问复核。
|
||||
- 重复投递、同key异link、outbox部分失败、链接前/后进程退出、旧schema、跨页大批次及迟到链接均保留真实结果;不泄漏其他项目/owner,时间排序不伪造跨源提交顺序。
|
||||
- 发布合同前在Backend `pkg/extension`给出公开接口/负例,RDM在自己任务中提供验证回调及投递适配;Frontend只消费RDM已裁剪的可读DTO。精确版本及三仓组合测试、真实浏览器和独立重放保留阶段5计划门禁。
|
||||
|
||||
## 受影响工作与评审出口
|
||||
|
||||
W9现有安全切片可以本地提交并进入阶段6增量C的候选;它的coverage必须明示跨成员未覆盖,不能报W9整体完成。**本修订获批后**再增加链接写/读、W8领域outbox适配、W10页面的已授权关联展示,按W12两个成员与私域/撤权场景验证。阶段5原预算与44模板工作范围不变;阶段7仍须完整TT-A/U证据。
|
||||
|
||||
请评审上述推荐的“已提交项目事实建立可信链接”合同。若否,需给出同等安全且能让项目有权成员审计真实跨成员业务操作的替代方案;不能以owner私域切片或会话当前项目连接宣称完整目标已实现。审批仅放行此受影响公共合同与相应测试,基座tag发布仍由用户按双钥匙亲手执行。
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
# 阶段6 Backend X1/X2 组合验证探针 r1
|
||||
|
||||
记录日期:2026-10-14。来源:本地 SELF 与两位独立只读审阅者的限域源码核对;**不是 CI/GATE、正式阶段7验收、已合入代码或已发布组件**。组合探针工作树 `/home/weichen/projects/Agent-System-Backend-wt-feature-rdm-two-trees-backend-combination-probe`,分支 `feature/rdm-two-trees-backend-combination-probe`,固定 HEAD `d9b00c23c818bfc4a8d8233c845266fabd863137`,未推送或建 PR。
|
||||
|
||||
## 对象与组合
|
||||
|
||||
| 来源 | 固定对象 | 作用 |
|
||||
|---|---|---|
|
||||
| Backend 权威 `origin/main`,组合前实际 fetch | `8e80e2618eb7471dd12d5f172ff3cd23622b7d2f` | 已有账号审计迁移 v31;主仓工作树未接管/未改写 |
|
||||
| X1 成员工作上下文候选 | W6 `d8129abead96be7c35ab2650e949ac817745e786` | 可信项目上下文、逐项来源复验、去原文回执及候选库清理 |
|
||||
| X2 项目宿主审计候选 | W9 `130ac344aaba988026fbc497c9548cdb59f5774f` | 固定项目审计、可信已提交链接及 PostgreSQL 全写入截止门禁 |
|
||||
| 仅本地组合探针 | `d9b00c23c818bfc4a8d8233c845266fabd863137` | 合并上述来源、解决共享文件冲突并验证;原 W6/W9 分支未修改 |
|
||||
|
||||
冲突保留两边意图:`hostcaps` 同时装 `contexts` 与 `projectAudit`;扩展 surface 同时列出 X1/X2,探针版本 `2.19.0-experimental`;离线复制同时保留 work task、context manifest、workflow step source 与 project audit link。迁移编号在探针中为 v31 `account_audit`,v32–v36 X1,v37–v40 X2;各迁移名称按顺序唯一。原已发布主干 v1–v31 名称与探针一致,独立未发布候选因复用 v31 等编号但名称不同,不能被当成已应用的另一套 DDL。
|
||||
|
||||
针对这一真实三方冲突,探针还加了 `(version,name)` 整账本校验:Backend 打开库时、`MigrateDown` 开始前及 `storage-migrate migrate` 打开目标前均拒绝同号异名源库。RED 证明原本会接受/执行错误下游步骤;新测试在探针 HEAD 通过。这个保护是**探针新增代码**,尚未进入 W6/W9 各自分支或主干。旧未发布候选数据库会安全拒绝,而不是自动重解释;若其中有需保留的独有数据,须在原版本隔离环境备份、净化和制定显式迁移/处置,不用数字碰巧相同来升级。当前两支候选未部署,未对真实库执行迁移。
|
||||
|
||||
## 本地检查与证据
|
||||
|
||||
三份完整脱敏原始收据已通过 Dev `IMPORT_RECEIPT=… make evidence` 原样写入 `.task/feature-rdm-two-trees-latest-templates.md`,均为 `SELF`,命令打印组合探针前后完整 HEAD 及 clean 分支状态:
|
||||
|
||||
| 检查 | 收据 | 结果范围 |
|
||||
|---|---|---|
|
||||
| `AGENT_PG_TEST_DSN=… go test ./... -count=1` | `/tmp/backend-combo-full-pg-d9b00c2-20261014.json` | 隔离 PostgreSQL 18.6 上 Backend 全包测试 exit 0;包含 SQLite 常规回归与有 PG 条件的测试 |
|
||||
| PG 定向 `go test -race` | `/tmp/backend-combo-race-d9b00c2-20261014.json` | store/app/runmgr/storage-migrate 的项目上下文、审计、候选清理和迁移负例 exit 0 |
|
||||
| `go vet ./...` + 两个静态构建 | `/tmp/backend-combo-build-d9b00c2-20261014.json` | Backend 服务与迁移工具编译 exit 0 |
|
||||
|
||||
非空 `work_task_bindings` 与 `workflow_step_sources` 的 SQLite→隔离 PG 复制,已在同一组合探针测试中从实际源行经各自读接口取回;审计链接与 manifest 亦有复制/对账测试。隔离 PG 只绑定本机 `127.0.0.1:55445`,测试后已停止;源码外目录 `/tmp/backend-combo-pg-20261014-Pkl5O2` 暂保留供核查,不是服务或真实数据库。独立限域审阅核对迁移顺序、两个注册槽、surface、离线复制列和固定收据,未发现探针新增高影响问题。
|
||||
|
||||
## 未完成与后续门禁
|
||||
|
||||
组合探针不能代替 W6/W9 各自从新主干同步、正式 PR 的 exact head/base、当前 HEAD CI 和平台独立批准;版本冲突的最终解法须在实际合入顺序下重做并复验。RDM W7 的真实提供方、W8 的领域操作/outbox/操作级分页、Frontend 人可读审计页面、44份模板发布、真实模型/浏览器与阶段6/7人工结论均未在本探针中完成。发布 Backend tag、迁移真实运行库、部署和清理仍遵守原授权边界。
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# W6/W9:基座公开扩展申请 r1
|
||||
|
||||
依据:用户已批准[阶段4方案](rdm-two-trees-stage4-design-r1.md)与[阶段5计划](rdm-two-trees-stage5-implementation-test-plan-r1.md);当前处于阶段6实施。负责人:Dev/Backend公开面owner;领域策略与消费由RDM负责。此文是**实施申请与接口边界**,不是已发布surface或运行通过证据。Backend分支分别实现X1与X2,最终按最新主干串行同步其公共surface并做组合核验。
|
||||
|
||||
## X1:普通工作自动取得当前项目依据
|
||||
|
||||
| 必需四要素 | 申请内容 |
|
||||
|---|---|
|
||||
| 用户场景 | 同项目的成员在正常对话、文档编制及后台任务中,无需手写`@knowledge`即可使用当前有权、已确认的两树一网事实;项目/任务切换、撤权与恢复后依据及时刷新。实际模型输入须可审计。 |
|
||||
| 希望的公开符号/路径 | Backend `pkg/extension`新增可选`ProjectContextRegistry`注册RDM提供方,提供方受信作用域中`Resolve`短摘要与`ReadEvidence`按引用渐进读取;可选`WorkCompletionHost.CompleteForWork`供RDM编制入口使用。Backend统一组装最终模型输入并持久化`ContextManifest`,附资源版本、来源、预算/裁剪和权限/发布水位。 |
|
||||
| 当前组合为什么不足 | `Host.KnowledgeSearch`仅owner/项目检索,普通`runtime/llm.go`仅在显式`@knowledge`时注入;`runmgr`个人Memory不是可共享项目依据。`Host.Complete(ctx,prompt)`只有字符串prompt,不带可信任务绑定;`AddCommandHandler`只在被调用时执行,不能保证普通对话/后台恢复每次得到当前依据。 |
|
||||
| 兼容方式 | 新增可选接口和类型,不给现有必实现`Host`/`Registry`强加方法;非项目会话原行为不变。RDM要求该能力时缺失明确不可用,不退化为默默无项目依据。Backend从认证会话/持久任务解析actor、hostProject与run/step,验证RDM项目映射,不能相信模型或请求体自报projectId;权限/资源确认在注入前和恢复前复验。 |
|
||||
|
||||
安全与测试:ProjectContextBundle只含当前允许的概要、要求、已确认结论、未决冲突和可再鉴权引用。草稿、未发布发现、个人会话及无职责正文不可因同项目身份泄漏;`ReadEvidence`不可接受任意owner/路径。跨项目ID、撤权后旧摘要/旧历史片段、缓存复用、后台恢复、超时和预算截断都必须有负例。Backend记录**最终送入模型**的对象/版本/摘要hash与裁剪,RDM不能以候选检索列表冒充实际输入。Compose只提供任务约束,由Backend独占最后注入;无可信工作作用域的普通`Complete`不能读取项目共享正文。
|
||||
|
||||
## X2:按项目读取真实宿主审计及当时人物
|
||||
|
||||
| 必需四要素 | 申请内容 |
|
||||
|---|---|
|
||||
| 用户场景 | 追溯审计要把领域操作与实际模型/工具/后台任务/run/取消/失败/投递事实关联,向有权成员展示人物、时间、动作、内容与影响,而不是只列RDM结构事件码或owner全量命令日志。 |
|
||||
| 希望的公开符号/路径 | Backend `pkg/extension`新增可选`ProjectAuditHost.QueryProjectAudit`,以受信项目、actor、资源、操作/run、过滤与source offset/截止读取类型化HostAuditReceipt;支持RDM的`audit.read`领域授权回调及按对象/正文权限的服务端字段投影。写入时可绑定本操作已核验参与者的最小当时姓名/职责快照;不返回账号全目录或联系方式。 |
|
||||
| 当前组合为什么不足 | 现有`Host.Audit`只写owner名下事件;owner维度查询不能证明项目归属、当前项目`audit.read`许可、文档正文权或run资源关联。RDM领域事件DTO没有完整宿主执行、失败尝试和当时身份字段,Frontend无法凭op/detail安全推算。 |
|
||||
| 兼容方式 | 公开可选Host接口及类型,旧部署返回明确`coverage=unsupported`并保持旧入口可用,不伪称完整;事件和已有审计存储不直接改写。RDM旧历史缺失字段标“当时未记录”;新读面按项目/主体/资源/权限快照服务端裁剪,不能先下发原payload再在前端隐藏。 |
|
||||
|
||||
安全与测试:项目/资源/run归属来自Backend受信存储,不接受任意客户端projectId当授权。`audit.read`仍受项目许可,上下文、历史、导出、下载及正文差异分别受当前资源权控制。对于同owner的两个项目、两个成员、审计权无正文权、已撤权历史、恶意ID、长分页及迟到宿主回执做正负例。RDM领域`seq`与Backend source offset不假定全局全序;操作级归组在RDM只读投影完成,Backend提供真实来源及截止。
|
||||
|
||||
## 交付约束
|
||||
|
||||
W6与W9分别从Backend权威main创建独立任务工作区,独立提交/测试/人审;两者都可能改`pkg/extension/extension.go`和`surface.txt`,合入第一个后第二个同步主干、解决语义冲突并重跑受影响检查。各自按所在仓实际启动门禁工作;Backend独立开发核对clean与权威origin/main同步,Dev父任务用evidence原样保存命令×Backend SHA×完整输出的SELF收据,不强制虚构Backend的task-start或任务卡。SELF测试不提升为GATE。公开surface/API契约须有后向兼容测试及精确版本;RDM只有在基座获批准的真实发布tag可消费后接线,不导入Backend internal、不改RDM pins内容,也不自行执行需用户双钥匙的tag发布。
|
||||
|
||||
本申请不改变成员权限上限或自动批准结构;RDM项目字典/结构提案由另一个工作项负责。阶段6增量仍须人工评审,项目级审计/上下文真实能力由后续功能与浏览器/模型证据证明。
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
# 阶段6受影响设计修订:领域时间持久化与历史缺项 r1
|
||||
|
||||
记录日期:2026-10-14(Asia/Shanghai);状态:待人工评审。关联 TT-D03、TT-D04、TT-A02、TT-A04、TT-V01;在 W4a 读取隔离之后、W3 之前闭合当前时间重放缺口,W8/W10消费同一时间来源规则。批准前只调查、记录和补充失败用例,不修改生产时间或事件版本语义。
|
||||
|
||||
## 事实与影响
|
||||
|
||||
固定 RDM 提交 `8f80e55a4dade05d0445426bd7ac02818aeeac39` 的 `TestLegacyEventReplayPreservesWriteTime` 使用每次前进一分钟的确定性时钟:Slice 写态为00:01、事件/重放为00:02;章节 Version 为00:05/00:06;普通边为00:07/00:08。三项 SELF RED 的命令、固定对象和原始输出保存在 [RDM任务卡](/home/weichen/projects/Agent-System-RDM-wt-feature-rdm-two-trees-project-dictionary/.task/feature-rdm-two-trees-project-dictionary.md),收据摘要 `c255f389636465ea`。这是一种放大偏差的测试钟,不是线上实际存在一分钟偏差的证明。
|
||||
|
||||
原因是领域对象和事件分别取钟,而事件载荷没有保存领域对象那次取钟结果。重启、另一Runtime冷读或历史导出根据事件重放,无法恢复原写态时间。已批准的读取隔离可以保住同一canonical代,却不能补回事件中从未记录的字段。
|
||||
|
||||
另一个固定源码问题涉及数据完整性:`LoadWorldFromStore` 和 `LoadWorldForProjectDetached` 以末事件At作为完整装载的截止,而 `ReplayAt` 遇到第一个晚于截止的事件就停止。seq递增但时钟回拨时,前一个事件At可能晚于末事件At,冷装载会提前结束。该判断目前为独立源码审阅发现,需先补确定性RED再修;不能以“墙钟一般递增”豁免完整装载。
|
||||
|
||||
固定源码另有下列同类路径;除前三项外,表中的风险由源码检查确认,仍须补实际用例,不把静态检查写成运行通过。
|
||||
|
||||
| 对象/字段 | 当前写侧与重放行为 | 本修订处理 |
|
||||
|---|---|---|
|
||||
| Slice.IngestedAt、Section.Version.At、普通 Edge.At | 对象先取钟,事件另取钟;重放用Event.At | 新事件保存对应领域时间 |
|
||||
| Slice/Section删除时间 | 先写本地删除标记,再Append;重放用Event.At | 保存删除时间;成功Append后才更新私有投影 |
|
||||
| Conclusion删除、普通Edge退役时间 | Append成功后另取钟;重放用Event.At | 先固定本次领域时间并入事件;成功后应用 |
|
||||
| CEdge.At、ComplianceSnapshot.At | 独立取钟;载荷缺本体时间,重放用Event.At | 保存本体时间,不改快照ID和已有内容hash算法 |
|
||||
| OpenItem.OpenedAt/ClosedAt | 独立取钟;重放用Event.At | 保存打开/关闭时间,失败不发布状态 |
|
||||
| ReviewCard.At | 提交时取钟;重放构建卡未赋时间,得到零值 | 新submit载荷保存提交时间;旧缺项保持未知 |
|
||||
| Conclusion创建、CNode创建/升版 | 成功Append后已以Event.At回填;重放也用Event.At | 保留这个已一致的合同,加入对照用例 |
|
||||
| 同版本CNode元数据更新(VR被测版本、ARC登记SOUP) | 写态保留原节点At/Actor;复用OpCNodeAdd,重放却取这次更新Event.At/Actor | 新事件明确区分新节点版本与同版本元数据更新;更新保存并重放原节点At/Actor,实际修改者仍由本次Event.Actor记录;创建/升版保持现有定义 |
|
||||
| FormalRevInfo.At、Requirement.At、RegClaim.At及外部来源FetchedAt | 已保存显式领域/来源时间 | 保留原值与含义,回归验证;不统一替换成Event.At |
|
||||
|
||||
这不声称已经查清其他所有重放元数据问题;本增量针对时间字段及CNode同版本更新中与之不可分的原主体字段,完整人物、理由、影响仍由W8的覆盖矩阵验证。原节点主体与本次修改者分别保存,不能用修时间的机会覆盖当时人物。
|
||||
|
||||
## 推荐方案与取舍
|
||||
|
||||
推荐**保存新操作真实取到的领域时间,并保留独立事件时间**。给上述缺失字段增加类型化载荷,采用事件schema 2的显式要求;不通过改变旧事件或在读取时重新取当前时间让测试转绿。延续已有Formal/Requirement载荷保存时间的做法,比把所有时间改成Event.At更符合不同字段的业务含义。
|
||||
|
||||
备选“所有新领域时间统一Event.At”可减少载荷字段,但改变现有字段的取时含义,且无法覆盖法规获取等外部时间;不推荐。本修订不改变已有一致路径,也不增加另一套事件存储。
|
||||
|
||||
时间含义必须明确:
|
||||
|
||||
- 领域时间是服务端执行相应领域动作时所取的UTC时刻,或既有合同允许的外部来源时刻。新增字段由受信写入代码生成,模型/请求不能任意填充最终操作时间。
|
||||
- `Event.At` 是构造该事件时的时间,发生在持久sink调用和项目事务提交之前。它不是已证实的数据库commit时间,也不自动等于用户点击、真人确认或外部事实发生时间。
|
||||
- 新事件载荷保留领域时间及原精度,写态、提交后投影、重放和导出使用同一保存值;不通过JSON往返复制当前状态,不按本机时区改写历史。
|
||||
- 事件顺序/操作原子性仍由seq、operationId、项目revision与事务保证。时钟可能回拨,多实例时钟可能有偏差,不把墙上时钟当全局提交顺序,也不强制领域时间小于Event.At来拒绝真实记录。
|
||||
|
||||
完整库装载和固定seq水位重放必须按seq应用全部被选定的已提交事件,不得以末事件At或当前墙钟再截断。时间点查询须验证请求能对应一个连续、完整操作的seq前缀:如果根据At选择会在前缀中留下空洞或把操作切开,应明确报“该时间点无法唯一定位,请使用操作或版本”,或沿用已经明确约定的操作边界归一化;不得跳过后续更早时间的事件后声称还原完整。全部事件均落在查询时间内时仍可按seq完整回放,不因存在回拨就拒绝完整读取。时间字段保存和历史选择是两个独立测试面。
|
||||
|
||||
## schema与兼容边界
|
||||
|
||||
事件schema从当前1推进到2,使用现有 `events.schema_version` 字段,不改写历史行或增加时间列;另以存储迁移安装最低写版本门禁。具体载荷使用与领域属性对应的类型化字段;需要时间的schema 2操作必须具备合法、非零的对应字段,`review.submit`明确要求卡提交时间;没有领域时间的操作不人为增加空时间。已按Event.At定义的结论/CNode创建保持该定义,CNode同版本更新明确携带原时间/主体并校验操作种类及目标版本;原主体允许缺项时显式区分“已记录为空”和“字段缺失”,不伪造姓名。已有显式Formal/Requirement/RegClaim字段延用原合同。
|
||||
|
||||
新写事件由EventLog显式设置schema 2,Store不得把调用者传入的0自动升级成2。历史合法版本固定为1;现有数据库迁移给旧行默认值1,现有Store写入也曾把未设置版本保存为1,所以不能把任意零值当成已证明的旧事件。加载、项目事务重建、`ReplayAt`/序号历史重放/导出均校验支持的事件版本;0、负数、未来版本、schema 2未知操作或损坏的必填时间立即报错,不返回半棵树,不跳过该事件继续写。旧手工夹具应显式标记其实际版本1;若隔离副本检查发现真实历史零值,保留原件并登记来源后另作专用兼容处理,不自动改行或猜测版本。回放错误包含事件seq/操作类型和缺失字段,不回显正文。
|
||||
|
||||
已知但由其他投影负责的操作不等于未知操作。例如 `change.requested/approved/applied` 由 `fc.ReplayChanges` 消费,World当前不直接改树;新校验须使用固定已知操作白名单和明确的投影分工,继续容许这些事件通过World重放,并验证独立ChangeSet重放。禁止把通用默认分支直接改成拒绝而误伤已知操作;也禁止用通配前缀把任意未知操作都放行。schema 2的领域时间要求按上述具体操作/action执行。
|
||||
|
||||
兼容规则按字段判定,不能仅凭旧schema断言所有时间缺失:旧Formal等确有载荷的时间仍属已记录事实;旧缺失字段沿用既有Event.At回退值,使既有历史投影保持兼容;旧ReviewCard.At原本为零则继续表示未记录。**回退值是兼容投影,不是恢复了原领域时间。** 不写旧载荷、不重算旧事件hash、不回填猜测值,也不从ID中的数字反推快照原操作时间。
|
||||
|
||||
仅提高常量不能阻止已经启动、持有缓存的旧程序继续写schema 1。推荐同次SQLite/PG存储迁移设置最低写事件版本2,并对所有在线`events INSERT`执行数据库版本门禁;旧连接、显式schema 1及省略版本而落到旧默认值1的写入均拒绝,失败随原事务回滚。门禁限定BEFORE INSERT,不能用会同时约束旧行UPDATE的CHECK误阻现有 `MigrateLegacy` 归属更新;既有v1读取/归属迁移仍需通过。新应用启动也校验数据库最低版本和迁移版本是否受支持;旧程序遇已有schema 2时须保留其拒绝行为。门禁安装与版本状态更新原子完成,迁移失败不留下半启用状态;PG迁移要与活动事件写入互斥,SQLite迁移使用真实写事务。PG函数DDL须作为完整语句执行,不能经当前按分号切分的通用脚本处理器拆坏函数体;迁移编号以实施时权威基线后的空闲编号为准。
|
||||
|
||||
此DB门禁只保证事件INSERT,不声称阻止旧程序修改成员/项目等其他业务表。真实升级切换仍须停止旧写者并核验进程版本,不能用事件trigger代替完整部署隔离。普通旧DOC/资料入库是今天的新操作,应写schema 2并在来源字段保留原件时间,不属于“旧事件复制”。
|
||||
|
||||
旧数据复制不是在线Append。本修订不增加运行时绕过开关;历史事件应在停写的隔离目标中按原字节导入,完成校验后再原子安装新写门禁,或由已核验的离线迁移工具在排他事务完成等价流程。现有完整备份恢复后仍保留门禁;直接导入新记录到在线项目不得伪装旧历史。适配现有复制入口前先查源码,没有真实入口时只做隔离副本恢复演练,不能声称已交付在线导入能力。DB管理员直接删门禁不在普通应用写者保证内。
|
||||
|
||||
运行库升级/回退不在本次授权内;安装最低写版本门禁或含schema 2事件后,不能直接用旧二进制继续写该库。回退须保留全部新数据、确认读写兼容并另审处理方案,禁止删除新事件或降低门禁来掩盖不兼容。
|
||||
|
||||
## 审计显示与历史完整性
|
||||
|
||||
W8服务端按字段输出时间值、来源和缺项解释,W10用人能读懂的文字展示:新载荷时间显示相应动作时间;旧Event.At回退显示“事件生成时间;原操作时间当时未记录”;不存在任何可信值时显示“当时未记录”。已有准确载荷时间照常显示,不给整条旧操作笼统贴不准确标签。
|
||||
|
||||
来源必须关联具体事件seq/op/schema/action和字段,区分载荷原值、事件时间回退、未记录;可由投影读取原事件或由重放器给出等价来源元数据。不能仅凭两个时间值相等推断来源,因为合法新领域时间也可能恰好等于Event.At。
|
||||
|
||||
原始payload仍仅用于内部重放。页面不直接显示schema编号/JSON,不把Event.At改名成commit时间;详细操作生成、开始/结束、确认、提交和接收时刻只有各自真实记录时才能显示。时间来源由服务端从固定事件事实派生,不信任模型自由文本,也不改变审计权与正文权边界。
|
||||
|
||||
## 实施与可判定验证
|
||||
|
||||
由W2/W4a原分支owner在读取隔离完成后实施,避免多人并改domain文件。顺序为固定新RED → 载荷/版本兼容修复 → 写侧与重放对齐 → 隔离库/跨Runtime恢复验证 → 独立复审。无需等待DHF模板发布,W3仍须等待唯一U1合同实际合入。W8/W10后续消费时间来源规则。
|
||||
|
||||
1. 保留当前8f80旧缺口证据。将新写态与重放一致性用例转为schema 2正例;另用固定原始schema 1事件构建旧历史用例,证明回退和未知标记,不把“旧原始时间不可恢复”的事实改成假通过。
|
||||
2. 对表中全部缺失路径先建立确定性时钟RED,随后比较写态、同进程新读、第二Runtime、关闭重开、历史导出和完整事件重放的字段;覆盖创建、修改、删除、退役、打开/关闭、审核提交/终批以及新旧混合事件。
|
||||
3. 测试新字段缺失、零值、无效格式、未来schema、非法schema0/负数、schema1历史、新旧时间已有/缺失组合;SQLite及隔离PG均在任何部分投影发布前拒绝损坏事件。旧/新change事件同时通过World和独立ChangeSet重放,真正未知操作按新合同拒绝。测试旧读者拒绝schema 2、写事务因历史不支持而零提交;使用迁移前已打开的旧连接模拟旧写者,分别显式写schema 1、零、缺省值,验证所有在线写法被DB门禁拒绝。新schema 2正常写入、v1归属UPDATE、迁移失败回滚、并发旧写者、隔离旧历史复制后启用及备份恢复均须实测,不凭常量推断结果。
|
||||
4. 失败sink、事务回滚、CAS冲突和未知提交结果不发布新的领域时间/成功操作;保留原有操作时间、事件seq、ID和审签数据。提交重试从既有回执恢复,不能重取钟伪造第二次成功。
|
||||
5. 两事件seq递增但At递减的确定性RED,分别覆盖全量/项目冷装载、重启及固定seq历史导出;修复后完整应用所有已选事件。时间点查询覆盖全部包含、空洞和切开操作,空洞不能静默成功。非UTC输入的既有外部时间、相同时间多个seq、不同时钟精度均不导致排序改写或丢行;完整操作截止仍以seq水位验证,时间接口无法判定时明确报错。
|
||||
6. 新旧固定事件字节/hash基线保持;新字段经持久化后的精度/时区按既有UTC序列化合同验证。`go test ./...`、相关race、SQLite/隔离PG测试及构建形成固定SHA SELF收据,独立审阅者重放最小集。W8/W10完成时再验证最终中文显示及权限裁剪,当前领域修复不冒充页面已交付。
|
||||
|
||||
本修订需要用户确认,因为它明确新增持久化字段、事件版本和旧历史时间解释,属于 `policy/delivery.md` 要求人审的数据合同变化。批准仅放行隔离分支实施和测试;阶段6增量A人审、阶段7验收、正式CI、合入、真实迁移与部署仍按原门禁。
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
# W0:44份模板与唯一资产目录对照 r1
|
||||
|
||||
记录:2026-10-14T11:34:31.197445+08:00;来源SELF。DHF工作区HEAD `d32dc8fb6dffdd52fa33d53bcb7e802fe705a919`,目录工作树状态 `clean`;目录原字节快照SHA256 `e5088653010dd30219f465c35bebd40fe44509d60820333bab1bf7717f963c6a`,保存在源码外 `/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage6-w0-catalog-snapshot.json`。
|
||||
|
||||
本表逐文件验证了本任务来源台账、当前Dev原件、目录中的原件hash、来源提交对应Git对象及候选docType的一致性。它只证明资产**身份和字节来源**,不证明结构/适用性/格式经人工批准。DHF原工作区由原owner继续,当前本任务没有修改其目录。
|
||||
|
||||
结果:44/44路径、hash和候选类型一致;41个不同原件SHA256;44个不同逻辑templateId。当前目录状态 `{'needs-review': 44}`,适用性人工确认 0/44。目录中所有资产仍无已批准发布结论;有未决问题者不得发布。
|
||||
|
||||
| 序号 | 阶段与原件 | 原件SHA256 | 逻辑模板ID | 类型候选 | 当前目录状态 | 未决问题 |
|
||||
|---:|---|---|---|---|---|---|
|
||||
| 1 | 0. 商务阶段 / 0.1初始要求申请表.docx | `eb9d28701491` | `dhf.a7850d18814bc8ba` | `bd_intake` | needs-review | classification, fidelity |
|
||||
| 2 | 1. 策划阶段 / 1.1、731QCP29-F01 项目建议书 02.docx | `3f54f060d9c5` | `dhf.2750fbaf1f67d10c` | `rd_proposal` | needs-review | classification, fidelity |
|
||||
| 3 | 1. 策划阶段 / 1.2、731QCP29-F02 设计开发计划任务书 02.docx | `d152b0b4d2bb` | `dhf.d2f75aedd6dcf8b7` | `rd_design_plan` | needs-review | classification, fidelity |
|
||||
| 4 | 1. 策划阶段 / 1.3、731QCP29-F07 设计开发(策划)评审记录 02.docx | `d6f3cca9c3c1` | `dhf.8848f283d317f027` | `rd_planning_review` | needs-review | classification, fidelity |
|
||||
| 5 | 2. 设计输入阶段 / 2.10.1、731QCP29-F13 配置管理计划 02.docx | `94e8e7fc868d` | `dhf.e9a9112aa2852eef` | `rd_sw_config` | needs-review | classification, fidelity |
|
||||
| 6 | 2. 设计输入阶段 / 2.10.2、软件维护计划模板.docx | `76fc4d4fddec` | `dhf.ca12336e5b75ed30` | `rd_sw_maintenance_plan`(新/细分候选) | needs-review | classification, fidelity, type-mapping |
|
||||
| 7 | 2. 设计输入阶段 / 2.11.1、731QCP29-F16设计输入规格书模版.docx | `3fef2ed7d0aa` | `dhf.ceb63a04cb0c2fbb` | `rd_design_input_spec` | needs-review | classification, fidelity |
|
||||
| 8 | 2. 设计输入阶段 / 2.12、731QCP29-F05 设计开发输入清单 02.docx | `de990de6bf13` | `dhf.3b89d5608cf50699` | `rd_design_input_list` | needs-review | classification, fidelity |
|
||||
| 9 | 2. 设计输入阶段 / 2.13、RDDHF0213-xxxx产品系统设计方案.doc | `8168ea37c7ca` | `dhf.1f7e7cee081218f5` | `rd_system_design` | needs-review | classification, fidelity, doc-normalization |
|
||||
| 10 | 2. 设计输入阶段 / 2.14、731QCP29-F07 设计输入评审记录.docx | `a3677cb06a39` | `dhf.4a26f4b618141021` | `rd_input_phase_review` | needs-review | classification, fidelity |
|
||||
| 11 | 2. 设计输入阶段 / 2.1、731QCP29-F14 用户需求模板.doc | `2f9c6795f811` | `dhf.1e44e6e91bb1ff19` | `rd_user_needs` | needs-review | classification, fidelity, doc-normalization |
|
||||
| 12 | 2. 设计输入阶段 / 2.2、RDDHF0202-xxxx 医疗器械法规和标准清单.docx | `2b36daeedc8c` | `dhf.09be7a246cf575d3` | `rd_regs_stds` | needs-review | classification, fidelity |
|
||||
| 13 | 2. 设计输入阶段 / 2.3、RDDHF0203-xxxx 同类产品不良事件信息.docx | `f7cd69b08c1e` | `dhf.fa7eba95ef189eb5` | `rd_adverse_events` | needs-review | classification, fidelity |
|
||||
| 14 | 2. 设计输入阶段 / 2.4、731QCP29-F15 系统需求规格书模板.doc | `b58d1b900c95` | `dhf.ab9245edad538328` | `rd_system_reqs` | needs-review | classification, fidelity, doc-normalization |
|
||||
| 15 | 2. 设计输入阶段 / 2.5、731QCP29-F07 需求评审记录表.docx | `102ed2b6418b` | `dhf.9b9e08868a513bf7` | `rd_req_review` | needs-review | classification, fidelity |
|
||||
| 16 | 2. 设计输入阶段 / 2.6、731QCP29-F03 风险管理计划 02.docx | `0c1484d6b295` | `dhf.10319ff21c64042d` | `rd_risk_plan` | needs-review | classification, fidelity |
|
||||
| 17 | 2. 设计输入阶段 / 2.7.3、731QCP29-F04 风险管理报告 02.docx | `d4f18eb817da` | `dhf.86f9573d8ddc7ae8` | `rd_risk_report` | needs-review | classification, fidelity |
|
||||
| 18 | 2. 设计输入阶段 / 2.8、731QCP29-Fxx 软件开发计划-模板.doc | `2dee0e085113` | `dhf.f5c7df2bf53bbedd` | `rd_sw_plan` | needs-review | classification, fidelity, doc-normalization |
|
||||
| 19 | 2. 设计输入阶段 / 2.9、软件需求规格书模板.docx | `aa12be2b8158` | `dhf.fa4123ac9f683ade` | `rd_sw_reqs` | needs-review | classification, fidelity |
|
||||
| 20 | 3. 设计输出阶段 / 3.12、原材料进货检验规范-模版.docx | `34608b520ebf` | `dhf.3a76c152e144832a` | `rd_incoming_iqc` | needs-review | classification, fidelity, external-image |
|
||||
| 21 | 3. 设计输出阶段 / 3.15、产品技术要求.doc | `b787295c6c66` | `dhf.885cddb95919204c` | `rd_tech_req` | needs-review | classification, fidelity, doc-normalization |
|
||||
| 22 | 3. 设计输出阶段 / 3.17、731QCP29-F06 设计开发输出清单 02.docx | `f53a2f271bf2` | `dhf.199acbb3323bd854` | `rd_design_output_list` | needs-review | classification, fidelity |
|
||||
| 23 | 3. 设计输出阶段 / 3.18、731QCP29-F07 设计输出评审记录.docx | `e37ab2828e64` | `dhf.aa47448f266e8e65` | `rd_output_review` | needs-review | classification, fidelity |
|
||||
| 24 | 3. 设计输出阶段 / 3.6.2、软件详细设计模板.docx | `e1089b1de6d2` | `dhf.9a2de08325a6c9cd` | `rd_sw_detail_design`(新/细分候选) | needs-review | classification, fidelity, type-mapping |
|
||||
| 25 | 3. 设计输出阶段 / 3.8、RDDHF0213-xxx采购技术说明-结构&硬件.doc | `77fd422be6f3` | `dhf.33c2e9fe0c42fa0d` | `rd_purchase_spec` | needs-review | classification, fidelity, doc-normalization |
|
||||
| 26 | 3. 设计输出阶段 / 3.9.1、731QCP29-Fxx 工艺流程图模板.doc | `1d702e1cdbdc` | `dhf.3e7fa9e5e236f63c` | `rd_process_flow` | needs-review | classification, fidelity, doc-normalization |
|
||||
| 27 | 3. 设计输出阶段 / 3.9.2、RDSOP00xx-00xx xxx作业指导书.docx | `e2d5e596ee1f` | `dhf.95c9bb231da8822d` | `rd_work_instruction`(新/细分候选) | needs-review | classification, fidelity, type-mapping |
|
||||
| 28 | 3. 设计输出阶段 / 731QCP33-F01 软件可追溯性分析报告 02.docx | `23d6402dc851` | `dhf.cc8edf04e512018f` | `rd_sw_trace_report`(新/细分候选) | needs-review | classification, fidelity, type-mapping |
|
||||
| 29 | 4. 设计验证阶段 / 24.产品有效期验证.doc | `425e993090eb` | `dhf.5b326f0a5a862a13` | `rd_lifetime` | needs-review | classification, fidelity, doc-normalization |
|
||||
| 30 | 4. 设计验证阶段 / 41.软件单元测试用例-模板.doc | `02f41e077038` | `dhf.de69adc198a48f70` | `rd_sw_unit_test` | needs-review | classification, fidelity, doc-normalization |
|
||||
| 31 | 4. 设计验证阶段 / 42.软件集成测试用例-模板.doc | `1a373f9bec23` | `dhf.fa6315877d495f9e` | `rd_sw_integration_test`(新/细分候选) | needs-review | classification, fidelity, doc-normalization, type-mapping |
|
||||
| 32 | 4. 设计验证阶段 / 43.软件系统测试用例-模板.doc | `22b211453d73` | `dhf.349e7913aab2d0cd` | `rd_sw_sys_test` | needs-review | classification, fidelity, doc-normalization |
|
||||
| 33 | 4. 设计验证阶段 / 49. 软件配置管理报告-模板.doc | `243993a6ab53` | `dhf.33db9024b12d6bc3` | `rd_sw_config_report`(新/细分候选) | needs-review | classification, fidelity, doc-normalization, type-mapping |
|
||||
| 34 | 4. 设计验证阶段 / 731QCP29-F07 设计验证评审记录.docx | `e37ab2828e64` | `dhf.59806d243a57f310` | `rd_verification_review` | needs-review | classification, fidelity |
|
||||
| 35 | 4. 设计验证阶段 / 731QCP29-F08 设计开发验证记录 02.docx | `c5b84546e647` | `dhf.b71d90c0f60bc558` | `rd_verification_record`(新/细分候选) | needs-review | classification, fidelity, type-mapping |
|
||||
| 36 | 4. 设计验证阶段 / 756QCP26-F02 验证确认报告 V03-.docx | `f5bbe7816e79` | `dhf.b96b7fad425d30a3` | `rd_verification_validation_report`(新/细分候选) | needs-review | classification, fidelity, type-mapping, process-validation-purpose |
|
||||
| 37 | 5. 设计转换阶段 / 731QCP29-F04 风险管理报告 02.docx | `8a17e5b4cff1` | `dhf.7775dc1df440fd86` | `rd_risk_report_t` | needs-review | classification, fidelity |
|
||||
| 38 | 5. 设计转换阶段 / 731QCP29-F07 设计转移评审记录.docx | `e37ab2828e64` | `dhf.13458c561985fcd9` | `rd_transfer_review` | needs-review | classification, fidelity |
|
||||
| 39 | 5. 设计转换阶段 / 731QCP29-F09+试产总结报告+03-20250730.docx | `7600083fa867` | `dhf.a046cc77128b7b66` | `rd_trial_production_report`(新/细分候选) | needs-review | classification, fidelity, type-mapping |
|
||||
| 40 | 6. 设计确认阶段 / 53. 使用错误评估报告-模板zlx.doc | `75cafe0c4c26` | `dhf.42b787cc4d5c9141` | `rd_use_error` | needs-review | classification, fidelity, doc-normalization |
|
||||
| 41 | 6. 设计确认阶段 / 731QCP29-F07 设计确认评审记录.docx | `e37ab2828e64` | `dhf.a277ed8557709b89` | `rd_confirmation_review`(新/细分候选) | needs-review | classification, fidelity, type-mapping |
|
||||
| 42 | 6. 设计确认阶段 / 731QCP29-F11 设计开发确认记录 02.docx | `d01ff3c56841` | `dhf.3aac75ddc616d53a` | `rd_confirmation_record`(新/细分候选) | needs-review | classification, fidelity, type-mapping |
|
||||
| 43 | 6. 设计确认阶段 / 756QCP20-F01 计算机软件确认报告 02.doc | `45e57b363abf` | `dhf.6b440531e6ff12f8` | `rd_sw_validation_report`(新/细分候选) | needs-review | classification, fidelity, doc-normalization, type-mapping |
|
||||
| 44 | 6. 设计确认阶段 / 756QCP26-F01 验证确认方案 V03-.docx | `525b2c40d74e` | `dhf.fb87560f7ffd8144` | `rd_validation_plan` | needs-review | classification, fidelity |
|
||||
|
||||
## 需在同一合同继续关闭的事项
|
||||
|
||||
- 内容块合同:沿用DHF的TemplateAsset/ContentBlock,补齐图形锚点、非表格重复组、字段类型/单位/校验、结构与实例ID映射;只有已合入的合同版本才可供W3和DHF U2消费。
|
||||
- 原件保真:本任务E1和DHF E1/E1-R1均有转换候选,但自动保真判据未通过。图形顺序、分页、中文可读、批注/修订及49字符未定位差异逐份审核。不能凭转换exit0或44条目录宣称模板可用。
|
||||
- 业务含义:F02验证确认报告、系统需求研发/项目管理用途、有效期与货架寿命、企业固定文本/项目示例、四份同字节阶段评审用途需逐项人审。DHF项目建议书评审单仍标HUMAN REVIEW / NOT_APPROVED;无结构/渲染包及人工评审,不得转published。
|
||||
- 合入与交接:DHF原任务owner完成U1已批范围并记录合同/发布证据;经W1合入、精确SHA、独立Review/CI核验后,本任务从RDM权威main消费。DHF U2–U6由原owner依已批准阶段5计划续办,在其任务卡引用批准版本。
|
||||
- 后续验证:W0机械对照不提升为GATE或业务审核结论。每个模板的内容/关键格式对照、适用项目生成/审签/导出及权限行为须各有当前对象证据;阻塞归属和人工决定记录在唯一DHF台账/评审单。
|
||||
|
||||
阶段6增量A的当前进展仅为W0来源/身份核对。W0的“共同合同已冻结、44份用途均裁定、DHF U1已合入”出口仍未达到;W2可按已批准计划独立推进,不把W0部分工作冒充整个增量完成。
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
# 阶段6受影响实施顺序修订:先封闭项目事务,再继续 W2/W3 r1
|
||||
|
||||
记录日期:2026-10-14。状态:**待人工评审**。本修订仅调整已批准阶段5计划中 W2、W3、W4 的关键依赖顺序;阶段4的事务方案、28项需求、DYN-01 人工确认、DHF 独立 owner、模型费用上限及四个增量的验收范围不变。原阶段5 r1 作为已批准历史对象保留,不在原文上回写。
|
||||
|
||||
## 发现与可复核对象
|
||||
|
||||
RDM 独立分支 `feature/rdm-two-trees-project-dictionary` 当前本地 HEAD `059fab07a53aad3a5dff796f25abedc441940303` 保留两条失败回归:`TestProjectDictionaryConcurrentIngestAndSection` 在 `-race` 下发现 `World.setDictionary` 与笔记入库/重标及文档章节写入竞争;`TestProjectDictionaryRevisionCannotDisappearWithAnotherTransaction` 证明字典修订返回成功后,另一个回滚的 `TxProject` 可使持久 revision 仍为 0。失败原始命令和输出在该分支任务卡 `.task/feature-rdm-two-trees-project-dictionary.md`,来源 SELF。较早 HEAD 的四包通过不能替代当前失败 HEAD。W2 的项目字典不能视作可提交或可合入成果。
|
||||
|
||||
原计划让 W3 等 DHF U1 合入,再由 W3 引出 W4。然而 W2 的正确性已依赖阶段4 §5.2 批准的 W4 基础事务约束:私有工作 World、项目写入串行与数据库 revision CAS、提交后一次发布快照,旧写入口共用版本边界。等待 W3 才处理该基础会使 W2 长期保留已知丢失更新与数据竞争。DHF U1 仍由原 owner 负责,当前未形成可消费的已合入合同;本修订不接管其工作区或复制候选。
|
||||
|
||||
## 仅调整的依赖与 owner
|
||||
|
||||
将原 W4 拆为同一工作项内两个有明确边界的实施步骤:
|
||||
|
||||
1. **W4a 项目事务基础先行**:W2 的 RDM owner 在原 W2 独立分支上完成基础隔离和读写协调,覆盖当前字典修订、笔记入库/重标、文档已有章节/审签以及其他已存在的项目写入口;事务私有 World 持有事件 sink,提交前不修改共享 World;同一事务持久化事件与项目 revision 条件更新,成功后原子发布只读快照,失败丢弃工作副本。跨进程 CAS 必须同时验证 SQLite 和隔离 PostgreSQL;不能以仅进程内互斥替代。W4a 不增加结构提案、人工确认公开接口,也不编辑 DHF 的 `ContentBlock`/模板资产合同。
|
||||
2. **W2 完成门禁**:两条现有 RED 在普通及 race 运行下变 GREEN,补提交前后故障/回滚、两进程冲突、读者不见半新态、旧项目与旧审签重放,并跑当前 HEAD 四包和隔离数据库测试。测试证明字典 revision、笔记/文档引用与事件持久状态相符后,才把 W2 与 W4a 作为阶段6增量 A 候选;这不是 W4 全部完成。
|
||||
3. **W3 保持原依赖**:仍须等待 DHF U1 真正合入、核验单一 `ContentBlock` 合同,再做递归实例和旧数据兼容;W2/W4a 必须先满足上述门禁,W3 不从 DHF 未提交目录取代码。
|
||||
4. **W4b 仍在 W3 后**:结构/内容/字典/模板升级提案、一次性真人确认、授权与幂等、事件/提案/回执/outbox 同事务,以及相关 UI/工具入口,仍按已批准 W4 和阶段4方案实现。W4a 是 W4 的基础子集,不可宣称 DYN-01 已就位;完整 W4 完成仍以 W4b 和原验收测试为准。
|
||||
|
||||
相应依赖改为 `W0 → W2/W4a → W3(另需 W1) → W4b → W5/W8`。同一 RDM 工作区只有 W2 owner 写 W4a 涉及的事务文件;如 DHF owner 后续需改同一文件,仍按阶段5单一 owner/先后合入规则协调。W6/W9 的 Backend 独立工作、X2 已批准修订及 W11 逐资产审阅不受此顺序改变影响。
|
||||
|
||||
## 影响、测试和回退
|
||||
|
||||
提前的是**既有方案明确要求的事务隔离基础**,不降低项目权限、人工确认或旧记录兼容验收,也不放行未发布模板。W4a 若发现必须修改公开权限合同、旧事件含义或受控文档职责,先停受影响实现,另回阶段4评审。若失败,保留 W2 RED 和工作分支,已合入主干与 DHF 原现场不受改动;不能删测试、临时全局锁或跳过 PostgreSQL 来报绿。
|
||||
|
||||
请仅评审这一关键依赖顺序调整。批准后允许 W2 owner 先实现 W4a 并完成门禁,再继续 W3/W4b;增量 A 的阶段6实现评审和阶段7正式测试仍分别进行。
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# RDM W2/W4a P2 read isolation: independent local review
|
||||
|
||||
Reviewed object: `57a8d7caedf72d9be4bdca179ae2a93e456ba009` against `7980551b78509c19074f7d683178dacbe6d956d7`. The supplied short name `57a8d7ce` does not resolve in this repository; the reviewed commit is `57a8d7c`. Reviewer: independent /root/w2_review agent. Scope: P2 read isolation only; no source edits, push, service operation, or full test rerun.
|
||||
|
||||
## Review result
|
||||
|
||||
No new high impact P2 defect was confirmed in the fixed source. The private canonical is returned only through `FrozenReadCopy`; a committed transaction publishes `FrozenCanonicalCopy` after commit. The clone separates the note tree, document tree, dictionary indexes, network, register, review state, requirements, conclusions, and nested maps/slices. The same generation shares only a sealed event log. `Append`, `Seed`, setters, and delayed restore closures cannot change that log; `Snapshot` copies mutable event `Payload` and `From`.
|
||||
|
||||
The production `Get()` constructor creates independent public and private dictionaries before returning. A test-created literal `Runtime` with no `privateDict` still copies public `Dict` on its first `dictionarySeed()` call, so mutation before that first call can contaminate its seed. No production literal constructor was found. This is a test-constructor boundary, not a confirmed production P2 defect.
|
||||
|
||||
The older deterministic three-case event-time RED remains an independent data-contract issue. It is not counted as a P2 regression. Full Go testing without excluding it is still failing. The new state-copy path preserves values within a generation and does not reconstruct missing legacy timestamps.
|
||||
|
||||
## Independent replay and provenance
|
||||
|
||||
The source was extracted with `git archive` into `/tmp/rdm-p2-review-8shrap`. The receipt command re-created the archive and compared every non-pin source file, checked all four pin Git heads against the reviewed commit's gitlinks and their clean state, then compared the copied pin files. It ran the focused domain/application `-race` suite. The command exited 0. The full, sanitized output is in:
|
||||
|
||||
- `/tmp/rdm-p2-review-57a8d7ca-replay-20261014-01.json` — `make evidence` RECEIPT capture, SHA-256 `3b8c0bc10d97b6564dc766b5df92738f6ede1ec2bd0456ed0a75a5ed3b2c15b9`
|
||||
- `/tmp/rdm-p2-review-57a8d7ca-replay.sh` — exact replay and identity-check script, SHA-256 `66658b68d8d4bad7282730c60df178a01355474718cff23fd4478682af27e6a7`
|
||||
|
||||
The receipt's Git `before.head` is the Dev checkout `d23fb4363dcc0a206e71e47f9cd23a644c7e1c70`, because that repository supplies the RECEIPT-capable evidence tool. It is **not** the tested RDM object. The tested archive SHA and pin identities are checked and printed inside the captured command output. The tool labels this local receipt `SELF`; the independent reviewer identity and command are stated here, without upgrading the receipt's source label.
|
||||
|
||||
The focused replay covered pointer pollution, nested clone aliases, event input/output aliases, sealed setters and restore closures, public/private seed, history/template reads, retained transaction pointers, same-revision first-wins, later-instance commits, commit-to-publication readers, SQLite two-instance CAS, attribution refresh, and the slowHost test-fixture race. All selected cases passed. The separate time test was run in the same fixed snapshot and failed in its three expected legacy-time cases; it was not included in the P2 receipt.
|
||||
|
||||
The author's task card has fixed-code SELF rows for all-package tests excluding the time RED, domain/application race tests, isolated PostgreSQL read/CAS/attribution tests, build, and Web/governance checks. This review did not independently replay PostgreSQL, full packages, build, CI, or PR gates.
|
||||
|
||||
## Performance and acceptance limit
|
||||
|
||||
Each warm `WorldFor` copies materialized state; per-read allocation and latency therefore grow with live object count. Event history is copied once per committed canonical generation, and `Snapshot` copies it on demand. The repository includes a profiling harness, but no human-approved cost threshold or production workload acceptance is established by this review. Performance remains a separate stage-6 review decision.
|
||||
|
||||
W3 and W4b remain outside this P2 conclusion.
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
# 阶段6受影响设计修订:项目只读快照的指针隔离 r1
|
||||
|
||||
记录日期:2026-10-14。状态:**待人工评审**。本修订影响已批准阶段4 §5.2“读者只取提交后的不可变快照”和阶段5 W2/W4a 的应用读语义、内存与性能;不改变 DYN-01 真人确认、W3/DHF 内容块合同、项目权限上限、旧事件身份或审签规则。RDM 独立分支当前本地 HEAD `0cff1161e4f85f847d1121be09160bc50b13d61f`,未推送、合入或部署。
|
||||
|
||||
## 发现与当前有效成果
|
||||
|
||||
W2/W4a 已把项目写入纳入私有事务 World、数据库 revision CAS、提交后发布;原两条并发/回滚 RED 与后续旧归属迁移跨实例 P1 均有局部修复。发布 World 的领域写方法在内存改动前拒绝写,`domain.LoadWorldForProject` 也默认冻结;独立复审确认这些路径的本地 SELF/定向重放。**但方法拒写不等于返回对象不可变。** `Runtime.WorldFor` 缓存并返回同一 `*World`;`NoteTree.Slice/Query`、`DocTree.Doc/AllDocs`、`DictionarySnapshot` 返回可变内部指针。固定 `TestPublishedReadPointersCannotPolluteOtherReaders` 在提交 `bc1024e131` 和最终 HEAD `0cff1161` 保留 RED:读者 A 直接修改返回的 Slice/Doc/Dictionary 字段,无事件或数据库提交,同项目下一位读者却看到被污染的缓存。当前生产源码尚无这样赋值的用户/模型可触达入口,故这不是已证实的跨用户远程攻击;它仍违背已批准的“只读、提交后”工程合同,未来动态结构和成员上下文会放大误用风险。当前 HEAD 无条件全仓 Go SELF **FAIL**;明确排除该 RED 时通过不能作为 W4a 完成证据。原始命令、对象与输出保存在 RDM 任务卡 `.task/feature-rdm-two-trees-project-dictionary.md`。
|
||||
|
||||
## 方案比较
|
||||
|
||||
| 路线 | 一致性与兼容 | 成本/风险 | 决定建议 |
|
||||
|---|---|---|---|
|
||||
| 私有 canonical + **已封闭的不可变事件日志**;每个 `WorldFor` 深拷当前树/网/字典并共享该日志读核 | 保留 `*World` 函数形状与**同一 canonical 代内**已有 ID、时间、revision、hash 字节;返回指针身份不再稳定,调用者只能污染自己的状态副本 | 热读不逐次复制全部事件,但仍复制当前投影;每次提交/冷装载要深拷/重建一次日志,`Snapshot` 按需复制事件。必须证明日志封闭和所有别名入口 | **推荐先实现并实测**,成本不过关再重审 |
|
||||
| 每次连日志历史一起完整深拷 World | 指针隔离较直观,保持旧函数形状 | 日志含全部历史且事件 `Payload`/`From` 可变;每次热读下界 O(历史字节),与长期项目扩张不相称 | 不推荐 |
|
||||
| 每次从事件重放一个独立 World | 无共享指针,历史可复核 | 成本随全部历史事件增长;当前若干 `IngestedAt`/`Version.At`/边 `At` 在直写和重放中取时刻不同,可能使旧字节漂移 | 本轮不采用 |
|
||||
| 只读 `WorldView`/DTO 与按需拷贝 getter | 可按请求复制少量对象,长期更适合巨大项目 | 改现有领域/应用读接口;静态约26文件、46处 `WorldFor/worldForParam` 和73处主要树/字典 getter 调用,需另定职责与兼容 | 深拷贝成本不满足门槛时再评审 |
|
||||
|
||||
## 推荐的隔离与失败边界
|
||||
|
||||
`Runtime` 的 canonical 已提交 World 只由同项目 revision 的发布流程持有,绝不直接返回给普通读者;`TxProject` 私有工作指针也不能作为 canonical 原样外露。一次提交在 DB 成功后,按同一项目锁建立/替换新的 canonical;事务工作日志中捕获 `sql.Tx` 的 sink/`seqErrFn` 等闭包必须在发布前去除,不能让 canonical 长期保活已提交事务。推荐以**同一个已固定的项目 revision/事件水位**构造 canonical 状态图与新的 frozen EventLog,深拷该水位内历史 Event 后封闭,供同一 canonical 代的读副本共享;不直接共享 Tx 工作日志。可从 A 已提交事务的私有工作日志深拷确定事件水位,或从数据库在 revision 前后核验一致后同时重建图与日志;不得让 A 状态图配上 B 后来提交的日志。发现更高 revision 时重建完整新代或拒绝旧代发布,绝不覆盖较新代。Tx 回调对私有 World 的所有权只在回调期间有效,禁止启动并发写者或把它交给异步任务;返回后即使受信调用者误持指针并**串行**改字段,也不能改变已发布 canonical。`Runtime.Dict` 目前也是公开可变指针,项目装载必须改用私有规范 seed/字典版本并与该字段做深度隔离;`WorldAtSeq` 导出、inspection 历史重放及 templates 读面仍直接读 `rt.Dict`,也须切到私有 seed 或验证等价隔离,不能只保护 WorldFor/TxProject。
|
||||
|
||||
`WorldFor` 若读到 DB revision 新于缓存,必须等本进程持同项目锁的写者发布或从已提交事件重装,不能在“DB 已提交、canonical 尚未替换”窗口返回旧缓存;较旧发布不得覆盖较新 revision,**同一个 revision 也只允许一个 canonical 首次安装获胜,随后不能用 warm/重放的另一份 World 覆盖**。否则同 revision 的 `IngestedAt` 等现有时间差会令同进程读者见到两种字节。读入口在短锁中 pin 某个不会再修改的 canonical/revision,**释放全局 worldsMu 后**复制当前投影并关联这份已封闭日志,避免巨大项目热读阻塞别的项目;返回新冻结 World 的线性化点是 pin 的已提交 revision。旧读者保留自己的旧 revision 副本,不被后续提交修改;新读者只拿完整新 revision。失败/回滚不替换 canonical。不能靠浅拷贝 Go struct、只关闭事件 sink、仅在 getter 复制顶层 map,或复用可变 `World.Dict` 指针过关。
|
||||
|
||||
每次状态副本须递归覆盖笔记与多挂载、文档章节/版本/审签、两类追溯网/边、需求/结论/合规快照、项目字典及别名索引、所有可变 map/slice/pointer;只有能证明不可变的字节块才可共享。实现须**新建** World、NoteTree、DocTree、TraceNet、Register、RegCheckStore 的内部回指与同步对象(如 Notes.w、Docs.w、各 log、Register.net),不能按值复制 `sync.Mutex`。`NewWorld(dict)` 当前复制字典切片但会别名部分索引 map;不能对已物化 overlay 字典直接 `reindex` 而重复追加项目词条,须显式深拷索引且复核项目字典版本。`time.Time` 直接复制,不走 JSON 往返或重新取钟。
|
||||
|
||||
共享日志必须是**真正的 sealed read-only 对象**:从事务日志构造时深拷每个 Event 的 `Payload []byte`、`From *Ref`;`Append` 入日志和返回 Event、`Seed` 接收、`Snapshot` 返回也都隔离这些可变引用。`Close/Seal` 清空持久 sink、事务序号分配器/时钟闭包、操作上下文;封闭后 `Append` 报错,`Seed/AdvanceSeqTo/UseRealClock/SwapSink/UseSeqAllocator/UseErrorSeqAllocator/BeginOperation` 及其恢复闭包均不可再改内部状态,现有无错误返回的 setter 可保持签名并安全 no-op。`Snapshot` 当前仅浅拷外层 Event,且每次排序,按需读取实际为 O(H log H),H 为历史事件数;若需改善,须保持 Seq 顺序不改历史,不靠共享可变 Payload 减成本。返回副本的领域变更方法继续在入口拒绝持久/内存写。**这里的“不可变”指共享 canonical/DB 与其他读者不可被该副本污染;调用者自己的副本仍有 Go 导出字段可被本地赋值,这种赋值不提交项目事实,却可能影响该调用者后续自行计算的报告/导出等输出。** 权威写入、授权和外部副作用不得信任可能被本地改过的读副本,须在私有事务或新取的规范快照中复验;若要求连调用者本地对象也不可改,须选择只读 DTO 路线。`WorldForParam` 的非空项目分支与项目成员工作上下文读面必须走同一隔离路径;空项目旧过渡域另保留既有权限门禁,不因本修订获得跨项目读取。旧 Section.ID、事件 seq、模板候选及已批准文件不得在复制时重建或改写;**本修订不声称修复已有重放时间漂移**:现有写侧对若干领域 `At` 与事件 `Event.At` 分别取时,重启重放可能出现微秒级差异,该领域时间合同须另有固定字段/事件用例闭合,不能把读隔离测试外推成跨重启时间字节一致。
|
||||
|
||||
如果实现发现无法在保留这些字节和现有签名下彻底隔离,或测得用户可见热读成本不可接受,应保留 P2 RED,转回 `WorldView` 方案做人审,不能退化为“当前没有生产代码写裸指针”后宣称 W4a 完成。
|
||||
|
||||
## 测试与性能判定
|
||||
|
||||
- 固定 P2 RED 转 GREEN:A 修改自己返回的 Slice、Doc、Section、Dictionary、网边、审签、getter 嵌套 map/slice,以及 `Log().Snapshot()[i].Payload/From` 后,A 后续**新一次** WorldFor、同项目成员 B、另一个 Runtime、项目 C、DB 重放与事件水位均仍为原提交值;同一副本内用户自改字段不构成业务提交。`rt.Dict`/seed 指针被误改后,既有 A/B 与未来 C 项目仍用原规范基础字典。旧指针在新事务提交后保持旧版本;新读者一次只见完整新版本。重复 `WorldFor` 现有测试中的指针恒等断言须改为 `w1 != w2` 且同 revision 内容相同,并审计生产是否依赖旧指针随写更新。`TxProject` 回调故意保留 working 指针并在返回后**串行**改其嵌套值,canonical 与后续读者仍须不变;并发持有 working 指针由内部所有权合同禁止并以 race 检查生产路径。正常读取不能丢失模板/节点/证据来源。
|
||||
- 逐字段比较**同一已提交 canonical 代内**复制前后的 ID、revision、hash、时间/审签及日志事件水位;不把它当跨重启 Event.At 漂移已修。SQLite 和隔离 PostgreSQL 各跑并发读者与写者、CAS冲突/回滚、归属迁移、恢复;两实例交错让 B 在 A commit 与 A sealed log 建立之间提交,断言任何被返回的一代树/网/字典/日志均属同一 revision,旧代不覆盖新代。再注入同进程 A commit 后读者抢先冷装同 revision、A 后发布 warm World 的时序,证明同一 revision 只安装一次,后续不出现两种时间字节。误改公开 `rt.Dict` 后,普通 WorldFor、历史导出/inspection/模板读面及未来项目仍取原规范基础。另给时间漂移建立独立固定用例与修复入口。运行 `go test -race`、完整 RDM 包回归;已批准 DHF U1 合同未合入前不声称 W3/模板实例可用。
|
||||
- 在同一机器和固定数据集上新增可重复数据生成与延迟/RSS采集载具(仅 `go test -benchmem` 不会给 p95/p99或峰值RSS),同时测现行缓存返回与推荐混合方案:0/1千/1万/10万事件,历史量与当前节点数不同比例,1/8/32读者+1写者,以及一个大项目加一个小项目的非对称负载;分别记录冷装载、提交后建 sealed log、热 `WorldFor`、按需 `Snapshot`、跨项目锁等待及报告/追溯/导出/入库路径的 p50/p95/p99、allocs/op、字节分配和峰值存活 heap/RSS。另在10万历史事件项目中连续提交 N 次、每代保留一个旧读指针,再释放这些指针,量测多代 sealed 日志/状态副本的存活 heap 与回收,不能以同代共享掩盖跨代内存增长。`TxProject` 当前仅为项目存在性调用 `WorldFor`,改为只读副本后不得为一次写入无谓复制整个状态。**阶段6人工评审决定可接受成本**;实现前不把任务卡中“1万事件 p95≤1.2倍、RSS≤2倍”的候选数字写成已批准性能门槛。软删切片、全部文档版次和退役边仍留在当前投影,热读仍可能随历史量增长;若严重影响成员工作,停止将本方案称作最终实现,提交 DTO/按需投影修订。
|
||||
|
||||
请评审是否批准“私有 canonical + 每次 WorldFor 独立状态副本 + 同版本共享 sealed 事件日志”的受影响读合同与上述完整性/性能验证。批准仅放行 W2 原隔离分支继续实施、测试和独立复审;W4a 增量 A、W3、合入、真实迁移与部署仍遵守原阶段门禁。
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
# 阶段6 W4b 真人确认受影响设计修订候选 r1
|
||||
|
||||
状态:待阶段4受影响方案人工评审;本文不是实施授权、基座公开面、确认成功回执或阶段6验收。记录日期:2026-10-14。影响范围仅为动态结构、字典及模板升级提案的确认入口和可信凭据;W3 递归实例及无副作用的提案展示可以按原批准方案继续。
|
||||
|
||||
## 1. 固定事实与阻断
|
||||
|
||||
- RDM 已同步的隔离分支固定源码为 3869738d575fbf5e8b42dc82c7fff0c20aa0fed8,基于 RDM origin/main 7828925787fbdb0086675f72af05289c7045dbce;该组合 pin 的 Backend 为 ead5ade30e8a9475277ba72505f5029feea93304,公开 extension SurfaceVersion 为 2.12.0-experimental。此处是 2026-10-14 的源码快照,不证明未来主干或运行实例。
|
||||
- 固定 Backend 的 extension.Host 不含可核验真人确认的可选能力,extension.Request 只有 Actor、Owner、ConversationID、Entrance、HostProjectID 等分发字段。Entrance 的 button/card/chat/api 是入口分类,不是受信人工动作的证明,也没有一次性提案修订与 payloadHash 绑定。基座内部已有 HITL 挂起与响应机制,但没有给 RDM 一个可在项目事务内使用的公开确认凭据合同。
|
||||
- W3 的独立失败测试 TestDHFInstantiateMaterializesTemplateBlockIdentity 在 RDM 测试提交 7c9a19385e 下为 SELF RED,收据见 RDM 任务卡 SHA256 前缀 a5eddadb:受控已发布夹具的模板块 purpose 未生成项目 nodeID/templateBlockID。该 RED 证明 W3 实例差距,不替代本 W4b 的可信真人确认验证。
|
||||
- Dev/Documents 首次独立 precheck 因 Dev 分支落后主干返回 SYNC_REQUIRED,故未写仓;协调者同步后,第二次外部 SELF 收据 /tmp/rdm-w3-w4b-dev-precheck-ready-20261014-1605.json 返回 READY,SHA256 3eb298d362236aa0bf691e2175b54eb6b412f3553f1ff0106ccba7527ba20d43。本候选在获准的独占文件窗口写入。
|
||||
|
||||
阶段4 r1 第5.2–5.3节已批准的硬约束是:实际人确认绑定 projectId、proposalId、revision、payloadHash、actor 和有效期,在同一 RDM 项目事务中消费;模型以人名调用工具、confirmed=true 或伪造 confirmedBy 均不能生效。当前公开接口无法证明这个条件,故 W4b 确认写入和插件决定命令保持阻断,不能以入口字符串、RDM 自签 token 或当前草稿采纳入口代替。
|
||||
|
||||
## 2. 候选路线与取舍
|
||||
|
||||
| 路线 | 可核的人工来源 | 事务边界 | 判断 |
|
||||
|---|---|---|---|
|
||||
| 推荐:基座 HITL 响应生成仅面向 RDM 的受信确认凭据;可选 Host 能力向本次分发提供已核验声明;RDM 在自己的项目事务中以凭据 ID 唯一约束消费 | 由基座认证响应及当前 pending 对象生成,模型工具不可领取;Host 不信任 Params 里的 actor/入口自报 | 提案 applied、领域事件、项目 revision、凭据消费、操作回执和审计 outbox 同一 RDM 事务 | 保留既有宿主身份边界与 RDM 事实源,无跨库两阶段提交 |
|
||||
| 基座先消费 token、再调 RDM apply | 基座可证明真人 | 两库不原子;RDM 回滚会丢失一次性凭据,未知结果难恢复 | 不采用 |
|
||||
| RDM 根据 button/card 或文本自签确认 | 无法区分模型调用与真实人动作 | 即使 RDM 事务原子,也没有可信授权起点 | 禁止 |
|
||||
|
||||
建议新增可选公开能力 HumanDecisionVerifier(名称待基座 X3 评审定稿),由受信 Host 在本次命令分发上下文回答 VerifyHumanDecision(expectedBinding),而不是把可复制的秘密 token 放入模型可见 Params。expectedBinding 至少包含 audience=rdm.structure.decide、actor、projectId、proposalId、proposalRevision、payloadHash、decision;返回只读 proofId、issuer、humanActor、projectId、proposalId、revision、payloadHash、decision、issuedAt、expiresAt、conversationId/runId 及基座持久 HITL 响应引用。Host 必须证明当前分发确由认证人对该确切待确认卡作出选择;模型工具、后台重放、无项目/无 pending 卡、过期或不匹配均 fail closed。RDM 不得自行铸造这份证明。
|
||||
|
||||
proofId 在 RDM 仅作消费键和审计引用,原始凭据不写入领域事件、模型上下文或普通读面。基座只验证并出具已发生的人类响应,不在独立基座事务中先标记 token 已消费;RDM 的 proofId 唯一约束承担一次性消费。凭据限定为该 RDM audience,其他插件不能把同一证明当作自己的确认。基座公开面必须同步 surface.txt、可选能力装配和兼容测试;RDM 只消费正式可用的固定组件版本,不改 pins、导入 Backend internal 或用本地替身替代发布合同。
|
||||
|
||||
## 3. 确认顺序、权限与恢复
|
||||
|
||||
1. 提案读面展示不可变 proposalId/revision、payloadHash、差异/理由/依据/影响、受控对象与当前 baseVersions;编辑产生新修订和新 hash,旧确认不转移。自动生成只到 pending,不更改有效树。
|
||||
2. 受信人从现有 HITL 卡或同一受控 UI 路径确认。基座把认证 actor、确切 pending 对象和响应持久化,再给本次分发可核验的证明;自然语言“批准”只有在 pending 对象唯一且经同一基座响应路径绑定时有效。
|
||||
3. RDM 按可信 actor/project 获取项目私有事务与数据库 CAS,围栏内再校验项目成员、doc.write 或明确经评审的结构管理动作、当前职责/整文锁定、字典/结构/模板版本、提案修订/hash、证明有效期和 audience。跨文档变更要求所有目标授权;不能以 project.settings 隐式扩权。
|
||||
4. 在同一 RDM 事务中 INSERT 唯一 proofId 消费行、校验 requestDigest/operationId 幂等范围、应用整批结构事件、更新 proposal applied、写回执和审计 outbox。任一校验或写入失败全回滚,确认前有效结构字节不变;失败尝试另留非已生效记录。提交后一次发布只读快照。
|
||||
5. 网络断开或返回未知时,先以 operationId 加 actor/project/proposal 查询已提交回执。已提交同键同内容返回原回执;同键异参拒绝;未提交且证明仍有效才允许重试。证明过期、权限撤销或提案改版需新人工确认。基座证明记录与 RDM 消费记录可按 proofId 对账,不把未收到响应等同未提交。
|
||||
|
||||
旧 content 草稿/审签记录保持旧事件与下载语义;新结构确认不会自动把正文标为批准。旧提案默认 content,旧命令只能返回其原形状;在可信证明未就位前,结构/dictionary/template-upgrade 的 decide 必须显式拒绝,不能降级到现有 AdoptDraftProposal 或其他旧直写入口。任何影响公开权限动作、事件载荷或旧库迁移语义的实现差异须回到本修订评审。
|
||||
|
||||
## 4. 最小重放集和停止条件
|
||||
|
||||
- 基座公开面:认证 HITL 响应正例;模型调用、伪 Entrance、错 actor/project、错 revision/hash、卡已改、过期、撤销、不同 audience 负例;同一 proofId 不能给第二个资源或插件使用。核验 Host 缺能力时 RDM 明确拒绝且零领域副作用。
|
||||
- RDM 事务:确认前树/版本/事件序号不变;提交后整批一次生效、重启可重放,凭据消费与 proposal/applied/事件/outbox/回执同提交;故障注入逐个中断点均无半树。两人并发仅一胜,确认瞬间成员或职责撤销拒绝,整文已锁定拒绝;拒绝/取消/改后接受留下可辨状态和新修订链。
|
||||
- 恢复与审计:提交后响应丢失按 operationId 找回原回执;同键异参拒绝;失败尝试不成为已生效结构事件;普通审计读面只见 proofId 引用及人类响应事实,不泄露凭据材料。SQLite 与隔离 PG 各做关键 CAS/重放/撤权;真实模型与浏览器确认路径待后续已批准验证阶段,当前 NOT_RUN。
|
||||
|
||||
停点:基座 X3 公开能力、可信发行链和 RDM 原子消费合同经用户批准且形成固定可消费组件前,W4b decide 写入口不实施、不宣称确认可用。W3 不受此缺口影响的递归实例和旧数据兼容可继续;本文仅请求对这一受影响阶段4合同作人工评审,不重开已批准的 W2 数据保全与读隔离结论。
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
# W4b 本地实现进展
|
||||
|
||||
更新时间:2026-10-15。这是实施记录,不改写已固定的设计修订 r1。
|
||||
|
||||
## 状态
|
||||
|
||||
| 事项 | 状态 |
|
||||
|---|---|
|
||||
| 本地实现 | 已完成 |
|
||||
| 本地验证 | SELF,见下 |
|
||||
| 合入 main | 未合入 |
|
||||
| 部署 | 未部署 |
|
||||
| CI GATE | 未运行 |
|
||||
| 交付同步 | 未做。启动时交付预检为 SYNC_REQUIRED,本次按本地模式继续 |
|
||||
|
||||
## 固定对象
|
||||
|
||||
- Backend `a4d6404c5ff9fecd2c0d40d94c6896773f797ba4`:可选 `HumanDecisionVerifier`;证明由基座签发、不由基座消费;迁移 45 登记为不破坏旧读者。
|
||||
- RDM `528dd0c04a7174949a0297c131fe71fd470b94af`:结构、字典、模板升级提案;不可变修订与 payloadHash;项目事务内唯一消费 proofId;`rdm.structure.decide` 拒绝 `confirmed` / `confirmedBy`。旧 content 草稿仍走原表。
|
||||
- Dev 组合指针:`modules/backend` 固定到上述 Backend。架构基线补上该组件已经存在的 `projectcontext` 依赖边。
|
||||
|
||||
## 已验证
|
||||
|
||||
- RDM SQLite SELF:确认前有效树不变;四个故障注入点回滚;两人并发只有一个生效;整文锁定、文档职责不符、成员撤权都拒绝;同一 operationId 重放原回执,同键异参拒绝;修订后旧 hash 不能应用;重启后章节仍在;content 草稿保持 pending。
|
||||
- Dev SELF:`make test && make build` 退出码 0。任务卡收据 `edb81a90dfbd270b0a68d8679c6b3a1a8d5da3e89de92bad2647478a7eb77bc0`,来源 SELF。
|
||||
- 工作台:未连接时「结构」按钮提示先连接。用桩命令总线时,提案卡展示修订、哈希、理由、依据、影响和基线,确认按钮调用 `rdm.structure.issue`,参数不含自签标记。
|
||||
|
||||
## NOT_RUN
|
||||
|
||||
- 隔离 PostgreSQL。当时 `pg_isready` 没有可用实例。
|
||||
- 真实模型确认路径。
|
||||
- 真实基座 HITL 卡的端到端确认。浏览器没有接上运行中的基座。
|
||||
- 相对 `origin/main` 的 `task-sync`、当前 HEAD 的 CI,以及合入。
|
||||
|
||||
## 下一步
|
||||
|
||||
W3 已知 RED `TestDHFInstantiateMaterializesTemplateBlockIdentity` 仍不在本次范围。合入前需要把分支同步到权威 main、完成人审,并由当前 HEAD 的 CI 通过。
|
||||
+41
@@ -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出口仍需后续证据和评审。
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
# 阶段6受影响设计修订:审计 ID 的全部写入路径 r1
|
||||
|
||||
记录日期:2026-10-14。状态:**待人工评审**。本修订补足已批准 [PostgreSQL 截止水位修订 r1](rdm-two-trees-stage6-w9-pg-audit-cutoff-adjustment-r1.md) 的一个未满足负例;不扩大可共享审计范围,不改变 X2“仅可信已提交项目业务操作可跨成员链接”的权限边界。Backend W9 隔离分支当前本地 HEAD `63ebc85695790e7d0c2b758e5c0ed1b4adaec008`,未推送、合入或部署。
|
||||
|
||||
## 发现与影响
|
||||
|
||||
W9 v33 给省略 `command_audit.id` 的在线 INSERT 加事务级 advisory 锁和 `CACHE 1` 序列检查,默认写入口的真实跨页、并发、迁移及回滚测试为 SELF PASS。独立复审发现:显式 `INSERT(id=空洞低号)` 不求值列默认函数,因此不取得该锁。新增测试-only `TestProjectAuditPostgresExplicitLowIDCannotHideAcrossPages` 已在隔离 PostgreSQL 18.6 实测为 RED:已提交 ID 1/2、隐式取 3 回滚,事务 A 显式插入 3 暂不提交,B 正常 `AppendAudit` 提交 4;真实 `QueryProjectAudit` 第一页返回 `[4,2]`、`CutoffOffset=4`、`NextOffset=2` 且报告 `committed-prefix`,A 提交后下一页只有 `[1]`,永久遗漏 3。完整失败收据 `/tmp/backend-w9-explicit-low-red-20261014-01.json`,来源 SELF,退出码 1;Backend HEAD `63ebc85695790e7d0c2b758e5c0ed1b4adaec008`,唯一未提交改动为该测试,diff SHA256 `a85633c58a0841ecb1f479b9ceaed237aacacad1a5bafe761996fc7e9b711ecd`。这证明当前强 coverage 断言错误,**并不证明修复已就位**。
|
||||
|
||||
已批准 r1 明确把在线显式 ID 列为禁止维护动作,并要求负例证明强 coverage 不会误报。当前软件无法强制这一约束;只靠操作规程或当前 Backend 唯一生产调用点,不能给项目审计页面作无条件“已提交前缀”的保证。W9 `63ebc85` 因此仅是受支持默认写入口的局部候选,完整 W9 与阶段6增量 C 都未完成。当前强 coverage 先保持未发布;必要时读面退回 `offset-upper-bound-only` 或失败关闭,不能发布已知可误报版本。
|
||||
|
||||
## 选择与推荐
|
||||
|
||||
| 方案 | 对现有接口和数据的影响 | 取舍 |
|
||||
|---|---|---|
|
||||
| 保持默认函数,只在文档禁止显式 ID | 对直连 SQL 不设数据库门禁,强 coverage 仍可误报 | 不满足本次验收 |
|
||||
| 保留默认函数,给**所有** `command_audit` INSERT 加同一事务锁与单调检查的行级门禁 | 在线隐式/显式写均在提交前排队;公开游标字段不变;需调整离线显式复制与重试 | 推荐,先在隔离 PG 验证可实现性 |
|
||||
| 运行账号与迁移账号分离,按列权限阻止运行账号写 `id` | 权限与部署配置变化大,现有 DSN/测试未证明双账号可用;维护账号仍可破坏顺序 | 备选 |
|
||||
| 用服务端持久快照/新游标身份替换整数 cutoff | 不再依赖提交序 ID,但改公开分页合同、授权 epoch 和快照清理 | 若门禁方案无法证明则重新评估 |
|
||||
|
||||
推荐的数据库门禁是 `BEFORE INSERT` 行级 trigger 或等价受信 DB 路径:在任何行进入 `command_audit` 前取得与当前默认函数**相同**的事务 advisory 锁,先确认 `current_setting('transaction_isolation')` 为 `read committed`,再以锁后的新可见快照验证 `NEW.id > 0` 且严格大于当前表最大 ID。`REPEATABLE READ/SERIALIZABLE` 事务即使等到了锁,也可能用旧快照漏看已提交高 ID,故项目在线写入须明确拒绝这两档,不能靠“锁已取得”推断安全。显式高 ID 若超过当前已预留序列位置则直接拒绝,不能让随后默认取号退回其后;本轮不增加在线 `setval` 通道。事务持锁至提交/回滚,后续在线写者不能在低 ID 尚未确定时提交高 ID。保留当前默认函数供省略 ID 的 Backend `AppendAudit` 使用;trigger 不二次分配 ID,避免正常写入双取号。PostgreSQL 默认值在行级 BEFORE trigger 前已经填入,因此“`NEW.id` 非空即拒绝”会误伤正常写入。[默认值规则](https://www.postgresql.org/docs/18/ddl-default.html)、[触发器与事务](https://www.postgresql.org/docs/18/trigger-definition.html)、[旧事务快照与锁](https://www.postgresql.org/docs/18/sql-lock.html)。
|
||||
|
||||
门禁的证明前提需明确:`CACHE 1`、正向非循环序列、默认函数与 trigger 均存在,`pg_trigger` 显示确切 BEFORE ROW/函数身份且 `ENABLE ALWAYS`,强读和写入均核验,而不只看默认表达式。`ENABLE ALWAYS` 防 session_replication_role 改变通常的触发器触发范围;受控离线复制只短暂禁用**指定审计门禁**,保留主键/外键等约束触发器,并以排他表锁阻断读写。[ALTER TABLE 触发器启用模式](https://www.postgresql.org/docs/18/sql-altertable.html)。审计行还须 append-only:在线 `UPDATE` 或 `DELETE` 都应由独立的 DB 级门禁拒绝,业务修正只能追加新事实。受控升级建议使用版本化函数身份;运行时能检出 trigger 禁用、改绑、默认表达式/序列参数或schema版本漂移,不以只看同一 OID 声称能发现有权限者的 `CREATE OR REPLACE FUNCTION` 同 OID 换体。DB 管理员改写/禁用门禁、强制修改序列或物理库文件仍属于受控维护/事故,不声称软件能防恶意 DBA。任一受支持运行不变量无法核验时不返回强 coverage。
|
||||
|
||||
## 离线迁移与恢复边界
|
||||
|
||||
现有 `storage-migrate.copyRows` 逐表开启一个事务,源查询没有 ID 顺序保证,使用显式 ID + `ON CONFLICT DO NOTHING`,事务提交后才由 `advanceSequences` 另行推进序列,`migration_table_state` 又另写 done。直接加单调 trigger 会拒绝乱序复制、已存在 ID 的幂等重试,也会留下“复制已提交而序列未推进/状态未记”的窗口。需给 `command_audit` 单独设计**排他停写、独立于在线请求的受控复制事务**:锁表并验证无在线写者 → 在同一事务内临时停用指定门禁或采用等价受限写入能力 → 复制及逐行/最终 hash 对账 → 只向前推进序列至不低于当前已预留位置和最大保留 ID → 恢复门禁并核验启用与参数 → 写同一事务的完成状态 → 提交。复制和对账期间 `ACCESS EXCLUSIVE` 会阻塞该表读取及写入,停顿随源数据量增长,必须在隔离库量测。现有 `advanceSequences` 只按目标 `MAX(id)` 调用 `setval`,可能把更前进的序列**回拨**,不能原样复用;须在停写/排空旧缓存后比较序列当前状态和目标最大 ID,空表、失败重跑也不能降低下一个 ID。失败或进程退出应使门禁停用/复制/完成状态一同回滚;`setval` 非事务性,失败后仅允许向前空洞,仍以运行时检查证明下一个 ID 大于已提交最大值。[序列状态与回滚](https://www.postgresql.org/docs/18/functions-sequence.html)。`migration_table_state` 的 done/idempotent 重跑也应在这一约束下对账,不把 `ON CONFLICT DO NOTHING` 当成功证明。
|
||||
|
||||
真实运行库迁移仍未获授权。本修订只放行隔离库升级/回滚/复制演练;W6 的 v31–v35 与 W9 的 v31–v33 冲突仍须真实串行合入后重排,并以最终组合版本重测。公开 `CutoffOffset`/`BeforeOffset`/链接 `HostAuditOffset` 保持现状,RDM W8 的 operation 级分页及对象权限仍未实现。
|
||||
|
||||
## 验证与停止条件
|
||||
|
||||
1. 先在隔离 PostgreSQL 将上述“低号显式插入等待、高号先提交、跨页漏行”制成 RED;门禁后它应表现为低号先提交或该显式操作被拒,绝不再出现 `committed-prefix` 加漏行。并测多行乱序、`ON CONFLICT` 幂等、`REPEATABLE READ/SERIALIZABLE` 旧快照拒绝、锁超时/取消、回滚空洞、显式高 ID、在线 UPDATE/DELETE、默认函数与门禁 trigger 的禁用/改绑及可检测配置漂移;同 OID 的有权限函数体替换属于受控DDL事故,不虚构运行时可检测。
|
||||
2. 旧库→新 schema、v33 候选已应用库、离线 SQLite→隔离 PG 复制及中断重跑各保持原 ID/链接/owner 项目边界;门禁恢复、序列推进、对账与强 coverage 相互一致。读写 8 并发及大页查询记录吞吐/p95/锁等待,和 W9 r1 的 SELF 条件并列;用户未批准数值阈值,成本须留阶段6评审决定。
|
||||
3. 任何路径无法保证全部在线 INSERT 经同一提交顺序,立即停止强 coverage 声明,保留真实 `offset-upper-bound-only`/失败状态并回到设计评审,不改写旧记录、放宽权限或用前端隐藏遗漏。
|
||||
|
||||
请评审是否批准覆盖所有在线 `command_audit` INSERT 的事务门禁,以及上述排他离线复制/恢复边界。批准仅放行 W9 隔离分支实现与测试;真实库迁移、阶段6/7验收、PR/合入与部署仍按原门禁。
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
# 阶段6受影响设计修订:PostgreSQL 宿主审计截止水位 r1
|
||||
|
||||
记录日期:2026-10-14。状态:**待人工评审**。本修订只影响 Backend W9 的 PostgreSQL `command_audit` 新写入顺序、固定截止分页和迁移恢复;X2 已批准的“仅可信已提交项目业务操作可跨成员关联”、owner 私域、当前权限检查与 RDM 操作级投影不变。W9 当前独立分支 HEAD `0e8cd040cc75c329eb8950676acc7a9a08487ad2` 尚未合入或部署。
|
||||
|
||||
## 发现与风险
|
||||
|
||||
隔离 PostgreSQL 18.6 的 `TestProjectAuditPostgresCutoffLateCommit` 已实际复现:事务 A 先分配低 `command_audit.id` 但暂不提交,事务 B 后分配较高 ID 并先提交;同一 `CutoffOffset` 后来可读到原先不可见的低 ID。该测试证明当前截止水位**不是固定可见快照**,尚未直接模拟跨页漏行;正式 RED 还需构造已提交的更低 ID、未提交的中间 ID、已提交的较高 ID,第一页游标越过中间 ID 后再提交。现有页面诚实标 `cutoffConsistency=offset-upper-bound-only`,不能作为 W9/W8 稳定历史分页完成证据。SQLite 当前单写连接没有该并发路径;它的测试结果不能证明 PostgreSQL 安全。
|
||||
|
||||
`command_audit.id` 同时是宿主审计 source offset 和可信链接的定位键。`REPEATABLE READ` 只固定一次 HTTP 请求内快照,不能固定多次请求;在现有 `CutoffOffset` 整数合同下,读取端无法识别之后才提交的低 ID。若改为服务端持久分页快照或新提交序列列,就要扩展游标/存储和清理规则。当前生产写入口 `cmdbus → Store.AppendAudit` 省略 `id`;离线 `storage-migrate` 及测试会显式复制 ID。以下为**方案建议,不是已实施或通过的能力**。
|
||||
|
||||
## 建议的最小修复
|
||||
|
||||
在 W9 PostgreSQL 迁移中,把 `command_audit.id` 的默认生成器改为 `next_command_audit_id('command_audit'::regclass)`:函数先取得该表的**事务级 advisory lock**(独立双整数命名空间+表 OID),再调用原序列 `nextval`,锁随事务提交/回滚释放。所有受支持的在线审计 INSERT 均省略 ID、走此生成器;后一个事务不能在前一个分配 ID 的事务结束前取得 ID。**前提是该序列 `CACHE 1`、正向、不循环、下一 ID 始终为正且高于既有最大 ID**:PostgreSQL 官方文档说明 `CACHE > 1` 可使不同会话从预留块取号而乱序;迁移必须核验配置与当前位置,不满足时失败关闭并要求先停写、排空持有旧缓存的连接后单独处理,不能单靠 `ALTER SEQUENCE ... CACHE 1` 认为旧连接缓存立即失效。函数及启动检查也应拒绝后续不符配置。在线显式插入 ID、`setval`/`RESTART` 回退、运行中调整序列参数都列为禁止的维护动作;授权的离线复制只能在排他停写窗口进行,随后把序列推进到已复制最大 ID 之上。否则即便主键唯一也可能利用空洞制造低 ID 迟提交。提交成功的受支持在线新行因此形成 ID 前缀;回滚造成的空洞不被误认为待提交行。表迁移锁应等待旧写事务退出,避免新旧生成器在过渡窗口并发分配。该锁只串行审计 append 的事务,不作为项目业务事务或 RDM 事件的统一顺序。[序列缓存与跨会话乱序](https://www.postgresql.org/docs/18/sql-createsequence.html)、[ALTER SEQUENCE 对既有缓存连接的影响](https://www.postgresql.org/docs/18/sql-altersequence.html)、[事务级 advisory lock](https://www.postgresql.org/docs/18/functions-admin.html)。
|
||||
|
||||
仍保留现有数值 `CutoffOffset`、`BeforeOffset` 和 `HostAuditOffset` 字段,不改历史链接身份。PostgreSQL 固定截止只在 schema、序列不变量及受支持写入口均经运行时核验后报告 `committed-prefix`;任一条件无法证实时失败关闭或降为明确 `offset-upper-bound-only`,不能裸报强保证。迁移前的旧历史行在迁移完成时已提交,可纳入之后的新查询。迁移前已发出的旧游标若可能被外部使用,应拒绝或显式标旧语义,不能静默升级;本 W9 公开读面目前仅未合入候选,应在首次发布前验证没有已部署使用者。若回滚到旧 schema/二进制,先停写并执行受控 down;旧二进制会因未知迁移版本拒绝启动,降级后覆盖语义须回到 `offset-upper-bound-only`,不能继续声称已提交前缀。
|
||||
|
||||
离线复制的显式 ID 不经默认函数,`storage-migrate.advanceSequences` 当前只识别 `column_default LIKE 'nextval%'` 或 identity;改为函数默认后必须通过 `pg_get_serial_sequence` 所有权识别并在恢复后推进原序列至最大已有 ID。迁移 up/down 要在隔离副本验证,down 先恢复原 `nextval` 默认再移除函数。SQLite 保持现有行为。锁键应稳定限定该表,避免与其他 advisory lock 冲突;函数、权限和升级过程须在目标 PostgreSQL 版本重放,不把测试库成功当现网迁移授权。
|
||||
|
||||
## 影响与取舍
|
||||
|
||||
好处是无需新增公开分页字段或复制整批 ID 的服务端快照,能在同一数值 cutoff 下保证**新在线写入**的已提交前缀。代价是 PostgreSQL 全部 `command_audit` append 按事务串行;一个长事务或卡住的写入会使后续审计写入等待,进而影响命令完成时延。迁移需锁表和停顿写入,必须测等待、超时及回滚。继续使用现有无序列化 ID 只能维持 `offset-upper-bound-only` 且会漏读,不满足当前完整追溯审计验收;服务端持久快照可避免写入串行,但引入快照生存期、清理和授权 epoch 绑定,范围更大。
|
||||
|
||||
## 验证与停止条件
|
||||
|
||||
- 隔离 PG 至少三行/两事务的真实跨页漏行负例先 RED 后 GREEN;`CACHE 10` 跨连接乱序负例以及 `CACHE 1` 正例;回滚空洞、迟到可信链接、同项目两成员/撤权、长事务等待与锁/语句超时均保持真实结果。当前 `AppendAudit` 没有 `context.Context`,本次只用 PostgreSQL `lock_timeout`/`statement_timeout` 测等待中止,不宣称请求取消可直接中止。当前 SQLite/PG 宿主审计和链接测试不得回退。
|
||||
- 从既有 schema/数据升级并回滚,再在排他停写窗口运行离线 `storage-migrate` 复制显式 ID 并新增审计行;证明下一 ID 正且高于最大已有 ID、无重复键、原链接定位不变。用序列回退到空洞、在线显式 ID、`CACHE > 1`、不正常 down/旧二进制等负例证明强 coverage 不会被误报。迁移需与 W6 的 v31/v32 冲突在真实串行合入时重排并做组合验证,不能在两个未合分支各自宣称组合通过。
|
||||
- 压力测试记录审计 append 的等待/吞吐变化,超出可接受运行预算则停下并回到替代方案;阶段7继续验证 RDM operation 级分页及当前授权过滤。这个 Backend 修复不等于 W8 RDM 投影已完成。
|
||||
|
||||
请评审是否接受上述 PostgreSQL 新写入提交前缀语义和串行化代价。批准仅放行 W9 在隔离分支实现与测试;真实运行库迁移、发布及完整阶段6/7出口仍按原门禁。
|
||||
+161
@@ -0,0 +1,161 @@
|
||||
{
|
||||
"source": "SELF read-only API refresh, no PR mutation or merge performed",
|
||||
"checkedAt": "2026-10-14T08:43:14.885657+08:00",
|
||||
"repos": [
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"oldMain": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"main": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"oldMain": "add097d06137c4912a4ed9279e98ca353e4e4cf1",
|
||||
"main": "add097d06137c4912a4ed9279e98ca353e4e4cf1",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"oldMain": "a7ff466d9ae91fc67a53d2bf4991f47fc63a2a4c",
|
||||
"main": "a7ff466d9ae91fc67a53d2bf4991f47fc63a2a4c",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"oldMain": "eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b",
|
||||
"main": "eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"oldMain": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"main": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-UI",
|
||||
"oldMain": "2c4322ef56df64ad72f65907d25b048a74bb5ffc",
|
||||
"main": "2c4322ef56df64ad72f65907d25b048a74bb5ffc",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"repo": "Development-Guidelines",
|
||||
"oldMain": "2f5b19872be2a4597838a4131ad75d1be089ee5e",
|
||||
"main": "2f5b19872be2a4597838a4131ad75d1be089ee5e",
|
||||
"changed": false
|
||||
}
|
||||
],
|
||||
"prs": [
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"number": 193,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/193",
|
||||
"oldHead": "5f834544b0b808cb16214a36725f2ae3cb90bfd4",
|
||||
"head": "5f834544b0b808cb16214a36725f2ae3cb90bfd4",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"headChanged": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"number": 488,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/488",
|
||||
"oldHead": "334d2e2375095f3b4160ab232296f9c92065c565",
|
||||
"head": "334d2e2375095f3b4160ab232296f9c92065c565",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"headChanged": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"number": 489,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/489",
|
||||
"oldHead": "3e7f0360087b126f41fa9ce18dbd1e53d0a8f067",
|
||||
"head": "3e7f0360087b126f41fa9ce18dbd1e53d0a8f067",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"headChanged": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"number": 512,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/512",
|
||||
"oldHead": "e31443a8ff1f099f9b2ef320c295b0ddcdaf503d",
|
||||
"head": "e31443a8ff1f099f9b2ef320c295b0ddcdaf503d",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"headChanged": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"number": 89,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/89",
|
||||
"oldHead": "b8df6f3c2a3180b06c61d2303bbfea9a3914f186",
|
||||
"head": "b8df6f3c2a3180b06c61d2303bbfea9a3914f186",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"headChanged": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"number": 95,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/95",
|
||||
"oldHead": "c7cb2d8d89aaef0329c9a8a2045fcd42abb36e39",
|
||||
"head": "c7cb2d8d89aaef0329c9a8a2045fcd42abb36e39",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"headChanged": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"number": 73,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/73",
|
||||
"oldHead": "d9bb780384b16f661d71a5e6ad288a77426d9d98",
|
||||
"head": "d9bb780384b16f661d71a5e6ad288a77426d9d98",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"headChanged": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"number": 79,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/79",
|
||||
"oldHead": "006c81567546deb1cbd95abbb7ca6a36f99241b2",
|
||||
"head": "006c81567546deb1cbd95abbb7ca6a36f99241b2",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"headChanged": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"number": 301,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/301",
|
||||
"oldHead": "6252f62524ef34360fdcdf8844d7e729378ffbfb",
|
||||
"head": "6252f62524ef34360fdcdf8844d7e729378ffbfb",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"headChanged": false
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"number": 307,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/307",
|
||||
"oldHead": "8ae52a6d9a4d8b60e875f9c56862f34dffed7705",
|
||||
"head": "8ae52a6d9a4d8b60e875f9c56862f34dffed7705",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"headChanged": false
|
||||
}
|
||||
],
|
||||
"files": []
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
[
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/domain/persist.go",
|
||||
"sha256": "7d16e107d522311e106625776d8414c6d2c5d7bc19915364345298afde7fbc2c",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/domain/persist.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/tx.go",
|
||||
"sha256": "94892e4b85bf395c2f5059b26c9c694f202c4d1898af6c57bdd69b2d020b05f5",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/rdmapp/tx.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"ref": "d9bb780384b16f661d71a5e6ad288a77426d9d98",
|
||||
"pr": 73,
|
||||
"path": "src/components/RdmAuditWorkspace.tsx",
|
||||
"sha256": "825c3dc3f01d28e41c6a05e8ece09663f65c714213d2808fef7e618f9cf01fa1",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/pr-candidates/Agent-System-Frontend/73/src/components/RdmAuditWorkspace.tsx"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"ref": "c7cb2d8d89aaef0329c9a8a2045fcd42abb36e39",
|
||||
"pr": 95,
|
||||
"path": "docs/proposals/2026-10-13-fast-slow-u3-r03-evidence-backed-judgments-design.md",
|
||||
"sha256": "3acd6b99184748ceb25453a30c7d4e3c972fbe465d6dc9b11709fa725264038e",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/pr-candidates/Agent-System-Documents/95/docs/proposals/2026-10-13-fast-slow-u3-r03-evidence-backed-judgments-design.md"
|
||||
}
|
||||
]
|
||||
+876
@@ -0,0 +1,876 @@
|
||||
{
|
||||
"source": "SELF authenticated PR metadata and changed file list",
|
||||
"checkedAt": "2026-10-13T19:45:45.206279+00:00",
|
||||
"prs": [
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"number": 193,
|
||||
"title": "[WIP] Verify source-backed stage judgments before publication",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/193",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "5f834544b0b808cb16214a36725f2ae3cb90bfd4",
|
||||
"headStable": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "deps/agent-system-core",
|
||||
"status": "changed",
|
||||
"additions": 1,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "eval/live/work_checkpoints_persistence_test.go",
|
||||
"status": "added",
|
||||
"additions": 40,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "eval/live/work_checkpoints_test.go",
|
||||
"status": "added",
|
||||
"additions": 295,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/app/app.go",
|
||||
"status": "changed",
|
||||
"additions": 19,
|
||||
"deletions": 20,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/app/task_startup_test.go",
|
||||
"status": "added",
|
||||
"additions": 96,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/cardsvc/cardsvc.go",
|
||||
"status": "changed",
|
||||
"additions": 54,
|
||||
"deletions": 3,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/cardsvc/task_projection.go",
|
||||
"status": "added",
|
||||
"additions": 63,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/cardsvc/task_projection_test.go",
|
||||
"status": "added",
|
||||
"additions": 63,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/cardsvc/task_visibility.go",
|
||||
"status": "added",
|
||||
"additions": 98,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/cardsvc/task_visibility_test.go",
|
||||
"status": "added",
|
||||
"additions": 41,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/background_card_test.go",
|
||||
"status": "changed",
|
||||
"additions": 37,
|
||||
"deletions": 16,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/checkpoint_claim_guard.go",
|
||||
"status": "added",
|
||||
"additions": 99,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/checkpoint_claim_guard_test.go",
|
||||
"status": "added",
|
||||
"additions": 89,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/events.go",
|
||||
"status": "changed",
|
||||
"additions": 37,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/material.go",
|
||||
"status": "changed",
|
||||
"additions": 67,
|
||||
"deletions": 26,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/material_evidence.go",
|
||||
"status": "added",
|
||||
"additions": 286,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/material_evidence_test.go",
|
||||
"status": "added",
|
||||
"additions": 414,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/material_sources.go",
|
||||
"status": "added",
|
||||
"additions": 165,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/material_sources_test.go",
|
||||
"status": "added",
|
||||
"additions": 171,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/material_test.go",
|
||||
"status": "changed",
|
||||
"additions": 15,
|
||||
"deletions": 18,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/recovery_hold_test.go",
|
||||
"status": "changed",
|
||||
"additions": 2,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/runmgr.go",
|
||||
"status": "changed",
|
||||
"additions": 192,
|
||||
"deletions": 61,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/subagent_n2_test.go",
|
||||
"status": "changed",
|
||||
"additions": 42,
|
||||
"deletions": 3,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/subagent_transcript.go",
|
||||
"status": "changed",
|
||||
"additions": 19,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/task_checkpoint.go",
|
||||
"status": "added",
|
||||
"additions": 205,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/task_checkpoint_evidence_test.go",
|
||||
"status": "added",
|
||||
"additions": 227,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/task_checkpoint_test.go",
|
||||
"status": "added",
|
||||
"additions": 200,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/task_notice_revalidation_test.go",
|
||||
"status": "added",
|
||||
"additions": 56,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/task_projection.go",
|
||||
"status": "added",
|
||||
"additions": 409,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runmgr/task_projection_test.go",
|
||||
"status": "added",
|
||||
"additions": 186,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runtime/checkpoint_plugin_test.go",
|
||||
"status": "added",
|
||||
"additions": 16,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runtime/llm_direct.go",
|
||||
"status": "changed",
|
||||
"additions": 3,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runtime/llm_test.go",
|
||||
"status": "changed",
|
||||
"additions": 4,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runtime/material_final_reserve.go",
|
||||
"status": "added",
|
||||
"additions": 31,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runtime/material_final_reserve_test.go",
|
||||
"status": "added",
|
||||
"additions": 29,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runtime/provider_run_identity.go",
|
||||
"status": "added",
|
||||
"additions": 30,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runtime/run_budget_stream.go",
|
||||
"status": "added",
|
||||
"additions": 65,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runtime/run_budget_stream_test.go",
|
||||
"status": "added",
|
||||
"additions": 35,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runtime/sub_loop.go",
|
||||
"status": "changed",
|
||||
"additions": 135,
|
||||
"deletions": 11,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runtime/usage_n3_test.go",
|
||||
"status": "changed",
|
||||
"additions": 44,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runtime/work_checkpoint.go",
|
||||
"status": "added",
|
||||
"additions": 97,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/runtime/work_checkpoint_test.go",
|
||||
"status": "added",
|
||||
"additions": 367,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/server/server.go",
|
||||
"status": "changed",
|
||||
"additions": 36,
|
||||
"deletions": 6,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/server/task_sources.go",
|
||||
"status": "added",
|
||||
"additions": 54,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/server/task_sources_test.go",
|
||||
"status": "added",
|
||||
"additions": 38,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/server/work_checkpoint_eval_budget_test.go",
|
||||
"status": "added",
|
||||
"additions": 309,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/server/work_checkpoint_eval_test.go",
|
||||
"status": "added",
|
||||
"additions": 473,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/store/content.go",
|
||||
"status": "changed",
|
||||
"additions": 39,
|
||||
"deletions": 13,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/store/messages.go",
|
||||
"status": "changed",
|
||||
"additions": 22,
|
||||
"deletions": 10,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/store/notices.go",
|
||||
"status": "changed",
|
||||
"additions": 23,
|
||||
"deletions": 3,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/store/task_deletion_test.go",
|
||||
"status": "added",
|
||||
"additions": 55,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/store/task_projection.go",
|
||||
"status": "added",
|
||||
"additions": 307,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/store/task_projection_test.go",
|
||||
"status": "added",
|
||||
"additions": 158,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/tools/exec_backend_test.go",
|
||||
"status": "changed",
|
||||
"additions": 13,
|
||||
"deletions": 5,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"number": 488,
|
||||
"title": "Pin the audit overview export",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/488",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "334d2e2375095f3b4160ab232296f9c92065c565",
|
||||
"headStable": true,
|
||||
"files": [
|
||||
{
|
||||
"path": ".task/feature-rdm-audit-export-entry.md",
|
||||
"status": "added",
|
||||
"additions": 170,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "modules/frontend",
|
||||
"status": "changed",
|
||||
"additions": 1,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "scripts/e2e.sh",
|
||||
"status": "changed",
|
||||
"additions": 25,
|
||||
"deletions": 4,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"number": 489,
|
||||
"title": "Pin the approved U8, U7, and export status",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/489",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "3e7f0360087b126f41fa9ce18dbd1e53d0a8f067",
|
||||
"headStable": true,
|
||||
"files": [
|
||||
{
|
||||
"path": ".task/feature-proposal-status-20261012.md",
|
||||
"status": "added",
|
||||
"additions": 132,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "modules/documents",
|
||||
"status": "changed",
|
||||
"additions": 1,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"number": 512,
|
||||
"title": "[WIP] Deliver progressive U2/U3 work with evidence-backed judgments",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/512",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "e31443a8ff1f099f9b2ef320c295b0ddcdaf503d",
|
||||
"headStable": true,
|
||||
"files": [
|
||||
{
|
||||
"path": ".task/feature-fast-slow-u2-u3-plan.md",
|
||||
"status": "added",
|
||||
"additions": 6760,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "PROJECT.md",
|
||||
"status": "changed",
|
||||
"additions": 1,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "modules/backend",
|
||||
"status": "changed",
|
||||
"additions": 1,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "modules/core",
|
||||
"status": "changed",
|
||||
"additions": 1,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "modules/documents",
|
||||
"status": "changed",
|
||||
"additions": 1,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "modules/frontend",
|
||||
"status": "changed",
|
||||
"additions": 1,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "modules/ui",
|
||||
"status": "changed",
|
||||
"additions": 1,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "tests/test_svc.py",
|
||||
"status": "changed",
|
||||
"additions": 7,
|
||||
"deletions": 3,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "tests/test_svc_recover.py",
|
||||
"status": "changed",
|
||||
"additions": 22,
|
||||
"deletions": 14,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"number": 89,
|
||||
"title": "Record the approved U8, U7, and export status",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/89",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "b8df6f3c2a3180b06c61d2303bbfea9a3914f186",
|
||||
"headStable": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "docs/proposals/2026-10-11-rdm-two-trees-trace-audit-integration.md",
|
||||
"status": "changed",
|
||||
"additions": 3,
|
||||
"deletions": 2,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/proposals/2026-10-12-service-restart-data-recovery.md",
|
||||
"status": "changed",
|
||||
"additions": 4,
|
||||
"deletions": 3,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/proposals/2026-10-12-svc-unified-deploy-and-login-key.md",
|
||||
"status": "changed",
|
||||
"additions": 3,
|
||||
"deletions": 2,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"number": 95,
|
||||
"title": "[WIP] Record U3 evidence design, implementation, and validation",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/95",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "c7cb2d8d89aaef0329c9a8a2045fcd42abb36e39",
|
||||
"headStable": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "docs/proposals/2026-10-12-fast-slow-channel-display.md",
|
||||
"status": "changed",
|
||||
"additions": 8,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/proposals/2026-10-13-fast-slow-u2-u3-plan.md",
|
||||
"status": "added",
|
||||
"additions": 462,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/proposals/2026-10-13-fast-slow-u3-quality-implementation-plan.md",
|
||||
"status": "added",
|
||||
"additions": 259,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/proposals/2026-10-13-fast-slow-u3-quality-revision.md",
|
||||
"status": "added",
|
||||
"additions": 45,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/proposals/2026-10-13-fast-slow-u3-r03-evidence-backed-judgments-design.md",
|
||||
"status": "added",
|
||||
"additions": 56,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/proposals/2026-10-13-fast-slow-u3-r03-evidence-implementation-plan.md",
|
||||
"status": "added",
|
||||
"additions": 144,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/proposals/INDEX.md",
|
||||
"status": "changed",
|
||||
"additions": 4,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/reports/2026-10-13-fast-slow-u2-u3-code-review.md",
|
||||
"status": "added",
|
||||
"additions": 135,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/reports/2026-10-13-fast-slow-u2-u3-extra-a01-review.md",
|
||||
"status": "added",
|
||||
"additions": 83,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "docs/reports/2026-10-13-fast-slow-u2-u3-validation.md",
|
||||
"status": "added",
|
||||
"additions": 130,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"number": 73,
|
||||
"title": "Add audit overview export without widening the readiness gate",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/73",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "d9bb780384b16f661d71a5e6ad288a77426d9d98",
|
||||
"headStable": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "e2e/rdm-audit.playwright.ts",
|
||||
"status": "changed",
|
||||
"additions": 20,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "src/components/RdmAuditWorkspace.tsx",
|
||||
"status": "changed",
|
||||
"additions": 114,
|
||||
"deletions": 2,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "src/store.ts",
|
||||
"status": "changed",
|
||||
"additions": 6,
|
||||
"deletions": 2,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "src/styles.css",
|
||||
"status": "changed",
|
||||
"additions": 8,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "src/workspaces.ts",
|
||||
"status": "changed",
|
||||
"additions": 18,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "test/workspaces.test.ts",
|
||||
"status": "changed",
|
||||
"additions": 26,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"number": 79,
|
||||
"title": "[WIP] Preserve reading and show pending stage findings",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/79",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "006c81567546deb1cbd95abbb7ca6a36f99241b2",
|
||||
"headStable": true,
|
||||
"files": [
|
||||
{
|
||||
"path": "e2e/work-checkpoints.playwright.ts",
|
||||
"status": "added",
|
||||
"additions": 63,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "knip-baseline.json",
|
||||
"status": "changed",
|
||||
"additions": 1,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "src/api.ts",
|
||||
"status": "changed",
|
||||
"additions": 2,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "src/components/ConversationWork.tsx",
|
||||
"status": "changed",
|
||||
"additions": 1,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "src/components/PreviewPane.tsx",
|
||||
"status": "changed",
|
||||
"additions": 7,
|
||||
"deletions": 4,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "src/components/Workbench.tsx",
|
||||
"status": "changed",
|
||||
"additions": 1,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "src/contracts.ts",
|
||||
"status": "changed",
|
||||
"additions": 27,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "src/previewtabs.ts",
|
||||
"status": "changed",
|
||||
"additions": 2,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "src/store.ts",
|
||||
"status": "changed",
|
||||
"additions": 74,
|
||||
"deletions": 10,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "test/work-state.test.ts",
|
||||
"status": "changed",
|
||||
"additions": 60,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"number": 301,
|
||||
"title": "Bind audit exports to the captured watermark",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/301",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "6252f62524ef34360fdcdf8844d7e729378ffbfb",
|
||||
"headStable": true,
|
||||
"files": [
|
||||
{
|
||||
"path": ".task/feature-rdm-u5-export-completion.md",
|
||||
"status": "added",
|
||||
"additions": 73,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/domain/persist.go",
|
||||
"status": "changed",
|
||||
"additions": 21,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/rdmapp/cgraph_export.go",
|
||||
"status": "changed",
|
||||
"additions": 15,
|
||||
"deletions": 42,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/rdmapp/export_artifact.go",
|
||||
"status": "changed",
|
||||
"additions": 33,
|
||||
"deletions": 17,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/rdmapp/export_report.go",
|
||||
"status": "added",
|
||||
"additions": 249,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/rdmapp/u5_export_test.go",
|
||||
"status": "changed",
|
||||
"additions": 203,
|
||||
"deletions": 5,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "internal/rdmapp/xlsx.go",
|
||||
"status": "changed",
|
||||
"additions": 80,
|
||||
"deletions": 52,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "plugins/rdm/plugin.go",
|
||||
"status": "changed",
|
||||
"additions": 6,
|
||||
"deletions": 4,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"number": 307,
|
||||
"title": "Pin the audit overview export frontend",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/307",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "8ae52a6d9a4d8b60e875f9c56862f34dffed7705",
|
||||
"headStable": true,
|
||||
"files": [
|
||||
{
|
||||
"path": ".task/feature-rdm-pin-frontend-export.md",
|
||||
"status": "added",
|
||||
"additions": 32,
|
||||
"deletions": 0,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"path": "pins/agent-system-frontend",
|
||||
"status": "changed",
|
||||
"additions": 1,
|
||||
"deletions": 1,
|
||||
"patchSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"errors": []
|
||||
}
|
||||
+538
@@ -0,0 +1,538 @@
|
||||
{
|
||||
"source": "SELF authenticated read-only API snapshot",
|
||||
"checkedAt": "2026-10-13T19:41:27.766582+00:00",
|
||||
"readIdentity": {
|
||||
"login": "weichen"
|
||||
},
|
||||
"credentialSource": "~/.secrets/gitea; unique token bound to verified git-home URL_PREFIX; token omitted",
|
||||
"repos": [
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"main": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 193,
|
||||
"title": "[WIP] Verify source-backed stage judgments before publication",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/193",
|
||||
"state": "open",
|
||||
"draft": true,
|
||||
"head": "5f834544b0b808cb16214a36725f2ae3cb90bfd4",
|
||||
"headRef": "feature/fast-slow-u2-u3",
|
||||
"base": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-13T18:20:36Z",
|
||||
"relevanceCandidate": true
|
||||
},
|
||||
{
|
||||
"number": 185,
|
||||
"title": "Commit account changes and audits in one transaction",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/185",
|
||||
"state": "open",
|
||||
"draft": false,
|
||||
"head": "9754531cc98393cb8a936d0e25a7526dfabbe2c4",
|
||||
"headRef": "feature/u7-account-tx-audit",
|
||||
"base": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-12T15:49:44Z",
|
||||
"relevanceCandidate": true
|
||||
},
|
||||
{
|
||||
"number": 183,
|
||||
"title": "Refuse a second SQLite service before migration",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/183",
|
||||
"state": "open",
|
||||
"draft": false,
|
||||
"head": "167609b3db6ef850c31eee71421c650f849a009c",
|
||||
"headRef": "feature/u8-sqlite-instance-guard",
|
||||
"base": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-12T15:46:24Z",
|
||||
"relevanceCandidate": false
|
||||
}
|
||||
],
|
||||
"pages": 1
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"main": "add097d06137c4912a4ed9279e98ca353e4e4cf1",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 512,
|
||||
"title": "[WIP] Deliver progressive U2/U3 work with evidence-backed judgments",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/512",
|
||||
"state": "open",
|
||||
"draft": true,
|
||||
"head": "e31443a8ff1f099f9b2ef320c295b0ddcdaf503d",
|
||||
"headRef": "feature/fast-slow-u2-u3-plan",
|
||||
"base": "add097d06137c4912a4ed9279e98ca353e4e4cf1",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-13T18:20:38Z",
|
||||
"relevanceCandidate": true
|
||||
},
|
||||
{
|
||||
"number": 489,
|
||||
"title": "Pin the approved U8, U7, and export status",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/489",
|
||||
"state": "open",
|
||||
"draft": false,
|
||||
"head": "3e7f0360087b126f41fa9ce18dbd1e53d0a8f067",
|
||||
"headRef": "feature/proposal-status-20261012",
|
||||
"base": "add097d06137c4912a4ed9279e98ca353e4e4cf1",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-12T15:54:15Z",
|
||||
"relevanceCandidate": true
|
||||
},
|
||||
{
|
||||
"number": 488,
|
||||
"title": "Pin the audit overview export",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/488",
|
||||
"state": "open",
|
||||
"draft": false,
|
||||
"head": "334d2e2375095f3b4160ab232296f9c92065c565",
|
||||
"headRef": "feature/rdm-audit-export-entry",
|
||||
"base": "add097d06137c4912a4ed9279e98ca353e4e4cf1",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-12T16:04:53Z",
|
||||
"relevanceCandidate": true
|
||||
},
|
||||
{
|
||||
"number": 486,
|
||||
"title": "Pin account transactions and note deprecated credential flags",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/486",
|
||||
"state": "open",
|
||||
"draft": false,
|
||||
"head": "5156d66302b3dcabd0a2306b1857d12ea4ec6a08",
|
||||
"headRef": "feature/u7-account-tx-audit",
|
||||
"base": "add097d06137c4912a4ed9279e98ca353e4e4cf1",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-12T15:50:47Z",
|
||||
"relevanceCandidate": true
|
||||
},
|
||||
{
|
||||
"number": 482,
|
||||
"title": "Pin the SQLite activity guard and document its refusals",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/482",
|
||||
"state": "open",
|
||||
"draft": false,
|
||||
"head": "d5e8d6ab7a368f08b29e968b6f65f8898f2b28f5",
|
||||
"headRef": "feature/u8-sqlite-instance-guard",
|
||||
"base": "add097d06137c4912a4ed9279e98ca353e4e4cf1",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-12T15:47:57Z",
|
||||
"relevanceCandidate": true
|
||||
},
|
||||
{
|
||||
"number": 471,
|
||||
"title": "Close merged task cards (feature/card-close-20261012-123313Z)",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/471",
|
||||
"state": "open",
|
||||
"draft": false,
|
||||
"head": "f0e8a87b8e2dca989637d3b136faf2f0bc3ddd4b",
|
||||
"headRef": "feature/card-close-20261012-123313Z",
|
||||
"base": "add097d06137c4912a4ed9279e98ca353e4e4cf1",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-12T12:33:14Z",
|
||||
"relevanceCandidate": false
|
||||
}
|
||||
],
|
||||
"pages": 1
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"main": "a7ff466d9ae91fc67a53d2bf4991f47fc63a2a4c",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 95,
|
||||
"title": "[WIP] Record U3 evidence design, implementation, and validation",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/95",
|
||||
"state": "open",
|
||||
"draft": true,
|
||||
"head": "c7cb2d8d89aaef0329c9a8a2045fcd42abb36e39",
|
||||
"headRef": "feature/fast-slow-u2-u3-plan",
|
||||
"base": "a7ff466d9ae91fc67a53d2bf4991f47fc63a2a4c",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-13T18:20:37Z",
|
||||
"relevanceCandidate": true
|
||||
},
|
||||
{
|
||||
"number": 89,
|
||||
"title": "Record the approved U8, U7, and export status",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/89",
|
||||
"state": "open",
|
||||
"draft": false,
|
||||
"head": "b8df6f3c2a3180b06c61d2303bbfea9a3914f186",
|
||||
"headRef": "feature/u8-u7-rdm-export-status",
|
||||
"base": "a7ff466d9ae91fc67a53d2bf4991f47fc63a2a4c",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-12T15:43:05Z",
|
||||
"relevanceCandidate": true
|
||||
}
|
||||
],
|
||||
"pages": 1
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"main": "eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 79,
|
||||
"title": "[WIP] Preserve reading and show pending stage findings",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/79",
|
||||
"state": "open",
|
||||
"draft": true,
|
||||
"head": "006c81567546deb1cbd95abbb7ca6a36f99241b2",
|
||||
"headRef": "feature/fast-slow-u2-u3",
|
||||
"base": "eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-13T18:20:36Z",
|
||||
"relevanceCandidate": true
|
||||
},
|
||||
{
|
||||
"number": 73,
|
||||
"title": "Add audit overview export without widening the readiness gate",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/73",
|
||||
"state": "open",
|
||||
"draft": false,
|
||||
"head": "d9bb780384b16f661d71a5e6ad288a77426d9d98",
|
||||
"headRef": "feature/rdm-audit-export-entry",
|
||||
"base": "eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-12T15:38:15Z",
|
||||
"relevanceCandidate": true
|
||||
}
|
||||
],
|
||||
"pages": 1
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"main": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 307,
|
||||
"title": "Pin the audit overview export frontend",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/307",
|
||||
"state": "open",
|
||||
"draft": false,
|
||||
"head": "8ae52a6d9a4d8b60e875f9c56862f34dffed7705",
|
||||
"headRef": "feature/rdm-pin-frontend-export",
|
||||
"base": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-12T15:58:16Z",
|
||||
"relevanceCandidate": true
|
||||
},
|
||||
{
|
||||
"number": 301,
|
||||
"title": "Bind audit exports to the captured watermark",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/301",
|
||||
"state": "open",
|
||||
"draft": false,
|
||||
"head": "6252f62524ef34360fdcdf8844d7e729378ffbfb",
|
||||
"headRef": "feature/rdm-u5-export-completion",
|
||||
"base": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-12T15:31:06Z",
|
||||
"relevanceCandidate": true
|
||||
}
|
||||
],
|
||||
"pages": 1
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-UI",
|
||||
"main": "2c4322ef56df64ad72f65907d25b048a74bb5ffc",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 51,
|
||||
"title": "[WIP] Separate source records, judgments, and pending questions",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-UI/pulls/51",
|
||||
"state": "open",
|
||||
"draft": true,
|
||||
"head": "ac5b617e9e7ee6b9417b36c66d7c6e3b58ecbb42",
|
||||
"headRef": "feature/fast-slow-u2-u3",
|
||||
"base": "2c4322ef56df64ad72f65907d25b048a74bb5ffc",
|
||||
"baseRef": "main",
|
||||
"updatedAt": "2026-10-13T18:20:36Z",
|
||||
"relevanceCandidate": false
|
||||
}
|
||||
],
|
||||
"pages": 1
|
||||
},
|
||||
{
|
||||
"repo": "Development-Guidelines",
|
||||
"main": "2f5b19872be2a4597838a4131ad75d1be089ee5e",
|
||||
"openPulls": [],
|
||||
"pages": 1
|
||||
}
|
||||
],
|
||||
"files": [
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"ref": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"path": "internal/ctxasm/ctxasm.go",
|
||||
"blob": "010a3d55235ce1caf419a521421358a851b64729",
|
||||
"sha256": "f5e7350628d1289c8f024dff5d21db04f733366a98100d31258f3e49b77ff933",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Backend/internal/ctxasm/ctxasm.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/src/commit/5d5fc9891c0eb8994545ccb8b740535d9b99fb0e/internal/ctxasm/ctxasm.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"ref": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"path": "internal/ingest/ingest.go",
|
||||
"blob": "e409c49b4d23bf49318d91b395f8b070b62ed071",
|
||||
"sha256": "7a9249a212b91488d3a273afc64f61e8b2ce50ea4187db05ad4eda3fd3ccf163",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Backend/internal/ingest/ingest.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/src/commit/5d5fc9891c0eb8994545ccb8b740535d9b99fb0e/internal/ingest/ingest.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"ref": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"path": "internal/runmgr/memory.go",
|
||||
"blob": "c9bf4326df411cacd289ef767fd003642da6fc2f",
|
||||
"sha256": "03d235349d56e3feae29d36b63c284857ec77595aa2e647730f8e192db2fa7a1",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Backend/internal/runmgr/memory.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/src/commit/5d5fc9891c0eb8994545ccb8b740535d9b99fb0e/internal/runmgr/memory.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"ref": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"path": "internal/runtime/llm.go",
|
||||
"blob": "d06dae1149ae402f1482fbec14069d2062a37bb7",
|
||||
"sha256": "5ae366d8c2c01e2b79fb6ff9d3f78147b82dce9dccee163d8cc880f5d3caa8d1",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Backend/internal/runtime/llm.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/src/commit/5d5fc9891c0eb8994545ccb8b740535d9b99fb0e/internal/runtime/llm.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"ref": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"path": "internal/store/audit.go",
|
||||
"blob": "b5479a852abe47be35884c2bf55a0bbddc0982f9",
|
||||
"sha256": "54a7c6ab8315f3c0b3f0ec97ab857925a7a745453a2a41fb28051e54423ecf9a",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Backend/internal/store/audit.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/src/commit/5d5fc9891c0eb8994545ccb8b740535d9b99fb0e/internal/store/audit.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"ref": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"path": "pkg/extension/extension.go",
|
||||
"blob": "2454e4e0337eb6f3858f01b58b49f3d809c11e8d",
|
||||
"sha256": "57e00f6e5d21e28c4bfddf8b2fe3929e70826581d3feb94d557f1c9e2830ed42",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Backend/pkg/extension/extension.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/src/commit/5d5fc9891c0eb8994545ccb8b740535d9b99fb0e/pkg/extension/extension.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"ref": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"path": "pkg/extension/host.go",
|
||||
"blob": "c528b810020b95c4d1b39a9637cebb0abdb2608c",
|
||||
"sha256": "4ad991e1a63c2051c96ff50ae55bf346ebb16aa56e2fef5f408d8fd03bc61f2d",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Backend/pkg/extension/host.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/src/commit/5d5fc9891c0eb8994545ccb8b740535d9b99fb0e/pkg/extension/host.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"ref": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"path": "pkg/extension/projects.go",
|
||||
"blob": "d0f50421836b90bef13cc5ee05bbcd80b897322f",
|
||||
"sha256": "f00cca35978c61d267e692b6960318bd874d219114c184435ae6c313c7bbefaa",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Backend/pkg/extension/projects.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/src/commit/5d5fc9891c0eb8994545ccb8b740535d9b99fb0e/pkg/extension/projects.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"ref": "add097d06137c4912a4ed9279e98ca353e4e4cf1",
|
||||
"path": "PROJECT.md",
|
||||
"blob": "10eba3415ae45bee28b0e1c0ae7b3fe371a8f18b",
|
||||
"sha256": "38ef642f201d005be043b9228b84af7b13a0edffdb33807a6d033067e8a73b6e",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Dev/PROJECT.md",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/src/commit/add097d06137c4912a4ed9279e98ca353e4e4cf1/PROJECT.md"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"ref": "add097d06137c4912a4ed9279e98ca353e4e4cf1",
|
||||
"path": "policy/delivery.md",
|
||||
"blob": "252aa9c2e4d4878fefb21eaab56543878bb46eac",
|
||||
"sha256": "cbf854a915fd32d18a33c0a9b342ac6e5914ad10d0ec6563ccf4016d8b152614",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Dev/policy/delivery.md",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/src/commit/add097d06137c4912a4ed9279e98ca353e4e4cf1/policy/delivery.md"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"ref": "a7ff466d9ae91fc67a53d2bf4991f47fc63a2a4c",
|
||||
"path": "docs/proposals/2026-10-11-rdm-template-dialog-generation.md",
|
||||
"blob": "a843824d11a222785e26ac5e3c74855c1f7bcc92",
|
||||
"sha256": "70c816164b612cddf56ed897d3528cfedc8db3d024a49a8b28fe03e9136a5a20",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Documents/docs/proposals/2026-10-11-rdm-template-dialog-generation.md",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/src/commit/a7ff466d9ae91fc67a53d2bf4991f47fc63a2a4c/docs/proposals/2026-10-11-rdm-template-dialog-generation.md"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"ref": "a7ff466d9ae91fc67a53d2bf4991f47fc63a2a4c",
|
||||
"path": "docs/proposals/2026-10-13-system-project-membership.md",
|
||||
"blob": "db9aa3d7094f9f6df88e61516ed0d539d471cbee",
|
||||
"sha256": "0c622e12fde58e38b50929299e3c99ebb28956973b7b2803e03af6a606121987",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Documents/docs/proposals/2026-10-13-system-project-membership.md",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/src/commit/a7ff466d9ae91fc67a53d2bf4991f47fc63a2a4c/docs/proposals/2026-10-13-system-project-membership.md"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"ref": "a7ff466d9ae91fc67a53d2bf4991f47fc63a2a4c",
|
||||
"path": "docs/proposals/INDEX.md",
|
||||
"blob": "4043a589170b020bfed3c62c4f50ad2ada0fd821",
|
||||
"sha256": "cf9e330cec2e5c329e941c8c42488dd1e694de98fe28a0f713f25e8e036c4538",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Documents/docs/proposals/INDEX.md",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/src/commit/a7ff466d9ae91fc67a53d2bf4991f47fc63a2a4c/docs/proposals/INDEX.md"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"ref": "eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b",
|
||||
"path": "src/components/RdmAuditWorkspace.tsx",
|
||||
"blob": "7653201b70934b85a82dc02bcd900c4e6511fb31",
|
||||
"sha256": "ac406be59baab7eeb859dba49636aa5af579dbcf7aadbf1929a0aa346a56d1d6",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-Frontend/src/components/RdmAuditWorkspace.tsx",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/src/commit/eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b/src/components/RdmAuditWorkspace.tsx"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "README.md",
|
||||
"blob": "5caeb8dd714d6e6f5999a7bec324bea686f8a9cb",
|
||||
"sha256": "7dbe615f0aebe88bc2bcd0c35c4e102ba2917738bcf0c0e7ffc8bf5810676d07",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/README.md",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/README.md"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "go.mod",
|
||||
"blob": "fe5c6e3bf641f9631b595e14d2a6769207c31d13",
|
||||
"sha256": "9408a2113325d19339d4533f065c8371f7d9ef0141faa427f9c104a1bbd1612f",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/go.mod",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/go.mod"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/domain/compliance.go",
|
||||
"blob": "badff2b02703a630ebe1ff62b247530144b3bea5",
|
||||
"sha256": "5791c647bfd1579b3c512006c9ce03200db13023dc350324fccecb2d29da0fb9",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/domain/compliance.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/internal/domain/compliance.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/domain/data/labels_seed.json",
|
||||
"blob": "4af596ea44a4d98bd8ee0540296a678fcc895aa0",
|
||||
"sha256": "2267284dacaa19693f531722de0233ea9bbf3b74f54bc58dd71648d60416d22e",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/domain/data/labels_seed.json",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/internal/domain/data/labels_seed.json"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/domain/doctree.go",
|
||||
"blob": "e2441f7bf3f0961f51fc4fd9d18058f83b0967ec",
|
||||
"sha256": "9d0d9d72b252de0011be863ab50fd976f54bcd239b27d42ab3f3cc7b94727285",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/domain/doctree.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/internal/domain/doctree.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/domain/eventlog.go",
|
||||
"blob": "aa0fac0b6d6a1d56bdc2e9f859a3bfb991533eaf",
|
||||
"sha256": "3450726fc9c0dc4a3fea6b5225fff081d5d56ccdf151ce8a1b1a8fbc57333e8c",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/domain/eventlog.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/internal/domain/eventlog.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/domain/labels.go",
|
||||
"blob": "ce2f15505463ecb7a0372aebfe77bc1d4851ab3e",
|
||||
"sha256": "2c796df8c0ace2d8044a83d4115c4f5956d71d9049c87b7fbe9a06e6fdae944c",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/domain/labels.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/internal/domain/labels.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/domain/notetree.go",
|
||||
"blob": "e4d8003799b174d6a61026cb6be2adeac7bc953e",
|
||||
"sha256": "bb6228fd00fbc0a5aaff4958cd70c7789ff1d7d2c34dcb1ee2dfc1630a43ef0e",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/domain/notetree.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/internal/domain/notetree.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/compose.go",
|
||||
"blob": "b9fddaf7178968f05f1c8b3cd8b91aeaaa786475",
|
||||
"sha256": "b2da219785cbf44ee53d1408e56628f44619c8dd93fb4415f2daa9013b591349",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/rdmapp/compose.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/internal/rdmapp/compose.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/inspection.go",
|
||||
"blob": "5d0eb1c377a344acb70dc82202d2ffd2f0599ac7",
|
||||
"sha256": "27368362233f8ff8b0c3e2d7c78a12162e5d12dc2545347b1270521182a2651e",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/rdmapp/inspection.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/internal/rdmapp/inspection.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/knowledge_publication.go",
|
||||
"blob": "fa6689f289734fa00379b6dbc9171fae50fcfa3b",
|
||||
"sha256": "10e19a7729b8b27125bd8de6a94f0373df9db09c401b7b1294b65a796ba9f985",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/rdmapp/knowledge_publication.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/internal/rdmapp/knowledge_publication.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/runtime.go",
|
||||
"blob": "ae9af0048d1f760189a8e0f4c5fa1a96f528e435",
|
||||
"sha256": "b6891677477e0bfe596c7cf2ce074497bd316037145d116745b66e79edb29fee",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/rdmapp/runtime.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/internal/rdmapp/runtime.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/structure.go",
|
||||
"blob": "57a28e963c16eda7727e3bb5e94986b0e46b0f3f",
|
||||
"sha256": "116a25bf5e76f940f54ba67b87b855c5953b944a4ca4f088953766a35563fa86",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/rdmapp/structure.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/internal/rdmapp/structure.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/templates/registry.yaml",
|
||||
"blob": "fada623997e4a23a695445332a69175a15df566b",
|
||||
"sha256": "094da101f08ce686c92475d2f03090596d0b203ce61ac24cb7438a0bf0485ab0",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/rdmapp/templates/registry.yaml",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/internal/rdmapp/templates/registry.yaml"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/templates_gen.go",
|
||||
"blob": "5b4d71f968a40a3114c2331fc3d6c876b97c7ec0",
|
||||
"sha256": "8d4a68a31b69ab1834e66acc583211614d8177d23e1844bd4aa61c98ff57547c",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/internal/rdmapp/templates_gen.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/internal/rdmapp/templates_gen.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "plugins/rdm/plugin.go",
|
||||
"blob": "41f927e96d9c48bf61cdb792dae497a5956e20e6",
|
||||
"sha256": "25382894886fef7e9015d254fc416766d9cd7ce355671c088d2c34b0870a2eb8",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage2-sources/Agent-System-RDM/plugins/rdm/plugin.go",
|
||||
"sourceUrl": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/6fcb256205c2384abed35d3b6ab96ca7216e9297/plugins/rdm/plugin.go"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,422 @@
|
||||
{
|
||||
"source": "SELF",
|
||||
"checkedAt": "2026-10-14T10:39:40.639912+08:00",
|
||||
"repos": [
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"main": "f00165e8d71e4dc8ba0ceb7dc50c1a8a3deb6d60",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 537,
|
||||
"title": "[WIP] Replace submodule coupling with versioned dependencies and source workspaces",
|
||||
"head": "12d875c615cdd8394b9b8bdb586bbca4c02b4241",
|
||||
"branch": "feature/dependency-workspace",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/537"
|
||||
},
|
||||
{
|
||||
"number": 512,
|
||||
"title": "[WIP] Deliver progressive U2/U3 work with evidence-backed judgments",
|
||||
"head": "a74318ab4b7d4f6fadd06675f3d1893361df722f",
|
||||
"branch": "feature/fast-slow-u2-u3-plan",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/512"
|
||||
},
|
||||
{
|
||||
"number": 488,
|
||||
"title": "Pin the audit overview export",
|
||||
"head": "334d2e2375095f3b4160ab232296f9c92065c565",
|
||||
"branch": "feature/rdm-audit-export-entry",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/488"
|
||||
},
|
||||
{
|
||||
"number": 486,
|
||||
"title": "Pin account transactions and note deprecated credential flags",
|
||||
"head": "5156d66302b3dcabd0a2306b1857d12ea4ec6a08",
|
||||
"branch": "feature/u7-account-tx-audit",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/486"
|
||||
},
|
||||
{
|
||||
"number": 482,
|
||||
"title": "Pin the SQLite activity guard and document its refusals",
|
||||
"head": "d5e8d6ab7a368f08b29e968b6f65f8898f2b28f5",
|
||||
"branch": "feature/u8-sqlite-instance-guard",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/482"
|
||||
},
|
||||
{
|
||||
"number": 471,
|
||||
"title": "Close merged task cards (feature/card-close-20261012-123313Z)",
|
||||
"head": "f0e8a87b8e2dca989637d3b136faf2f0bc3ddd4b",
|
||||
"branch": "feature/card-close-20261012-123313Z",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/471"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"main": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 363,
|
||||
"title": "[WIP] Build RDM from versioned dependencies and a fixed product composer",
|
||||
"head": "842a864d140dd4371989c2491b132973b48d728d",
|
||||
"branch": "feature/versioned-dependencies",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/363"
|
||||
},
|
||||
{
|
||||
"number": 307,
|
||||
"title": "Pin the audit overview export frontend",
|
||||
"head": "8ae52a6d9a4d8b60e875f9c56862f34dffed7705",
|
||||
"branch": "feature/rdm-pin-frontend-export",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/307"
|
||||
},
|
||||
{
|
||||
"number": 301,
|
||||
"title": "Bind audit exports to the captured watermark",
|
||||
"head": "6252f62524ef34360fdcdf8844d7e729378ffbfb",
|
||||
"branch": "feature/rdm-u5-export-completion",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/301"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"main": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 196,
|
||||
"title": "[WIP] Build the Backend from versioned Go libraries and fixed frontend composition",
|
||||
"head": "fffd5790cfab317fadafb40fa55a11bab6e9a847",
|
||||
"branch": "feature/versioned-dependencies",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/196"
|
||||
},
|
||||
{
|
||||
"number": 193,
|
||||
"title": "[WIP] Verify source-backed stage judgments before publication",
|
||||
"head": "5f834544b0b808cb16214a36725f2ae3cb90bfd4",
|
||||
"branch": "feature/fast-slow-u2-u3",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/193"
|
||||
},
|
||||
{
|
||||
"number": 185,
|
||||
"title": "Commit account changes and audits in one transaction",
|
||||
"head": "9754531cc98393cb8a936d0e25a7526dfabbe2c4",
|
||||
"branch": "feature/u7-account-tx-audit",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/185"
|
||||
},
|
||||
{
|
||||
"number": 183,
|
||||
"title": "Refuse a second SQLite service before migration",
|
||||
"head": "167609b3db6ef850c31eee71421c650f849a009c",
|
||||
"branch": "feature/u8-sqlite-instance-guard",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/183"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"main": "eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 84,
|
||||
"title": "[WIP] Build Frontend from versioned UI and contract packages",
|
||||
"head": "5467517e1831e7ca8b58bb5df52494a3a2c9d468",
|
||||
"branch": "feature/versioned-dependencies",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/84"
|
||||
},
|
||||
{
|
||||
"number": 79,
|
||||
"title": "[WIP] Preserve reading and show pending stage findings",
|
||||
"head": "006c81567546deb1cbd95abbb7ca6a36f99241b2",
|
||||
"branch": "feature/fast-slow-u2-u3",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/79"
|
||||
},
|
||||
{
|
||||
"number": 73,
|
||||
"title": "Add audit overview export without widening the readiness gate",
|
||||
"head": "d9bb780384b16f661d71a5e6ad288a77426d9d98",
|
||||
"branch": "feature/rdm-audit-export-entry",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/73"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"main": "7bd4e17827d4c7c88647bf3c9199c495b60cb107",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 100,
|
||||
"title": "[WIP] Record approved version-dependency and active-branch transition requirements",
|
||||
"head": "1de7d17110efaa5ed2ed30a44d415f28987f89f3",
|
||||
"branch": "feature/dependency-workspace-plan",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/100"
|
||||
},
|
||||
{
|
||||
"number": 95,
|
||||
"title": "[WIP] Document U3 r0.4 recovery design and plan",
|
||||
"head": "276f885e7301bd39ae2d464c7469a37fe10ebf22",
|
||||
"branch": "feature/fast-slow-u2-u3-plan",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/95"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-UI",
|
||||
"main": "2c4322ef56df64ad72f65907d25b048a74bb5ffc",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 54,
|
||||
"title": "[WIP] Consume UI as a fixed package and verify packed consumers with cold caches",
|
||||
"head": "63d289e6bc15b701356cfe2d5b8740210fac0dcc",
|
||||
"branch": "feature/versioned-dependencies",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-UI/pulls/54"
|
||||
},
|
||||
{
|
||||
"number": 51,
|
||||
"title": "[WIP] Separate source records, judgments, and pending questions",
|
||||
"head": "ac5b617e9e7ee6b9417b36c66d7c6e3b58ecbb42",
|
||||
"branch": "feature/fast-slow-u2-u3",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-UI/pulls/51"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"files": [
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/domain/doctree.go",
|
||||
"sha256": "9d0d9d72b252de0011be863ab50fd976f54bcd239b27d42ab3f3cc7b94727285",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-RDM/internal/domain/doctree.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/domain/labels.go",
|
||||
"sha256": "2c796df8c0ace2d8044a83d4115c4f5956d71d9049c87b7fbe9a06e6fdae944c",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-RDM/internal/domain/labels.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/domain/eventlog.go",
|
||||
"sha256": "3450726fc9c0dc4a3fea6b5225fff081d5d56ccdf151ce8a1b1a8fbc57333e8c",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-RDM/internal/domain/eventlog.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/runtime.go",
|
||||
"sha256": "b6891677477e0bfe596c7cf2ce074497bd316037145d116745b66e79edb29fee",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-RDM/internal/rdmapp/runtime.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/tx.go",
|
||||
"sha256": "94892e4b85bf395c2f5059b26c9c694f202c4d1898af6c57bdd69b2d020b05f5",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-RDM/internal/rdmapp/tx.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/inspection.go",
|
||||
"sha256": "27368362233f8ff8b0c3e2d7c78a12162e5d12dc2545347b1270521182a2651e",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-RDM/internal/rdmapp/inspection.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/inspection_visibility.go",
|
||||
"sha256": "20e298145dbed6949caf8ee3510115b6916f9685c8ab21841f09dc987832e7e9",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-RDM/internal/rdmapp/inspection_visibility.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/compose.go",
|
||||
"sha256": "b2da219785cbf44ee53d1408e56628f44619c8dd93fb4415f2daa9013b591349",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-RDM/internal/rdmapp/compose.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/knowledge_publication.go",
|
||||
"sha256": "10e19a7729b8b27125bd8de6a94f0373df9db09c401b7b1294b65a796ba9f985",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-RDM/internal/rdmapp/knowledge_publication.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"ref": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"path": "internal/rdmapp/templates.go",
|
||||
"sha256": "3defc58f0e20dc15d8cee9d846da0d998ca3caf659af2cca2603b6d8f1741419",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-RDM/internal/rdmapp/templates.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"ref": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"path": "pkg/extension/extension.go",
|
||||
"sha256": "57e00f6e5d21e28c4bfddf8b2fe3929e70826581d3feb94d557f1c9e2830ed42",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-Backend/pkg/extension/extension.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"ref": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"path": "pkg/extension/host.go",
|
||||
"sha256": "4ad991e1a63c2051c96ff50ae55bf346ebb16aa56e2fef5f408d8fd03bc61f2d",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-Backend/pkg/extension/host.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"ref": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"path": "internal/runtime/llm.go",
|
||||
"sha256": "5ae366d8c2c01e2b79fb6ff9d3f78147b82dce9dccee163d8cc880f5d3caa8d1",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-Backend/internal/runtime/llm.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"ref": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"path": "internal/ctxasm/ctxasm.go",
|
||||
"sha256": "f5e7350628d1289c8f024dff5d21db04f733366a98100d31258f3e49b77ff933",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-Backend/internal/ctxasm/ctxasm.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"ref": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"path": "internal/store/audit.go",
|
||||
"sha256": "54a7c6ab8315f3c0b3f0ec97ab857925a7a745453a2a41fb28051e54423ecf9a",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-Backend/internal/store/audit.go"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"ref": "eb2d6d32f9323094d568bc9d80b4e5ed4f0af25b",
|
||||
"path": "src/components/RdmAuditWorkspace.tsx",
|
||||
"sha256": "ac406be59baab7eeb859dba49636aa5af579dbcf7aadbf1929a0aa346a56d1d6",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/Agent-System-Frontend/src/components/RdmAuditWorkspace.tsx"
|
||||
}
|
||||
],
|
||||
"priorPRs": [
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"number": 193,
|
||||
"head": "5f834544b0b808cb16214a36725f2ae3cb90bfd4",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/193"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"number": 488,
|
||||
"head": "334d2e2375095f3b4160ab232296f9c92065c565",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/488"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"number": 489,
|
||||
"head": "5e6bf4aa0546d68fb3f872158f22b2791c301a60",
|
||||
"state": "closed",
|
||||
"merged": true,
|
||||
"mergeCommit": "f00165e8d71e4dc8ba0ceb7dc50c1a8a3deb6d60",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/489"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"number": 512,
|
||||
"head": "a74318ab4b7d4f6fadd06675f3d1893361df722f",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/512"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"number": 89,
|
||||
"head": "10b442169ce0964a19e504dfc07395507b37db05",
|
||||
"state": "closed",
|
||||
"merged": true,
|
||||
"mergeCommit": "7bd4e17827d4c7c88647bf3c9199c495b60cb107",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/89"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"number": 95,
|
||||
"head": "276f885e7301bd39ae2d464c7469a37fe10ebf22",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/95"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"number": 73,
|
||||
"head": "d9bb780384b16f661d71a5e6ad288a77426d9d98",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/73"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"number": 79,
|
||||
"head": "006c81567546deb1cbd95abbb7ca6a36f99241b2",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/79"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"number": 301,
|
||||
"head": "6252f62524ef34360fdcdf8844d7e729378ffbfb",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/301"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"number": 307,
|
||||
"head": "8ae52a6d9a4d8b60e875f9c56862f34dffed7705",
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"mergeCommit": null,
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/307"
|
||||
}
|
||||
],
|
||||
"wip": [
|
||||
{
|
||||
"worktree": "/home/weichen/projects/Agent-System-RDM-wt-feature-dhf-template-assets",
|
||||
"head": "a16aaca19bf8eeef076c06f4471c4f5387565c85",
|
||||
"path": "internal/domain/template_asset.go",
|
||||
"sha256": "c8f39cbca1236cfd813b751c5af123d771c06f1941124e37739aa1ba8804168b",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/wip/projects/Agent-System-RDM-wt-feature-dhf-template-assets/internal/domain/template_asset.go",
|
||||
"status": "unmerged local candidate; task narrative not proof of acceptance"
|
||||
},
|
||||
{
|
||||
"worktree": "/home/weichen/projects/Agent-System-RDM-wt-feature-dhf-template-assets",
|
||||
"head": "a16aaca19bf8eeef076c06f4471c4f5387565c85",
|
||||
"path": "internal/rdmapp/dhf_assets.go",
|
||||
"sha256": "b7e9c88039328281afcd800fdd27537c6ad7ac1e73c7afd9f685b2fac93673a6",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/wip/projects/Agent-System-RDM-wt-feature-dhf-template-assets/internal/rdmapp/dhf_assets.go",
|
||||
"status": "unmerged local candidate; task narrative not proof of acceptance"
|
||||
},
|
||||
{
|
||||
"worktree": "/home/weichen/projects/Agent-System-RDM-wt-feature-dhf-template-assets",
|
||||
"head": "a16aaca19bf8eeef076c06f4471c4f5387565c85",
|
||||
"path": ".task/feature-dhf-template-assets.md",
|
||||
"sha256": "6984cf670c25dd53f88467d1966c0617e17995e15472d42ff82eb61bc44e2f2f",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/wip/projects/Agent-System-RDM-wt-feature-dhf-template-assets/.task/feature-dhf-template-assets.md",
|
||||
"status": "unmerged local candidate; task narrative not proof of acceptance"
|
||||
},
|
||||
{
|
||||
"worktree": "/home/weichen/projects/Agent-System-Dev-wt-feature-dhf-template-pipeline-plan/modules/documents",
|
||||
"head": "8e9587ca1d63dca3867e8de131d5761a8abe9a2f",
|
||||
"path": "docs/proposals/2026-10-14-dhf-template-generation-plan.md",
|
||||
"sha256": "f99e1424a9bb86f68ad6de91657102a36004c61fb0f36c8427e913d9e0cf9643",
|
||||
"localCopy": "/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/stage4-sources/wip/modules/documents/docs/proposals/2026-10-14-dhf-template-generation-plan.md",
|
||||
"status": "unmerged local candidate; task narrative not proof of acceptance"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,276 @@
|
||||
{
|
||||
"source": "SELF read-only Gitea and worktree checks",
|
||||
"checkedAt": "2026-10-14T11:15:04.729322+08:00",
|
||||
"repos": [
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"main": "f00165e8d71e4dc8ba0ceb7dc50c1a8a3deb6d60",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 537,
|
||||
"title": "[WIP] Replace submodule coupling with versioned dependencies and source workspaces",
|
||||
"head": "12d875c615cdd8394b9b8bdb586bbca4c02b4241",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/537"
|
||||
},
|
||||
{
|
||||
"number": 512,
|
||||
"title": "[WIP] Deliver progressive U2/U3 work with evidence-backed judgments",
|
||||
"head": "a74318ab4b7d4f6fadd06675f3d1893361df722f",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/512"
|
||||
},
|
||||
{
|
||||
"number": 488,
|
||||
"title": "Pin the audit overview export",
|
||||
"head": "334d2e2375095f3b4160ab232296f9c92065c565",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/488"
|
||||
},
|
||||
{
|
||||
"number": 486,
|
||||
"title": "Pin account transactions and note deprecated credential flags",
|
||||
"head": "5156d66302b3dcabd0a2306b1857d12ea4ec6a08",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/486"
|
||||
},
|
||||
{
|
||||
"number": 482,
|
||||
"title": "Pin the SQLite activity guard and document its refusals",
|
||||
"head": "d5e8d6ab7a368f08b29e968b6f65f8898f2b28f5",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/482"
|
||||
},
|
||||
{
|
||||
"number": 471,
|
||||
"title": "Close merged task cards (feature/card-close-20261012-123313Z)",
|
||||
"head": "f0e8a87b8e2dca989637d3b136faf2f0bc3ddd4b",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/471"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"main": "7bd4e17827d4c7c88647bf3c9199c495b60cb107",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 100,
|
||||
"title": "[WIP] Record approved version-dependency and active-branch transition requirements",
|
||||
"head": "1de7d17110efaa5ed2ed30a44d415f28987f89f3",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/100"
|
||||
},
|
||||
{
|
||||
"number": 95,
|
||||
"title": "[WIP] Document U3 r0.4 recovery design and plan",
|
||||
"head": "276f885e7301bd39ae2d464c7469a37fe10ebf22",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/95"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"main": "6fcb256205c2384abed35d3b6ab96ca7216e9297",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 363,
|
||||
"title": "[WIP] Build RDM from versioned dependencies and a fixed product composer",
|
||||
"head": "2b37fb26bbb023bd0118ba52e590daaa9dc8b478",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/363"
|
||||
},
|
||||
{
|
||||
"number": 307,
|
||||
"title": "Pin the audit overview export frontend",
|
||||
"head": "8ae52a6d9a4d8b60e875f9c56862f34dffed7705",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/307"
|
||||
},
|
||||
{
|
||||
"number": 301,
|
||||
"title": "Bind audit exports to the captured watermark",
|
||||
"head": "bd973e1e8de639d6fafee92fbfe349bc22a57c9a",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/301"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"main": "5d5fc9891c0eb8994545ccb8b740535d9b99fb0e",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 196,
|
||||
"title": "[WIP] Build the Backend from versioned Go libraries and fixed frontend composition",
|
||||
"head": "fffd5790cfab317fadafb40fa55a11bab6e9a847",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/196"
|
||||
},
|
||||
{
|
||||
"number": 193,
|
||||
"title": "[WIP] Verify source-backed stage judgments before publication",
|
||||
"head": "efed68ca2c8fbf148a2c40d61906612a9cc006f1",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/193"
|
||||
},
|
||||
{
|
||||
"number": 185,
|
||||
"title": "Commit account changes and audits in one transaction",
|
||||
"head": "9754531cc98393cb8a936d0e25a7526dfabbe2c4",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/185"
|
||||
},
|
||||
{
|
||||
"number": 183,
|
||||
"title": "Refuse a second SQLite service before migration",
|
||||
"head": "167609b3db6ef850c31eee71421c650f849a009c",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/183"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"main": "5313cfad4e633d0909ed40dcdfa28a11bc1902c0",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 84,
|
||||
"title": "[WIP] Build Frontend from versioned UI and contract packages",
|
||||
"head": "5467517e1831e7ca8b58bb5df52494a3a2c9d468",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/84"
|
||||
},
|
||||
{
|
||||
"number": 79,
|
||||
"title": "[WIP] Preserve reading and show pending stage findings",
|
||||
"head": "006c81567546deb1cbd95abbb7ca6a36f99241b2",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/79"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-UI",
|
||||
"main": "2c4322ef56df64ad72f65907d25b048a74bb5ffc",
|
||||
"openPulls": [
|
||||
{
|
||||
"number": 54,
|
||||
"title": "[WIP] Consume UI as a fixed package and verify packed consumers with cold caches",
|
||||
"head": "63d289e6bc15b701356cfe2d5b8740210fac0dcc",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-UI/pulls/54"
|
||||
},
|
||||
{
|
||||
"number": 51,
|
||||
"title": "[WIP] Separate source records, judgments, and pending questions",
|
||||
"head": "ac5b617e9e7ee6b9417b36c66d7c6e3b58ecbb42",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-UI/pulls/51"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"trackedPRs": [
|
||||
{
|
||||
"repo": "Agent-System-Backend",
|
||||
"number": 193,
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "efed68ca2c8fbf148a2c40d61906612a9cc006f1",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Backend/pulls/193"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"number": 488,
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "334d2e2375095f3b4160ab232296f9c92065c565",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/488"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"number": 489,
|
||||
"state": "closed",
|
||||
"merged": true,
|
||||
"head": "5e6bf4aa0546d68fb3f872158f22b2791c301a60",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/489"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Dev",
|
||||
"number": 512,
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "a74318ab4b7d4f6fadd06675f3d1893361df722f",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/512"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"number": 89,
|
||||
"state": "closed",
|
||||
"merged": true,
|
||||
"head": "10b442169ce0964a19e504dfc07395507b37db05",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/89"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Documents",
|
||||
"number": 95,
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "276f885e7301bd39ae2d464c7469a37fe10ebf22",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Documents/pulls/95"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"number": 73,
|
||||
"state": "closed",
|
||||
"merged": true,
|
||||
"head": "4e1eb39035e785810bfca02751cf29572c388768",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/73"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-Frontend",
|
||||
"number": 79,
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "006c81567546deb1cbd95abbb7ca6a36f99241b2",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Frontend/pulls/79"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"number": 301,
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "bd973e1e8de639d6fafee92fbfe349bc22a57c9a",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/301"
|
||||
},
|
||||
{
|
||||
"repo": "Agent-System-RDM",
|
||||
"number": 307,
|
||||
"state": "open",
|
||||
"merged": false,
|
||||
"head": "8ae52a6d9a4d8b60e875f9c56862f34dffed7705",
|
||||
"url": "https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/pulls/307"
|
||||
}
|
||||
],
|
||||
"dhfWorktree": {
|
||||
"path": "/home/weichen/projects/Agent-System-RDM-wt-feature-dhf-template-assets",
|
||||
"head": "773676162c9e9492788f19ea344a6a961dcbf251",
|
||||
"status": [
|
||||
" M .task/feature-dhf-template-assets.md",
|
||||
" M internal/rdmapp/dhf_catalog_test.go",
|
||||
" M internal/rdmapp/templates/dhf/catalog.json",
|
||||
"?? docs/records/dhf/e1-r1-result.json",
|
||||
"?? docs/records/dhf/pilot-project-proposal-review.md"
|
||||
],
|
||||
"files": [
|
||||
{
|
||||
"path": "docs/records/dhf/u1-progress.md",
|
||||
"sha256": "9b44c4e2b608705014825ba4b7c123a9beca8dca657994bd4db68e93526217f7",
|
||||
"bytes": 3782
|
||||
},
|
||||
{
|
||||
"path": "docs/records/dhf/e1-r1-result.json",
|
||||
"sha256": "596bd7ed376824239fd441ae8879f465133a58bae76bdabd117e96ee8b324201",
|
||||
"bytes": 3695
|
||||
},
|
||||
{
|
||||
"path": "docs/records/dhf/pilot-project-proposal-review.md",
|
||||
"sha256": "fdefeb1b8e43b269873d9241a3ce21737e919be983eae0bdcaec33e6f8f3eea7",
|
||||
"bytes": 33241
|
||||
},
|
||||
{
|
||||
"path": "internal/domain/template_asset.go",
|
||||
"sha256": "c8f39cbca1236cfd813b751c5af123d771c06f1941124e37739aa1ba8804168b",
|
||||
"bytes": 8054
|
||||
},
|
||||
{
|
||||
"path": "internal/rdmapp/dhf_assets.go",
|
||||
"sha256": "b7e9c88039328281afcd800fdd27537c6ad7ac1e73c7afd9f685b2fac93673a6",
|
||||
"bytes": 30551
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
# 统一文档渲染器第一批实施评审 r1
|
||||
|
||||
日期:2026-10-15。状态:**待人工评审**。批准来源:用户在本聊天确认“批准,按方案开始实施吧”。批准对象为[统一文档渲染器方案文档集](../2026-10-15-unified-document-renderer/README.md),本批严格限制为实施计划 Task 1–3。
|
||||
|
||||
## 1. 本批范围
|
||||
|
||||
| 任务 | 结果 | 固定对象 |
|
||||
|---|---|---|
|
||||
| Task 1 公司 Word 样式普查 | 44 份已发布 DHF 模板生成确定性 JSON/Markdown 普查;有界读取 ZIP/XML,不访问外部关系 | RDM `c188df36fbb77671048d6a40607bd14bf21c23a4` |
|
||||
| Task 2 统一文档与审阅模型 | 稳定节点、来源范围/置信度/可见性、审阅主体、严格校验、深拷贝、规范 JSON 与 SHA256 | Renderer `0d1f4d0bbe06d32b7a742dff0c0c53efeaa054cd` |
|
||||
| Task 3 RenderProfile | 严格 YAML/JSON、受控资产、继承展开、不可变快照、生命周期、四级选择与适用性校验 | Renderer `a08ae7ac81d4c648b350d890da97c91e64950769` |
|
||||
|
||||
Renderer 是独立本地 Git 仓 `/home/weichen/projects/Agent-Document-Renderer`,分支 `codex/unified-document-renderer`。本批没有创建远端仓库、加入 Dev gitlink 或接入 RDM/Backend 运行路径。
|
||||
|
||||
## 2. Task 1 普查结果
|
||||
|
||||
机器记录:`Agent-System-RDM/docs/records/renderer/corporate-style-inventory.json`,SHA256 `027b0a67a6592e8668229b9cc0d51ed8b5d874c2ff3a4b53b934e3241b245580`。人类摘要:`corporate-style-inventory.md`。
|
||||
|
||||
| 指标 | 结果 |
|
||||
|---|---:|
|
||||
| 已发布模板 | 44/44 |
|
||||
| 原生 DOCX / 旧 DOC 转换 | 30 / 14 |
|
||||
| 规范化件含页眉或页脚 | 44 |
|
||||
| 含图片 | 8 |
|
||||
| 含合并表格 | 41 |
|
||||
| `family-rule` / `template-exception` / `unverified` | 151 / 112 / 1 |
|
||||
|
||||
`dhf.33c2e9fe0c42fa0d` 的规范化件存在 21 条外部关系。普查只保存关系所在部件、类型和目标 SHA256,不保存或访问目标。该项标记 `unverified`;后续 RenderProfile 发布与 Word 输出仍禁止外部关系。
|
||||
|
||||
字体、Logo 规则、色板和标题体系仍是 `unverifiedCorporateValues`。本批没有把出现频率自动升格为公司设计标准。
|
||||
|
||||
## 3. Task 2 模型合同
|
||||
|
||||
- `CanonicalDocument` 固定项目、文档类型、语言、标题和递归节点。
|
||||
- `Node` 支持章节、标题、段落、列表、表格、图片、提示、附件和签署节点。
|
||||
- `SourceRef` 保存来源类型、定位、摘录、置信度、私域/项目/公开范围和有效文本区间。
|
||||
- 校验拒绝重复节点 ID、祖先循环、越界来源区间、未知节点/来源/可见范围和未知 schema。
|
||||
- `ReviewSnapshot` 分离批注、修订、审阅决定和批准决定;缺少可信人物快照时拒绝。
|
||||
- `Clone` 深拷贝节点、来源和审阅集合;规范 JSON 与 SHA256 在相同输入下确定。
|
||||
- `render.Request/Result/Manifest/Diagnostic/Renderer` 提供后续格式适配器的最小公共合同;`Request.Profile` 只能接收确切的不可变 `profile.Snapshot`,不能由调用方伪造只有 ID/哈希的替代对象。
|
||||
|
||||
## 4. Task 3 规则合同
|
||||
|
||||
- 规则只能使用已知 YAML/JSON 字段;`script`、任意 XML 等未知字段拒绝。
|
||||
- 资产由 manifest 中的 `assetId@version + path + SHA256` 绑定;远程 URL、父路径、未登记资产和字节漂移拒绝。
|
||||
- 受控规则配置 `allowDefaultFallback=true` 时拒绝编译。
|
||||
- 未知渲染原语、重复锚点、空选择器、不安全目标和超限递归拒绝。
|
||||
- 继承在编译时展开;快照不保留运行时父指针,返回规则、规范 JSON 和能力集合均为副本。
|
||||
- 生命周期仅允许 `draft → validated → published → retired`;发布或退役版本不能被同 ID/版本新内容替换,历史发布哈希仍可取。
|
||||
- 选择顺序固定为文档显式、文档类型、项目默认、公司默认。高优先级绑定不存在、未发布或不适用于当前文档类型、项目、阶段时直接失败,不继续回退。
|
||||
- 页眉页脚的 `fixed/field/slot/asset` 逐项校验;资产只能引用已经验证的资产角色。
|
||||
|
||||
## 5. 独立 Review 与修复
|
||||
|
||||
独立审阅者检查 RDM `6a5b6a0` 和 Renderer `c54822e`,首次结论为 **No**,没有 Critical,发现三项 Important:
|
||||
|
||||
1. 规则选择未校验文档类型、项目和阶段。
|
||||
2. 页眉页脚资产引用绕过 manifest 校验。
|
||||
3. UTF-16 XML 的 DTD/实体可绕过 ASCII 字节检测并被解析展开。
|
||||
|
||||
三项均先加入复现测试并观察 RED,再实施修复:Renderer `7c089a9`、RDM `c188df3`。修复后的完整套件重新通过。按 inline 执行流程没有再派第二位审阅者;最终结论由复现测试、修复和完整套件固定。
|
||||
|
||||
提交后合同核对又发现 Task 2 的临时 `ProfileSnapshot` 接口在 Task 3 已有具体快照后不应继续保留;该接口可能接受调用方伪造对象,也不能向后续 WordAdapter 提供完整规则。`TestRequestRequiresConcreteProfileSnapshot` 先复现 RED,Renderer `a08ae7a` 将请求收紧为具体 `profile.Snapshot`,完整测试、race 和 vet 再次通过。
|
||||
|
||||
审阅另有一项 Minor:普查器模块注释仍写“拒绝外部关系”,实际策略是“记录哈希元数据且不访问”。该项不影响执行行为,本批按流程登记为 deferred,后续文档整理时修正。
|
||||
|
||||
## 6. SELF 验证
|
||||
|
||||
RDM 最终对象 `c188df36fbb77671048d6a40607bd14bf21c23a4`:
|
||||
|
||||
- `python3 -m unittest tests.test_render_profile_inventory -v`:6 项通过。
|
||||
- `python3 scripts/render-profile-inventory.py --check`:44 份已提交输出逐字节一致。
|
||||
- `git diff --check`:通过。
|
||||
- `make test`:退出码 0;产品组合构建、29 项 Node 测试、4 项任务钩子测试及 Go 全仓测试通过。
|
||||
|
||||
Renderer 最终对象 `a08ae7ac81d4c648b350d890da97c91e64950769`:
|
||||
|
||||
- `go test ./... -count=1`:通过。
|
||||
- `go test -race ./... -count=1`:通过。
|
||||
- `go vet ./...`:通过。
|
||||
- `git diff --check`:通过。
|
||||
|
||||
以上均为本地 **SELF**,不是 CI/GATE、合入或部署证据。
|
||||
|
||||
## 7. 未实施边界
|
||||
|
||||
- Task 4 Markdown 解析器及稳定节点标记。
|
||||
- Task 5 WordAdapter、OPC 写入和输出安全验证。
|
||||
- Task 6 Word 修订、批注、回复、批准稿与留痕稿。
|
||||
- 公司默认规则、44 份 RenderProfile、字典迁移、RDM/Backend/Frontend 接入。
|
||||
- 真实 PostgreSQL 迁移、真实 Word 视觉验收、浏览器验收、远端仓库、PR、CI、合入、部署和发布。
|
||||
|
||||
## 8. 下一批建议
|
||||
|
||||
按已批准的追踪清单,本批需要人工评审后再进入 Task 4–6。下一批应先实现 Markdown→CanonicalDocument,再实现 WordAdapter,最后实现修订/批注和批准/留痕双 Word;每项继续 RED→GREEN,并保持本批规则快照与资产边界不变。
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
# 统一文档渲染器第二批实施评审 r1
|
||||
|
||||
日期:2026-10-15。状态:**待人工评审**。批准来源:用户在本聊天确认“评审通过,可以进入 Task 4-6”。本批固定对象为本地 Renderer `0efa07f8ce5cb4e1ff93886cf6769d111cba9872`。
|
||||
|
||||
## 1. 实施结果
|
||||
|
||||
| 任务 | 结果 | 主要提交 |
|
||||
|---|---|---|
|
||||
| Task 4 Markdown 解析 | 受控 front matter、稳定节点、首导入 ID 物化、列表/表格后代 ID、结构节点与边界拒绝 | `f31e048`,评审修复纳入 `0efa07f` |
|
||||
| Task 5 WordAdapter | 确定性 OPC、模板锚点、样式、编号、重复行、合并单元格、页眉页脚、图片、节点书签、安全校验 | `883922f`,评审修复纳入 `0efa07f` |
|
||||
| Task 6 审阅与批准 | `w:ins/w:del`、批注、回复、Unicode 范围、孤立附录、可信签署、批准稿/留痕稿双输出 | `485a6c7`,评审修复纳入 `0efa07f` |
|
||||
|
||||
## 2. Markdown 合同
|
||||
|
||||
- 解析标题、段落、列表、表格、图片、提示、签署、重复行、受控字段和分页节点。
|
||||
- 受控文档拒绝未知 front matter、隐藏 HTML、危险指令、坏表格、重复 ID、无 ID 的后续保存和超限输入。
|
||||
- 首次导入为顶层节点补写独立标记,为列表项和表格单元格补写内联标记。
|
||||
- 列表项、表格行和单元格的 ID 在插入、重排及已物化内容编辑后保持稳定;重复 ID 仍 fail-closed。
|
||||
- 图片来源允许受控资产角色及确切版本,Word 阶段重新核对版本与冻结规则一致。
|
||||
|
||||
## 3. Word 输出合同
|
||||
|
||||
- 克隆已验证模板包,限制压缩包大小、条目数、单条目和总展开量;拒绝重复路径、穿越和加密条目。
|
||||
- 包条目按名称排序并固定时间戳,相同冻结输入产生相同 DOCX 字节和哈希。
|
||||
- 同一语义锚点可以按文档顺序承载多个段落;不兼容原语仍拒绝合并。
|
||||
- 列表项、表格、行和单元格均生成可追溯书签及 NodeAnchor 映射。
|
||||
- 有序/无序列表使用不与模板冲突的实际 numbering ID;重复表格行在原模板表格上下文中展开,并受列合同和最大重复数约束。
|
||||
- 图片自动补齐 `r/a/wp/pic` 命名空间,使用唯一 drawing ID,并验证 PNG/JPEG 与关系目标。
|
||||
- 页眉页脚固定文本、字段、槽位和图片资产走受控规则;Word 字段只允许 `PAGE/NUMPAGES/DATE/TIME` 及安全 `MERGEFORMAT`。
|
||||
- 校验所有 XML、关系目标、关系类型和内容类型;拒绝外链、VBA、ActiveX、OLE、远程模板、任意对象和危险字段,不依赖约定文件名。
|
||||
|
||||
## 4. 审阅与批准合同
|
||||
|
||||
- 审阅稿保存插入、删除、替换、批注、重叠批注、回复、人物和 UTC 时间。
|
||||
- 批注范围按 Unicode code point 处理;哈希/范围失配或节点删除时进入显式孤立批注附录,不错误重绑。
|
||||
- 批注可继续精确锚定在被修订的当前文本、列表项和表格单元格。
|
||||
- 删除修订和孤立批注使用明确的 review-only 附录边界;“接受全部修订”的主正文投影与批准稿一致。
|
||||
- 批准稿拒绝带模板遗留修订/批注的底稿,移除普通评论和跟踪设置,只输出当前已批准内容。
|
||||
- 工作稿和预览稿不显示文档正文自行提供的签署文字;缺少可信人物快照时签署区为空。
|
||||
- ReviewSnapshot 绑定确切 `documentHash` 和 `profileHash`;不匹配时审阅和批准输出均被阻止。
|
||||
- `RenderPair` 对同一冻结输入分别生成 review 和 approved DOCX,文件名和 manifest 模式明确区分。
|
||||
|
||||
## 5. 独立 Review 与修复
|
||||
|
||||
独立审阅者检查 `a08ae7a..485a6c7`,结论为 **Ready to merge: No**,没有 Critical,发现 12 项 Important:危险字段、按文件名识别可执行对象、批准稿遗留审阅标记、伪签署回退、同锚点多段冲突、后代 ID 漂移、后代无 Word 锚点、图片命名空间/ID、编号忽略、重复行上下文错误、审阅/批准正文不一致、修订文本批注错误孤立或拒绝。
|
||||
|
||||
全部 Important 在一个修复批次 `0efa07f` 中加入复现用例并完成 RED→GREEN。额外补齐 ReviewSnapshot 的文档/规则哈希绑定,以及 Markdown 版本化资产来源与 Word 资产角色合同。
|
||||
|
||||
## 6. SELF 验证
|
||||
|
||||
最终对象 `0efa07f8ce5cb4e1ff93886cf6769d111cba9872`:
|
||||
|
||||
- `go test ./... -count=1`:Markdown、model、profile、render、word 五个包通过。
|
||||
- `go test -race ./... -count=1`:五个包通过。
|
||||
- `go vet ./...`:通过。
|
||||
- `git diff --check`:通过。
|
||||
- 测试使用有效 1×1 PNG;覆盖危险关系类型、宏内容类型、危险模板字段、模板遗留审阅标记、重复/穿越 ZIP 条目、稳定后代 ID、同锚点多段、后代锚点、Unicode/重叠/修订文本批注、删除/孤立附录及批准正文一致性。
|
||||
|
||||
以上均为本地 **SELF**,不是 CI/GATE、桌面 Word 视觉验收、合入或部署证据。
|
||||
|
||||
## 7. 延后事项和边界
|
||||
|
||||
Minor:已存在的同名 Word 样式尚未与配置值逐项对账;长流程取消尚未在解压、渲染、校验各阶段轮询;已存在的关系 ID 尚未验证其原类型/目标是否与新增关系相同。第一批遗留的普查器外部关系注释表述也尚未整理。
|
||||
|
||||
NOT_RUN:桌面 Word/LibreOffice 打开与修复行为、视觉保真、分页和实际字段行为;项目授权、撤权、事务交付与下载;远端 Renderer 仓库、Dev gitlink、CI/GATE、数据库迁移、浏览器验收、部署和发布。
|
||||
|
||||
## 8. 下一批建议
|
||||
|
||||
下一批按计划进入 Task 7–8:先由已评审的公司视觉普查发布公司默认规则,再为 44 份 DHF 模板生成确切 RenderProfile 并处理两份字典阻塞。只实施代码、规则包和隔离测试;真实数据库迁移、远端发布和部署继续保持未放行。
|
||||
+113
@@ -0,0 +1,113 @@
|
||||
# 统一文档渲染器第三批实施评审 r1
|
||||
|
||||
日期:2026-10-15。状态:**待人工评审**。批准来源:用户在本聊天确认“评审通过,启动 Task 7-8”。本批固定对象为本地 Renderer `732e7e7fc44e4871c7e1f6ba7aff2fc25173a10f`、RDM `ec24a42b79604f3ccbf581abb7c43378a1173c21`。
|
||||
|
||||
## 1. 结论和需要人工决定的事项
|
||||
|
||||
Task 7 已形成可运行的公司默认规则候选,但没有发布。现有 44 份公司文档只能确认常见 A4 页面族、保密页脚和页码字段,不能可靠推断公司 Logo、字体、字号、颜色、标题层级和实际分页。候选因此保持 `draft`,`publicationAllowed=false`,待真人视觉对照后再升版或发布。
|
||||
|
||||
Task 8 已生成 44 份独立、可重复生成、可由真实编译器编译的专用 RenderProfile 候选;两项过程确认文档类型已补入版本化字典。44 份仍全部是草稿,不自动继承旧模板目录的发布决定。底稿安全预检为 **41 通过、3 阻断**:
|
||||
|
||||
| 模板 | 阻断事实 | 发布前需要的处置 |
|
||||
|---|---|---|
|
||||
| `dhf.33c2e9fe0c42fa0d` | `word/_rels/document.xml.rels` 含外部购物链接;正文含遗留修订 | 形成去外链且明确接受/拒绝旧修订的安全派生件,逐字及视觉复核 |
|
||||
| `dhf.6b440531e6ff12f8` | 正文、页眉和设置含遗留修订/跟踪标记 | 明确旧修订取舍,形成干净派生件并视觉复核 |
|
||||
| `dhf.a046cc77128b7b66` | 设置中启用了遗留跟踪修订 | 形成关闭遗留跟踪状态的干净派生件并复核 |
|
||||
|
||||
这三份未通过安全门禁,不能通过放宽外链或继承修订限制来凑数。其机器可读状态已进入对应 `review.json` 的 `basePackagePreflight`。
|
||||
|
||||
## 2. Task 7:公司默认规则候选
|
||||
|
||||
Renderer 提交 `92f238e` 建立 `profiles/company-default/1.0.0/`:
|
||||
|
||||
- `profile.yaml`:DOCX、公司默认、普通文档可回退、受控文档不使用该回退;
|
||||
- `assets.json`:冻结最小 Word 底稿与测试图片的版本、路径和 SHA256;
|
||||
- `review.json`:列出未核实的公司视觉值并禁止发布;
|
||||
- `assets/base.docx` 与 `assets/sample.png`:仅供规则验证,不冒充公司批准 Logo;
|
||||
- 自动映射支持标题、段落、列表、表格、图片、提示、签署、受控字段和分页节点;测试样稿插入 30 个显式分页符。
|
||||
|
||||
候选使用 A4 纵向、公司全称保密页脚、`PAGE/NUMPAGES` 字段;字体、东亚字体、字号、颜色及 Logo 保持空白或未配置。实际桌面 Word 页数、分页稳定性和视觉可读性尚未验收,30 个分页符不能等同于已经证明 30 页排版。
|
||||
|
||||
## 3. Task 8:44 份专用规则包
|
||||
|
||||
RDM 提交 `d4d2c8b` 先生成 44 份 `profile.json + review.json`;`3f60265` 加入生成一致性、字典迁移和产品链验证;最终 `ec24a42` 增加精确底稿安全预检。
|
||||
|
||||
每份候选:
|
||||
|
||||
- 绑定目录中确切 `templateId`、版本和 render SHA256;
|
||||
- `appliesTo.documentTypes` 与模板目录一致;
|
||||
- 从递归结构文件复制确切节点 ID、Word part、锚点和目标种类,共 6,115 条映射;
|
||||
- `selection.controlled=true`、`allowDefaultFallback=false`,受控文档 fail-closed;
|
||||
- `styles={}`,不猜测字体、颜色或标题排版;
|
||||
- 带六类模板例外、未核实公司值、来源/规范化/结构/render 四组摘要及待审状态;
|
||||
- 由 `scripts/generate-render-profiles.py --check` 逐字复验,目录或普查对象缺失、重复及生成漂移均失败。
|
||||
|
||||
最终 Renderer 的跨仓 SELF 探针按每份 catalog 精确底稿执行 `DecodeJSON → Compiler.Compile`,结果 **44/44 可编译**。单节点预览探针为 **41 通过、3 因上述底稿安全问题被正确拒绝**;这不是完整内容填充或桌面 Word 视觉验收。
|
||||
|
||||
## 4. 字典升级
|
||||
|
||||
种子字典从 `0.1.0` 升为 `0.2.0`,新增:
|
||||
|
||||
- `rd_process_validation_plan`:过程确认方案,阶段 10,DHF;
|
||||
- `rd_process_validation_report`:过程确认报告,阶段 10,DHF。
|
||||
|
||||
存量升级只接受固定字节摘要:
|
||||
|
||||
- `0.1.0`:`10b0d316210dc0729e3b52e302b7621d4056d5381ac54101d8f00c7a2ad02944`;
|
||||
- `0.2.0`:`3e71c6b020cdf1fe0f944bec71dd3a7c62ff33f79cef3d81b14a0f347517e421`。
|
||||
|
||||
升级保留旧行,在一个事务中插入新行;同字节重放幂等,旧版本或目标版本字节漂移时拒绝。SQLite SELF 与隔离 PostgreSQL SELF 均已通过;真实运行库迁移仍为 **NOT_RUN**。
|
||||
|
||||
## 5. 44/44 RDM 产品链的准确含义
|
||||
|
||||
更新后的 `scripts/dhf-u6-acceptance-matrix.py` 使用当前账户激活、API key 文件、项目会话和锚点消息,驱动组合产品执行实例化、三权分配、提交、审核、批准、交付和下载。结果为 **44 PASS、0 BLOCKED、0 FAIL**,两项字典阻塞已清零。
|
||||
|
||||
该矩阵验证的是现有 RDM `docs.delivery.*` 链路,当前尚未调用独立 Renderer。它证明模板目录和现有交付链可用,不能替代新 RenderProfile 的 41/3 安全预检、完整渲染矩阵或桌面 Word 视觉验收。
|
||||
|
||||
## 6. 独立 Review 与修复
|
||||
|
||||
独立审阅者检查 Renderer `0efa07f..92f238e` 与 RDM `c188df3..3f60265`,结论为 **Ready to merge: No**,没有 Critical,发现 2 项 Important:
|
||||
|
||||
1. 默认规则的 `auto → image` 路径在替换后覆盖 DrawingML 命名空间,生成无法被严格 XML 解析的 DOCX;
|
||||
2. 44 个生成候选没有经过真实编译器契约,ASCII 锚点限制使 12 份中文内容控件标签无法编译,现有 44/44 产品矩阵没有消费新配置,因而漏报。
|
||||
|
||||
Renderer `732e7e7` 在一个修复批次中完成 RED→GREEN:
|
||||
|
||||
- 自动图片在读取和替换原 XML 前准备 `a/wp/pic` 命名空间;真实默认规则图片输出通过严格 XML 解析;
|
||||
- 锚点允许 Unicode 字母/数字和受控标点,仍拒绝空白、换行及 XML 特殊字符;
|
||||
- 只放行 `PAGE/NUMPAGES` 的 `ARABIC` 与通用 `MERGEFORMAT` 安全开关组合;危险 Word 字段仍拒绝;
|
||||
- 接受空的安全 ZIP 目录项,继续拒绝穿越、重复、加密和含数据目录项。
|
||||
|
||||
修复后 44/44 配置可编译。进一步精确底稿探针暴露的外链和遗留修订没有通过放宽规则处理,而是在 RDM `ec24a42` 中转为三份草稿的显式阻断记录。
|
||||
|
||||
## 7. SELF 验证
|
||||
|
||||
Renderer 最终对象 `732e7e7fc44e4871c7e1f6ba7aff2fc25173a10f`:
|
||||
|
||||
- `go test ./... -count=1`:通过;
|
||||
- `go test -race ./... -count=1`:通过;
|
||||
- `go vet ./...`:通过;
|
||||
- `git diff --check`:通过;
|
||||
- 默认图片输出的 `word/document.xml` 由严格 XML 解析器通过;
|
||||
- 跨仓探针:44/44 配置编译,41 份单节点预览通过,3 份按安全门禁拒绝。
|
||||
|
||||
RDM 最终对象 `ec24a42b79604f3ccbf581abb7c43378a1173c21`:
|
||||
|
||||
- `python3 scripts/generate-render-profiles.py --check`:44 份逐字一致;
|
||||
- profile 矩阵:44 个唯一配置、精确类型/摘要/槽位、草稿/禁止发布、41/3 预检结果通过;
|
||||
- SQLite 字典升级、幂等及篡改回滚:最终对象重跑通过;隔离 PostgreSQL 同项测试在 `3f60265` 通过,`ec24a42` 只改配置安全预检元数据,未重跑 PostgreSQL;
|
||||
- 认证产品矩阵在 `3f60265`:44/44 PASS;`ec24a42` 未重跑该矩阵;
|
||||
- `make test && make build`:通过。
|
||||
|
||||
以上均为本地 **SELF**。独立代码审阅属于评审意见,未成为 CI/GATE;PostgreSQL 结果为本轮作者先前启动的隔离临时库测试,不是本次审阅者 REPLAY。
|
||||
|
||||
## 8. 未执行和后续门禁
|
||||
|
||||
NOT_RUN:公司视觉值裁定;3 份阻断底稿的安全派生与视觉复核;44 份完整内容正常/负例新渲染矩阵;桌面 Word/LibreOffice 打开、修复、视觉保真和实际分页;真实数据库迁移;RDM/Backend 项目授权、撤权、交付事务与历史下载集成;远端 Renderer 仓库、Dev gitlink、CI/GATE、浏览器验收、推送、PR、合入、部署和发布。
|
||||
|
||||
人工评审需要分别确认:
|
||||
|
||||
1. 公司默认规则继续保持草稿,并提供或指定 Logo、字体、字号、颜色和标题层级的权威值;
|
||||
2. 41 份预检通过的专用配置是否进入后续完整渲染验证;
|
||||
3. 三份阻断底稿是否允许生成“去外链 + 明确处理遗留修订”的新派生候选,并在逐字/视觉复核后重新绑定;
|
||||
4. 上述决定完成前,不进入 Task 9 的项目级渲染事务接线。
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
# 统一文档渲染器第三批实施评审 r2
|
||||
|
||||
日期:2026-10-15。状态:**待人工视觉与内容评审**。本记录替代 r1 的“41 通过、3 阻断”实现快照;r1 保留为问题发现依据。用户已确认允许为三份阻断底稿生成“去外链、明确处理遗留修订”的安全派生候选,同时保持全部配置未发布,并要求后续实施由 CLI 工作单元完成、既有成果不重做。
|
||||
|
||||
固定对象:
|
||||
|
||||
- CLI 实施基线:RDM `ec24a42b79604f3ccbf581abb7c43378a1173c21`;
|
||||
- CLI 首次实现:RDM `522f9d8c2a303b266f627b03487f12ecf093bccc`;
|
||||
- 独立 CLI Review:`522f9d8` 相对 `ec24a42`;
|
||||
- CLI 修复后 RDM:`48120ed45f53e699bc8c68b705024795b22bc4fb`;
|
||||
- 只读 Renderer:`732e7e7fc44e4871c7e1f6ba7aff2fc25173a10f`;
|
||||
- CLI 实施线程:`01a13fcb-3e9e-75d1-bc9c-8c3bddb2f94c`。
|
||||
|
||||
## 1. 结果
|
||||
|
||||
三份原底稿保持逐字不变,catalog、sources、normalized/render candidates 和 pins 未修改。系统新增三个内容寻址的安全派生候选、不可变 manifest、转换器、生成检查、跨仓兼容探针和标准测试门禁。
|
||||
|
||||
| 模板 | 固定输入 SHA256 | 安全派生 SHA256 | 状态 |
|
||||
|---|---|---|---|
|
||||
| `dhf.33c2e9fe0c42fa0d` | `9e2fc466f1406fdc044c7162c508f614cac35a1fd49904f78e9b7dbabb514f61` | `0afb181c54a1693464df4e6ab0a39318a0b3dd9553eb3c9cb72145aae122c5b6` | 待人工视觉/内容复核,禁止发布 |
|
||||
| `dhf.6b440531e6ff12f8` | `6c50bda0ff2e6bd3b66b45df56f25c6c94c889b59195946555c4ce299f4acd3b` | `262a7cdfb46b84e3ddd23b724ede067d0bbc76f5465b459f061bb0b780774fe2` | 待人工视觉/内容复核,禁止发布 |
|
||||
| `dhf.a046cc77128b7b66` | `51fc944a405320930596ee503959b76035eeb86d7d5253fb3b0f703b46506fae` | `fc9099ef830f168655042defb06e7263387baca95ea54ca1e02614aac63ce46b` | 待人工视觉/内容复核,禁止发布 |
|
||||
|
||||
最终 44 份 RenderProfile 均为 `draft`,44 份 review 均为 `publicationAllowed=false`;41 份继续绑定 catalog render,三份绑定上述派生件。选定底稿安全预检为 **44 PASS、0 BLOCKED**,但安全预检不等于视觉批准或发布授权。
|
||||
|
||||
## 2. 安全派生规则
|
||||
|
||||
转换版本为 `1.1.0`,规则和输入/输出摘要固定在 `internal/rdmapp/templates/dhf/safe-bases/manifest.v1.json`:
|
||||
|
||||
- 删除外部 hyperlink relationship,并将对应 `w:hyperlink` 解包,保留可见子内容和顺序;
|
||||
- 识别简单 `w:fldSimple` 及复杂字段中的外部 `HYPERLINK` 指令;结构明确时保留显示结果并移除指令,结构含混时 fail-closed;
|
||||
- 接受普通插入内容、移除普通删除内容;清除评论锚点、引用、部件、关系和内容类型;关闭遗留跟踪修订;
|
||||
- 对删除段落标记按 Word 语义合并相邻段落,保留前段 paragraph properties 和两侧 run properties;插入段落标记保留边界并去除修订标记;
|
||||
- `dhf.6b440531e6ff12f8` 的真实正文由 455 段变为 426 段:29 个删除段落标记完成合并,3 个插入段落标记保留边界;manifest 另区分 75 个内容删除和 11 个内容插入;
|
||||
- 遇到 move、cell/customXml 修订、跨结构段落合并、歧义字段或其他未支持构造时拒绝生成;
|
||||
- 输入 XML 仅接受严格 UTF-8/UTF-8 BOM,解析前拒绝 DTD/ENTITY;
|
||||
- 拒绝路径穿越、重复/点段/重复分隔符、非法或别名百分号编码、规范化碰撞、加密、条目数/单项/展开量/原包大小超限;
|
||||
- 输出使用固定顺序、时间戳与 `ZIP_STORED`,不依赖 zlib 版本生成内容摘要;
|
||||
- 重写 XML 后验证 `mc:Ignorable`、`Requires`、`Preserve*`、`ProcessContent` 中的 QName 前缀全部可解析;
|
||||
- 两个生成器都枚举完整输出树,任何多余文件、目录、profile 或 review 都导致 `--check` 失败,不静默删除未知对象。
|
||||
|
||||
## 3. 标准门禁和跨仓收据
|
||||
|
||||
`make test` 已接入:
|
||||
|
||||
1. `python3 -B -m unittest tests.test_safe_dhf_bases -v`;
|
||||
2. `python3 -B scripts/generate-safe-dhf-bases.py --check`;
|
||||
3. `python3 -B scripts/generate-render-profiles.py --check`。
|
||||
|
||||
Gitea CI 原有入口调用 `make test`,因此无需 Renderer checkout 即覆盖安全转换和生成漂移。跨仓兼容探针独立要求:
|
||||
|
||||
- RDM 与 Renderer 均为 Git checkout;
|
||||
- 两仓 HEAD 与调用方提供的完整 SHA 完全一致;
|
||||
- staged、unstaged 和 untracked 均为空;
|
||||
- 收据同时输出 `rdmCommit` 与 `rendererCommit`。
|
||||
|
||||
提交后固定收据:
|
||||
|
||||
```json
|
||||
{
|
||||
"rdmCommit": "48120ed45f53e699bc8c68b705024795b22bc4fb",
|
||||
"rendererCommit": "732e7e7fc44e4871c7e1f6ba7aff2fc25173a10f",
|
||||
"profiles": 44,
|
||||
"compilePass": 44,
|
||||
"normalPreviewPass": 44,
|
||||
"wrongDocumentTypeRejected": 44,
|
||||
"unsafeOriginalBaseRejected": 3
|
||||
}
|
||||
```
|
||||
|
||||
`normalPreviewPass` 是每份 profile 的一个真实 paragraph mapping 预览,不冒充完整内容、全部 primitive、视觉分页或桌面 Word 保真验收。
|
||||
|
||||
## 4. 独立 CLI Review 和修复
|
||||
|
||||
独立只读 CLI Review 对 `ec24a42..522f9d8` 给出 **Ready to merge: No**:1 个 Critical、7 个 Important、3 个 Minor。
|
||||
|
||||
Critical:删除段落标记只移除空 `w:del`,没有合并段落。Important:Markup Compatibility 前缀丢失;新安全测试未进入标准 CI;隐藏 hyperlink field 可残留 URL;UTF-16 DTD 可绕过原始字节扫描;非规范 ZIP 别名可共存;生成器不拒绝孤儿产物;跨仓收据没有绑定 RDM SHA。Minor:DEFLATE 输出依赖未记录 zlib;读取前没有原包大小上限;显式 `--rdm-root` 仍依赖当前目录是 Git checkout。
|
||||
|
||||
CLI 在新提交 `48120ed` 中完成一次修复批次,全部 Critical/Important/Minor 均有判别测试并修复。没有改写 `522f9d8` 历史。按一次 Review + 一次修复批次流程,没有把作者自检升级为第二次独立 Review。
|
||||
|
||||
## 5. 验证证据
|
||||
|
||||
CLI 实施工作单元:
|
||||
|
||||
- 首轮 TDD:缺少转换器和 selected-base 绑定分别观察 RED;
|
||||
- Review 修复 TDD:20 个测试中观察到 15 FAIL + 1 个预期 ERROR,逐类修复后 20/20 PASS;
|
||||
- 三份派生件逐字再生成:3/3 PASS;
|
||||
- 44 份 profile/review 逐字再生成:44/44 PASS;
|
||||
- Go profile 矩阵:PASS;
|
||||
- `make test`:exit 0;
|
||||
- `make build`:exit 0;
|
||||
- 提交后双仓兼容矩阵:44/44 编译、44/44 单映射正常预览、44/44 错误文档类型拒绝、3/3 原危险底稿拒绝。
|
||||
|
||||
主编排器在最终提交上重新执行:
|
||||
|
||||
- Python 安全测试:20/20 PASS;
|
||||
- 两个 generator `--check`:3/3 与 44/44 PASS;
|
||||
- focused Go profile/dictionary 测试:PASS;
|
||||
- exact-clean 双仓兼容矩阵:44/44、44/44、44/44、3/3;
|
||||
- `make test && make build`:exit 0。
|
||||
|
||||
以上为本地 **SELF** 与独立 CLI Review 记录,不是远端 CI/GATE、发布、部署或用户视觉验收。
|
||||
|
||||
## 6. 仍需人工评审与未执行项
|
||||
|
||||
三份安全派生候选仍需逐字和桌面 Word/LibreOffice 视觉对照,重点检查:
|
||||
|
||||
- 外链解包后可见文字、图片、表格、合并单元格和布局是否保持;
|
||||
- `dhf.6b440531e6ff12f8` 接受遗留修订后的 426 段内容与分页是否符合业务意图;
|
||||
- 页眉页脚、字体替代、图片、编号和打印分页是否符合原批准口径。
|
||||
|
||||
NOT_RUN:三份派生件人工视觉批准;公司默认 Logo/字体/字号/颜色/标题层级裁定;完整内容/全部 primitive 渲染;桌面 Word/LibreOffice 保真和分页;真实数据库迁移;profile 发布;远端 Renderer 仓库与 Dev gitlink;推送、PR、合入、部署;Task 9 项目级事务接线。
|
||||
+131
@@ -0,0 +1,131 @@
|
||||
# 统一文档渲染器第四批 Task 9 实施评审 r1
|
||||
|
||||
日期:2026-10-15。状态:**待人工评审**。用户已确认 Task 8 安全派生结果并批准继续 Task 9,同时要求后续实施由 CLI 工作单元完成,主智能体只负责依赖编排、独立 Review、验证与记录。
|
||||
|
||||
固定对象:
|
||||
|
||||
- Renderer 私有远端:`weichen/Agent-Document-Renderer`;
|
||||
- Renderer pin:`732e7e7fc44e4871c7e1f6ba7aff2fc25173a10f`;
|
||||
- RDM 依赖准备:`e40d08e5f80e5c8051cdc4b27fe13a8556a9c5ab`;
|
||||
- RDM Task 9 初始实现:`d68110c95714c95788363ba56c17fe19ba13dbaf`;
|
||||
- RDM Task 9 Review 修复:`019d60d4b003fea060eba04c2455ea7ee1c269f3`;
|
||||
- CLI 实施线程:`01a1402a-6cc8-7cc2-8c68-bf35354aae1a`;
|
||||
- 独立 CLI Review 线程:`01a14056-f149-7250-b43c-11a85ce28bea`。
|
||||
|
||||
## 1. 依赖门禁
|
||||
|
||||
Task 9 首次 CLI 启动在写入前发现 Renderer 只有本地历史、没有远端,RDM 无法从干净克隆取得依赖,因此以零改动、零提交停止。主编排器随后:
|
||||
|
||||
1. 创建私有 `weichen/Agent-Document-Renderer` 仓库;
|
||||
2. 将已评审历史发布到远端 `main`,精确指向 `732e7e7`;
|
||||
3. 在 RDM 添加 `pins/agent-document-renderer` gitlink 和 `agent-document-renderer v0.0.0` 本地 pin;
|
||||
4. 通过 no-local 临时 RDM clone 从远端初始化该子模块,得到相同 SHA 且工作树干净;
|
||||
5. 通过 Renderer 全套测试、RDM `GOWORK=off go test ./...` 后提交 `e40d08e`。
|
||||
|
||||
依赖准备没有修改 Renderer 源码、发布 profile、迁移业务数据或部署服务。
|
||||
|
||||
## 2. Task 9 最终能力
|
||||
|
||||
### 2.1 schema v9 与不可变输入
|
||||
|
||||
schema v9 持久化:
|
||||
|
||||
- 完整递归 Markdown/canonical source 版本及稳定节点 ID;
|
||||
- profile snapshot、选择来源、项目/文档绑定及全部资产身份和哈希;
|
||||
- submission 冻结的正文、职责、来源披露和完整 Renderer `ReviewSnapshot`;
|
||||
- durable render job、输入摘要、状态、失败/取消原因和重试身份;
|
||||
- delivery、所有 blob、manifest、diagnostics、完整 node anchor map;
|
||||
- source/profile/review/delivery trace events 和 edges;
|
||||
- schema 指纹和确切唯一约束/索引定义。
|
||||
|
||||
提交审阅时冻结完整事实;正式 review/approved export 只读取 submission snapshot,不能用当前内容、调用方规则或调用方身份替换既有审签对象。旧 submission 缺少可信人物、时间、批注或修订事实时 fail-closed,不合成人物或时间。
|
||||
|
||||
### 2.2 内容与来源
|
||||
|
||||
- 正常编制的 `正文` 通过显式 `sectionId → canonical nodeId` 绑定进入确切模板槽位,不按名称或遍历顺序猜测;缺失、重复或目标不属于 profile 时拒绝。
|
||||
- Markdown 递归保存全部子节点和稳定 ID;子节点变化形成新 source identity。
|
||||
- 测试对 canonical JSON、Markdown、preview/review/approved DOCX 回读精确正文,而非只断言文件非空。
|
||||
- 来源逐项授权:允许披露的引用进入 canonical/Markdown/manifest/trace;受限来源只保留受控标记,私人正文不会进入 DOCX、manifest、diagnostics、anchors 或 trace。
|
||||
|
||||
### 2.3 原子事务、幂等与恢复
|
||||
|
||||
- 渲染前持久化 frozen job,再进入 running;失败和取消形成 durable 状态。
|
||||
- 渲染后、提交前重新核验成员、职责、动作权限、项目 revision、正文、profile/assets、review state 和来源披露。
|
||||
- delivery、blobs、manifest、anchors、trace events/edges 和 receipt 在一个事务提交;七个故障点逐项验证零残留。
|
||||
- 幂等摘要覆盖完整 source/profile/assets/binding/review/mode/Renderer identity;同 operationId 同输入返回确切旧回执,任何隐式输入变化都拒绝。
|
||||
- 取消在渲染前和提交前轮询;失败只允许对同一 frozen snapshot 重试。
|
||||
- 历史交付直接返回冻结 blob;profile/Renderer 升级和服务重启不会重渲染或覆盖旧字节。
|
||||
|
||||
### 2.4 权限、审签与下载
|
||||
|
||||
- validate、submit 和 delivery commit 均在提交时权限/项目 revision 栅栏内重验。
|
||||
- download/status 重新检查当前项目、文档读取权和当前职责;`audit.read` 本身不授予正文或制品。
|
||||
- 审阅/批准人物、显示名、时间、原因、批注、回复和修订来自受项目/文档范围约束的可信账户与审签记录。
|
||||
- 命令入口拒绝 `approvedBy`、`confirmed`、签名等调用方冒充字段。
|
||||
- profile 未发布时允许受权维护者 validate/preview,但 review/approved 正式交付拒绝;受控文档永不回退公司默认规则。
|
||||
|
||||
### 2.5 资源和可复核清单
|
||||
|
||||
- 限制节点数、深度、文本、Markdown/JSON、profile/assets、单 blob、任务数和项目保留字节;在产生大副本前尽量拒绝。
|
||||
- 命令下载使用有界响应,避免无限 base64 扩张。
|
||||
- 要求 renderer 返回的 anchors 与所有期望节点完全一致,只允许明确的 renderer-owned 合成锚点。
|
||||
- manifest 固定 Renderer pin/adapter identity、source/profile/review hashes、所有资产,以及每个交付 blob 的名称、SHA256 和大小。
|
||||
|
||||
## 3. 命令面
|
||||
|
||||
新增并注册七个受控命令:
|
||||
|
||||
1. `rdm.render.validate`;
|
||||
2. `rdm.render.preview`;
|
||||
3. `rdm.render.submit`;
|
||||
4. `rdm.render.review`;
|
||||
5. `rdm.render.approved`;
|
||||
6. `rdm.render.status`;
|
||||
7. `rdm.render.download`。
|
||||
|
||||
命令 schema 为闭集;身份、审签和签署事实不从请求参数读取。现有 44 份 profile 继续保持 `draft`、`publicationAllowed=false`,因此当前正式 review/approved 命令会按发布门禁拒绝,未绕过 Task 7–8 的人工发布决定。
|
||||
|
||||
## 4. 独立 CLI Review
|
||||
|
||||
独立只读 Review 对 `e40d08e..d68110c` 给出 **Ready to merge: No**:
|
||||
|
||||
- 2 Critical:旧批准可授权新内容/新 profile;正常受控正文被 canonical 转换过滤。
|
||||
- 9 Important:递归 Markdown 丢子节点、幂等摘要漏隐式输入、失败/取消 job 不持久、人物时间与批注修订为合成/缺失、来源追溯被整体删除、anchor 只检查非空、validate/submit 缺提交时栅栏、v9 接受残缺 schema、内存/数据库增长无界。
|
||||
- 1 Minor:manifest 缺 Renderer/资产/全部 blob 身份。
|
||||
|
||||
CLI 在 `019d60d4` 完成一次 Review 修复批次。所有 finding 均加入能区分错误实现的 RED 测试并修复;没有 amend 或重写 `d68110c`。按一次 Review + 一次修复批次流程,没有把作者自检升级为第二次独立 Review。
|
||||
|
||||
## 5. SELF 与隔离 PostgreSQL 验证
|
||||
|
||||
CLI 在最终 HEAD `019d60d4` 执行:
|
||||
|
||||
- Task 9 聚焦功能、迁移、命令、并发、重启、回滚、来源和安全测试:PASS;
|
||||
- `GOWORK=off go test -race ./internal/domain/store ./plugins/rdm ./internal/rdmapp -run 'Render|Renderer|Version9' -count=1`:PASS;
|
||||
- `GOWORK=off go vet ./...`:PASS;
|
||||
- `GOWORK=off make test`:PASS;
|
||||
- `GOWORK=off make build`:PASS;
|
||||
- 临时 PostgreSQL:schema v8/v9、重启、同/异 operationId 并发、权限栅栏、错误唯一索引定义和残缺 v9 rollback:PASS;临时服务停止、数据库与数据目录删除。
|
||||
|
||||
主编排器在同一最终 HEAD 重放:
|
||||
|
||||
- focused store/RDM/plugin 测试:PASS;
|
||||
- Task 9 精确 race:PASS;
|
||||
- `go vet ./...`:PASS;
|
||||
- `make test && make build`:PASS;
|
||||
- Renderer gitlink 精确为 `732e7e7` 且工作树干净。
|
||||
|
||||
全仓 `go test -race ./...` 另发现既有 slow-lane `ledgerUpdate` 与 `TestUnknownSchemaVersionStopsReplay` 中 `Reset` 的竞争;Task 9 精确 race 范围通过。该既有 race 未在本批扩大修复范围,需单独任务处理,不能把本批 SELF 升级为全仓 race 通过。
|
||||
|
||||
以上均为本地 **SELF** 与独立 CLI Review 记录,不是远端 CI/GATE、合入、部署或用户运行验收。
|
||||
|
||||
## 6. 未执行和下一阶段边界
|
||||
|
||||
NOT_RUN:profile 人工发布;公司默认视觉值;桌面 Word/LibreOffice 完整内容和分页验收;真实运行库 schema v9 迁移;现有数据备份/恢复演练;远端 CI/GATE;推送 RDM 分支、PR、合入、部署和发布;Task 10 Backend 路径替换;Task 11 UI。
|
||||
|
||||
人工评审重点:
|
||||
|
||||
1. submission 冻结事实和旧 submission fail-closed 边界;
|
||||
2. 显式正文节点绑定与来源披露裁剪;
|
||||
3. durable failed/cancelled job、幂等摘要和历史下载;
|
||||
4. schema v9 严格指纹、资源配额与迁移门禁;
|
||||
5. 是否接受该 Task 9 本地候选进入后续交付/Task 10 评审。
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
# 统一文档渲染器第五批 Task 10 实施评审 r1
|
||||
|
||||
日期:2026-10-16。状态:**实现与复审闭合(SELF)**。用户已预先授权后续阶段连续推进、不再逐阶段请求人工评审;profile 发布、公司视觉值裁定和三份安全派生件视觉批准仍属业务验收,未在本批执行。
|
||||
|
||||
固定对象:
|
||||
|
||||
- Backend 分支:`feature/unified-document-renderer-task10`(已推送远端),基线 `d9d8f016ece5015ff6872a6a8c6a449a7353c062`;
|
||||
- Backend 最终 HEAD:`a2f4978be83514ae0e474039fb42b76bfc2a05d4`;
|
||||
- Renderer gitlink:`0d1c5121d137be817db5f98d3c13320dfa919c8a`(Renderer 远端 `main`);
|
||||
- Dev `modules/backend` gitlink 随本记录同批更新到上述 Backend HEAD。
|
||||
|
||||
## 1. 提交序列
|
||||
|
||||
| 提交 | 内容 |
|
||||
|---|---|
|
||||
| `b0dd533` | 引入 `deps/agent-document-renderer` gitlink 与 `agent-document-renderer` 本地 replace |
|
||||
| `a21a3b5` | 普通工作区 Word 交付改走共享 Renderer(`render_document`) |
|
||||
| `9aa9129` | 生产提示词与 house-style 配方退役旧 Word 指引 |
|
||||
| `35bd87c` | 跟进 Renderer 语义与协作式取消修复 |
|
||||
| `fec2d16` | 首轮独立 Review 的 Important/Minor 全量修复:可信冻结时间、持久幂等交付、Markdown 优先持久化、真实对照、Python/DOCX 旁路封闭 |
|
||||
| `6c01d00` | 二轮 Review 三项 Important:改名 DOCX 旁路、完整旧 fixture 语义对照、对齐/任务/分隔线/编号的真实对照 |
|
||||
| `a2f4978` | 三轮 Review 唯一 Important:按 `_rels/.rels` officeDocument 关系与 `[Content_Types].xml` 识别 WordprocessingML,畸形/歧义/不安全元数据按 Word 拒绝 |
|
||||
|
||||
## 2. 最终能力
|
||||
|
||||
- 普通 Word 生成只经共享 Renderer 与公司默认 profile;旧 Go/Python 路径仅在迁移对照模式可用,不再是生产路径。
|
||||
- 项目受控文档、`review`/`approved` 模式在写入任何制品前拒绝并转交 RDM,Backend 不提供默认规则回退。
|
||||
- 交付为 Markdown 优先、DOCX 与 manifest 派生;同一冻结输入幂等,重启后节点 ID 稳定,部分失败返回 partial/unknown 回执。
|
||||
- 直接制品登记按 OPC 内容(而非文件名)拒绝 WordprocessingML(含模板与宏变体),普通 ZIP/二进制制品不受影响。
|
||||
- 新旧对照覆盖完整旧 fixture:标题、行内样式、惰性链接、引用、反引号与波浪线代码块、嵌套有序/无序列表、任务勾选、分隔线、起始编号与表格对齐,注入丢失可被检出。
|
||||
|
||||
## 3. 评审轨迹
|
||||
|
||||
| 轮次 | 评审对象 | 结论 |
|
||||
|---|---|---|
|
||||
| 1 | `d9d8f01..9aa9129` 完整 Task 10 范围(独立 CLI) | 0 Critical;多项 Important(旧 Python 路径仍可生产调用等) |
|
||||
| 2 | `d9d8f01..fec2d16`(全新独立 CLI) | 0 Critical / 3 Important(改名 DOCX、对照 fixture 不全、对齐丢失漏报) |
|
||||
| 3 | `fec2d16..6c01d00` 窄闭合复审(全新 CLI) | 2、3 项关闭;1 项因固定 `word/document.xml` 判定未完全关闭 |
|
||||
| 4 | `6c01d00..a2f4978` 窄闭合复审(当前主模型,未参与实施) | PASS:0 Critical / 0 Important |
|
||||
|
||||
第 4 轮记录的非阻塞次要项(后续改进,不阻塞交付):`_rels/.rels`、`[Content_Types].xml` 部件名与 content type 字符串按精确大小写匹配,刻意构造的大小写变体包可被识别为非 Word。该绕过需要恶意构造,不影响正常模型输出路径。
|
||||
|
||||
## 4. 验证(来源等级)
|
||||
|
||||
- SELF(实施 CLI,`a2f4978` 同树):聚焦测试、`go test -count=1 ./internal/tools`、全量 `go test ./...`、`go test -race ./internal/tools ./internal/runmgr`、`go vet ./...`、`go build ./...`、`git diff --check` 均通过。
|
||||
- REPLAY(当前主模型,`a2f4978` 干净树):`go test -count=1 ./internal/tools ./internal/docgen/...` 通过;Dev 检出该 gitlink 后 `go build ./...` 通过。
|
||||
- GATE:NOT_RUN(Backend PR/CI 尚未创建,留待 Task 13 组合交付)。
|
||||
|
||||
## 5. 未执行项
|
||||
|
||||
profile 发布、公司默认视觉值裁定、三份安全派生件视觉批准、真实运行库迁移、PR/合入与部署均未执行;RDM 的 Renderer pin 仍为 `732e7e7`,需在 Task 13 组合前升级到 `0d1c512` 并重验。
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
# 统一文档渲染器第六批实施评审 r1:Task 11/12、公司默认发布与 DHF 44 份发布
|
||||
|
||||
日期:2026-10-16。状态:**实现与复审闭合(SELF/REPLAY)**;Task 13 全量验收另行记录。用户已预先授权连续推进;本批两项业务决定由用户本聊天裁定(见第 2 节)。
|
||||
|
||||
固定对象:
|
||||
|
||||
| 仓库 | 分支 | 最终 HEAD | 远端 |
|
||||
|---|---|---|---|
|
||||
| Renderer | `main` | `31fbe54fae8bf11be664919ce173da0d68ebfdc9` | 已合入:[PR #1](https://git-home.u1680832.nyat.app:30319/weichen/Agent-Document-Renderer/pulls/1)(`44df4cc`)、[PR #2](https://git-home.u1680832.nyat.app:30319/weichen/Agent-Document-Renderer/pulls/2)(`31fbe54`),均 fast-forward |
|
||||
| RDM | `feature/rdm-two-trees-work-observation` | `d63f1db` | 未推送(随父任务交付) |
|
||||
| Backend | `feature/unified-document-renderer-task10` | `1afe1647981e1f331c379757b100e10a9b47ed90` | 已推送 |
|
||||
| Frontend | `feature/unified-document-renderer-task11` | `de650262382e8e1b9c65120365960872b522145f` | 已推送 |
|
||||
|
||||
## 1. 提交序列
|
||||
|
||||
| 仓库 | 提交 | 内容 |
|
||||
|---|---|---|
|
||||
| Renderer | `94d51c2` | Task 12:休眠的上传模板分析器,只产出草稿候选、类型化报告与置信度,无发布入口 |
|
||||
| Renderer | `44df4cc` | 公司默认 `company.default@1.0.0` 按用户裁定发布(经 draft→validated→published 生命周期);段落样式输出对齐与 keepWithNext;专用样式回退 `body` 不改变其他 profile 输出 |
|
||||
| Renderer | `2c18c31` | DHF 身份渲染:内容写入模板槽位并保留 pPr/rPr、分页符、重复行原型与签名占位;节点书签按映射目标部件(页眉/页脚)校验;仅放行内部锚点超链接 |
|
||||
| Renderer | `31fbe54` | 悬空内部锚点原样保留(.doc 转换模板的无效目录链接,Word 中为无操作);锚点形状收紧;外部/关系型链接、HYPERLINK 域与其他活动内容仍拒绝 |
|
||||
| RDM | `0cb10f0` | Task 11 服务端:`rdm.render.profiles/deliveries/review.view/review.annotate/review.revise` |
|
||||
| RDM | `f2a5a16` | 44 份 DHF 可复现身份渲染与 LibreOffice 页面/文本/像素对照工具 |
|
||||
| RDM | `c96907f`、`d5eeb61` | Renderer pin `732e7e7`→`44df4cc`→`31fbe54`;44 份模板经产品预览路径零失败 |
|
||||
| RDM | `dcdb1de`、`5feca0f` | Task 12:管理员发布的休眠候选规则(analyze/list/view/publish,迁移 v10,SQLite/PG);跨文件可达性守卫;列表精简列 |
|
||||
| RDM | `b933037`、`d63f1db` | 按用户裁定发布 44 份 DHF 规则包(生成器与加载器双层校验决定与收据哈希);RDM 层外部超链接回归测试 |
|
||||
| Backend | `1afe164` | Renderer pin `0d1c512`→`31fbe54`;公司默认按渲染器状态报告为已发布,路由不放宽 |
|
||||
| Frontend | `85428b4`、`de65026` | Task 11 文档渲染工作区(结构画布 + 传统阅读器、规则选择、预览诊断、审阅、下载);按服务端真实契约修正 5 处字段与树遍历 |
|
||||
|
||||
## 2. 业务决定(用户,2026-10-16,本聊天)
|
||||
|
||||
- 公司默认规则:采用普查主流值——A4、四边约 2.5cm、宋体 + Times New Roman、正文小四 12pt、标题黑体、暂无 Logo。
|
||||
- 44 份模板发布方式:智能体用 LibreOffice 对照原件与输出,无差异的直接发布,有差异的列清单交用户裁决。
|
||||
- 对照结果:底稿→渲染输出 44/44 PASS(逐页文本 + 像素,阈值 0.005,60 dpi);原件→底稿 44/44 有模板化差异(示例值清空 7、页数不变的页面差异 27、页数变化 10),附逐页对照图与清单。用户裁定:**接受模板化差异,44 份全部发布**。收据 SHA256 `90c768eb240a2b590b0f474a86bf3be9a8a830653809d3ee08c3951b749eb230`,副本入 RDM `docs/records/renderer/`。
|
||||
- 局限:对照基于 LibreOffice 渲染,不代表 Microsoft Word 渲染结果。
|
||||
|
||||
## 3. 评审轨迹(每轮为全新独立会话,仅接收目标、diff 与证据)
|
||||
|
||||
| 对象 | 结论 |
|
||||
|---|---|
|
||||
| Renderer `0d1c512..94d51c2` | PASS 0/0 |
|
||||
| Renderer `94d51c2..44df4cc` | PASS 0/0 |
|
||||
| Renderer `44df4cc..2c18c31` | PASS 0 Critical / 0 Important / 2 Minor |
|
||||
| Renderer `2c18c31..31fbe54` | PASS 0/0 |
|
||||
| RDM Task 11 `..0cb10f0` | PASS 0/0 |
|
||||
| RDM `0cb10f0..f2a5a16` | PASS 0/0 |
|
||||
| RDM `f2a5a16..dcdb1de` | PASS,1 Important(可达性测试只解析单文件)/ 1 Minor |
|
||||
| RDM `dcdb1de..5feca0f` | PASS 0/0(上轮 Important、Minor 关闭)/ 1 Minor(并入下一提交) |
|
||||
| RDM `5feca0f..d63f1db` | PASS 0/0 / 2 Minor(可读性) |
|
||||
| Backend `a2f4978..1afe164` | PASS 0/0/0 |
|
||||
| Frontend `a81e94a..85428b4` | 5 Important(与服务端字段契约不符、树非递归) |
|
||||
| Frontend `85428b4..de65026` | PASS 0/0;5 项全部关闭 |
|
||||
|
||||
## 4. 验证(来源等级)
|
||||
|
||||
- SELF:各实施会话在对应 HEAD 运行 `go test -count=1 ./...`、race、`go vet`、gofmt;RDM `make test && make build`;Backend 全量 `go test ./...`、`go build`;Frontend vitest 359、`npm run build`、knip 棘轮 43≤43、design-guard。
|
||||
- REPLAY:各评审会话重放聚焦测试与 vet(见评审结论);主模型在 Renderer `31fbe54` 运行 `go test -count=1 ./...` 全部通过,并以 RDM 源码副本运行 44 份身份渲染(44/44)与 LibreOffice 对照。
|
||||
- GATE:NOT_RUN。Renderer 仓无 CI;RDM/Backend/Frontend 的 PR 与 CI 留待 Task 13 组合交付。
|
||||
|
||||
## 5. 未执行项
|
||||
|
||||
Task 13:44 份产品矩阵(正常/缺必填/超长/重复块、审阅与批准输出、回读)、真实产品浏览器验收、DOCX 重开、性能容量记录、全量组合测试与独立终审;各仓 PR、CI 与合入;三份安全派生底稿 `safe-bases/manifest.v1.json` 中的视觉状态字段仍为 pending(规则包已按用户裁定发布)。
|
||||
@@ -0,0 +1,93 @@
|
||||
# 01 需求与范围
|
||||
|
||||
## 1. 用户目标
|
||||
|
||||
成员和智能体能够以 Markdown 编制公司项目文档,由系统根据声明式渲染规则生成 Word。文档可使用专用公司模板,也可在未指定专用模板时使用公司通用规则。用户可以下载 Markdown、Word 或包含全部交付物的归档包。
|
||||
|
||||
渲染结果不是一次性文件,而是 2 树 1 网的一部分:文档树保存文档、章节、小节和段落;笔记树保存对话、文件、网络搜索和工具结果等依据;追溯网连接内容节点、来源、修订、批注、审签决定、规则版本和最终文件。
|
||||
|
||||
## 2. 第一阶段范围
|
||||
|
||||
- 统一文档模型和 Markdown 解析。
|
||||
- 声明式 RenderProfile schema、校验器、注册表和版本生命周期。
|
||||
- Word 格式适配器。
|
||||
- 公司通用 Word 规则包。
|
||||
- 44 份现有模板的规则包及受控资产绑定。
|
||||
- 文档实例级规则选择及四级回退策略。
|
||||
- 工作稿、预览稿、批准稿和审阅留痕稿。
|
||||
- Markdown、DOCX、清单及归档包下载。
|
||||
- Word 书签/内容控件与文档树节点的双向锚定。
|
||||
- 规则预览、发布、退役、升级提案和回滚。
|
||||
- SQLite 与 PostgreSQL 的规则、版本和交付物持久化。
|
||||
- 真实浏览器中的选择规则、预览、审阅和下载流程。
|
||||
|
||||
## 3. 后续范围
|
||||
|
||||
后续格式适配器消费同一 `CanonicalDocument`:
|
||||
|
||||
- PDF:固定版式发布和打印交付。
|
||||
- PPT:按幻灯片规则映射章节、图表和演讲者备注。
|
||||
- 用户上传参考文档,智能体分析后生成候选 RenderProfile。
|
||||
|
||||
后续功能必须沿用本阶段的规则审查、预览、发布和权限生命周期。上传参考文档不会直接生成已发布规则。
|
||||
|
||||
## 4. 角色
|
||||
|
||||
| 角色 | 权限与职责 |
|
||||
|---|---|
|
||||
| 文档编制人 | 编辑 Markdown、选择允许的规则、生成工作稿和提交审阅 |
|
||||
| 审阅人 | 查看来源和差异、添加批注、提出修改或通过审阅 |
|
||||
| 批准人 | 对冻结提交作最终决定,批准后生成批准稿 |
|
||||
| 项目创建者/授权管理员 | 管理项目默认规则和项目内可用规则 |
|
||||
| 系统管理员 | 发布公司规则、受控资产和格式适配器 |
|
||||
| 普通项目成员 | 按项目内容权限查看和下载文档;无审计权时不见审计信息 |
|
||||
| 智能体 | 生成 Markdown 候选、提出规则选择和结构映射;不得伪造审签或发布规则 |
|
||||
|
||||
## 5. 功能要求
|
||||
|
||||
### 5.1 规则选择
|
||||
|
||||
选择顺序固定为:
|
||||
|
||||
1. 文档实例显式绑定的 `profileId@version`。
|
||||
2. 文档类型的已发布默认规则。
|
||||
3. 项目已发布默认规则。
|
||||
4. 公司通用 Word 规则。
|
||||
|
||||
受控文档一旦声明专用模板,任何缺包、失配、退役或必填字段缺失都必须阻止生成,不进入第 3 或第 4 级回退。
|
||||
|
||||
### 5.2 双格式与清单
|
||||
|
||||
每次交付至少包含:
|
||||
|
||||
- `document.md`
|
||||
- `preview.docx`、`approved.docx` 或 `review.docx` 中的适用文件
|
||||
- `manifest.json`
|
||||
|
||||
清单记录内容哈希、规则和模板版本、资产哈希、生成主体、生成时间、审签轮次、输出哈希、诊断结果及文档树根节点。
|
||||
|
||||
### 5.3 可追溯性
|
||||
|
||||
每个可渲染内容节点必须有稳定 `nodeId`。Markdown 解析范围、DOCX 书签/内容控件、来源引用、内容版本、批注和交付物均绑定该 ID。仅靠标题或段落顺序不得作为稳定身份。
|
||||
|
||||
### 5.4 审阅和批准
|
||||
|
||||
系统分别保存内容版本、批注和审签决定。批准稿接受已批准修订并隐藏普通批注;审阅留痕稿保留修订、批注、回复及解决状态。签署区只读取可信审签数据。
|
||||
|
||||
## 6. 非功能要求
|
||||
|
||||
- 确定性:同一 Markdown、元数据、规则版本和资产生成相同有效内容;时间戳等非确定字段必须来自冻结提交。
|
||||
- 安全:规则不含脚本、宏、外部 URL 运行、任意 OOXML 或任意文件路径。
|
||||
- 隔离:规则执行无网络,资产只从已验证包读取,输出写入限定目录。
|
||||
- 兼容:未知规则版本、未知节点、旧二进制或新 schema 均 fail-closed。
|
||||
- 性能:普通 100 页以内文档在交互预览预算内完成;大文档进入后台任务并显示进度。
|
||||
- 可解释:失败返回具体字段、规则路径、文档节点和修复建议。
|
||||
|
||||
## 7. 完成判据
|
||||
|
||||
- 44/44 模板在适用项目中完成“Markdown→预览→审阅→批准→批准稿/留痕稿→下载”的逐项验证;当前两个字典阻塞清零。
|
||||
- 公司通用规则可生成无专用模板的普通文档。
|
||||
- Markdown 与所有 Word 输出均可下载,清单中的哈希可复核。
|
||||
- 页眉、页脚、页码、文件控制字段、Logo、标题、表格及签署区符合已批准规范。
|
||||
- 私人来源和无权批注不进入共享文件。
|
||||
- 规则升级不改变旧批准文件,旧版本仍可重放生成或取回冻结字节。
|
||||
@@ -0,0 +1,141 @@
|
||||
# 02 总体架构与方案
|
||||
|
||||
## 1. 推荐架构
|
||||
|
||||
采用“统一内容模型+统一渲染内核+格式适配器+版本化规则包”。第一阶段提供 Word 适配器,后续 PPT/PDF 不改变上游内容和规则生命周期。
|
||||
|
||||
本方案建议把渲染内核放入独立的 `Agent-Document-Renderer` Go 模块。该模块边界是本次待评审的架构决策;在评审通过和任务启动门禁完成前,不创建新仓库、不改变现有模块 pin,也不迁移现有生产路径。若评审决定先以内嵌包落地,公开接口、依赖方向和后续独立化条件仍须保持与本文一致。
|
||||
|
||||
```text
|
||||
Markdown + metadata + source links
|
||||
│
|
||||
▼
|
||||
MarkdownParser
|
||||
│
|
||||
▼
|
||||
CanonicalDocument
|
||||
│
|
||||
ProfileResolver
|
||||
│
|
||||
▼
|
||||
RenderProfile
|
||||
│
|
||||
DocumentRenderer
|
||||
│
|
||||
▼
|
||||
WordAdapter v1
|
||||
│
|
||||
┌───────┼────────┐
|
||||
▼ ▼ ▼
|
||||
DOCX bytes diagnostics manifest
|
||||
```
|
||||
|
||||
## 2. 模块边界
|
||||
|
||||
### 2.1 CanonicalDocument
|
||||
|
||||
格式无关的不可变输入,包括:
|
||||
|
||||
- 文档身份、标题、语言、项目和文档类型。
|
||||
- `section/heading/paragraph/list/table/image/callout/attachment/signature` 节点。
|
||||
- 稳定节点 ID、层级、文本、样式意图和数据类型。
|
||||
- 来源引用、置信度、可见范围和内容版本。
|
||||
- 批注、修订集合和审签快照引用。
|
||||
|
||||
Markdown 只负责表达内容;页面、字体、Word 样式名和 OOXML 不进入内容模型。
|
||||
|
||||
### 2.2 RenderProfileRegistry
|
||||
|
||||
保存规则包元数据、版本、适用范围、状态、资产和 schema 版本。职责:
|
||||
|
||||
- 精确解析 `profileId@version`。
|
||||
- 执行四级规则选择。
|
||||
- 验证文档类型、项目范围、发布状态和资产哈希。
|
||||
- 返回不可变规则快照。
|
||||
|
||||
### 2.3 DocumentRenderer
|
||||
|
||||
格式无关调度器:验证输入、解析规则、构建渲染计划、调用格式适配器、运行输出校验并生成清单。它不读项目数据库、不判断用户权限、不访问网络。
|
||||
|
||||
### 2.4 WordAdapter
|
||||
|
||||
唯一允许操作 Word 包结构的模块。负责样式、编号、分节、表格、页眉页脚、图片、书签、内容控件、批注、修订、签署区和 OPC 完整性。
|
||||
|
||||
### 2.5 RDM 编排层
|
||||
|
||||
RDM 负责项目权限、文档树、审签、规则选择、冻结提交、交付物保存和追溯关系。它把已经授权和冻结的输入交给渲染器,不让渲染器反查项目数据。
|
||||
|
||||
### 2.6 Backend 工作区交付
|
||||
|
||||
普通会话交付使用同一公开渲染入口:先保存 Markdown,再提交受限的 RenderRequest。现有 `house-style` 能力逐步迁移为公司通用规则包和 WordAdapter,不维持第二套独立语义。
|
||||
|
||||
## 3. 关键接口
|
||||
|
||||
```go
|
||||
type RenderRequest struct {
|
||||
Document CanonicalDocument
|
||||
Profile RenderProfileSnapshot
|
||||
Review ReviewSnapshot
|
||||
Mode RenderMode
|
||||
FrozenAt time.Time
|
||||
RequestedBy string
|
||||
}
|
||||
|
||||
type RenderResult struct {
|
||||
Artifact []byte
|
||||
MIME string
|
||||
FileName string
|
||||
Manifest RenderManifest
|
||||
Diagnostics []Diagnostic
|
||||
}
|
||||
|
||||
type Renderer interface {
|
||||
Validate(context.Context, RenderRequest) ([]Diagnostic, error)
|
||||
Render(context.Context, RenderRequest) (RenderResult, error)
|
||||
}
|
||||
```
|
||||
|
||||
`RenderMode` 第一阶段固定为 `working`、`preview`、`review`、`approved`。
|
||||
|
||||
## 4. 生成流程
|
||||
|
||||
1. RDM 冻结 Markdown 版本、节点映射、来源和审签状态。
|
||||
2. ProfileResolver 选择确切规则;受控文档不存在确切规则则失败。
|
||||
3. Parser 生成 CanonicalDocument,并验证稳定节点 ID。
|
||||
4. Renderer 编译声明式规则为 RenderPlan。
|
||||
5. WordAdapter 克隆受控模板包或公司通用底稿。
|
||||
6. 按 RenderPlan 写入内容和受控元数据。
|
||||
7. 运行 OPC、样式、锚点、字段、回读和安全校验。
|
||||
8. 保存字节、清单、诊断和追溯边。
|
||||
|
||||
## 5. 确定性与缓存
|
||||
|
||||
缓存键:
|
||||
|
||||
```text
|
||||
SHA256(
|
||||
canonicalDocumentHash ||
|
||||
renderProfileSnapshotHash ||
|
||||
reviewSnapshotHash ||
|
||||
renderMode ||
|
||||
adapterVersion
|
||||
)
|
||||
```
|
||||
|
||||
相同键返回同一冻结交付物。规则发布、内容修改、审签变化或适配器升级会形成新键,不覆盖旧文件。
|
||||
|
||||
## 6. 失败策略
|
||||
|
||||
- `profile_not_found`:无确切规则。
|
||||
- `profile_not_published`:规则未发布或已退役。
|
||||
- `asset_hash_mismatch`:模板、Logo、字体或图片资产漂移。
|
||||
- `required_field_missing`:文件号、版本或规则必填元数据缺失。
|
||||
- `mapping_unresolved`:Markdown 节点不能映射到模板槽位。
|
||||
- `review_state_invalid`:导出模式与审签状态不匹配。
|
||||
- `word_validation_failed`:DOCX 包、样式、锚点或回读失败。
|
||||
|
||||
错误不得触发受控文档向默认规则回退。
|
||||
|
||||
## 7. 扩展格式
|
||||
|
||||
后续 `PdfAdapter` 和 `PptAdapter` 只消费 CanonicalDocument 与各自 RenderProfile format section。跨格式共用来源、权限、版本、审签和清单;格式特有能力由适配器声明 capability,规则引用未知 capability 时拒绝发布。
|
||||
@@ -0,0 +1,151 @@
|
||||
# 03 RenderProfile 渲染规则规范
|
||||
|
||||
## 1. 安全模型
|
||||
|
||||
RenderProfile 是声明式数据,不是程序。禁止:
|
||||
|
||||
- Shell、Python、JavaScript、VBA 或宏。
|
||||
- 任意 OOXML、HTML 或 XML 注入。
|
||||
- 外部 URL 下载及运行时网络请求。
|
||||
- 绝对路径、父目录跳转和未登记资产。
|
||||
- 动态反射、表达式求值和任意函数调用。
|
||||
|
||||
复杂能力必须先作为渲染器中经过测试的安全原语发布,规则只能按名称引用。
|
||||
|
||||
## 2. 顶层结构
|
||||
|
||||
```yaml
|
||||
schemaVersion: render-profile/v1
|
||||
profileId: company.dhf.project-proposal
|
||||
version: 1.0.0
|
||||
format: docx
|
||||
state: published
|
||||
appliesTo:
|
||||
documentTypes: [rd_proposal]
|
||||
stages: [RD]
|
||||
baseTemplate:
|
||||
assetId: dhf.2750fbaf1f67d10c
|
||||
assetVersion: 1.0.0
|
||||
sha256: <64-hex>
|
||||
assets:
|
||||
logo: company.logo.primary@1
|
||||
selection:
|
||||
controlled: true
|
||||
allowDefaultFallback: false
|
||||
page: {}
|
||||
styles: {}
|
||||
numbering: {}
|
||||
headers: []
|
||||
footers: []
|
||||
mappings: []
|
||||
review: {}
|
||||
validation: {}
|
||||
```
|
||||
|
||||
实际发布对象必须存规范化 JSON 和 SHA256;YAML 仅作为人工编辑输入。
|
||||
|
||||
## 3. 规则选择
|
||||
|
||||
每个文档实例保存:
|
||||
|
||||
```json
|
||||
{
|
||||
"profileId": "company.dhf.project-proposal",
|
||||
"profileVersion": "1.0.0",
|
||||
"selectionSource": "document-explicit",
|
||||
"snapshotHash": "..."
|
||||
}
|
||||
```
|
||||
|
||||
优先级:`document-explicit > document-type > project-default > organization-default`。`controlled=true` 时 `allowDefaultFallback` 必须为 false。
|
||||
|
||||
## 4. 页面与样式
|
||||
|
||||
`page` 支持固定安全字段:纸张、方向、页边距、装订线、分节、首页不同、奇偶页不同。
|
||||
|
||||
`styles` 以语义样式为键:
|
||||
|
||||
- `documentTitle`
|
||||
- `heading1` 至 `heading6`
|
||||
- `body`
|
||||
- `caption`
|
||||
- `quote`
|
||||
- `warning`
|
||||
- `tableHeader`
|
||||
- `tableBody`
|
||||
- `signature`
|
||||
|
||||
每个样式只允许字体族、字号、粗斜体、颜色令牌、对齐、缩进、行距、段间距、分页约束及 Word style name。
|
||||
|
||||
## 5. 映射规则
|
||||
|
||||
```yaml
|
||||
mappings:
|
||||
- selector:
|
||||
nodeKind: section
|
||||
semantic: purpose
|
||||
target:
|
||||
kind: content-control
|
||||
part: word/document.xml
|
||||
anchor: purpose
|
||||
render:
|
||||
primitive: paragraphs
|
||||
empty: block
|
||||
```
|
||||
|
||||
选择器只能基于规范字段:节点 ID、节点类型、语义、标签、文档路径。目标只能引用已在模板包清单登记的书签、内容控件、表格行、页眉页脚字段或图片槽位。
|
||||
|
||||
## 6. 表格与重复块
|
||||
|
||||
表格原语支持:列宽、表头重复、对齐、边框、底色、单元格跨度、行禁止跨页、重复行模板及空值策略。合并单元格由规则明确声明,不从 Markdown 空单元格猜测。
|
||||
|
||||
```yaml
|
||||
render:
|
||||
primitive: repeat-table-row
|
||||
rowAnchor: risk-row
|
||||
columns:
|
||||
risk: risk.statement
|
||||
cause: risk.cause
|
||||
control: risk.control
|
||||
```
|
||||
|
||||
## 7. 页眉页脚和公司资产
|
||||
|
||||
页眉页脚规则区分:
|
||||
|
||||
- `fixed`:机密声明、公司名称、静态标签。
|
||||
- `field`:PAGE、NUMPAGES、日期等 Word 字段。
|
||||
- `slot`:文件号、版本、项目名称等实例数据。
|
||||
- `asset`:Logo、认证标志和受控图片。
|
||||
|
||||
Logo 必须引用资产注册表中的版本化对象,不允许规则携带 data URL 或任意文件。
|
||||
|
||||
## 8. 审阅配置
|
||||
|
||||
```yaml
|
||||
review:
|
||||
trackChanges: supported
|
||||
comments: supported
|
||||
commentReplies: supported
|
||||
approvedOutput: accept-all
|
||||
reviewOutput: preserve
|
||||
signatureBindings:
|
||||
author: document.author
|
||||
reviewer: submission.reviewers
|
||||
approver: submission.approver
|
||||
decidedAt: submission.decidedAt
|
||||
```
|
||||
|
||||
真实身份字段来自 ReviewSnapshot。规则只能决定显示位置和格式,不能提供值。
|
||||
|
||||
## 9. 校验规则
|
||||
|
||||
发布前校验:schema、能力、资产哈希、模板锚点唯一性、样式引用、循环上限、映射覆盖和安全字段。
|
||||
|
||||
生成前校验:文档类型、必填元数据、节点映射、审签状态和可见范围。
|
||||
|
||||
生成后校验:ZIP/OPC、XML、安全对象、样式、页眉页脚、书签、批注关系、修订关系、字段、回读结构和输出哈希。
|
||||
|
||||
## 10. 生命周期
|
||||
|
||||
`draft → validated → published → retired`。只有系统管理员可发布公司规则;项目创建者可选择已发布规则或管理项目默认绑定。发布对象不可修改,退役不删除旧资产和旧交付物。
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
# 04 公司 Word 设计规范
|
||||
|
||||
## 1. 目的
|
||||
|
||||
本规范定义公司通用 Word 输出的统一设计,并规定专用受控模板与公司通用规则之间的关系。专用模板可声明经过评审的例外;没有例外时继承公司规范。
|
||||
|
||||
## 2. 当前已证实的模板共性
|
||||
|
||||
- 41/44 存在页眉或页脚部件。
|
||||
- 40 份包含文件名称、文件号、版本等文件控制字段。
|
||||
- 已识别 78 个文件号/版本槽位。
|
||||
- 企业机密声明和自动页码域属于固定版式。
|
||||
- 部分模板包含表格编号、复杂合并、重复行、签署区和旧 DOC 转换差异。
|
||||
- 统一 Logo、主题字体、封面系统、色板和全部标题层级尚无经过逐模板审核的统一结论,不能依据局部样本直接定为公司标准。
|
||||
|
||||
## 3. 视觉普查产物
|
||||
|
||||
实施第一项生成 `CorporateStyleInventory`,对 44 份模板逐项记录:
|
||||
|
||||
- 页面尺寸、方向、页边距、分节、首页及奇偶页规则。
|
||||
- 中文/西文字体、字号、字重、颜色、行距和段间距。
|
||||
- 标题层级、编号、多级列表和目录。
|
||||
- 表格边框、底色、列宽、合并、表头重复和跨页规则。
|
||||
- 页眉页脚文本、字段、控制表及位置。
|
||||
- Logo、图片、形状、OLE、关系和裁剪尺寸。
|
||||
- 封面、签署区、版本记录和文件控制表。
|
||||
- 专用模板例外及证据截图/部件锚点。
|
||||
|
||||
每项标记 `common`、`family-rule`、`template-exception` 或 `unverified`。`unverified` 不进入已发布公司规则。
|
||||
|
||||
## 4. 公司通用规则结构
|
||||
|
||||
通用规则最终必须明确下列值并经视觉评审后发布:
|
||||
|
||||
- A4 纵向为普通文档默认页面;横向表格由显式分节规则启用。
|
||||
- 正文、标题、表格、题注、引用、警示和代码的语义样式。
|
||||
- 标题编号与目录层级。
|
||||
- 公司 Logo 的版本化资产、最小尺寸、留白和允许位置。
|
||||
- 页眉中的公司/文件身份信息。
|
||||
- 页脚中的机密声明、页码和总页数。
|
||||
- 文件名称、文件号、版本、发布日期和状态的控制表。
|
||||
- 图片题注、表格题注、交叉引用和分页规则。
|
||||
|
||||
本文不预填尚未审核的具体字体、字号、Logo 文件或颜色值;这些值由 `CorporateStyleInventory` 的人工评审结果写入首个发布规则,而不是在代码中硬编码。
|
||||
|
||||
## 5. 专用模板继承
|
||||
|
||||
每个模板配置包声明:
|
||||
|
||||
```text
|
||||
company common profile
|
||||
└── document family profile
|
||||
└── exact template exceptions
|
||||
```
|
||||
|
||||
继承在规则发布时展开并冻结成完整快照;运行时不动态追随父规则。父规则升级不会改变已发布子规则。
|
||||
|
||||
## 6. 内容设计原则
|
||||
|
||||
- 一页只承担清晰的信息任务,避免纯装饰元素。
|
||||
- 标题层级由文档结构决定,不以字号模拟层级。
|
||||
- 表格用于对比和结构化数据,不用空表格模拟页面布局;专用受控模板例外需登记。
|
||||
- 颜色不作为唯一状态提示。
|
||||
- 图片必须有题注、来源和替代说明。
|
||||
- 空缺、冲突、未核实和待确认内容不得伪装成正式结论。
|
||||
- 审阅稿可以显示提示和批注,批准稿只显示已批准内容及正式控制信息。
|
||||
|
||||
## 7. 保真与例外
|
||||
|
||||
旧 DOC 以原件保全、转换件、规范化件和渲染件四层身份管理。转换导致的图形、字体或分页差异必须列入模板例外;不能以“能够打开”替代视觉保真结论。
|
||||
|
||||
专用模板的固定表格、签署区和监管格式优先于通用视觉偏好,但必须继续满足可读性、来源和审签真实性要求。
|
||||
@@ -0,0 +1,104 @@
|
||||
# 05 生命周期与流程
|
||||
|
||||
## 1. 文档生命周期
|
||||
|
||||
```text
|
||||
source-md draft
|
||||
→ render preview
|
||||
→ submit review
|
||||
→ reviewer comments / tracked changes
|
||||
→ author revision
|
||||
→ review accepted
|
||||
→ approval decision
|
||||
→ approved + review artifacts frozen
|
||||
→ superseded or retired by explicit change
|
||||
```
|
||||
|
||||
文档内容、渲染规则和审签轮次是三个独立版本维度。任何一个变化都会生成新的 RenderRequest 和交付物,不覆盖先前批准文件。
|
||||
|
||||
## 2. 起草流程
|
||||
|
||||
1. 成员或智能体创建 Markdown 候选。
|
||||
2. 系统为标题、段落、表格等节点分配稳定 ID。
|
||||
3. 来源材料进入笔记树,内容节点进入文档树,来源边进入追溯网。
|
||||
4. ProfileResolver 根据四级优先级选择规则并显示选择原因。
|
||||
5. 生成前检查必填字段、映射、来源权限和风险。
|
||||
6. WordAdapter 生成预览稿和诊断。
|
||||
7. 用户在阅读器和 Word 预览中检查内容与版式。
|
||||
|
||||
## 3. 提交审阅
|
||||
|
||||
提交动作冻结:
|
||||
|
||||
- Markdown 内容版本及哈希。
|
||||
- CanonicalDocument 哈希。
|
||||
- RenderProfile 快照及哈希。
|
||||
- 模板和资产哈希。
|
||||
- 文档树节点集合。
|
||||
- 来源可见范围。
|
||||
- 编制、审阅和批准职责。
|
||||
|
||||
冻结后发生的新编辑进入下一草稿,不改变本轮审阅对象。
|
||||
|
||||
## 4. 审阅循环
|
||||
|
||||
审阅人可以:
|
||||
|
||||
- 对节点或文本范围添加批注。
|
||||
- 回复批注。
|
||||
- 提出插入、删除、替换或移动建议。
|
||||
- 将批注标记为已处理、拒绝或仍待处理。
|
||||
- 退回修改或通过审阅。
|
||||
|
||||
编制人处理建议时形成新内容版本;系统保留修改前后、操作者、时间、原因、批注和来源关系。重新提交生成新审阅轮次或同轮修订,具体由项目策略配置,但不得覆盖旧修订。
|
||||
|
||||
## 5. 批准和双 Word 交付
|
||||
|
||||
批准人只能批准已经通过必需审阅、没有阻塞项且规则校验成功的冻结对象。批准事务完成后生成:
|
||||
|
||||
- 干净批准稿:接受已批准修订,显示正式文件控制和签署信息。
|
||||
- 审阅留痕稿:保留修订、批注、回复、作者和时间。
|
||||
- Markdown 源文件。
|
||||
- 生成清单。
|
||||
|
||||
输出生成失败时批准决定仍保留,但交付状态为 `generation-failed`,不得伪装成已经交付;修复渲染问题后以同一冻结输入幂等重试。
|
||||
|
||||
## 6. 规则升级流程
|
||||
|
||||
1. 提出规则升级提案,绑定旧规则、新规则、示例文档和影响分析。
|
||||
2. 生成新旧规则对照预览和诊断差异。
|
||||
3. 人工确认后发布新规则版本。
|
||||
4. 新文档默认使用新版本。
|
||||
5. 已有草稿可以显式升级;批准文档不自动升级。
|
||||
6. 升级后的文档重新进入审阅与批准。
|
||||
|
||||
## 7. 默认规则流程
|
||||
|
||||
普通文档未绑定专用规则时使用公司通用规则。系统必须在 UI 和清单中显示“公司通用规则”,不能让用户误认为采用了某个专用受控模板。
|
||||
|
||||
## 8. 用户上传参考文档生成规则(后续)
|
||||
|
||||
```text
|
||||
上传原件
|
||||
→ 安全解析与原件保全
|
||||
→ 样式/结构/资产分析
|
||||
→ 生成候选规则与识别报告
|
||||
→ 样例 Markdown 预览
|
||||
→ 人工对照和修正规则
|
||||
→ 自动校验
|
||||
→ 管理员发布
|
||||
```
|
||||
|
||||
候选规则始终是 `draft`。模型分析结果附置信度和未识别项;宏、外链、嵌入对象和未知 XML 明确隔离。没有人工评审和校验不得进入 `published`。
|
||||
|
||||
## 9. 下载体验
|
||||
|
||||
用户可选择:
|
||||
|
||||
- 下载 Markdown。
|
||||
- 下载当前 Word。
|
||||
- 下载批准稿。
|
||||
- 下载审阅留痕稿。
|
||||
- 下载全部交付包。
|
||||
|
||||
下载前重新检查当前权限。已撤权用户不能凭旧链接继续下载;历史交付物字节不因撤权而改变。
|
||||
@@ -0,0 +1,113 @@
|
||||
# 06 修订、批注与审签设计
|
||||
|
||||
## 1. 独立数据模型
|
||||
|
||||
Markdown 正文不嵌入 Word 批注语法。系统保存独立对象:
|
||||
|
||||
```go
|
||||
type Annotation struct {
|
||||
ID string
|
||||
DocumentID string
|
||||
NodeID string
|
||||
Range TextRange
|
||||
Author ActorSnapshot
|
||||
BodyMarkdown string
|
||||
CreatedAt time.Time
|
||||
State string // open|resolved|rejected
|
||||
ParentID string // reply
|
||||
}
|
||||
|
||||
type Revision struct {
|
||||
ID string
|
||||
NodeID string
|
||||
Kind string // insert|delete|replace|move
|
||||
BeforeHash string
|
||||
AfterHash string
|
||||
Actor ActorSnapshot
|
||||
At time.Time
|
||||
Reason string
|
||||
}
|
||||
|
||||
type ApprovalSnapshot struct {
|
||||
SubmissionID string
|
||||
Author ActorSnapshot
|
||||
Reviewers []DecisionSnapshot
|
||||
Approver DecisionSnapshot
|
||||
DecidedAt time.Time
|
||||
}
|
||||
```
|
||||
|
||||
`ActorSnapshot` 保存当时显示名、账号稳定 ID、项目职责及可信身份来源。当前改名不重写历史。
|
||||
|
||||
## 2. 锚定方式
|
||||
|
||||
批注优先绑定稳定 `nodeId + textStart + textEnd + textHash`。节点内容变化后:
|
||||
|
||||
- 哈希和范围仍匹配:保持精确锚点。
|
||||
- 节点存在但范围漂移:标记 `needs-reanchor`,显示旧摘录。
|
||||
- 节点删除:保留孤立批注并指向删除修订。
|
||||
|
||||
不得只用段落序号绑定。
|
||||
|
||||
## 3. Word 映射
|
||||
|
||||
WordAdapter 负责:
|
||||
|
||||
- `w:ins`、`w:del` 及作者/时间属性。
|
||||
- `comments.xml`、批注范围、批注引用及关系。
|
||||
- 支持的批注回复模型。
|
||||
- `trackRevisions` 设置。
|
||||
- 节点书签与内容控件。
|
||||
|
||||
Word 内作者、时间和审批字段只来自 ReviewSnapshot;模板示例、模型输出或请求参数不能覆盖。
|
||||
|
||||
## 4. 工作稿
|
||||
|
||||
工作稿可以显示:
|
||||
|
||||
- 未解决批注。
|
||||
- 缺项、冲突和未核实来源提示。
|
||||
- 当前草稿修订。
|
||||
- 非正式水印或状态标志。
|
||||
|
||||
工作稿不能显示批准签署,文件控制状态必须为草稿。
|
||||
|
||||
## 5. 审阅留痕稿
|
||||
|
||||
审阅留痕稿包含:
|
||||
|
||||
- 相对于本轮基线的全部受支持修订。
|
||||
- 批注、回复和解决状态。
|
||||
- 作者、审阅人和时间。
|
||||
- 审阅决定摘要。
|
||||
- 版本差异附录及来源引用。
|
||||
|
||||
无权查看的私人来源正文不写入文件;只显示“存在受限依据”及允许披露的摘要。
|
||||
|
||||
## 6. 批准稿
|
||||
|
||||
批准稿默认接受全部已批准修订并隐藏普通批注。它包含:
|
||||
|
||||
- 干净正文。
|
||||
- 文件名称、文件号、版本和批准日期。
|
||||
- 真实编制、审核、批准信息。
|
||||
- 模板/规则身份及必要的文件控制记录。
|
||||
|
||||
如监管流程要求保留批注意见,必须由专用规则明确映射到批准记录附录,不能直接携带私人批注线程。
|
||||
|
||||
## 7. 双 Word 交付
|
||||
|
||||
一次批准产生两个独立工件及哈希:
|
||||
|
||||
- `approved.docx`
|
||||
- `review.docx`
|
||||
|
||||
两个文件绑定同一 SubmissionID、内容版本和规则快照。清单说明模式差异,避免将留痕稿误当批准稿。
|
||||
|
||||
## 8. 验证
|
||||
|
||||
- 打开 Word 后修订作者、时间、插入和删除可见。
|
||||
- 批注范围准确,回复关系完整。
|
||||
- 接受全部修订后正文与批准稿一致。
|
||||
- 批准稿不含未授权批注、私人对话或模型隐藏分析。
|
||||
- 没有真实审签数据时签署区为空且生成批准稿被阻止。
|
||||
@@ -0,0 +1,76 @@
|
||||
# 07 权限、安全与审计
|
||||
|
||||
## 1. 权限分层
|
||||
|
||||
| 能力 | 最小权限 |
|
||||
|---|---|
|
||||
| 查看 Markdown/Word | 当前文档读取权限 |
|
||||
| 生成工作稿 | 文档编制权限 |
|
||||
| 添加批注 | 审阅参与权限及节点可见性 |
|
||||
| 提交审阅 | 当前编制职责 |
|
||||
| 审阅通过/退回 | 冻结轮次中的审阅职责 |
|
||||
| 批准 | 冻结轮次中的批准职责 |
|
||||
| 选择项目默认规则 | 项目设置权限 |
|
||||
| 发布公司规则 | 系统管理员 |
|
||||
| 查看渲染审计 | `audit.read` 加对象内容权限 |
|
||||
|
||||
项目成员身份不等于所有内容、私人来源或审计权限。
|
||||
|
||||
## 2. RenderProfile 安全边界
|
||||
|
||||
- schema 白名单字段。
|
||||
- 资产路径必须来自包内清单且通过 SHA256。
|
||||
- 不执行脚本、宏、外部关系和任意 XML。
|
||||
- ZIP 解压限制文件数、单文件大小和总展开大小。
|
||||
- 拒绝 ActiveX、OLE、VBA、远程模板和未知可执行关系。
|
||||
- 图片解码、字体和 XML 解析设置资源上限。
|
||||
- 渲染执行无网络,输出只写会话或交付目录。
|
||||
|
||||
## 3. 用户上传参考文档
|
||||
|
||||
上传后立即保全原字节和哈希。分析在隔离进程中进行;任何宏、外链、嵌入对象或损坏部件列入报告。生成的候选规则不继承上传文件的代码、宏或外部关系。
|
||||
|
||||
候选规则发布需要:原件权限、来源声明、分析报告、预览对照、自动校验及管理员决定。
|
||||
|
||||
## 4. 私域与共享输出
|
||||
|
||||
渲染请求逐节点计算披露权限:
|
||||
|
||||
- 公开项目事实可进入项目文档。
|
||||
- 私人对话、个人草稿和未分享原件默认不进入共享输出。
|
||||
- 受限来源可以贡献经授权的结论,但文件中只显示允许披露的引用。
|
||||
- 审阅留痕稿同样执行权限裁剪,不能因为“审计”而绕过正文权限。
|
||||
|
||||
个人对话生成的思维导图、流程图和解释卡片只属于本人会话;分享必须是单独明确操作。
|
||||
|
||||
## 5. 审签真实性
|
||||
|
||||
- 请求参数不能提交 `approvedBy`、`confirmed` 或签名图片来冒充决定。
|
||||
- 审核、批准和签署区读取冻结审签记录。
|
||||
- 决定绑定用户、项目、文档、SubmissionID、内容哈希和规则快照。
|
||||
- 同一决定证明一次消费;重试返回原交付回执。
|
||||
- 撤权、职责变化、过期或规则漂移在提交前重新检查。
|
||||
|
||||
## 6. 审计事件
|
||||
|
||||
至少记录:
|
||||
|
||||
- Markdown 创建、修改和版本冻结。
|
||||
- 规则选择及选择来源。
|
||||
- 渲染请求、诊断、成功、失败和重试。
|
||||
- 预览、下载和归档包下载。
|
||||
- 批注创建、回复、解决和删除。
|
||||
- 修订接受或拒绝。
|
||||
- 提交、审阅、批准和退回。
|
||||
- 规则创建、验证、发布、退役和升级。
|
||||
- 模板、Logo 和其他资产变更。
|
||||
|
||||
人类界面展示时间、人物、对象路径、动作、前后版本、原因、影响、来源和结果;原始 JSON 仅供受控诊断,不作为业务页面。
|
||||
|
||||
## 7. 防数据泄露验证
|
||||
|
||||
- 两项目、两成员、私人会话和共享文档交叉测试。
|
||||
- 批注正文权限与审计权限交叉测试。
|
||||
- 撤权后下载、缓存、历史链接和重试测试。
|
||||
- 个人流程图/思维导图不可被同项目其他成员枚举。
|
||||
- DOCX ZIP 中不存在无权正文、批注、隐藏文本、自定义属性或关系残留。
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
# 08 模板接入与迁移
|
||||
|
||||
## 1. 当前 44 份模板
|
||||
|
||||
第一阶段逐份生成 RenderProfile,不按文件名硬编码渲染逻辑。每个配置包绑定:原件、转换派生、规范化 DOCX、结构合同、渲染底稿、规则快照、资产和人工评审结论。
|
||||
|
||||
当前 42 PASS、2 EXPECTED_BLOCKED。完成前必须补齐对应文档类型字典登记和存量数据库迁移,并在 SQLite、PostgreSQL 与真实产品链重放;不能把“预期阻止”计为已接入。
|
||||
|
||||
## 2. 接入步骤
|
||||
|
||||
1. 原件保全:文件名、格式、大小、SHA256、来源和许可。
|
||||
2. 安全检查:宏、OLE、外链、嵌入对象、损坏部件。
|
||||
3. 规范化:旧 DOC 生成受控 DOCX 派生并记录转换器版本和输入输出哈希。
|
||||
4. 结构分析:章节、段落、表格、重复块、图片、页眉页脚和签署区。
|
||||
5. 视觉普查:字体、页面、标题、编号、颜色、Logo 和模板例外。
|
||||
6. 锚点化:把可填写位置转换成书签或内容控件。
|
||||
7. 规则生成:建立 RenderProfile 和 Markdown 节点映射。
|
||||
8. 正反样例:完整输入、缺字段、超长内容、复杂表格和权限拒绝。
|
||||
9. 预览对照:原模板、空模板、填充结果和回读结构。
|
||||
10. 人工发布:内容、格式、安全和适用范围全部通过后进入 `published`。
|
||||
|
||||
## 3. 公司通用规则
|
||||
|
||||
通用规则不是 44 份模板中的任意一份。它由公司视觉普查结论生成,服务于没有专用受控模板的普通报告、纪要、说明和分析文档。
|
||||
|
||||
## 4. 字典门禁迁移
|
||||
|
||||
对两份阻塞模板:
|
||||
|
||||
- 明确对应文档类型、阶段和用途。
|
||||
- 新增版本化字典迁移,而不是只修改新库种子。
|
||||
- 迁移前生成备份和对账清单。
|
||||
- 存量项目不自动创建文档;只增加可选择类型。
|
||||
- 旧二进制遇到新字典/schema 时拒绝写入。
|
||||
- 迁移后重新执行 44 份全链矩阵。
|
||||
|
||||
## 5. 规则版本迁移
|
||||
|
||||
已发布规则不可改写。模板修订、Logo 更新或样式调整创建新版本;旧交付物和旧规则包永久可取。文档升级保存旧/新预览、内容映射差异和影响分析,经真人确认后应用。
|
||||
|
||||
## 6. 用户上传规则生成(后续)
|
||||
|
||||
分析器输出:
|
||||
|
||||
- 候选 RenderProfile。
|
||||
- 资产清单和哈希。
|
||||
- 识别到的样式、锚点和结构。
|
||||
- 未识别/低置信度项。
|
||||
- 安全风险。
|
||||
- 样例 Markdown。
|
||||
- 预览 DOCX。
|
||||
- 原件与预览的结构/视觉差异报告。
|
||||
|
||||
候选规则只能保存为 `draft`。用户可在规则编辑器中修改允许字段;复杂新能力提交为渲染器原语需求,不允许嵌入代码绕过。
|
||||
|
||||
## 7. 回滚
|
||||
|
||||
回滚是把默认绑定指回旧发布版本,不删除新版本。已经用新规则生成的草稿保留;批准文件永不重新渲染覆盖。规则包、字典和资产迁移分别拥有对账及恢复记录。
|
||||
@@ -0,0 +1,299 @@
|
||||
# Unified Document Renderer Implementation Plan
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Build a declarative, versioned Word renderer that converts Markdown-backed project documents into validated working, review, and approved DOCX artifacts using either one of 44 controlled templates or the company default profile.
|
||||
|
||||
**Architecture:** Subject to architecture review, introduce an independent `Agent-Document-Renderer` Go module containing the canonical document model, RenderProfile compiler, renderer coordinator, and Word adapter. RDM owns project authorization, content/source trees, review state, profile binding, and immutable deliveries; Backend consumes the same module for ordinary workspace deliverables. Profiles and assets are versioned data packages, never executable code. Do not create the repository or change dependency pins until this boundary is approved and the implementation task passes its startup gate.
|
||||
|
||||
**Tech Stack:** Go, YAML/JSON schema input with canonical JSON snapshots, ZIP/OPC and XML processing, existing RDM DHF assets, SQLite/PostgreSQL integration, React/TypeScript UI, Playwright browser acceptance.
|
||||
|
||||
**Spec:** `docs/records/2026-10-15-unified-document-renderer/02-architecture-and-solution.md`
|
||||
|
||||
## Global Constraints
|
||||
|
||||
- Phase 1 implements DOCX only; PDF and PPT adapters are interface compatibility tests, not production implementations.
|
||||
- RenderProfile is declarative and rejects scripts, macros, arbitrary XML, external URLs, absolute paths, and undeclared assets.
|
||||
- Controlled documents never fall back to the company default profile.
|
||||
- Published profiles are immutable; updates create new versions.
|
||||
- Markdown is the editable source; review and approval data remain separate structured records.
|
||||
- Approval identity comes only from trusted frozen review data.
|
||||
- Private conversation/source data is excluded unless explicitly authorized for the target document.
|
||||
- 44/44 templates must pass the applicable full chain; the current two dictionary blocks must be removed through versioned migration.
|
||||
|
||||
## Review Focus
|
||||
|
||||
- Old DOC conversions containing OLE, drawings, merged cells, and headers must fail safely or preserve the approved derivative without silently dropping content.
|
||||
- A profile selected for the wrong document type must be rejected before any delivery row or blob is committed.
|
||||
- A review export with stale text ranges must preserve orphaned comments without attaching them to the wrong paragraph.
|
||||
- A revoked member or changed duty must not obtain a new render/download after the authorization change.
|
||||
- A profile/asset hash change during rendering must roll back the whole delivery and preserve the prior approved bytes.
|
||||
|
||||
---
|
||||
|
||||
### Task 1: Freeze the corporate style inventory
|
||||
|
||||
**Files:**
|
||||
- Create: `Agent-System-RDM/docs/records/renderer/corporate-style-inventory.json`
|
||||
- Create: `Agent-System-RDM/docs/records/renderer/corporate-style-inventory.md`
|
||||
- Create: `Agent-System-RDM/scripts/render-profile-inventory.py`
|
||||
- Test: `Agent-System-RDM/tests/test_render_profile_inventory.py`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: 44 published entries from `internal/rdmapp/templates/dhf/catalog.json` and their normalized/render DOCX packages.
|
||||
- Produces: a schema-validated inventory with one row per template and explicit `common|family-rule|template-exception|unverified` findings.
|
||||
|
||||
- [ ] Write a failing fixture test that scans one header, one footer, one merged table, one image, and one legacy-converted package and asserts page/style/asset findings.
|
||||
- [ ] Run `python3 -m unittest tests.test_render_profile_inventory -v`; expect missing inventory module failure.
|
||||
- [ ] Implement bounded ZIP/XML inspection without executing macros or external relationships.
|
||||
- [ ] Generate the 44-row JSON and human summary; fail if any catalog identity is absent or duplicated.
|
||||
- [ ] Run the test and compare generated output byte-for-byte with the committed inventory.
|
||||
- [ ] Commit with the catalog SHA and generator version in the record.
|
||||
|
||||
### Task 2: Create the renderer module and canonical model
|
||||
|
||||
**Files:**
|
||||
- Create: `Agent-Document-Renderer/go.mod`
|
||||
- Create: `Agent-Document-Renderer/model/document.go`
|
||||
- Create: `Agent-Document-Renderer/model/review.go`
|
||||
- Create: `Agent-Document-Renderer/render/renderer.go`
|
||||
- Create: `Agent-Document-Renderer/render/diagnostic.go`
|
||||
- Test: `Agent-Document-Renderer/model/document_test.go`
|
||||
|
||||
**Interfaces:**
|
||||
- Produces: `model.CanonicalDocument`, `model.Node`, `model.Annotation`, `model.Revision`, `model.ReviewSnapshot`, `render.Request`, `render.Result`, and `render.Renderer`.
|
||||
- Depends only on the Go standard library.
|
||||
|
||||
```go
|
||||
type Node struct {
|
||||
ID string
|
||||
Kind NodeKind
|
||||
Semantic string
|
||||
Text string
|
||||
Children []Node
|
||||
Sources []SourceRef
|
||||
}
|
||||
|
||||
type Request struct {
|
||||
Document model.CanonicalDocument
|
||||
Profile profile.Snapshot
|
||||
Review model.ReviewSnapshot
|
||||
Mode Mode
|
||||
FrozenAt time.Time
|
||||
RequestedBy string
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] Write failing tests for duplicate node IDs, cycles, invalid source spans, missing review actors, and immutable clone behavior.
|
||||
- [ ] Run `go test ./model ./render`; expect undefined types.
|
||||
- [ ] Implement the model and validators with deterministic canonical JSON hashing.
|
||||
- [ ] Add serialization round-trip tests and reject unknown schema versions.
|
||||
- [ ] Run `go test ./...` and `go vet ./...`.
|
||||
- [ ] Commit the deep public model before adding Word code.
|
||||
|
||||
### Task 3: Implement RenderProfile schema, compiler, and registry
|
||||
|
||||
**Files:**
|
||||
- Create: `Agent-Document-Renderer/profile/schema.go`
|
||||
- Create: `Agent-Document-Renderer/profile/compile.go`
|
||||
- Create: `Agent-Document-Renderer/profile/registry.go`
|
||||
- Create: `Agent-Document-Renderer/profile/testdata/*.yaml`
|
||||
- Test: `Agent-Document-Renderer/profile/profile_test.go`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: YAML editing form plus an asset reader limited to manifest paths.
|
||||
- Produces: immutable `profile.Snapshot`, canonical JSON, snapshot hash, declared capabilities, and compiled mappings.
|
||||
|
||||
- [ ] Add failing tests for script fields, arbitrary XML, parent paths, remote assets, duplicate anchors, unknown primitives, unsafe recursion, and controlled fallback.
|
||||
- [ ] Implement strict decoding that rejects unknown fields.
|
||||
- [ ] Compile inheritance into a complete snapshot; runtime never follows mutable parent profiles.
|
||||
- [ ] Implement selection precedence and return `SelectionReceipt{Source, ProfileID, Version, Hash}`.
|
||||
- [ ] Add lifecycle tests for `draft→validated→published→retired` and immutable published versions.
|
||||
- [ ] Run `go test ./profile -count=1` and commit.
|
||||
|
||||
### Task 4: Parse Markdown into CanonicalDocument
|
||||
|
||||
**Files:**
|
||||
- Create: `Agent-Document-Renderer/markdown/parser.go`
|
||||
- Create: `Agent-Document-Renderer/markdown/frontmatter.go`
|
||||
- Create: `Agent-Document-Renderer/markdown/directives.go`
|
||||
- Test: `Agent-Document-Renderer/markdown/parser_test.go`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: UTF-8 Markdown, required stable node markers, front matter, and a bounded directive set.
|
||||
- Produces: `model.CanonicalDocument` without Word-specific styles.
|
||||
|
||||
- [ ] Write failing tests for headings, paragraphs, lists, tables, images, callouts, signatures, duplicate IDs, malformed tables, hidden HTML, and oversized documents.
|
||||
- [ ] Implement front matter keys for document/profile metadata and reject arbitrary keys in controlled mode.
|
||||
- [ ] Implement node ID preservation and deterministic IDs only for first import; later saves persist IDs.
|
||||
- [ ] Implement directives for repeat rows, controlled fields, page breaks, and signature placeholders without expression evaluation.
|
||||
- [ ] Run `go test ./markdown -count=1` and commit.
|
||||
|
||||
### Task 5: Implement the Word adapter and validation pipeline
|
||||
|
||||
**Files:**
|
||||
- Create: `Agent-Document-Renderer/word/adapter.go`
|
||||
- Create: `Agent-Document-Renderer/word/opc.go`
|
||||
- Create: `Agent-Document-Renderer/word/styles.go`
|
||||
- Create: `Agent-Document-Renderer/word/mappings.go`
|
||||
- Create: `Agent-Document-Renderer/word/tables.go`
|
||||
- Create: `Agent-Document-Renderer/word/headers.go`
|
||||
- Create: `Agent-Document-Renderer/word/validate.go`
|
||||
- Test: `Agent-Document-Renderer/word/*_test.go`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: validated render request and declared package assets.
|
||||
- Produces: deterministic DOCX bytes, node anchor map, diagnostics, and output hash.
|
||||
|
||||
- [ ] Write a minimal valid-DOCX RED test asserting content, style, numbering, bookmark, header, footer, page field, image and table output.
|
||||
- [ ] Implement safe OPC cloning with entry-count and expanded-size limits.
|
||||
- [ ] Implement semantic styles and numbering without inline style duplication.
|
||||
- [ ] Implement exact template anchors, repeated table rows, merged cells, section/page configuration and fixed assets.
|
||||
- [ ] Implement post-render validation: OPC relationships, XML parse, missing anchors, forbidden objects, external links, macros and round-trip text structure.
|
||||
- [ ] Run `go test ./word -count=1 -race` and commit.
|
||||
|
||||
### Task 6: Add review changes, comments, and dual Word output
|
||||
|
||||
**Files:**
|
||||
- Create: `Agent-Document-Renderer/word/revisions.go`
|
||||
- Create: `Agent-Document-Renderer/word/comments.go`
|
||||
- Create: `Agent-Document-Renderer/word/approval.go`
|
||||
- Test: `Agent-Document-Renderer/word/review_test.go`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: `ReviewSnapshot`, node/range anchors and mode `working|preview|review|approved`.
|
||||
- Produces: clean approved DOCX or revision/comment-preserving review DOCX.
|
||||
|
||||
- [ ] Write failing tests for insert/delete/replace, comment ranges, replies, stale ranges, deleted nodes and real actor/time metadata.
|
||||
- [ ] Implement `w:ins`, `w:del`, comments parts, relationships and tracking settings.
|
||||
- [ ] Implement orphan-comment appendix instead of incorrect reattachment.
|
||||
- [ ] Implement approved mode that accepts approved revisions, removes ordinary comments and fills signatures only from ApprovalSnapshot.
|
||||
- [ ] Assert that accepting all revisions in the review file yields the approved document text.
|
||||
- [ ] Run `go test ./word -run 'TestReview|TestApproval' -count=1` and commit.
|
||||
|
||||
### Task 7: Publish the company default profile
|
||||
|
||||
**Files:**
|
||||
- Create: `Agent-Document-Renderer/profiles/company-default/1.0.0/profile.yaml`
|
||||
- Create: `Agent-Document-Renderer/profiles/company-default/1.0.0/assets.json`
|
||||
- Create: `Agent-Document-Renderer/profiles/company-default/1.0.0/review.json`
|
||||
- Test: `Agent-Document-Renderer/profiles/company_default_test.go`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: approved CorporateStyleInventory decisions and versioned Logo/font assets.
|
||||
- Produces: first organization-default published profile.
|
||||
|
||||
- [ ] Convert only approved common findings into the profile; keep template exceptions out.
|
||||
- [ ] Render a report containing all supported node types and a 30-page pagination fixture.
|
||||
- [ ] Compare page settings, styles, headers, footers, Logo and file-control fields with approved reference values.
|
||||
- [ ] Run accessibility/readability and DOCX validation checks.
|
||||
- [ ] Commit the profile and exact visual-review receipt.
|
||||
|
||||
### Task 8: Convert all 44 DHF assets into profiles and remove dictionary blocks
|
||||
|
||||
**Files:**
|
||||
- Create: `Agent-System-RDM/internal/rdmapp/templates/dhf/profiles/<template-id>/1.0.0/profile.json` (44 packages)
|
||||
- Modify: `Agent-System-RDM/internal/domain/data/labels_seed.json`
|
||||
- Create: `Agent-System-RDM/internal/domain/store/dictionary_renderer_migration.go`
|
||||
- Create: `Agent-System-RDM/scripts/generate-render-profiles.py`
|
||||
- Test: `Agent-System-RDM/internal/rdmapp/dhf_render_profiles_test.go`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: published DHF packages and CorporateStyleInventory.
|
||||
- Produces: 44 exact profiles and versioned dictionary migration for the two blocked types.
|
||||
|
||||
- [ ] Write a RED matrix requiring 44 unique profiles, exact package hashes and applicable document types.
|
||||
- [ ] Generate profile candidates; do not infer unverified Logo/font/style values.
|
||||
- [ ] Add explicit template-exception sections and human review records.
|
||||
- [ ] Implement dictionary migration for fresh and existing SQLite/PostgreSQL databases with rollback tests.
|
||||
- [ ] Run the 44-document normal/negative render matrix; require 44 PASS and 0 BLOCKED/FAIL.
|
||||
- [ ] Commit generated profiles separately from human review decisions.
|
||||
|
||||
### Task 9: Integrate rendering with RDM documents, reviews, and traceability
|
||||
|
||||
**Files:**
|
||||
- Create: `Agent-System-RDM/internal/rdmapp/render_profile.go`
|
||||
- Create: `Agent-System-RDM/internal/rdmapp/render_request.go`
|
||||
- Create: `Agent-System-RDM/internal/rdmapp/document_source.go`
|
||||
- Create: `Agent-System-RDM/internal/rdmapp/render_delivery.go`
|
||||
- Modify: `Agent-System-RDM/plugins/rdm/plugin.go`
|
||||
- Test: `Agent-System-RDM/internal/rdmapp/render_delivery_test.go`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: Markdown content version, exact profile snapshot, review snapshot and current permissions.
|
||||
- Produces: persisted Markdown, preview/review/approved DOCX, manifest, diagnostics and trace edges.
|
||||
|
||||
- [ ] Add migrations for source versions, profile bindings, render jobs, delivery manifests and blobs.
|
||||
- [ ] Write RED tests for selection precedence, controlled fallback refusal, stale rules, revocation, retry and rollback.
|
||||
- [ ] Implement project-authorized transactions that freeze inputs before rendering and commit outputs atomically.
|
||||
- [ ] Create Word bookmarks/content controls for every rendered document-tree node and persist the anchor map.
|
||||
- [ ] Add commands for validate, preview, submit, review export, approve export, status and download.
|
||||
- [ ] Run SQLite/PostgreSQL restart, concurrency and migration tests; commit.
|
||||
|
||||
### Task 10: Replace the separate Backend Markdown Word path
|
||||
|
||||
**Files:**
|
||||
- Modify: `Agent-System-Backend/internal/docgen/`
|
||||
- Modify: `Agent-System-Backend/internal/prompts/library/base-deliverables.md`
|
||||
- Modify: `Agent-System-Backend/internal/skills/recipes/house-style/`
|
||||
- Test: `Agent-System-Backend/internal/docgen/renderer_integration_test.go`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: shared renderer module and organization-default profile.
|
||||
- Produces: workspace Markdown plus DOCX and manifest artifacts through the same renderer contract.
|
||||
|
||||
- [ ] Write a RED test proving the existing Markdown deliverable produces the same canonical nodes through the new entry.
|
||||
- [ ] Route ordinary Word generation through the shared renderer; retain old path only behind a migration comparison flag.
|
||||
- [ ] Ensure project controlled documents call RDM and cannot use Backend default fallback.
|
||||
- [ ] Compare old/new samples and close documented differences before removing the old path.
|
||||
- [ ] Run Backend `go test ./...` and `go build ./...`; commit.
|
||||
|
||||
### Task 11: Add profile selection, preview, review, and download UI
|
||||
|
||||
**Files:**
|
||||
- Create: `Agent-System-Frontend/src/components/DocumentRenderWorkspace.tsx`
|
||||
- Create: `Agent-System-Frontend/src/documentRenderPresentation.ts`
|
||||
- Modify: document reader/tree and artifact download components
|
||||
- Test: `Agent-System-Frontend/test/document-render-workspace.test.ts`
|
||||
- Test: `Agent-System-Frontend/e2e/document-renderer.playwright.ts`
|
||||
|
||||
**Interfaces:**
|
||||
- Consumes: server-cropped profile, render status, diagnostics, review and delivery DTOs.
|
||||
- Produces: profile choice, preview status, readable failures and Markdown/approved/review/package downloads.
|
||||
|
||||
- [ ] Add component tests for four-level rule selection, controlled fallback refusal, long diagnostics and stale async responses.
|
||||
- [ ] Build the two document-tree views already approved: structure canvas and traditional reader, sharing selected node and filters.
|
||||
- [ ] Show source, confidence, conflict, author/time, change before/after and impact on each readable node.
|
||||
- [ ] Add review comments and revision display without exposing raw OOXML or private sources.
|
||||
- [ ] Run design guards, all frontend tests, build, knip and real-product Playwright; commit.
|
||||
|
||||
### Task 12: Reserve uploaded-template analysis without auto-publication
|
||||
|
||||
**Files:**
|
||||
- Create: `Agent-Document-Renderer/analyzer/report.go`
|
||||
- Create: `Agent-Document-Renderer/analyzer/candidate.go`
|
||||
- Create: `Agent-System-RDM/internal/rdmapp/render_profile_candidate.go`
|
||||
- Test: candidate lifecycle tests
|
||||
|
||||
**Interfaces:**
|
||||
- Produces only draft profile candidates, analysis reports and previews; no publish method is exposed to the analyzer.
|
||||
|
||||
- [ ] Define typed findings for styles, structures, assets, unsafe parts, confidence and unresolved items.
|
||||
- [ ] Persist candidate/report/original hashes and require an administrator publication command.
|
||||
- [ ] Add negative tests proving candidate analysis cannot execute content or publish itself.
|
||||
- [ ] Commit the dormant contract and lifecycle; defer automated rule inference implementation.
|
||||
|
||||
### Task 13: Complete full acceptance and delivery evidence
|
||||
|
||||
**Files:**
|
||||
- Update: RDM/Backend/Frontend task cards
|
||||
- Create: `Agent-System-RDM/docs/records/renderer/phase1-acceptance.md`
|
||||
- Create: machine-readable 44-template and browser receipts
|
||||
|
||||
- [ ] Run renderer module tests and race checks.
|
||||
- [ ] Run RDM full test/build, isolated PostgreSQL tests and 44-profile product matrix.
|
||||
- [ ] Run Backend full test/build and Markdown/DOCX artifact verification.
|
||||
- [ ] Run Frontend full test/build/design guard/knip and real-product Playwright in light/dark/narrow layouts.
|
||||
- [ ] Reopen representative DOCX files with Word-compatible tooling and verify text, styles, headers, comments, revisions and signatures.
|
||||
- [ ] Perform independent review against this spec and resolve all Critical/Important findings.
|
||||
- [ ] Fix the exact candidate SHAs and record SELF/GATE/REPLAY sources honestly before any PR or merge.
|
||||
@@ -0,0 +1,120 @@
|
||||
# 10 测试与验收计划
|
||||
|
||||
## 1. 验收层级
|
||||
|
||||
| 层级 | 目的 |
|
||||
|---|---|
|
||||
| Schema | 规则、模型、清单和迁移的确定性及兼容性 |
|
||||
| Renderer unit | Markdown 节点到 Word 原语的正确映射 |
|
||||
| DOCX integrity | OPC、XML、关系、样式、字段、锚点、批注和修订 |
|
||||
| RDM integration | 权限、冻结提交、审签、交付物和追溯原子性 |
|
||||
| Template fidelity | 44 份模板逐份内容与格式对照 |
|
||||
| Browser | 规则选择、预览、审阅、下载和错误体验 |
|
||||
| Security/privacy | 恶意规则、恶意 DOCX、撤权和私域泄露 |
|
||||
| Recovery | SQLite/PG 重启、并发、失败和迁移回滚 |
|
||||
|
||||
## 2. RenderProfile 测试
|
||||
|
||||
- 未知字段、schema、primitive 或 capability 拒绝。
|
||||
- 脚本、宏、任意 XML、外链、绝对路径和父目录拒绝。
|
||||
- 资产缺失、哈希失配和重复锚点拒绝。
|
||||
- 受控文档 `allowDefaultFallback=true` 拒绝发布。
|
||||
- 继承展开后快照确定,父规则修改不改变已发布子规则。
|
||||
- 同 ID/版本不同字节冲突,同字节重放幂等。
|
||||
|
||||
## 3. Markdown 与统一模型
|
||||
|
||||
- 标题、段落、列表、表格、图片、引用、警示和签署节点。
|
||||
- 稳定 ID、重复 ID、深度/节点数/文本长度上限。
|
||||
- 无效 UTF-8、HTML、危险链接和未知指令。
|
||||
- 来源范围、置信度、冲突和权限标签保留。
|
||||
- 修改 Markdown 后节点身份和批注锚点保持或明确漂移。
|
||||
|
||||
## 4. Word 基础能力
|
||||
|
||||
- 页面、分节、方向、页边距和分页。
|
||||
- 语义样式、标题编号、目录和列表。
|
||||
- 表格列宽、合并、重复表头、重复行和跨页。
|
||||
- 图片、题注、Logo 和替代说明。
|
||||
- 页眉、页脚、PAGE/NUMPAGES、文件控制字段。
|
||||
- 节点书签/内容控件及反向映射。
|
||||
- 生成后 ZIP/OPC/XML/关系/回读和哈希验证。
|
||||
|
||||
## 5. 审阅与批准
|
||||
|
||||
- 插入、删除、替换和移动修订。
|
||||
- 批注范围、回复、解决、拒绝和孤立批注。
|
||||
- Word 作者、时间与系统快照一致。
|
||||
- 审阅稿接受全部修订后的正文等于批准稿。
|
||||
- 批准稿不含普通批注、未接受修订或私人来源。
|
||||
- 无真实审核/批准记录时阻止批准稿。
|
||||
- 相同冻结提交重试返回同一交付物。
|
||||
|
||||
## 6. 44 份模板矩阵
|
||||
|
||||
每份模板至少包含:
|
||||
|
||||
- 一个完整正常样例。
|
||||
- 一个缺必填字段样例。
|
||||
- 一个超长或多行内容样例。
|
||||
- 一个表格/重复块样例(适用时)。
|
||||
- 页眉页脚和文件控制字段检查。
|
||||
- Logo/图片/形状检查(适用时)。
|
||||
- 原件、规范化件、规则、输出和回读哈希。
|
||||
- 人工视觉结论及例外说明。
|
||||
|
||||
总门槛:44 PASS、0 EXPECTED_BLOCKED、0 LIMITED、0 FAIL。
|
||||
|
||||
## 7. 公司通用规则
|
||||
|
||||
使用会议纪要、分析报告、技术说明、周报和无专用类型的自由报告验证。检查长标题、中文/英文混排、多页表格、图片、目录、页眉页脚和下载清单。
|
||||
|
||||
## 8. 权限矩阵
|
||||
|
||||
- 项目创建者、普通成员、编制人、审阅人、批准人、管理员。
|
||||
- `doc.read/write/publish`、`review.participate`、`project.settings`、`audit.read` 交叉。
|
||||
- 私人来源、共享项目事实、受控正文和批注分别裁剪。
|
||||
- 撤权发生在解析前、渲染中、提交前和下载前。
|
||||
- 另一个项目或成员不能通过 ID、缓存、历史 URL、审阅稿或 DOCX 隐藏内容读取数据。
|
||||
|
||||
## 9. 安全矩阵
|
||||
|
||||
- 带宏、ActiveX、OLE、外链和远程模板的 DOCX。
|
||||
- ZIP bomb、重复名称、路径穿越、超大图片和深 XML。
|
||||
- 规则中的脚本、任意 OOXML、远程资产和表达式注入。
|
||||
- Markdown 中的 HTML、危险 URI 和超限结构。
|
||||
- 输出 DOCX 不含宏、外部关系、无权自定义属性或隐藏文本。
|
||||
|
||||
## 10. 数据库与恢复
|
||||
|
||||
SQLite 与隔离 PostgreSQL 均覆盖:
|
||||
|
||||
- 规则注册、发布、退役和选择。
|
||||
- 内容/规则/审签冻结。
|
||||
- 渲染成功、失败、超时和取消。
|
||||
- 同键重试、异参冲突和两实例竞争。
|
||||
- 生成中撤权和规则退役。
|
||||
- 迁移中断、回滚、备份恢复和旧二进制拒绝。
|
||||
- 批准字节在重启和规则升级后不变。
|
||||
|
||||
## 11. 浏览器验收
|
||||
|
||||
真实产品、auth-on、至少两个项目和三种职责:
|
||||
|
||||
1. 文档树选择结构画布和传统阅读器。
|
||||
2. 选择专用规则与公司通用规则。
|
||||
3. 查看规则来源、版本和禁止回退说明。
|
||||
4. 生成预览并定位诊断到具体节点。
|
||||
5. 添加批注和修订,完成审阅与批准。
|
||||
6. 下载 Markdown、批准稿、留痕稿和完整包。
|
||||
7. 查看追溯网中的来源、规则、修订、审签和交付物。
|
||||
8. 无权限用户的页面与网络响应均无受限内容。
|
||||
9. 浅色、深色、窄屏、长文档和长文件名可用。
|
||||
|
||||
## 12. 性能和容量
|
||||
|
||||
记录而非预设通过:10/50/100/300 页等价内容,1/10/50 MB 图片集,100/1,000/5,000 节点,100/1,000 批注。分别测解析、编译、渲染、校验、保存和下载时间及峰值内存。容量阈值根据实测和产品要求另行评审,不用无证据数字放行。
|
||||
|
||||
## 13. 证据要求
|
||||
|
||||
每项通过断言绑定命令、完整对象 SHA、组件 pin、配置、输出和来源等级。SELF 本地记录不能冒充 CI/GATE;浏览器截图不能替代网络权限断言;能够打开 DOCX 不能替代格式保真或审签真实性。
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
# 11 需求追踪与评审清单
|
||||
|
||||
## 1. 使用方式
|
||||
|
||||
本表把本轮用户要求映射到设计文档、实施任务和验收证据。评审通过表示同意需求和方案边界,不表示代码已实现、测试已通过或系统已部署。实施后只有附带命令、对象 SHA 和完整输出的证据才能把状态从 `DESIGNED` 更新为 `IMPLEMENTED`、`VERIFIED` 或 `ACCEPTED`。
|
||||
|
||||
## 2. 需求追踪矩阵
|
||||
|
||||
| ID | 用户结果要求 | 设计位置 | 实施任务 | 主要验收 | 当前状态 |
|
||||
|---|---|---|---|---|---|
|
||||
| RDR-01 | Markdown 作为权威源,可同时下载 Markdown 和 Word | 01 §2/5.2;02 §2.1 | 2、4、9、10 | 10 §3/11 | DESIGNED |
|
||||
| RDR-02 | 一个渲染器按规则生成多种文档,不为每种文档复制代码 | 02 §1–2;03 | 2、3、5 | 10 §2/4 | DESIGNED |
|
||||
| RDR-03 | 文档可选择专用规则,未指定时使用公司默认规则 | 01 §5.1;03 §3 | 3、7、9、11 | 10 §2/7/11 | DESIGNED |
|
||||
| RDR-04 | 受控文档失配时阻止生成,不能静默套默认样式 | 01 §5.1;02 §6 | 3、8、9 | 10 §2/6 | DESIGNED |
|
||||
| RDR-05 | 44 份现有模板全部接入并能正常生成 | 08 §1–4 | 1、8、13 | 10 §6 | DESIGNED |
|
||||
| RDR-06 | 归纳公司页面、字体、标题、表格、页眉页脚和 Logo 规范 | 04 §2–4 | 1、7 | 10 §6–7 | DESIGNED;具体值待普查评审 |
|
||||
| RDR-07 | 每份文档可配置渲染方式,规则版本化且无需改代码扩展 | 03 §2–10 | 3、7、8 | 10 §2 | DESIGNED |
|
||||
| RDR-08 | Word 第一阶段完成,后续同架构扩展 PDF/PPT | 01 §3;02 §7 | 2、5;后续适配器 | 公共接口兼容测试 | DESIGNED;PDF/PPT NOT_RUN |
|
||||
| RDR-09 | 用户上传参考文档后可分析生成候选规则 | 05 §8;07 §3;08 §6 | 12 | 候选生命周期与恶意输入测试 | CONTRACT_ONLY |
|
||||
| RDR-10 | 支持修订模式、批注、回复和真实审签信息 | 06 | 6、9、11 | 10 §5/11 | DESIGNED |
|
||||
| RDR-11 | 默认交付干净批准稿和审阅留痕稿 | 05 §5;06 §7 | 6、9 | 10 §5 | DESIGNED |
|
||||
| RDR-12 | 渲染结果进入文档树、笔记树和追溯网 | 01 §1/5.3;02 §2.5;05 §2 | 2、4、9 | 10 §3/9/11 | DESIGNED |
|
||||
| RDR-13 | 文档树支持结构画布和传统阅读器两种视图 | 09 Task 11 | 11 | 10 §11 | DESIGNED |
|
||||
| RDR-14 | 页面展示来源、置信度、冲突、修改前后、影响、人物和时间 | 07 §6;09 Task 11 | 9、11 | 10 §8/11 | DESIGNED |
|
||||
| RDR-15 | 追溯网和审计受权限保护,个人流程图/思维导图保持私域 | 07 §1/4/7 | 9、11 | 10 §8–9 | DESIGNED |
|
||||
| RDR-16 | 规则、模板、资产和输出可重放且旧批准文件不被覆盖 | 02 §5;03 §10;05 §6 | 3、7–9 | 10 §2/10/13 | DESIGNED |
|
||||
| RDR-17 | 规则与上传文件不能执行脚本、宏、外链或任意 XML | 03 §1;07 §2–3 | 3、5、12 | 10 §2/9 | DESIGNED |
|
||||
|
||||
## 3. 阶段评审点
|
||||
|
||||
### A. 需求与范围
|
||||
|
||||
- [ ] 确认第一阶段以 DOCX 为唯一生产格式。
|
||||
- [ ] 确认 44/44 全链通过是完成条件,两份字典阻塞不能作为例外保留。
|
||||
- [ ] 确认上传参考文档只生成候选规则,本阶段只保留合同和安全边界。
|
||||
|
||||
### B. 架构与模块边界
|
||||
|
||||
- [ ] 确认采用独立 `Agent-Document-Renderer` 模块;或记录选择内嵌包的替代决定及独立化条件。
|
||||
- [ ] 确认 RDM 负责权限、冻结、审签和追溯,渲染器不反查项目数据库。
|
||||
- [ ] 确认 Backend 普通交付与 RDM 受控交付最终共用同一渲染合同。
|
||||
|
||||
### C. 规则与公司设计
|
||||
|
||||
- [ ] 确认规则为声明式数据,发布后不可原地修改。
|
||||
- [ ] 确认先完成 44 份视觉普查,再发布字体、字号、Logo、颜色等具体公司值。
|
||||
- [ ] 确认专用模板例外优先,但必须登记证据和适用范围。
|
||||
|
||||
### D. 审阅、权限和交付
|
||||
|
||||
- [ ] 确认批准稿与审阅留痕稿双 Word 默认交付。
|
||||
- [ ] 确认审签身份只来自冻结的可信流程记录。
|
||||
- [ ] 确认追溯网和审计仍按对象权限加审计权裁剪,个人解释图不进入项目共享面。
|
||||
|
||||
## 4. 实施放行条件
|
||||
|
||||
评审通过后,实施仍按项目交付策略分阶段启动。第一批只放行 Task 1–3:固定公司样式普查、统一模型和 RenderProfile 合同。第一批产物通过评审后再放行 Word 适配器与 44 模板迁移,避免在规则和模块边界未稳定时批量生成不可维护的配置。
|
||||
|
||||
每批实施必须记录:目标分支、基线 SHA、组件 pin、变更文件、测试命令、SELF/GATE/REPLAY 来源、未运行项、迁移与回滚边界。真实数据库迁移、部署和发布仍分别受各自门禁约束。
|
||||
@@ -0,0 +1,45 @@
|
||||
# 统一文档渲染器方案文档集
|
||||
|
||||
日期:2026-10-15。状态:设计与实施计划待人工评审。范围:第一阶段只实现 Word;PPT、PDF 作为同一架构的后续格式适配器,不在本阶段实施。
|
||||
|
||||
## 目标
|
||||
|
||||
建立一个由声明式规则驱动的统一文档渲染平台。智能体和成员以 Markdown 及结构化元数据维护内容,系统按文档实例、文档类型、项目或公司默认规则选择渲染配置,输出可下载、可审阅、可批准、可追溯的 DOCX。新增文档类型通过发布新的规则包和受控资产完成,不需要为每种文档编写独立渲染器。
|
||||
|
||||
## 文档导航
|
||||
|
||||
| 文档 | 用途 |
|
||||
|---|---|
|
||||
| [01 需求与范围](01-requirements-and-scope.md) | 产品目标、角色、范围、验收口径和非目标 |
|
||||
| [02 总体架构与方案](02-architecture-and-solution.md) | 统一文档模型、渲染内核、格式适配器及系统边界 |
|
||||
| [03 渲染规则规范](03-render-profile-spec.md) | RenderProfile、规则选择、版本和声明式安全边界 |
|
||||
| [04 公司 Word 设计规范](04-corporate-word-design-standard.md) | 页面、字体、标题、表格、页眉页脚、Logo、编号和例外规则 |
|
||||
| [05 生命周期与流程](05-lifecycle-and-workflows.md) | 起草、预览、审阅、批准、导出、升级及回滚流程 |
|
||||
| [06 修订、批注与审签](06-review-comments-approval.md) | Word 审阅模式、批注、回复、修订与双 Word 交付 |
|
||||
| [07 权限、安全与审计](07-security-permissions-audit.md) | 私域、项目权限、资产安全、审计及防伪造要求 |
|
||||
| [08 模板接入与迁移](08-template-onboarding-and-migration.md) | 44 份模板接入、字典门禁清零及未来上传模板生成规则 |
|
||||
| [09 实施计划](09-implementation-plan.md) | 可执行的分阶段任务、接口、文件、测试和提交边界 |
|
||||
| [10 测试与验收计划](10-test-and-acceptance-plan.md) | 单元、保真、迁移、浏览器、权限及全模板验收矩阵 |
|
||||
| [11 需求追踪与评审清单](11-traceability-and-review-checklist.md) | 用户要求、设计、实施任务、验收证据和待评审决策的逐项对应 |
|
||||
|
||||
`document-manifest.json` 固定本次评审文档的文件名、大小和 SHA256。评审意见导致任一正文变化时,必须重新生成清单,旧清单不得继续作为相同评审对象。
|
||||
|
||||
## 当前事实基线
|
||||
|
||||
- DHF 目录登记 44 份已发布模板,其中 30 份原生 DOCX、14 份旧 DOC 的受控转换链。
|
||||
- 41/44 含页眉或页脚部件。
|
||||
- 40 份存在文件名称、文件号、版本等控制字段;现已登记 78 个页眉/页脚槽位。
|
||||
- 企业机密声明及 PAGE/NUMPAGES 域属于固定内容,不是项目可填写槽位。
|
||||
- 当前逐项产品链为 42 PASS、2 EXPECTED_BLOCKED、0 FAIL;两份阻塞来自字典登记/迁移边界,第一阶段必须清零后才能声明 44/44 可生成。
|
||||
- 当前 RDM 已有冻结模板槽位填充能力,Backend 已有独立 `house-style` Markdown→DOCX 工具;两者尚未共享统一文档模型和 RenderProfile 合同。
|
||||
|
||||
以上为当前工作分支源码和既有 SELF 记录中的事实基线,不代表部署环境验收或 CI/GATE 结论。44 份视觉共性仍须按 [04 公司 Word 设计规范](04-corporate-word-design-standard.md)执行逐模板普查。
|
||||
|
||||
## 统一原则
|
||||
|
||||
1. Markdown 是可编辑的权威内容源,DOCX 是由确切规则版本生成的交付物。
|
||||
2. 一个渲染内核消费多个规则包;不得为每个文档类型复制渲染器代码。
|
||||
3. 受控文档指定规则失配时阻止生成,不静默回退公司默认规则。
|
||||
4. 发布规则不可原地修改;新规则生成新版本,旧文档继续绑定旧版本。
|
||||
5. 审核、批准、签署和批注作者只能来自系统可信身份及真实流程。
|
||||
6. 原件、规则、Markdown、输出文件和清单均保留哈希与追溯关系。
|
||||
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"schemaVersion": "document-review-manifest/v1",
|
||||
"documentSet": "unified-document-renderer",
|
||||
"reviewDate": "2026-10-15",
|
||||
"status": "pending-human-review",
|
||||
"files": [
|
||||
{
|
||||
"path": "01-requirements-and-scope.md",
|
||||
"bytes": 4847,
|
||||
"sha256": "c2c5ae8ca3e6ad657de59ba0338cee8e9c4115fc4e189be6e14803a5954fc913"
|
||||
},
|
||||
{
|
||||
"path": "02-architecture-and-solution.md",
|
||||
"bytes": 5216,
|
||||
"sha256": "5b5bdad20ff88c3114b448385706a0ddcc82f5ce68c27acbcbc82512c10d16e2"
|
||||
},
|
||||
{
|
||||
"path": "03-render-profile-spec.md",
|
||||
"bytes": 4241,
|
||||
"sha256": "5c896649851de88d7c7ff48a2eb5bd7be70e7c6b12bb26858da126605ac0aa13"
|
||||
},
|
||||
{
|
||||
"path": "04-corporate-word-design-standard.md",
|
||||
"bytes": 3563,
|
||||
"sha256": "3c4cfc36b01b80ec3ae2e48a42c96bc1e7aee97b5f5e614a498d484102b8236d"
|
||||
},
|
||||
{
|
||||
"path": "05-lifecycle-and-workflows.md",
|
||||
"bytes": 3681,
|
||||
"sha256": "a3d8737a2af100c93af1efbdfec6193e06c7283978e5fc68d8a3d49c12959831"
|
||||
},
|
||||
{
|
||||
"path": "06-review-comments-approval.md",
|
||||
"bytes": 3262,
|
||||
"sha256": "8722f02e69b4664b3e13a56cafa70d12e170190df56c8b91b5564f42ed52e114"
|
||||
},
|
||||
{
|
||||
"path": "07-security-permissions-audit.md",
|
||||
"bytes": 3268,
|
||||
"sha256": "b48406b8d9d9a6eb3faf7caaf8be64fdae10b0f49f937cfe81e29114832d6923"
|
||||
},
|
||||
{
|
||||
"path": "08-template-onboarding-and-migration.md",
|
||||
"bytes": 2867,
|
||||
"sha256": "c8f8add79ab2979b23bb0e701e8a6b71d5a015988fdeedd02677236b7145b404"
|
||||
},
|
||||
{
|
||||
"path": "09-implementation-plan.md",
|
||||
"bytes": 17660,
|
||||
"sha256": "731aca8fabc919a0130e6b75258401401b50b34f91ef36c008029f61733d97b5"
|
||||
},
|
||||
{
|
||||
"path": "10-test-and-acceptance-plan.md",
|
||||
"bytes": 5327,
|
||||
"sha256": "0e14dd940e70bd53730fd4255acdb569dacbe6cba37d23efb0ab4b9419e63304"
|
||||
},
|
||||
{
|
||||
"path": "11-traceability-and-review-checklist.md",
|
||||
"bytes": 4632,
|
||||
"sha256": "ef898cfbd58d12288946aecb731ccf0d4821ee669830c6ea4d209062788b4d0a"
|
||||
},
|
||||
{
|
||||
"path": "README.md",
|
||||
"bytes": 3907,
|
||||
"sha256": "05ed7f9ba727f1ba854dc38ca32b881dd0ee91de882d683f781c60fcca061970"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user