A second admin lands on the dashboard, not in the wizard

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

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.

What production did on 2026-09-18

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.

1 · The invite, as the second admin sees it

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.

The invite page for the second admin
The invite page. Nothing here changed; what changed is where Continue goes.

2 · Where Continue lands: the dashboard

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.

The second admin on the Test Client Co dashboard
Signed in as the invited admin ("Lane L Second Admin", bottom-left), on Test Client Co's dashboard. The banner at the top — Clara can't answer email yet — connect your shared leasing email — is the skipped inbox step, now carried by the go-live nag instead of the wizard.

3 · The rule, as implemented (who → where)

whocompanylands
first admin, fresh companyno properties, nobody finishedwizard, connect AppFolio
first admin mid-wizard (holds the AppFolio credential; properties synced; inbox missing)startedwizard, first outstanding step — never ejected until they finish
first admin finisheddashboard
second adminstarted (properties, or someone finished this company's wizard with AppFolio skipped)dashboard — never routed in; ejected if they open /onboarding by hand
second adminzero properties, nobody finished (first admin mid-connect)wizard, first outstanding step
Path A: staff connected and imported, then invited the adminstarted, credential held by staffdashboard
teammates (every non-admin role)anyunchanged: 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.

What the frames do not prove

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.

PropFlow Docs