Refuse a length, a weight and a font stack typed into what the build reads [#29] - #160
Merged
Merged
Conversation
…reads [#29] The row named for the token file decided colours and nothing else. The file carries seven groups that hold values, and the colours sit in three of them, so a type size, a corner radius, a ring width or a font stack written next to the thing it describes was a second definition of a published value that every route in this tree reported green. It is the harder half to see: a wrong colour looks wrong on the page, and a wrong length renders perfectly for as long as nobody compares it against the file. The operator now reads a shape per group rather than the hex forms alone. Digits touching a length unit are a length; the two font declarations are named by their property, because a stack is a list somebody shortens and a weight is three digits that look like nothing in particular. The bound is the shape of the literal rather than its meaning, which is the bound the version row already declares for itself, so the file stays the authority for the set. The fixture map holds one violation per row and cannot tell one arm of an operator from another, so the three new shapes would have been unproven under it while the row went on reporting ok. They carry a pair of their own instead, one fixture per shape and one line per thing the row has to walk past, and docs/near-miss.md says which rows that applies to rather than leaving the map to be read as proof of every branch behind a row. Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The row named for the token file decided colours and nothing else. That gap is
easy to miss because the name does not show it, and the page this milestone is
heading for is the one where it would have been paid: a page demonstrating every
group of values is the page where a value gets typed next to the thing it is
describing.
What the file carries, and what the row read
Seven of the file's ten top-level keys hold values, and the colours sit in three
of them:
Run 2026-08-13 at
c6e40ba.surface,liftandfocushold the colours therow read.
typeholds a size and a weight per role at two viewing distances,shapeholds two radii and the width a column of text stops at, andfontholdstwo family stacks. None of those reached the row, so a length or a font stack
written into a template was a second definition of a published value with every
route in this tree reporting green over it.
It is the harder half to see. A wrong colour looks wrong to anybody who opens the
page. A wrong length renders perfectly, and it goes on rendering perfectly after
the published value moves.
What the row reads now
Run 2026-08-13 at
c6e40ba. Same row, same name, same population. Four shapesinstead of one: a hex run is a colour, digits touching a length unit are a
length, and the two font declarations are named by their property rather than by
their value, because a stack is a list somebody shortens and a weight is three
digits that look like nothing in particular.
The bound is the shape of the literal rather than its meaning. That is the bound
the version row already declares for itself and for the same reason: a value
spelled some other way walks through, so the file stays the authority for the set
rather than this row becoming a second copy of it. A fragment reference is still
cut out before anything is read, so the link the frame is built around is not
read as a colour.
The near miss
Four token values put into the frame, in the shape somebody writes them while
looking at the published file. This is the whole of the change against the head
of this branch:
and the same tree with those four lines taken out again is the green run quoted
above. Both run 2026-08-13. The failure names the file, the line, the value and
where the value is read from, which is what a reader needs in order to repair it
without going looking.
Why the proof is not the fixture map
The map in the suite holds one violation per row, so what it proves is that the
row refused something and never which branch of the operator did. This row now
has four branches and its entry in that map is a colour, so three of them would
have been unproven while the row went on printing ok. Deleting a branch and
watching the map is the test of that:
and with both font branches removed instead:
All run 2026-08-13. So each shape carries its own pair, and
docs/near-miss.mdnow says which rows the map is weaker for rather than leaving it to be read as
proof of every branch behind a row. The second half of the pair is the set of
lines the row has to walk past: a figure with its unit spelled out in prose, a
word that ends in a unit, a number in a sentence, a date, and a value taken from
the token's own custom property rather than typed.
What this does not do
This is one of the three things #29 asks for, the middle one, and the issue stays
open for the other two. The page that renders every token and states both budgets is the other two,
and it is not in this change.
It does not reach the client budget numbers either. Those are five values in the
same file, and a row over them cannot work by shape: a pattern for a number with
a time unit refuses the transition durations nobody is held to, and a row
carrying the five numbers in its own source is a second copy of the file it
exists to protect. That is #89, it needs a row to be handed what it compares
against, and this change does not add that.
A length that is not in the file is refused as loudly as one that is. That is
deliberate and it is the colour branch's existing position rather than a new one:
the file is the authority for values of these shapes, so a build input has no
business writing one whether or not it happens to match a published value.
The gate
Run 2026-08-13 at
c6e40ba.The means is Go, which is what the generator, the rule table and every other row
are written in. It adds no language, no runtime and no dependency: the shapes are
patterns in a package that already carries a dozen of them, and the proof is the
suite that already exists.
This change carries no second reader. Nothing in the ruleset on the branch
requires an approving review, and what stands in place of one is the evidence
above, with each command run at
c6e40barather than in a working tree.Part of #29.