FA-69226 / Tide and marine navigation tables / Open access
Light geographic and visible range: Equal ranges are labelled geographic · case 01
The limiting factor flips when the two ranges coincide.
ROOT CAUSE
The label test uses <= so a tie is attributed to the horizon.
VERIFIED REPAIR
Label geographic only when strictly less than nominal.
Unsuccessful approach: Comparing a rounded geographic range with the nominal range mislabels near-ties.
Case contract
Input [he, hl, nominal, mhws, tide]: observer height of eye (m), light elevation charted above MHWS (m), nominal range (nm), MHWS and current tide above datum. Effective light height = hl+(mhws-tide). Geographic range = 2.08*(sqrt(he)+sqrt(effective)). Visible range = min(geographic, nominal); the limit is "geographic" when geographic<nominal else "luminous". Return [geo rounded 1, visible rounded 1, limit].
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):
he,hl,nom,mhws,tide=x
hle=hl+(mhws-tide)
geo=2.08*(math.sqrt(he)+math.sqrt(hle))
vis=min(geo,nom)
lim='geographic' if geo<=nom else 'luminous'
return [round(geo,1),round(vis,1),lim]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('light geographic and visible range [16, 36, 20.8, 3.0, 3.0]', [16, 36, 20.8, 3.0, 3.0], [20.8, 20.8, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [3, 25, 18, 4.5, 1.0]', [3, 25, 18, 4.5, 1.0], [14.7, 14.7, 'geographic']), ('light geographic and visible range [3, 25, 10, 4.5, 1.0]', [3, 25, 10, 4.5, 1.0], [14.7, 10, 'luminous']), ('light geographic and visible range [9, 64, 23, 5.0, 5.0]', [9, 64, 23, 5.0, 5.0], [22.9, 22.9, 'geographic']), ('light geographic and visible range [1.5, 12, 20, 4.0, 0.5]', [1.5, 12, 20, 4.0, 0.5], [10.7, 10.7, 'geographic']), ('light geographic and visible range [4, 9, 10.4, 2.0, 2.0]', [4, 9, 10.4, 2.0, 2.0], [10.4, 10.4, 'luminous'])], [('light geographic and visible range [4, 9, 10.4, 2.0, 2.0]', [4, 9, 10.4, 2.0, 2.0], [10.4, 10.4, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [1.5, 12, 20, 4.0, 0.5]', [1.5, 12, 20, 4.0, 0.5], [10.7, 10.7, 'geographic']), ('light geographic and visible range [16, 36, 20.8, 3.0, 3.0]', [16, 36, 20.8, 3.0, 3.0], [20.8, 20.8, 'luminous']), ('light geographic and visible range [2, 40, 15, 4.0, 6.0]', [2, 40, 15, 4.0, 6.0], [15.8, 15, 'luminous']), ('light geographic and visible range [12, 80, 30, 5.0, 2.0]', [12, 80, 30, 5.0, 2.0], [26.2, 26.2, 'geographic']), ('light geographic and visible range [5, 5, 6, 3.0, 1.0]', [5, 5, 6, 3.0, 1.0], [10.2, 6, 'luminous'])], [('light geographic and visible range [4, 16, 12.48, 3.0, 3.0]', [4, 16, 12.48, 3.0, 3.0], [12.5, 12.5, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [2, 40, 15, 4.0, 6.0]', [2, 40, 15, 4.0, 6.0], [15.8, 15, 'luminous']), ('light geographic and visible range [12, 80, 30, 5.0, 2.0]', [12, 80, 30, 5.0, 2.0], [26.2, 26.2, 'geographic']), ('light geographic and visible range [5, 5, 6, 3.0, 1.0]', [5, 5, 6, 3.0, 1.0], [10.2, 6, 'luminous']), ('light geographic and visible range [25, 100, 28, 4.0, 4.0]', [25, 100, 28, 4.0, 4.0], [31.2, 28, 'luminous']), ('light geographic and visible range [3, 25, 18, 4.5, 1.0]', [3, 25, 18, 4.5, 1.0], [14.7, 14.7, 'geographic'])], [('light geographic and visible range [16, 36, 20.8, 3.0, 3.0]', [16, 36, 20.8, 3.0, 3.0], [20.8, 20.8, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [25, 100, 28, 4.0, 4.0]', [25, 100, 28, 4.0, 4.0], [31.2, 28, 'luminous']), ('light geographic and visible range [4, 16, 12.48, 3.0, 3.0]', [4, 16, 12.48, 3.0, 3.0], [12.5, 12.5, 'luminous']), ('light geographic and visible range [3, 25, 18, 4.5, 1.0]', [3, 25, 18, 4.5, 1.0], [14.7, 14.7, 'geographic']), ('light geographic and visible range [3, 25, 10, 4.5, 1.0]', [3, 25, 10, 4.5, 1.0], [14.7, 10, 'luminous']), ('light geographic and visible range [9, 64, 23, 5.0, 5.0]', [9, 64, 23, 5.0, 5.0], [22.9, 22.9, 'geographic'])], [('light geographic and visible range [4, 9, 10.4, 2.0, 2.0]', [4, 9, 10.4, 2.0, 2.0], [10.4, 10.4, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [3, 25, 18, 4.5, 1.0]', [3, 25, 18, 4.5, 1.0], [14.7, 14.7, 'geographic']), ('light geographic and visible range [3, 25, 10, 4.5, 1.0]', [3, 25, 10, 4.5, 1.0], [14.7, 10, 'luminous']), ('light geographic and visible range [9, 64, 23, 5.0, 5.0]', [9, 64, 23, 5.0, 5.0], [22.9, 22.9, 'geographic']), ('light geographic and visible range [1.5, 12, 20, 4.0, 0.5]', [1.5, 12, 20, 4.0, 0.5], [10.7, 10.7, 'geographic']), ('light geographic and visible range [16, 36, 20.8, 3.0, 3.0]', [16, 36, 20.8, 3.0, 3.0], [20.8, 20.8, 'luminous'])]]
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 |
|---|---|---|---|
| light geographic and visible range [16, 36, 20.8, 3.0, 3.0] | [20.8, 20.8, 'geographic'] | [20.8, 20.8, 'luminous'] | Failed |
| light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0] | [10.5, 10.5, 'geographic'] | [10.5, 10.5, 'geographic'] | Passed |
| light geographic and visible range [3, 25, 18, 4.5, 1.0] | [14.7, 14.7, 'geographic'] | [14.7, 14.7, 'geographic'] | Passed |
| light geographic and visible range [3, 25, 10, 4.5, 1.0] | [14.7, 10, 'luminous'] | [14.7, 10, 'luminous'] | Passed |
| light geographic and visible range [9, 64, 23, 5.0, 5.0] | [22.9, 22.9, 'geographic'] | [22.9, 22.9, 'geographic'] | Passed |
| light geographic and visible range [1.5, 12, 20, 4.0, 0.5] | [10.7, 10.7, 'geographic'] | [10.7, 10.7, 'geographic'] | Passed |
| light geographic and visible range [4, 9, 10.4, 2.0, 2.0] | [10.4, 10.4, 'geographic'] | [10.4, 10.4, 'luminous'] | Failed |
SHA-256 / e1acd992e767ebc1db3332b8ccd777badc7e373df41a8ab174d5222e5c889ec6
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
he,hl,nom,mhws,tide=x
hle=hl+(mhws-tide)
geo=2.08*(math.sqrt(he)+math.sqrt(hle))
vis=min(geo,nom)
lim='geographic' if round(geo,1)<nom else 'luminous'
return [round(geo,1),round(vis,1),lim]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('light geographic and visible range [16, 36, 20.8, 3.0, 3.0]', [16, 36, 20.8, 3.0, 3.0], [20.8, 20.8, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [3, 25, 18, 4.5, 1.0]', [3, 25, 18, 4.5, 1.0], [14.7, 14.7, 'geographic']), ('light geographic and visible range [3, 25, 10, 4.5, 1.0]', [3, 25, 10, 4.5, 1.0], [14.7, 10, 'luminous']), ('light geographic and visible range [9, 64, 23, 5.0, 5.0]', [9, 64, 23, 5.0, 5.0], [22.9, 22.9, 'geographic']), ('light geographic and visible range [1.5, 12, 20, 4.0, 0.5]', [1.5, 12, 20, 4.0, 0.5], [10.7, 10.7, 'geographic']), ('light geographic and visible range [4, 9, 10.4, 2.0, 2.0]', [4, 9, 10.4, 2.0, 2.0], [10.4, 10.4, 'luminous'])], [('light geographic and visible range [4, 9, 10.4, 2.0, 2.0]', [4, 9, 10.4, 2.0, 2.0], [10.4, 10.4, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [1.5, 12, 20, 4.0, 0.5]', [1.5, 12, 20, 4.0, 0.5], [10.7, 10.7, 'geographic']), ('light geographic and visible range [16, 36, 20.8, 3.0, 3.0]', [16, 36, 20.8, 3.0, 3.0], [20.8, 20.8, 'luminous']), ('light geographic and visible range [2, 40, 15, 4.0, 6.0]', [2, 40, 15, 4.0, 6.0], [15.8, 15, 'luminous']), ('light geographic and visible range [12, 80, 30, 5.0, 2.0]', [12, 80, 30, 5.0, 2.0], [26.2, 26.2, 'geographic']), ('light geographic and visible range [5, 5, 6, 3.0, 1.0]', [5, 5, 6, 3.0, 1.0], [10.2, 6, 'luminous'])], [('light geographic and visible range [4, 16, 12.48, 3.0, 3.0]', [4, 16, 12.48, 3.0, 3.0], [12.5, 12.5, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [2, 40, 15, 4.0, 6.0]', [2, 40, 15, 4.0, 6.0], [15.8, 15, 'luminous']), ('light geographic and visible range [12, 80, 30, 5.0, 2.0]', [12, 80, 30, 5.0, 2.0], [26.2, 26.2, 'geographic']), ('light geographic and visible range [5, 5, 6, 3.0, 1.0]', [5, 5, 6, 3.0, 1.0], [10.2, 6, 'luminous']), ('light geographic and visible range [25, 100, 28, 4.0, 4.0]', [25, 100, 28, 4.0, 4.0], [31.2, 28, 'luminous']), ('light geographic and visible range [3, 25, 18, 4.5, 1.0]', [3, 25, 18, 4.5, 1.0], [14.7, 14.7, 'geographic'])], [('light geographic and visible range [16, 36, 20.8, 3.0, 3.0]', [16, 36, 20.8, 3.0, 3.0], [20.8, 20.8, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [25, 100, 28, 4.0, 4.0]', [25, 100, 28, 4.0, 4.0], [31.2, 28, 'luminous']), ('light geographic and visible range [4, 16, 12.48, 3.0, 3.0]', [4, 16, 12.48, 3.0, 3.0], [12.5, 12.5, 'luminous']), ('light geographic and visible range [3, 25, 18, 4.5, 1.0]', [3, 25, 18, 4.5, 1.0], [14.7, 14.7, 'geographic']), ('light geographic and visible range [3, 25, 10, 4.5, 1.0]', [3, 25, 10, 4.5, 1.0], [14.7, 10, 'luminous']), ('light geographic and visible range [9, 64, 23, 5.0, 5.0]', [9, 64, 23, 5.0, 5.0], [22.9, 22.9, 'geographic'])], [('light geographic and visible range [4, 9, 10.4, 2.0, 2.0]', [4, 9, 10.4, 2.0, 2.0], [10.4, 10.4, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [3, 25, 18, 4.5, 1.0]', [3, 25, 18, 4.5, 1.0], [14.7, 14.7, 'geographic']), ('light geographic and visible range [3, 25, 10, 4.5, 1.0]', [3, 25, 10, 4.5, 1.0], [14.7, 10, 'luminous']), ('light geographic and visible range [9, 64, 23, 5.0, 5.0]', [9, 64, 23, 5.0, 5.0], [22.9, 22.9, 'geographic']), ('light geographic and visible range [1.5, 12, 20, 4.0, 0.5]', [1.5, 12, 20, 4.0, 0.5], [10.7, 10.7, 'geographic']), ('light geographic and visible range [16, 36, 20.8, 3.0, 3.0]', [16, 36, 20.8, 3.0, 3.0], [20.8, 20.8, 'luminous'])]]
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 |
|---|---|---|---|
| light geographic and visible range [16, 36, 20.8, 3.0, 3.0] | [20.8, 20.8, 'luminous'] | [20.8, 20.8, 'luminous'] | Passed |
| light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0] | [10.5, 10.5, 'luminous'] | [10.5, 10.5, 'geographic'] | Failed |
| light geographic and visible range [3, 25, 18, 4.5, 1.0] | [14.7, 14.7, 'geographic'] | [14.7, 14.7, 'geographic'] | Passed |
| light geographic and visible range [3, 25, 10, 4.5, 1.0] | [14.7, 10, 'luminous'] | [14.7, 10, 'luminous'] | Passed |
| light geographic and visible range [9, 64, 23, 5.0, 5.0] | [22.9, 22.9, 'geographic'] | [22.9, 22.9, 'geographic'] | Passed |
| light geographic and visible range [1.5, 12, 20, 4.0, 0.5] | [10.7, 10.7, 'geographic'] | [10.7, 10.7, 'geographic'] | Passed |
| light geographic and visible range [4, 9, 10.4, 2.0, 2.0] | [10.4, 10.4, 'luminous'] | [10.4, 10.4, 'luminous'] | Passed |
SHA-256 / 446db183193c040b8eabe1d86e8d01599a2fa19e8c9cc378438ccc1a4fe148ca
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
he,hl,nom,mhws,tide=x
hle=hl+(mhws-tide)
geo=2.08*(math.sqrt(he)+math.sqrt(hle))
vis=min(geo,nom)
lim='geographic' if geo<nom else 'luminous'
return [round(geo,1),round(vis,1),lim]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('light geographic and visible range [16, 36, 20.8, 3.0, 3.0]', [16, 36, 20.8, 3.0, 3.0], [20.8, 20.8, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [3, 25, 18, 4.5, 1.0]', [3, 25, 18, 4.5, 1.0], [14.7, 14.7, 'geographic']), ('light geographic and visible range [3, 25, 10, 4.5, 1.0]', [3, 25, 10, 4.5, 1.0], [14.7, 10, 'luminous']), ('light geographic and visible range [9, 64, 23, 5.0, 5.0]', [9, 64, 23, 5.0, 5.0], [22.9, 22.9, 'geographic']), ('light geographic and visible range [1.5, 12, 20, 4.0, 0.5]', [1.5, 12, 20, 4.0, 0.5], [10.7, 10.7, 'geographic']), ('light geographic and visible range [4, 9, 10.4, 2.0, 2.0]', [4, 9, 10.4, 2.0, 2.0], [10.4, 10.4, 'luminous'])], [('light geographic and visible range [4, 9, 10.4, 2.0, 2.0]', [4, 9, 10.4, 2.0, 2.0], [10.4, 10.4, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [1.5, 12, 20, 4.0, 0.5]', [1.5, 12, 20, 4.0, 0.5], [10.7, 10.7, 'geographic']), ('light geographic and visible range [16, 36, 20.8, 3.0, 3.0]', [16, 36, 20.8, 3.0, 3.0], [20.8, 20.8, 'luminous']), ('light geographic and visible range [2, 40, 15, 4.0, 6.0]', [2, 40, 15, 4.0, 6.0], [15.8, 15, 'luminous']), ('light geographic and visible range [12, 80, 30, 5.0, 2.0]', [12, 80, 30, 5.0, 2.0], [26.2, 26.2, 'geographic']), ('light geographic and visible range [5, 5, 6, 3.0, 1.0]', [5, 5, 6, 3.0, 1.0], [10.2, 6, 'luminous'])], [('light geographic and visible range [4, 16, 12.48, 3.0, 3.0]', [4, 16, 12.48, 3.0, 3.0], [12.5, 12.5, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [2, 40, 15, 4.0, 6.0]', [2, 40, 15, 4.0, 6.0], [15.8, 15, 'luminous']), ('light geographic and visible range [12, 80, 30, 5.0, 2.0]', [12, 80, 30, 5.0, 2.0], [26.2, 26.2, 'geographic']), ('light geographic and visible range [5, 5, 6, 3.0, 1.0]', [5, 5, 6, 3.0, 1.0], [10.2, 6, 'luminous']), ('light geographic and visible range [25, 100, 28, 4.0, 4.0]', [25, 100, 28, 4.0, 4.0], [31.2, 28, 'luminous']), ('light geographic and visible range [3, 25, 18, 4.5, 1.0]', [3, 25, 18, 4.5, 1.0], [14.7, 14.7, 'geographic'])], [('light geographic and visible range [16, 36, 20.8, 3.0, 3.0]', [16, 36, 20.8, 3.0, 3.0], [20.8, 20.8, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [25, 100, 28, 4.0, 4.0]', [25, 100, 28, 4.0, 4.0], [31.2, 28, 'luminous']), ('light geographic and visible range [4, 16, 12.48, 3.0, 3.0]', [4, 16, 12.48, 3.0, 3.0], [12.5, 12.5, 'luminous']), ('light geographic and visible range [3, 25, 18, 4.5, 1.0]', [3, 25, 18, 4.5, 1.0], [14.7, 14.7, 'geographic']), ('light geographic and visible range [3, 25, 10, 4.5, 1.0]', [3, 25, 10, 4.5, 1.0], [14.7, 10, 'luminous']), ('light geographic and visible range [9, 64, 23, 5.0, 5.0]', [9, 64, 23, 5.0, 5.0], [22.9, 22.9, 'geographic'])], [('light geographic and visible range [4, 9, 10.4, 2.0, 2.0]', [4, 9, 10.4, 2.0, 2.0], [10.4, 10.4, 'luminous']), ('light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0]', [4, 9.174, 10.48, 2.0, 2.0], [10.5, 10.5, 'geographic']), ('light geographic and visible range [3, 25, 18, 4.5, 1.0]', [3, 25, 18, 4.5, 1.0], [14.7, 14.7, 'geographic']), ('light geographic and visible range [3, 25, 10, 4.5, 1.0]', [3, 25, 10, 4.5, 1.0], [14.7, 10, 'luminous']), ('light geographic and visible range [9, 64, 23, 5.0, 5.0]', [9, 64, 23, 5.0, 5.0], [22.9, 22.9, 'geographic']), ('light geographic and visible range [1.5, 12, 20, 4.0, 0.5]', [1.5, 12, 20, 4.0, 0.5], [10.7, 10.7, 'geographic']), ('light geographic and visible range [16, 36, 20.8, 3.0, 3.0]', [16, 36, 20.8, 3.0, 3.0], [20.8, 20.8, 'luminous'])]]
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 |
|---|---|---|---|
| light geographic and visible range [16, 36, 20.8, 3.0, 3.0] | [20.8, 20.8, 'luminous'] | [20.8, 20.8, 'luminous'] | Passed |
| light geographic and visible range [4, 9.174, 10.48, 2.0, 2.0] | [10.5, 10.5, 'geographic'] | [10.5, 10.5, 'geographic'] | Passed |
| light geographic and visible range [3, 25, 18, 4.5, 1.0] | [14.7, 14.7, 'geographic'] | [14.7, 14.7, 'geographic'] | Passed |
| light geographic and visible range [3, 25, 10, 4.5, 1.0] | [14.7, 10, 'luminous'] | [14.7, 10, 'luminous'] | Passed |
| light geographic and visible range [9, 64, 23, 5.0, 5.0] | [22.9, 22.9, 'geographic'] | [22.9, 22.9, 'geographic'] | Passed |
| light geographic and visible range [1.5, 12, 20, 4.0, 0.5] | [10.7, 10.7, 'geographic'] | [10.7, 10.7, 'geographic'] | Passed |
| light geographic and visible range [4, 9, 10.4, 2.0, 2.0] | [10.4, 10.4, 'luminous'] | [10.4, 10.4, 'luminous'] | Passed |
SHA-256 / 52d948787ab49ffc5ad0b59dd8de3f4608ba94edf61bbf49d078532d66992235
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:09.422949+00:00.
Case digest / 531aecf6d187fad8d563af603bfbb970439f7b352583a3ed1c6c038f004bf9d3