FAILURE MAP
← Case archive

FA-90886 / Quantum circuit simulation / Open access

Marginal distribution is not renormalized for unnormalized input · case 01

A state given as 3|0> + 4i|1> yields probabilities 9 and 16 instead of 0.36 and 0.64.

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

ROOT CAUSE

Accumulated weights are rounded and returned without dividing by the total squared norm.

VERIFIED REPAIR

Divide each accumulated weight by the total squared norm before rounding.

Unsuccessful approach: The attempted repair divides by the square root of the total, i.e. the norm rather than the squared norm.

Case contract

Input [n, amps, qubits]; amps are 2**n [re, im] pairs (qubit 0 = LSB), possibly unnormalized. Return the marginal outcome distribution over the listed qubits as {bitstring: probability} where the first listed qubit is the rightmost character, probabilities are normalized by the total squared norm, rounded to 6 decimals after summation, and zero entries are omitted. Errors: "bad-length", "duplicate-qubit", "bad-qubit", "zero-state" (total squared norm <= 1e-12).

Why this case matters

Marginal readout distributions are what users compare against hardware counts; ordering or normalization slips mislabel every histogram.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    n, amps, qubits = x
    if len(amps) != 1 << n:
        return 'bad-length'
    if len(set(qubits)) != len(qubits):
        return 'duplicate-qubit'
    if any(q < 0 or q >= n for q in qubits):
        return 'bad-qubit'
    total = sum(re * re + im * im for re, im in amps)
    if total <= 1e-12:
        return 'zero-state'
    acc = {}
    for idx, (a, b) in enumerate(amps):
        p = a * a + b * b
        if p == 0:
            continue
        key = ''.join('1' if idx >> q & 1 else '0' for q in reversed(qubits))
        acc[key] = acc.get(key, 0.0) + p
    out = {}
    for key in sorted(acc):
        v = round(acc[key], 6)
        if v > 0:
            out[key] = v
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: tiny but valid state', [1, [[0.0001, 0], [0, 0.0002]], [0]], {'0': 0.2, '1': 0.8}], ['regression: unnormalized pair', [1, [[3, 0], [0, 4]], [0]], {'0': 0.36, '1': 0.64}], ['regression: random state 0', [2, [[0.0, 0.0], [0.282, -0.043], [-0.278, 0.017], [0.0, 0.0]], [0, 1]], {'01': 0.511954, '10': 0.488046}], ['control: bell state on both qubits', [2, [[0.707107, 0], [0, 0], [0, 0], [0.707107, 0]], [0, 1]], {'00': 0.5, '11': 0.5}], ['control: reversed qubit list', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1, 0]], {'10': 1.0}], ['control: single qubit marginal of |01>', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1]], {'0': 1.0}], ['control: out of range qubit equals n', [2, [[1, 0], [0, 0], [0, 0], [0, 0]], [2]], 'bad-qubit']], [['regression: random state 1', [2, [[0.129, 0.125], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0]], [1, 0]], {'00': 1.0}], ['regression: random state 2', [1, [[0.541, -0.923], [-0.479, -0.646]], [0]], {'0': 0.638959, '1': 0.361041}], ['regression: random state 0', [2, [[0.0, 0.0], [0.282, -0.043], [-0.278, 0.017], [0.0, 0.0]], [0, 1]], {'01': 0.511954, '10': 0.488046}], ['control: negative qubit index', [2, [[1, 0], [0, 0], [0, 0], [0, 0]], [-1]], 'bad-qubit'], ['control: duplicate qubits', [2, [[0.6, 0], [0, 0.8], [0, 0], [0, 0]], [0, 0]], 'duplicate-qubit'], ['control: wrong amplitude count', [2, [[1, 0], [0, 0]], [0]], 'bad-length'], ['control: all-zero state', [1, [[0, 0], [0, 0]], [0]], 'zero-state']], [['regression: random state 4', [1, [[-0.217, 0.525], [-0.308, -0.181]], [0]], {'0': 0.716602, '1': 0.283398}], ['regression: random state 5', [2, [[0.175, -0.97], [0.914, 0.939], [-0.22, 0.959], [-0.79, 0.837]], [1]], {'0': 0.539737, '1': 0.460263}], ['regression: random state 2', [1, [[0.541, -0.923], [-0.479, -0.646]], [0]], {'0': 0.638959, '1': 0.361041}], ['control: near zero state', [1, [[1e-08, 0], [0, 1e-08]], [0]], 'zero-state'], ['control: bell state on both qubits', [2, [[0.707107, 0], [0, 0], [0, 0], [0.707107, 0]], [0, 1]], {'00': 0.5, '11': 0.5}], ['control: reversed qubit list', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1, 0]], {'10': 1.0}], ['control: single qubit marginal of |01>', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1]], {'0': 1.0}]], [['regression: random state 7', [1, [[0.725, -0.825], [-0.233, -0.266]], [0]], {'0': 0.906073, '1': 0.093927}], ['regression: random state 8', [2, [[0.258, -0.148], [-0.044, -0.154], [0.09, 0.21], [0.28, 0.265]], [0]], {'0': 0.446643, '1': 0.553357}], ['regression: random state 4', [1, [[-0.217, 0.525], [-0.308, -0.181]], [0]], {'0': 0.716602, '1': 0.283398}], ['control: out of range qubit equals n', [2, [[1, 0], [0, 0], [0, 0], [0, 0]], [2]], 'bad-qubit'], ['control: negative qubit index', [2, [[1, 0], [0, 0], [0, 0], [0, 0]], [-1]], 'bad-qubit'], ['control: duplicate qubits', [2, [[0.6, 0], [0, 0.8], [0, 0], [0, 0]], [0, 0]], 'duplicate-qubit'], ['control: wrong amplitude count', [2, [[1, 0], [0, 0]], [0]], 'bad-length']], [['regression: random state 10', [3, [[-0.064, 0.212], [0.264, -0.114], [-0.15, -0.24], [0.031, 0.141], [0.037, -0.002], [0.023, -0.229], [0.193, -0.153], [0.251, 0.097]], [0, 1, 2]], {'000': 0.116738, '001': 0.196846, '010': 0.190676, '011': 0.049614, '100': 0.003268, '101': 0.126094, '110': 0.144395, '111': 0.17237}], ['regression: random state 11', [2, [[-0.211, 0.28], [0.154, -0.18], [-0.016, -0.095], [-0.157, 0.075]], [0]], {'0': 0.604789, '1': 0.395211}], ['regression: random state 6', [3, [[-0.119, 0.092], [0.264, -0.223], [-0.189, 0.034], [-0.22, -0.267], [-0.291, -0.092], [0.09, -0.02], [0.062, -0.284], [-0.239, 0.039]], [2]], {'0': 0.54953, '1': 0.45047}], ['control: all-zero state', [1, [[0, 0], [0, 0]], [0]], 'zero-state'], ['control: near zero state', [1, [[1e-08, 0], [0, 1e-08]], [0]], 'zero-state'], ['control: bell state on both qubits', [2, [[0.707107, 0], [0, 0], [0, 0], [0.707107, 0]], [0, 1]], {'00': 0.5, '11': 0.5}], ['control: reversed qubit list', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1, 0]], {'10': 1.0}]]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
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
regression: tiny but valid state{}{'0': 0.2, '1': 0.8}Failed
regression: unnormalized pair{'0': 9.0, '1': 16.0}{'0': 0.36, '1': 0.64}Failed
regression: random state 0{'01': 0.081373, '10': 0.077573}{'01': 0.511954, '10': 0.488046}Failed
control: bell state on both qubits{'00': 0.5, '11': 0.5}{'00': 0.5, '11': 0.5}Passed
control: reversed qubit list{'10': 1.0}{'10': 1.0}Passed
control: single qubit marginal of |01>{'0': 1.0}{'0': 1.0}Passed
control: out of range qubit equals nbad-qubitbad-qubitPassed

