Founders' standup 2026-09-17 and Gera 2026-09-18: the setup wizard is the FIRST admin's. An org_admin invited into a company that has already started signs in and goes straight to the dashboard, where the "Before Clara goes live" nag carries anything the first admin skipped.
18 Sept 2026 · branch onboarding/l2-second-admin-dashboard · captured against propflow-stage through this branch's own dev server · at bd1fde2540
PR #9368 · PR #9366 (part 1: an address already on the team is refused inline) · plan of record onboarding-flow-map ch. 6 and 9
Data note. Every name below comes from propflow-stage, which is anonymized by construction (ADR-0097/0110). The invited admin is a synthetic account minted for this capture through the real back-office route (POST /api/admin/users), and the invite was accepted in a clean browser through the real /invite/<token> page — no session was fabricated and no response was rewritten.
Test Client Co's first admin connected AppFolio, synced 6 buildings, skipped the inbox, finished the wizard (05:45Z) and invited a second org_admin from the Team step. That admin accepted and was sent to /onboarding/channels — the inbox step the first admin had skipped — with a Back button into Review and Sync screens they had never walked, and the workspace guard sent them there again on every sign-in. Gera: "it's already been onboarded, so it doesn't make any sense."
Two facts from the read-only prod probe that reshape the fix: the +admin Gmail alias Gera also tried was never minted (production already folds it to his own claim and refuses; the Team step just reported that refusal as a silent success — #9366 makes it say so inline). The trapped account was a genuinely distinct second admin. That is purely a landing/routing defect, fixed here.
A fresh org_admin invite into Test Client Co's stage twin — a company that has already started (6 properties on record, its first admin finished). Same page every invitee sees; terms ticked, Continue pressed.
Recorded navigation trail — /invite/<token> → /dashboard → /dashboard?org=org_8573c23a…&prop=*@org_8573c23a…. No /onboarding hop anywhere in the trail. Final URL asserted by the capture script, not read off the picture.
| who | company | lands |
|---|---|---|
| first admin, fresh company | no properties, nobody finished | wizard, connect AppFolio |
| first admin mid-wizard (holds the AppFolio credential; properties synced; inbox missing) | started | wizard, first outstanding step — never ejected until they finish |
| first admin finished | — | dashboard |
| second admin | started (properties, or someone finished this company's wizard with AppFolio skipped) | dashboard — never routed in; ejected if they open /onboarding by hand |
| second admin | zero properties, nobody finished (first admin mid-connect) | wizard, first outstanding step |
| Path A: staff connected and imported, then invited the admin | started, credential held by staff | dashboard |
| teammates (every non-admin role) | any | unchanged: dashboard, or the role-based calendar screen (#9308) |
| re-invited existing member (Gmail aliases included) | — | refused inline: <email> is already on your team. (#9366) |
"Started" is one definition in src/lib/domain/onboarding/company-started.ts, read by the workspace guard (route in), the wizard layout (eject) and the invite's landing page. "Some admin finished" is anchored on the company — the onboarding record now carries the org it was completed for — never on the User row's per-login stamp, which crosses customers.
The stage twin of Test Client Co has no AppFolio credential row (the anonymized mirror strips it), so on stage the outstanding company step is connect-pms rather than the inbox; production's shape (credential present, inbox missing) is pinned by the unit permutations in needs-onboarding-second-admin.test.ts, not by this picture. A BEFORE capture against the pre-change code was attempted and abandoned (the shared main-checkout dev server never served the invite page within three minutes); production's own behaviour on 2026-09-18 is the before. L3 (no Back button into unwalked steps) was not built: after this change a second admin at a started company never sees the wizard; the one residual — a second admin at a company with zero properties, nobody finished, AppFolio connected — lands on a company that genuinely is not set up, where Review is a company step.