stories
v0.1.3Component stories for any React project — builds CSF story files with the project's own Vite (monorepo-aware), indexes components and their states per git line, compares the working tree with a branch, a commit or a chat turn, renders deterministic screenshots and DOM/React trees through the browser worker, and injects an explorer and compare page into the console.
Install
iii trigger compose::add worker=storiesRun in your project with the iii engine running. Exact versions are immutable and digest-pinned.
skill doc
stories
The stories worker indexes CSF story files (*.stories.tsx) of every
project in a workspace and builds them with the project's own Vite. A
component is one story file (title, group, tags, source file); a
state is one named export of it (args, argTypes, inferred controls). A
line is a source tree: worktree (live), prev (the build before it),
a ref such as HEAD or main, a full sha, or turn:
when the ide worker keeps turn snapshots. Comparing two lines classifies each
component as direct (its story file or a direct import changed),
indirect (a deeper input changed), new, removed or unchanged, with
the files behind the change. stories::screenshot, stories::tree and
stories::diff render through the browser worker with time, randomness,
locale and motion frozen, so the same inputs give the same pixels.
When to Use
- A pull request, a branch or a chat turn touched UI code and the review must say which components and states were affected, directly or through shared code.
- A change must be verified visually or structurally without a person opening a browser: per state, per prop value, against the previous version.
- An agent needs the rendered DOM, computed styles, layout boxes or the React tree of a component in a given state, with specific props.
- A console user wants the explorer or the compare view beside the chat.
Boundaries
- Not a test runner:
playfunctions, MDX docs and addons are ignored. Interaction tests stay in the project's own tooling. - Renders need the
browserworker and the ADE (its address fromconsole::status, orconsole_urlwhen set); without themcomponents::*,compareanddiff::filestill work. - A line builds once and is cached by sha; building
mainin a large monorepo takes tens of seconds. Preferwait: trueonstories::builds::create, or pollstories::builds::get. - Stories that reach application singletons carry an
errorfield; read it instead of retrying.
How-tos
- component-review.md — the review workflow: scope the impact, verify each affected state, write the report.