FAILURE MAP
← Case archive

FA-69146 / Tide and marine navigation tables / Open access

Tidal coefficient classification: Spring test shadows the exceptional-tide class · case 01

Grandes marees are never flagged as exceptional.

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

ROOT CAUSE

The spring branch (c>=70) is tested before the exceptional branch (c>=110), so the latter is unreachable.

VERIFIED REPAIR

Test the exceptional threshold first.

Unsuccessful approach: Testing exceptional first but with a strict c>110 misses coefficient 110.

Case contract

Input [hw, lw_before, lw_after, z0, U]: range = hw - mean of the two flanking low waters; coefficient = floor(100*(range/2)/U + 0.5) clamped to [20,120]. Class: exceptional if coef>=110, else spring if coef>=70, neap if coef<=45, else mean. Return [coef, class]. z0 (mean level) is informational only.

Why this case matters

Tide tables and passage plans turn published predictions into go/no-go decisions about depth, clearance and timing.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    hw,lb,la,z0,U=x
    rng=hw-(lb+la)/2
    c=math.floor(100*(rng/2)/U+0.5)
    c=max(20,min(120,c))
    if c>=70: cls='spring'
    elif c>=110: cls='exceptional'
    elif c<=45: cls='neap'
    else: cls='mean'
    return [c,cls]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('tidal coefficient classification [7.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, 'exceptional']), ('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [6.5, 0.9, 1.1, 3.6, 3.05]', [6.5, 0.9, 1.1, 3.6, 3.05], [90, 'spring']), ('tidal coefficient classification [5.2, 2.0, 2.1, 3.6, 3.05]', [5.2, 2.0, 2.1, 3.6, 3.05], [52, 'mean']), ('tidal coefficient classification [4.6, 2.6, 2.7, 3.6, 3.05]', [4.6, 2.6, 2.7, 3.6, 3.05], [32, 'neap']), ('tidal coefficient classification [7.9, 0.0, 0.0, 3.6, 3.05]', [7.9, 0.0, 0.0, 3.6, 3.05], [120, 'exceptional']), ('tidal coefficient classification [3.9, 3.0, 3.1, 3.6, 3.05]', [3.9, 3.0, 3.1, 3.6, 3.05], [20, 'neap'])], [('tidal coefficient classification [7.9, 0.0, 0.0, 3.6, 3.05]', [7.9, 0.0, 0.0, 3.6, 3.05], [120, 'exceptional']), ('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [7.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, 'exceptional']), ('tidal coefficient classification [3.9, 3.0, 3.1, 3.6, 3.05]', [3.9, 3.0, 3.1, 3.6, 3.05], [20, 'neap']), ('tidal coefficient classification [6.0, 1.73, 1.73, 3.6, 3.05]', [6.0, 1.73, 1.73, 3.6, 3.05], [70, 'spring']), ('tidal coefficient classification [5.0, 2.255, 2.255, 3.6, 3.05]', [5.0, 2.255, 2.255, 3.6, 3.05], [45, 'neap']), ('tidal coefficient classification [5.0, 2.25, 2.25, 3.6, 3.05]', [5.0, 2.25, 2.25, 3.6, 3.05], [45, 'neap'])], [('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [6.0, 1.73, 1.73, 3.6, 3.05]', [6.0, 1.73, 1.73, 3.6, 3.05], [70, 'spring']), ('tidal coefficient classification [5.0, 2.255, 2.255, 3.6, 3.05]', [5.0, 2.255, 2.255, 3.6, 3.05], [45, 'neap']), ('tidal coefficient classification [5.0, 2.25, 2.25, 3.6, 3.05]', [5.0, 2.25, 2.25, 3.6, 3.05], [45, 'neap']), ('tidal coefficient classification [6.1, 1.3, 0.7, 3.6, 3.05]', [6.1, 1.3, 0.7, 3.6, 3.05], [84, 'spring']), ('tidal coefficient classification [6.3, 0.8, 1.6, 3.8, 3.05]', [6.3, 0.8, 1.6, 3.8, 3.05], [84, 'spring']), ('tidal coefficient classification [4.0, 1.0, 1.0, 2.4, 2.0]', [4.0, 1.0, 1.0, 2.4, 2.0], [75, 'spring'])], [('tidal coefficient classification [5.6, 0.9, 0.9, 3.2, 2.0]', [5.6, 0.9, 0.9, 3.2, 2.0], [117, 'exceptional']), ('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [6.1, 1.3, 0.7, 3.6, 3.05]', [6.1, 1.3, 0.7, 3.6, 3.05], [84, 'spring']), ('tidal coefficient classification [6.3, 0.8, 1.6, 3.8, 3.05]', [6.3, 0.8, 1.6, 3.8, 3.05], [84, 'spring']), ('tidal coefficient classification [4.0, 1.0, 1.0, 2.4, 2.0]', [4.0, 1.0, 1.0, 2.4, 2.0], [75, 'spring']), ('tidal coefficient classification [4.4, 1.6, 1.6, 2.9, 2.0]', [4.4, 1.6, 1.6, 2.9, 2.0], [70, 'spring']), ('tidal coefficient classification [3.8, 0.0, 2.0, 2.1, 2.0]', [3.8, 0.0, 2.0, 2.1, 2.0], [70, 'spring'])], [('tidal coefficient classification [6.2, 0.2, 0.4, 3.2, 2.3]', [6.2, 0.2, 0.4, 3.2, 2.3], [120, 'exceptional']), ('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [4.4, 1.6, 1.6, 2.9, 2.0]', [4.4, 1.6, 1.6, 2.9, 2.0], [70, 'spring']), ('tidal coefficient classification [3.8, 0.0, 2.0, 2.1, 2.0]', [3.8, 0.0, 2.0, 2.1, 2.0], [70, 'spring']), ('tidal coefficient classification [5.0, 1.46, 1.46, 3.2, 2.0]', [5.0, 1.46, 1.46, 3.2, 2.0], [89, 'spring']), ('tidal coefficient classification [5.0, 1.22, 1.22, 3.2, 2.0]', [5.0, 1.22, 1.22, 3.2, 2.0], [95, 'spring']), ('tidal coefficient classification [5.6, 0.9, 0.9, 3.2, 2.0]', [5.6, 0.9, 0.9, 3.2, 2.0], [117, 'exceptional'])]]
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
tidal coefficient classification [7.4, 0.1, 0.3, 3.6, 3.05][118, 'spring'][118, 'exceptional']Failed
tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0][110, 'spring'][110, 'exceptional']Failed
tidal coefficient classification [6.5, 0.9, 1.1, 3.6, 3.05][90, 'spring'][90, 'spring']Passed
tidal coefficient classification [5.2, 2.0, 2.1, 3.6, 3.05][52, 'mean'][52, 'mean']Passed
tidal coefficient classification [4.6, 2.6, 2.7, 3.6, 3.05][32, 'neap'][32, 'neap']Passed
tidal coefficient classification [7.9, 0.0, 0.0, 3.6, 3.05][120, 'spring'][120, 'exceptional']Failed
tidal coefficient classification [3.9, 3.0, 3.1, 3.6, 3.05][20, 'neap'][20, 'neap']Passed

