Own the design system: CI, generated tokens, drop the llm stub - #7

Merged
brentrager merged 1 commit into
mainfrom
fix/parity
Aug 20, 2026
Merged

Own the design system: CI, generated tokens, drop the llm stub#7
brentrager merged 1 commit into
mainfrom
fix/parity

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

The finding that changed my plan

The review recorded shared/styles.css, monogram.svg and tokens.json as byte-identical across SmooAI/ui and SmooAI/client-shared. On origin/main today, only tokens.json still is:

shared/styles.css ui=26ee714d… client-shared=c23abd72… DIFFER
shared/monogram.svg ui=a2db97f8… client-shared=565d6108… DIFFER
shared/tokens.json ui=a06849b6… client-shared=a06849b6… IDENTICAL

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 the th CLI consumes in production. styles.css had separately fallen ~60 lines behind (the entire .input / .input--lg / .input-error / .input-hint family), 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.json is 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.rs runs shared/tokens_codegen.rs and generates the entire tokens module 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_PX is kept as an alias of the generated RADIUS_MD_PX so pinned consumers keep compiling.

The drift test could not fail in the direction that mattered.tokens_match_css asserted 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.rs replaces it: parses :root, resolves var() to a fixed point, and asserts both directions.

The llm feature is gone.rust/src/llm/mod.rs was six lines of doc comment; --features llm compiled to zero usable surface while Cargo.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 — th builds features = ["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: the ui tests are the only ones in the default build, and the auth tests exist only behind the feature.

Module-tree guard.scripts/check-module-tree.py fails if any .rs under rust/src/ is unreachable from a mod declaration. This repo shipped auth/refresh.rs — 174 lines — that auth/mod.rs never declared, so it never compiled and build / clippy / test / coverage were all blind to it (fixed upstream in a21c06b). Textual on purpose: a mod behind 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

CheckBroken howResult
tokens_match_cssdrifted color.brand.orange in tokens.jsonFAILED
css_colors_are_all_tokensadded --surprise: oklch(…) to styles.cssFAILED
check-module-tree.pyplanted rust/src/auth/orphan.rsexit 1, named the file

Green state: 34 tests with --all-features, 6 on default features, fmt and clippy --all-targets -D warnings clean in both configurations.

Judgment calls

  • Gate, not cross-repo dependency. ui could have become a thin re-export of this crate, deleting its 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 at tag = v0.1.0. The gate closes the silent-divergence defect without the coupling.
  • The gate is one-directional. A bidirectional gate deadlocks: neither repo's PR can go green until the other merges. This repo is the source and is ungated; ui must match it.
  • space / font are generated too. They were the same inert data as the colours; generating them costs nothing and leaves no unbacked claim in tokens.json.
  • Completeness is scoped to colour-valued properties.--rail-width / --status-bar-height are geometry tokens.json does 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

…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
@changeset-bot

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: bbfef42

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@brentrager
brentrager merged commit 7c5b948 into mainAug 20, 2026
2 checks passed
@brentrager
brentrager deleted the fix/parity branch August 20, 2026 18:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brentrager
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Own the design system: CI, generated tokens, drop the llm stub - #7

Merged
brentrager merged 1 commit into
mainfrom
fix/parity
Aug 20, 2026
Merged

Own the design system: CI, generated tokens, drop the llm stub#7
brentrager merged 1 commit into
mainfrom
fix/parity

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

The finding that changed my plan

The review recorded shared/styles.css, monogram.svg and tokens.json as byte-identical across SmooAI/ui and SmooAI/client-shared. On origin/main today, only tokens.json still is:

shared/styles.css ui=26ee714d… client-shared=c23abd72… DIFFER
shared/monogram.svg ui=a2db97f8… client-shared=565d6108… DIFFER
shared/tokens.json ui=a06849b6… client-shared=a06849b6… IDENTICAL

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 the th CLI consumes in production. styles.css had separately fallen ~60 lines behind (the entire .input / .input--lg / .input-error / .input-hint family), 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.json is 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.rs runs shared/tokens_codegen.rs and generates the entire tokens module 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_PX is kept as an alias of the generated RADIUS_MD_PX so pinned consumers keep compiling.

The drift test could not fail in the direction that mattered.tokens_match_css asserted 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.rs replaces it: parses :root, resolves var() to a fixed point, and asserts both directions.

The llm feature is gone.rust/src/llm/mod.rs was six lines of doc comment; --features llm compiled to zero usable surface while Cargo.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 — th builds features = ["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: the ui tests are the only ones in the default build, and the auth tests exist only behind the feature.

Module-tree guard.scripts/check-module-tree.py fails if any .rs under rust/src/ is unreachable from a mod declaration. This repo shipped auth/refresh.rs — 174 lines — that auth/mod.rs never declared, so it never compiled and build / clippy / test / coverage were all blind to it (fixed upstream in a21c06b). Textual on purpose: a mod behind 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

CheckBroken howResult
tokens_match_cssdrifted color.brand.orange in tokens.jsonFAILED
css_colors_are_all_tokensadded --surprise: oklch(…) to styles.cssFAILED
check-module-tree.pyplanted rust/src/auth/orphan.rsexit 1, named the file

Green state: 34 tests with --all-features, 6 on default features, fmt and clippy --all-targets -D warnings clean in both configurations.

Judgment calls

  • Gate, not cross-repo dependency. ui could have become a thin re-export of this crate, deleting its 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 at tag = v0.1.0. The gate closes the silent-divergence defect without the coupling.
  • The gate is one-directional. A bidirectional gate deadlocks: neither repo's PR can go green until the other merges. This repo is the source and is ungated; ui must match it.
  • space / font are generated too. They were the same inert data as the colours; generating them costs nothing and leaves no unbacked claim in tokens.json.
  • Completeness is scoped to colour-valued properties.--rail-width / --status-bar-height are geometry tokens.json does 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

…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
@changeset-bot

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: bbfef42

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@brentrager
brentrager merged commit 7c5b948 into mainAug 20, 2026
2 checks passed
@brentrager
brentrager deleted the fix/parity branch August 20, 2026 18:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brentrager
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Own the design system: CI, generated tokens, drop the llm stub - #7

Merged
brentrager merged 1 commit into
mainfrom
fix/parity
Aug 20, 2026
Merged

Own the design system: CI, generated tokens, drop the llm stub#7
brentrager merged 1 commit into
mainfrom
fix/parity

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

The finding that changed my plan

The review recorded shared/styles.css, monogram.svg and tokens.json as byte-identical across SmooAI/ui and SmooAI/client-shared. On origin/main today, only tokens.json still is:

shared/styles.css ui=26ee714d… client-shared=c23abd72… DIFFER
shared/monogram.svg ui=a2db97f8… client-shared=565d6108… DIFFER
shared/tokens.json ui=a06849b6… client-shared=a06849b6… IDENTICAL

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 the th CLI consumes in production. styles.css had separately fallen ~60 lines behind (the entire .input / .input--lg / .input-error / .input-hint family), 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.json is 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.rs runs shared/tokens_codegen.rs and generates the entire tokens module 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_PX is kept as an alias of the generated RADIUS_MD_PX so pinned consumers keep compiling.

The drift test could not fail in the direction that mattered.tokens_match_css asserted 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.rs replaces it: parses :root, resolves var() to a fixed point, and asserts both directions.

The llm feature is gone.rust/src/llm/mod.rs was six lines of doc comment; --features llm compiled to zero usable surface while Cargo.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 — th builds features = ["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: the ui tests are the only ones in the default build, and the auth tests exist only behind the feature.

Module-tree guard.scripts/check-module-tree.py fails if any .rs under rust/src/ is unreachable from a mod declaration. This repo shipped auth/refresh.rs — 174 lines — that auth/mod.rs never declared, so it never compiled and build / clippy / test / coverage were all blind to it (fixed upstream in a21c06b). Textual on purpose: a mod behind 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

CheckBroken howResult
tokens_match_cssdrifted color.brand.orange in tokens.jsonFAILED
css_colors_are_all_tokensadded --surprise: oklch(…) to styles.cssFAILED
check-module-tree.pyplanted rust/src/auth/orphan.rsexit 1, named the file

Green state: 34 tests with --all-features, 6 on default features, fmt and clippy --all-targets -D warnings clean in both configurations.

Judgment calls

  • Gate, not cross-repo dependency. ui could have become a thin re-export of this crate, deleting its 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 at tag = v0.1.0. The gate closes the silent-divergence defect without the coupling.
  • The gate is one-directional. A bidirectional gate deadlocks: neither repo's PR can go green until the other merges. This repo is the source and is ungated; ui must match it.
  • space / font are generated too. They were the same inert data as the colours; generating them costs nothing and leaves no unbacked claim in tokens.json.
  • Completeness is scoped to colour-valued properties.--rail-width / --status-bar-height are geometry tokens.json does 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

…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
@changeset-bot

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: bbfef42

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@brentrager
brentrager merged commit 7c5b948 into mainAug 20, 2026
2 checks passed
@brentrager
brentrager deleted the fix/parity branch August 20, 2026 18:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brentrager
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Own the design system: CI, generated tokens, drop the llm stub - #7

Merged
brentrager merged 1 commit into
mainfrom
fix/parity
Aug 20, 2026
Merged

Own the design system: CI, generated tokens, drop the llm stub#7
brentrager merged 1 commit into
mainfrom
fix/parity

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

The finding that changed my plan

The review recorded shared/styles.css, monogram.svg and tokens.json as byte-identical across SmooAI/ui and SmooAI/client-shared. On origin/main today, only tokens.json still is:

shared/styles.css ui=26ee714d… client-shared=c23abd72… DIFFER
shared/monogram.svg ui=a2db97f8… client-shared=565d6108… DIFFER
shared/tokens.json ui=a06849b6… client-shared=a06849b6… IDENTICAL

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 the th CLI consumes in production. styles.css had separately fallen ~60 lines behind (the entire .input / .input--lg / .input-error / .input-hint family), 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.json is 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.rs runs shared/tokens_codegen.rs and generates the entire tokens module 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_PX is kept as an alias of the generated RADIUS_MD_PX so pinned consumers keep compiling.

The drift test could not fail in the direction that mattered.tokens_match_css asserted 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.rs replaces it: parses :root, resolves var() to a fixed point, and asserts both directions.

The llm feature is gone.rust/src/llm/mod.rs was six lines of doc comment; --features llm compiled to zero usable surface while Cargo.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 — th builds features = ["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: the ui tests are the only ones in the default build, and the auth tests exist only behind the feature.

Module-tree guard.scripts/check-module-tree.py fails if any .rs under rust/src/ is unreachable from a mod declaration. This repo shipped auth/refresh.rs — 174 lines — that auth/mod.rs never declared, so it never compiled and build / clippy / test / coverage were all blind to it (fixed upstream in a21c06b). Textual on purpose: a mod behind 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

CheckBroken howResult
tokens_match_cssdrifted color.brand.orange in tokens.jsonFAILED
css_colors_are_all_tokensadded --surprise: oklch(…) to styles.cssFAILED
check-module-tree.pyplanted rust/src/auth/orphan.rsexit 1, named the file

Green state: 34 tests with --all-features, 6 on default features, fmt and clippy --all-targets -D warnings clean in both configurations.

Judgment calls

  • Gate, not cross-repo dependency. ui could have become a thin re-export of this crate, deleting its 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 at tag = v0.1.0. The gate closes the silent-divergence defect without the coupling.
  • The gate is one-directional. A bidirectional gate deadlocks: neither repo's PR can go green until the other merges. This repo is the source and is ungated; ui must match it.
  • space / font are generated too. They were the same inert data as the colours; generating them costs nothing and leaves no unbacked claim in tokens.json.
  • Completeness is scoped to colour-valued properties.--rail-width / --status-bar-height are geometry tokens.json does 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

…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
@changeset-bot

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: bbfef42

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@brentrager
brentrager merged commit 7c5b948 into mainAug 20, 2026
2 checks passed
@brentrager
brentrager deleted the fix/parity branch August 20, 2026 18:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brentrager
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Own the design system: CI, generated tokens, drop the llm stub - #7

Merged
brentrager merged 1 commit into
mainfrom
fix/parity
Aug 20, 2026
Merged

Own the design system: CI, generated tokens, drop the llm stub#7
brentrager merged 1 commit into
mainfrom
fix/parity

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

The finding that changed my plan

The review recorded shared/styles.css, monogram.svg and tokens.json as byte-identical across SmooAI/ui and SmooAI/client-shared. On origin/main today, only tokens.json still is:

shared/styles.css ui=26ee714d… client-shared=c23abd72… DIFFER
shared/monogram.svg ui=a2db97f8… client-shared=565d6108… DIFFER
shared/tokens.json ui=a06849b6… client-shared=a06849b6… IDENTICAL

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 the th CLI consumes in production. styles.css had separately fallen ~60 lines behind (the entire .input / .input--lg / .input-error / .input-hint family), 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.json is 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.rs runs shared/tokens_codegen.rs and generates the entire tokens module 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_PX is kept as an alias of the generated RADIUS_MD_PX so pinned consumers keep compiling.

The drift test could not fail in the direction that mattered.tokens_match_css asserted 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.rs replaces it: parses :root, resolves var() to a fixed point, and asserts both directions.

The llm feature is gone.rust/src/llm/mod.rs was six lines of doc comment; --features llm compiled to zero usable surface while Cargo.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 — th builds features = ["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: the ui tests are the only ones in the default build, and the auth tests exist only behind the feature.

Module-tree guard.scripts/check-module-tree.py fails if any .rs under rust/src/ is unreachable from a mod declaration. This repo shipped auth/refresh.rs — 174 lines — that auth/mod.rs never declared, so it never compiled and build / clippy / test / coverage were all blind to it (fixed upstream in a21c06b). Textual on purpose: a mod behind 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

CheckBroken howResult
tokens_match_cssdrifted color.brand.orange in tokens.jsonFAILED
css_colors_are_all_tokensadded --surprise: oklch(…) to styles.cssFAILED
check-module-tree.pyplanted rust/src/auth/orphan.rsexit 1, named the file

Green state: 34 tests with --all-features, 6 on default features, fmt and clippy --all-targets -D warnings clean in both configurations.

Judgment calls

  • Gate, not cross-repo dependency. ui could have become a thin re-export of this crate, deleting its 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 at tag = v0.1.0. The gate closes the silent-divergence defect without the coupling.
  • The gate is one-directional. A bidirectional gate deadlocks: neither repo's PR can go green until the other merges. This repo is the source and is ungated; ui must match it.
  • space / font are generated too. They were the same inert data as the colours; generating them costs nothing and leaves no unbacked claim in tokens.json.
  • Completeness is scoped to colour-valued properties.--rail-width / --status-bar-height are geometry tokens.json does 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

…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
@changeset-bot

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: bbfef42

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@brentrager
brentrager merged commit 7c5b948 into mainAug 20, 2026
2 checks passed
@brentrager
brentrager deleted the fix/parity branch August 20, 2026 18:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brentrager
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Own the design system: CI, generated tokens, drop the llm stub - #7

Merged
brentrager merged 1 commit into
mainfrom
fix/parity
Aug 20, 2026
Merged

Own the design system: CI, generated tokens, drop the llm stub#7
brentrager merged 1 commit into
mainfrom
fix/parity

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

The finding that changed my plan

The review recorded shared/styles.css, monogram.svg and tokens.json as byte-identical across SmooAI/ui and SmooAI/client-shared. On origin/main today, only tokens.json still is:

shared/styles.css ui=26ee714d… client-shared=c23abd72… DIFFER
shared/monogram.svg ui=a2db97f8… client-shared=565d6108… DIFFER
shared/tokens.json ui=a06849b6… client-shared=a06849b6… IDENTICAL

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 the th CLI consumes in production. styles.css had separately fallen ~60 lines behind (the entire .input / .input--lg / .input-error / .input-hint family), 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.json is 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.rs runs shared/tokens_codegen.rs and generates the entire tokens module 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_PX is kept as an alias of the generated RADIUS_MD_PX so pinned consumers keep compiling.

The drift test could not fail in the direction that mattered.tokens_match_css asserted 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.rs replaces it: parses :root, resolves var() to a fixed point, and asserts both directions.

The llm feature is gone.rust/src/llm/mod.rs was six lines of doc comment; --features llm compiled to zero usable surface while Cargo.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 — th builds features = ["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: the ui tests are the only ones in the default build, and the auth tests exist only behind the feature.

Module-tree guard.scripts/check-module-tree.py fails if any .rs under rust/src/ is unreachable from a mod declaration. This repo shipped auth/refresh.rs — 174 lines — that auth/mod.rs never declared, so it never compiled and build / clippy / test / coverage were all blind to it (fixed upstream in a21c06b). Textual on purpose: a mod behind 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

CheckBroken howResult
tokens_match_cssdrifted color.brand.orange in tokens.jsonFAILED
css_colors_are_all_tokensadded --surprise: oklch(…) to styles.cssFAILED
check-module-tree.pyplanted rust/src/auth/orphan.rsexit 1, named the file

Green state: 34 tests with --all-features, 6 on default features, fmt and clippy --all-targets -D warnings clean in both configurations.

Judgment calls

  • Gate, not cross-repo dependency. ui could have become a thin re-export of this crate, deleting its 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 at tag = v0.1.0. The gate closes the silent-divergence defect without the coupling.
  • The gate is one-directional. A bidirectional gate deadlocks: neither repo's PR can go green until the other merges. This repo is the source and is ungated; ui must match it.
  • space / font are generated too. They were the same inert data as the colours; generating them costs nothing and leaves no unbacked claim in tokens.json.
  • Completeness is scoped to colour-valued properties.--rail-width / --status-bar-height are geometry tokens.json does 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

…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
@changeset-bot

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: bbfef42

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@brentrager
brentrager merged commit 7c5b948 into mainAug 20, 2026
2 checks passed
@brentrager
brentrager deleted the fix/parity branch August 20, 2026 18:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brentrager
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Own the design system: CI, generated tokens, drop the llm stub - #7

Merged
brentrager merged 1 commit into
mainfrom
fix/parity
Aug 20, 2026
Merged

Own the design system: CI, generated tokens, drop the llm stub#7
brentrager merged 1 commit into
mainfrom
fix/parity

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

The finding that changed my plan

The review recorded shared/styles.css, monogram.svg and tokens.json as byte-identical across SmooAI/ui and SmooAI/client-shared. On origin/main today, only tokens.json still is:

shared/styles.css ui=26ee714d… client-shared=c23abd72… DIFFER
shared/monogram.svg ui=a2db97f8… client-shared=565d6108… DIFFER
shared/tokens.json ui=a06849b6… client-shared=a06849b6… IDENTICAL

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 the th CLI consumes in production. styles.css had separately fallen ~60 lines behind (the entire .input / .input--lg / .input-error / .input-hint family), 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.json is 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.rs runs shared/tokens_codegen.rs and generates the entire tokens module 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_PX is kept as an alias of the generated RADIUS_MD_PX so pinned consumers keep compiling.

The drift test could not fail in the direction that mattered.tokens_match_css asserted 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.rs replaces it: parses :root, resolves var() to a fixed point, and asserts both directions.

The llm feature is gone.rust/src/llm/mod.rs was six lines of doc comment; --features llm compiled to zero usable surface while Cargo.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 — th builds features = ["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: the ui tests are the only ones in the default build, and the auth tests exist only behind the feature.

Module-tree guard.scripts/check-module-tree.py fails if any .rs under rust/src/ is unreachable from a mod declaration. This repo shipped auth/refresh.rs — 174 lines — that auth/mod.rs never declared, so it never compiled and build / clippy / test / coverage were all blind to it (fixed upstream in a21c06b). Textual on purpose: a mod behind 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

CheckBroken howResult
tokens_match_cssdrifted color.brand.orange in tokens.jsonFAILED
css_colors_are_all_tokensadded --surprise: oklch(…) to styles.cssFAILED
check-module-tree.pyplanted rust/src/auth/orphan.rsexit 1, named the file

Green state: 34 tests with --all-features, 6 on default features, fmt and clippy --all-targets -D warnings clean in both configurations.

Judgment calls

  • Gate, not cross-repo dependency. ui could have become a thin re-export of this crate, deleting its 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 at tag = v0.1.0. The gate closes the silent-divergence defect without the coupling.
  • The gate is one-directional. A bidirectional gate deadlocks: neither repo's PR can go green until the other merges. This repo is the source and is ungated; ui must match it.
  • space / font are generated too. They were the same inert data as the colours; generating them costs nothing and leaves no unbacked claim in tokens.json.
  • Completeness is scoped to colour-valued properties.--rail-width / --status-bar-height are geometry tokens.json does 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

…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
@changeset-bot

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: bbfef42

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@brentrager
brentrager merged commit 7c5b948 into mainAug 20, 2026
2 checks passed
@brentrager
brentrager deleted the fix/parity branch August 20, 2026 18:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brentrager
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Own the design system: CI, generated tokens, drop the llm stub - #7

Merged
brentrager merged 1 commit into
mainfrom
fix/parity
Aug 20, 2026
Merged

Own the design system: CI, generated tokens, drop the llm stub#7
brentrager merged 1 commit into
mainfrom
fix/parity

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

The finding that changed my plan

The review recorded shared/styles.css, monogram.svg and tokens.json as byte-identical across SmooAI/ui and SmooAI/client-shared. On origin/main today, only tokens.json still is:

shared/styles.css ui=26ee714d… client-shared=c23abd72… DIFFER
shared/monogram.svg ui=a2db97f8… client-shared=565d6108… DIFFER
shared/tokens.json ui=a06849b6… client-shared=a06849b6… IDENTICAL

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 the th CLI consumes in production. styles.css had separately fallen ~60 lines behind (the entire .input / .input--lg / .input-error / .input-hint family), 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.json is 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.rs runs shared/tokens_codegen.rs and generates the entire tokens module 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_PX is kept as an alias of the generated RADIUS_MD_PX so pinned consumers keep compiling.

The drift test could not fail in the direction that mattered.tokens_match_css asserted 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.rs replaces it: parses :root, resolves var() to a fixed point, and asserts both directions.

The llm feature is gone.rust/src/llm/mod.rs was six lines of doc comment; --features llm compiled to zero usable surface while Cargo.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 — th builds features = ["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: the ui tests are the only ones in the default build, and the auth tests exist only behind the feature.

Module-tree guard.scripts/check-module-tree.py fails if any .rs under rust/src/ is unreachable from a mod declaration. This repo shipped auth/refresh.rs — 174 lines — that auth/mod.rs never declared, so it never compiled and build / clippy / test / coverage were all blind to it (fixed upstream in a21c06b). Textual on purpose: a mod behind 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

CheckBroken howResult
tokens_match_cssdrifted color.brand.orange in tokens.jsonFAILED
css_colors_are_all_tokensadded --surprise: oklch(…) to styles.cssFAILED
check-module-tree.pyplanted rust/src/auth/orphan.rsexit 1, named the file

Green state: 34 tests with --all-features, 6 on default features, fmt and clippy --all-targets -D warnings clean in both configurations.

Judgment calls

  • Gate, not cross-repo dependency. ui could have become a thin re-export of this crate, deleting its 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 at tag = v0.1.0. The gate closes the silent-divergence defect without the coupling.
  • The gate is one-directional. A bidirectional gate deadlocks: neither repo's PR can go green until the other merges. This repo is the source and is ungated; ui must match it.
  • space / font are generated too. They were the same inert data as the colours; generating them costs nothing and leaves no unbacked claim in tokens.json.
  • Completeness is scoped to colour-valued properties.--rail-width / --status-bar-height are geometry tokens.json does 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

…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
@changeset-bot

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: bbfef42

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@brentrager
brentrager merged commit 7c5b948 into mainAug 20, 2026
2 checks passed
@brentrager
brentrager deleted the fix/parity branch August 20, 2026 18:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brentrager