learning_ai_common_plat/docs/ROADMAP_2026_DECISIONS.md
saravanakumardb1 cc0bffea86 feat(packages): close ROADMAP TODOs #1, #2, #3 — density tier, react-auth fix, routePrefix
Three coordinated package changes addressing Wave 1 cross-repo TODOs
from the UI/UX roadmap (learning_ai_uxui_web/docs/ROADMAP_2026.md §10).

═══════════════════════════════════════════════════════════════════════
TODO #2 — @bytelyst/react-auth bump 0.1.8 → 0.2.0
═══════════════════════════════════════════════════════════════════════
  - Changes 'workspace:*' to 'workspace:^' for the @bytelyst/api-client
    dependency. On pnpm publish this resolves to a caret range (e.g.
    ^0.1.6) instead of '*', restoring installability for consumers.
    (The 0.1.6 tarball was published with a literal 'workspace:*'
    string — newer minor bump unblocks the showcase react-auth demo.)
  - 21 tests still passing.

═══════════════════════════════════════════════════════════════════════
TODO #3 — @bytelyst/dashboard-shell bump 0.1.7 → 0.2.0
═══════════════════════════════════════════════════════════════════════
  - Adds 'routePrefix?: string' prop to DashboardShellProps, SidebarProps,
    and TopBarProps. Threads through DashboardShell → Sidebar + TopBar.
  - Built-in /profile, /billing, /settings links now use the prefix:
      routePrefix="/app" → /app/profile, /app/billing, /app/settings
  - Defaults to '' (empty string) — fully back-compat with 0.1.x callers.
  - 2 new vitest cases covering both prefixed and default behavior;
    43 / 43 tests passing (+2 from 41).

═══════════════════════════════════════════════════════════════════════
TODO #1 — @bytelyst/design-tokens bump 0.1.8 → 0.2.0
═══════════════════════════════════════════════════════════════════════
  - Adds a density-aware spacing tier on top of the existing raw
    --ml-space-* tier:
        --bl-space-scale: 1                       (default :root)
        --bl-space-1..16: calc(--ml-space-N × --bl-space-scale)
  - Emits density selectors at the end of tokens.css:
        [data-density="compact"]    { --bl-space-scale: 0.875; }
        [data-density="comfortable"] { --bl-space-scale: 1; }
        [data-density="spacious"]   { --bl-space-scale: 1.125; }
  - Generator (scripts/generate.ts) emits both tiers automatically; the
    auto-generated per-product CSS files (lysnrai, mindlyst, etc.) gain
    a single blank-line diff from regeneration — no semantic change.
  - 11 / 11 token tests passing.

═══════════════════════════════════════════════════════════════════════
Decision doc — docs/ROADMAP_2026_DECISIONS.md
═══════════════════════════════════════════════════════════════════════
  - Records pragmatic defaults for TODO ledger items #9–#13 so
    implementation work doesn't block:
      #9  Storybook hosting → self-hosted on Gitea Pages (free)
      #10 useChat protocol  → adopt Vercel AI SDK shape, abstract transport
      #11 react-auth fold-in → defer to Wave 7
      #12 dashboard-shell merge → defer to Wave 7
      #13 mobile-native UI → out of scope (tokens-only sharing)
  - Each decision is reversible via RFC.

═══════════════════════════════════════════════════════════════════════
Publish flow
═══════════════════════════════════════════════════════════════════════
  These three packages now require a release. The existing publish
  workflow (.gitea/workflows/publish-packages.yml) has PACKAGE_FILTER
  pinned to @bytelyst/errors and won't pick them up automatically — a
  manual workflow_dispatch with a broader filter (or the existing
  publish-all-packages.yml on workflow_dispatch) is needed to ship
  0.2.0 to the Gitea npm registry.

Refs: learning_ai_uxui_web/docs/ROADMAP_2026.md §10 TODOs #1, #2, #3, #9–#13
2026-05-27 11:49:20 -07:00

