FAILURE MAP
← Case archive

FA-24201 / Client state / Open access

Client offline mutation outbox: Ack removes by identity · case 01

Ack removes by identity.

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

ROOT CAUSE

The ack-removes-by-identity client decision evaluates `commands[1:]` instead of `[x for x in commands if x[0] not in acknowledged]`.

VERIFIED REPAIR

Apply the modeled ack-removes-by-identity rule: `[x for x in commands if x[0] not in acknowledged]`.

Unsuccessful approach: The partial repair `[x for x in commands if x[0] not in acknowledged][:1]` still violates the explicit fixture contract.

Case contract

The client outbox is an ordered UI mutation log; commands use identity, not payload truthiness. Cancellation/acknowledgment remove only matching commands, offline mode retains unsent work, and a zero send budget sends nothing. Operation ack-removes-by-identity has the six explicit input/output oracles below.

Why this case matters

An offline client lifecycle model that isolates a state-management defect without DOM rendering or network services.

1 / The failure

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

N = 1
observations = []
def solve(operation, s):
    commands, cancelled, acknowledged, online, limit = s
    if operation == 'cancel-preserves-other-commands':
        return [x for x in commands if x[0] not in cancelled]
    if operation == 'ack-removes-by-identity':
        return commands[1:]
    if operation == 'offline-send-suppression':
        return commands[:limit] if online else []
    if operation == 'effective-backlog':
        return sum(x[0] not in acknowledged and x[0] not in cancelled for x in commands)
    if operation == 'create-before-edit-order':
        return [x[0] for x in commands]
    if operation == 'destructive-command-warning':
        return [x[0] for x in commands if x[1]=='delete' and x[0] not in cancelled]
    if operation == 'unsent-tail-retention':
        return commands[limit:] if online else commands
    if operation == 'acknowledged-prefix-barrier':
        return next((i for i,x in enumerate(commands) if x[0] not in acknowledged),len(commands))
    if operation == 'zero-payload-retention':
        return [x[2] for x in commands if x[1]=='edit']
    if operation == 'cancel-request-intersection':
        return [x[0] for x in commands if x[0] in cancelled]
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('cancel-preserves-other-commands scenario 1', solve('cancel-preserves-other-commands', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [('a','create',N),('c','delete',0)])
check('cancel-preserves-other-commands scenario 2', solve('cancel-preserves-other-commands', ([],[],[],True,2)), [])
check('cancel-preserves-other-commands scenario 3', solve('cancel-preserves-other-commands', ([('a','edit',0)],[],[],False,1)), [('a','edit',0)])
check('cancel-preserves-other-commands scenario 4', solve('cancel-preserves-other-commands', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [('a','edit',1),('b','edit',2)])
check('cancel-preserves-other-commands scenario 5', solve('cancel-preserves-other-commands', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [('b','create',N)])
check('cancel-preserves-other-commands scenario 6', solve('cancel-preserves-other-commands', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [('a','create',1),('b','edit',2),('c','edit',3)])
check('ack-removes-by-identity scenario 1', solve('ack-removes-by-identity', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [('b','edit',2),('c','delete',0)])
check('ack-removes-by-identity scenario 2', solve('ack-removes-by-identity', ([],[],[],True,2)), [])
check('ack-removes-by-identity scenario 3', solve('ack-removes-by-identity', ([('a','edit',0)],[],[],False,1)), [('a','edit',0)])
check('ack-removes-by-identity scenario 4', solve('ack-removes-by-identity', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [('a','edit',1),('b','edit',2)])
check('ack-removes-by-identity scenario 5', solve('ack-removes-by-identity', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [('a','delete',0),('b','create',N)])
check('ack-removes-by-identity scenario 6', solve('ack-removes-by-identity', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [('a','create',1),('c','edit',3)])
check('offline-send-suppression scenario 1', solve('offline-send-suppression', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [('a','create',N),('b','edit',2)])
check('offline-send-suppression scenario 2', solve('offline-send-suppression', ([],[],[],True,2)), [])
check('offline-send-suppression scenario 3', solve('offline-send-suppression', ([('a','edit',0)],[],[],False,1)), [])
check('offline-send-suppression scenario 4', solve('offline-send-suppression', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [('a','edit',1)])
check('offline-send-suppression scenario 5', solve('offline-send-suppression', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [])
check('offline-send-suppression scenario 6', solve('offline-send-suppression', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [('a','create',1),('b','edit',2),('c','edit',3)])
check('effective-backlog scenario 1', solve('effective-backlog', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), 1)
check('effective-backlog scenario 2', solve('effective-backlog', ([],[],[],True,2)), 0)
check('effective-backlog scenario 3', solve('effective-backlog', ([('a','edit',0)],[],[],False,1)), 1)
check('effective-backlog scenario 4', solve('effective-backlog', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), 2)
check('effective-backlog scenario 5', solve('effective-backlog', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), 1)
check('effective-backlog scenario 6', solve('effective-backlog', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), 2)
check('create-before-edit-order scenario 1', solve('create-before-edit-order', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), ['a','b','c'])
check('create-before-edit-order scenario 2', solve('create-before-edit-order', ([],[],[],True,2)), [])
check('create-before-edit-order scenario 3', solve('create-before-edit-order', ([('a','edit',0)],[],[],False,1)), ['a'])
check('create-before-edit-order scenario 4', solve('create-before-edit-order', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), ['a','b'])
check('create-before-edit-order scenario 5', solve('create-before-edit-order', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), ['a','b'])
check('create-before-edit-order scenario 6', solve('create-before-edit-order', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), ['a','b','c'])
check('destructive-command-warning scenario 1', solve('destructive-command-warning', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), ['c'])
check('destructive-command-warning scenario 2', solve('destructive-command-warning', ([],[],[],True,2)), [])
check('destructive-command-warning scenario 3', solve('destructive-command-warning', ([('a','edit',0)],[],[],False,1)), [])
check('destructive-command-warning scenario 4', solve('destructive-command-warning', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [])
check('destructive-command-warning scenario 5', solve('destructive-command-warning', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [])
check('destructive-command-warning scenario 6', solve('destructive-command-warning', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [])
check('unsent-tail-retention scenario 1', solve('unsent-tail-retention', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [('c','delete',0)])
check('unsent-tail-retention scenario 2', solve('unsent-tail-retention', ([],[],[],True,2)), [])
check('unsent-tail-retention scenario 3', solve('unsent-tail-retention', ([('a','edit',0)],[],[],False,1)), [('a','edit',0)])
check('unsent-tail-retention scenario 4', solve('unsent-tail-retention', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [('b','edit',2)])
check('unsent-tail-retention scenario 5', solve('unsent-tail-retention', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [('a','delete',0),('b','create',N)])
check('unsent-tail-retention scenario 6', solve('unsent-tail-retention', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [])
check('acknowledged-prefix-barrier scenario 1', solve('acknowledged-prefix-barrier', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), 1)
check('acknowledged-prefix-barrier scenario 2', solve('acknowledged-prefix-barrier', ([],[],[],True,2)), 0)
check('acknowledged-prefix-barrier scenario 3', solve('acknowledged-prefix-barrier', ([('a','edit',0)],[],[],False,1)), 0)
check('acknowledged-prefix-barrier scenario 4', solve('acknowledged-prefix-barrier', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), 0)
check('acknowledged-prefix-barrier scenario 5', solve('acknowledged-prefix-barrier', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), 0)
check('acknowledged-prefix-barrier scenario 6', solve('acknowledged-prefix-barrier', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), 0)
check('zero-payload-retention scenario 1', solve('zero-payload-retention', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [2])
check('zero-payload-retention scenario 2', solve('zero-payload-retention', ([],[],[],True,2)), [])
check('zero-payload-retention scenario 3', solve('zero-payload-retention', ([('a','edit',0)],[],[],False,1)), [0])
check('zero-payload-retention scenario 4', solve('zero-payload-retention', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [1,2])
check('zero-payload-retention scenario 5', solve('zero-payload-retention', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [])
check('zero-payload-retention scenario 6', solve('zero-payload-retention', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [2,3])
check('cancel-request-intersection scenario 1', solve('cancel-request-intersection', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), ['b'])
check('cancel-request-intersection scenario 2', solve('cancel-request-intersection', ([],[],[],True,2)), [])
check('cancel-request-intersection scenario 3', solve('cancel-request-intersection', ([('a','edit',0)],[],[],False,1)), [])
check('cancel-request-intersection scenario 4', solve('cancel-request-intersection', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [])
check('cancel-request-intersection scenario 5', solve('cancel-request-intersection', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), ['a'])
check('cancel-request-intersection scenario 6', solve('cancel-request-intersection', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [])
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
cancel-preserves-other-commands scenario 1[['a', 'create', 1], ['c', 'delete', 0]][['a', 'create', 1], ['c', 'delete', 0]]Passed
cancel-preserves-other-commands scenario 2[][]Passed
cancel-preserves-other-commands scenario 3[['a', 'edit', 0]][['a', 'edit', 0]]Passed
cancel-preserves-other-commands scenario 4[['a', 'edit', 1], ['b', 'edit', 2]][['a', 'edit', 1], ['b', 'edit', 2]]Passed
cancel-preserves-other-commands scenario 5[['b', 'create', 1]][['b', 'create', 1]]Passed
cancel-preserves-other-commands scenario 6[['a', 'create', 1], ['b', 'edit', 2], ['c', 'edit', 3]][['a', 'create', 1], ['b', 'edit', 2], ['c', 'edit', 3]]Passed
ack-removes-by-identity scenario 1[['b', 'edit', 2], ['c', 'delete', 0]][['b', 'edit', 2], ['c', 'delete', 0]]Passed
ack-removes-by-identity scenario 2[][]Passed
ack-removes-by-identity scenario 3[][['a', 'edit', 0]]Failed
ack-removes-by-identity scenario 4[['b', 'edit', 2]][['a', 'edit', 1], ['b', 'edit', 2]]Failed
ack-removes-by-identity scenario 5[['b', 'create', 1]][['a', 'delete', 0], ['b', 'create', 1]]Failed
ack-removes-by-identity scenario 6[['b', 'edit', 2], ['c', 'edit', 3]][['a', 'create', 1], ['c', 'edit', 3]]Failed
offline-send-suppression scenario 1[['a', 'create', 1], ['b', 'edit', 2]][['a', 'create', 1], ['b', 'edit', 2]]Passed
offline-send-suppression scenario 2[][]Passed
offline-send-suppression scenario 3[][]Passed
offline-send-suppression scenario 4[['a', 'edit', 1]][['a', 'edit', 1]]Passed
offline-send-suppression scenario 5[][]Passed
offline-send-suppression scenario 6[['a', 'create', 1], ['b', 'edit', 2], ['c', 'edit', 3]][['a', 'create', 1], ['b', 'edit', 2], ['c', 'edit', 3]]Passed
effective-backlog scenario 111Passed
effective-backlog scenario 200Passed
effective-backlog scenario 311Passed
effective-backlog scenario 422Passed
effective-backlog scenario 511Passed
effective-backlog scenario 622Passed
create-before-edit-order scenario 1['a', 'b', 'c']['a', 'b', 'c']Passed
create-before-edit-order scenario 2[][]Passed
create-before-edit-order scenario 3['a']['a']Passed
create-before-edit-order scenario 4['a', 'b']['a', 'b']Passed
create-before-edit-order scenario 5['a', 'b']['a', 'b']Passed
create-before-edit-order scenario 6['a', 'b', 'c']['a', 'b', 'c']Passed
destructive-command-warning scenario 1['c']['c']Passed
destructive-command-warning scenario 2[][]Passed
destructive-command-warning scenario 3[][]Passed
destructive-command-warning scenario 4[][]Passed
destructive-command-warning scenario 5[][]Passed
destructive-command-warning scenario 6[][]Passed
unsent-tail-retention scenario 1[['c', 'delete', 0]][['c', 'delete', 0]]Passed
unsent-tail-retention scenario 2[][]Passed
unsent-tail-retention scenario 3[['a', 'edit', 0]][['a', 'edit', 0]]Passed
unsent-tail-retention scenario 4[['b', 'edit', 2]][['b', 'edit', 2]]Passed
unsent-tail-retention scenario 5[['a', 'delete', 0], ['b', 'create', 1]][['a', 'delete', 0], ['b', 'create', 1]]Passed
unsent-tail-retention scenario 6[][]Passed
acknowledged-prefix-barrier scenario 111Passed
acknowledged-prefix-barrier scenario 200Passed
acknowledged-prefix-barrier scenario 300Passed
acknowledged-prefix-barrier scenario 400Passed
acknowledged-prefix-barrier scenario 500Passed
acknowledged-prefix-barrier scenario 600Passed
zero-payload-retention scenario 1[2][2]Passed
zero-payload-retention scenario 2[][]Passed
zero-payload-retention scenario 3[0][0]Passed
zero-payload-retention scenario 4[1, 2][1, 2]Passed
zero-payload-retention scenario 5[][]Passed
zero-payload-retention scenario 6[2, 3][2, 3]Passed
cancel-request-intersection scenario 1['b']['b']Passed
cancel-request-intersection scenario 2[][]Passed
cancel-request-intersection scenario 3[][]Passed
cancel-request-intersection scenario 4[][]Passed
cancel-request-intersection scenario 5['a']['a']Passed
cancel-request-intersection scenario 6[][]Passed

SHA-256 / c4dad95c8f5ce256b66df7d42dc331906a3162a7e24455915e33807060597820

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(operation, s):
    commands, cancelled, acknowledged, online, limit = s
    if operation == 'cancel-preserves-other-commands':
        return [x for x in commands if x[0] not in cancelled]
    if operation == 'ack-removes-by-identity':
        return [x for x in commands if x[0] not in acknowledged][:1]
    if operation == 'offline-send-suppression':
        return commands[:limit] if online else []
    if operation == 'effective-backlog':
        return sum(x[0] not in acknowledged and x[0] not in cancelled for x in commands)
    if operation == 'create-before-edit-order':
        return [x[0] for x in commands]
    if operation == 'destructive-command-warning':
        return [x[0] for x in commands if x[1]=='delete' and x[0] not in cancelled]
    if operation == 'unsent-tail-retention':
        return commands[limit:] if online else commands
    if operation == 'acknowledged-prefix-barrier':
        return next((i for i,x in enumerate(commands) if x[0] not in acknowledged),len(commands))
    if operation == 'zero-payload-retention':
        return [x[2] for x in commands if x[1]=='edit']
    if operation == 'cancel-request-intersection':
        return [x[0] for x in commands if x[0] in cancelled]
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('cancel-preserves-other-commands scenario 1', solve('cancel-preserves-other-commands', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [('a','create',N),('c','delete',0)])
check('cancel-preserves-other-commands scenario 2', solve('cancel-preserves-other-commands', ([],[],[],True,2)), [])
check('cancel-preserves-other-commands scenario 3', solve('cancel-preserves-other-commands', ([('a','edit',0)],[],[],False,1)), [('a','edit',0)])
check('cancel-preserves-other-commands scenario 4', solve('cancel-preserves-other-commands', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [('a','edit',1),('b','edit',2)])
check('cancel-preserves-other-commands scenario 5', solve('cancel-preserves-other-commands', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [('b','create',N)])
check('cancel-preserves-other-commands scenario 6', solve('cancel-preserves-other-commands', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [('a','create',1),('b','edit',2),('c','edit',3)])
check('ack-removes-by-identity scenario 1', solve('ack-removes-by-identity', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [('b','edit',2),('c','delete',0)])
check('ack-removes-by-identity scenario 2', solve('ack-removes-by-identity', ([],[],[],True,2)), [])
check('ack-removes-by-identity scenario 3', solve('ack-removes-by-identity', ([('a','edit',0)],[],[],False,1)), [('a','edit',0)])
check('ack-removes-by-identity scenario 4', solve('ack-removes-by-identity', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [('a','edit',1),('b','edit',2)])
check('ack-removes-by-identity scenario 5', solve('ack-removes-by-identity', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [('a','delete',0),('b','create',N)])
check('ack-removes-by-identity scenario 6', solve('ack-removes-by-identity', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [('a','create',1),('c','edit',3)])
check('offline-send-suppression scenario 1', solve('offline-send-suppression', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [('a','create',N),('b','edit',2)])
check('offline-send-suppression scenario 2', solve('offline-send-suppression', ([],[],[],True,2)), [])
check('offline-send-suppression scenario 3', solve('offline-send-suppression', ([('a','edit',0)],[],[],False,1)), [])
check('offline-send-suppression scenario 4', solve('offline-send-suppression', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [('a','edit',1)])
check('offline-send-suppression scenario 5', solve('offline-send-suppression', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [])
check('offline-send-suppression scenario 6', solve('offline-send-suppression', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [('a','create',1),('b','edit',2),('c','edit',3)])
check('effective-backlog scenario 1', solve('effective-backlog', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), 1)
check('effective-backlog scenario 2', solve('effective-backlog', ([],[],[],True,2)), 0)
check('effective-backlog scenario 3', solve('effective-backlog', ([('a','edit',0)],[],[],False,1)), 1)
check('effective-backlog scenario 4', solve('effective-backlog', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), 2)
check('effective-backlog scenario 5', solve('effective-backlog', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), 1)
check('effective-backlog scenario 6', solve('effective-backlog', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), 2)
check('create-before-edit-order scenario 1', solve('create-before-edit-order', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), ['a','b','c'])
check('create-before-edit-order scenario 2', solve('create-before-edit-order', ([],[],[],True,2)), [])
check('create-before-edit-order scenario 3', solve('create-before-edit-order', ([('a','edit',0)],[],[],False,1)), ['a'])
check('create-before-edit-order scenario 4', solve('create-before-edit-order', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), ['a','b'])
check('create-before-edit-order scenario 5', solve('create-before-edit-order', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), ['a','b'])
check('create-before-edit-order scenario 6', solve('create-before-edit-order', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), ['a','b','c'])
check('destructive-command-warning scenario 1', solve('destructive-command-warning', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), ['c'])
check('destructive-command-warning scenario 2', solve('destructive-command-warning', ([],[],[],True,2)), [])
check('destructive-command-warning scenario 3', solve('destructive-command-warning', ([('a','edit',0)],[],[],False,1)), [])
check('destructive-command-warning scenario 4', solve('destructive-command-warning', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [])
check('destructive-command-warning scenario 5', solve('destructive-command-warning', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [])
check('destructive-command-warning scenario 6', solve('destructive-command-warning', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [])
check('unsent-tail-retention scenario 1', solve('unsent-tail-retention', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [('c','delete',0)])
check('unsent-tail-retention scenario 2', solve('unsent-tail-retention', ([],[],[],True,2)), [])
check('unsent-tail-retention scenario 3', solve('unsent-tail-retention', ([('a','edit',0)],[],[],False,1)), [('a','edit',0)])
check('unsent-tail-retention scenario 4', solve('unsent-tail-retention', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [('b','edit',2)])
check('unsent-tail-retention scenario 5', solve('unsent-tail-retention', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [('a','delete',0),('b','create',N)])
check('unsent-tail-retention scenario 6', solve('unsent-tail-retention', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [])
check('acknowledged-prefix-barrier scenario 1', solve('acknowledged-prefix-barrier', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), 1)
check('acknowledged-prefix-barrier scenario 2', solve('acknowledged-prefix-barrier', ([],[],[],True,2)), 0)
check('acknowledged-prefix-barrier scenario 3', solve('acknowledged-prefix-barrier', ([('a','edit',0)],[],[],False,1)), 0)
check('acknowledged-prefix-barrier scenario 4', solve('acknowledged-prefix-barrier', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), 0)
check('acknowledged-prefix-barrier scenario 5', solve('acknowledged-prefix-barrier', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), 0)
check('acknowledged-prefix-barrier scenario 6', solve('acknowledged-prefix-barrier', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), 0)
check('zero-payload-retention scenario 1', solve('zero-payload-retention', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [2])
check('zero-payload-retention scenario 2', solve('zero-payload-retention', ([],[],[],True,2)), [])
check('zero-payload-retention scenario 3', solve('zero-payload-retention', ([('a','edit',0)],[],[],False,1)), [0])
check('zero-payload-retention scenario 4', solve('zero-payload-retention', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [1,2])
check('zero-payload-retention scenario 5', solve('zero-payload-retention', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [])
check('zero-payload-retention scenario 6', solve('zero-payload-retention', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [2,3])
check('cancel-request-intersection scenario 1', solve('cancel-request-intersection', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), ['b'])
check('cancel-request-intersection scenario 2', solve('cancel-request-intersection', ([],[],[],True,2)), [])
check('cancel-request-intersection scenario 3', solve('cancel-request-intersection', ([('a','edit',0)],[],[],False,1)), [])
check('cancel-request-intersection scenario 4', solve('cancel-request-intersection', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [])
check('cancel-request-intersection scenario 5', solve('cancel-request-intersection', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), ['a'])
check('cancel-request-intersection scenario 6', solve('cancel-request-intersection', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [])
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
cancel-preserves-other-commands scenario 1[['a', 'create', 1], ['c', 'delete', 0]][['a', 'create', 1], ['c', 'delete', 0]]Passed
cancel-preserves-other-commands scenario 2[][]Passed
cancel-preserves-other-commands scenario 3[['a', 'edit', 0]][['a', 'edit', 0]]Passed
cancel-preserves-other-commands scenario 4[['a', 'edit', 1], ['b', 'edit', 2]][['a', 'edit', 1], ['b', 'edit', 2]]Passed
cancel-preserves-other-commands scenario 5[['b', 'create', 1]][['b', 'create', 1]]Passed
cancel-preserves-other-commands scenario 6[['a', 'create', 1], ['b', 'edit', 2], ['c', 'edit', 3]][['a', 'create', 1], ['b', 'edit', 2], ['c', 'edit', 3]]Passed
ack-removes-by-identity scenario 1[['b', 'edit', 2]][['b', 'edit', 2], ['c', 'delete', 0]]Failed
ack-removes-by-identity scenario 2[][]Passed
ack-removes-by-identity scenario 3[['a', 'edit', 0]][['a', 'edit', 0]]Passed
ack-removes-by-identity scenario 4[['a', 'edit', 1]][['a', 'edit', 1], ['b', 'edit', 2]]Failed
ack-removes-by-identity scenario 5[['a', 'delete', 0]][['a', 'delete', 0], ['b', 'create', 1]]Failed
ack-removes-by-identity scenario 6[['a', 'create', 1]][['a', 'create', 1], ['c', 'edit', 3]]Failed
offline-send-suppression scenario 1[['a', 'create', 1], ['b', 'edit', 2]][['a', 'create', 1], ['b', 'edit', 2]]Passed
offline-send-suppression scenario 2[][]Passed
offline-send-suppression scenario 3[][]Passed
offline-send-suppression scenario 4[['a', 'edit', 1]][['a', 'edit', 1]]Passed
offline-send-suppression scenario 5[][]Passed
offline-send-suppression scenario 6[['a', 'create', 1], ['b', 'edit', 2], ['c', 'edit', 3]][['a', 'create', 1], ['b', 'edit', 2], ['c', 'edit', 3]]Passed
effective-backlog scenario 111Passed
effective-backlog scenario 200Passed
effective-backlog scenario 311Passed
effective-backlog scenario 422Passed
effective-backlog scenario 511Passed
effective-backlog scenario 622Passed
create-before-edit-order scenario 1['a', 'b', 'c']['a', 'b', 'c']Passed
create-before-edit-order scenario 2[][]Passed
create-before-edit-order scenario 3['a']['a']Passed
create-before-edit-order scenario 4['a', 'b']['a', 'b']Passed
create-before-edit-order scenario 5['a', 'b']['a', 'b']Passed
create-before-edit-order scenario 6['a', 'b', 'c']['a', 'b', 'c']Passed
destructive-command-warning scenario 1['c']['c']Passed
destructive-command-warning scenario 2[][]Passed
destructive-command-warning scenario 3[][]Passed
destructive-command-warning scenario 4[][]Passed
destructive-command-warning scenario 5[][]Passed
destructive-command-warning scenario 6[][]Passed
unsent-tail-retention scenario 1[['c', 'delete', 0]][['c', 'delete', 0]]Passed
unsent-tail-retention scenario 2[][]Passed
unsent-tail-retention scenario 3[['a', 'edit', 0]][['a', 'edit', 0]]Passed
unsent-tail-retention scenario 4[['b', 'edit', 2]][['b', 'edit', 2]]Passed
unsent-tail-retention scenario 5[['a', 'delete', 0], ['b', 'create', 1]][['a', 'delete', 0], ['b', 'create', 1]]Passed
unsent-tail-retention scenario 6[][]Passed
acknowledged-prefix-barrier scenario 111Passed
acknowledged-prefix-barrier scenario 200Passed
acknowledged-prefix-barrier scenario 300Passed
acknowledged-prefix-barrier scenario 400Passed
acknowledged-prefix-barrier scenario 500Passed
acknowledged-prefix-barrier scenario 600Passed
zero-payload-retention scenario 1[2][2]Passed
zero-payload-retention scenario 2[][]Passed
zero-payload-retention scenario 3[0][0]Passed
zero-payload-retention scenario 4[1, 2][1, 2]Passed
zero-payload-retention scenario 5[][]Passed
zero-payload-retention scenario 6[2, 3][2, 3]Passed
cancel-request-intersection scenario 1['b']['b']Passed
cancel-request-intersection scenario 2[][]Passed
cancel-request-intersection scenario 3[][]Passed
cancel-request-intersection scenario 4[][]Passed
cancel-request-intersection scenario 5['a']['a']Passed
cancel-request-intersection scenario 6[][]Passed

SHA-256 / 03d2ac384a08b6ce52d301773f7cb14496281714b3ad7b3fa052a517d624ba41

3 / The verified repair

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

N = 1
observations = []
def solve(operation, s):
    commands, cancelled, acknowledged, online, limit = s
    if operation == 'cancel-preserves-other-commands':
        return [x for x in commands if x[0] not in cancelled]
    if operation == 'ack-removes-by-identity':
        return [x for x in commands if x[0] not in acknowledged]
    if operation == 'offline-send-suppression':
        return commands[:limit] if online else []
    if operation == 'effective-backlog':
        return sum(x[0] not in acknowledged and x[0] not in cancelled for x in commands)
    if operation == 'create-before-edit-order':
        return [x[0] for x in commands]
    if operation == 'destructive-command-warning':
        return [x[0] for x in commands if x[1]=='delete' and x[0] not in cancelled]
    if operation == 'unsent-tail-retention':
        return commands[limit:] if online else commands
    if operation == 'acknowledged-prefix-barrier':
        return next((i for i,x in enumerate(commands) if x[0] not in acknowledged),len(commands))
    if operation == 'zero-payload-retention':
        return [x[2] for x in commands if x[1]=='edit']
    if operation == 'cancel-request-intersection':
        return [x[0] for x in commands if x[0] in cancelled]
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('cancel-preserves-other-commands scenario 1', solve('cancel-preserves-other-commands', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [('a','create',N),('c','delete',0)])
check('cancel-preserves-other-commands scenario 2', solve('cancel-preserves-other-commands', ([],[],[],True,2)), [])
check('cancel-preserves-other-commands scenario 3', solve('cancel-preserves-other-commands', ([('a','edit',0)],[],[],False,1)), [('a','edit',0)])
check('cancel-preserves-other-commands scenario 4', solve('cancel-preserves-other-commands', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [('a','edit',1),('b','edit',2)])
check('cancel-preserves-other-commands scenario 5', solve('cancel-preserves-other-commands', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [('b','create',N)])
check('cancel-preserves-other-commands scenario 6', solve('cancel-preserves-other-commands', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [('a','create',1),('b','edit',2),('c','edit',3)])
check('ack-removes-by-identity scenario 1', solve('ack-removes-by-identity', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [('b','edit',2),('c','delete',0)])
check('ack-removes-by-identity scenario 2', solve('ack-removes-by-identity', ([],[],[],True,2)), [])
check('ack-removes-by-identity scenario 3', solve('ack-removes-by-identity', ([('a','edit',0)],[],[],False,1)), [('a','edit',0)])
check('ack-removes-by-identity scenario 4', solve('ack-removes-by-identity', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [('a','edit',1),('b','edit',2)])
check('ack-removes-by-identity scenario 5', solve('ack-removes-by-identity', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [('a','delete',0),('b','create',N)])
check('ack-removes-by-identity scenario 6', solve('ack-removes-by-identity', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [('a','create',1),('c','edit',3)])
check('offline-send-suppression scenario 1', solve('offline-send-suppression', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [('a','create',N),('b','edit',2)])
check('offline-send-suppression scenario 2', solve('offline-send-suppression', ([],[],[],True,2)), [])
check('offline-send-suppression scenario 3', solve('offline-send-suppression', ([('a','edit',0)],[],[],False,1)), [])
check('offline-send-suppression scenario 4', solve('offline-send-suppression', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [('a','edit',1)])
check('offline-send-suppression scenario 5', solve('offline-send-suppression', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [])
check('offline-send-suppression scenario 6', solve('offline-send-suppression', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [('a','create',1),('b','edit',2),('c','edit',3)])
check('effective-backlog scenario 1', solve('effective-backlog', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), 1)
check('effective-backlog scenario 2', solve('effective-backlog', ([],[],[],True,2)), 0)
check('effective-backlog scenario 3', solve('effective-backlog', ([('a','edit',0)],[],[],False,1)), 1)
check('effective-backlog scenario 4', solve('effective-backlog', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), 2)
check('effective-backlog scenario 5', solve('effective-backlog', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), 1)
check('effective-backlog scenario 6', solve('effective-backlog', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), 2)
check('create-before-edit-order scenario 1', solve('create-before-edit-order', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), ['a','b','c'])
check('create-before-edit-order scenario 2', solve('create-before-edit-order', ([],[],[],True,2)), [])
check('create-before-edit-order scenario 3', solve('create-before-edit-order', ([('a','edit',0)],[],[],False,1)), ['a'])
check('create-before-edit-order scenario 4', solve('create-before-edit-order', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), ['a','b'])
check('create-before-edit-order scenario 5', solve('create-before-edit-order', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), ['a','b'])
check('create-before-edit-order scenario 6', solve('create-before-edit-order', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), ['a','b','c'])
check('destructive-command-warning scenario 1', solve('destructive-command-warning', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), ['c'])
check('destructive-command-warning scenario 2', solve('destructive-command-warning', ([],[],[],True,2)), [])
check('destructive-command-warning scenario 3', solve('destructive-command-warning', ([('a','edit',0)],[],[],False,1)), [])
check('destructive-command-warning scenario 4', solve('destructive-command-warning', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [])
check('destructive-command-warning scenario 5', solve('destructive-command-warning', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [])
check('destructive-command-warning scenario 6', solve('destructive-command-warning', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [])
check('unsent-tail-retention scenario 1', solve('unsent-tail-retention', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [('c','delete',0)])
check('unsent-tail-retention scenario 2', solve('unsent-tail-retention', ([],[],[],True,2)), [])
check('unsent-tail-retention scenario 3', solve('unsent-tail-retention', ([('a','edit',0)],[],[],False,1)), [('a','edit',0)])
check('unsent-tail-retention scenario 4', solve('unsent-tail-retention', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [('b','edit',2)])
check('unsent-tail-retention scenario 5', solve('unsent-tail-retention', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [('a','delete',0),('b','create',N)])
check('unsent-tail-retention scenario 6', solve('unsent-tail-retention', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [])
check('acknowledged-prefix-barrier scenario 1', solve('acknowledged-prefix-barrier', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), 1)
check('acknowledged-prefix-barrier scenario 2', solve('acknowledged-prefix-barrier', ([],[],[],True,2)), 0)
check('acknowledged-prefix-barrier scenario 3', solve('acknowledged-prefix-barrier', ([('a','edit',0)],[],[],False,1)), 0)
check('acknowledged-prefix-barrier scenario 4', solve('acknowledged-prefix-barrier', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), 0)
check('acknowledged-prefix-barrier scenario 5', solve('acknowledged-prefix-barrier', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), 0)
check('acknowledged-prefix-barrier scenario 6', solve('acknowledged-prefix-barrier', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), 0)
check('zero-payload-retention scenario 1', solve('zero-payload-retention', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), [2])
check('zero-payload-retention scenario 2', solve('zero-payload-retention', ([],[],[],True,2)), [])
check('zero-payload-retention scenario 3', solve('zero-payload-retention', ([('a','edit',0)],[],[],False,1)), [0])
check('zero-payload-retention scenario 4', solve('zero-payload-retention', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [1,2])
check('zero-payload-retention scenario 5', solve('zero-payload-retention', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), [])
check('zero-payload-retention scenario 6', solve('zero-payload-retention', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [2,3])
check('cancel-request-intersection scenario 1', solve('cancel-request-intersection', ([('a','create',N),('b','edit',2),('c','delete',0)],['b'],['a'],True,2)), ['b'])
check('cancel-request-intersection scenario 2', solve('cancel-request-intersection', ([],[],[],True,2)), [])
check('cancel-request-intersection scenario 3', solve('cancel-request-intersection', ([('a','edit',0)],[],[],False,1)), [])
check('cancel-request-intersection scenario 4', solve('cancel-request-intersection', ([('a','edit',1),('b','edit',2)],['x'],[],True,1)), [])
check('cancel-request-intersection scenario 5', solve('cancel-request-intersection', ([('a','delete',0),('b','create',N)],['a'],['x'],True,0)), ['a'])
check('cancel-request-intersection scenario 6', solve('cancel-request-intersection', ([('a','create',1),('b','edit',2),('c','edit',3)],[],['b'],True,5)), [])
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
cancel-preserves-other-commands scenario 1[['a', 'create', 1], ['c', 'delete', 0]][['a', 'create', 1], ['c', 'delete', 0]]Passed
cancel-preserves-other-commands scenario 2[][]Passed
cancel-preserves-other-commands scenario 3[['a', 'edit', 0]][['a', 'edit', 0]]Passed
cancel-preserves-other-commands scenario 4[['a', 'edit', 1], ['b', 'edit', 2]][['a', 'edit', 1], ['b', 'edit', 2]]Passed
cancel-preserves-other-commands scenario 5[['b', 'create', 1]][['b', 'create', 1]]Passed
cancel-preserves-other-commands scenario 6[['a', 'create', 1], ['b', 'edit', 2], ['c', 'edit', 3]][['a', 'create', 1], ['b', 'edit', 2], ['c', 'edit', 3]]Passed
ack-removes-by-identity scenario 1[['b', 'edit', 2], ['c', 'delete', 0]][['b', 'edit', 2], ['c', 'delete', 0]]Passed
ack-removes-by-identity scenario 2[][]Passed
ack-removes-by-identity scenario 3[['a', 'edit', 0]][['a', 'edit', 0]]Passed
ack-removes-by-identity scenario 4[['a', 'edit', 1], ['b', 'edit', 2]][['a', 'edit', 1], ['b', 'edit', 2]]Passed
ack-removes-by-identity scenario 5[['a', 'delete', 0], ['b', 'create', 1]][['a', 'delete', 0], ['b', 'create', 1]]Passed
ack-removes-by-identity scenario 6[['a', 'create', 1], ['c', 'edit', 3]][['a', 'create', 1], ['c', 'edit', 3]]Passed
offline-send-suppression scenario 1[['a', 'create', 1], ['b', 'edit', 2]][['a', 'create', 1], ['b', 'edit', 2]]Passed
offline-send-suppression scenario 2[][]Passed
offline-send-suppression scenario 3[][]Passed
offline-send-suppression scenario 4[['a', 'edit', 1]][['a', 'edit', 1]]Passed
offline-send-suppression scenario 5[][]Passed
offline-send-suppression scenario 6[['a', 'create', 1], ['b', 'edit', 2], ['c', 'edit', 3]][['a', 'create', 1], ['b', 'edit', 2], ['c', 'edit', 3]]Passed
effective-backlog scenario 111Passed
effective-backlog scenario 200Passed
effective-backlog scenario 311Passed
effective-backlog scenario 422Passed
effective-backlog scenario 511Passed
effective-backlog scenario 622Passed
create-before-edit-order scenario 1['a', 'b', 'c']['a', 'b', 'c']Passed
create-before-edit-order scenario 2[][]Passed
create-before-edit-order scenario 3['a']['a']Passed
create-before-edit-order scenario 4['a', 'b']['a', 'b']Passed
create-before-edit-order scenario 5['a', 'b']['a', 'b']Passed
create-before-edit-order scenario 6['a', 'b', 'c']['a', 'b', 'c']Passed
destructive-command-warning scenario 1['c']['c']Passed
destructive-command-warning scenario 2[][]Passed
destructive-command-warning scenario 3[][]Passed
destructive-command-warning scenario 4[][]Passed
destructive-command-warning scenario 5[][]Passed
destructive-command-warning scenario 6[][]Passed
unsent-tail-retention scenario 1[['c', 'delete', 0]][['c', 'delete', 0]]Passed
unsent-tail-retention scenario 2[][]Passed
unsent-tail-retention scenario 3[['a', 'edit', 0]][['a', 'edit', 0]]Passed
unsent-tail-retention scenario 4[['b', 'edit', 2]][['b', 'edit', 2]]Passed
unsent-tail-retention scenario 5[['a', 'delete', 0], ['b', 'create', 1]][['a', 'delete', 0], ['b', 'create', 1]]Passed
unsent-tail-retention scenario 6[][]Passed
acknowledged-prefix-barrier scenario 111Passed
acknowledged-prefix-barrier scenario 200Passed
acknowledged-prefix-barrier scenario 300Passed
acknowledged-prefix-barrier scenario 400Passed
acknowledged-prefix-barrier scenario 500Passed
acknowledged-prefix-barrier scenario 600Passed
zero-payload-retention scenario 1[2][2]Passed
zero-payload-retention scenario 2[][]Passed
zero-payload-retention scenario 3[0][0]Passed
zero-payload-retention scenario 4[1, 2][1, 2]Passed
zero-payload-retention scenario 5[][]Passed
zero-payload-retention scenario 6[2, 3][2, 3]Passed
cancel-request-intersection scenario 1['b']['b']Passed
cancel-request-intersection scenario 2[][]Passed
cancel-request-intersection scenario 3[][]Passed
cancel-request-intersection scenario 4[][]Passed
cancel-request-intersection scenario 5['a']['a']Passed
cancel-request-intersection scenario 6[][]Passed

SHA-256 / f611436ea71e4f0b6aa65596619c0cc56bf3c988c482c5a82f7c7fea1dd90dc8

Verification & scope

Only the explicitly specified operations and finite deterministic records are modeled; no browser or framework conformance is claimed. 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:40:55.087597+00:00.

Case digest / f3613a9dba06ce2ef233d91fa3f16f1271740ff262c5eb1153c320a35fe8e6c5