SHA-256 / 23653be63adb60649a91d03ef32985ca535695833d7102b0bbee4f63fb33bc9e

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    hw,lb,la,z0,U=x
    rng=hw-(lb+la)/2
    c=math.floor(100*(rng/2)/U+0.5)
    c=max(20,min(120,c))
    if c>110: cls='exceptional'
    elif c>=70: cls='spring'
    elif c<=45: cls='neap'
    else: cls='mean'
    return [c,cls]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('tidal coefficient classification [7.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, 'exceptional']), ('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [6.5, 0.9, 1.1, 3.6, 3.05]', [6.5, 0.9, 1.1, 3.6, 3.05], [90, 'spring']), ('tidal coefficient classification [5.2, 2.0, 2.1, 3.6, 3.05]', [5.2, 2.0, 2.1, 3.6, 3.05], [52, 'mean']), ('tidal coefficient classification [4.6, 2.6, 2.7, 3.6, 3.05]', [4.6, 2.6, 2.7, 3.6, 3.05], [32, 'neap']), ('tidal coefficient classification [7.9, 0.0, 0.0, 3.6, 3.05]', [7.9, 0.0, 0.0, 3.6, 3.05], [120, 'exceptional']), ('tidal coefficient classification [3.9, 3.0, 3.1, 3.6, 3.05]', [3.9, 3.0, 3.1, 3.6, 3.05], [20, 'neap'])], [('tidal coefficient classification [7.9, 0.0, 0.0, 3.6, 3.05]', [7.9, 0.0, 0.0, 3.6, 3.05], [120, 'exceptional']), ('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [7.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, 'exceptional']), ('tidal coefficient classification [3.9, 3.0, 3.1, 3.6, 3.05]', [3.9, 3.0, 3.1, 3.6, 3.05], [20, 'neap']), ('tidal coefficient classification [6.0, 1.73, 1.73, 3.6, 3.05]', [6.0, 1.73, 1.73, 3.6, 3.05], [70, 'spring']), ('tidal coefficient classification [5.0, 2.255, 2.255, 3.6, 3.05]', [5.0, 2.255, 2.255, 3.6, 3.05], [45, 'neap']), ('tidal coefficient classification [5.0, 2.25, 2.25, 3.6, 3.05]', [5.0, 2.25, 2.25, 3.6, 3.05], [45, 'neap'])], [('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [6.0, 1.73, 1.73, 3.6, 3.05]', [6.0, 1.73, 1.73, 3.6, 3.05], [70, 'spring']), ('tidal coefficient classification [5.0, 2.255, 2.255, 3.6, 3.05]', [5.0, 2.255, 2.255, 3.6, 3.05], [45, 'neap']), ('tidal coefficient classification [5.0, 2.25, 2.25, 3.6, 3.05]', [5.0, 2.25, 2.25, 3.6, 3.05], [45, 'neap']), ('tidal coefficient classification [6.1, 1.3, 0.7, 3.6, 3.05]', [6.1, 1.3, 0.7, 3.6, 3.05], [84, 'spring']), ('tidal coefficient classification [6.3, 0.8, 1.6, 3.8, 3.05]', [6.3, 0.8, 1.6, 3.8, 3.05], [84, 'spring']), ('tidal coefficient classification [4.0, 1.0, 1.0, 2.4, 2.0]', [4.0, 1.0, 1.0, 2.4, 2.0], [75, 'spring'])], [('tidal coefficient classification [5.6, 0.9, 0.9, 3.2, 2.0]', [5.6, 0.9, 0.9, 3.2, 2.0], [117, 'exceptional']), ('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [6.1, 1.3, 0.7, 3.6, 3.05]', [6.1, 1.3, 0.7, 3.6, 3.05], [84, 'spring']), ('tidal coefficient classification [6.3, 0.8, 1.6, 3.8, 3.05]', [6.3, 0.8, 1.6, 3.8, 3.05], [84, 'spring']), ('tidal coefficient classification [4.0, 1.0, 1.0, 2.4, 2.0]', [4.0, 1.0, 1.0, 2.4, 2.0], [75, 'spring']), ('tidal coefficient classification [4.4, 1.6, 1.6, 2.9, 2.0]', [4.4, 1.6, 1.6, 2.9, 2.0], [70, 'spring']), ('tidal coefficient classification [3.8, 0.0, 2.0, 2.1, 2.0]', [3.8, 0.0, 2.0, 2.1, 2.0], [70, 'spring'])], [('tidal coefficient classification [6.2, 0.2, 0.4, 3.2, 2.3]', [6.2, 0.2, 0.4, 3.2, 2.3], [120, 'exceptional']), ('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [4.4, 1.6, 1.6, 2.9, 2.0]', [4.4, 1.6, 1.6, 2.9, 2.0], [70, 'spring']), ('tidal coefficient classification [3.8, 0.0, 2.0, 2.1, 2.0]', [3.8, 0.0, 2.0, 2.1, 2.0], [70, 'spring']), ('tidal coefficient classification [5.0, 1.46, 1.46, 3.2, 2.0]', [5.0, 1.46, 1.46, 3.2, 2.0], [89, 'spring']), ('tidal coefficient classification [5.0, 1.22, 1.22, 3.2, 2.0]', [5.0, 1.22, 1.22, 3.2, 2.0], [95, 'spring']), ('tidal coefficient classification [5.6, 0.9, 0.9, 3.2, 2.0]', [5.6, 0.9, 0.9, 3.2, 2.0], [117, 'exceptional'])]]
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
tidal coefficient classification [7.4, 0.1, 0.3, 3.6, 3.05][118, 'exceptional'][118, 'exceptional']Passed
tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0][110, 'spring'][110, 'exceptional']Failed
tidal coefficient classification [6.5, 0.9, 1.1, 3.6, 3.05][90, 'spring'][90, 'spring']Passed
tidal coefficient classification [5.2, 2.0, 2.1, 3.6, 3.05][52, 'mean'][52, 'mean']Passed
tidal coefficient classification [4.6, 2.6, 2.7, 3.6, 3.05][32, 'neap'][32, 'neap']Passed
tidal coefficient classification [7.9, 0.0, 0.0, 3.6, 3.05][120, 'exceptional'][120, 'exceptional']Passed
tidal coefficient classification [3.9, 3.0, 3.1, 3.6, 3.05][20, 'neap'][20, 'neap']Passed

