Skip to content
VerificationUpdated

Trestles 2026: forecasts locked before the call, scored after

A closed research verification at Lower Trestles, California: a forecast lock hashed and committed before the day it calls — 10 locks in all, with the Sep 11–13 runs missed and recorded as missed — then scored against NDBC buoys and the public event record. The engine read the swell well and the wind badly, and the day it ranked first was the one shut down by wind. Over 7 scored days the error proved systematic on all three axes: height overestimated, period underestimated on 6 of 7, direction the strong axis. The event finished on 2026-09-18 and V10 closed the mission on 2026-09-19.

A lock is written before the ocean answers

This research note follows a forecast that cannot be revised after the fact. The occasion is a world-tour surf contest whose waiting period runs Sep 11–20, 2026, taken from the organiser's site. For each day of the Lower Trestles waiting period a forecast lock is written: a JSON file holding every input, the ranking of the days in the period, the analyst call and the conditions that would invalidate it, hashed with sha256 and committed. Locks are append-only, and a lock is never edited whatever the ocean does next; corrections go into a separate verification file, and the scoring formula is fixed forward in its next revision.

The engine under test is the production AYON Wave signal engine, rules 1.0.0, compiled verbatim from the app repository. It is not a research build. Ten locks were committed in all, the first five being V1 on 2026-09-10 at 05Z, V2 the same day at 17Z, V3 on 2026-09-13 at 17:41 PDT, V4 on 2026-09-14 at 06:40 PDT and V5 on 2026-09-15 at 06:37 PDT. The spot is Lower Trestles, San Onofre State Beach, California.

One separation has to be stated before any score: AYON Ecosystem scores ocean suitability only, while the event organiser's daily call also weighs logistics, broadcast and athlete factors that AYON Ecosystem does not model, and AYON Ecosystem is not affiliated with the WSL.

Every input carries an evidence label

Each input in a lock is labelled MODELED, MEASURED, DERIVED or OBSERVED. The swell partition is MODELED from Open-Meteo marine best_match at cell 33.375/-117.625, which at this cell is identical to MFWAM (maximum difference 0.0 over 233 hours), so the partition is single-source. The only independent wave check is ECMWF-WAM totals, with all partition fields null: mean absolute height difference 0.11 m, maximum 0.42 m. Winds come from GFS and ECMWF, which disagree on afternoon onset, with GFS windier.

Tide is DERIVED from NOAA station 9410580 at Newport Bay, about 25 km to the north as the lock records it. MEASURED data comes from NDBC buoys 46086 in the San Clemente Basin, offshore, and 46224 off Oceanside. Buoy 46242 is dead.

The formula's known weaknesses were written into lock V1 itself: size under-weighted, so that 0.3 m at 14.3 s outscored 0.8 m at 12.1 s; a window-length bonus that diluted wind quality; and an agreement term that is tautological because best_match equals MFWAM. V2 moved to formula v1.1, which drops the window-length bonus.

The V1 call: Sep 11 ranked first, with a named fragility

V1, at one-day lead, ranked Sep 11 first, window 07:00–11:00 PDT: 0.84 m at 12.1 s from 200°, dead-centre of the spot's 170–280° window; rising tide 0.8 to 1.6 m; light morning wind (GFS 2.4–4.3 m/s from the south, ECMWF lighter and ENE). Confidence HIGH. The named fragility was afternoon south wind, with GFS earlier and stronger than ECMWF.

Watch days #2 and #3 were the mornings of Sep 17 and 18, 07:00–11:00: a new long-period S pulse of 13.1–13.7 s from 192°, building from 0.3 to 0.6 m between Sep 15 and 18, glassy modeled mornings, LOW confidence at 7–9 day lead on a single partition model. Formula scores: Sep 17 = 69, Sep 18 = 66.

Sep 13–14 were called short-period W windswell, the poorest of the period. Sep 19–20 lay beyond the partition horizon and were not scored. Buoy 46086 at lock time read 1.2 m at 12.9 s from 191°, down from 2.1 m over 34 hours: the current south swell had peaked and was decaying.

