chore(deps): take Charcuterie's 1.x line — tokens 0.2→1.5, logic 0.1→1.2, server 0.1→0.2 - #11
Merged
Merged
Conversation
…1.2, server 0.1→0.2 castkit was the furthest behind in the fleet, and pinned on the pre-1.0 caret where the MINOR is the breaking channel: `^0.2.0` resolves to `>=0.2.0 <0.3.0`, so every tokens release since — the widened 19-colour ePaper flat-fill palette, the first-paint snippet, the 17px type ramp, the AA fixes — was unreachable here. Silently: the range resolves happily to the old version rather than failing. - `@charcuterie/tokens` `^0.2.0` → `^1.5.0` (`views`, `slatecast`) - `@charcuterie/logic` `^0.1.0` → `^1.2.0` (`slatecast`) - `@charcuterie/server` `^0.1.0` → `^0.2.0` (`server`, `slatecast`) The five shared build-tooling packages (biome-config, eslint-config, tsconfig, vitest-config, playwright-config) were already at their latest published versions. `@charcuterie/ui` stays out: slatecast is Preact under a 60 KB gz budget and the component layer does not reach it (M5b). Adopting it would be an adoption decision, not an upgrade. No source change was needed. Nothing castkit reads was renamed or removed: the six Spectra 6 inks are byte-identical from 0.2.0 (1.0.0 re-derived them from Pimoroni's driver rather than retyping them), and all five custom properties slatecast aliases still emit. `createStaticHandler`'s 0.2.0 is purely additive (`rewriteRequestPath`). Gates: typecheck, biome, eslint, 221 vitest tests, 5 playwright e2e, and `yarn build` all pass. Slatecast ships 6.51 kB gz CSS + 12.98 kB gz JS — the tokens stylesheet got 0.11 kB bigger uncompressed and 0.07 kB SMALLER gzipped.
Committed into the PR branch rather than the orphan branch the PR body invited deleting — a raw.githubusercontent URL only resolves while a ref reaches the blob, so deleting that branch would 404 every image on the PR (agentic decision 2026-08-11). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.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.
What
castkit was the furthest behind in the fleet on Charcuterie, and pinned on the range where that is invisible.
^0.2.0resolves to>=0.2.0 <0.3.0, so pre-1.0 the minor is the breaking channel — every tokens release since (the widened 19-colour ePaper flat-fill palette, the first-paint snippet, the 17px type ramp, the AA fixes to hovered fills andcontent.muted) was unreachable here, and unreachable silently: the range resolved happily to the old version instead of failing the install.@charcuterie/tokensviews,slatecast^0.2.0^1.5.0@charcuterie/logicslatecast^0.1.0^1.2.0@charcuterie/serverserver,slatecast^0.1.0^0.2.0The five shared build-tooling packages (
biome-config1.0.0,eslint-config1.1.0,tsconfig1.0.0,vitest-config1.0.1,playwright-config1.0.1) were already at their latest published versions — no change.@charcuterie/uiis deliberately still absent: slatecast is Preact under a 60 KB gz budget and the component layer does not reach it (M5b). Adding it would be an adoption decision, not an upgrade.No source change was needed, and no token had to be re-mapped. That is a finding, not a shortcut — see below.
Why nothing moved
Crossing 0.2 → 1.5 on tokens should be where a consumer bleeds. It did not, and the reason is specific to what castkit actually reads:
IntentName,EpaperPalette,epaperColours) and exactly five CSS custom properties —--color-surface-base,--color-surface-raised,--color-content-primary,--color-content-secondary,--color-intent-accent-solid. All five still emit, eight times each, invariables.css. Nothing was renamed or removed out from under this repo.vmin/vw/vh— it never reads a--font-size-*and has noremin its stylesheet — and the ePaper views compute their own sizes in px throughfitText. The ramp rebuild is a no-op here by construction.content.muted(1.5.0) cannot reach it either. Slatecast's--fg-dimaliasescontent.**secondary**, which did not move.content.mutedis not read anywhere in the repo.saturation = 0.5rather than retyping them, soepaperColoursdumps the same values it did before. Confirmed by dumping the object and by the ePaper screenshots below being byte-identical PNGs.createStaticHandler's 0.2.0 is purely additive (a new optionalrewriteRequestPath).Gates
All run on this branch, all green:
yarn typecheckyarn lint(Biome + ESLint)master, no new onesyarn vitest runyarn e2eyarn buildyarn build:storybook+:slatecastBundle: slatecast ships 6.51 kB gz CSS + 12.98 kB gz JS. The tokens stylesheet grew 0.11 kB uncompressed and got 0.07 kB smaller gzipped — 19.5 kB against the 60 kB budget.
Visual verification
Every Slatecast kiosk view, in both schemes, driven to a populated state (real track, real queue, real agenda, real photo) at the Media Controls 720×720 panel, plus the round 480×480 Porthole. Left half is built at
tokens@0.2.0/logic@0.1.0, right half at1.5.0/1.2.0.Verdict: nothing reflowed. Of the 25 captured pairs, the ones that differ at all differ only in the live clock digit or the ticking elapsed-time counter (
0:32→0:31); nine slatecast pairs and all seven ePaper pairs are byte-identical PNGs. No clipped text, no wrapped buttons, no broken grid, no overlapping chrome, no blown-out fixed-width container.Now Playing
Queue
Calendar
Weather
Ambient and Clock
Porthole — the round 480×480 panel
The circle-safe 9% inset is where a taller type ramp would have shown up first. It did not.
ePaper (Inkcast) views — byte-identical
Live in-browser dithering, so this is the real quantizer output, not a mock.
Notes for the reviewer
docs/images/and referenced by SHA-pinned raw URL. They merge intomasterwith the change, so they still resolve for whoever reopens this PR in a month. That is the deliberate trade for ~1.2 MB of PNGs in the diff and in history.@charcuterie/ui, adoptingbuildFirstPaintRule/buildFirstPaintCss(castkit hand-stampsdata-schemein the page shell today), and taking the new 19-colour ePaper flat-fill palette /epaperPanelsregistry, which is now reachable but which@castkit/corehas its own equivalent of.🤖 Generated with Claude Code