# 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).