Instances

  • fleet:
    • Identity: root Storybook instance at stbk.loca.zone/; native Svelte renderer through @storybook/svelte-vite.
    • Styling: Tailwind 4.3.3 and daisyUI 5.7.38; built-in daisyUI themes disabled.
    • Source themes: sflw-light and sflw-dark from sflw/src/app.css:7-73; custom light and dark from svelte-chat/src/app.css:16-84. The latter names do not mean stock daisyUI palettes.
    • Preview stylesheet: stbk-authored, with the four attributed theme blocks replicated from source. Theme values will remain source-derived; explicit per-story theme selection will avoid depending on competing source default/system-preference rules.
    • Canvas base: one neutral stbk-authored base for spacing, document sizing, typography, focus visibility, and reduced motion. The two complete project stylesheets will not be concatenated.
    • Fidelity sacrifice: the neutral base deliberately replaces project-level resets and application chrome. This is a disclosed divergence, not a claim of pixel-identical application rendering. Source component markup and native palette definitions remain the reference. Theme replication covers semantic colors, radii, sizes, borders, depth/noise and color-scheme, not the complete source skin.
      • Retained/replaced baseline ledger: Record which source font, preflight/base, focus, selection and reduced-motion rules are retained or replaced.
    • Custom properties: reproduce the Svelte Flow token sets from sflw/src/app.css:75-143 under their named theme selectors, without an unqualified project-wide root reset. Preserve the effective token set for each native theme, including shared declarations inherited from the original unqualified root. In particular, --xy-connectionline-stroke-width: 2 must apply under both sflw-light and sflw-dark; copying only the dark override block would change the connection preview to XYFlow’s default width of 1. For cross-project theme experiments, stbk will supply explicit aliases from --surface, --surface-2, --ink, --muted, --line, --accent, --accent-soft, and --focus to the selected daisyUI semantic colors. Those aliases and corresponding Flow colors will be labelled integration styling, not copied source tokens.
    • Theme controls: all four themes switchable per story. Svelte Flow stories default to sflw-light; chat adaptations default to the source chat light theme. Native theme pairs will be the fidelity baseline; cross-project combinations will be labelled exploration.
  • bits:
    • Identity: separately built native Svelte instance at stbk.loca.zone/bits/, federated through refs in the root instance’s main.ts.
    • Styling: direct use of bits/src/app.css, including its Tailwind ink/brand tokens, custom utilities, dark base, and focus rules. No daisyUI stylesheet or fleet reset will enter this preview.
    • Isolation: its own preview document, renderer initialization, story index, and build output. Composition will unify browsing, not merge preview bundles, renderers, theme state, or CSS.
  • Import resolution:
    • stbk will own the Storybook configuration, dependency installation, stories, decorators, and fixtures.
    • Direct imports will resolve to the cited sibling source files, without editing those projects or importing their application Vite configurations.
    • The fleet preview will resolve StudioNode’s type-only $lib/flow/graph import to sflw/src/lib/flow/graph.ts. Chat helper imports will use their explicit source locations rather than repurposing that alias.
    • Each preview will resolve shared runtime packages consistently from stbk: one Svelte runtime, and one XYFlow or Bits UI runtime where used. External source paths will be included explicitly in Tailwind class discovery.
flowchart LR
  S["sflw component sources"] --> F["fleet Svelte preview"]
  C["svelte-chat private room snippets"] --> A["Attributed stbk adaptations"]
  A --> F
  B["bits demo sources and ink stylesheet"] --> P["bits Svelte preview"]
  M["fleet manager at /"] --> F
  M -->|"refs and separate iframe"| P

Stories

  • Scope: nine story groups, with the state cases below; not nine isolated screenshots.
  • Common presentation: source path, framework, relationship, fixture dependencies, fidelity differences, and non-claims will be visible beside the working canvas.
  • Naming rule: MessageBubble, AttachmentList, and ToastStack will be new stbk component names. No files with those component identities are being claimed upstream; the room page keeps the source snippets private.

