世界历史
状态:今天已在线上运行。Realm
R-WHIST-*保存着"发生过什么"的永久记录。
世界历史是一个世界里只能追加、不能改写的事实记录。每条记录都必须带溯源信息。Replay 运行只能读历史,不能往里写;只有会改变真相的运行才能追加。出了错要修正时,做法是用新记录替代旧记录或标记作废,永远不会悄悄删除。
关于状态与历史的逐项对照(每种 effectClass 下两个表面各自何时更新),见状态与历史。
仅限追加
| 属性 | 规范 |
|---|---|
| 数据存储 | Realm R-WHIST-* |
| 可变性 | 强制仅限追加 |
| 执行类型 | REPLAY(禁止追加)/ CANON_MUTATION(允许追加) |
| 溯源要求 | 每条记录强制登记出处 |
| 修正方式 | 仅支持显性替代或打标废止;禁止物理删除 |
"仅限追加"是审计信誉的基石。消费方必须能信任:历史记录反映的是原始事实,而非篡改后的产物。
执行模式
| 执行模式 | 能否追加历史 | 用途 |
|---|---|---|
REPLAY | 否 | 重新演算和验证已发生的事件 |
CANON_MUTATION | 是 | 提交真实的状态变动 |
Replay 能读取历史、生成视图、演算结果,但写入被完全阻断。只有 Canon-mutation 才能追加数据。这种结构隔离确保 Replay 成为中立的审计工具。
溯源
每条历史记录都带强制溯源:执行者、时间、证据。这是系统级强约束——缺少溯源的数据在提交阶段就会被拦截。
| 字段 | 用途 |
|---|---|
| Actor | 执行动作的主体 |
| Time | 事件发生的时间戳 |
| Evidence refs | 支撑该动作的证据链接 |
| Schema version | 数据结构版本 |
| Source | 触发记录的来源(扩展 App、系统守护进程等) |
缺少溯源的记录会在准入校验时被驳回。系统不接受匿名记录。
修正流程
当创作者或系统需要修正历史记录时,必须走规范的修正路径:
| 修正类型 | 系统行为 |
|---|---|
| 替代 | 推入新记录宣告旧版本作废;旧记录保留在时间轴中 |
| 废止 | 对特定记录打失效标记;原始实体不可删除 |
系统禁止的操作:静默物理删除。已提交的历史记录无法被删除。审计人员总能检索到:"此记录曾被提交,随后因原因 X 被声明作废或替代"。
读者场景:一条错误记录被修正
某条历史记录被错误提交,比如系统缺陷把动作归到了错误的参与者名下。
- 原始记录已存在。错误的归因已经进入历史。
- 发起修正。创作者工具提交一条替代记录。
- 两条记录并存。历史中同时保留原始记录(已被替代)和修正记录。
- 读者看到脉络。查询历史的读者能看到完整时间线:原始记录,随后被修正记录替代。
原始记录不会被删除。修正本身是独立的强类型事件,带有自己的溯源。
读者场景:一次审计 Replay
审计人员想弄清楚某段时间内到底发生了什么,比如追查一次具体事故。
- 启动 Replay。在强类型准入下读取历史记录。
- 重建过程。Replay 重建状态变迁、事件和视图的完整链条。
- 只读不写。Replay 不会向历史追加任何内容。
- 得到结果。审计人员拿到一份结构化的重建结果。
Replay 之所以是可靠的审计工具,是因为结构上就不允许它追加。不存在"审计改动了历史"的顾虑。
读者场景:拦截缺少溯源的记录
某越权 App 试图向系统塞入一条没有溯源的历史记录。
- 准入关卡激活。Realm 内核按规范历史结构进行校验。
- 缺失溯源曝光。校验逻辑发现该记录缺少必填的出处信息。
- 指令阻截。操作被安全熔断,返回阻断回执。
- 返回强类型错误。App 收到明确报警:"Missing provenance (溯源缺失)"及故障代号。
系统不存在"尽力接纳"的妥协。缺少来源的记录会被拒之门外。
与真相和状态的关系
历史、真相、状态共同构成世界观模型的三个支柱。
| 问题 | 解答者 |
|---|---|
| 什么是被认定为真的事实? | 真相 |
| 这个世界此刻是什么样? | 状态 |
| 这个世界是怎么走到现在的? | 历史 |
试图把三者混在一起的接口会静默丢失核心信息。历史回答"怎么来的",不代办"是什么"或"现在如何"。