FAILURE MAP
← Case archive

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

Tidal coefficient classification: Full range is used where the half range belongs · case 01

Coefficients double and nearly every tide is clamped to 120.

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

ROOT CAUSE

The coefficient numerator uses the whole range rather than its half.

VERIFIED REPAIR

Divide the range by two before normalizing by U.

Unsuccessful approach: Using the high water height above mean level ignores asymmetric low waters.

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/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 [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.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, 'exceptional']), ('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 [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.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.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, 'exceptional']), ('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 [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 [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.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, '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 [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 [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 [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 [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 [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 [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.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, '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 [6.5, 0.9, 1.1, 3.6, 3.05][120, 'exceptional'][90, 'spring']Failed
tidal coefficient classification [5.2, 2.0, 2.1, 3.6, 3.05][103, 'spring'][52, 'mean']Failed
tidal coefficient classification [4.6, 2.6, 2.7, 3.6, 3.05][64, 'mean'][32, 'neap']Failed
tidal coefficient classification [7.4, 0.1, 0.3, 3.6, 3.05][120, 'exceptional'][118, 'exceptional']Failed
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][28, 'neap'][20, 'neap']Failed
tidal coefficient classification [6.0, 1.73, 1.73, 3.6, 3.05][120, 'exceptional'][70, 'spring']Failed

SHA-256 / ae9c803d6811b22f2d6c2a1aaa7bd37aff353e7fdf15aa1272cd481c222d1dc8

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*(hw-z0)/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 [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.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, 'exceptional']), ('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 [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.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.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, 'exceptional']), ('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 [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 [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.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, '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 [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 [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 [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 [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 [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 [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.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, '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 [6.5, 0.9, 1.1, 3.6, 3.05][95, 'spring'][90, 'spring']Failed
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][33, 'neap'][32, 'neap']Failed
tidal coefficient classification [7.4, 0.1, 0.3, 3.6, 3.05][120, 'exceptional'][118, 'exceptional']Failed
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
tidal coefficient classification [6.0, 1.73, 1.73, 3.6, 3.05][79, 'spring'][70, 'spring']Failed

SHA-256 / df00196007206686ad6bf52a6033bfcc5abd320ce0a0ba0d908eb8a0a0fb07f4

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 [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.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, 'exceptional']), ('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 [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.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.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, 'exceptional']), ('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 [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 [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.4, 0.1, 0.3, 3.6, 3.05]', [7.4, 0.1, 0.3, 3.6, 3.05], [118, '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 [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 [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 [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 [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 [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 [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.4, 1.0, 1.0, 3.2, 2.0]', [5.4, 1.0, 1.0, 3.2, 2.0], [110, '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 [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.4, 0.1, 0.3, 3.6, 3.05][118, 'exceptional'][118, 'exceptional']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
tidal coefficient classification [6.0, 1.73, 1.73, 3.6, 3.05][70, 'spring'][70, 'spring']Passed

SHA-256 / def98f0d103a351c431187be9bae5d634fdcd6b28c3495f35da593de680f9341

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.701525+00:00.

Case digest / e436bea09916f9a8dfaca47aaf101df823820f42307f17eb5ca987955ff0d251