Icon

  • Source: sflw/src/lib/components/Icon.svelte:1-59.
  • Framework: Svelte 5.
  • Relationship: imported directly; no runtime dependencies. The story is authored in stbk.
  • Public args and states:
    • name: string; known names are arrow, external, code, copy, check, sun, moon, input, transform, branch, sink, note, nodes, edges, layout, interaction, scale, craft, undo, redo, plus, share, trash, book, and close.
    • size?: number, source default 20; exercise small, default, and enlarged sizes.
    • stroke?: number, source default 1.8; exercise thin, default, and heavier strokes.
    • A separately labelled unrecognized-name case will exercise the existing fallback glyph, not invent an additional named icon.
  • Accessibility design:
    • Preserve aria-hidden="true"; the component is decorative and is not itself a keyboard target.
    • Give the specimen a visible name; verify keyboard-operable Storybook controls and currentColor contrast in the chosen themes and a narrow canvas.
  • Does not prove: an accessible name for a consuming button, a click action, or semantics supplied by the icon alone.

SourcePanel

  • Source: sflw/src/lib/components/SourcePanel.svelte:1-41; its only component import is ./Icon.svelte.
  • Framework: Svelte 5.
  • Relationship: imported directly; source-text and clipboard scenarios authored in stbk.
  • Public args and states:
    • source: string; filename?: string, source default +page.svelte.
    • Default content will be the actual raw text of sflw/src/routes/demo/basic/+page.svelte, loaded with Vite’s ?raw handling. This will not execute that route.
    • Exercise collapsed/open disclosure, multiline content, long lines, a long filename, and empty source. Input experiments will be labelled as such: the component’s inherited note about actual route source is not evidence that arbitrary control values came from a route.
    • Copy states will be reached by clicking the real button: initial, successful-copy feedback, and rejected-access fallback.
  • Accessibility design:
    • Keyboard-open the native summary, reach the copy button and read-only textarea, and inspect visible focus and the filename-derived textarea label.
    • Verify that long code scrolls within the source field at narrow width rather than widening the page.
  • Does not prove: operating-system clipboard access from a stub, syntax highlighting, route execution, or behavior of the application whose source text is displayed.

StudioNode

  • Source: sflw/src/lib/components/StudioNode.svelte:1-46; node contract in sflw/src/lib/flow/graph.ts:3-20; registration precedent in sflw/src/routes/demo/nodes/+page.svelte:10-16,161-176.
  • Framework: Svelte 5 with @xyflow/svelte.
  • Relationship: component imported directly; real SvelteFlow fixture authored in stbk. This is not a standalone-context-free component.
  • Public states and fixture controls:
    • Source node kinds: input, transform, branch, sink, note.
    • Source data: data.title, optional data.subtitle; fixture data also supplies the required params object from NodeData.
    • Source presentation: selected, isConnectable, sourcePosition, and targetPosition are supplied through Flow’s node rendering contract.
    • stbk controls will translate kind/title/subtitle into the fixture node, selection into node state, connectability into Flow’s nodesConnectable setting, and direction into right/left or bottom/top positions.
    • Exercise ordinary and long text, selected/unselected appearance, both handle orientations, connectability on/off, and the note branch without handles.
  • Accessibility design:
    • Give the graph a name and a real viewport; inspect keyboard focus and selection behavior, the title-derived handle labels, visible selection/focus distinction, contrast, and narrow-width usability.
    • Exercise actual selection and movement in Flow rather than changing only a static class or screenshot.
  • Does not prove: custom-edge behavior, graph validation, automatic layout, craft-page persistence, assistant integration, or large-graph performance.

Dialog BasicDemo

  • Source: bits/src/lib/demos/dialog/BasicDemo.svelte:1-59.
  • Framework: Svelte 5 with bits-ui and @lucide/svelte.
  • Relationship: existing demo imported directly; no invented wrapper-prop API.
  • Public states and interactions:
    • The demo exports no props; open, projectName, owner, and savedProject are internal state.
    • Open through Create project; edit the existing project-name and owner fields; save and observe the local saved-name result.
    • Exercise required-field rejection, Cancel, the labelled close button, and Escape dismissal.
  • Accessibility design:
    • Inspect dialog title/description association, initial focus, modal Tab containment, Escape, return focus, required-input labels, and the narrow-width modal.
    • Query the preview document body for portalled content, not only the story-root subtree.
  • Does not prove: backend project creation, persistence, authorization, or accessibility of every Bits UI composition.

