feat(standard): §11 stops restating colour values — v2.03 - #36
Conversation
§11 has always named steelbore.toml "the canonical machine-readable source" and told implementors that values are read, never retyped — then printed all 157 of them itself, across eleven multitable blocks spanning §11.0 through §11.5. The instruction and the document disagreed, and §11.4 resolved that disagreement in the document's favour: "Where this document and that file disagree, this document governs and the file is corrected." That clause was not wrong so much as it was the cost of keeping two copies — something had to break the tie, and a specification is the natural winner. The fix is to stop keeping two copies. Every hex and RGB triple is removed from §11. Each table names the token and the role it plays; the value comes from the file. Where dropping a value column would have destroyed meaning, the column was converted rather than deleted. §11.1.1's "Variant hex" is now "Variant token" and reads Plasma Orange Lift where it read #FF8A3D, with unlifted rows saying (unchanged) instead of repeating their base. The seven per-palette "Color" headers became "Token" for the same reason. A table in §8.6 carrying canvases by hex was converted the same way. §11.4's tie-break clause is inverted, and that is the normative heart of this release: the file governs every value, §11 governs the contract around it — which roles exist, which are mandatory, what the contrast guarantee covers, which palettes are adoptable. The two can no longer disagree about a colour because only one of them states one. The cost is written into §11.4 rather than left for a reader to discover: §11 can no longer be implemented from this document alone. A reader of the PDF, HTML, or Info output gets role names, contracts, and palette membership, but needs steelbore.toml for any colour. That is a real reduction in self-sufficiency, accepted in exchange for values having exactly one definition. Contrast ratios stay. A measured ratio and a WCAG threshold are textually identical — 4.5:1 is the AA rule, 15.09:1 is a measurement — so removing one class would have removed the other, and §11.0.2's matrix along with it. 168 ratios are preserved. Unchanged: every role name, the contrast guarantee, the palette family and its membership, §11.5's non-adoptable fidelity palettes, and §11.6's resolution order. No project conforming at v2.02 becomes non-conformant at v2.03. Verified: makeinfo and texi2any --html both build clean; the tracked .md is regenerated and carries zero values; role names, slugs, and ratios all survive. The skill encoding syncs at the same version and date. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9338110cd1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @documentencoding UTF-8 | ||
| @documentlanguage en | ||
| @settitle The Steelbore Standard 2.02 | ||
| @settitle The Steelbore Standard 2.03 |
There was a problem hiding this comment.
Sign this commit before shipping it
The reviewed commit object has no gpgsig header, so it cannot satisfy this repository's non-negotiable requirement that every commit—including assistant-generated commits—be cryptographically signed and show as Verified. Recreate this change as a signed commit before it is submitted or shipped.
AGENTS.md reference: AGENTS.md:L88-L90
Useful? React with 👍 / 👎.
Standard side of v2.03. The Construct side syncs at the same version and date, per the two-repo rule.
The contradiction this resolves
§11 has always named
steelbore.toml"the canonical machine-readable source" and told implementors that values are read, never retyped — then printed all 157 of them itself, across eleven@multitableblocks spanning §11.0–§11.5.The instruction and the document disagreed, and §11.4 settled it in the document's favour:
That clause wasn't wrong so much as it was the cost of keeping two copies — something had to break the tie, and a specification is the natural winner. This stops keeping two copies.
What changed
Every hex and RGB triple is gone from §11. Each table names the token and the role it plays; the value comes from the file.
Where dropping a value column would have destroyed meaning, the column was converted, not deleted:
Seven per-palette
Colorheaders becameTokenfor the same reason. A §8.6 table carrying canvases by hex was converted the same way.The normative heart: §11.4's tie-break is inverted
The file now governs every value; §11 governs the contract around it — which roles exist, which are mandatory, what the contrast guarantee covers, which palettes are adoptable. The two can no longer disagree about a colour, because only one of them states one. Changing a colour is a single edit rather than an edit plus a hunt for every restatement.
The cost, stated in §11.4 rather than left to be discovered
§11 can no longer be implemented from this document alone. A reader of the PDF, HTML, or Info output gets role names, contracts, and palette membership — but needs
steelbore.tomlfor any actual colour. That is a real reduction in the document's self-sufficiency, accepted deliberately in exchange for values having exactly one definition. §11.4 now says so explicitly, including what the document still uniquely supplies.Contrast ratios stay — deliberately
A measured ratio and a WCAG threshold are textually identical:
4.5:1is the AA rule,15.09:1is a measurement. Removing one class would have removed the other, taking §11.0.2's matrix with it. 168 ratios preserved.Verification
Role names, palette slugs, and
surface-alt/steelbore-navywhitereferences all survive.Unchanged: every role name, the contrast guarantee, the palette family and its membership, §11.5's non-adoptable fidelity palettes, §11.6's resolution order. No project conforming at v2.02 becomes non-conformant at v2.03.
🤖 Generated with Claude Code