FA-591 / Replication / Open access
Apply an anti-entropy repair range: Compared digests describe different snapshot generations · case 01
The anti entropy repair operation is admitted even though compared digests describe different snapshot generations.
ROOT CAUSE
The admission path omits the merkle generation invariant while validating the other operation preconditions.
VERIFIED REPAIR
Require r['merkle_generation'][0] == r['merkle_generation'][1] together with every other stated precondition before accepting the operation.
Unsuccessful approach: Adding the merkle generation check repairs the reported defect, but replacing the adjacent range complete check loses that independent invariant.
Case contract
Return a Boolean admission decision for apply an anti-entropy repair range. The record r must satisfy all of: all(r['range_ownership'][0] <= x < r['range_ownership'][1] for x in r['range_ownership'][2]); r['version_monotonic'][0] >= r['version_monotonic'][1]; r['tombstone_horizon'][0] >= r['tombstone_horizon'][1]; r['merkle_generation'][0] == r['merkle_generation'][1]; r['range_complete'][0] == r['range_complete'][1]. Extra tracing fields are ignored; validation does not mutate the record.
Why this case matters
A deterministic local contract for replication. Each negative fixture violates exactly one invariant. No transport timing, persistence, cryptographic verification, or full protocol implementation is claimed.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(r):
return (all(r['range_ownership'][0] <= x < r['range_ownership'][1] for x in r['range_ownership'][2])) and (r['version_monotonic'][0] >= r['version_monotonic'][1]) and (r['tombstone_horizon'][0] >= r['tombstone_horizon'][1]) and (r['range_complete'][0] == r['range_complete'][1])
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
r = {'range_ownership': [10, 20, [10, 19]], 'version_monotonic': [7, 6], 'tombstone_horizon': [20, 20], 'merkle_generation': [8, 8], 'range_complete': [100, 100]}
check('valid operation', solve(r), True)
check('A repair writes keys outside the receiver owned range', solve(dict(r, **{'range_ownership': [10, 20, [9, 19]]})), False)
check('Repair overwrites a record with an older revision', solve(dict(r, **{'version_monotonic': [5, 6]})), False)
check('A deletion marker is dropped before repair safety horizon', solve(dict(r, **{'tombstone_horizon': [19, 20]})), False)
check('Compared digests describe different snapshot generations', solve(dict(r, **{'merkle_generation': [7, 8]})), False)
check('A partial range response is marked fully repaired', solve(dict(r, **{'range_complete': [80, 100]})), False)
check('unrelated tracing metadata', solve(dict(r, trace='run-'+str(N))), True)
check('repeat validation is pure', solve(r), True)
invalid = {'range_ownership': [10, 20, [9, 19]], 'version_monotonic': [5, 6], 'tombstone_horizon': [19, 20], 'merkle_generation': [7, 8], 'range_complete': [80, 100]}
keys = list(invalid)
pair = {keys[N % len(keys)]: invalid[keys[N % len(keys)]], keys[(N+1) % len(keys)]: invalid[keys[(N+1) % len(keys)]]}
check('two independent violations in variant', solve(dict(r, **pair)), False)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| valid operation | True | True | Passed |
| A repair writes keys outside the receiver owned range | False | False | Passed |
| Repair overwrites a record with an older revision | False | False | Passed |
| A deletion marker is dropped before repair safety horizon | False | False | Passed |
| Compared digests describe different snapshot generations | True | False | Failed |
| A partial range response is marked fully repaired | False | False | Passed |
| unrelated tracing metadata | True | True | Passed |
| repeat validation is pure | True | True | Passed |
| two independent violations in variant | False | False | Passed |
SHA-256 / 851890b26dfae1434250329b7576418758f6ee469683962746317d3748513dcf
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(r):
return (all(r['range_ownership'][0] <= x < r['range_ownership'][1] for x in r['range_ownership'][2])) and (r['version_monotonic'][0] >= r['version_monotonic'][1]) and (r['tombstone_horizon'][0] >= r['tombstone_horizon'][1]) and (r['merkle_generation'][0] == r['merkle_generation'][1])
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
r = {'range_ownership': [10, 20, [10, 19]], 'version_monotonic': [7, 6], 'tombstone_horizon': [20, 20], 'merkle_generation': [8, 8], 'range_complete': [100, 100]}
check('valid operation', solve(r), True)
check('A repair writes keys outside the receiver owned range', solve(dict(r, **{'range_ownership': [10, 20, [9, 19]]})), False)
check('Repair overwrites a record with an older revision', solve(dict(r, **{'version_monotonic': [5, 6]})), False)
check('A deletion marker is dropped before repair safety horizon', solve(dict(r, **{'tombstone_horizon': [19, 20]})), False)
check('Compared digests describe different snapshot generations', solve(dict(r, **{'merkle_generation': [7, 8]})), False)
check('A partial range response is marked fully repaired', solve(dict(r, **{'range_complete': [80, 100]})), False)
check('unrelated tracing metadata', solve(dict(r, trace='run-'+str(N))), True)
check('repeat validation is pure', solve(r), True)
invalid = {'range_ownership': [10, 20, [9, 19]], 'version_monotonic': [5, 6], 'tombstone_horizon': [19, 20], 'merkle_generation': [7, 8], 'range_complete': [80, 100]}
keys = list(invalid)
pair = {keys[N % len(keys)]: invalid[keys[N % len(keys)]], keys[(N+1) % len(keys)]: invalid[keys[(N+1) % len(keys)]]}
check('two independent violations in variant', solve(dict(r, **pair)), False)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| valid operation | True | True | Passed |
| A repair writes keys outside the receiver owned range | False | False | Passed |
| Repair overwrites a record with an older revision | False | False | Passed |
| A deletion marker is dropped before repair safety horizon | False | False | Passed |
| Compared digests describe different snapshot generations | False | False | Passed |
| A partial range response is marked fully repaired | True | False | Failed |
| unrelated tracing metadata | True | True | Passed |
| repeat validation is pure | True | True | Passed |
| two independent violations in variant | False | False | Passed |
SHA-256 / 140c822d03f7681299b96ab45ec809707b753eb850aae4896f62658d180651c9
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(r):
return (all(r['range_ownership'][0] <= x < r['range_ownership'][1] for x in r['range_ownership'][2])) and (r['version_monotonic'][0] >= r['version_monotonic'][1]) and (r['tombstone_horizon'][0] >= r['tombstone_horizon'][1]) and (r['merkle_generation'][0] == r['merkle_generation'][1]) and (r['range_complete'][0] == r['range_complete'][1])
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
r = {'range_ownership': [10, 20, [10, 19]], 'version_monotonic': [7, 6], 'tombstone_horizon': [20, 20], 'merkle_generation': [8, 8], 'range_complete': [100, 100]}
check('valid operation', solve(r), True)
check('A repair writes keys outside the receiver owned range', solve(dict(r, **{'range_ownership': [10, 20, [9, 19]]})), False)
check('Repair overwrites a record with an older revision', solve(dict(r, **{'version_monotonic': [5, 6]})), False)
check('A deletion marker is dropped before repair safety horizon', solve(dict(r, **{'tombstone_horizon': [19, 20]})), False)
check('Compared digests describe different snapshot generations', solve(dict(r, **{'merkle_generation': [7, 8]})), False)
check('A partial range response is marked fully repaired', solve(dict(r, **{'range_complete': [80, 100]})), False)
check('unrelated tracing metadata', solve(dict(r, trace='run-'+str(N))), True)
check('repeat validation is pure', solve(r), True)
invalid = {'range_ownership': [10, 20, [9, 19]], 'version_monotonic': [5, 6], 'tombstone_horizon': [19, 20], 'merkle_generation': [7, 8], 'range_complete': [80, 100]}
keys = list(invalid)
pair = {keys[N % len(keys)]: invalid[keys[N % len(keys)]], keys[(N+1) % len(keys)]: invalid[keys[(N+1) % len(keys)]]}
check('two independent violations in variant', solve(dict(r, **pair)), False)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| valid operation | True | True | Passed |
| A repair writes keys outside the receiver owned range | False | False | Passed |
| Repair overwrites a record with an older revision | False | False | Passed |
| A deletion marker is dropped before repair safety horizon | False | False | Passed |
| Compared digests describe different snapshot generations | False | False | Passed |
| A partial range response is marked fully repaired | False | False | Passed |
| unrelated tracing metadata | True | True | Passed |
| repeat validation is pure | True | True | Passed |
| two independent violations in variant | False | False | Passed |
SHA-256 / 09ce6c3188d2db387b3f9a90778fba35d021dffcd6fd28d38e4e675e4c7b41be
Verification & scope
This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:36:54.245655+00:00.
Case digest / 58fabe21526a581e6647d703b2cfa807a277fdd91bab0cf2c7bd893bc6b406dc