Combobox MultipleDemo

  • Source: bits/src/lib/demos/combobox/MultipleDemo.svelte:1-96.
  • Framework: Svelte 5 with bits-ui and @lucide/svelte.
  • Relationship: existing demo imported directly.
  • Public states and interactions:
    • No exported props. Selection and query are internal; the source initially selects accessibility and svelte.
    • Search the actual options, select another option, remove a named selected chip, reach zero selections, and enter a query with no matches.
    • Close and reopen the list to exercise the source’s query reset. Do not advertise nonexistent options, value, or disabled story props as this component’s public API.
  • Accessibility design:
    • Exercise the named search input and trigger, arrow navigation, Enter selection, dismissal, named removal buttons, focus visibility, selected-state semantics, and wrapping chips at narrow width.
    • Inspect the portalled list in its owning preview document.
  • Does not prove: remote search, asynchronous loading, server filtering, or a generally configurable combobox wrapper.

Checkbox IndeterminateDemo

  • Source: bits/src/lib/demos/checkbox/IndeterminateDemo.svelte:1-39.
  • Framework: Svelte 5 with bits-ui and @lucide/svelte.
  • Relationship: existing demo imported directly.
  • Public states and interactions:
    • No exported props. checked and indeterminate are internal; the initial state is indeterminate.
    • Use the source’s Unchecked, Indeterminate, and Checked buttons, then toggle the actual checkbox by its label and keyboard.
    • Observe both the control’s state and the source’s textual state chip.
  • Accessibility design:
    • Inspect Review status label association, mixed/checked/unchecked ARIA state, Space activation, focus, and contrast.
    • Mount only one instance in a preview document because the source uses the fixed ID tri-state.
  • Does not prove: a parent-child selection model, server review status, form submission, or a public tri-state prop API.

MessageBubble

  • Source: svelte-chat/src/routes/r/[room]/+page.svelte:1079-1143. The complete upstream snippet is 1079-1200; its footer at 1144-1197 is excluded. This is not full-bubble coverage.
  • Framework: Svelte 5.
  • Relationship: adapted with provenance into a new stbk component, with new stbk closure/state glue. The extracted body includes the system-message branch, avatar/header, message body, inline edit form, deleted-message branch, empty-streaming typing indicator, and attachment rendering. The footer at 1144-1197 is excluded.
  • New stbk public contract:
    • message: Message supplies upstream metadata and content. The adaptation additionally takes body: { mode: 'sanitized-fixture'; blocks: readonly { id: string; html: string }[] } | { mode: 'text' }.
      • Upstream Message type: svelte-chat/src/lib/types.ts:22-53.
    • mine: boolean, continued: boolean, mentionsMe: boolean, and editing: boolean make previously captured route state explicit.
    • onSave(content: string): void and onCancel(): void replace route-bound edit effects. These are new adaptation callbacks, not upstream component props.
    • The local fixture will own the message and editing state. Saving edited content updates message.content, selects text mode, and displays the new value using Svelte text interpolation with newlines preserved. The canvas labels this as local plain-text editing, not Markdown re-rendering. Saving leaves edit mode; cancellation will preserve content and return focus to a labelled fixture control. Neither callback will call a room API.
  • States to exercise:
    • Incoming/outgoing user, assistant, and system messages; continued grouping and mention highlighting.
    • status values streaming, done, and error; empty streaming content for the typing indicator; deletedAt for deletion rather than an invented deleted status.
    • Long prose, code content, attached media, and an editable completed user message. Enter saves, Shift+Enter inserts a newline, Escape cancels, and empty edits cannot save; composition input will not be mistaken for Enter submission.
    • Markdown boundary: Sanitized-fixture blocks come only from an stbk-owned fixture module recording the corresponding Markdown and upstream source digests; no arbitrary HTML control is exposed. Selecting a formatted fixture resets its content and blocks together. stbk will not import the upstream pipeline (splitBlocks in svelte-chat/src/lib/blocks.ts:46, renderBlock and sanitize in svelte-chat/src/lib/render.ts:19-31) and will not install marked, isomorphic-dompurify or a DOM shim. Fixtures will not require the room’s participant-directory mention decoration or composer shortcode conversion.
  • Accessibility design:
    • The fixture will supply a named list around the source-derived list item. Preserve the message’s accessible name and the retained body/header cues. The body-only extraction omits the footer’s edited marker, nonempty-streaming and interrupted-reply text, and continued-message timestamp at svelte-chat/src/routes/r/[room]/+page.svelte:1165-1173, as well as reaction/thread/action controls. These omissions will be visible in provenance; complete message-status presentation is not claimed.
    • Verify edit focus, keyboard save/cancel, long-content reflow, code overflow containment, and contrast in both native chat themes.
  • Does not prove: Markdown conversion, sanitizer posture, SSE streaming, complete message-status presentation, participant identity, reaction/thread behavior, persistent edits, full room Markdown decoration, inherited application CSP, or the whole private bubble snippet. The source range and the removed footer will be visible in provenance.

