# Abort-Safe Incremental JSONL Persistence Rule

**Rule:** Persist state using an *append-only, fsync-backed JSONL log with atomic checkpoints*.

**Requirements**
- Write updates as **single-line JSON objects** (one logical mutation per line).
- **Append only** (`O_APPEND`), never modify existing lines.
- After each write batch, call **`fsync`** (or `File::sync_data`) before reporting success.
- Treat a **line as committed only if it ends with `\n`**; ignore trailing partial lines on recovery.
- Periodically create a **checkpoint**:
  - Write full state to `state.tmp`
  - `fsync`
  - **Atomic rename** to `state.jsonl`
- On startup:
  - Load last checkpoint
  - Replay log lines after it in order
- On abort/panic/crash:
  - No truncation
  - Replay guarantees no data loss beyond last fsynced line

**Outcome**
- Crash/abort-safe
- O(1) writes
- Deterministic recovery
- Minimal overhead
