{"id":"btree-mutation-fsync-is-asymmetric","text":"B-tree mutations pay double fsync costs for user data (WAL entry + data page) but skip fsync entirely for structural metadata, creating an asymmetry where key-value pairs survive crashes but the free-page list and allocation state may not.","truth_value":"OUT","source":"","source_url":"","source_hash":"","justifications":[{"type":"SL","antecedents":["btree-double-fsync-per-mutation","btree-single-file-avoids-dir-fsync-gap","write-meta-no-fsync"],"outlist":[],"label":"User data gets two fsyncs per mutation while metadata gets zero — a durability asymmetry hidden from callers"}],"dependents":["btree-durability-protects-data-not-structure","fsync-policy-inconsistent-across-critical-paths"],"metadata":{"last_reviewed":"2026-05-30T09:01:17","review_result":"unnecessary"},"created_at":"","updated_at":"","reviewed_at":"","verified_at":"","retracted_at":"","explanation":{"steps":[{"node":"btree-mutation-fsync-is-asymmetric","truth_value":"OUT","reason":"SL justification invalid","failed_antecedents":["write-meta-no-fsync"],"label":"User data gets two fsyncs per mutation while metadata gets zero — a durability asymmetry hidden from callers"}]}}