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