Invariants / DC-NODE-02

DC-NODE-02

DC derived enforced

Persistent-writer cadence fidelity: the orchestrator's persistent-snapshot writer calls PersistentSnapshotCache::capture only on the schedule emitted by the N-I SnapshotCadence policy. No orchestrator-side cadence override; no parallel cadence policy in the binary. Snapshot eviction is explicitly out of scope and is NOT an obligation of this rule (eviction is a storage concern, not node cadence fidelity).

Source

docs/planning/phase4-n-k-orchestrator-binary-invariants.md §1 (I-4)

Enforcement trace

Tests 5

  • crates/ade_runtime/src/rollback/persistent_writer.rs::tests::persistent_writer_on_admitted_captures_only_on_cadence
  • crates/ade_runtime/src/rollback/persistent_writer.rs::tests::persistent_writer_round_trips_via_framing
  • crates/ade_runtime/src/rollback/persistent_writer.rs::tests::persistent_writer_force_capture_skips_cadence_but_updates_state
  • crates/ade_runtime/src/rollback/persistent_writer.rs::tests::persistent_writer_two_runs_are_deterministic
  • crates/ade_runtime/src/orchestrator/core.rs::tests::step_admit_triggers_capture_snapshot_at_cadence

Cross-references

Strengthened in

Evidence notes

PHASE4-N-K S3 (2026-05-26) shipped PersistentSnapshotWriter that delegates every capture decision to should_snapshot_after_block (the SOLE cadence policy). The orchestrator core consults the same policy on Admitted (S2) and emits CaptureSnapshot effects only when the policy returns true. ci/ci_check_persistent_writer_no_parallel_cadence.sh greps for parallel cadence definitions across the workspace and for orchestrator-core inline modulo. Eviction is explicitly out of scope (no open_obligation carried).