--- id: USER-WP-0029 type: workplan title: "Tenant administrator journeys and lifecycle isolation" domain: communication repo: user-engine status: active owner: codex topic_slug: communication created: "2026-09-13" updated: "2026-09-13" --- Implements docs/account-journeys.md under USER-WP-0027. A passing local suite is not evidence that an external provider flow works live. ## Authorize target before provider calls ```task id: USER-WP-0029-T01 status: done priority: high ``` T01/T03/T04/T06: reject non-admin and wrong-tenant user IDs before provisioning/recovery/lifecycle calls; bind invitation operations to route tenant; protect shared identities from global tenant-scoped mutation. ## Confirm lifecycle changes and protect admin succession ```task id: USER-WP-0029-T02 status: done priority: high ``` T06/T08: preview target/scope/action, CSRF-bound confirmation, reject stale state and last-admin removal, provide cancel and recovery. Keep domain/API guards as well as UI checks. Document concurrency/external propagation limits. ## Explain onboarding and delivery state ```task id: USER-WP-0029-T03 status: done priority: high ``` T02/T03/T04/T07: show actual directory login separately from display name, account state, provider uncertainty, invitation delivery status and appropriate next steps; prevent duplicate rows from workload memberships. Validation: 210 database-enabled regression tests passed with no skips, including independent-connection last-admin protection and nested bootstrap rollback. Thirteen isolated Chromium checks passed. Provider OTP and application access integration remain explicitly open; no complete-journey claim is inferred.