AFL

Folder convention

Reference: where a widget's component, schema, story, fixtures and parity spec live.

packages/ui/src/<component>/
  <component>.tsx          the widget (Tailwind only, data-slot on parts the parity spec compares)
  <component>.schema.ts    Zod schema for the block's data
  <component>.stories.tsx  Storybook story using the fixtures
  <component>.test.tsx     behaviour tests
  fixtures/<fixture>.json  Block JSON captured from live ({ id, type, data, display })

tools/parity/widgets/<widget-id>/
  widget.ts                parity spec: live sources, parts, behaviours, masks
  extract.ts               live DOM or captured JSON -> fixture
  widget.parity.ts         parity(spec)
  live.har.zip             recorded live traffic (HTML, CSS, JS, images, API) for offline replay
  live.json                recording time (the frozen clock)
  stubs/*.json             optional API responses that override the HAR

<widget-id> is the tracker id (one per live widget variant, e.g. article-list-sidebar-must-watch); <component> is the React component it renders through (e.g. article-list). Several widget ids can share a component.