Doctrine + E1 movement strip + F9-F11 offseason hub shell, to spec

PHASE 0 — specs/ARCHETYPE-TAXONOMY-DOCTRINE.md records the ruling as
shared law: 83 designed glyphs are the full four-sport taxonomy; a glyph
renders ONLY where its archetype is modeled and proven. 39 of 83 map to a
real archetype and are wired; the 44 unmapped are DORMANT SLOTS for
WNBA/NBA/Soccer, not a wiring gap. Wiring them would mean inventing 44
archetypes to consume artwork -- decoration presented as classification,
which is forbidden. DUAL THREAT and PAINT BOSS are modeled archetypes with
no mark: the mirror gap, flagged to the design side. When a sport's
archetypes ship, activation is a MANIFEST lookup, not new art.

PHASE 1 — E1 movement strip. The spec's own line is "the movement strip is
defined once here and reused everywhere a line has a past", so it is a
primitive, not a fourth chart.

RECONCILED RATHER THAN FORKED: lib/gradeShift.js ALREADY implements E1's
colour law -- toward/against/flat, including the direction flip that makes
an UNDER's favourable move the opposite sign of an OVER's. MovementStrip
CONSUMES buildGradeTimeline instead of reimplementing it, and a test
asserts it never redefines isUnder. GradeShift stays the grade-history
view; this is the reusable strip. That is the card-fork lesson applied
before it could happen again.

Spec laws honoured: STEPS NOT CURVES (H then V, no smoothing -- a curve
invents prices that never traded, and a test rejects any C/S/Q/T command);
green only when the move FAVOURS the read; FLAT renders as a hairline plus
FLAT · [N]D because a flat market is a finding; and too little history
says NO MOVEMENT HISTORY rather than rendering blank.

PHASE 2 — F9-F11 offseason hub shell, built from Vyndr Offseason.dc.html.
The spec's load-bearing words are used verbatim: "OUTLOOKS REPRICE ON NEWS
· NOT GAME ODDS" (an offseason number is not a game line), the QUIET WIRE
empty state ("No outlook-moving news since X. We don't manufacture
movement."), WHAT CHANGED TODAY as the hero with the countdown ambient and
top-right, the tag-colour-is-meaning row anatomy, the open -> NOW -> FAIR
triplet with the movement strip embedded, and the OUTLOOK ONLY block where
every row carries NOT GRADED.

THE DESIGN FILE'S SAMPLE DATA IS NOT IN THE COMPONENT. Wembanyama +420 ->
+330, Nabers cleared 11:42 AM, the Summer League names -- all of it is a
SPEC for what a live feed renders, and copying it in would be fabrication
carrying a designer's authority. A test asserts none of those strings
appear.

The IN-SEASON information architecture is NOT invented here. The spec
covers an offseason hub; nothing specifies how content, articles, wire and
the live slate share year-round navigation. That remains the open design
gap, and the route notes it.

Two test bugs caught and fixed: my first assertions matched my own doc
comments -- the ordering check found "WHAT CHANGED TODAY" in the header
block and the no-curves check caught the word "curve" in the sentence
explaining why curves are wrong. A guard that reads its own explanation is
not reading the render; both now strip comments first.

PHASE 3 — both surfaces registered under the reachability guard. Read-only
throughout, serving fingerprint unchanged, accrual clock unchanged at 0
eligible dates.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W1sivYNqY2TS5ftykmHBU9
This commit is contained in:
Kev
2026-08-07 21:24:36 -04:00
parent 60469422af
commit 49e76068da
7 changed files with 494 additions and 1 deletions
+53
View File
@@ -0,0 +1,53 @@
# The 83-glyph taxonomy — doctrine
**RULED. This is the shared law the archetype chat and the build chat both obey.**
## The rule
**83 designed glyphs = the full four-sport archetype taxonomy** (MLB / WNBA /
NBA / Soccer). The artwork is complete; the *models* are not.
**A glyph renders ONLY where its archetype is modeled and proven.**
| set | count | state |
|---|---|---|
| designed glyphs | **83** | complete, in `specs/design-reference/assets/glyphs/` |
| backend registry archetypes | **41** | `archetypeService.ARCHETYPES` |
| **mapped and wired** | **39** | live, colours matching the registry exactly |
| **designed, no backend archetype** | **44** | **DORMANT** — slots for WNBA/NBA/Soccer |
| registry archetypes with no glyph | **2** | `DUAL THREAT`, `PAINT BOSS`**design gap** |
## Why dormancy rather than wiring
Wiring the 44 would mean **inventing 44 archetypes to consume artwork**. An
archetype that exists because a glyph exists is decoration presented as
classification — a mark on a card asserting the model recognised something it
cannot produce. **Decoration-as-data is forbidden.**
The dormant glyphs are not waste. They are **designed slots**, and each activates
when its sport's archetype system is built and clears the two-part gate — the
same bar every factor in this programme faces.
## What this preserves
- **The full design vision.** All 83 marks stay in the package; none is deleted
or redrawn.
- **The Truth Law.** No glyph appears for an archetype the model cannot produce.
- **The activation path.** Building WNBA/NBA/Soccer archetypes lights their
glyphs automatically — the artwork is already there and already colour-matched.
## Consequences for build
1. Do **not** add a registry archetype to consume a glyph. The archetype must be
earned by a classifier that produces it from real features.
2. Do **not** render a dormant glyph as a placeholder, sample, or "coming soon"
mark on any data surface.
3. `DUAL THREAT` and `PAINT BOSS` are **flagged to the design side** — they are
modeled archetypes with no mark, the mirror image of the dormant 44.
4. When a sport's archetypes ship, wiring is a MANIFEST lookup, not new art.
## Status
MLB archetypes render live. WNBA, NBA and Soccer have archetype **registries**
but no proven factor model, so their marks stay dormant — consistent with
`specs/BOARD-2026-08-07.md`, which records only MLB batters as MODELED.