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

Merged
weichen merged 37 commits from feature/rdm-two-trees-latest-templates into main 2026-10-19 07:51:30 +00:00
3 changed files with 92 additions and 7 deletions
Showing only changes of commit 748f923b77 - Show all commits
@@ -1,7 +1,7 @@
# 最新模板驱动的两树一网、成员工作上下文与完整可读审计
修订:r5;更新时间:2026-10-14T11:28:55.318650+08:00;需求负责人:用户;记录/准备:Codex。
当前阶段:**阶段5实施与测试计划r1已批准;阶段6按增量实施与自检**。manual逐阶段评审。E1保真判据未通过;业务实现及运行验收NOT_RUN。
修订:r6;更新时间:2026-10-14T15:39:40+08:00;需求负责人:用户;记录/准备:Codex。
当前阶段:**阶段5实施与测试计划r1已批准;阶段6按增量实施与自检**。manual逐阶段评审。组件本地实现和隔离测试已开展;增量A及全目标尚未完成,正式运行验收NOT_RUN,E1保真判据仍未通过。
## 目标与成功标准
@@ -42,7 +42,7 @@
2. 两树一网:资料切片、结论、递归文档节点、项目阶段/主题/工作事项扩展、结构提案与确认、稳定ID、CAS/幂等/原子事件/重放、受控版本关系和直接/间接影响。
3. 工作上下文:普通工作自动取得当前项目任务要求、已确认结论、授权共享资料和可读正文;固定实际依据和版本,预算内渐进读取,撤权/恢复/切换时刷新;不以手动@knowledge代替。
4. 审计/显示:成功事件与失败尝试区分,时间/人物/操作/内容前后/来源/结果/影响及实际任务关联完整;人可读摘要、字段差异、对象路径、影响清单、筛选、完整归组/历史及权限内证据跳转。
5. 验证:全部28项到当前对象证据;44模板对照、并发/失败/重启/撤权、两项目两成员真实模型与浏览器、精确pins/当前HEAD CI。所有业务验证目前NOT_RUN。
5. 验证:全部28项到当前对象证据;44模板对照、并发/失败/重启/撤权、两项目两成员真实模型与浏览器、精确pins/当前HEAD CI。组件局部SELF和提前独立审阅已有记录;全目标真实模型/浏览器、阶段7正式验收及当前HEAD CI仍为NOT_RUN。
RDM保有领域、schema/事件与业务权限;Backend仅补必要通用公开能力,Frontend/UI消费已授权的读契约和既有设计系统。新增扩展仍须四要素提案,不能导入Backend internal、改写pins内容、绕过IAM或以管理员身份取得业务正文。团队存储架构替换、线上数据操作、部署及tag发布未纳入本阶段授权。
@@ -63,11 +63,13 @@ RDM保有领域、schema/事件与业务权限;Backend仅补必要通用公开
| 3需求表 | r1用户通过 | 全部28项的优先级、依赖、条件和验证方法,明确E1剩余风险 |
| 4方案 | r1用户通过 | 方案SHA256 `568aa26f6b2276f786109e2298b3ae36c6c14d3be5a54e0dfc95bf1b2db4603b`;全部28项映射 |
| 5实施/测试计划 | r1用户通过 | W0–W13、28项映射、44资产和模型预算;SHA256 `b755ef629fae37854b8d0bc344b3f14c6933e4455be74244b9821a6d71b64ebe`;放行阶段6本地实施与隔离测试 |
| 6实施 | 增量A进行中,W0及组件局部代码已提交但未合入 | W0局部SELF通过;W2保留并发RED,W6撤权缺陷修复中,W9跨成员消费未完成;各增量完成后人审 |
| 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机械来源守护当前Dev本地HEAD `38ef548637f426e2e36c33a50ae6b8af8c9da453`,16项SELF定向测试及44项实际目录核对通过;只证明来源身份,0项已发布。W2项目字典保留并发/回滚失败测试,关键顺序修订待评审;W6基座上下文及W9基座审计在独立分支迭代。DHF原工作区owner继续U2–U6并在其任务卡引用本计划;本任务不覆盖其脏现场。阶段6增量A形成后提交人工评审。
当前按已批准阶段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验收仍须完整满足。
当前未决项:E1的保真差异和49字符未定位片段;44份资产逐项语义/格式人工裁定;基座X1/X2真实公开发版、旧数据兼容实测和正式模型/浏览器环境。E1结果是SELF探索证据;局部代码测试不能代替真实模型/浏览器、阶段7验收、当前HEAD CI、合入或部署,这些仍为NOT_RUN。
本轮修订不改阶段1/2原对象字节,不把试验执行成功记为保真通过。已在隔离工作区提交局部代码并执行测试;原DOC/DOCX、真实运行库与服务保持原状。E1临时环境和唯一成果仍保留,尚未执行清理。
@@ -91,8 +93,9 @@ RDM保有领域、schema/事件与业务权限;Backend仅补必要通用公开
- [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`。
## 阶段6受影响设计待评审
## 阶段6受影响设计及决定
- [领域时间持久化与历史缺项修订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的最低写版本门禁;旧缺项保持历史兼容投影并明确来源。**待人工确认,不授权生产时间/迁移语义变更**;已批准的读取隔离继续。 固定评审对象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`。旧重放时间漂移另列未决,不由复制方案冒充已修。
@@ -15,6 +15,7 @@
- [X2跨成员审计可信链接设计修订r1](rdm-two-trees-stage6-audit-link-design-adjustment-r1.md):用户已批准受影响公开合同,原对象保留评审前状态。
- [W2/W4关键依赖顺序修订r1](rdm-two-trees-stage6-w2-w4-sequence-adjustment-r1.md):用户已批准W4a先行,原对象保留评审前状态。
- [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后的数据合同草稿,待人工评审;旧历史不补造,生产时间语义尚未更改。
- [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仍待修复和验证。
@@ -29,4 +30,4 @@
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份转换成功,完整保真未通过;原件未改变。业务实现、真实模型/浏览器、正式验收和部署仍未执行。此机器绝对路径只定位当前保存材料,不表示已在远端发布或可在其他机器直接取得。
E1已按批准范围执行,全部原始产物及完整收据留源码外:[报告与逐文件结果](/home/weichen/.codex/visualizations/2026/10/13/01a13639-7c7c-7f20-aece-a3937edf6229/e1-20261014-091421/REPORT-r1.md)。14份转换成功,完整保真未通过;原件未改变。组件本地实现及隔离自检已开展,真实模型/浏览器、正式验收和部署仍未执行;各项当前结论见主记录。此机器绝对路径只定位当前保存材料,不表示已在远端发布或可在其他机器直接取得。
@@ -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、合入、真实迁移与部署仍按原门禁。