docs: Wave 3 recorded — /compare live-verified; resolution tail scoped
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QJs13VsyiSKYQP6rj3NNmc
This commit is contained in:
@@ -803,6 +803,38 @@
|
||||
> failure → **added to the Chrome manifest** (confirm the dropdown shows the four entries, and that a
|
||||
> signed-out Intelligence click lands on `/login`).
|
||||
|
||||
> ## 🔀 WAVE 3 — /compare BUILT · RESOLUTION TAIL **SCOPED, NOT SHIPPED** 2026-07-31 → `specs/wave3-compare-and-resolution-tail.md`
|
||||
> No grade/ledger/scoring change (diff empty across `intelligence/`, `ledgerService`, `outcomeService`).
|
||||
> **🔴 0.3/0.4 — THE RESOLUTION TAIL DOES NOT FIRE.** The resolver is `POST /api/grading/resolve`
|
||||
> (`routes/grading.js:208`, "called by the ESPN poller at FINAL"); its fanout at `:356-371` holds
|
||||
> webPush + telegram + discord. State of all five outputs: **share-card generation = SPEC'D-NOT-BUILT**
|
||||
> (`grep shareCard grading.js` = **0** — not in the fanout at all; `shareCards/renderer.js` has **zero
|
||||
> callers**) · **push = BUILT-NOT-FIRING** (gated on `webPush.configured()`; **`push_subscriptions` 0
|
||||
> rows, `user_notifications` 0 rows** — nothing ever subscribed or delivered) · **Telegram = BUILT-NOT-
|
||||
> FIRING** · **Discord = BUILT-NOT-FIRING** · **recap = SPEC'D-NOT-BUILT** (no recap file in `src/`).
|
||||
> **AND THE WHOLE TAIL IS UNREACHABLE — nothing calls `/api/grading/resolve`; there is NO ESPN poller
|
||||
> in the repo.** The live settle path is the scheduler's `settleAllOutcomes`/`settleAllLedgers`, which
|
||||
> fans out to **`opsNotify` only** (ops alerts), with **zero user-facing output**. Per the order's own
|
||||
> rule, **ShareCard · /notifications · result posts · recap are ALL SCOPED, none shipped** — no dead
|
||||
> shells over a silent pipeline.
|
||||
> **✅ /compare BUILT.** Semantics (0.2): a **same-market head-to-head** — two players, every row a
|
||||
> measure BOTH sides are scored on, aligned by `alignRows`; deliberately NOT two disconnected graded
|
||||
> props. Reads the live `/api/stats/player/:name?sport=` aggregate. **Honest-absent three ways:** an
|
||||
> unresolved side reads **NO DATA** while the other still renders · a measure only one side has renders
|
||||
> **`—`, never 0** · if NEITHER resolves the page **refuses to compare**. **NO VERDICT** — it shows the
|
||||
> measures and says the reader draws the call.
|
||||
> **FINGERPRINT:** deploy boundary captured (attempts 1-4 `IN DEVELOPMENT`, attempt 5 gone). Live
|
||||
> head-to-head through the deployed proxy — **Judge vs Ohtani: AVG .248/.289 · HR 17/23 · RBI 38/65 ·
|
||||
> OPS .908/.931 · GP 59/103, 5 of 5 shared measures**; bogus name → `found:false` → NO DATA.
|
||||
> **⚠️ HARNESS ERROR RECORDED:** my first live check reported `found=false` for both real players —
|
||||
> that was **my script's bare `except` returning a fabricated negative**, not the service (curl via
|
||||
> both proxy and Express: `found:true`, 3/3). Same class as `Number(null)===0`: a verification harness
|
||||
> must fail loudly, never return a plausible-looking false.
|
||||
> **FLOOR: 316 suites / 3,930 tests green (10 new), web build exit 0.** Two pre-existing tests
|
||||
> (`vyndrPhaseE`, `vyndrParityQA`) asserted the in-dev placeholder — **superseded, not deleted**; they
|
||||
> now assert the stronger properties on the real page (live fetch, no sample players, NO VERDICT,
|
||||
> NO DATA, "not a zero").
|
||||
|
||||
- **Redirect EXISTS + WIRED:** `closingCapture.buildCaptureRows`→`closing_captures` (append-only,
|
||||
provenance: captured_at/book/line_type/both-prices/missed_reason) via `intradayRefreshService:221`
|
||||
+ internal endpoint; `ledgerService.attachClosingProb`→`closing_prob` (de-vigs both raw sides,
|
||||
|
||||
Reference in New Issue
Block a user