4.2 KiB
Raw Blame History

UI/UX Roadmap 2026 — Pragmatic Decisions

These default decisions are recorded so implementation work can proceed without blocking. They are reversible — any of them can be revisited via an RFC in docs/rfc/. They are intentionally biased toward "ship something free and reversible now, upgrade if needed."

Companion to:

  • learning_ai_uxui_web/docs/ROADMAP_2026.md §10 TODO ledger (items #9#13)

#9 — Storybook hosting: self-hosted, free

Decision. Use Storybook 8 in each @bytelyst/* package, deployed to Gitea Pages from CI. Skip Chromatic for now.

Why.

  • Chromatic is $149/mo per project for the small plan and we have ~50 packages — not justifiable until adoption + design-team usage is proven.
  • Visual regression is already covered for product surfaces by the showcase's Playwright toHaveScreenshot baselines (48 today).
  • Self-hosted SB on Gitea Pages costs $0 and uses infrastructure that already runs every other ByteLyst static site.

Reopen if. Designers start filing issues against story flaps that visual-regression isn't catching, or we need cross-browser/device coverage that local Playwright Chromium misses.


#10 — useChat protocol: adopt Vercel AI SDK shape, abstract transport

Decision. @bytelyst/ai-ui exposes a useChat hook with the same return shape as Vercel AI SDK's useChat (messages, input, handleSubmit, stop, regenerate, isLoading, error). The transport is pluggable — products inject a fetcher or streamProtocol so we are not locked to Vercel's SSE wire format.

Why.

  • Vercel AI SDK is the de-facto standard. Adopting the shape means every React engineer who has written a chat UI in 20242026 already knows our API.
  • Abstracting transport gives us LysnrAI / JarvisJr / NoteLett the freedom to use OpenAI-native, Anthropic-native, or our own server's SSE protocol without forking the component.

Reopen if. Vercel changes the hook shape in a breaking way, or products start needing capabilities (e.g., tool-call streaming semantics) that the Vercel shape can't express.


#11 — react-auth vs auth-client: keep both for now, fold in Wave 7

Decision. Leave @bytelyst/react-auth and @bytelyst/auth-client as separate packages through Waves 16. Plan to merge react-auth into auth-client (as auth-client/react subpath export) in Wave 7 once both APIs have stabilized.

Why.

  • auth-client is framework-agnostic; react-auth is the React binding. Today they have different version cadences and that's fine.
  • Merging now means a coordinated major-bump across both packages plus every product app — too much churn during foundational waves.

Reopen if. Drift between the two packages causes a real bug or a support burden between now and Wave 7.


#12 — dashboard-shell vs dashboard-components: keep both, defer merge

Decision. Same as #11. Both packages stay independent through Wave 6. Wave 7 re-evaluates whether to merge dashboard-components into dashboard-shell/* subpath exports or vice versa.

Why. Same reasoning — the API contract isn't stable enough yet to justify the merge cost.


#13 — Mobile-native UI scope: tokens-only sharing

Decision. This roadmap (@bytelyst/* shared client packages and the web showcase) does not include iOS/Android UI components. Those live in kotlin-platform-sdk and swift-platform-sdk with their own roadmaps. The only thing we share across web/iOS/Android is @bytelyst/design-tokens — already generating Kotlin and Swift output from a single JSON source.

Why.

  • Cross-platform UI frameworks (React Native, KMP-Compose) impose architectural constraints the web platform doesn't have.
  • Token-only sharing is the proven model in the industry (Adobe Spectrum, Shopify Polaris, Salesforce Lightning).

Reopen if. A product needs to ship a web + native experience in parallel and the divergence cost gets large.


Status closing TODOs

These decisions close TODO ledger items #9#13 in learning_ai_uxui_web/docs/ROADMAP_2026.md. The roadmap is updated to strike them through with a link to this document.

Last reviewed: 2026-05-27