SHA-256 / 26a6136f817fe20a42c6f1c1ae7638c41dbad2b47c36584109b838ff6e7173ec

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    n, amps, qubits = x
    if len(amps) != 1 << n:
        return 'bad-length'
    if len(set(qubits)) != len(qubits):
        return 'duplicate-qubit'
    if any(q < 0 or q >= n for q in qubits):
        return 'bad-qubit'
    total = sum(re * re + im * im for re, im in amps)
    if total <= 1e-12:
        return 'zero-state'
    acc = {}
    for idx, (a, b) in enumerate(amps):
        p = a * a + b * b
        if p == 0:
            continue
        key = ''.join('1' if idx >> q & 1 else '0' for q in reversed(qubits))
        acc[key] = acc.get(key, 0.0) + p
    out = {}
    for key in sorted(acc):
        v = round(acc[key] / math.sqrt(total), 6)
        if v > 0:
            out[key] = v
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: tiny but valid state', [1, [[0.0001, 0], [0, 0.0002]], [0]], {'0': 0.2, '1': 0.8}], ['regression: unnormalized pair', [1, [[3, 0], [0, 4]], [0]], {'0': 0.36, '1': 0.64}], ['regression: random state 0', [2, [[0.0, 0.0], [0.282, -0.043], [-0.278, 0.017], [0.0, 0.0]], [0, 1]], {'01': 0.511954, '10': 0.488046}], ['control: bell state on both qubits', [2, [[0.707107, 0], [0, 0], [0, 0], [0.707107, 0]], [0, 1]], {'00': 0.5, '11': 0.5}], ['control: reversed qubit list', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1, 0]], {'10': 1.0}], ['control: single qubit marginal of |01>', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1]], {'0': 1.0}], ['control: out of range qubit equals n', [2, [[1, 0], [0, 0], [0, 0], [0, 0]], [2]], 'bad-qubit']], [['regression: random state 1', [2, [[0.129, 0.125], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0]], [1, 0]], {'00': 1.0}], ['regression: random state 2', [1, [[0.541, -0.923], [-0.479, -0.646]], [0]], {'0': 0.638959, '1': 0.361041}], ['regression: random state 0', [2, [[0.0, 0.0], [0.282, -0.043], [-0.278, 0.017], [0.0, 0.0]], [0, 1]], {'01': 0.511954, '10': 0.488046}], ['control: negative qubit index', [2, [[1, 0], [0, 0], [0, 0], [0, 0]], [-1]], 'bad-qubit'], ['control: duplicate qubits', [2, [[0.6, 0], [0, 0.8], [0, 0], [0, 0]], [0, 0]], 'duplicate-qubit'], ['control: wrong amplitude count', [2, [[1, 0], [0, 0]], [0]], 'bad-length'], ['control: all-zero state', [1, [[0, 0], [0, 0]], [0]], 'zero-state']], [['regression: random state 4', [1, [[-0.217, 0.525], [-0.308, -0.181]], [0]], {'0': 0.716602, '1': 0.283398}], ['regression: random state 5', [2, [[0.175, -0.97], [0.914, 0.939], [-0.22, 0.959], [-0.79, 0.837]], [1]], {'0': 0.539737, '1': 0.460263}], ['regression: random state 2', [1, [[0.541, -0.923], [-0.479, -0.646]], [0]], {'0': 0.638959, '1': 0.361041}], ['control: near zero state', [1, [[1e-08, 0], [0, 1e-08]], [0]], 'zero-state'], ['control: bell state on both qubits', [2, [[0.707107, 0], [0, 0], [0, 0], [0.707107, 0]], [0, 1]], {'00': 0.5, '11': 0.5}], ['control: reversed qubit list', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1, 0]], {'10': 1.0}], ['control: single qubit marginal of |01>', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1]], {'0': 1.0}]], [['regression: random state 7', [1, [[0.725, -0.825], [-0.233, -0.266]], [0]], {'0': 0.906073, '1': 0.093927}], ['regression: random state 8', [2, [[0.258, -0.148], [-0.044, -0.154], [0.09, 0.21], [0.28, 0.265]], [0]], {'0': 0.446643, '1': 0.553357}], ['regression: random state 4', [1, [[-0.217, 0.525], [-0.308, -0.181]], [0]], {'0': 0.716602, '1': 0.283398}], ['control: out of range qubit equals n', [2, [[1, 0], [0, 0], [0, 0], [0, 0]], [2]], 'bad-qubit'], ['control: negative qubit index', [2, [[1, 0], [0, 0], [0, 0], [0, 0]], [-1]], 'bad-qubit'], ['control: duplicate qubits', [2, [[0.6, 0], [0, 0.8], [0, 0], [0, 0]], [0, 0]], 'duplicate-qubit'], ['control: wrong amplitude count', [2, [[1, 0], [0, 0]], [0]], 'bad-length']], [['regression: random state 10', [3, [[-0.064, 0.212], [0.264, -0.114], [-0.15, -0.24], [0.031, 0.141], [0.037, -0.002], [0.023, -0.229], [0.193, -0.153], [0.251, 0.097]], [0, 1, 2]], {'000': 0.116738, '001': 0.196846, '010': 0.190676, '011': 0.049614, '100': 0.003268, '101': 0.126094, '110': 0.144395, '111': 0.17237}], ['regression: random state 11', [2, [[-0.211, 0.28], [0.154, -0.18], [-0.016, -0.095], [-0.157, 0.075]], [0]], {'0': 0.604789, '1': 0.395211}], ['regression: random state 6', [3, [[-0.119, 0.092], [0.264, -0.223], [-0.189, 0.034], [-0.22, -0.267], [-0.291, -0.092], [0.09, -0.02], [0.062, -0.284], [-0.239, 0.039]], [2]], {'0': 0.54953, '1': 0.45047}], ['control: all-zero state', [1, [[0, 0], [0, 0]], [0]], 'zero-state'], ['control: near zero state', [1, [[1e-08, 0], [0, 1e-08]], [0]], 'zero-state'], ['control: bell state on both qubits', [2, [[0.707107, 0], [0, 0], [0, 0], [0.707107, 0]], [0, 1]], {'00': 0.5, '11': 0.5}], ['control: reversed qubit list', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1, 0]], {'10': 1.0}]]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
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
regression: tiny but valid state{'0': 4.5e-05, '1': 0.000179}{'0': 0.2, '1': 0.8}Failed
regression: unnormalized pair{'0': 1.8, '1': 3.2}{'0': 0.36, '1': 0.64}Failed
regression: random state 0{'01': 0.204106, '10': 0.194574}{'01': 0.511954, '10': 0.488046}Failed
control: bell state on both qubits{'00': 0.5, '11': 0.5}{'00': 0.5, '11': 0.5}Passed
control: reversed qubit list{'10': 1.0}{'10': 1.0}Passed
control: single qubit marginal of |01>{'0': 1.0}{'0': 1.0}Passed
control: out of range qubit equals nbad-qubitbad-qubitPassed

