FAILURE MAP
← Case archive

FA-24776 / Client state / Open access

A transition disappears while one of its spawned child tasks remains unresolved · case 01

A transition disappears while one of its spawned child tasks remains unresolved.

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

ROOT CAUSE

The faulty implementation violates A transition owns a set of child task identities. A finish/failure settles only its child; unknown or repeated completion cannot clear siblings; failures are reported separately from remaining work.

VERIFIED REPAIR

A transition owns a set of child task identities. A finish/failure settles only its child; unknown or repeated completion cannot clear siblings; failures are reported separately from remaining work.

Unsuccessful approach: The partial repair still violates at least one explicit regression oracle.

Case contract

A transition owns a set of child task identities. A finish/failure settles only its child; unknown or repeated completion cannot clear siblings; failures are reported separately from remaining work.

Why this case matters

A bounded offline client-state transition with explicit lifecycle inputs.

1 / The failure

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

N = 1
observations = []
def solve(events):
    pending=False; errors=[]
    for kind,task in events:
        pending=kind=='start'
        if kind=='fail': errors.append(task)
    return (['pending'] if pending else []),errors
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('sibling remains', solve([('start','a'),('start','b'),('finish','a')]), (['b'],[]))
check('failed child releases only itself', solve([('start','a'),('start','b'),('fail','a')]), (['b'],['a']))
check('all finished', solve([('start','a'),('finish','a')]), ([],[]))
check('unknown finish', solve([('start','a'),('finish','x')]), (['a'],[]))
check('duplicate completion', solve([('start','a'),('finish','a'),('finish','a')]), ([],[]))
check('parameterized children', solve([('start',str(i)) for i in range(N+1)]+[('finish','0')]), (sorted(str(i) for i in range(1,N+1)),[]))
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
sibling remains[[], []][['b'], []]Failed
failed child releases only itself[[], ['a']][['b'], ['a']]Failed
all finished[[], []][[], []]Passed
unknown finish[[], []][['a'], []]Failed
duplicate completion[[], []][[], []]Passed
parameterized children[[], []][['1'], []]Failed

SHA-256 / bff581dc6533c53aaa1838a4ab622b3091cd4eeb8d033aeea0f42861b8b55a20

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(events):
    pending=set(); errors=[]
    for kind,task in events:
        if kind=='start': pending.add(task)
        elif kind in ('finish','fail'): pending.clear()
        if kind=='fail': errors.append(task)
    return sorted(pending),errors
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('sibling remains', solve([('start','a'),('start','b'),('finish','a')]), (['b'],[]))
check('failed child releases only itself', solve([('start','a'),('start','b'),('fail','a')]), (['b'],['a']))
check('all finished', solve([('start','a'),('finish','a')]), ([],[]))
check('unknown finish', solve([('start','a'),('finish','x')]), (['a'],[]))
check('duplicate completion', solve([('start','a'),('finish','a'),('finish','a')]), ([],[]))
check('parameterized children', solve([('start',str(i)) for i in range(N+1)]+[('finish','0')]), (sorted(str(i) for i in range(1,N+1)),[]))
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
sibling remains[[], []][['b'], []]Failed
failed child releases only itself[[], ['a']][['b'], ['a']]Failed
all finished[[], []][[], []]Passed
unknown finish[[], []][['a'], []]Failed
duplicate completion[[], []][[], []]Passed
parameterized children[[], []][['1'], []]Failed

SHA-256 / 7a714f7e74de78f490c5e1e391243d197cca72eb0b2a3068d417243e6e3f117d

3 / The verified repair

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

N = 1
observations = []
def solve(events):
    pending=set(); errors=[]
    for kind,task in events:
        if kind=='start': pending.add(task)
        elif kind=='finish': pending.discard(task)
        elif kind=='fail': pending.discard(task); errors.append(task)
    return sorted(pending),errors
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('sibling remains', solve([('start','a'),('start','b'),('finish','a')]), (['b'],[]))
check('failed child releases only itself', solve([('start','a'),('start','b'),('fail','a')]), (['b'],['a']))
check('all finished', solve([('start','a'),('finish','a')]), ([],[]))
check('unknown finish', solve([('start','a'),('finish','x')]), (['a'],[]))
check('duplicate completion', solve([('start','a'),('finish','a'),('finish','a')]), ([],[]))
check('parameterized children', solve([('start',str(i)) for i in range(N+1)]+[('finish','0')]), (sorted(str(i) for i in range(1,N+1)),[]))
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
sibling remains[['b'], []][['b'], []]Passed
failed child releases only itself[['b'], ['a']][['b'], ['a']]Passed
all finished[[], []][[], []]Passed
unknown finish[['a'], []][['a'], []]Passed
duplicate completion[[], []][[], []]Passed
parameterized children[['1'], []][['1'], []]Passed

SHA-256 / 752c3cc92c4b425ede403d81d66c73146dd134711aaf19b52609a869c35c635c

Verification & scope

This models the stated application policy only; 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:41:00.619942+00:00.

Case digest / 307298be94fd30590b13a410df1e86f58591209c1ac786b966c57208da9ece33