feat(proxy): arbitrary-coordinate tide via KHOA model + noise guard Adds a /api/tide?lat&lon path that derives high/low from the KHOA ocean-grid model zeta for any coordinate, as a validated extension over the 61 official stations: - domain/tideExtrema.ts: parabolic extremum extraction + noise guard (extrema count > 6 or daily range < 0.3m => noisy). Unit-tested with the real 인천 (clean) and 묵호 (noisy) zeta series from the 2026-06-05 gate. - adapters/khoaModel.ts: session cookie, anchor detection via pre_date=0, date->day-index, POST, zeta -> TideDay(source=model, datum=MSL, relative). - domain/nearest.ts: nearest official station (Haversine) for fallback. - routes/tide.ts: coord path with 1km grid rounding + 6h cache; falls back to the nearest official station when the model is noisy or KHOA fails. - types.ts: TideDay gains source/datum/relativeLevel/noisy/fallbackFrom. Verified live over HTTP: 인천 coord -> model (4 clean events), 묵호 coord -> fallback to 묵호 official, 군산 station -> official (regression intact). Constraint: KHOA ocean-grid is unofficial — model is an extension layer only; official 61 stations remain the absolute-cm source of truth and the fallback target. Confidence: high Scope-risk: module Reversibility: moderate Directive: Tune guard thresholds if South-coast moderate-tide points over-fallback; never make the model a sole dependency. Tested: vitest 24/24 (incl. tideExtrema, khoaModel); live HTTP on all three paths against the deployed proxy. Not-tested: bay-interior non-official points (no oracle); multi-day window reproduction; behaviour when KHOA rotates the model anchor mid-day. Related: docs/BACKLOG.md 3-A, docs/checklist.md 🐙 Autopus