FAILURE MAP
← Case archive

FA-491 / Consensus / Open access

Promise a proposal ballot: The response omits an already accepted value · case 01

The acceptor prepare operation is admitted even though the response omits an already accepted value.

Verified by executionVariant 1 · 9 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The admission path omits the accepted attached invariant while validating the other operation preconditions.

VERIFIED REPAIR

Require r['accepted_attached'][0] is None or r['accepted_attached'][1] == r['accepted_attached'][0] together with every other stated precondition before accepting the operation.

Unsuccessful approach: Adding the accepted attached check repairs the reported defect, but replacing the adjacent configuration epoch check loses that independent invariant.

Case contract

Return a Boolean admission decision for promise a proposal ballot. The record r must satisfy all of: tuple(r['ballot_floor'][0]) >= tuple(r['ballot_floor'][1]); r['slot_scope'][0] == r['slot_scope'][1]; r['promise_durable'] is True; r['accepted_attached'][0] is None or r['accepted_attached'][1] == r['accepted_attached'][0]; r['configuration_epoch'][0] == r['configuration_epoch'][1]. Extra tracing fields are ignored; validation does not mutate the record.

Why this case matters

A deterministic local contract for consensus. 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 (tuple(r['ballot_floor'][0]) >= tuple(r['ballot_floor'][1])) and (r['slot_scope'][0] == r['slot_scope'][1]) and (r['promise_durable'] is True) and (r['configuration_epoch'][0] == r['configuration_epoch'][1])
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
r = {'ballot_floor': [[5, 2], [5, 1]], 'slot_scope': ['s1', 's1'], 'promise_durable': True, 'accepted_attached': ['chosen', 'chosen'], 'configuration_epoch': [3, 3]}
check('valid operation', solve(r), True)
check('An acceptor promises a ballot below its durable promise', solve(dict(r, **{'ballot_floor': [[4, 9], [5, 1]]})), False)
check('A prepare message targets a different consensus instance', solve(dict(r, **{'slot_scope': ['s2', 's1']})), False)
check('A promise response escapes before its durable write', solve(dict(r, **{'promise_durable': False})), False)
check('The response omits an already accepted value', solve(dict(r, **{'accepted_attached': ['chosen', None]})), False)
check('A prepare is counted under the wrong voting epoch', solve(dict(r, **{'configuration_epoch': [2, 3]})), False)
check('unrelated tracing metadata', solve(dict(r, trace='run-'+str(N))), True)
check('repeat validation is pure', solve(r), True)
invalid = {'ballot_floor': [[4, 9], [5, 1]], 'slot_scope': ['s2', 's1'], 'promise_durable': False, 'accepted_attached': ['chosen', None], 'configuration_epoch': [2, 3]}
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 fixtureActualExpectedOutcome
valid operationTrueTruePassed
An acceptor promises a ballot below its durable promiseFalseFalsePassed
A prepare message targets a different consensus instanceFalseFalsePassed
A promise response escapes before its durable writeFalseFalsePassed
The response omits an already accepted valueTrueFalseFailed
A prepare is counted under the wrong voting epochFalseFalsePassed
unrelated tracing metadataTrueTruePassed
repeat validation is pureTrueTruePassed
two independent violations in variantFalseFalsePassed