V2 at 17Z kept Sep 11 first (v1.1 score 84, HIGH; top three unchanged at 11/17/18). Its window flipped to 14:30–18:30 PDT because of the method change, not a model change; the early window stayed valid but shrank to 07:00–09:30, ahead of a modeled midday south-wind peak. V2 also recorded a measurement: forerunners of the S pulse had already arrived on Sep 10, with 46086 stepping from 12.9 s to 16.0–17.4 s SSW/SW and 46224 reading 16.7 s, four to five days ahead of the modeled fill.

What buoy 46086 measured on Sep 11, and how V3 scored it

Buoy 46086, Sep 11 07:10–11:40 PDT: swell 1.3 rising to 1.6 m, period 14.8–16.0 s, direction SW/SSW, wind wave 0.3 m at 3.6–3.8 s. Size is not scored, deliberately: 0.84 m is modeled swell height at the Trestles cell and 1.3–1.6 m is offshore total height at a different location. They are different quantities, and comparing them would be a false comparison.

  • Swell arrival in the windowHit
    Called in V1
    S swell at 12.1 s running 07:00–11:00 PDT
    Measured, buoy 46086
    1.3–1.6 m long-period S/SW swell through the morning window
  • DirectionHit
    Called in V1
    200°
    Measured, buoy 46086
    SW/SSW, about 202–225°, inside 170–280°
  • PeriodMiss
    Called in V1
    12.1 s
    Measured, buoy 46086
    14.8–16.0 s; under-called by 3–4 s
  • SizeNot scored
    Called in V1
    0.84 m modeled swell at the cell
    Measured, buoy 46086
    1.3–1.6 m offshore total height: a different quantity
  • Sep 13–14 poor W windswellHit
    Called in V1
    Short-period W, poorest of the period
    Measured, buoy 46086
    Sep 13: 1.6–1.8 m at 7.1–8.3 s from 277–295°, most of it beyond the window's 280° edge

The same day, the wrong instrument: the corrected score

V3 scored the Sep 11 wind as a hit because 46086 read only a 0.3 m at 3.8 s wind wave through the morning. That was the wrong instrument. 46086 sits offshore in the San Clemente Basin and cannot observe local S–SE wind blowing across the beach at Lower Trestles. The water was clean offshore while the wind on the beach was bad enough to stop a heat.

The public event record, OBSERVED from the organiser's site and from Surfline, the event's official forecast provider: on Sep 11, opening day, competition started and was stopped during Round 1, Heat 2, by south winds; the event forecast had called "4–6 ft faces with S–SE wind likely for much of the day". On Sep 12, Round 1 was completed and "the winds cooperated" despite a high-tide hold. On Sep 13 there was no competition.

Rescored against that record, the V1 call for Sep 11 reads differently.

The honest summary in the verification file: the engine read the swell well and the wind badly, and wind decided both days.

  • Day and window, as a rankingMiss
    Called in V1
    Sep 11 ranked #1 of the period
    Measured or observed
    The one day so far that was shut down
  • Swell: direction, arrival, cleanlinessHit
    Called in V1
    0.84 m at 12.1 s from 200°
    Measured or observed
    Clean long-period S/SW swell present; the 3–4 s period under-call stands (buoy 46086)
  • WindMiss
    Called in V1
    S wind named as the fragility, placed in the afternoon
    Measured or observed
    S–SE for much of the day; stopped Round 1 Heat 2
  • Sep 12Miss
    Called in V1
    Not in the top 3 (V1 top 3 = 11 / 17 / 18)
    Measured or observed
    The day that ran clean

Three days missing from the record

There is a second failure, of cadence rather than physics. V2 was written on 2026-09-10 at 17Z; V3 is dated 2026-09-13. The runs for Sep 11, 12 and 13 were missed, and V3 states this itself. The gap cannot be backfilled, because a lock written after the day has passed is not a forecast, and it stays in the record.

What v1.2 changes, forward only

Three changes follow from the verification. None is applied to V1, V2 or V3; they take effect from the next revision of the formula.

  • Stop scoring local wind from an offshore buoy. The mission has no beach-level wind observation at all; that is the gap.
  • Wind onset timing gets its own uncertainty rather than a single onset hour; GFS-versus-ECMWF disagreement should down-weight the whole day.
  • Weight measured period over modeled period at short lead. The forerunners showed 16.0 s four to five days before the modeled fill, and the buoy was right.

A divergence locked before the standby

