Repository navigation
fix(desktop): read the --luke-* roles where CSS still named retired tokens - #3631
Merged
Merged
Conversation
…okens CSS merged after #3524 and #3569 retired the desktop's token aliases went on reading --hairline, --space-*, --text-*, --raised, --control-*, --switch-on and --focus-ring*, which nothing declares any more, so the video avatar's faces, the Pull request tab's labels and stack, and the offline mark's title-bar room lost their gaps, edges and colours. Each now reads the role its alias pointed at. repository-checks.sh now refuses a var() with no fallback whose custom property no tracked sheet, page or script under apps/ or packages/ declares, naming the file and line. Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
luke-agent Bot
added a commit
that referenced
this pull request
Oct 18, 2026
Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
#3245 merged its review-thread rules on the retired names; the new repository check caught them on this branch's merge with main. Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
A getPropertyValue read quoted the name too, so a token whose CSS declarations were gone still passed while a script read it (Devin's review on #3631). Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
Merged
14 tasks done
This branch was successfully deployed
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.
Summary
#3524 (and #3569 after it) deleted the desktop's compatibility token aliases. PRs that were already open then merged CSS that still reads them. Nothing failed, because a
var()naming an undeclared property just makes its declaration invalid, so borders, gaps, padding and colours silently dropped.mainwhen this PR opened, and 10 more that merged since, now reads the--luke-*role its alias pointed at, using refactor(desktop): remove the desktop's compatibility token aliases #3524's deleted alias block (--space-N→--luke-space-N,--hairline(-strong)→--luke-color-border(-strong),--text-primary/secondary/tertiary→--luke-color-text/-muted/-subtle,--raised→--luke-color-fill-hover,--control-height/gap/radius→--luke-control-*,--switch-on→--luke-color-switch-on,--focus-ring→--luke-color-focus-ring) and feat(ui): lift the window-level roles into the shared tokens #3569's (--focus-ring-width/offset→--luke-focus-ring-width/offset):settings.css: the video avatar's picture choice (Choose the video avatar from large faces rather than a pop-up #3257, Settings › Experimental › Avatar), not a Diffs group.tasks.css: the Pull request tab header's branch row, stack button and labels (feat(desktop,service,features): labels, compact reviewers, and stack navigation in the Pull request tab's header #3268). These use the same replacements feat(desktop,service,features): reviewer and label pickers in the Pull request tab's header #3309 makes to the same lines.tasks.css(merged frommainafter this PR opened): the inline review threads in Files changed (feat(desktop): draw review threads on their lines in Files changed #3245), 10 reads more. This PR's own check caught them in CI, with--section-fill→--luke-color-surfaceand a local--focus-ring-offset: var(--focus-ring-inset)changed to the--luke-focus-ring-*override its neighbours use.desktop.css: the offline mark's size and the sidebar toggle's clearance in the title bar (feat(desktop): say when the Mac is offline #3523), which the first regex missed.breadcrumbs.css: this one read--focus-ring-width/-offsetwith literal fallbacks equal to today's values. It now reads the roles with no fallback, the way its sibling components do, so the guard can see it.scripts/repository-checks.shtakes every tracked.css,.html,.tsand.tsxfile underapps/andpackages/(tests excluded). It treats a property as declared if it appears as a sheet's--name:or@property --name, or as a script's"--name"literal (setProperty, a style object's key, a constant). A--name-${…}template, such as ChartStyle's--color-${key}, declares the whole family. The step then fails on anyvar(--name)with no fallback that nothing declares, naming the file and line. The only name on the hand-kept list is--default-button-size, which comes from Excalidraw's own sheet. The step takes about 0.5s. Declarations are pooled across apps, so it catches a name that is gone everywhere, which is what a retired token is.noUndeclaredCustomPropertiesis a nursery rule that needs Biome ≥ 2.5.11 (we pin 2.5.8). It runs the project scanner, follows CSS imports only, and cannot see properties set from TypeScript. Stylelint is not in the repo, and its plugin for this has the same blind spot.Evidence
main's CSS, before the fix: fails with 41 reads (desktop.css×4,settings.css×19,tasks.css×18), each named by file and line. After the fix: passes../scripts/repository-checks.sh: passed../scripts/oxlint.sh: 0 warnings.pnpm knip: clean.biome checkon the touched sheets: clean.pnpm check:affected: ran out of memory indiscarded-effect(a TypeScript-only check; this PR changes no TypeScript), so I ran the individual checks above instead.fakeAppBridgethat renders the real components under the real built stylesheet, before and after, in dark and light. The harness is not committed.Screenshots
Before, on
main, and after, with the built desktop stylesheet. Dark first, then light.Settings › Experimental › Avatar (picture choice). Before this fix, the faces have no gaps, the chosen face has no ring, the names are the wrong colour, and the stage has no inset or radius.
Pull request tab header (labels, branch row, stack). Before this fix, the label pills have no padding or gap, and the Stack button has no edge, gap or colour.
Invariants
./scripts/check.shgreen. (CI)LUKE_UPDATE_FIXTURESnot run, or diff explained line by line). (CI)mainwithout the CSS fix.astype assertion outside the allowlisted files. (CI via anti-slop)Effect.runPromise/runSync/runForkoutside the runtime edges and the shimstools/anti-slop/effect-edges.jsonrecords. (CI viaanti-slop/no-run-promise-outside-edges)setTimeout/setInterval/new Promise/AbortController/fs.watchoutside the filestools/anti-slop/effect-edges.jsonrecords. (CI viaanti-slop/no-raw-async-primitives)pnpm discarded-effect)AGENTS.md's "The permanent adaptors" with the reason it stays.CLAUDE.md/AGENTS.mdsentence naming a changed part is edited; root pair stays byte-identical.PRIVACY.mdunchanged.package.jsondeps match what the sources import by bare specifier;effectviacatalog:. (CI)Notes
Made with Luke
Summary by cubic
Restores the desktop UI's borders, gaps, padding, and colors that silently dropped after #3524 and #3569 retired the CSS token aliases. All
var()reads still naming a retired token now read the--luke-*role they pointed at, and a new repository check fails on anyvar(--name)with no fallback that nothing declares, so the regression can't repeat.Bug Fixes
settings.css: the video avatar picture choice in Settings › Experimental › Avatar regains its spacing, borders, focus ring, and colors.tasks.css: the Pull request tab's branch row, stack button, and labels regain their gaps, edges, and text colors, and the inline review threads in Files changed (feat(desktop): draw review threads on their lines in Files changed #3245) regain their padding, borders, and surface fill — the new check caught those reads on the merge with main.desktop.cssandbreadcrumbs.css: the offline mark's size, the sidebar toggle's title-bar clearance, and the breadcrumb focus ring are restored; breadcrumbs now read the roles with no fallback, like sibling components, so the check can validate it.New check
scripts/repository-checks.shfails when avar(--name)has no fallback and no tracked.css,.html,.ts, or.tsxfile underapps/andpackages/declares--name(tests excluded), naming the file and line.--name:or@property --name; scripts only by writing the name (a style string, a style object key, a["--name"] =, orsetProperty), so reads likegetPropertyValuedon't count.--name-${…}template declares the whole family, and declarations are pooled across apps so the check catches a token gone everywhere.--default-button-size, which Excalidraw's own stylesheet sets; the check adds about 0.5s to the run.Written for commit f8bd39b. Summary will update on new commits.