Own the design system: CI, generated tokens, drop the llm stub - #7
Merged
Conversation
…m stub
This repo had NO CI — `.github/` held only banner images — and it showed.
**The monogram in production was broken.** SmooAI/ui fixed the smoo monogram
in f230808 ("restore the inner 'S' curve and the dot"). client-shared, which
declares itself ui's successor and is what the `th` CLI actually ships, still
carried the pre-fix path: an outer ring with no S and no dot. `shared/styles.css`
had likewise fallen ~60 lines behind (the whole `.input` family). The review
that prompted this work recorded the two repos' `shared/` as byte-identical;
they are not, and nothing would ever have said so.
- Adopt SmooAI/ui's `shared/styles.css` + `monogram.svg`. This repo's `shared/`
is now the declared source; SmooAI/ui gets a CI gate that fails if its copy
diverges (separate PR there).
- **`shared/tokens.json` was read by no code in any language** while the Rust
constants hand-mirrored the same values — a "language-agnostic source of
truth" that was inert. It is now the build input: `rust/build.rs` runs
`shared/tokens_codegen.rs` to generate the whole `tokens` module, so a token
cannot exist in the design system and be missing from Rust — nobody types
the constants. Generation also surfaced six tokens the CSS had and Rust
omitted (MUTED, MUTED_FOREGROUND, ACCENT, INPUT, RING, SIDEBAR), plus the
radius/space/font scales.
- **`tokens_match_css` could not fail in the direction that mattered.** It
asserted each Rust constant appeared *somewhere* in the CSS as a substring:
blind to a constant attached to the wrong property, and structurally
incapable of noticing a token the CSS has and Rust lacks. Replaced by
`shared/tokens_css_check.rs`, which parses `:root`, resolves `var()`, and
checks both directions. Verified red by hand-drifting a token value and by
adding an untracked `--surprise` colour to the CSS.
- **Drop the `llm` feature.** `rust/src/llm/mod.rs` was six lines of doc
comment; `--features llm` compiled to zero usable surface while Cargo.toml
and the README advertised it. A feature that compiles to nothing is worse
than an absent one — it reads as shipped. Pearl th-f7b20f still tracks the
real implementation; the flag comes back with code behind it. No consumer
used it (`th` builds `features = ["auth"]`).
- **CI** (`.github/workflows/rust.yml`): fmt, clippy `--all-targets -D warnings`
and the test suite in BOTH feature configurations — the default `no_std` `ui`
build and `--all-features`. Running one would report green over half the crate.
- **Module-tree guard** (`scripts/check-module-tree.py`): fails if any `.rs`
file under `rust/src/` is unreachable from a `mod` declaration. This repo
shipped `auth/refresh.rs` — 174 lines — that `mod.rs` never declared, so it
never compiled and no other check could see it (fixed in a21c06b). Verified
by planting an orphan in `rust/src/auth/`.
Tests: 34 with `--all-features`, 6 on default features; fmt + clippy clean in
both configurations.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0152bbE1veqfG1SVJdyLCBxC
|
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 finding that changed my plan
The review recorded
shared/styles.css,monogram.svgandtokens.jsonas byte-identical across SmooAI/ui and SmooAI/client-shared. Onorigin/maintoday, onlytokens.jsonstill is:The monogram this repo ships is broken. SmooAI/ui fixed it in
f230808— "restore the inner 'S' curve and the dot" — and the fix never crossed. client-shared carries the pre-fix path: an outer ring, no S, no dot. This is the repo thethCLI consumes in production.styles.csshad separately fallen ~60 lines behind (the entire.input/.input--lg/.input-error/.input-hintfamily), and the class-existence test drifted along with it, so nothing was red.That is the duplication defect having already fired, undetected, in the direction that reaches users. It is why this PR makes one repo the source rather than tidying both.
What changed
One source of truth. This repo's
shared/is now authoritative and adopts ui's correct assets. SmooAI/ui keeps a copy and gets a one-directional CI gate (separate PR) that fails when it diverges from here. I chose the gate over a cross-repo cargo dependency deliberately — see Judgment calls.shared/tokens.jsonis code input now, not documentation. It was read by no code in any language while the Rust constants hand-mirrored the same values.rust/build.rsrunsshared/tokens_codegen.rsand generates the entiretokensmodule from it, so a token cannot exist in the design system and be missing from Rust — nobody types the constants at all. That immediately surfaced six tokens the CSS declared and Rust omitted (MUTED,MUTED_FOREGROUND,ACCENT,INPUT,RING,SIDEBAR), plus the radius / space / font scales.RADIUS_PXis kept as an alias of the generatedRADIUS_MD_PXso pinned consumers keep compiling.The drift test could not fail in the direction that mattered.
tokens_match_cssasserted each Rust constant appeared somewhere in the CSS as a substring — it passes with a constant bound to the wrong custom property, and it is structurally blind to a token the CSS has and Rust lacks, because nothing walked the CSS.shared/tokens_css_check.rsreplaces it: parses:root, resolvesvar()to a fixed point, and asserts both directions.The
llmfeature is gone.rust/src/llm/mod.rswas six lines of doc comment;--features llmcompiled to zero usable surface whileCargo.toml, the feature table and the architecture diagram advertised it. A feature that compiles to nothing reads as shipped, which is worse than an honest gap. Pearl th-f7b20f still tracks the implementation and the flag returns with code behind it. No consumer is affected —thbuildsfeatures = ["auth"].CI exists.
.github/workflows/rust.yml:cargo fmt --check,clippy --all-targets -D warnings, and the tests — each in both feature configurations. Running only one reports a green suite over half the crate: theuitests are the only ones in the default build, and theauthtests exist only behind the feature.Module-tree guard.
scripts/check-module-tree.pyfails if any.rsunderrust/src/is unreachable from amoddeclaration. This repo shippedauth/refresh.rs— 174 lines — thatauth/mod.rsnever declared, so it never compiled andbuild/clippy/test/ coverage were all blind to it (fixed upstream ina21c06b). Textual on purpose: amodbehind a#[cfg]counts as declared, since the question is whether the file is wired in at all.Verification — every new check confirmed red before green
tokens_match_csscolor.brand.orangein tokens.jsoncss_colors_are_all_tokens--surprise: oklch(…)to styles.csscheck-module-tree.pyrust/src/auth/orphan.rsGreen state: 34 tests with
--all-features, 6 on default features,fmtandclippy --all-targets -D warningsclean in both configurations.Judgment calls
shared/outright. Both crates are git dependencies rather than crates.io publishes, so it is technically possible — but it would put two independently rev-pinned git deps in one graph for any consumer that ever wants both, and ui's live consumer (observability-studio) is pinned attag = v0.1.0. The gate closes the silent-divergence defect without the coupling.space/fontare generated too. They were the same inert data as the colours; generating them costs nothing and leaves no unbacked claim intokens.json.--rail-width/--status-bar-heightare geometrytokens.jsondoes not claim to cover; the check says so where it is enforced.Pearls: th-42c460, th-ea969b
🤖 Generated with Claude Code
https://claude.ai/code/session_0152bbE1veqfG1SVJdyLCBxC