V3, under v1.1, ranks Sep 16 first: score 84, HIGH, window 07:00–12:00 PDT, 0.66 m at 13.4 s from 190°, tide rising 0.83 to 1.43 m, no onshore onset before 18:00. Then Sep 15 at 79 (HIGH), Sep 17 at 79, Sep 18 at 77, Sep 19 at 64, Sep 20 at 57 and Sep 14 at 53. The Sep 17 and 18 windows close at 11:00, with onshore W/SW onset around 13:00. Buoys at V3 time: 46086 at 23:40Z read 1.5 m at 7.7 s WNW; 46224 at 23:56Z read 0.5 m at 13.3 s SSW against a modeled 0.56 m, a ratio of 1.12.

The organiser is on standby for Sep 15 at 07:30 PDT. V3 was locked before that standby was known. If Sep 15 runs and is mediocre while Sep 16 is better, that supports V3; if Sep 15 is good, the ordering was wrong. Either outcome is checkable, and the call is already on file.

V4: the Sep 14 call scored at one-day lead

V4 was written on 2026-09-14 at 06:40 PDT, the morning after V3, on data fetched at 13:37Z. It scores V3's call for Sep 14, made at one-day lead, and V1's call from four days out that Sep 13–14 would be poor W windswell. Buoy 46086 through 05:56 PDT read 1.8–2.0 m at 7.7–9.1 s from 282–293°, WNW and outside the 170–280° window, with a wind-wave partition up to 1.2 m at 5.9–6.2 s overnight. Buoy 46224 read a total of 0.9–1.2 m: an S partition of 0.4–0.5 m at 12.5–14.3 s SSW under a W partition of 0.7–1.1 m at 6.7–9.1 s.

The same pattern holds on every scored day: at short lead the measured period runs 2–4 s longer than the modeled one. Sep 11 was called at 12.1 s and measured at 14.8–16.0 s; the Sep 10 forerunners arrived four to five days early; Sep 14 was called at 11 s and measured at 12.5–14.3 s. On the morning of V4, 46224 carried the S energy at 12.5–14.3 s while the model's S partition for Sep 15 sat at 10.6–11.2 s. This is logged, not corrected: v1.1 is the formula of record for V4, and a measured-period term is v1.2 work.

  • Character of the dayHit
    Called in V3, one-day lead
    W windswell dominant, a small S component underneath, not a contest-grade day; V1 said the same at four-day lead
    Measured, buoys 46086 and 46224
    A short-period WNW sea at 46086; at 46224, 0.4–0.5 m of S energy under a 0.7–1.1 m W partition
  • S-component periodMiss
    Called in V3, one-day lead
    11 s
    Measured, buoys 46086 and 46224
    12.5–14.3 s at 46224; under-called a third time
  • W-component periodMiss
    Called in V3, one-day lead
    5.7 s
    Measured, buoys 46086 and 46224
    7.7–9.1 s on both buoys
  • SizeNot scored
    Called in V3, one-day lead
    0.89 m W and 0.5 m S, modeled swell at the cell
    Measured, buoys 46086 and 46224
    Total 0.9–1.2 m at 46224 against a modeled total of 1.0–1.1 m: consistent, but a different quantity
  • WindNot scored
    Called in V3, one-day lead
    GFS 3.5 m/s mean in the window, no onshore onset
    Measured, buoys 46086 and 46224
    No beach-level wind observation exists, and the offshore wind-wave partition is not a proxy

Sep 15 demoted, a confidence artefact, and the live test

V4 ranks Sep 16 first: score 79, window 07:00–11:00 PDT, 0.61 m at 14.0 s from 191°. Then Sep 17 at 76 (0.78 m at 12.0 s from 189°, the largest S component of the period, onshore from 15:00), Sep 18 at 74, Sep 19 at 62, Sep 15 at 60, Sep 14 at 51 and Sep 20 at 41. Sep 15 fell from second at 79 to fifth at 60 for two reasons visible in the inputs: the model's dominant partition for Sep 15 is now a 0.44 m at 10.8 s W/SW component from 259°, with the S component demoted to 0.4 m at 11 s, where V3 had it dominant at 0.42 m at 14.6 s; and GFS now carries S–SE wind of 4.3–4.8 m/s between 09:00 and 11:00, the pattern that stopped Round 1 Heat 2 on Sep 11, while ECMWF keeps that morning at 1.8–3.4 m/s. Sep 16 dropped from 84 to 79 because an onshore W/SW onset above 4.5 m/s is now modeled from 13:00, closing the window at 11:00; its morning wind is the best-agreed of the period, GFS 1.4–2.6 m/s and ECMWF 1.1–2.1 m/s.

