Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
pente-spec — the typed border of the fleet theme vocabulary.
A theme is authored ONCE as a (deftheme …) tatara-lisp form and rendered
to every consumer. This crate is the border that form compiles into; nothing
here emits, and nothing downstream may hold a palette of its own.
Why the vocabulary exists
Measured across the fleet 2026-08-18: 118 palette copies in eight
distinct encodings, with an unknown denominator (~62 repos carry ≥5 colour
literals; the census reached ~26). The encodings matter more than the count,
because a #RRGGBB grep sees only three of them:
| encoding | live example | |
|---|---|---|
| E1 | #RRGGBB |
nix/lib/nord.nix:22 |
| E2 | bare hex "2E3440" |
irodzuki/src/presets.rs:26 — the live source of mado's terminal grid |
| E3 | Rgb::new(0x2e,0x34,0x40) |
mado/src/platform.rs:39 |
| E4 | decimal Color::new(136,192,208) |
kura/kura-tui/src/theme.rs:27 |
| E5 | float vec3(0.53,0.75,0.82) |
a ghostty GLSL shader |
| E6 | [f32;4] |
egaku/src/theme.rs:112 |
| E7 | decimal ANSI \x1b[38;2;136;192;208m |
skim-tab/src/lib.rs:103 |
| E8 | hex inside a style string | seki/…/blzsh_parity.rs |
And the source of truth had already drifted from itself: four Nord ANSI-16 tables exist, four slots disagree, and slot 7 is a three-way split.
What is authored here vs derived
The ramp is the ONLY place a colour literal may appear. variant and slug
are derived, never authored — stylix interpolates them into artefact NAMES,
so a defaulted "untitled" silently renames a pile of store paths.
The ANSI table is authored, deliberately. It is a convention Nord publishes, not a function of the ramp — which is exactly why four independent derivations of it disagree today. Authoring it once and projecting it everywhere is what makes that disagreement unconstructible.
Measured properties of the substrate this border relies on
Proven by a compile probe now living upstream as tatara-lisp's
tests/phase_f_constructs.rs (tatara-lisp@6f2056a) — those constructs had
zero use sites fleet-wide before it, against 202 files using
DeriveTataraDomain:
- A typo'd kwarg is REJECTED, with a did-you-mean and the allowed set.
(The surface notes' "empty
Vecreported as success" warning describes the manual extraction path, not the derive path.) - A typo'd struct attribute is SILENT:
#[tatara(keywords = …)]yields a keyword computed from the struct NAME. Hence the literalKEYWORDassertions in the tests below — they are load-bearing, not ceremony. KeywordSexplowercases the ident with no separator (Base0A→:base0a), while field names go throughsnake_to_kebab(bright_black→:bright-black). Two opposite rules; both are exercised here.