AttachmentList

  • Source: svelte-chat/src/routes/r/[room]/+page.svelte:1054-1077; attachment data contract in svelte-chat/src/lib/types.ts:6-20.
  • Framework: Svelte 5.
  • Relationship: adapted with provenance from the private attachments snippet into a new stbk component.
  • New stbk public contract and states:
    • list: Attachment[]; preserve the real image, audio, and file kind values and fields id, name, size, type, kind, url, and optional duration.
    • Exercise empty, individual-kind, mixed, and long-filename lists using genuine local media/document fixtures.
    • Preserve image links, native audio controls, file-download presentation, size/duration text, and the Attachments list label. Attribute any extracted icon and formatting helpers to the room source.
  • Accessibility design:
    • Inspect image alternatives, named links, keyboard-reachable native audio controls, download-link focus, and narrow-width containment.
    • Open the local image and download the fixture document; for audio, verify metadata/playback state without claiming audible output when the verification environment cannot provide it.
  • Does not prove: uploads, room-file authorization, server-side MIME validation, recording, or production download handling.

ToastStack

  • Source: svelte-chat/src/routes/r/[room]/+page.svelte:1564-1575; state and dismissal logic at 1025-1035.
  • Framework: Svelte 5.
  • Relationship: adapted with provenance into a new stbk component; upstream markup and state are private to the room route.
  • New stbk public contract and states:
    • toasts: { id: number; text: string; kind: 'error' | 'info' }[] and onDismiss(id: number): void.
    • Exercise empty, info, error, stacked, long-text, manual-dismiss, and automatic-dismiss cases.
    • Preserve toast toast-end toast-bottom, alert alert-soft, the info/error variants, role="alert", and the button labelled Dismiss.
    • The fixture will own additions, list mutation, and the source’s seven-second automatic dismissal. Static inspection states may pause time only when visibly labelled; a timed interaction must still exercise expiry. Pending timers will be cleared when that fixture unmounts.
  • Accessibility design:
    • Reach and activate dismiss buttons by keyboard; inspect alert announcements, focus behavior when an item disappears, narrow-width stacking, and semantic-color contrast.
  • Does not prove: server errors, notification delivery, the room’s complete timer lifecycle, or a guarantee that every transient alert is read by assistive technology.

