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:
@@ -630,3 +630,21 @@ No grade/ledger/model/scoring change.
|
||||
|
||||
Matrix effect: rows 16 (Parlay lab), 22 (Slip reader) and 25 (`/intelligence` half) move from
|
||||
**WIRED: NO → YES**. 315 suites / 3,920 tests green, web build exit 0.
|
||||
|
||||
---
|
||||
|
||||
# WAVE 3 — 2026-07-31 → `specs/wave3-compare-and-resolution-tail.md`
|
||||
|
||||
**`/compare` BUILT** (row 20 → real). A same-market head-to-head on the live player feed: rows aligned
|
||||
on measures both sides share, `NO DATA` for an unresolved side, `—` never 0 for a one-sided measure,
|
||||
refusal when neither resolves, and **NO VERDICT**. Live-verified: Judge vs Ohtani, 5 of 5 shared
|
||||
measures; bogus name → NO DATA.
|
||||
|
||||
**Resolution tail — ALL FIVE outputs scoped, none shipped** (rows 23 ShareCard, `/notifications`,
|
||||
result posts, recap): share-card generation **SPEC'D-NOT-BUILT** (absent from the resolve fanout;
|
||||
renderer has zero callers) · push/Telegram/Discord **BUILT-NOT-FIRING** (env-gated; `push_subscriptions`
|
||||
and `user_notifications` both **0 rows**) · recap **SPEC'D-NOT-BUILT** (no file). **And nothing calls
|
||||
`/api/grading/resolve` — there is no ESPN poller in the repo**, so the tail is unreachable regardless.
|
||||
The live settle path emits ops alerts only, with zero user-facing output.
|
||||
|
||||
316 suites / 3,930 tests green, web build exit 0.
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -70,3 +70,25 @@ and that a misspelled name reads NO DATA rather than a fabricated card.
|
||||
VERIFIED: all five tail states; /compare built on the live feed. CANNOT DETERMINE: whether VAPID /
|
||||
Telegram / Discord env is configured in prod (not visible externally) — moot while no trigger exists.
|
||||
**BLOCKED: ShareCard, /notifications, result posts, recap — all on a resolution tail that never fires.**
|
||||
|
||||
## POST-DEPLOY FINGERPRINT (commit `bf7c0a3`)
|
||||
|
||||
**Deploy boundary captured:** attempts 1-4 still served `IN DEVELOPMENT`, attempt 5 flipped — the
|
||||
real page is live (`Enter two players`, `nothing here is modelled`), placeholder gone.
|
||||
|
||||
**Live head-to-head, through the deployed proxy (Aaron Judge vs Shohei Ohtani, MLB):**
|
||||
|
||||
.248 AVG .289
|
||||
17 HR 23
|
||||
38 RBI 65
|
||||
.908 OPS .931
|
||||
59 GP 103 → 5 of 5 shared measures, both found:true
|
||||
|
||||
**Honest-absent verified live:** a bogus name returns `found:false` → renders NO DATA, no fabricated card.
|
||||
|
||||
**⚠️ Verification-harness error worth recording:** my first check reported `found=false` for both real
|
||||
players. That was **my script**, not the service — its `except` branch returned `{found:False}` and
|
||||
swallowed a urllib-side failure. curl through **both** the proxy and Express returns `found:true` with
|
||||
5 season rows, 3/3 repeats. Lesson: a bare except in a verification harness fabricates a negative
|
||||
result, which is the same class of bug as `Number(null) === 0` — the harness must fail loudly, not
|
||||
return a plausible-looking false.
|
||||
|
||||
Reference in New Issue
Block a user