ハッシュ連鎖(event sourcing)
すべての判断・ゲート評価・実行は、追記専用(append-only)のイベントとして記録されます。各イベントは前イベントのハッシュを内包し、鎖を成します。
event = { seq, ts, kind, payload, prev_hash, hash }
hash = SHA-256( prev_hash + canonical(body) )
hash = SHA-256( prev_hash + canonical(body) )
どこか1箇所でも改竄すると、それ以降のハッシュがすべて食い違い、鎖が破断します。だから tamper-evident(改竄が必ず露見する)。
検証とリプレイ
verify():先頭から鎖を再計算。1イベントでも改竄されていればFalsereplay(reducer, initial):記録済みイベント列を畳み込み、最終状態を再構成(タイムトラベル監査)
# audit.py — 鎖の検証
def verify(self):
prev = GENESIS
for e in self._events:
body = {k: e[k] for k in _BODY_KEYS}
if e["prev_hash"] != prev or e["hash"] != _hash(prev, body):
return False
prev = e["hash"]
return True
再現可能な判断
これが「再現可能な判断」を技術的に裏付けます。同じグラフ・同じトレース・同じポリシーなら、同じ最終状態に到達する。だからコンサル商品としても、「なぜその判断をしたか」を改竄不能な形で説明できます。
実証ページでは、24イベントの鎖が
verify()=True となり、1バイト改竄後に verify()=False(改竄検出成功)になることを実出力で示しています。