Fixtures

  • Flow stage:
    • Author a sized stage in stbk, with a 560px reference height and responsive width; it must retain a nonzero viewport in narrow layouts.
    • Load @xyflow/svelte/dist/style.css and the fleet preview stylesheet.
    • Register exactly nodeTypes = { input: StudioNode, transform: StudioNode, branch: StudioNode, sink: StudioNode, note: StudioNode }.
    • Supply actual nodes with id, type, position, and data: { title, subtitle, params: {} }; bind the fixture’s node/edge arrays to SvelteFlow and use its real selection/movement behavior.
    • Use Position.Right/Position.Left for horizontal handles and Position.Bottom/Position.Top for vertical handles. A source handle needs its real node identity; a generic provider or a bare SVG/container is insufficient.
  • Theme decorator:
    • Set data-theme on the preview document’s document element, not the Storybook manager document or only an inner component wrapper.
    • Apply the selected theme before presenting the story; restore or replace owned theme state on story changes.
    • Do not import either application layout, write chat:theme, or initialize the Svelte Flow application’s storage/media listeners.
    • Keep source-native Svelte Flow tokens separate from stbk’s cross-theme aliases. Verify all four selections actually change the relevant semantic colors; an unchanged canvas is not a successful theme control.
  • Clipboard:
    • SourcePanel success requires an allowed browser clipboard operation or an explicitly labelled stub.
    • A native-success probe must verify the copied bytes. A stub-success probe must verify the supplied text and report only the component’s success UI contract.
    • Force a rejected write and observe the existing Select and copy below path; do not add a fake success fallback.
    • Restore permission/stub state after the story. The source textarea remains the real manual-copy surface.
  • Bits UI document isolation:
    • Preserve the actual primitives and portals; no overlay replicas.
    • Mount the fixed-ID demos in isolated canvases rather than duplicate inline Docs examples. Dialog field IDs and tri-state must not collide within one document.
  • Chat isolation:
    • Use fixed timestamps and a fixed locale/timezone for presentation evidence; disclose that determinism differs from the room’s browser-locale formatting.
    • Supply stbk-owned identifiers, local media bytes, and local callback state. Never use production message IDs, room-file URLs, EventSource, uploads, microphone access, or live mutation APIs.
    • Formatted display cases use recorded, pre-sanitized block fixtures; local edit results use escaped Svelte text rendering. The preview will not claim to inherit the SvelteKit application’s CSP; fixture content and URLs must remain controlled.
  • Provenance:
    • Every adapted source file will carry an attribution header with the exact source path/range, new stbk name, and stated omissions.
    • Copied chat helpers will be attributed separately: rendering shape 171-183, date formatting 199-200, initials/formatting 239-247, edit behavior 888-930, and icon snippet 1048-1052 in svelte-chat/src/routes/r/[room]/+page.svelte, selecting only the helpers actually retained. Network-bound behavior will be replaced by stated local fixture behavior, not copied wholesale.
    • Every direct-import story will identify the imported component separately from its stbk-authored fixture and stylesheet integration.
    • Record source digests before realization and compare them afterward; line citations alone are not an unchanged-source proof.

Coverage and deferral ledger

Covered scope below is a delivery commitment, not a claim that these stories already run.

