FAILURE MAP
← Case archive

FA-68771 / Toll and parking fee computation / Open access

Demand-responsive meter rate adjustment: unchanged rates are not clamped · case 01

Demand-responsive meter rate adjustment returns a wrong result when unchanged rates are not clamped.

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

ROOT CAUSE

Decreases can push the rate below the minimum.

VERIFIED REPAIR

Restore the rate bounds rule so that the step reads `max(x['min_rate'], min(x['max_rate'], r))`.

Unsuccessful approach: Skipping the clamp for unchanged rates keeps an out-of-range legacy rate.

Case contract

Input {rate, occupancy: hourly percentages, hi, lo, step, min_rate, max_rate, min_samples}. With fewer than min_samples samples the rate is unchanged. Otherwise the exact mean occupancy above hi raises the rate by step, below lo lowers it by step; the result is always clamped to [min_rate, max_rate].

Why this case matters

Fee engines bill customers in integer cents; a wrong boundary, rounding stage or cap scope silently over- or under-charges.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(x):
    occ = x['occupancy']
    if len(occ) < x['min_samples']:
        return x['rate']
    avg = Fraction(sum(occ), len(occ))
    r = x['rate']
    if avg > x['hi']:
        r += x['step']
    elif avg < x['lo']:
        r -= x['step']
    return min(x['max_rate'], r)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'rate': 300, 'occupancy': [80, 80], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 800, 'occupancy': [70, 70, 70], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 25, 'occupancy': [59, 81, 60, 80, 81, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 50), ({'rate': 300, 'occupancy': [80, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325), ({'rate': 50, 'occupancy': [80, 60, 81, 80], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 700, 'min_samples': 2}, 100), ({'rate': 75, 'occupancy': [60, 59, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 700, 'min_samples': 2}, 100), ({'rate': 350, 'occupancy': [81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 700, 'min_samples': 2}, 350), ({'rate': 550, 'occupancy': [59, 59, 80, 90, 81], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 3}, 550)], [({'rate': 125, 'occupancy': [59, 87], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 700, 'min_samples': 3}, 125), ({'rate': 25, 'occupancy': [80, 45, 59, 59, 59, 60], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 50), ({'rate': 800, 'occupancy': [60, 80, 60, 60], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 75, 'occupancy': [60, 59], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100), ({'rate': 800, 'occupancy': [70, 70, 70], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 300, 'occupancy': [80, 80], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 300, 'occupancy': [60, 60, 60], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 50, 'occupancy': [80, 81, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 700, 'min_samples': 2}, 100)], [({'rate': 200, 'occupancy': [80], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 200), ({'rate': 75, 'occupancy': [96, 60, 81, 59, 59, 60], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 3}, 100), ({'rate': 300, 'occupancy': [80, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325), ({'rate': 300, 'occupancy': [80, 80], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 25, 'occupancy': [54, 42, 60, 60], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 50), ({'rate': 300, 'occupancy': [60, 59], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 275), ({'rate': 650, 'occupancy': [80, 59, 60, 81, 59, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 600), ({'rate': 75, 'occupancy': [81, 80, 80, 81, 60], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100)], [({'rate': 275, 'occupancy': [54, 59, 81, 60], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 275), ({'rate': 625, 'occupancy': [80, 85, 80, 60, 74], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 25, 'occupancy': [80, 80, 60, 74, 80], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 700, 'min_samples': 2}, 50), ({'rate': 75, 'occupancy': [81, 72], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100), ({'rate': 25, 'occupancy': [52, 81, 60, 60, 60], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100), ({'rate': 300, 'occupancy': [80, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325), ({'rate': 300, 'occupancy': [80, 80], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 300, 'occupancy': [90, 90], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325)], [({'rate': 300, 'occupancy': [60, 59], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 275), ({'rate': 800, 'occupancy': [70, 70, 70], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 300, 'occupancy': [80, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325), ({'rate': 650, 'occupancy': [68, 80, 80, 75, 59], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 25, 'occupancy': [60, 59], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100), ({'rate': 475, 'occupancy': [80, 81, 81], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 700, 'min_samples': 2}, 525), ({'rate': 25, 'occupancy': [59, 60, 59, 60, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 700, 'min_samples': 2}, 50), ({'rate': 25, 'occupancy': [81, 81, 81, 59, 59], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100)]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check('fee oracle' + ' %d' % i, 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
fee oracle 0300300Passed
fee oracle 1600600Passed
fee oracle 22550Failed
fee oracle 3325325Passed
fee oracle 450100Failed
fee oracle 575100Failed
fee oracle 6350350Passed
fee oracle 7550550Passed

SHA-256 / ae8e973b34dee5a8b61afe7f3d90022c5ee0213716c84b0e78902a40ee89c380

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(x):
    occ = x['occupancy']
    if len(occ) < x['min_samples']:
        return x['rate']
    avg = Fraction(sum(occ), len(occ))
    r = x['rate']
    if avg > x['hi']:
        r += x['step']
    elif avg < x['lo']:
        r -= x['step']
    return max(x['min_rate'], min(x['max_rate'], r)) if r != x['rate'] else x['rate']
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'rate': 300, 'occupancy': [80, 80], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 800, 'occupancy': [70, 70, 70], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 25, 'occupancy': [59, 81, 60, 80, 81, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 50), ({'rate': 300, 'occupancy': [80, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325), ({'rate': 50, 'occupancy': [80, 60, 81, 80], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 700, 'min_samples': 2}, 100), ({'rate': 75, 'occupancy': [60, 59, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 700, 'min_samples': 2}, 100), ({'rate': 350, 'occupancy': [81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 700, 'min_samples': 2}, 350), ({'rate': 550, 'occupancy': [59, 59, 80, 90, 81], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 3}, 550)], [({'rate': 125, 'occupancy': [59, 87], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 700, 'min_samples': 3}, 125), ({'rate': 25, 'occupancy': [80, 45, 59, 59, 59, 60], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 50), ({'rate': 800, 'occupancy': [60, 80, 60, 60], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 75, 'occupancy': [60, 59], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100), ({'rate': 800, 'occupancy': [70, 70, 70], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 300, 'occupancy': [80, 80], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 300, 'occupancy': [60, 60, 60], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 50, 'occupancy': [80, 81, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 700, 'min_samples': 2}, 100)], [({'rate': 200, 'occupancy': [80], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 200), ({'rate': 75, 'occupancy': [96, 60, 81, 59, 59, 60], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 3}, 100), ({'rate': 300, 'occupancy': [80, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325), ({'rate': 300, 'occupancy': [80, 80], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 25, 'occupancy': [54, 42, 60, 60], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 50), ({'rate': 300, 'occupancy': [60, 59], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 275), ({'rate': 650, 'occupancy': [80, 59, 60, 81, 59, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 600), ({'rate': 75, 'occupancy': [81, 80, 80, 81, 60], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100)], [({'rate': 275, 'occupancy': [54, 59, 81, 60], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 275), ({'rate': 625, 'occupancy': [80, 85, 80, 60, 74], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 25, 'occupancy': [80, 80, 60, 74, 80], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 700, 'min_samples': 2}, 50), ({'rate': 75, 'occupancy': [81, 72], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100), ({'rate': 25, 'occupancy': [52, 81, 60, 60, 60], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100), ({'rate': 300, 'occupancy': [80, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325), ({'rate': 300, 'occupancy': [80, 80], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 300, 'occupancy': [90, 90], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325)], [({'rate': 300, 'occupancy': [60, 59], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 275), ({'rate': 800, 'occupancy': [70, 70, 70], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 300, 'occupancy': [80, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325), ({'rate': 650, 'occupancy': [68, 80, 80, 75, 59], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 25, 'occupancy': [60, 59], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100), ({'rate': 475, 'occupancy': [80, 81, 81], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 700, 'min_samples': 2}, 525), ({'rate': 25, 'occupancy': [59, 60, 59, 60, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 700, 'min_samples': 2}, 50), ({'rate': 25, 'occupancy': [81, 81, 81, 59, 59], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100)]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check('fee oracle' + ' %d' % i, 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
fee oracle 0300300Passed
fee oracle 1800600Failed
fee oracle 22550Failed
fee oracle 3325325Passed
fee oracle 450100Failed
fee oracle 575100Failed
fee oracle 6350350Passed
fee oracle 7550550Passed

SHA-256 / 649f65f06dc27c1b0eb3adbbcd70d2b6aa2852a3dddde1aed82f65ff9269f17f

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(x):
    occ = x['occupancy']
    if len(occ) < x['min_samples']:
        return x['rate']
    avg = Fraction(sum(occ), len(occ))
    r = x['rate']
    if avg > x['hi']:
        r += x['step']
    elif avg < x['lo']:
        r -= x['step']
    return max(x['min_rate'], min(x['max_rate'], r))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'rate': 300, 'occupancy': [80, 80], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 800, 'occupancy': [70, 70, 70], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 25, 'occupancy': [59, 81, 60, 80, 81, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 50), ({'rate': 300, 'occupancy': [80, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325), ({'rate': 50, 'occupancy': [80, 60, 81, 80], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 700, 'min_samples': 2}, 100), ({'rate': 75, 'occupancy': [60, 59, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 700, 'min_samples': 2}, 100), ({'rate': 350, 'occupancy': [81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 700, 'min_samples': 2}, 350), ({'rate': 550, 'occupancy': [59, 59, 80, 90, 81], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 3}, 550)], [({'rate': 125, 'occupancy': [59, 87], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 700, 'min_samples': 3}, 125), ({'rate': 25, 'occupancy': [80, 45, 59, 59, 59, 60], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 50), ({'rate': 800, 'occupancy': [60, 80, 60, 60], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 75, 'occupancy': [60, 59], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100), ({'rate': 800, 'occupancy': [70, 70, 70], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 300, 'occupancy': [80, 80], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 300, 'occupancy': [60, 60, 60], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 50, 'occupancy': [80, 81, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 700, 'min_samples': 2}, 100)], [({'rate': 200, 'occupancy': [80], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 200), ({'rate': 75, 'occupancy': [96, 60, 81, 59, 59, 60], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 3}, 100), ({'rate': 300, 'occupancy': [80, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325), ({'rate': 300, 'occupancy': [80, 80], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 25, 'occupancy': [54, 42, 60, 60], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 50), ({'rate': 300, 'occupancy': [60, 59], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 275), ({'rate': 650, 'occupancy': [80, 59, 60, 81, 59, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 600), ({'rate': 75, 'occupancy': [81, 80, 80, 81, 60], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100)], [({'rate': 275, 'occupancy': [54, 59, 81, 60], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 275), ({'rate': 625, 'occupancy': [80, 85, 80, 60, 74], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 25, 'occupancy': [80, 80, 60, 74, 80], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 50, 'max_rate': 700, 'min_samples': 2}, 50), ({'rate': 75, 'occupancy': [81, 72], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100), ({'rate': 25, 'occupancy': [52, 81, 60, 60, 60], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100), ({'rate': 300, 'occupancy': [80, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325), ({'rate': 300, 'occupancy': [80, 80], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 300), ({'rate': 300, 'occupancy': [90, 90], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325)], [({'rate': 300, 'occupancy': [60, 59], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 275), ({'rate': 800, 'occupancy': [70, 70, 70], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 300, 'occupancy': [80, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 2}, 325), ({'rate': 650, 'occupancy': [68, 80, 80, 75, 59], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 600, 'min_samples': 3}, 600), ({'rate': 25, 'occupancy': [60, 59], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100), ({'rate': 475, 'occupancy': [80, 81, 81], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 700, 'min_samples': 2}, 525), ({'rate': 25, 'occupancy': [59, 60, 59, 60, 81], 'hi': 80, 'lo': 60, 'step': 25, 'min_rate': 50, 'max_rate': 700, 'min_samples': 2}, 50), ({'rate': 25, 'occupancy': [81, 81, 81, 59, 59], 'hi': 80, 'lo': 60, 'step': 50, 'min_rate': 100, 'max_rate': 600, 'min_samples': 2}, 100)]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check('fee oracle' + ' %d' % i, 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
fee oracle 0300300Passed
fee oracle 1600600Passed
fee oracle 25050Passed
fee oracle 3325325Passed
fee oracle 4100100Passed
fee oracle 5100100Passed
fee oracle 6350350Passed
fee oracle 7550550Passed

SHA-256 / 849cbdfa6f5199a3c0785911705e341b7db81b7eba3bede030ecf4b39840145d

Verification & scope

A deterministic, bounded toy model with a stipulated contract; it makes no claim of conformance to any agency manual or standard. 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:48:05.417748+00:00.

Case digest / f14a63ea9635fe4b67adff5418a556d5409e594d53472f36e68f82d29b88d0d1