blog: Colors Are Coordinates - #170
Conversation
New post (blog/colors-are-coordinates.md) rendered by gen-blog.mjs; content catalog (data/audit/catalog.json) regenerated via emit-catalog to include its prose. The essay: the color arc as narrative — JND makes the space finite; OKLCh axes (L=contrast, C=gamut, H=free); named-color collapse (maroon IS red, aliceblue lies); one-axis-multiply derivation; AAA mutes color by geometry; the pinned grid; construct-valid-not-validate, proven in Lean. Verified locally: gen-blog/emit-catalog/check-reader/check-seo/check-jargon/check-emphasis/ check-outline/check-copy-coverage all PASS. Plain markdown, one github link. Independent PR — one blog post + its catalog entry; no build/script/token/nav changes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V6j1N17T8exXeF8S6r99EM
New section "A palette is a Sudoku" before the close — the palette isn't picked, it's forced: board (color space), cells (color uses), forces (JND quantizes, gamut bounds, contrast couples into bands + a moat, so accessibility mutes color as a consequence). The givens are the hues (the one free axis); everything else is a forced completion (16 choices + 26 forced). Colors don't fill the constraints; the constraints fill them. Catalog regenerated (453 prose blocks). Verified: gen-blog, emit-catalog --check, check-reader/ seo/jargon/emphasis/outline all pass. Plain markdown (prose + a list), no tables. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V6j1N17T8exXeF8S6r99EM
Status + the one remaining step (needs the Nix toolchain)Content-complete and green on everything runnable outside the hermetic build: the post + the "A palette is a Sudoku" section render via One gate still red — npm run build
STRUCTURE_BASELINE=integrity/structure-audit/structure.json \
node vendor/conformance-kit/integrity/structure-audit/audit.mjs dist
git add integrity/structure-audit/structure.json && git commit -m "chore: regenerate structure.json for the new blog page"Then CI goes green and it's ready to merge → hermetic Nix / Cloudflare deploy (gated, human-approved). (Also fixed vs the earlier #169: branched clean off |
…robust) CVD attacks hue, leaves lightness intact → the contrast L-band is also the color-blindness defense (legible by construction). Never carry meaning by hue alone. The post's warm/cool palette rides the yellow-blue axis red-green CVD keeps, so it's robust. Catalog regenerated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V6j1N17T8exXeF8S6r99EM
A new blog post — the perceptual color model as an essay — plus its content-catalog entry.
Files (2):
blog/colors-are-coordinates.md(the post) +data/audit/catalog.json(regenerated byemit-catalogso the prose-catalog gate stays current). Nothing else.The essay: the whole color arc as narrative — perception has a resolution (the JND) so the color space is finite; the OKLCh axes (L spent on contrast, C gamut-capped, H free); the CSS named-color collapse (
maroonisred,alicebluelies about its hue); one-axis-multiply derivation; AAA mutes color by gamut geometry, not taste; the 8,149-color pinned grid; and construct-valid, don't validate — proven in Lean.Rendered by the site's own generator (
scripts/gen-blog.mjs), plain markdown (no tables), one external GitHub link.PR checklist
main(clean).gen-blog,emit-catalog --check,check-reader,check-seo,check-jargon,check-emphasis,check-outline,check-copy-coverageall pass; renders todist/blog/colors-are-coordinates.htmland lists in the blog index.Merge + the hermetic Nix → Cloudflare deploy remain gated behind CI + human approval.
🤖 Generated with Claude Code
https://claude.ai/code/session_01V6j1N17T8exXeF8S6r99EM