Confirm the press vocabulary (press · pulls · plate · pigment · registration · substrate) #151

Closed
opened 2026-09-16 19:49:43 +00:00 by peterswimm · 1 comment
Owner

@ville — a confirmation rather than a consultation, and flagged for exactly that reason.

The press tier shipped in #148 / #149 and its vocabulary is now a live contract across three repos — it appears in forgeblock.yml, the labeling grammar, skin.css var names, and the Dart/Swift symbols that sync.py injects into Toilville_Rituals. Renaming any of it now is a cross-repo break, so it is worth you seeing it explicitly rather than discovering it later.

A press is a substrate plus an ordered list of pulls. Each pull is a plate inked in a pigment at a registration offset, with opacity, blend and fit.

What the words name

The two presses, composed and separated

Top panel: press.hatched-frame — two pulls of the same plate, one in mustard deliberately off registration (−3, +3) under one in charcoal. The fringe along the top and left edges is that misregistration, and it is the aesthetic rather than a defect. Bottom: press.hatched-hatch, three pulls.

Term Names Why not the obvious word
press the whole stack — the tier and the token
pulls the ordered list; one pull = one pass not stack — shell_kind: stack is taken in surface_profiles.yml
plate the monochrome artwork (your three EPS from #147)
pigment the colour token printed through that plate not ink — --ink already means text colour in the wireframe kit, 31 uses inside artifact.py's own stylesheet
registration the per-pull offset
substrate the opaque base; also the email/CLI fallback not paper — taken by bg.surface

Why pigment is a colour token and not a value

Re-inking: one token, different pigments

Identical press token; only the two pigment vars are re-pointed. That is mechanically what a [data-theme] block does, which is why a press needs no per-theme variant of its own. (spelwork ships light-only, so this shows the mechanism rather than a shipped theme — see #152.)

And what it degrades to

Degradation across surfaces

flattened is identical to live by design; only substrate visibly drops the press. That contract is why a press is a token and not a block: every block owes the channel-reduction law a plain-text form, and decoration has none.


If any of it should change, now is markedly cheaper than later. Everything above is rendered from the real dist/spelwork/skin.css — no mockups. scratchpad/press-review.html is the same thing interactive, self-contained, no build needed.


The rest of the contract, added since this issue was filed

Three PRs merged after I opened this and each widened the vocabulary. You would otherwise be
signing off roughly half of it.

fit — how a plate fills its box (#148, #149)

value
stretch fill the box, distorting if the ratio differs
contain · cover letterbox / crop
tile repeat at native size
slice 9-slice — corners rigid, edges repeated. The frame fix, see #155

anchor — which edge a pull occupies, and what for (#154, #157)

fill · top-rule · bottom-rule · left-rule · right-rule · top-band · bottom-band · left-band · right-band

The suffix is the part worth a second look: -rule is a divider and holds constant
weight (from --border-width-emphasis); -band is a decorative strip and holds
constant proportion (from the plate's own ratio). You chose that split in #156 over a
single default.

extent — thickness along the anchored axis; a number in px, or "auto". Overrides
whatever the anchor's intent defaults to.

Also now part of the contract, though not vocabulary: every press var is registered with
@property (#158), so --press-* names are typed and carry declared fallbacks. Renaming a
term now moves the tokens, the @property registrations, the Dart/Swift symbols, and the
labeling grammar together.

@ville — a confirmation rather than a consultation, and flagged for exactly that reason. The `press` tier shipped in #148 / #149 and its vocabulary is now a **live contract across three repos** — it appears in `forgeblock.yml`, the labeling grammar, `skin.css` var names, and the Dart/Swift symbols that `sync.py` injects into `Toilville_Rituals`. Renaming any of it now is a cross-repo break, so it is worth you seeing it explicitly rather than discovering it later. > A **press** is a **substrate** plus an ordered list of **pulls**. Each pull is a **plate** inked in a **pigment** at a **registration** offset, with `opacity`, `blend` and `fit`. ## What the words name ![The two presses, composed and separated](https://git.toilville.dev/Toilville/toilville-design/raw/commit/206a4e5/scratchpad/press-review/01-presses.png) Top panel: `press.hatched-frame` — **two pulls** of the same **plate**, one in mustard deliberately off **registration** (−3, +3) under one in charcoal. The fringe along the top and left edges is that misregistration, and it is the aesthetic rather than a defect. Bottom: `press.hatched-hatch`, **three pulls**. | Term | Names | Why not the obvious word | |---|---|---| | `press` | the whole stack — the tier and the token | | | `pulls` | the ordered list; one pull = one pass | **not `stack`** — `shell_kind: stack` is taken in `surface_profiles.yml` | | `plate` | the monochrome artwork (your three EPS from #147) | | | `pigment` | the colour token printed through that plate | **not `ink`** — `--ink` already means *text colour* in the wireframe kit, 31 uses inside `artifact.py`'s own stylesheet | | `registration` | the per-pull offset | | | `substrate` | the opaque base; also the email/CLI fallback | **not `paper`** — taken by `bg.surface` | ## Why `pigment` is a colour *token* and not a value ![Re-inking: one token, different pigments](https://git.toilville.dev/Toilville/toilville-design/raw/commit/206a4e5/scratchpad/press-review/02-reinking.png) Identical press token; only the two pigment vars are re-pointed. That is mechanically what a `[data-theme]` block does, which is why a press needs no per-theme variant of its own. (spelwork ships light-only, so this shows the mechanism rather than a shipped theme — see #152.) ## And what it degrades to ![Degradation across surfaces](https://git.toilville.dev/Toilville/toilville-design/raw/commit/206a4e5/scratchpad/press-review/03-degradation.png) `flattened` is identical to `live` **by design**; only `substrate` visibly drops the press. That contract is why a press is a *token* and not a block: every block owes the channel-reduction law a plain-text form, and decoration has none. --- **If any of it should change, now is markedly cheaper than later.** Everything above is rendered from the real `dist/spelwork/skin.css` — no mockups. `scratchpad/press-review.html` is the same thing interactive, self-contained, no build needed. --- ## The rest of the contract, added since this issue was filed Three PRs merged after I opened this and each widened the vocabulary. You would otherwise be signing off roughly half of it. **`fit` — how a plate fills its box** (#148, #149) | value | | |---|---| | `stretch` | fill the box, distorting if the ratio differs | | `contain` · `cover` | letterbox / crop | | `tile` | repeat at native size | | `slice` | 9-slice — corners rigid, edges repeated. The frame fix, see #155 | **`anchor` — which edge a pull occupies, and what for** (#154, #157) `fill` · `top-rule` · `bottom-rule` · `left-rule` · `right-rule` · `top-band` · `bottom-band` · `left-band` · `right-band` The suffix is the part worth a second look: **`-rule`** is a divider and holds constant *weight* (from `--border-width-emphasis`); **`-band`** is a decorative strip and holds constant *proportion* (from the plate's own ratio). You chose that split in #156 over a single default. **`extent`** — thickness along the anchored axis; a number in px, or `"auto"`. Overrides whatever the anchor's intent defaults to. **Also now part of the contract, though not vocabulary:** every press var is registered with `@property` (#158), so `--press-*` names are typed and carry declared fallbacks. Renaming a term now moves the tokens, the `@property` registrations, the Dart/Swift symbols, and the labeling grammar together.
Member

Confirmed! Here is horrible AI images to illustrate what is what: image image
@peterswimm

Confirmed! Here is horrible AI images to illustrate what is what: ![image](uploading...) ![image](uploading...) @peterswimm
ville closed this issue 2026-09-18 11:08:55 +00:00
Sign in to join this conversation.
No description provided.