hex-canon discipline: canonical-name + #hex at every trait-color reference
Establish the hex-canon discipline in style/trait-palette.md (v0.1 -> 0.2):
every trait-color reference pairs canonical-name (semantic anchor for prose,
training-corpus extraction, LLM context) with hex (precise value for shaders,
renderers, machine-checkable canon enforcement). Mirrors the existing
color+motion-signature two-channel discipline that already secures color-blind
accessibility -- same architectural move, different audience pair.
Trait-palette.md gains:
- "Canonical name" + "Hex" columns in The full table (Eros-red #ee1b24,
Philotes-orange #e28a46, ..., Mnemosyne-dusky-rose #cf3b74)
- New section: The hex-canon discipline -- format conventions, scope, the
one-line grep that surfaces canon-violations
Sweep applies the discipline to existing trait-color references:
- identity-and-personhood/architecture.md (trait-to-body-part bridge table)
- topology-and-rendering/architecture.md (faction-color-politics table,
imperial-net distortion descriptors, achromatic-exception statement,
mind-pool color-inheritance narrative)
- runtime-engine/architecture.md (cosmetic-shader prose feedback)
- identity-and-personhood/bodies.md (Moira-violet pill in pending-design notes)
- political-register/economics.md (catalogue-slug example uses canonical token)
Drift-fix: schemas/findings.md trait_colors seed-data carried 8 divergent hex
"approximations" -- Eros #D03030 vs canonical #ee1b24, Aletheia #E5C520 vs
canonical #fcf001 (losing the brightness-zenith register), Dikaiosyne #2860B0
vs canonical #3f47cd, etc. Replaced with exact propagation from the canonical
palette; the rationalizing comment ("approximate hue-family targets") is
replaced with "exact propagation per the hex-canon discipline"; HSV-hue column
recomputed from canonical hex per RGB->HSV conversion, integer-rounded.
Non-trait colors stay untouched per recursive-as-we-touch-it scope: machine-
aesthetic (gold rim-light, commercial-coral, fluorescent-pallor, lavender-
decor, obsidian-black, cyan, matrix-green), historical-sumptuary (Tyrian
purple), cinematic (Matrix red-pill), medical (red-green color blindness).
Each non-trait domain receives canonical-name + hex pairings when that domain
comes into architectural focus.
Discipline is mechanically-checkable via one grep against the architecture-
papers, excluding the canonical source. Zero canon-violations remain after
this sweep.
This commit is contained in:
@@ -43,21 +43,23 @@ The architecture has been using *Hellenic personality-virtues* as the trait-cosm
|
||||
- *Past-revealed ↔ Future-fated* — Aletheia uncovers what was buried; Moira reads what was always coming. Time-axis bookends
|
||||
- *Past-dwelling ↔ Present-piercing* — Memorialist-honor-the-dead vs Kairic-strike-now. Two ways of being-in-time the regime tries to police separately
|
||||
|
||||
## The full table — color + motion-signature + description per trait
|
||||
## The full table — canonical-name + hex + motion-signature + description per trait
|
||||
|
||||
| Greek | Description | Color (canonical hue) | Wheel position | Motion-signature |
|
||||
|---|---|---|---|---|
|
||||
| **Eros** | reaching for what I want | **Red** | 12:00 | uneven flame-flicker |
|
||||
| **Philotes** | loving and staying close | **Orange** | 1:30 | breath-rate warm pulse |
|
||||
| **Aletheia** | seeing what's hidden | **Yellow** | 3:00 | clear, no pulse — still and bright |
|
||||
| **Kairos** | catching the right moment | **Yellow/Green** (chartreuse) | 4:30 | lightning-flicker |
|
||||
| **Sophrosyne** | holding back when I want to act | **Green** | 6:00 | steady, even pulse |
|
||||
| **Dikaiosyne** | standing for what's fair | **Blue** | 7:30 | weighted slow pulse |
|
||||
| **Moira** | reading what's coming | **Violet** | 9:00 | slow-thread undulation |
|
||||
| **Mnemosyne** | remembering what mattered | **Red/Violet** (dusky-rose) | 10:30 | depth-shimmer |
|
||||
| Greek | Description | Hue | Canonical name | Hex | Wheel position | Motion-signature |
|
||||
|---|---|---|---|---|---|---|
|
||||
| **Eros** | reaching for what I want | **Red** | `Eros-red` | `#ee1b24` | 12:00 | uneven flame-flicker |
|
||||
| **Philotes** | loving and staying close | **Orange** | `Philotes-orange` | `#e28a46` | 1:30 | breath-rate warm pulse |
|
||||
| **Aletheia** | seeing what's hidden | **Yellow** | `Aletheia-yellow` | `#fcf001` | 3:00 | clear, no pulse — still and bright |
|
||||
| **Kairos** | catching the right moment | **Yellow/Green** (chartreuse) | `Kairos-chartreuse` | `#b5e61d` | 4:30 | lightning-flicker |
|
||||
| **Sophrosyne** | holding back when I want to act | **Green** | `Sophrosyne-green` | `#2cad52` | 6:00 | steady, even pulse |
|
||||
| **Dikaiosyne** | standing for what's fair | **Blue** | `Dikaiosyne-blue` | `#3f47cd` | 7:30 | weighted slow pulse |
|
||||
| **Moira** | reading what's coming | **Violet** | `Moira-violet` | `#a349a3` | 9:00 | slow-thread undulation |
|
||||
| **Mnemosyne** | remembering what mattered | **Red/Violet** (dusky-rose) | `Mnemosyne-dusky-rose` | `#cf3b74` | 10:30 | depth-shimmer |
|
||||
|
||||
**Motion-signature paired with color provides color-blind accessibility** — every trait is uniquely identifiable via two independent channels. A player with red-green color blindness still distinguishes Eros (uneven flame-flicker) from Sophrosyne (steady, even pulse) by motion alone.
|
||||
|
||||
**Canonical-name + hex paired provides cross-pipeline identifiability** — every trait-color reference carries two independent channels, semantic (canonical-name for prose, training-corpus extraction, scholar-NPC speech, faction-naming, LLM context) and precise (hex for shaders, renderers, color-pickers, machine-checkable canon enforcement). See §The hex-canon discipline below.
|
||||
|
||||
## Wheel layout (clockwise from 12 o'clock)
|
||||
|
||||
```
|
||||
@@ -85,6 +87,35 @@ In earlier drafts (the v0.1 design-vision doc, retired in v0.9 — preserved in
|
||||
|
||||
This is a **deliberate constraint** — the trait-palette is exclusively chromatic so that achromatic colors (white, black, grey, brown) remain reserved for non-trait roles. *Aletheia is bright, not transcendent; the brightness IS the truth-revealing register.*
|
||||
|
||||
## The hex-canon discipline — canonical-name + #hex at every trait-color reference
|
||||
|
||||
**Every trait-color reference in the architecture pairs canonical-name with hex value.** The canonical-name pattern is `{Trait}-{hue}` lowercase — `Eros-red`, `Philotes-orange`, `Aletheia-yellow`, `Kairos-chartreuse`, `Sophrosyne-green`, `Dikaiosyne-blue`, `Moira-violet`, `Mnemosyne-dusky-rose`. The two channels serve two audiences:
|
||||
|
||||
- **Canonical-name** — semantic anchor for prose, training-corpus extraction, scholar-NPC speech, faction-naming, and any LLM context where the trait-color binding must survive tokenization
|
||||
- **Hex** — designer/tooling precise value for shaders, renderers, color-pickers, and machine-checkable canon enforcement
|
||||
|
||||
**Format conventions.**
|
||||
|
||||
| Context | Form | Example |
|
||||
|---|---|---|
|
||||
| Trait is the subject | `**Trait** (canonical-name `#hex`, …)` | `**Eros** (Eros-red `#ee1b24`, 12:00)` |
|
||||
| Color/hue is the subject | `canonical-name (`#hex`)` | "shader pulses with Philotes-orange (`#e28a46`)" |
|
||||
| Schema/data row | both columns or token+value | `('eros', '#ee1b24', …, 'Eros-red', …)` |
|
||||
|
||||
**Scope (current).** The hex-canon discipline applies to *trait-color references* only. Non-trait colors (machine-aesthetic palette: gold rim-light, commercial-coral, fluorescent-pallor, lavender-decor, obsidian-black, cyan, matrix-green; historical-sumptuary references: Tyrian purple; cinematic references: Matrix red-pill) carry their existing prose-form names. Each non-trait design domain receives canonical-name + hex pairings *recursively, at the moment that domain comes into architectural focus* — names follow design-attention, not the other way around.
|
||||
|
||||
**Mechanically-checkable.** Canon-violations are a single grep against the architecture-papers, excluding this canonical source:
|
||||
|
||||
```bash
|
||||
grep -rEn --include='*.md' '\b(red|orange|yellow|green|blue|violet|purple|chartreuse)\b' \
|
||||
--exclude=trait-palette.md \
|
||||
| grep -v '#[0-9a-fA-F]\{6\}'
|
||||
```
|
||||
|
||||
Any hit that *isn't* paired with a hex code on the same line is either (a) a trait-color reference missing its hex pairing (canon-violation, fix), (b) a non-trait color reference (machine-aesthetic, narrative-shorthand, historical-sumptuary — currently exempt, will be canonicalized when its design domain comes into focus), or (c) a medical/cinematic/historical compound-term ("red-green color blindness", "Matrix red-pill", "Tyrian purple"). The discipline becomes a typed contract rather than a stylistic suggestion.
|
||||
|
||||
**Where this is applied today.** The trait-table in [`../identity-and-personhood/architecture.md`](../identity-and-personhood/architecture.md) §The trait-to-body-part bridge; the faction-uniform table in [`../topology-and-rendering/architecture.md`](../topology-and-rendering/architecture.md) §Faction color-politics; the trait-color seed-data in [`../schemas/findings.md`](../schemas/findings.md) §trait_colors; cosmetic-shader prose in [`../runtime-engine/architecture.md`](../runtime-engine/architecture.md). Future expansions (cosmology-aesthetic, machine-aesthetic, faction-accent, drug-pill chromatics) will join recursively as they're authored.
|
||||
|
||||
## Designer-fixed corpus — words to colors
|
||||
|
||||
Every word in the universal-translator's vocabulary corpus is mapped to one (or a primary + secondary) trait-coordinate. The mapping is **designer-authored, fixed, universal** — the same word means the same trait-color for every player and every NPC and every LLM-context.
|
||||
@@ -109,4 +140,4 @@ The trait-palette is rendered across many surfaces. Each surface gets specific s
|
||||
|
||||
---
|
||||
|
||||
**Version:** 0.1 | **Created:** 2026-04-26 | **Updated:** 2026-04-26
|
||||
**Version:** 0.2 | **Created:** 2026-04-26 | **Updated:** 2026-04-28
|
||||
|
||||
Reference in New Issue
Block a user