Every day in V4 reads MEDIUM, and that is a metric artefact, not a judgement. The buoyTrack term compares the labelled swell partition at 46224, that morning the S energy at 0.4 m and 14.3 s, with the model's primary partition, that morning the W windswell at 0.88 m and 5.6 s. Those are different wave trains, and the ratio of 2.20 says nothing about tracking. Like for like at the same hour, the model's S partition of 0.52 m at 11.1 s against the buoy's 0.4 m gives 1.3, inside the 0.7–1.4 band, and the model total of 1.02 m against the buoy total of 1.2 m gives 0.85. The confidence is left exactly as v1.1 computed it; v1.2 will pair partitions by period class and direction rather than by label.

The organiser's status on 2026-09-14 was still a standby for Sep 15 at 07:30 PDT, and nothing ran on Sep 13 or Sep 14. AYON Ecosystem locked Sep 16 above Sep 15 in V3 and locks it again in V4, by a wider margin, 79 against 60. If Sep 15 runs on mediocre water while Sep 16 is better, that supports the ordering; if Sep 15 is the better day, the ordering was wrong. Whether the contest runs on any given day is a separate fact, decided on inputs AYON Ecosystem does not model, and is not what is scored here.

V5: the ordering flips a third time, and the margin narrows to one point

V5 was written on 2026-09-15 at 06:37 PDT, before the Sep 15 window (07:00–12:00 PDT) had opened. Nothing new was scored: Sep 14 was already scored in V4, and the pre-window buoy reads at 05:40–05:56 PDT are logged as context, not as points. 46086 read a 1.5–1.7 m wind sea at 8.3–10 s from WNW/W, not yet the clean S swell expected once the window opens; 46224 read 0.4 m at 11.8–12.5 s from SW, consistent with the model.

The ranking changed again. V5 has Sep 16 first at 81 (HIGH, 07:00–12:00 PDT, 0.60 m at 14.2 s from 191°), and Sep 15 back at second, 80 (HIGH, 0.40 m at 15.3 s from 196°) — up from fifth at 60 in V4. The dominant partition at Sep 15 flipped for a third time: W/SW at 0.44 m and 10.8 s in V4, S at 0.40 m and 15.3 s in V5. Then Sep 17 at 79, Sep 18 at 78, Sep 19 at 76 (MEDIUM) and Sep 20 at 64 (MEDIUM).

The margin between Sep 16 and Sep 15 is now one point, the tightest of the mission. The live test from V3 and V4 — AYON Ecosystem locks Sep 16 above Sep 15 — is still on file, but at a one-point margin it sits at the edge of what the formula can actually distinguish: a narrow win for either day on the water would be as informative as a clean one.

buoyTrack recovered to 1.0 (46224 read 0.4 m at 11.8 s against a modeled 0.36 m, a ratio of 0.90), resolving the labelling artefact V4 had flagged. The organiser's status, OBSERVED: standby, next call Sep 16 at 7:00 AM PDT — no competition ran on Sep 15. Next to be scored: the completed Sep 15 record against the buoys and the event log, then the Sep 15/16 ordering itself. The locks are never edited.

  • Sep 16Not scored
    V4: score, rank
    79, rank 1
    V5: score, rank
    81, rank 1
  • Sep 15Not scored
    V4: score, rank
    60, rank 5
    V5: score, rank
    80, rank 2
  • Sep 17Not scored
    V4: score, rank
    76, rank 2
    V5: score, rank
    79, rank 3
  • Sep 18Not scored
    V4: score, rank
    74, rank 3
    V5: score, rank
    78, rank 4

V6: Sep 15 scored, and the first tie of the mission

