Skip to content

v0.4.0 — the prose reset and footer blocks

Choose a tag to compare

@robertblust robertblust released this 31 Aug 19:57
· 15 commits to main since this release

Two new blocks, and a defect in the variant machinery that needing them exposed.

blocks/reset.css — the five rules every prose page opens with

Four of the five had drifted across the sixteen prose pages:

rule what was wrong
.mono missing from two landing pages — and on one, an element marked as data was rendering as prose, in production, with every check green
a{color:inherit} missing from one
body font stack gained "Segoe UI" on five pages; lost ui-sans-serif, -apple-system and -webkit-font-smoothing on one

"Segoe UI" is dropped rather than adopted: ten pages omit it, five carry it, the split follows no
site and no page type, and system-ui already resolves to it on Windows.

blocks/footer.css + blocks/footer-credit.css — the footer, in two variants

companygraph.io and guestgraph.io credit blust.ch in their footer; blust.ch is that site and does
not credit itself. Ten prose pages carry nine credit rules and six carry none. That is a fact about
the sites, not a preference, so the wrong variant word is an error rather than a style choice.

parts — a third kind of substitution

blockFor could fill a variant word the package owns, and parameters the site owns.
Package-owned content appearing under one variant and not another had no name. Two whole block
files would have duplicated the four rules the variants share, which is the duplication this
package exists to remove.

The defect this exposed, shipping since v0.3.1

findFence hardcoded VARIANTS = new Set(["page","deck"]) while FENCES declares variants per
fence. A marker reading · credit therefore parsed as no variant at all, and the tool rejected
it saying "declares no variant" — about a fence whose opening line plainly declared one. The parser
now reports the word it finds; the manifest decides whether it is allowed, and says both what it
found and what is permitted.

This is also why the general variant-consistency guard shipped in v0.3.0 had never been driven end
to end. The stated reason was that no fence had variants differing by more than a :root brace.
The real reason underneath it: no fence could have, because a new variant word was unparseable.
It now fires on a real fence.

Also

  • headerv3. Its block said the row is byte-identical on all fifteen pages; there are sixteen. Correcting one word changes the block's bytes, so it waited for a release that re-syncs every page.
  • Every fence's emitted version is now asserted against versions.json. It was asserted for one fence out of four, and the test that appeared to cover the rest compared versions.json with itself.
  • The font-family guard covers every block the package ships, not one. This project shipped IBM Plex Mono — declared in no @font-face, present on no machine — for months.

106 tests.