Skip to content

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.

LocationRole today
packages/ts/ui/nuxt.config.tsDeclares ssr: false (desktop/Tauri bias).
solutions/determined/packages/shell/nuxt.config.tsConsumer; relies on inheritance or its own setting — verify which.
solutions/ontological/desktop/src-nuxt/nuxt.config.tsSame.
solutions/ontological/products/suspenders/nuxt.config.tsSame.

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.

  1. Inventory every consumer’s effective ssr (all extends sites of @determined/ui).
  2. Remove ssr: false from the layer; add it to each consumer that inherited it.
  3. Boot/build each affected consumer; note the verification per app in the PR.
  4. One-line note in design-system.md (layer is rendering-mode-neutral).
LocationKindChange
packages/ts/ui/nuxt.config.tsmodifydrop ssr: false
solutions/determined/packages/shell/nuxt.config.tsmodifyown ssr: false if it inherited
solutions/ontological/desktop/src-nuxt/nuxt.config.tsmodifysame
solutions/ontological/products/suspenders/nuxt.config.tsmodifysame
packages/ts/ui/docs/design-system.mdmodifyrendering-mode-neutral note
  • 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.
  • Removing the web apps’ now-redundant ssr: true pins (harmless; belt-and-suspenders).
  • Land after the in-flight Phase 3 adoption PRs merge to avoid churn on the same config files.
  • 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.

← Back to Tasks