Capxul #929 — Upcoming Payroll "See all" route push
Infrastructure #1630, demand row 10.17. Production build of branch codex/1630-payroll-see-all served on http://localhost:3000 against the Railway staging backend. Driven by apps/web/tests/e2e/payroll-see-all.spec.ts (Playwright, headed Chromium, reserved-OTP identity lane). E-mail echoes are masked in every frame.
| Item | Value |
|---|---|
| Staging Site | convex-site-production-29eb.up.railway.app |
| Staging API | convex-backend-production-f220.up.railway.app |
| Staging backend head | c1b9f62b (integration/capabilities, deployed 2026-09-01, ci.yml run 33546134086) |
| SDK train | @capxul/sdk@2.5.0, @capxul/sdk-react@2.5.0 (pinned on dev) |
| Organization | org_01M1F60PTWNRQX5VKQ8MAR4TZB ("Payroll Proof 73efe4045d90") |
| Actor | organization owner on the reserved *@e2e.capxul.test lane (masked) |
| Run | 2026-09-01 21:50Z, 1 passed; e-mail echoes masked in every frame of the recording |
1. Dashboard — the widget before the click
"Upcoming Payroll · 0 Active · See all" with the frozen empty state "No Upcoming Payroll". The widget rows stay empty until STREAMS (ruling Q6). The hero's "Send Payroll" stays disabled: that gate is ACCESS #1522's.
2. After the click — the payroll route
The button pushed /dashboard/organization/payroll?organizationId=org_01M1F60PTWNRQX5VKQ8MAR4TZB (asserted by the spec). The page renders today's "Payroll deferred" gate; the S14 refit (Capxul #934) flips it.