chore: archive v1.1 phase directories to milestones/v1.1-phases/

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Lucas Berger
2026-06-18 22:21:38 -04:00
co-authored by Claude Opus 4.8
parent a2890d1542
commit c7955a46b9
243 changed files with 0 additions and 0 deletions
@@ -0,0 +1,101 @@
# 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.