SHA-256 / 17a02dfce22218514699f5aff05e63bbde28cf9bb2c92af60a1e94ef5eacaa9b

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(r):
    return (tuple(r['ballot_floor'][0]) >= tuple(r['ballot_floor'][1])) and (r['slot_scope'][0] == r['slot_scope'][1]) and (r['promise_durable'] is True) and (r['accepted_attached'][0] is None or r['accepted_attached'][1] == r['accepted_attached'][0])
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
r = {'ballot_floor': [[5, 2], [5, 1]], 'slot_scope': ['s1', 's1'], 'promise_durable': True, 'accepted_attached': ['chosen', 'chosen'], 'configuration_epoch': [3, 3]}
check('valid operation', solve(r), True)
check('An acceptor promises a ballot below its durable promise', solve(dict(r, **{'ballot_floor': [[4, 9], [5, 1]]})), False)
check('A prepare message targets a different consensus instance', solve(dict(r, **{'slot_scope': ['s2', 's1']})), False)
check('A promise response escapes before its durable write', solve(dict(r, **{'promise_durable': False})), False)
check('The response omits an already accepted value', solve(dict(r, **{'accepted_attached': ['chosen', None]})), False)
check('A prepare is counted under the wrong voting epoch', solve(dict(r, **{'configuration_epoch': [2, 3]})), False)
check('unrelated tracing metadata', solve(dict(r, trace='run-'+str(N))), True)
check('repeat validation is pure', solve(r), True)
invalid = {'ballot_floor': [[4, 9], [5, 1]], 'slot_scope': ['s2', 's1'], 'promise_durable': False, 'accepted_attached': ['chosen', None], 'configuration_epoch': [2, 3]}
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 fixtureActualExpectedOutcome
valid operationTrueTruePassed
An acceptor promises a ballot below its durable promiseFalseFalsePassed
A prepare message targets a different consensus instanceFalseFalsePassed
A promise response escapes before its durable writeFalseFalsePassed
The response omits an already accepted valueFalseFalsePassed
A prepare is counted under the wrong voting epochTrueFalseFailed
unrelated tracing metadataTrueTruePassed
repeat validation is pureTrueTruePassed
two independent violations in variantFalseFalsePassed

SHA-256 / 39ec2aaed18e786725c29ceea1dc8f4d530f9b8fa9edf5169830d12dc0420363

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(r):
    return (tuple(r['ballot_floor'][0]) >= tuple(r['ballot_floor'][1])) and (r['slot_scope'][0] == r['slot_scope'][1]) and (r['promise_durable'] is True) and (r['accepted_attached'][0] is None or r['accepted_attached'][1] == r['accepted_attached'][0]) and (r['configuration_epoch'][0] == r['configuration_epoch'][1])
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
r = {'ballot_floor': [[5, 2], [5, 1]], 'slot_scope': ['s1', 's1'], 'promise_durable': True, 'accepted_attached': ['chosen', 'chosen'], 'configuration_epoch': [3, 3]}
check('valid operation', solve(r), True)
check('An acceptor promises a ballot below its durable promise', solve(dict(r, **{'ballot_floor': [[4, 9], [5, 1]]})), False)
check('A prepare message targets a different consensus instance', solve(dict(r, **{'slot_scope': ['s2', 's1']})), False)
check('A promise response escapes before its durable write', solve(dict(r, **{'promise_durable': False})), False)
check('The response omits an already accepted value', solve(dict(r, **{'accepted_attached': ['chosen', None]})), False)
check('A prepare is counted under the wrong voting epoch', solve(dict(r, **{'configuration_epoch': [2, 3]})), False)
check('unrelated tracing metadata', solve(dict(r, trace='run-'+str(N))), True)
check('repeat validation is pure', solve(r), True)
invalid = {'ballot_floor': [[4, 9], [5, 1]], 'slot_scope': ['s2', 's1'], 'promise_durable': False, 'accepted_attached': ['chosen', None], 'configuration_epoch': [2, 3]}
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 fixtureActualExpectedOutcome
valid operationTrueTruePassed
An acceptor promises a ballot below its durable promiseFalseFalsePassed
A prepare message targets a different consensus instanceFalseFalsePassed
A promise response escapes before its durable writeFalseFalsePassed
The response omits an already accepted valueFalseFalsePassed
A prepare is counted under the wrong voting epochFalseFalsePassed
unrelated tracing metadataTrueTruePassed
repeat validation is pureTrueTruePassed
two independent violations in variantFalseFalsePassed

SHA-256 / 6fda7f5600af25833ae2df8b1d1264351e333deb380f24081686c0e68fc05297

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:53.608651+00:00.

Case digest / 8872c395f46640094f8587880c498e5a9e059b5277a9a7e2ae5980fb21d9aa5d