Skip to content

ADR 0003: Checkpoint-Owned Restore

Status

Accepted.

Context

Checkpoint restore was previously modeled as simulation initialization. That made replay look like seed content and required engine-level replay payloads in action_events.jsonl.

Decision

Checkpoint restore belongs under sim.checkpoint, not sim.initialization.simulation.

Users provide a prior output directory with sim.checkpoint.source_run and a restore strategy with sim.checkpoint.restore. Restore selects the latest checkpoint, initializes runtime scaffolding, and then applies checkpointed object state. Built-in agents, Game Masters, components, and local backends use get_state() / set_state() for that restore. The native social replay strategy remains available for source runs that do not carry backend state; it rebuilds backend actions through GameMaster.resolve_action.

action_events.jsonl remains a backend-domain log. The engine does not emit separate replay payloads.

Consequences

  • Restore behavior is explicit and checkpoint-owned.
  • Simulation initialization remains reserved for application startup content, such as seed posts.
  • Backends can make restore robust by keeping durable world state behind their own get_state() / set_state() hooks.