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.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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