Live surfaces: the Storybook at the project domain, this wiki at its companion domain.
What shipped
flowchart LR
A["sflw sources: Icon, SourcePanel, StudioNode"] -->|"imported directly"| F["fleet instance at /"]
B["svelte-chat private room markup"] -->|"adapted, attributed"| C["stbk components: MessageBubble, AttachmentList, ToastStack"]
C --> F
D["bits demos: Dialog, Combobox, Checkbox"] -->|"imported directly"| G["bits instance at /bits/"]
F -->|"refs composition"| G
H["one Node static server, one systemd unit"] --> F
H --> G
Two native Svelte Storybook instances, exactly as decided:
fleet instance: 54 stories across 6 components, daisyUI regime, four themes.
bits instance: 8 stories across 3 components, upstream ink skin, federated by composition.
Story totals verified from the served indexes, not from source counting: 62 stories, all rendering clean in headless Chrome.
Measured evidence
Browser harness: dependency-free CDP suite driving the host Chrome against the live site; 18 checks, all passing; the run is reproducible from the project scripts directory.
Interaction proof, not screenshots:
Icon gallery draws 25 icons, all decorative and all inheriting colour.
SourcePanel copy: the granted path hands the panel’s exact 6262-character source to the write call; the denied path lands on the upstream fallback label.
StudioNode handle topology inside a real graph: input 1, transform 2, branch 3, sink 1, note 0, on a 560 pixel stage.
MessageBubble inline edit: editor closes and the bubble shows the newly typed text.
ToastStack: three notices, one dismissed, two remain.
AttachmentList: four media URLs, zero cross-origin, image decoded, audio element present.
Theme switching changes the document theme attribute and the computed page background.
bits Dialog opens through a real click and renders outside the story subtree.
bits Combobox: the real toggle opens six options; an unmatched query leaves zero options and shows the portalled empty branch.
bits Checkbox moves from mixed to checked on a real click.
Composition: the manager lists local projects and the referenced tree, and a referenced deep link renders through the referenced instance’s own iframe.
A missing asset returns a not-found status with no HTML fallback.
Gate credibility: the suite was mutation-proved. Flipping one expected value (the branch handle count, then the composed-frame expectation) produced exactly that failing check and left the others passing.
Defects found and fixed during verification
Three story interaction assertions sampled an animating element and failed on computed opacity; they now wait for the settled state and still assert visibility.
The chat stories pinned a theme global, which silently disabled the theme toolbar for those stories; the pin is removed and the native themes are named in provenance instead.
The first harness draft carried three wrong expectations of its own: it re-clicked a copy button whose stub had already been restored, treated same-origin absolute asset URLs as remote, and searched for empty-state text that the upstream demo does not use. Each was corrected against the real source.
Coverage
Covered projects: sflw, svelte-chat, bits.
Covered components:
sflw: Icon, SourcePanel, StudioNode.
svelte-chat: three adapted surfaces from the private room markup.
bits: Dialog, Combobox, Checkbox demos.
Deferred inside covered projects: sflw TypedEdge, FlowViewport, AssistantBubble, DemoShell and the craft page; the chat pending-upload list, offline alert and full room composition; the bits builder editor shell and the remaining demonstrations of that library.
Deferred projects, unchanged from the plan: airi (Vue renderer, UnoCSS, pinned pnpm workspace, existing Histoire explorer), iconmania (React renderer, own global stylesheet, API-served artwork), click2punch (standalone HTML documents with CDN dependencies), wrdp (PHP templates; only the vanilla player renderer is a future HTML-lane candidate).
Fences held
No sibling project was modified by this delivery. The imported sources are unchanged; the working trees of two neighbours show edits made by other concurrent work, none of them files this project imports.
The adapted chat components carry their source ranges in headers and in the on-canvas provenance panel, and are labelled adapted rather than upstream components.
Every story shows source, project, framework, relationship, style regime, what it proves and what it does not prove.
Known limits
One story render check was observed to flake once when two browser sessions ran concurrently on the same host; two consecutive clean runs of the full suite followed.
The preview uses one neutral canvas base instead of two project resets; that divergence is disclosed on the delivery page and in each story’s provenance.
Markdown conversion and sanitisation stay upstream: bubble fixtures carry pre-sanitised block strings, so this project proves layout and edit behaviour, not sanitiser posture.