From a6afac43cc729e26499f25521197333b72b90f71 Mon Sep 17 00:00:00 2001 From: Kev Date: Thu, 30 Jul 2026 23:56:48 -0400 Subject: [PATCH] =?UTF-8?q?report:=20market-efficiency=20scaling=20check?= =?UTF-8?q?=20=E2=80=94=20FLAT,=20mechanism=20structurally=20absent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Report-only. No threshold, grade, or efficiency value changed. VERDICT: FLAT. marketEfficiency.js does not exist (zero occurrences of market_efficiency / efficiency_score in src/ or web/src/). The spec's 0.85/0.60/0.55 values appear in grade_thresholds.json only as PROBABILITY BANDS - a coincidental numeric overlap, not efficiency scores. The base edge thresholds (MLB A:5%, NBA A:7%) do not exist either: engine1.js has zero `edge` references, so the live grade is not an edge-vs-threshold comparison at all. The specced rule threshold = base x efficiency has no host. DISPOSITIVE: engine1.js contains ZERO `sport` references. computeFactors receives no sport or market, so per-market OR per-sport scaling is structurally impossible in the live grader - not merely unwired. Phase 2: the matched-edge test is confounded (edge is not the grading input - the same market emits both B and C at one edge). The aggregate that discriminates: mean grade index wnba points 4.71 at mean edge 10.2 vs mlb hits 4.58 at 69.5 vs mlb total_bases 4.32 at 84.9 - the efficient market earns the highest grades on one-eighth the edge, the opposite of spec. PREMISE CORRECTION (measured): this order's opening claim that full-output and collapsed grades "agree 100%" does not hold - on 512 rows carrying both they agree 17.8%, with 33.8% differing by 3+ tiers. The prior discrimination result stands (champion r=0.0050 null vs probability r=0.1313; MLB 0.0686 n.s. vs 0.2356 p~0.0004). Repo unchanged between orders. The collapse was not a phantom and the re-adjudication list stays open. Scope: flat thresholds are a grade-CALIBRATION gap only - the projection and the CLV edge (which measured p_win, never the letter) are untouched, so this is not a third shadow-model alarm. But the fix is NOT independently bounded: with no threshold step to multiply, efficiency scaling presupposes probability grading. It is rule R4 of specs/full-output-grade-mapping.md and belongs to that MLB-first challenger. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01QJs13VsyiSKYQP6rj3NNmc --- outputs/VYNDR-COMPLETION-MATRIX.md | 33 +++++++++++++++++++ specs/STATE.md | 51 ++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/outputs/VYNDR-COMPLETION-MATRIX.md b/outputs/VYNDR-COMPLETION-MATRIX.md index 0794101..627e959 100644 --- a/outputs/VYNDR-COMPLETION-MATRIX.md +++ b/outputs/VYNDR-COMPLETION-MATRIX.md @@ -456,3 +456,36 @@ order: persist per-row `n`, `SE`, and pre-adjustment `p`** — without them R2/R **Re-adjudication flagged:** p_win→CLV, the skew audit, **proj-v1.1's "NOT PROVEN" (judged against the collapsed champion — not final)**, the C1 takeable floor, the calibration curves, and **ROI-by-grade — with B/C inverted, "MLB-C +4.57%" is likely an artifact of a meaningless letter.** + +--- + +# MARKET-EFFICIENCY SCALING CHECK — 2026-07-30 (report-only). **VERDICT: FLAT.** + +**Premise correction first (measured):** the claim that "full-output and collapsed grades agree 100%" +does not hold — on 512 rows carrying both they agree **17.8%**, and **33.8% differ by 3+ tiers**. The +prior discrimination result stands (champion letter r=0.0050 null vs probability r=0.1313; MLB 0.0686 +n.s. vs 0.2356 p≈0.0004). Repo unchanged between orders. **The collapse was not a phantom and the +re-adjudication list stays open.** + +**0.1 `marketEfficiency.js` does not exist** — zero occurrences of `market_efficiency` / +`efficiency_score` anywhere. The spec's 0.85/0.60/0.55 values DO appear in `grade_thresholds.json` but +those are **probability bands**, a coincidental overlap, not efficiency scores. + +**0.2 The base edge thresholds do not exist either** — `engine1.js` has **zero `edge` references**; the +grade is an additive factor index, not an edge-vs-threshold comparison. So +`threshold = base × efficiency` has **no host**. + +**Phase 1 dispositive: `engine1.js` has ZERO `sport` references.** Sport is not an input to +`computeFactors`, so per-market or per-sport scaling is structurally impossible in the live grader — +not merely unwired. Applies to the champion. + +**Phase 2:** the matched-edge test is confounded (edge isn't the grading input — the same market emits +B and C at one edge). The discriminating aggregate: mean grade index **wnba points 4.71** (mean edge +10.2) vs **mlb hits 4.58** (69.5) vs **mlb total_bases 4.32** (84.9) — the efficient market earns the +highest grades on one-eighth the edge, the opposite of the spec. + +**Scope:** a flat threshold is a grade-CALIBRATION gap — it does **not** touch the projection or the +CLV edge (which measured `p_win`, never the letter), so it is not a third shadow-model alarm. But it is +**not independently bounded**: with no threshold step to multiply, efficiency scaling presupposes +probability grading. It is rule **R4 of `specs/full-output-grade-mapping.md`** and belongs to that +MLB-first challenger. diff --git a/specs/STATE.md b/specs/STATE.md index f36e2ff..55e6a28 100644 --- a/specs/STATE.md +++ b/specs/STATE.md @@ -518,6 +518,57 @@ > inverted, "MLB-C is the +4.57% profitable segment" is very likely an artifact of a meaningless > letter, not a real segment** · `confidence` on every historical row (never use it as a weight). +> ## ⚖️ MARKET-EFFICIENCY SCALING CHECK 2026-07-30 (report-only): **VERDICT — FLAT. The specced mechanism is STRUCTURALLY ABSENT.** +> **⚠️ FIRST, A PREMISE CORRECTION (measured, not asserted).** This order opens with "the collapse +> concern was disproven — full-output and collapsed grades agree 100%." **That is not what the data +> shows.** On the 512 public ledger rows carrying both, collapsed (champion letter) and full-output +> (probability letter) agree on **17.8%**, and **33.8% differ by THREE OR MORE tiers**. The prior +> order's discrimination result stands unchanged: champion letter→outcome **r=0.0050 (p≈0.93, null)** +> vs probability letter **r=0.1313 (p≈0.013)**; MLB **0.0686 n.s. vs 0.2356 (p≈0.0004)**. Nothing in +> the repo changed between the two orders (HEAD is still `708f0fd`, clean tree), so this is not a +> stale reading — **the collapse was NOT a phantom, and the Phase-4 re-adjudication list stays open.** +> Reporting this straight because Phase 3.7 ("the model-soundness thread closes") is gated on an input +> that does not hold. +> **0.1 `marketEfficiency.js` DOES NOT EXIST — VERIFIED.** Zero occurrences of `market_efficiency`, +> `marketEfficiency`, or `efficiency_score` in `src/` or `web/src/`. **TRAP FLAGGED:** the spec's +> values 0.85 / 0.60 / 0.55 DO appear in `grade_thresholds.json` — but those are the **probability +> bands** (`A+ low 0.85`, `B low 0.60`, `B- low 0.55`), a coincidental numeric overlap, **not** +> efficiency scores. Do not mistake them for a wired implementation. +> **0.2 THE BASE THRESHOLDS DO NOT EXIST EITHER — VERIFIED.** There is no "MLB A: 5% edge / NBA A: 7% +> edge" table anywhere. **`engine1.js` contains ZERO references to `edge`** — the live grade is not an +> edge-%-vs-threshold comparison at all; it is the additive factor index +> (`idx = NEUTRAL_INDEX(3); idx += f.delta`). The specced rule +> `threshold = base_threshold × market_efficiency_score` therefore has **no host**: no base threshold, +> no efficiency score, and no threshold comparison to scale. +> **PHASE 1 — DISPOSITIVE: `engine1.js` contains ZERO references to `sport`.** `computeFactors({ +> features, trap, consistency, prop })` receives no sport and no market; `prop` supplies only +> line/direction. **Sport cannot influence the grade, so per-market OR per-sport scaling is +> structurally impossible in the live grader** — this is not "specced but unwired", it is +> "the input isn't even in the function." It applies to the CHAMPION (what users see). +> **PHASE 2 — the matched-edge test is CONFOUNDED BY CONSTRUCTION (stated, not hidden).** Same-edge +> pairs return a mix of same/different grades, but that cannot discriminate flat-vs-scaled because +> **edge is not the grading input** — the SAME market emits both B and C at the same edge (mlb +> total_bases @ edge 20 → B n=5 AND C n=4). The aggregate that CAN discriminate: mean grade index by +> market — **wnba points 4.71 (mean edge 10.2) · mlb hits 4.58 (69.5) · mlb total_bases 4.32 (84.9)**. +> **WNBA points earns the HIGHEST mean grade on ONE-EIGHTH the edge.** Under the spec, the efficient +> market (NBA/WNBA points, 0.80) should grade TIGHTER than the lazy one (MLB total bases, 0.55) — the +> observed pattern is the OPPOSITE, and confirms the grade is untethered from both edge and market. +> **VERDICT: FLAT — one grading rule applied to every sport and every market.** An A does NOT mean the +> same thing across markets; it does not currently mean anything market-relative at all. +> **PHASE 3.6 — SCOPE, with an honest correction to "bounded".** The guardrail's framing is CORRECT +> and worth stating plainly: **a flat threshold is a grade-CALIBRATION gap. It does NOT touch the +> projection, and it does NOT touch the CLV edge** (the CLV/skew work measured `p_win`, never the +> letter), so this is **not** a third shadow-model alarm. **BUT the fix is NOT an independent bounded +> change in the current architecture:** since there is no edge-vs-threshold step to multiply, wiring +> efficiency scaling presupposes probability-based grading first. **It is exactly rule R4 of +> `specs/full-output-grade-mapping.md` and should ship as part of that MLB-first challenger, not as a +> standalone order** — with `E_sport` FIT from each sport's own accrued record, never hand-set, and +> success defined as equal realized hit-rate per letter across sports. +> **GATING NOTE FOR THE MULTI-SPORT VISION:** the premise is right that a new sport would grade wrong +> from day one — but the cause is broader than missing efficiency scaling. The grader takes no sport +> input at all, so NFL passing yards and MLB total bases would receive the identical rule. Sequence: +> probability grading (R1) → per-sport efficiency (R4) → then a new sport module. + - **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,