V6 was written on 2026-09-16 at 06:38 PDT. It scored Sep 15, which V5 had locked second at 80 (HIGH, 07:00–12:00 PDT, 0.40 m at 15.3 s from 196°). Measured on buoy 46224 across the exact window, partition against partition: height was an exact hit, a median and mean of 0.40 m against the 0.40 m locked. Direction was a hit, SSW on eight of ten reads and SW and S on the other two. Period was a miss, and for the first time in the other direction: 15.3 s locked against a measured median of 12.5 s, an overestimate of about 2.8 s after three consecutive underestimates. A correction term built on a single sign would have been wrong.

What decided the day was not in the lock at all. 46224 measured a persistent 0.68 m wind wave at 8.3–9.1 s from W/WSW across all ten reads — 1.7 times the 0.40 m S swell. The honest caveat is that 8–9 s is long for a local wind sea, so this may be a short W swell labelled as wind wave by the buoy, which does not change the fact that W energy dominated the window.

That conclusion costs something. V4 had put Sep 15 fifth at 60 precisely because it saw the dominant partition flip to W/SW at 0.44 m and 10.8 s. V5 reverted to a dominant S and lifted Sep 15 to second at 80. The measurement says V4 described the water better than V5 did. The Sep 15/16 ordering had by then moved four times across locks; that instability is not noise to be smoothed, it is the signal that formula v1.1 does not separate days where two trains compete. No lock was edited.

The V6 ranking produced the first tie of the mission: Sep 16 and Sep 17 both at 84 (HIGH, 07:00–11:00 PDT), at 0.69 m and 12.8 s from 188° and 0.81 m and 12.1 s from 188° respectively — Sep 17 carrying the largest S swell of the period. Then Sep 18 at 77, Sep 20 at 74 (MEDIUM) and Sep 19 at 55, whose window had moved to the afternoon, 14:00–19:00 PDT. buoyTrack read 1.00. The organiser, OBSERVED: standby, next call Sep 16 at 7:00 AM PDT, unresolved at lock time.

  • 0.40 m swell heightHit
    Measured on 46224
    0.40 m locked
    Verdict
    0.40 m median and mean
  • From 196°, S quadrantHit
    Measured on 46224
    196° locked
    Verdict
    SSW on 8 of 10 reads
  • 15.3 s periodMiss
    Measured on 46224
    15.3 s locked
    Verdict
    12.5 s median — over by 2.8 s
  • S swell governs the windowMiss
    Measured on 46224
    S dominant in V5
    Verdict
    W/WSW wind wave 0.68 m, 1.7x the S swell

V7: Sep 16 scored, and the ordering test resolves in the engine’s favour

V7 was written on 2026-09-17 at 06:37 PDT and scored Sep 16, locked first in V6 at 84 (HIGH, 07:00–11:00 PDT, 0.69 m at 12.8 s from 188°). Direction was the most precise call of the mission: 188° locked against S on six of eight reads and SSW on two, and 188° falls between S at 180° and SSW at 202°. Height was a near hit, 0.69 m locked against a 0.60 m median, an overestimate of 0.09 m. Period was the largest error of the mission: 12.8 s locked against 18.2 s measured on every one of the eight reads, with no variation — an underestimate of 5.4 s, and a return to underestimating after the single overestimate on Sep 15.

The ordering test that had been open since V3 closed here. The engine locked Sep 16 above Sep 15, and measurement agrees on all three dimensions that matter: swell height 0.60 m against 0.40 m, period 18.2 s against 12.5 s, and a swell-to-wind-wave ratio of 0.92 against 0.59, meaning the S train stopped being swamped. Sep 16 was the better day and the locked order was right — the first ordinal test of the mission, resolved in the engine’s favour.

The caveat is worth as much as the result. The engine got the order right while getting the period wrong by 5.4 s. An ordinal hit resting on a badly wrong input is structured luck, not validation, and closing that distance is what v1.2 is for.

An instrument finding came with it. Across the same window, offshore buoy 46086 alternated read by read between 17.4 s from S/SSW/SW and 9.1 s from W/WSW, its dominant-swell label jumping between two trains. Nearshore 46224 measured a constant 18.2 s from S across all eight reads. Two trains compete offshore; refraction and shoaling clean the signal at the beach. That is the third confirmation of the lesson V4 recorded: for scoring Trestles, 46224 is the instrument and 46086 is energy context, never the ruler for the window.

