Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
102 lines
4.1 KiB
Markdown
102 lines
4.1 KiB
Markdown
# Phase 10: Admin Role & Settings - Discussion Log
|
|
|
|
> **Audit trail only.** Do not use as input to planning, research, or execution agents.
|
|
> Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.
|
|
|
|
**Date:** 2026-06-12
|
|
**Phase:** 10-admin-role-settings
|
|
**Areas discussed:** Admin bootstrap, Admin UI entry, App-password/credential scope, Shared-calendar designation, Provider scope, Credential ownership
|
|
|
|
---
|
|
|
|
## Admin bootstrap
|
|
|
|
| Option | Description | Selected |
|
|
|--------|-------------|----------|
|
|
| Env-pinned OIDC sub | `ADMIN_OIDC_SUB` marks operator identity as admin | |
|
|
| First-login-wins | First user to log in is auto-admin | ✓ |
|
|
| Everyone admin for now | Flag all members admin, defer gating | |
|
|
| Manual DB seed | Keep setting `is_admin` by hand | |
|
|
|
|
**User's choice:** First-login-wins
|
|
**Notes:** Chosen because Phase 12's setup wizard precedes it — the first login *after setup completes* becomes admin. Must stay member-count-agnostic.
|
|
|
|
---
|
|
|
|
## Admin UI entry
|
|
|
|
| Option | Description | Selected |
|
|
|--------|-------------|----------|
|
|
| Extend SettingsSheet | Add an Admin section to the existing avatar sheet | |
|
|
| New /admin route | Dedicated gated route, redirect non-admins | ✓ |
|
|
| Settings route + sheet stays | Separate gated /admin, keep notifications sheet | |
|
|
|
|
**User's choice:** New /admin route
|
|
**Notes:** Existing notifications `SettingsSheet` stays; `/admin` gives Phase 12's wizard room on the same surface.
|
|
|
|
---
|
|
|
|
## App-password / credential scope
|
|
|
|
| Option | Description | Selected |
|
|
|--------|-------------|----------|
|
|
| Per-member rows, admin edits any | Per-user credentials, admin rotates any | (see provider redirect) |
|
|
| Per-member, self-only + admin override | Members manage own; admin overrides | |
|
|
| Single shared credential | One household credential | |
|
|
|
|
**User's choice:** Redirected — "treat Fastmail like a provider; design generically enough to plug in Gmail/other providers later." Resolved in the Provider-scope and Credential-ownership follow-ups below.
|
|
**Notes:** Ties into backlog 999.1 (treat-fastmail-as-a-provider).
|
|
|
|
---
|
|
|
|
## Shared-calendar designation
|
|
|
|
| Option | Description | Selected |
|
|
|--------|-------------|----------|
|
|
| Exclusive single-select | Pick exactly one shared calendar; clears prior | ✓ |
|
|
| Multi-select toggles | Mark multiple calendars shared | |
|
|
|
|
**User's choice:** Exclusive single-select
|
|
**Notes:** Matches the "one shared family calendar" core value.
|
|
|
|
---
|
|
|
|
## Provider scope (follow-up)
|
|
|
|
| Option | Description | Selected |
|
|
|--------|-------------|----------|
|
|
| Generic shape, Fastmail-only impl | Add provider field + generic UI; implement only Fastmail/CalDAV | ✓ |
|
|
| Fastmail-only, refactor later | Narrow build now, full refactor in 999.1 | |
|
|
| Full provider abstraction now | Build pluggable layer + 2nd provider | |
|
|
|
|
**User's choice:** Generic shape, Fastmail-only impl
|
|
**Notes:** Gmail/others = wiring left for backlog 999.1. Keeps Phase 10 shippable without scope creep.
|
|
|
|
---
|
|
|
|
## Credential ownership (follow-up)
|
|
|
|
| Option | Description | Selected |
|
|
|--------|-------------|----------|
|
|
| Per-member provider credential | Per-user rows + provider field, N-member ready | ✓ |
|
|
| Household-level credential | One record for the household | |
|
|
|
|
**User's choice:** Per-member provider credential
|
|
**Notes:** Today both rows hold the same shared Fastmail account (D-16) but model stays N-member/N-provider ready; admin can rotate any member's.
|
|
|
|
---
|
|
|
|
## Claude's Discretion
|
|
|
|
- Migration packaging — ship the full v1.1 bundle (`is_admin`, `app_config`, `reminder_lead_minutes`) in one Phase-10 migration (generate+migrate, not push).
|
|
- `app_config` table shape — create with at least `setup_complete`; add keys as needed.
|
|
- `/api/admin/*` route layout and the `requireAdmin` server middleware shape.
|
|
- How the dev-bypass user (id 1) acquires `is_admin` for local verification.
|
|
|
|
## Deferred Ideas
|
|
|
|
- Full multi-provider support (Gmail/other) — backlog 999.1.
|
|
- Self-service credential onboarding — backlog 999.5.
|
|
- Admin audit log / health dashboard / user CRUD — out of scope (REQUIREMENTS.md).
|
|
- Multiple reminders per event — v1.2 stretch.
|