mutation-pipeline-produces-consistent-state
OUT derived (depth 3)
Every mutation produces a fully consistent persisted network: atomic load/save ensures no partial writes, deterministic propagation ensures all truth values are correctly derived, and lifecycle-aware traversal prevents stale recomputations.
Summary
When both the atomic snapshot pipeline and safe propagation guarantees hold together, the system can promise that every change you make results in a fully correct and complete state on disk — no half-written data, no stale values, no incorrect derivations. This is currently marked as out because at least one of those underlying guarantees is not holding, meaning the system cannot currently make this strong consistency promise.
Justifications
SL — End-to-end mutation safety is contingent on the denormalized dependents index staying consistent and all dependent references being valid
Antecedents (all must be IN):
- mutation-pipeline-is-atomic-snapshot — Every network mutation follows an atomic snapshot pipeline: API context management ensures load/save atomicity with write-flag gating, while storage performs full-replace persistence — no partial state is ever visible between operations.
- propagation-is-safe-and-terminating — Truth propagation is both lifecycle-safe and guaranteed to terminate: retracted nodes are skipped, trigger nodes are never recomputed, BFS prevents stack overflow, and stop-on-unchanged prevents oscillation — propagation respects every node state it encounters.
Unless (any of these IN defeats this justification):
- dependents-index-is-fragile-denormalization — The dependents set is a manually-maintained denormalized reverse index that is never persisted and must be rebuilt on every load, creating a consistency obligation on all mutation paths
- propagate-assumes-dependents-exist — Every ID in `node.dependents` is accessed via `self.nodes[dep_id]` without a membership check; a dangling dependent reference will raise `KeyError` — this is intentional (broken invariant = bug)