Capxul #936 — Headless/Payroll story on the published @capxul/sdk-react

Infrastructure #1629 / #1631. Storybook of branch codex/payroll-storybook-2.5.0 (head 15c6ef17) merged locally with dev (@capxul/sdk-react@2.5.5) on http://localhost:6006, session from the web app on http://localhost:3100, both against Railway staging. Driven by apps/web/tests/e2e/storybook-payroll-evidence.spec.ts (Playwright, headed Chromium, trace on). Desktop 1440×1100 and mobile 390×844 per state, e-mail echoes masked in-page from the first frame. Every frame was inspected; findings are under each frame.

ItemValue
StoryHeadless/Payroll — published component: plain semantic HTML around CapxulPayroll.Summary/.Groups and CapxulPayrollRun.Recipients/.Amounts/.Asset/.Summary/.Actions, no design-system components by design (headless contract story, same convention as Headless/Activity)
Staging Site / APIconvex-site-production-29eb.up.railway.app / convex-backend-production-f220.up.railway.app, backend head c1b9f62b
Organizationorg_01M1GPHHE5NB07H2F1RF21V8M5 ("Payroll Run mtjvu7rh"), created through the product by a reserved-lane owner with the embedded signer; the organization whose payroll run settled on 2026-09-02 09:47Z (see the #934 gallery)
Run2026-09-02 10:2xZ; 1 passed (44.9 s); the composed run stops on exactly signer-not-ready (asserted with toHaveText)
Earlier capture2026-09-02 00:21Z on sdk 2.5.0 against the 9/1 fixture organization; replaced by this run after the assertion fix

1. Live read

Live read, desktopLive read, mobile

Shows: "Live Railway payroll read observed.", "Wallet balance 9,998 USD" and "Paid this month 2 USD" from CapxulPayroll.Summary — the settled run of the morning, read live; "No payroll groups" (the proof group was deleted after the run); the roster of three members from CapxulPayrollRun.Recipients (masked mailboxes; names pending infrastructure#1651). Mobile: same values in one column.
Defects: none. "Save groupnot attempted" is the story's raw button label plus its output with no separator; cosmetic in a headless story.

2. Composed run

Composed run, desktopComposed run, mobile

Shows: first recipient selected (aria-pressed), amount 1 typed into .Amounts, asset "USD: 9,998 USD" from .Asset, run summary "Recipients 1 · Total 1 USD · Balance after 9,997 USD · Funds available" from .Summary, and .Actions reporting signer-not-ready: the story provider carries no signer, so the seven-fact order stops on the first false fact. That is the expected boundary for Storybook; the same composition with the browser signer sent money in the #934 gallery. Mobile: same.
Defects: none.

3. Recording