SHA-256 / 06078665454b713ae3f667f57c3f33f07842a7a8fbcdea9c4311660b546adb70

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    n, amps, qubits = x
    if len(amps) != 1 << n:
        return 'bad-length'
    if len(set(qubits)) != len(qubits):
        return 'duplicate-qubit'
    if any(q < 0 or q >= n for q in qubits):
        return 'bad-qubit'
    total = sum(re * re + im * im for re, im in amps)
    if total <= 1e-12:
        return 'zero-state'
    acc = {}
    for idx, (a, b) in enumerate(amps):
        p = a * a + b * b
        if p == 0:
            continue
        key = ''.join('1' if idx >> q & 1 else '0' for q in reversed(qubits))
        acc[key] = acc.get(key, 0.0) + p
    out = {}
    for key in sorted(acc):
        v = round(acc[key] / total, 6)
        if v > 0:
            out[key] = v
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: tiny but valid state', [1, [[0.0001, 0], [0, 0.0002]], [0]], {'0': 0.2, '1': 0.8}], ['regression: unnormalized pair', [1, [[3, 0], [0, 4]], [0]], {'0': 0.36, '1': 0.64}], ['regression: random state 0', [2, [[0.0, 0.0], [0.282, -0.043], [-0.278, 0.017], [0.0, 0.0]], [0, 1]], {'01': 0.511954, '10': 0.488046}], ['control: bell state on both qubits', [2, [[0.707107, 0], [0, 0], [0, 0], [0.707107, 0]], [0, 1]], {'00': 0.5, '11': 0.5}], ['control: reversed qubit list', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1, 0]], {'10': 1.0}], ['control: single qubit marginal of |01>', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1]], {'0': 1.0}], ['control: out of range qubit equals n', [2, [[1, 0], [0, 0], [0, 0], [0, 0]], [2]], 'bad-qubit']], [['regression: random state 1', [2, [[0.129, 0.125], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0]], [1, 0]], {'00': 1.0}], ['regression: random state 2', [1, [[0.541, -0.923], [-0.479, -0.646]], [0]], {'0': 0.638959, '1': 0.361041}], ['regression: random state 0', [2, [[0.0, 0.0], [0.282, -0.043], [-0.278, 0.017], [0.0, 0.0]], [0, 1]], {'01': 0.511954, '10': 0.488046}], ['control: negative qubit index', [2, [[1, 0], [0, 0], [0, 0], [0, 0]], [-1]], 'bad-qubit'], ['control: duplicate qubits', [2, [[0.6, 0], [0, 0.8], [0, 0], [0, 0]], [0, 0]], 'duplicate-qubit'], ['control: wrong amplitude count', [2, [[1, 0], [0, 0]], [0]], 'bad-length'], ['control: all-zero state', [1, [[0, 0], [0, 0]], [0]], 'zero-state']], [['regression: random state 4', [1, [[-0.217, 0.525], [-0.308, -0.181]], [0]], {'0': 0.716602, '1': 0.283398}], ['regression: random state 5', [2, [[0.175, -0.97], [0.914, 0.939], [-0.22, 0.959], [-0.79, 0.837]], [1]], {'0': 0.539737, '1': 0.460263}], ['regression: random state 2', [1, [[0.541, -0.923], [-0.479, -0.646]], [0]], {'0': 0.638959, '1': 0.361041}], ['control: near zero state', [1, [[1e-08, 0], [0, 1e-08]], [0]], 'zero-state'], ['control: bell state on both qubits', [2, [[0.707107, 0], [0, 0], [0, 0], [0.707107, 0]], [0, 1]], {'00': 0.5, '11': 0.5}], ['control: reversed qubit list', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1, 0]], {'10': 1.0}], ['control: single qubit marginal of |01>', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1]], {'0': 1.0}]], [['regression: random state 7', [1, [[0.725, -0.825], [-0.233, -0.266]], [0]], {'0': 0.906073, '1': 0.093927}], ['regression: random state 8', [2, [[0.258, -0.148], [-0.044, -0.154], [0.09, 0.21], [0.28, 0.265]], [0]], {'0': 0.446643, '1': 0.553357}], ['regression: random state 4', [1, [[-0.217, 0.525], [-0.308, -0.181]], [0]], {'0': 0.716602, '1': 0.283398}], ['control: out of range qubit equals n', [2, [[1, 0], [0, 0], [0, 0], [0, 0]], [2]], 'bad-qubit'], ['control: negative qubit index', [2, [[1, 0], [0, 0], [0, 0], [0, 0]], [-1]], 'bad-qubit'], ['control: duplicate qubits', [2, [[0.6, 0], [0, 0.8], [0, 0], [0, 0]], [0, 0]], 'duplicate-qubit'], ['control: wrong amplitude count', [2, [[1, 0], [0, 0]], [0]], 'bad-length']], [['regression: random state 10', [3, [[-0.064, 0.212], [0.264, -0.114], [-0.15, -0.24], [0.031, 0.141], [0.037, -0.002], [0.023, -0.229], [0.193, -0.153], [0.251, 0.097]], [0, 1, 2]], {'000': 0.116738, '001': 0.196846, '010': 0.190676, '011': 0.049614, '100': 0.003268, '101': 0.126094, '110': 0.144395, '111': 0.17237}], ['regression: random state 11', [2, [[-0.211, 0.28], [0.154, -0.18], [-0.016, -0.095], [-0.157, 0.075]], [0]], {'0': 0.604789, '1': 0.395211}], ['regression: random state 6', [3, [[-0.119, 0.092], [0.264, -0.223], [-0.189, 0.034], [-0.22, -0.267], [-0.291, -0.092], [0.09, -0.02], [0.062, -0.284], [-0.239, 0.039]], [2]], {'0': 0.54953, '1': 0.45047}], ['control: all-zero state', [1, [[0, 0], [0, 0]], [0]], 'zero-state'], ['control: near zero state', [1, [[1e-08, 0], [0, 1e-08]], [0]], 'zero-state'], ['control: bell state on both qubits', [2, [[0.707107, 0], [0, 0], [0, 0], [0.707107, 0]], [0, 1]], {'00': 0.5, '11': 0.5}], ['control: reversed qubit list', [2, [[0, 0], [1, 0], [0, 0], [0, 0]], [1, 0]], {'10': 1.0}]]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
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
regression: tiny but valid state{'0': 0.2, '1': 0.8}{'0': 0.2, '1': 0.8}Passed
regression: unnormalized pair{'0': 0.36, '1': 0.64}{'0': 0.36, '1': 0.64}Passed
regression: random state 0{'01': 0.511954, '10': 0.488046}{'01': 0.511954, '10': 0.488046}Passed
control: bell state on both qubits{'00': 0.5, '11': 0.5}{'00': 0.5, '11': 0.5}Passed
control: reversed qubit list{'10': 1.0}{'10': 1.0}Passed
control: single qubit marginal of |01>{'0': 1.0}{'0': 1.0}Passed
control: out of range qubit equals nbad-qubitbad-qubitPassed

SHA-256 / ed3fe3cd618ed98941406b4684c15cadd5835241d372eb0e9a371d8dbf70eb82

Verification & scope

A deterministic bounded teaching model with a stipulated toy contract; amplitudes are rounded to fixed decimals for strict JSON output. It is not a production quantum SDK and claims no standards conformance. 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:51:30.941011+00:00.

Case digest / fa898711ceeade91a2fa06a7279bebf6bc9c35a637a795eae2b7a512db32e2b9