SHA-256 / 11254622f7a81e4f66444df72fb9ba6be8014f2ac426d3671737b01ef87b48d9

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    hw,lb,la,z0,U=x
    rng=hw-(lb+la)/2
    c=math.floor(100*(rng/2)/U+0.5)
    c=max(20,min(120,c))
    if c>=110: cls='exceptional'
    elif c>=70: cls='spring'
    elif c<=45: cls='neap'
    else: cls='mean'
    return [c,cls]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('tidal coefficient classification [7.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, 'exceptional']), ('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [6.5, 0.9, 1.1, 3.6, 3.05]', [6.5, 0.9, 1.1, 3.6, 3.05], [90, 'spring']), ('tidal coefficient classification [5.2, 2.0, 2.1, 3.6, 3.05]', [5.2, 2.0, 2.1, 3.6, 3.05], [52, 'mean']), ('tidal coefficient classification [4.6, 2.6, 2.7, 3.6, 3.05]', [4.6, 2.6, 2.7, 3.6, 3.05], [32, 'neap']), ('tidal coefficient classification [7.9, 0.0, 0.0, 3.6, 3.05]', [7.9, 0.0, 0.0, 3.6, 3.05], [120, 'exceptional']), ('tidal coefficient classification [3.9, 3.0, 3.1, 3.6, 3.05]', [3.9, 3.0, 3.1, 3.6, 3.05], [20, 'neap'])], [('tidal coefficient classification [7.9, 0.0, 0.0, 3.6, 3.05]', [7.9, 0.0, 0.0, 3.6, 3.05], [120, 'exceptional']), ('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [7.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, 'exceptional']), ('tidal coefficient classification [3.9, 3.0, 3.1, 3.6, 3.05]', [3.9, 3.0, 3.1, 3.6, 3.05], [20, 'neap']), ('tidal coefficient classification [6.0, 1.73, 1.73, 3.6, 3.05]', [6.0, 1.73, 1.73, 3.6, 3.05], [70, 'spring']), ('tidal coefficient classification [5.0, 2.255, 2.255, 3.6, 3.05]', [5.0, 2.255, 2.255, 3.6, 3.05], [45, 'neap']), ('tidal coefficient classification [5.0, 2.25, 2.25, 3.6, 3.05]', [5.0, 2.25, 2.25, 3.6, 3.05], [45, 'neap'])], [('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [6.0, 1.73, 1.73, 3.6, 3.05]', [6.0, 1.73, 1.73, 3.6, 3.05], [70, 'spring']), ('tidal coefficient classification [5.0, 2.255, 2.255, 3.6, 3.05]', [5.0, 2.255, 2.255, 3.6, 3.05], [45, 'neap']), ('tidal coefficient classification [5.0, 2.25, 2.25, 3.6, 3.05]', [5.0, 2.25, 2.25, 3.6, 3.05], [45, 'neap']), ('tidal coefficient classification [6.1, 1.3, 0.7, 3.6, 3.05]', [6.1, 1.3, 0.7, 3.6, 3.05], [84, 'spring']), ('tidal coefficient classification [6.3, 0.8, 1.6, 3.8, 3.05]', [6.3, 0.8, 1.6, 3.8, 3.05], [84, 'spring']), ('tidal coefficient classification [4.0, 1.0, 1.0, 2.4, 2.0]', [4.0, 1.0, 1.0, 2.4, 2.0], [75, 'spring'])], [('tidal coefficient classification [5.6, 0.9, 0.9, 3.2, 2.0]', [5.6, 0.9, 0.9, 3.2, 2.0], [117, 'exceptional']), ('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [6.1, 1.3, 0.7, 3.6, 3.05]', [6.1, 1.3, 0.7, 3.6, 3.05], [84, 'spring']), ('tidal coefficient classification [6.3, 0.8, 1.6, 3.8, 3.05]', [6.3, 0.8, 1.6, 3.8, 3.05], [84, 'spring']), ('tidal coefficient classification [4.0, 1.0, 1.0, 2.4, 2.0]', [4.0, 1.0, 1.0, 2.4, 2.0], [75, 'spring']), ('tidal coefficient classification [4.4, 1.6, 1.6, 2.9, 2.0]', [4.4, 1.6, 1.6, 2.9, 2.0], [70, 'spring']), ('tidal coefficient classification [3.8, 0.0, 2.0, 2.1, 2.0]', [3.8, 0.0, 2.0, 2.1, 2.0], [70, 'spring'])], [('tidal coefficient classification [6.2, 0.2, 0.4, 3.2, 2.3]', [6.2, 0.2, 0.4, 3.2, 2.3], [120, 'exceptional']), ('tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, 'exceptional']), ('tidal coefficient classification [4.4, 1.6, 1.6, 2.9, 2.0]', [4.4, 1.6, 1.6, 2.9, 2.0], [70, 'spring']), ('tidal coefficient classification [3.8, 0.0, 2.0, 2.1, 2.0]', [3.8, 0.0, 2.0, 2.1, 2.0], [70, 'spring']), ('tidal coefficient classification [5.0, 1.46, 1.46, 3.2, 2.0]', [5.0, 1.46, 1.46, 3.2, 2.0], [89, 'spring']), ('tidal coefficient classification [5.0, 1.22, 1.22, 3.2, 2.0]', [5.0, 1.22, 1.22, 3.2, 2.0], [95, 'spring']), ('tidal coefficient classification [5.6, 0.9, 0.9, 3.2, 2.0]', [5.6, 0.9, 0.9, 3.2, 2.0], [117, 'exceptional'])]]
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
tidal coefficient classification [7.4, 0.1, 0.3, 3.6, 3.05][118, 'exceptional'][118, 'exceptional']Passed
tidal coefficient classification [5.4, 1.0, 1.0, 3.2, 2.0][110, 'exceptional'][110, 'exceptional']Passed
tidal coefficient classification [6.5, 0.9, 1.1, 3.6, 3.05][90, 'spring'][90, 'spring']Passed
tidal coefficient classification [5.2, 2.0, 2.1, 3.6, 3.05][52, 'mean'][52, 'mean']Passed
tidal coefficient classification [4.6, 2.6, 2.7, 3.6, 3.05][32, 'neap'][32, 'neap']Passed
tidal coefficient classification [7.9, 0.0, 0.0, 3.6, 3.05][120, 'exceptional'][120, 'exceptional']Passed
tidal coefficient classification [3.9, 3.0, 3.1, 3.6, 3.05][20, 'neap'][20, 'neap']Passed

SHA-256 / d64a65ef2200982c676467f5e5ea025930ed3ed8de0248b8b8b7e863254697b8

Verification & scope

A deterministic toy model with stipulated rules and constants; not certified hydrographic software or a substitute for official tide tables. 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:08.735978+00:00.

Case digest / a2bfccca61145e10061d937e3d9860e7e7e6df7750716c4654a6cdd439bff4bd