T-NGOJ-design-language-layer-ssr-ownership
Status: open/ready · Impact: medium · Complexity: small
@determined/ui sets ssr: false in its own nuxt.config.ts, and Nuxt’s
layer merge leaks that into any consumer that doesn’t state its own —
silently flipping web apps to SPA. Confirmed twice during Phase 3
adoption: learn_web and vimit_prototype shipped empty SSR payloads until
they pinned ssr: true, and the augmented_web migration had to pin it
preemptively. Rendering mode is an app decision; a design-system layer
should not impose it.
| Location | Role today |
|---|---|
packages/ts/ui/nuxt.config.ts | Declares ssr: false (desktop/Tauri bias). |
solutions/determined/packages/shell/nuxt.config.ts | Consumer; relies on inheritance or its own setting — verify which. |
solutions/ontological/desktop/src-nuxt/nuxt.config.ts | Same. |
solutions/ontological/products/suspenders/nuxt.config.ts | Same. |
Proposed
Section titled “Proposed”The layer stops declaring ssr. Every desktop consumer that relied on
inheritance declares ssr: false itself, in the same change (shared-lib
behavior change with consumers verified and updated, per the house rule).
Web adopters’ defensive ssr: true pins become redundant but stay
harmless. The theme-authoring/consumption docs note that the layer is
rendering-mode-neutral.
Approach
Section titled “Approach”- Inventory every consumer’s effective
ssr(allextendssites of@determined/ui). - Remove
ssr: falsefrom the layer; add it to each consumer that inherited it. - Boot/build each affected consumer; note the verification per app in the PR.
- One-line note in
design-system.md(layer is rendering-mode-neutral).
Files to touch
Section titled “Files to touch”| Location | Kind | Change |
|---|---|---|
packages/ts/ui/nuxt.config.ts | modify | drop ssr: false |
solutions/determined/packages/shell/nuxt.config.ts | modify | own ssr: false if it inherited |
solutions/ontological/desktop/src-nuxt/nuxt.config.ts | modify | same |
solutions/ontological/products/suspenders/nuxt.config.ts | modify | same |
packages/ts/ui/docs/design-system.md | modify | rendering-mode-neutral note |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1: The layer’s nuxt.config declares no
ssr. - AC-2: Every desktop consumer renders exactly as before (each verified booted).
- AC-3: A fresh web consumer extending the layer keeps SSR without a defensive pin.
Out of scope
Section titled “Out of scope”- Removing the web apps’ now-redundant
ssr: truepins (harmless; belt-and-suspenders).
Dependencies
Section titled “Dependencies”- Land after the in-flight Phase 3 adoption PRs merge to avoid churn on the same config files.
Discovery context
Section titled “Discovery context”- Found during Phase 3 adoption (2026-08-28): learn_web/vimit_prototype shipped empty SSR payloads (#1514); the augmented_web plan flagged the same leak as its risk 2.