The V7 ranking put Sep 17 first at 86 (HIGH, 07:00–11:00 PDT, 0.84 m at 12.4 s from 189°), the highest score of the mission and the largest S swell of the period, ahead of Sep 18 at 80, Sep 19 at 76 and Sep 20 at 73. buoyTrack read 1.00, and it arrived carrying a warning: 46224 measured 16.7 s against a modeled 12.4 s, so the same underestimate was already present in the day’s own input. The organiser, OBSERVED: the event ran on Sep 16, with Round 2 surfed and reported by the organiser as a big day; status at lock time was standby, next call Sep 17 at 7:00 AM PDT.

  • From 188°, S quadrantHit
    Measured on 46224
    188° locked
    Verdict
    S on 6 of 8 reads, SSW on 2
  • 0.69 m swell heightHit
    Measured on 46224
    0.69 m locked
    Verdict
    0.60 m median — over by 0.09 m
  • 12.8 s periodMiss
    Measured on 46224
    12.8 s locked
    Verdict
    18.2 s on all 8 reads — under by 5.4 s
  • Sep 16 ranks above Sep 15Hit
    Measured on 46224
    Locked in V6, 84 against 80
    Verdict
    Bigger, longer, less swamped on all three

V8: the model calls its own error in advance, and gets it right

V8 was written on 2026-09-17 at 10:29 PDT, a second revision on the same day. There is precedent — V1 and V2 were also same-day — and the reason was material: the organiser’s 7:00 AM call had resolved, and the Sep 17 window already had six of its eight reads.

Before that window opened, V7 had written that the day’s own input already carried the underestimate — 46224 reading 16.7 s against a modeled 12.4 s — and that if the pattern held, the window would arrive longer than the lock said. It did: a measured median of 15.4 s against 12.4 s locked. This is not simply another period miss. It is the first time the mission used its documented bias to call its own error in advance and was right, which turns the bias from an observed defect into a predictable term — the bar it has to clear before it can be folded into v1.2 as a correction rather than an excuse.

Sep 17 is scored only partially here, on six of eight reads, because the window had not closed at lock time; the full score belongs to V9. Direction was a hit for the second consecutive day, 189° locked against S on four reads and SSW on two. Height was a near hit at 0.84 m locked against a 0.75 m median, an overestimate of 0.09 m — the same magnitude as the previous day. Period was under by 3.0 s. The mission tally now stands at five underestimates and one overestimate across six scored days: the bias is asymmetric, which contradicts what V6 assumed when it asked for a symmetric correction.

What separates Sep 17 is not size but agreement. The swell-to-wind-wave ratio on 46224 ran 0.59 on Sep 15, 0.92 on Sep 16 and 1.25 on Sep 17 — monotonic, and in the same order as the locked scores of 80, 84 and 86. For the first time the S train genuinely dominated the local wind sea rather than tying with it or losing. Offshore agreed, which it had not the day before: 46086 measured a constant 16.0 s from S/SSW with only a 0.30 m wind wave, a ratio of 3.33, where the previous day it had flip-flopped between two trains.

The V8 ranking holds Sep 17 first at 85 with Sep 18 second at 82, narrowing that margin from six points to three, then Sep 19 at 76 and Sep 20 at 73. The organiser, OBSERVED: the day was called on, with Round 2 surfed in the morning and Round 3 heats live in the water at lock time. That is the second consecutive day competition ran on a day this engine had locked first. It is recorded as observed coincidence and not as a prediction met: this research grades ocean suitability, and it does not model the organiser’s logistics, broadcast windows, heat priority or athlete availability. Two days of alignment do not become predictive capability over the call, and will not be presented as such.

  • From 189°, S quadrantHit
    Measured on 46224, 6 of 8 reads
    189° locked
    Verdict
    S on 4 reads, SSW on 2
  • 0.84 m swell heightHit
    Measured on 46224, 6 of 8 reads
    0.84 m locked
    Verdict
    0.75 m median — over by 0.09 m
  • 12.4 s periodMiss
    Measured on 46224, 6 of 8 reads
    12.4 s locked
    Verdict
    15.4 s median — under by 3.0 s
  • V7: the window will arrive longer than lockedHit
    Measured on 46224, 6 of 8 reads
    Written before the window opened
    Verdict
    15.4 s measured against 12.4 s locked

