Skip to main content

Module fact_log

Module fact_log 

Source
Expand description

Fact log 读写(JSONL 格式)

§格式

每行一个 Fact 的 JSON 序列化,使用 evorule_reactor::wal::fact_to_json/fact_from_json 进行转换。格式与 tier1 reactor WAL 文件、tier2 auditor stable JSON 一致:

{"type":"Command","id":1,"instruction":{"type":"noop"}}
{"type":"StateTransition","id":2,"cause":1,"new_payload":{},"new_queue":[]}
{"type":"Stable","id":3,"final_snapshot":{}}

§设计决策

不使用 FactsLog::with_wal(那是为长驻反应器设计的 Arc<RwLock> + WAL writer), CLI 是 one-shot 执行,用 Vec<Fact> + 顺序写更简单。但序列化格式必须用 tier1 wal, 保证与 tier1 reactor WAL 文件格式互换,与 tier2 auditor 哈希链互通。

§不变量

  • write_facts 必须用 evorule_reactor::wal::fact_to_json,不能手写序列化
  • read_facts 必须用 evorule_reactor::wal::fact_from_json,不能手写反序列化
  • 这样 fact.log 可被 tier1 reactor read_wal 直接读取,反之亦然

Functions§

read_facts
从 JSONL 文件读取 Fact 列表
write_facts
将 Fact 列表写为 JSONL(每行一个 Fact)