From e34e99c426225cd0963f381a222736ff8692e48d Mon Sep 17 00:00:00 2001 From: Kev Date: Fri, 31 Jul 2026 06:04:50 -0400 Subject: [PATCH] docs: D1-A recorded (glyph buckets, boundary channel completed, primitives) Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01QJs13VsyiSKYQP6rj3NNmc --- outputs/VYNDR-COMPLETION-MATRIX.md | 16 +++++++++++++++ specs/STATE.md | 31 ++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/outputs/VYNDR-COMPLETION-MATRIX.md b/outputs/VYNDR-COMPLETION-MATRIX.md index 9e6e8a9..73844ac 100644 --- a/outputs/VYNDR-COMPLETION-MATRIX.md +++ b/outputs/VYNDR-COMPLETION-MATRIX.md @@ -671,3 +671,19 @@ design-exists-needs-build. Only **Live tracking** and **Slip reader** are genuin nudge-gated → model-gated (Price Triplet EV leg, calibration curve) → **resolution-pipeline-gated (share-card masters — the tail has no generation step and no trigger)** → licensing-gated (book logos, push-to-book) → large surface builds (Offseason, S3 media, The Report, S2 primitives). + +--- + +# D1-A SHIPPED — 2026-07-31 (design self-contained wave, part A) + +Backend untouched. **Glyphs:** 6 classifier-backed combat marks wired from the package SVGs +(GLYPHS 38→44), replacing emoji fallbacks; 39 package SVGs with no classifier deliberately NOT wired +(they'd render nothing) and 2 classifier-backed archetypes have no package SVG — both held for D1-B. +**Boundary channel completed:** PriceTriplet's `NO_MODEL` was the last boundary state rendering in +neutral text; it now uses `--priced-out`, so the blue law covers every "can't hand you this" state. +**Reaction primitives** (`lib/reactions.js` + keyframes) at exact HANDOFF timings, with `nudge()` +refusing a no-op so it can never run as an idle loop. **READ-FAB** at exact geometry (50px / +translateY(-14px) / 6px ring). Audit correction: the `#0E0E14` card token was already tokenised. + +317 suites / 3,946 tests green, web build exit 0. **Not done, carried in D1:** row-hover rationale, +IntersectionObserver reveal, team-gradient chips. diff --git a/specs/STATE.md b/specs/STATE.md index ebb5a21..a852cdb 100644 --- a/specs/STATE.md +++ b/specs/STATE.md @@ -873,6 +873,37 @@ > `enabled:false`) → **D6 large surface builds** (Offseason trio · S3 article media · The Report email > + archive · the S2 primitive set, with the crown ALSO held by measurement). +> ## 🎨 D1-A SHIPPED 2026-07-31 — glyphs · boundary channel · reaction primitives · READ-FAB +> Additive frontend/visual. **Backend untouched** (`git diff src/` empty) — no grade, model, +> classifier or ledger change. **41→74 registry expansion HELD for D1-B.** +> **REVIEW ZERO — classifier coverage bounded the wiring, and the computation took THREE passes to +> get right:** the frontend keys `GLYPHS` by **archetype name** while the backend keys `glyph:` by +> **shape name**, and most registry keys are **unquoted identifiers** — my first two parses mis-read +> both and produced spurious buckets. Correct result: **(a) 38 already wired · (b) 6 classifier-backed +> with a package SVG, NOT wired → WIRED HERE · (c) 39 package SVGs with no classifier → HELD for D1-B +> (wiring them renders nothing) · (d) 2 classifier-backed with NO package SVG (`dual threat`, +> `paint boss`) → a DESIGN gap, not a build gap, flagged for D1-B.** +> **THE 6 WIRED = MMA/combat archetypes** (striker · grappler · pressure · counter · grinder · +> finisher) that were rendering **EMOJI fallbacks** (`✦ ⊗ ➤ ◊`) where the package ships real 24-grid +> duotone marks. GLYPHS **38 → 44 keys**, deliberately far short of the package's 83. +> **BOUNDARY CHANNEL COMPLETED.** The `--priced-out` token set already existed and was applied on +> `NoMarketState` + the scan void box — but **PriceTriplet's `NO_MODEL` ("line not priced") still +> rendered in neutral text**, so the third colour law was applied inconsistently. It now renders in +> the channel → **every boundary state, or none**. Token-only: no hex fallback AND no hex in prose +> (PriceTriplet's own no-literal-hex test caught both). +> **REACTION PRIMITIVES** — new `web/src/lib/reactions.js` + globals.css keyframes at the **exact +> HANDOFF timings: flash .75s ease-out · boot stagger 60ms steps · reactions gated 1.5s · WIRE hold +> 6s**. **`nudge()` REFUSES a no-op** (null/absent direction → no flash) so it cannot be attached to +> an idle loop — *a flash without a new datum is the UI lying about the feed*. Reduced-motion honoured. +> **READ-FAB** aligned to exact package geometry: **50px circle · translateY(-14px) · 6px void ring** +> (was 46px / marginTop −16 / 3px). +> **AUDIT CORRECTION: the `#0E0E14` card token was ALREADY tokenised** as `--bg-1`/`--card` — the +> audit's "1 file" counted the raw hex, not the token. No change needed. +> **FLOOR: 317 suites / 3,946 tests green (16 new), web build exit 0.** +> **⚠️ NOT DONE THIS ORDER (reported, not silently dropped): row-hover rationale + +> IntersectionObserver reveal (Phase 3.8) and team-gradient chips (Phase 4.10)** — both need the +> System artboard's row anatomy ported, which is a larger job than the rest of D1-A. They stay in D1. + - **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,