docs: D1-A recorded (glyph buckets, boundary channel completed, primitives)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QJs13VsyiSKYQP6rj3NNmc
This commit is contained in:
Kev
2026-07-31 06:04:50 -04:00
parent 3d1a3c7794
commit e34e99c426
2 changed files with 47 additions and 0 deletions
+16
View File
@@ -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 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, (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). 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.
+31
View File
@@ -873,6 +873,37 @@
> `enabled:false`) → **D6 large surface builds** (Offseason trio · S3 article media · The Report email > `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). > + 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, - **Redirect EXISTS + WIRED:** `closingCapture.buildCaptureRows``closing_captures` (append-only,
provenance: captured_at/book/line_type/both-prices/missed_reason) via `intradayRefreshService:221` provenance: captured_at/book/line_type/both-prices/missed_reason) via `intradayRefreshService:221`
+ internal endpoint; `ledgerService.attachClosingProb``closing_prob` (de-vigs both raw sides, + internal endpoint; `ledgerService.attachClosingProb``closing_prob` (de-vigs both raw sides,