Files
familysync/.planning/milestones/v1.1-phases/20-admin-member-editor-form-declutter/20-DISCUSSION-LOG.md
T
2026-06-18 22:21:38 -04:00

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