ProjectFirst-delivery componentsRelationshipInstance
sflwIcon; SourcePanel; StudioNode through a real Flow fixtureThree direct component importsfleet
bitsdialog/BasicDemo.svelte; combobox/MultipleDemo.svelte; checkbox/IndeterminateDemo.svelte under bits/src/lib/demos/Three direct demo imports, real Bits UI primitives, no public demo propsbits
svelte-chatMessageBubble; AttachmentList; ToastStackThree newly named stbk adaptations of the cited private room surfacesfleet
stbkFlow stage; theme decorator; clipboard scenarios; local chat state/media fixturesNewly authored exploration and isolation infrastructure, not additional fleet coverageRespective owning preview
Deferred project or componentConcrete reasonFirst step that would lift the deferral
sflw/src/lib/components/TypedEdge.svelteIts generated label reaches XYFlow edge/store/portal context; it is not a pure SVG functionRegister it through edgeTypes in a real graph and exercise labelled edge variants
sflw/src/lib/components/FlowViewport.svelteRevision-driven fitView, tick, and animation-frame behavior has no useful standalone canvasAdd a graph interaction fixture with real revision changes and observed viewport movement
sflw/src/lib/components/ShowcaseHeader.svelte and DemoShell.svelteTheme context, snippets, application navigation, and document metadata exceed the leaf subset; a missing optional provider can leave a visible toggle inertSupply an isolated reactive theme provider, contained navigation, and real shell snippets
sflw/src/lib/components/assistant/AssistantBubble.svelteAssistant requests, local fallback, native dialog/focus behavior, and graph callbacksIsolate graph state and transport; demonstrate server and fallback paths separately without live requests
sflw/src/routes/craft/+page.svelteURL/hash state, global shortcuts, clipboard, history, and assistant integrationBuild a contained application-level fixture before claiming route coverage
Other sflw demonstration routesRoute compositions are not covered by importing three leaves; the scale route includes a large workload and browser timingSelect one composed route and isolate its environment; treat scale measurements as a separate performance exercise
bits builder editor shell, including bits/src/routes/builder/+page.svelte and bits/src/lib/builder/Render.svelteRegistry/store coupling, SvelteKit dependencies, persistent sessions, localStorage, and relay integrationIntroduce an isolated store/transport/storage fixture; never connect the story to operator sessions
Remaining bits demos and builder blocksThe large source inventory is not a uniform props API; block data, dates, image responses, and editor mode differSelect the next source composition and document its own contract; use BuilderNode fixtures where required
svelte-chat room, lobby, layout, and error routesRoute data/forms/page state and automatic room-entry SSE, requests, timers, and browser state are outside component adaptationDefine an explicit contained route harness covering all active transports and storage before importing a route
svelte-chat bubble footer, room source 1144-1197Reactions, thread navigation, picker, edit/delete launch controls, network-bound closures, and the edited marker, nonempty-streaming and interrupted-reply text, and continued-message timestamp at 1165-1173 are outside the selected body rangeExtract the footer with explicit state/callback contracts and local interaction outcomes
svelte-chat pending-upload display, room source 1352-1381Identified progress/skeleton/error candidate deliberately omitted; this range is a display segment, not the complete upload listExtract a local-state presentation fixture; include the remaining retry/remove controls and closing structure through 1390 if claiming the complete list
svelte-chat offline alert, room source 1249-1253Identified presentational candidate deliberately left outside the first nine story groupsAdapt the alert with explicit online/offline fixture state and verify its announcement/reflow
airiVue 3 requires @storybook/vue3-vite; UnoCSS is not Tailwind; its pnpm 11.24.0 workspace uses catalogs/patches and a pnpm-invoking postinstall, while the 2026-09-15 scout recorded pnpm absent from PATH; Histoire stories already existEstablish a separate minimal Vue/UnoCSS preview and either resolve the pinned workspace bootstrap or explicitly bound a leaf-only dependency path; evaluate the existing Histoire coverage before duplicating it
iconmaniaReact 19 requires @storybook/react-vite; src/styles.css is its own global regime; gallery art uses /api/gallery/... SVG/PNG responsesEstablish the React preview with its stylesheet and controlled leaves, then supply real local artwork responses before claiming gallery fidelity
click2punch current prototypesStandalone HTML documents with inline controllers, relative assets, and floating-major daisyUI 5/Tailwind-browser 4 CDN dependencies; no importable widget seamUse @storybook/html-vite whole-page iframe embeds with preserved assets and a documented dependency snapshot; do not call them native components
wrdp PHP templatesWordPress/PHP execution and application state; no root package manifest provides a browser component buildRewrite an explicitly selected presentation boundary if native Storybook coverage is approved; do not import PHP as a browser component
wrdp vanilla player exceptionwrdp/wp/wp-content/plugins/quizwizz/assets/js/qwizz-player-renderer.js exposes DOM factories through window.QuizWizzPlayerRenderer, but no HTML preview is included yetAdd an HTML fixture loading the real renderer and player/token CSS; begin with status, failure, and progress, which do not require a PHP rewrite

