FA-66071 / Aviation weight and balance / Open access
CG excursion ignores the takeoff condition · case 01
When the most aft CG occurs at takeoff, the reported maximum is the first in-flight sample instead.
ROOT CAUSE
The minimum and maximum are taken over in-flight samples only, dropping the starting CG.
VERIFIED REPAIR
Include the starting CG in the excursion extremes.
Unsuccessful approach: Including the start only in the minimum still misses a start that is the aft extreme.
Case contract
Input {'zfw','zfm','tanks':[[name,arm,gal]],'order':[names],'step','density'}. Fuel burns in 'order', one step (or the tank remainder, no carry) at a time; a tank listed again after being emptied burns nothing; unlisted tanks are unusable but their fuel stays on board. CG is sampled at start and after each step. Return [start CG, min CG, max CG, final CG] rounded 2.
Why this case matters
Tank burn sequence determines the CG trajectory in flight; the extreme CG can occur mid-sequence rather than at takeoff or landing.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
dens = x['density']
tanks = {n: [arm, g] for n, arm, g in x['tanks']}
w = x['zfw'] + sum(g for _, g in tanks.values()) * dens
m = x['zfm'] + sum(a * g for a, g in tanks.values()) * dens
cgs = [m / w]
for name in x['order']:
arm, g = tanks[name]
while g > 1e-9:
b = min(x['step'], g)
g -= b
w -= b * dens
m -= b * dens * arm
cgs.append(m / w)
tanks[name][1] = 0.0
return [round(cgs[0], 2), round(min(cgs[1:] or cgs), 2), round(max(cgs[1:] or cgs), 2), round(cgs[-1], 2)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 11.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.22, 41.0, 42.22, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 13.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [42.86, 41.71, 42.86, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 8.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [40.97, 40.35, 40.97, 40.35]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 7.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.4, 43.0, 43.51, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 7.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.1}, [41.98, 41.0, 43.24, 41.0]], ['sampled case 1', {'zfw': 2390.0, 'zfm': 102338.1, 'tanks': [['t0', 30.0, 8.6], ['t1', 25.3, 26.3], ['t2', 19.3, 27.1], ['t3', 41.2, 29.3]], 'order': ['t0', 't1', 't2'], 'step': 2.5, 'density': 6.0}, [40.25, 40.25, 42.71, 42.71]], ['sampled case 2', {'zfw': 2251.0, 'zfm': 88635.6, 'tanks': [['t0', 37.2, 28.4]], 'order': ['t0', 't0'], 'step': 7.0, 'density': 6.7}, [39.21, 39.21, 39.38, 39.38]], ['sampled case 3', {'zfw': 1718.0, 'zfm': 65994.7, 'tanks': [['t0', 43.9, 20.5], ['t1', 28.5, 13.0], ['t2', 50.3, 2.9]], 'order': ['t2', 't1'], 'step': 5.0, 'density': 6.0}, [38.47, 38.36, 38.78, 38.78]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 12.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.26, 41.0, 42.26, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 14.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [42.94, 41.71, 42.94, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 16.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.27, 40.69, 41.27, 40.69]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 8.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.47, 43.0, 43.58, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 8.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.2}, [41.99, 41.0, 43.28, 41.0]], ['sampled case 1', {'zfw': 1572.0, 'zfm': 63301.9, 'tanks': [['t0', 26.3, 24.8], ['t1', 70.0, 13.1], ['t2', 26.6, 28.2]], 'order': ['t1', 't0', 't2', 't0'], 'step': 4.0, 'density': 6.0}, [39.22, 37.95, 40.27, 40.27]], ['sampled case 2', {'zfw': 1505.0, 'zfm': 66323.5, 'tanks': [['t0', 43.2, 6.6], ['t1', 61.6, 21.6]], 'order': ['t1', 't0'], 'step': 2.5, 'density': 6.7}, [45.54, 44.04, 45.54, 44.07]], ['sampled case 3', {'zfw': 1742.0, 'zfm': 73409.0, 'tanks': [['t0', 75.9, 19.7]], 'order': ['t0', 't0'], 'step': 2.5, 'density': 6.7}, [44.52, 42.14, 44.52, 42.14]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 13.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.31, 41.0, 42.31, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 15.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.03, 41.71, 43.03, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 24.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.55, 41.01, 41.55, 41.01]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 9.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.53, 43.0, 43.65, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 9.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.3}, [42.01, 41.0, 43.31, 41.0]], ['sampled case 1', {'zfw': 1563.0, 'zfm': 63987.5, 'tanks': [['t0', 86.2, 17.0], ['t1', 83.0, 7.5]], 'order': ['t1', 't1', 't0'], 'step': 7.0, 'density': 6.7}, [45.15, 40.94, 45.15, 40.94]], ['sampled case 2', {'zfw': 2463.0, 'zfm': 110534.3, 'tanks': [['t0', 20.1, 13.6], ['t1', 43.8, 5.9]], 'order': ['t0', 't1'], 'step': 5.0, 'density': 6.0}, [44.08, 44.08, 44.88, 44.88]], ['sampled case 3', {'zfw': 2219.0, 'zfm': 96894.2, 'tanks': [['t0', 66.8, 24.2], ['t1', 79.8, 16.2], ['t2', 19.7, 18.1], ['t3', 64.6, 8.8]], 'order': ['t0', 't2', 't3'], 'step': 4.0, 'density': 6.0}, [45.71, 44.48, 45.71, 45.18]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 14.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.35, 41.0, 42.35, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 16.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.11, 41.71, 43.11, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 32.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.82, 41.31, 41.82, 41.31]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 10.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.6, 43.0, 43.72, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 10.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.4}, [42.02, 41.0, 43.35, 41.0]], ['sampled case 1', {'zfw': 1686.0, 'zfm': 77019.4, 'tanks': [['t0', 89.3, 21.9]], 'order': ['t0'], 'step': 7.0, 'density': 6.7}, [49.17, 45.68, 49.17, 45.68]], ['sampled case 2', {'zfw': 2549.0, 'zfm': 101649.7, 'tanks': [['t0', 77.4, 9.3], ['t1', 16.9, 7.4]], 'order': ['t1', 't0', 't0'], 'step': 7.0, 'density': 6.7}, [40.33, 39.88, 40.77, 39.88]], ['sampled case 3', {'zfw': 2318.0, 'zfm': 101663.0, 'tanks': [['t0', 62.5, 5.6]], 'order': ['t0'], 'step': 7.0, 'density': 6.0}, [44.12, 43.86, 44.12, 43.86]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 15.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.4, 41.0, 42.4, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 17.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.2, 41.71, 43.2, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 40.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [42.08, 41.61, 42.08, 41.61]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 11.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.67, 43.0, 43.79, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 11.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.5}, [42.04, 41.0, 43.38, 41.0]], ['sampled case 1', {'zfw': 1752.0, 'zfm': 71508.9, 'tanks': [['t0', 30.0, 3.5], ['t1', 48.3, 29.7], ['t2', 16.7, 5.0]], 'order': ['t2', 't0'], 'step': 3.0, 'density': 6.0}, [41.01, 41.01, 41.51, 41.51]], ['sampled case 2', {'zfw': 2729.0, 'zfm': 113724.7, 'tanks': [['t0', 32.5, 27.5], ['t1', 78.7, 2.4], ['t2', 67.9, 21.9], ['t3', 49.7, 3.0]], 'order': ['t1'], 'step': 2.5, 'density': 6.0}, [42.53, 42.36, 42.53, 42.36]], ['sampled case 3', {'zfw': 1720.0, 'zfm': 69515.4, 'tanks': [['t0', 81.4, 24.5], ['t1', 86.0, 17.1], ['t2', 24.8, 14.0], ['t3', 24.3, 8.3]], 'order': ['t3', 't2', 't1', 't0'], 'step': 3.0, 'density': 6.7}, [44.88, 40.42, 46.39, 40.42]]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| aux then mains | [42.22, 41.0, 41.99, 41.0] | [42.22, 41.0, 42.22, 41.0] | Failed |
| uneven step remainder | [42.86, 41.71, 42.43, 42.0] | [42.86, 41.71, 42.86, 42.0] | Failed |
| unusable tank left | [40.97, 40.35, 40.77, 40.35] | [40.97, 40.35, 40.97, 40.35] | Failed |
| tank listed twice | [43.4, 43.0, 43.51, 43.0] | [43.4, 43.0, 43.51, 43.0] | Passed |
| single tank forward burn | [42.86, 43.38, 44.0, 44.0] | [42.86, 42.86, 44.0, 44.0] | Failed |
| CG excursion mid-sequence | [41.98, 41.0, 43.24, 41.0] | [41.98, 41.0, 43.24, 41.0] | Passed |
| sampled case 1 | [40.25, 40.31, 42.71, 42.71] | [40.25, 40.25, 42.71, 42.71] | Failed |
| sampled case 2 | [39.21, 39.25, 39.38, 39.38] | [39.21, 39.21, 39.38, 39.38] | Failed |
| sampled case 3 | [38.47, 38.36, 38.78, 38.78] | [38.47, 38.36, 38.78, 38.78] | Passed |
SHA-256 / 757ab910fb131e8daad817b30d1e2c5d7f1c25277d05a47441d7955a13228736
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
dens = x['density']
tanks = {n: [arm, g] for n, arm, g in x['tanks']}
w = x['zfw'] + sum(g for _, g in tanks.values()) * dens
m = x['zfm'] + sum(a * g for a, g in tanks.values()) * dens
cgs = [m / w]
for name in x['order']:
arm, g = tanks[name]
while g > 1e-9:
b = min(x['step'], g)
g -= b
w -= b * dens
m -= b * dens * arm
cgs.append(m / w)
tanks[name][1] = 0.0
return [round(cgs[0], 2), round(min(cgs), 2), round(max(cgs[1:] or cgs), 2), round(cgs[-1], 2)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 11.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.22, 41.0, 42.22, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 13.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [42.86, 41.71, 42.86, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 8.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [40.97, 40.35, 40.97, 40.35]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 7.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.4, 43.0, 43.51, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 7.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.1}, [41.98, 41.0, 43.24, 41.0]], ['sampled case 1', {'zfw': 2390.0, 'zfm': 102338.1, 'tanks': [['t0', 30.0, 8.6], ['t1', 25.3, 26.3], ['t2', 19.3, 27.1], ['t3', 41.2, 29.3]], 'order': ['t0', 't1', 't2'], 'step': 2.5, 'density': 6.0}, [40.25, 40.25, 42.71, 42.71]], ['sampled case 2', {'zfw': 2251.0, 'zfm': 88635.6, 'tanks': [['t0', 37.2, 28.4]], 'order': ['t0', 't0'], 'step': 7.0, 'density': 6.7}, [39.21, 39.21, 39.38, 39.38]], ['sampled case 3', {'zfw': 1718.0, 'zfm': 65994.7, 'tanks': [['t0', 43.9, 20.5], ['t1', 28.5, 13.0], ['t2', 50.3, 2.9]], 'order': ['t2', 't1'], 'step': 5.0, 'density': 6.0}, [38.47, 38.36, 38.78, 38.78]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 12.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.26, 41.0, 42.26, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 14.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [42.94, 41.71, 42.94, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 16.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.27, 40.69, 41.27, 40.69]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 8.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.47, 43.0, 43.58, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 8.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.2}, [41.99, 41.0, 43.28, 41.0]], ['sampled case 1', {'zfw': 1572.0, 'zfm': 63301.9, 'tanks': [['t0', 26.3, 24.8], ['t1', 70.0, 13.1], ['t2', 26.6, 28.2]], 'order': ['t1', 't0', 't2', 't0'], 'step': 4.0, 'density': 6.0}, [39.22, 37.95, 40.27, 40.27]], ['sampled case 2', {'zfw': 1505.0, 'zfm': 66323.5, 'tanks': [['t0', 43.2, 6.6], ['t1', 61.6, 21.6]], 'order': ['t1', 't0'], 'step': 2.5, 'density': 6.7}, [45.54, 44.04, 45.54, 44.07]], ['sampled case 3', {'zfw': 1742.0, 'zfm': 73409.0, 'tanks': [['t0', 75.9, 19.7]], 'order': ['t0', 't0'], 'step': 2.5, 'density': 6.7}, [44.52, 42.14, 44.52, 42.14]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 13.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.31, 41.0, 42.31, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 15.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.03, 41.71, 43.03, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 24.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.55, 41.01, 41.55, 41.01]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 9.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.53, 43.0, 43.65, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 9.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.3}, [42.01, 41.0, 43.31, 41.0]], ['sampled case 1', {'zfw': 1563.0, 'zfm': 63987.5, 'tanks': [['t0', 86.2, 17.0], ['t1', 83.0, 7.5]], 'order': ['t1', 't1', 't0'], 'step': 7.0, 'density': 6.7}, [45.15, 40.94, 45.15, 40.94]], ['sampled case 2', {'zfw': 2463.0, 'zfm': 110534.3, 'tanks': [['t0', 20.1, 13.6], ['t1', 43.8, 5.9]], 'order': ['t0', 't1'], 'step': 5.0, 'density': 6.0}, [44.08, 44.08, 44.88, 44.88]], ['sampled case 3', {'zfw': 2219.0, 'zfm': 96894.2, 'tanks': [['t0', 66.8, 24.2], ['t1', 79.8, 16.2], ['t2', 19.7, 18.1], ['t3', 64.6, 8.8]], 'order': ['t0', 't2', 't3'], 'step': 4.0, 'density': 6.0}, [45.71, 44.48, 45.71, 45.18]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 14.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.35, 41.0, 42.35, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 16.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.11, 41.71, 43.11, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 32.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.82, 41.31, 41.82, 41.31]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 10.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.6, 43.0, 43.72, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 10.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.4}, [42.02, 41.0, 43.35, 41.0]], ['sampled case 1', {'zfw': 1686.0, 'zfm': 77019.4, 'tanks': [['t0', 89.3, 21.9]], 'order': ['t0'], 'step': 7.0, 'density': 6.7}, [49.17, 45.68, 49.17, 45.68]], ['sampled case 2', {'zfw': 2549.0, 'zfm': 101649.7, 'tanks': [['t0', 77.4, 9.3], ['t1', 16.9, 7.4]], 'order': ['t1', 't0', 't0'], 'step': 7.0, 'density': 6.7}, [40.33, 39.88, 40.77, 39.88]], ['sampled case 3', {'zfw': 2318.0, 'zfm': 101663.0, 'tanks': [['t0', 62.5, 5.6]], 'order': ['t0'], 'step': 7.0, 'density': 6.0}, [44.12, 43.86, 44.12, 43.86]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 15.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.4, 41.0, 42.4, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 17.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.2, 41.71, 43.2, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 40.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [42.08, 41.61, 42.08, 41.61]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 11.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.67, 43.0, 43.79, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 11.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.5}, [42.04, 41.0, 43.38, 41.0]], ['sampled case 1', {'zfw': 1752.0, 'zfm': 71508.9, 'tanks': [['t0', 30.0, 3.5], ['t1', 48.3, 29.7], ['t2', 16.7, 5.0]], 'order': ['t2', 't0'], 'step': 3.0, 'density': 6.0}, [41.01, 41.01, 41.51, 41.51]], ['sampled case 2', {'zfw': 2729.0, 'zfm': 113724.7, 'tanks': [['t0', 32.5, 27.5], ['t1', 78.7, 2.4], ['t2', 67.9, 21.9], ['t3', 49.7, 3.0]], 'order': ['t1'], 'step': 2.5, 'density': 6.0}, [42.53, 42.36, 42.53, 42.36]], ['sampled case 3', {'zfw': 1720.0, 'zfm': 69515.4, 'tanks': [['t0', 81.4, 24.5], ['t1', 86.0, 17.1], ['t2', 24.8, 14.0], ['t3', 24.3, 8.3]], 'order': ['t3', 't2', 't1', 't0'], 'step': 3.0, 'density': 6.7}, [44.88, 40.42, 46.39, 40.42]]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| aux then mains | [42.22, 41.0, 41.99, 41.0] | [42.22, 41.0, 42.22, 41.0] | Failed |
| uneven step remainder | [42.86, 41.71, 42.43, 42.0] | [42.86, 41.71, 42.86, 42.0] | Failed |
| unusable tank left | [40.97, 40.35, 40.77, 40.35] | [40.97, 40.35, 40.97, 40.35] | Failed |
| tank listed twice | [43.4, 43.0, 43.51, 43.0] | [43.4, 43.0, 43.51, 43.0] | Passed |
| single tank forward burn | [42.86, 42.86, 44.0, 44.0] | [42.86, 42.86, 44.0, 44.0] | Passed |
| CG excursion mid-sequence | [41.98, 41.0, 43.24, 41.0] | [41.98, 41.0, 43.24, 41.0] | Passed |
| sampled case 1 | [40.25, 40.25, 42.71, 42.71] | [40.25, 40.25, 42.71, 42.71] | Passed |
| sampled case 2 | [39.21, 39.21, 39.38, 39.38] | [39.21, 39.21, 39.38, 39.38] | Passed |
| sampled case 3 | [38.47, 38.36, 38.78, 38.78] | [38.47, 38.36, 38.78, 38.78] | Passed |
SHA-256 / 6dcbe6ea42fa6c6a63cbc8106eb4d67f8637d77c2c5d2f1d091ad180de7fec7f
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
dens = x['density']
tanks = {n: [arm, g] for n, arm, g in x['tanks']}
w = x['zfw'] + sum(g for _, g in tanks.values()) * dens
m = x['zfm'] + sum(a * g for a, g in tanks.values()) * dens
cgs = [m / w]
for name in x['order']:
arm, g = tanks[name]
while g > 1e-9:
b = min(x['step'], g)
g -= b
w -= b * dens
m -= b * dens * arm
cgs.append(m / w)
tanks[name][1] = 0.0
return [round(cgs[0], 2), round(min(cgs), 2), round(max(cgs), 2), round(cgs[-1], 2)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 11.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.22, 41.0, 42.22, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 13.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [42.86, 41.71, 42.86, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 8.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [40.97, 40.35, 40.97, 40.35]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 7.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.4, 43.0, 43.51, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 7.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.1}, [41.98, 41.0, 43.24, 41.0]], ['sampled case 1', {'zfw': 2390.0, 'zfm': 102338.1, 'tanks': [['t0', 30.0, 8.6], ['t1', 25.3, 26.3], ['t2', 19.3, 27.1], ['t3', 41.2, 29.3]], 'order': ['t0', 't1', 't2'], 'step': 2.5, 'density': 6.0}, [40.25, 40.25, 42.71, 42.71]], ['sampled case 2', {'zfw': 2251.0, 'zfm': 88635.6, 'tanks': [['t0', 37.2, 28.4]], 'order': ['t0', 't0'], 'step': 7.0, 'density': 6.7}, [39.21, 39.21, 39.38, 39.38]], ['sampled case 3', {'zfw': 1718.0, 'zfm': 65994.7, 'tanks': [['t0', 43.9, 20.5], ['t1', 28.5, 13.0], ['t2', 50.3, 2.9]], 'order': ['t2', 't1'], 'step': 5.0, 'density': 6.0}, [38.47, 38.36, 38.78, 38.78]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 12.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.26, 41.0, 42.26, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 14.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [42.94, 41.71, 42.94, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 16.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.27, 40.69, 41.27, 40.69]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 8.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.47, 43.0, 43.58, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 8.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.2}, [41.99, 41.0, 43.28, 41.0]], ['sampled case 1', {'zfw': 1572.0, 'zfm': 63301.9, 'tanks': [['t0', 26.3, 24.8], ['t1', 70.0, 13.1], ['t2', 26.6, 28.2]], 'order': ['t1', 't0', 't2', 't0'], 'step': 4.0, 'density': 6.0}, [39.22, 37.95, 40.27, 40.27]], ['sampled case 2', {'zfw': 1505.0, 'zfm': 66323.5, 'tanks': [['t0', 43.2, 6.6], ['t1', 61.6, 21.6]], 'order': ['t1', 't0'], 'step': 2.5, 'density': 6.7}, [45.54, 44.04, 45.54, 44.07]], ['sampled case 3', {'zfw': 1742.0, 'zfm': 73409.0, 'tanks': [['t0', 75.9, 19.7]], 'order': ['t0', 't0'], 'step': 2.5, 'density': 6.7}, [44.52, 42.14, 44.52, 42.14]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 13.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.31, 41.0, 42.31, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 15.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.03, 41.71, 43.03, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 24.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.55, 41.01, 41.55, 41.01]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 9.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.53, 43.0, 43.65, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 9.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.3}, [42.01, 41.0, 43.31, 41.0]], ['sampled case 1', {'zfw': 1563.0, 'zfm': 63987.5, 'tanks': [['t0', 86.2, 17.0], ['t1', 83.0, 7.5]], 'order': ['t1', 't1', 't0'], 'step': 7.0, 'density': 6.7}, [45.15, 40.94, 45.15, 40.94]], ['sampled case 2', {'zfw': 2463.0, 'zfm': 110534.3, 'tanks': [['t0', 20.1, 13.6], ['t1', 43.8, 5.9]], 'order': ['t0', 't1'], 'step': 5.0, 'density': 6.0}, [44.08, 44.08, 44.88, 44.88]], ['sampled case 3', {'zfw': 2219.0, 'zfm': 96894.2, 'tanks': [['t0', 66.8, 24.2], ['t1', 79.8, 16.2], ['t2', 19.7, 18.1], ['t3', 64.6, 8.8]], 'order': ['t0', 't2', 't3'], 'step': 4.0, 'density': 6.0}, [45.71, 44.48, 45.71, 45.18]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 14.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.35, 41.0, 42.35, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 16.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.11, 41.71, 43.11, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 32.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [41.82, 41.31, 41.82, 41.31]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 10.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.6, 43.0, 43.72, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 10.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.4}, [42.02, 41.0, 43.35, 41.0]], ['sampled case 1', {'zfw': 1686.0, 'zfm': 77019.4, 'tanks': [['t0', 89.3, 21.9]], 'order': ['t0'], 'step': 7.0, 'density': 6.7}, [49.17, 45.68, 49.17, 45.68]], ['sampled case 2', {'zfw': 2549.0, 'zfm': 101649.7, 'tanks': [['t0', 77.4, 9.3], ['t1', 16.9, 7.4]], 'order': ['t1', 't0', 't0'], 'step': 7.0, 'density': 6.7}, [40.33, 39.88, 40.77, 39.88]], ['sampled case 3', {'zfw': 2318.0, 'zfm': 101663.0, 'tanks': [['t0', 62.5, 5.6]], 'order': ['t0'], 'step': 7.0, 'density': 6.0}, [44.12, 43.86, 44.12, 43.86]]], [['aux then mains', {'zfw': 2100.0, 'zfm': 86100.0, 'tanks': [['aux', 60.0, 15.0], ['left', 48.0, 20.0], ['right', 48.0, 20.0]], 'order': ['aux', 'left', 'right'], 'step': 5.0, 'density': 6.0}, [42.4, 41.0, 42.4, 41.0]], ['uneven step remainder', {'zfw': 2000.0, 'zfm': 84000.0, 'tanks': [['fwd', 30.0, 7.5], ['aft', 70.0, 17.0]], 'order': ['aft', 'fwd'], 'step': 5.0, 'density': 6.7}, [43.2, 41.71, 43.2, 42.0]], ['unusable tank left', {'zfw': 2000.0, 'zfm': 80000.0, 'tanks': [['main', 48.0, 30.0], ['tip', 55.0, 40.0]], 'order': ['main'], 'step': 10.0, 'density': 6.0}, [42.08, 41.61, 42.08, 41.61]], ['tank listed twice', {'zfw': 2200.0, 'zfm': 94600.0, 'tanks': [['a', 40.0, 12.0], ['b', 70.0, 11.0]], 'order': ['a', 'b', 'a'], 'step': 4.0, 'density': 6.0}, [43.67, 43.0, 43.79, 43.0]], ['single tank forward burn', {'zfw': 1800.0, 'zfm': 79200.0, 'tanks': [['nose', 20.0, 15.0]], 'order': ['nose'], 'step': 11.0, 'density': 6.0}, [42.86, 42.86, 44.0, 44.0]], ['CG excursion mid-sequence', {'zfw': 2000.0, 'zfm': 82000.0, 'tanks': [['fwd', 20.0, 20.0], ['aft', 80.0, 20.0]], 'order': ['fwd', 'aft'], 'step': 5.0, 'density': 6.5}, [42.04, 41.0, 43.38, 41.0]], ['sampled case 1', {'zfw': 1752.0, 'zfm': 71508.9, 'tanks': [['t0', 30.0, 3.5], ['t1', 48.3, 29.7], ['t2', 16.7, 5.0]], 'order': ['t2', 't0'], 'step': 3.0, 'density': 6.0}, [41.01, 41.01, 41.51, 41.51]], ['sampled case 2', {'zfw': 2729.0, 'zfm': 113724.7, 'tanks': [['t0', 32.5, 27.5], ['t1', 78.7, 2.4], ['t2', 67.9, 21.9], ['t3', 49.7, 3.0]], 'order': ['t1'], 'step': 2.5, 'density': 6.0}, [42.53, 42.36, 42.53, 42.36]], ['sampled case 3', {'zfw': 1720.0, 'zfm': 69515.4, 'tanks': [['t0', 81.4, 24.5], ['t1', 86.0, 17.1], ['t2', 24.8, 14.0], ['t3', 24.3, 8.3]], 'order': ['t3', 't2', 't1', 't0'], 'step': 3.0, 'density': 6.7}, [44.88, 40.42, 46.39, 40.42]]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| aux then mains | [42.22, 41.0, 42.22, 41.0] | [42.22, 41.0, 42.22, 41.0] | Passed |
| uneven step remainder | [42.86, 41.71, 42.86, 42.0] | [42.86, 41.71, 42.86, 42.0] | Passed |
| unusable tank left | [40.97, 40.35, 40.97, 40.35] | [40.97, 40.35, 40.97, 40.35] | Passed |
| tank listed twice | [43.4, 43.0, 43.51, 43.0] | [43.4, 43.0, 43.51, 43.0] | Passed |
| single tank forward burn | [42.86, 42.86, 44.0, 44.0] | [42.86, 42.86, 44.0, 44.0] | Passed |
| CG excursion mid-sequence | [41.98, 41.0, 43.24, 41.0] | [41.98, 41.0, 43.24, 41.0] | Passed |
| sampled case 1 | [40.25, 40.25, 42.71, 42.71] | [40.25, 40.25, 42.71, 42.71] | Passed |
| sampled case 2 | [39.21, 39.21, 39.38, 39.38] | [39.21, 39.21, 39.38, 39.38] | Passed |
| sampled case 3 | [38.47, 38.36, 38.78, 38.78] | [38.47, 38.36, 38.78, 38.78] | Passed |
SHA-256 / 41f510c5dc18ee31864f4acdc8f2b3077ce62773c821d11dc9e8e6ea7c44c433
Verification & scope
A deterministic toy loading model with stipulated constants; it is not an approved aircraft flight manual procedure and makes no claim of regulatory 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:47:39.808207+00:00.
Case digest / b882cb9b9eb4bf4da4b46426f42b689804fb27600020c3b6e903489404123a64