修订追踪表
撤销一次错误修订而不删除审计历史
撤销作为反向修订而不是删除记录。 本文给出可复核步骤、状态边界、脱敏记录方法与复核路径。
撤销错误修订不是删除那一行,而是创建新的反向修订,说明哪个变化被否定、恢复什么值、依据何在以及哪些下游需要重算。删除会让历史页面和截图失去解释,也会掩盖错误影响持续了多久。反向事件保留原revision_id、当前版本和后续依赖。
目前没有真实撤销记录,所有例子为合成,当前状态UNKNOWN。把错误队名映射恢复为UNKNOWN只演示reversal_id。没有撤销依据时可提出候选,但不能改当前值。若原修订之后又有合法变更,系统必须先分析依赖,不能直接恢复最初旧值。撤销的语义可能是“恢复旧值”“清空为UNKNOWN”“采用第四个新值”或“仅撤回来源信任”,因此reversal_action需要明确类型。来源被撤回不一定证明值错误,只会降低证据状态;业务值是否保留由规则和替代材料决定。反向修订也可能失败,例如旧实体已拆分、字段类型变更或当前版本有并发更新,失败记录不应触发手工数据库修改。历史链应支持时间点查询:给定某日,页面能重现当时有效值和已知限制。统计重算使用新版本,但旧报表保留输入指纹,防止数字无解释变化。对公开文章,更正提示连接旧版本、反向事件和当前版本;搜索摘要缓存需要同步清除。撤销审批关注影响与证据,不奖励快速关闭。安全事件要求紧急隐藏某值时,可以先阻止展示,再走完整反向流程;临时隐藏不删除业务历史。若证据最终仍冲突,恢复UNKNOWN是诚实结果,不被视为流程失败。
确认目标修订仍处于哪种状态
撤销前读取target_revision、field_path、old_value、new_value、执行版本和当前业务值。若当前值不等于目标修订结果,说明已有后续变化,反向操作进入冲突分析。分析器同时列出从目标值衍生的计算、实体映射、文章片段、搜索文档与缓存版本,并标注哪些可自动重算、哪些需人工合并。预览采用当前字段模式验证旧值,模式不兼容时只允许新候选或UNKNOWN;紧急隐藏另走可见性事件,不能伪装成事实撤销。
目标修订可能已撤回或仅是提议,状态不同决定动作。提议取消不产生业务反向值,但保留取消事件。找不到目标行时reversal_target为UNKNOWN,禁止执行。
- 撤销前核当前业务值
- 区分已执行与提议状态
- 目标缺失禁止执行
保存撤销原因和新证据
reversal_reason区分来源被更正、实体映射错误、规则实现错误、审批失误和证据撤回。每类附source_ref、观察时间和说明。口头请求不足以改变数据。
撤销不一定恢复最旧值。新证据可能要求设UNKNOWN或第三个值。restore_value与证据精度匹配。没有明确恢复值时保持提议,页面标原修订有争议。
- 撤销原因使用受控类别
- 恢复值必须由新证据支持
- 无恢复依据保持提议
展开后续依赖和衍生结果
依赖图列后续字段修订、队伍映射、文章、统计、索引和缓存。某后续修订以错误值为输入,并不一定全部无效,需要逐项复核。系统不自动回滚整条记录。
影响未知的自定义输出标UNKNOWN并阻止执行。预览显示恢复后哪些关系校验变化。审批者确认范围后,每个受影响字段生成自己的反向或重算任务。
- 后续依赖逐项展开
- 不自动回滚整条记录
- 未知影响阻止高风险执行
以新修订表达反向变化
反向行拥有独立revision_id并指向reverses;old_value是当前值,new_value是恢复值,执行方式与普通修订相同,包含校验、复核和原子写入。原错误行不修改内容。
多字段批次撤销仍生成逐字段行,用reversal_batch连接。成功、跳过、冲突和失败分别记录。部分撤销时原批次显示受影响范围,不用一个“已撤销”掩盖剩余行。反向批次完成后按原行逐一核账,后来已有合法修订的记录应保持冲突态,绝不能被批量覆盖。
- 反向变化采用新revision_id
- 原错误行保持不变
- 批次撤销逐字段记录
重新校验并重建下游
恢复值写入后运行字段、关系和来源校验,再重建文章、统计、索引和缓存。每项保存使用版本和结果。若恢复导致新冲突,业务状态转UNKNOWN而非强制完成。
旧页面快照仍引用错误版本,当前页面引用反向后的版本。更正说明连接二者。缓存重建失败时标待同步,不手工隐藏。所有结果总数需守恒。反向任务逐个列出统计、搜索、文章和接口消费者的重建状态,任何旧值残留都形成可追踪缺陷。再次修订时从当前版本继续,不篡改原撤销事件。
- 恢复后重跑全部相关校验
- 新冲突转UNKNOWN
- 页面版本连接更正说明
验证历史链没有断裂
审阅者从当前值反向走到reversal、原revision、来源和旧值,再从原revision正向看到影响与恢复。每个节点有时间和状态。任何断链建立缺陷,不跳到相似记录。
导出历史时保留顺序和指针,不能只给最终值。权限受限的证据显示受限状态。删除请求影响原证据时,相应结论降级并保留删除事件,不伪装证据仍可访问。反向演练需覆盖恢复旧值、退回UNKNOWN、采用新候选和仅撤回证据四种动作。每种动作都在已有后续修订、并发审批和模式升级条件下运行,确认版本锁与依赖分析会安全停止。执行后对文章、统计、接口、索引和缓存逐项核账;临时隐藏事件不得篡改业务值。时间点查询分别用有效时间和记录时间重现结果,证明历史不是事后改写。
- 历史支持正反双向追踪
- 导出保留事件指针
- 证据删除同步降级
公开撤销而不抹去错误
页面说明被撤字段、错误修订时间、恢复值、原因类别、影响范围、反向时间和未决项。内部个人资料不公开。读者可以解释旧截图为何不同。
撤销先锁定revision_id与当时的record_version,再枚举后来依赖它的修订、聚合、文章、搜索文档和缓存。分析器将动作分为可直接反向、需要人工合并、只能退回UNKNOWN和不可安全执行,不能假设旧值仍符合当前模式。reversal_request保存触发依据、目标动作、期望版本、替代证据、影响清单与紧急级别,并重新通过现行字段和关系规则。若撤回的只是某份来源信任,而业务值仍有独立证据支持,可以保留值但重算evidence_set;若旧值与后续合法变化冲突,只能选择新候选或UNKNOWN,不能绕过版本锁。紧急隐藏使用独立visibility_event,暂停公开展示却不改事实历史。反向修订与新业务版本提交后,统计、页面、索引和缓存用幂等任务更新。时间点查询同时使用有效时间与记录时间,既说明过去页面显示什么,也说明团队何时知道它有误。测试覆盖单一步撤销、连续两次修订、分支依赖、规则模式升级、并发审批、来源撤回但值仍有其他证据和撤销后再次修改。每个案例分别进行“当时看到什么”与“何时确认错误”的双时间查询。后续变化继续追加事件,不能通过删除中间行获得看似干净的历史。双时间查询还要覆盖撤销发生前生成但后来才缓存的页面,确保记录时间与有效时间不会因异步任务顺序互相替代。
- 公开页列错误与恢复时间
- 旧错误不从历史删除
- 撤回中间修订后,当前值可反查全部事件,原修订可正查文章、统计、搜索、结构化字段与缓存;恢复UNKNOWN和紧急隐藏均保留中性时间线


