FAILURE MAP
← Case archive

FA-12356 / Manufacturing workflow integrity / Open access

A descendant lot escapes an upstream quality hold · case 01

A descendant lot escapes an upstream quality hold.

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

ROOT CAUSE

Only the finished lot identifier is checked against active holds.

VERIFIED REPAIR

Check the lot and every upstream ancestor, including intermediate work lots.

Unsuccessful approach: Checking terminal raw-material sources omits holds on intermediate process lots.

Case contract

For an acyclic genealogy and active held-lot set, return whether shipment is blocked by any ancestor or the lot itself.

Why this case matters

A deterministic manufacturing record model isolates this workflow defect before equipment or enterprise integration.

1 / The failure

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

N = 1
observations = []
def solve(parents, lot, held):
    return lot in held
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
p = {'finish': ['work'], 'work': ['stage-0']}
p.update({'stage-' + str(i): ['stage-' + str(i+1)] for i in range(N)})
p['stage-' + str(N)] = ['raw' + str(N)]
check('intermediate hold', solve(p, 'finish', {'work'}), True)
check('raw hold', solve(p, 'finish', {'raw' + str(N)}), True)
check('finished hold', solve(p, 'finish', {'finish'}), True)
check('unrelated hold', solve(p, 'finish', {'other'}), False)
check('no holds', solve(p, 'finish', set()), False)
check('source hold', solve({}, 'raw', {'raw'}), True)
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
intermediate holdFalseTrueFailed
raw holdFalseTrueFailed
finished holdTrueTruePassed
unrelated holdFalseFalsePassed
no holdsFalseFalsePassed
source holdTrueTruePassed

SHA-256 / 3831cee0e578d484f9bf9c5ea858b2b8f5a1e122f38436fa2ad8609940bb7923

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(parents, lot, held):
    pending = [lot]
    while pending:
        x = pending.pop()
        if parents.get(x): pending.extend(parents[x])
        elif x in held: return True
    return False
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
p = {'finish': ['work'], 'work': ['stage-0']}
p.update({'stage-' + str(i): ['stage-' + str(i+1)] for i in range(N)})
p['stage-' + str(N)] = ['raw' + str(N)]
check('intermediate hold', solve(p, 'finish', {'work'}), True)
check('raw hold', solve(p, 'finish', {'raw' + str(N)}), True)
check('finished hold', solve(p, 'finish', {'finish'}), True)
check('unrelated hold', solve(p, 'finish', {'other'}), False)
check('no holds', solve(p, 'finish', set()), False)
check('source hold', solve({}, 'raw', {'raw'}), True)
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
intermediate holdFalseTrueFailed
raw holdTrueTruePassed
finished holdFalseTrueFailed
unrelated holdFalseFalsePassed
no holdsFalseFalsePassed
source holdTrueTruePassed

SHA-256 / fdc9e32e76ace23a437f60a0bf8c959c24b10bc1cb309b4e48937bf567e6fc74

3 / The verified repair

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

N = 1
observations = []
def solve(parents, lot, held):
    pending = [lot]
    seen = set()
    while pending:
        x = pending.pop()
        if x in seen: continue
        seen.add(x)
        if x in held: return True
        pending.extend(parents.get(x, []))
    return False
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
p = {'finish': ['work'], 'work': ['stage-0']}
p.update({'stage-' + str(i): ['stage-' + str(i+1)] for i in range(N)})
p['stage-' + str(N)] = ['raw' + str(N)]
check('intermediate hold', solve(p, 'finish', {'work'}), True)
check('raw hold', solve(p, 'finish', {'raw' + str(N)}), True)
check('finished hold', solve(p, 'finish', {'finish'}), True)
check('unrelated hold', solve(p, 'finish', {'other'}), False)
check('no holds', solve(p, 'finish', set()), False)
check('source hold', solve({}, 'raw', {'raw'}), True)
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
intermediate holdTrueTruePassed
raw holdTrueTruePassed
finished holdTrueTruePassed
unrelated holdFalseFalsePassed
no holdsFalseFalsePassed
source holdTrueTruePassed

SHA-256 / 0d591c00258429338bf459cdad5199a0ffa31321b5dae19e34e7d7534ba81dce

Verification & scope

Offline policy model only; no physical equipment, regulatory certification, or concurrent transaction claims. 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:38:56.184877+00:00.

Case digest / 3e4d296df5ef34665273d3440e07c9e326d5b188188f15067cadc87d4e52bba3