Acceptance criteria

  • Rendering:
    • All nine story groups will render their cited direct imports or attributed adaptations in a real browser from the built output.
    • StudioNode will appear through a real Flow node renderer; Bits UI demos will use the real upstream primitives.
    • Both the root story index and referenced bits index/preview assets will load without missing modules, source-path serving mistakes, or cross-preview CSS leakage.
    • Maintain a manifest of every required story/state case with expected and executed counts; missing, skipped or zero-assertion cases fail.
    • Verify component identity and resulting interaction state inside the active owning preview, including portalled content.
  • Interaction:
    • Controls will change the actual Icon SVG and node fixture states.
    • SourcePanel will disclose content and demonstrate both copy-result paths with the clipboard evidence boundary stated.
    • Dialog save/cancel, combobox search/select/remove/empty, and checkbox state transitions will produce visible local outcomes.
    • Chat edit save/cancel, local attachment actions, and manual/timed toast dismissal will execute real local behavior, not screenshot substitutions or inert buttons.
    • Require visible post-save content, not merely a closed editor.
  • Accessibility and presentation:
    • Keyboard paths, focus movement, labels, portal ownership, and a 320px-wide preview will be exercised on the relevant stories.
    • Native light/dark fleet palettes, cross-theme experiments, the bits ink skin, and reduced-motion presentation will be inspected. Contrast and any source limitations will be recorded rather than inferred from library choice.
    • Compare effective native theme tokens and representative rendered component states with source; intentional neutral-base differences remain explicit, while accidental token or interaction regressions fail acceptance. Cross-project theme experiments are not native-fidelity evidence.
    • Fixed IDs will not collide in Docs, and changing stories will not leave theme overrides, stubs, or fixture timers behind.
  • Transparency:
    • Visible provenance will distinguish imported, adapted, and stbk-authored fixture code.
    • The neutral canvas divergence, partial bubble extraction, and complete deferral ledger will be reachable from the Storybook surface; no implied whole-fleet coverage.
  • Hosting:
    • stbk.loca.zone will serve the built Storybook, including direct browsing at /bits/ and root composition.
    • Cold-load and refresh local and referenced composed deep links, browse bits directly, and use root search to reach one local and one referenced story.
    • Exercise both same-instance changes and fleet → bits → fleet transitions.
    • wiki.stbk.loca.zone will serve the published plan through the bounded hosting contract in 40-runtime-and-hosting. Pending TLS or broken composition will remain explicit incomplete states, not a completed-deployment claim.
  • Preservation:
    • Every existing fleet project will remain byte-unchanged against the recorded baseline, including manifests, lockfiles, source, and application configuration.
    • No interaction will reach live fleet mutation APIs or operator-owned storage. Build success alone will not satisfy this browser contract.

Justification for a Svelte-only first subset

  • Renderer boundary:
    • Svelte, Vue 3, and React require separate native renderers. Sharing Vite does not remove that boundary; composition is the future expansion mechanism.
    • The first subset already pays for a second native Svelte instance because CSS regimes are also an isolation boundary. It is not pretending that a common language makes incompatible global styles safe.
  • Existing component density:
    • sflw offers genuine source components with small, inspectable contracts and a real graph-context fixture pattern.
    • bits contains 93 existing demonstrations within the scout’s 158-file reusable Svelte inventory. The chosen three already compose real primitives and local interaction state; inventing replacement controls would discard stronger evidence.
    • svelte-chat supplies a distinct application surface but no reusable component files. Its three adaptations are included only with the private-snippet asymmetry and fidelity sacrifices exposed.
  • Additional renderer costs:
    • airi has worthwhile Vue leaves and existing Histoire stories, but broad reuse adds UnoCSS, workspace/catalog/patch handling, and package-manager lifecycle work. A leaf-only Vue path may avoid the whole workspace; it still needs a deliberate additional renderer and style build, not one more Svelte story file.
    • iconmania has ordinary npm dependencies and cheaper controlled React leaves; it is not blocked by pnpm. Its React renderer and global skin remain separate work, and representative gallery stories require actual SVG/PNG fixture responses rather than generic network stubs.
  • Decision:
    • Svelte-only is the honest first deliverable because it maximizes directly evidenced component behavior while keeping renderer, CSS, and live-state boundaries explicit. It is not a verdict against Vue or React, a claim of universal hosting, or permission to hide deferred projects.