3.6 KiB
Phase 20: Admin Member Editor & Form Declutter - 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-18 Phase: 20-admin-member-editor-form-declutter Areas discussed: Editor field scope, Edit affordance, Editor layout & save model, Add-member declutter, Admin toggle safety
Editor field scope
| Option | Description | Selected |
|---|---|---|
| Core 3 only | Display name + local login password + app password; defer admin toggle/color/OIDC/remove. | |
| Core 3 + admin toggle | Also flip is_admin from the editor, with a last-admin guard. |
✓ |
User's choice: "The entire scope plus admin toggle" — core 3 fields plus the is_admin toggle.
Notes: Color, OIDC link/unlink, and remove-member stay deferred. Display name + admin toggle require one new within-requireAdmin route (no member-update route exists today).
Edit affordance
| Option | Description | Selected |
|---|---|---|
| Whole-row tap + chevron | Tapping anywhere on the member row opens the editor; trailing chevron signals it. | ✓ |
| Name link + pencil button | Literal roadmap wording — name link + dedicated edit icon. |
User's choice: Whole-row tap + chevron.
Notes: Removes the per-row Rotate/Add credential + Reset password button cluster.
Editor layout & save model
| Option | Description | Selected |
|---|---|---|
| One sheet, per-section save | Name+toggle save; "Set new password"; "Set app password" — each independent, maps 1:1 to an endpoint. | ✓ |
| One sheet, single combined Save | One Save writes every changed field; needs partial-failure handling for CalDAV validation. |
User's choice: One sheet, per-section save. Notes: Avoids partial-failure ambiguity when CalDAV validation fails mid-save. Passwords stay write-only (blank = unchanged).
Add-member declutter
| Option | Description | Selected |
|---|---|---|
| Open as a sheet | "Add member" opens a sheet — ideally the same Member sheet in create mode. | ✓ |
| Expand inline form | Button toggles the existing inline form visible/hidden in place. |
User's choice: Open as a sheet. Notes: Prefer the compose_event-style one-component create-vs-edit pattern so the panel collapses to a clean list + one button.
Admin toggle safety
| Option | Description | Selected |
|---|---|---|
| Block demoting last admin | Server rejects toggling is_admin off when they're the only admin; self-demotion only if another admin exists. |
✓ |
| Warn but allow | Confirm dialog when demoting the last admin/yourself, but permit it; rely on break-glass CLI. |
User's choice: Block demoting the last admin (server-enforced). Notes: Phase 19 break-glass CLI/host command remains the true lockout-recovery path; no new role model.
Claude's Discretion
- Exact verb/path/shape of the new member-profile update route (
displayName+is_admin). - Whether the Member editor and Add-member sheet are literally one component (mode prop) vs two siblings on a shared base.
- Whether the app-password section prefills the stored Fastmail email (read-only) or requires re-entry in edit mode.
- Chevron/edit icon choice for the row affordance.
Deferred Ideas
- Editable member color (no stored per-member color — derived by row index).
- Admin-driven OIDC link/unlink (Phase 19 D-12: self-service only).
- Remove / delete member (destructive, cascade concerns).