V10: the mission closes, and the error structure is the result

The event was concluded on Friday 2026-09-18, two days before the Sep 11–20 waiting period ended, with Erin Brooks and Miguel Pupo as champions and the organiser describing “picturesque conditions at Lower Trestles”. Under the mission’s standing instruction — run daily until the contest is cancelled or completed, then stop — V10, written 2026-09-19 at 06:38 PDT, is the final lock. The mission closes with 10 locks and 7 scored days.

The last call scored is Sep 18, locked in V9 at 0.76 m, 11.9 s and 191° for the 07:00–11:00 PDT window, and measured against 8 reads on buoy 46224.

The result that survives this mission is not any single day but the shape of the error, and it is systematic on all three axes. Height was overestimated on three consecutive days by 0.09 m, 0.09 m and 0.11 m — same sign, near-identical magnitude, which is not noise. Period was underestimated on 6 of the 7 scored days against 1 overestimate. Direction is the strong axis: 4 consecutive days centred, and 1° off on the final day. The pipeline confirmed the height bias independently on the last morning, with 46224 measuring 0.5 m at 13.3 s against a modeled 0.64 m at 05:00 — a ratio of 1.28, the model reading 28% high, where V9 had recorded 1.09. The bias grew over the last two days rather than shrinking.

One separation has to be made more carefully today, not less. V9 locked Sep 18 first at 82, HIGH, and the event was concluded on Sep 18. AYON Ecosystem did not predict the organiser’s decision and does not claim to: this engine scores ocean suitability, while the call also weighs broadcast, logistics, heat priority and athlete availability that it has never modelled. What is checkable, and all that is claimed, is that the day the engine ranked best in the remaining window was the day the event finished — a documented coincidence between a score locked in advance and an outcome, not a logistics forecast met.

  • 0.76 m swell heightHit
    Measured on 46224, 8 reads
    0.76 m locked
    Verdict
    0.65 m median — over by 0.11 m
  • 11.9 s periodMiss
    Measured on 46224, 8 reads
    11.9 s locked
    Verdict
    14.3 s median — under by 2.4 s
  • From 191°Hit
    Measured on 46224, 8 reads
    191° locked
    Verdict
    192° median — off by 1°
Evidence discipline

This is research. Estimates are models, not guarantees; a model is never an observation, and a machine estimate is never “confirmed” — only a human reviewing it in the field makes it verified. Nothing on this page is an operational-capability claim, a safety promise, or a prediction of a specific event at a specific place.

References & data

  1. 1.NDBC buoy 46086 — San Clemente Basin — The offshore MEASURED record used for the Sep 11 swell score and for buoy state at each lock. It cannot observe beach-level wind at Lower Trestles.
  2. 2.NDBC buoy 46224 — Oceanside Offshore — Second MEASURED buoy: forerunner period on Sep 10 (16.7 s) and the buoyTrack ratio at V3 (0.5 m measured against 0.56 m modeled).
  3. 3.Open-Meteo Marine API (MFWAM best_match, ECMWF-WAM) — MODELED swell partition at cell 33.375/-117.625 (best_match, identical to MFWAM here) and ECMWF-WAM totals as the only independent wave check.
  4. 4.NOAA CO-OPS station 9410580 — Newport Bay — Tide DERIVED for Trestles from this station, about 25 km to the north, as recorded in lock V1.
  5. 5.World Surf League — event schedule and daily calls — OBSERVED event record: Sep 11 stopped in Round 1 Heat 2 by south winds; Sep 12 Round 1 completed; Sep 13 no competition; Sep 14 no competition; standby for Sep 15 07:30 PDT. The organiser's forecast provider, Surfline, is quoted from the same record. AYON Ecosystem is not affiliated with either.
  6. 6.AYON Wave repository — field-missions/trestles-2026 (locks V1–V10 with sha256, VERIFICATION-2026-09-13.md) — FORECAST-LOCK-V1.json (2026-09-10T05:06Z, sha256 f540dfa6…), V2 (2026-09-10 17Z, c92968b2…), V3 (2026-09-14T00:41Z, 1e92c49d…), V4 (2026-09-14T13:40Z, bda11d01…); commits e74916b, e3062a8, a52b345, 2c90f8f.