Capxul #936 — Headless/Payroll story under the live provider
Storybook from codex/payroll-storybook-2.5.0 on http://localhost:6006, live lane configured (staging publishable key minted for the Storybook origin, organization id set), session from a reserved-lane sign-in on the production build. Driven by apps/web/tests/e2e/storybook-payroll-evidence.spec.ts (Playwright, headed Chromium). Desktop 1440×1100 and mobile 390×844 per state; e-mail echoes masked per person in every frame and in the recording. The story is a contract story: plain semantic HTML, no design-system styling, by design. Each frame was inspected; findings are under it.
| Item | Value |
|---|---|
| Staging Site | convex-site-production-29eb.up.railway.app, backend head c1b9f62b |
| Packages | @capxul/sdk@2.5.0, @capxul/sdk-react@2.5.0 |
| Organization | org_01M1F60PTWNRQX5VKQ8MAR4TZB |
| Run | 2026-09-02 00:55Z, 1 passed (19.2 s) |
1. Live read


Shows: "Live Railway payroll read observed." — CapxulPayroll.Summary wallet balance 10,000 USD and paid this month 0 USD; .Groups "No payroll groups" (the organization has none; the earlier proof group was deleted); CapxulPayrollRun.Recipients with the four organization members; .Amounts 0; .Asset "USD: 10,000 USD"; run summary not yet available; .Actions "Run payroll" blocked on signer-not-ready. Mobile is the same list at 390px.
No defects in the parts. Two seam findings, not this PR's: member names render as mailboxes (infrastructure#1651), and the blocked reason is the signer because the story provider carries no signer — the same readiness gap the app hits on a fresh session (infrastructure#1667).
2. Composed run


Shows: one recipient selected and amount 1 typed: .Amounts has one entry in the treasury currency, .Summary recipients 1, total 1 USD, balance after 9,999 USD, funds available; .Actions still signer-not-ready. No submit is attempted.
No defects.