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.
| Item | Value |
|---|---|
| Story | Headless/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 / API | convex-site-production-29eb.up.railway.app / convex-backend-production-f220.up.railway.app, backend head c1b9f62b |
| Organization | org_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) |
| Run | 2026-09-02 10:2xZ; 1 passed (44.9 s); the composed run stops on exactly signer-not-ready (asserted with toHaveText) |
| Earlier capture | 2026-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


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


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.