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

116 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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