Defederate relies on stacked native dialogs with no impact preview #115

Closed
opened 2026-07-15 19:52:57 +00:00 by claude-bot · 1 comment
Contributor

Severity: Low · Confidence: High · Effort: S · Category: ui

Evidence

  • app/src/pages/Federation/FederationPage.tsx:92-116 - handleDefederate: confirm(...) then a second confirm(...) for purge, then alert(...).

Problem
One of the most destructive actions in the app (revokes editors, rejects pending contributions, can bulk-soft-delete entries) is driven entirely by native confirm/alert, with no in-app confirmation panel, no preview of what will be purged, and no undo.

Impact
Native dialogs are easy to blast through with muscle-memory "OK," especially on mobile where text truncates. High-consequence action, low-friction guard.

Fix
Replace with an in-app confirmation panel (reuse the type-to-confirm pattern from BulkActionToolbar.tsx:179-188) that first lists the counts of editors/contributions/entries affected.

Acceptance criteria

  • Defederation shows an in-app confirmation with affected counts before it fires.

Filed from the 2026-07-15 codebase audit. Full report: docs/.internal/report-2026-07-15.md (gitignored).

**Severity:** Low · **Confidence:** High · **Effort:** S · Category: ui **Evidence** - `app/src/pages/Federation/FederationPage.tsx:92-116` - `handleDefederate`: `confirm(...)` then a second `confirm(...)` for purge, then `alert(...)`. **Problem** One of the most destructive actions in the app (revokes editors, rejects pending contributions, can bulk-soft-delete entries) is driven entirely by native `confirm`/`alert`, with no in-app confirmation panel, no preview of what will be purged, and no undo. **Impact** Native dialogs are easy to blast through with muscle-memory "OK," especially on mobile where text truncates. High-consequence action, low-friction guard. **Fix** Replace with an in-app confirmation panel (reuse the type-to-confirm pattern from BulkActionToolbar.tsx:179-188) that first lists the counts of editors/contributions/entries affected. **Acceptance criteria** - [ ] Defederation shows an in-app confirmation with affected counts before it fires. --- _Filed from the 2026-07-15 codebase audit. Full report: `docs/.internal/report-2026-07-15.md` (gitignored)._
Author
Contributor

Defederation is now an in-app confirmation dialog that first loads a non-mutating impact preview (new GET /api/federation/instances/:id/defederate-impact returning editors revoked / contributions rejected / entries purgeable) and requires a type-to-confirm before arming — replacing the two stacked native confirm()s + alert().

Shipped in 59e4fdd (test fix 6561f9a), part of the v7.3.0 milestone. Verified on dev (v7.2.1-3-g6561f9a): app suite 65/65 and api suite 268/268 green on the dev server; the one CI red was the known runner flake (iac#159), not this change.

Defederation is now an in-app confirmation dialog that first loads a **non-mutating impact preview** (new `GET /api/federation/instances/:id/defederate-impact` returning editors revoked / contributions rejected / entries purgeable) and requires a **type-to-confirm** before arming — replacing the two stacked native `confirm()`s + `alert()`. Shipped in `59e4fdd` (test fix `6561f9a`), part of the v7.3.0 milestone. Verified on dev (`v7.2.1-3-g6561f9a`): app suite 65/65 and api suite 268/268 green on the dev server; the one CI red was the known runner flake (iac#159), not this change.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/TeaLeaves#115
No description provided.