fix(ux): confirm modal's Cancel/Confirm were dead on the promise-API path
Release / build-and-push (push) Successful in 3m29s

User report: the Purge Archived dialog ('Permanently delete all
archived items?...') opened, and Cancel did nothing — and Confirm
would have been equally dead, leaving the page stuck behind the
overlay until a reload.

Root cause: confirm.ts wired the modal's buttons ONLY inside the
htmx:confirm interceptor. confirmDialog() — the promise API used by
purgeArchivedItems, remove-account, and other TS call sites — never
wired them. So whenever a page's first confirm interaction came from
the promise path (no hx-confirm element clicked first), both buttons
had no listeners. The 2026-10-30 confirm_probe spec only exercised the
hx-confirm path, which is why it survived.

Fix: wireButtons() now runs at module init (the header renders before
deferred modules) and inside confirmDialog() — both idempotent via the
existing data-wired guard.

Pinned by tests/ui/promise_confirm_probe.spec.ts (no env gating): the
purge POST is route-intercepted, so the probe asserts Cancel closes
the modal and Confirm issues the guarded request without deleting any
dev data. hx-confirm path re-pinned green (confirm_probe with BH_FEED).
Verified manually at 390x844: open -> cancelWired=true -> Cancel
closes -> Confirm fires the intercepted request.
This commit is contained in:
John O'Keefe committed 2026-11-02 11:24:55 -05:00
1 parent 04e855e691
commit 2165829d0e
3 files changed
+74 -1

No files matched your search

+9
View File
@@ -40,6 +40,15 @@ Gate: every line below executes for BOTH personas unless marked
- Row 23 chains by page navigation — assert the URL becomes the next
episode's reader and progress carries over.
## 2026-11-02 — promise-API confirm probe
`promise_confirm_probe.spec.ts` (no env gating): the confirmDialog()
promise path (purge archived, remove account, …) must wire the global
modal's buttons even when no hx-confirm element fired first — the
Purge All Archived dialog opened with dead Cancel/Confirm otherwise
(user report; confirm.ts now wires at init + on every confirmDialog).
The probe intercepts the purge POST, so nothing is deleted.
## 2026-10-30 — round-3 regression probes (live-server, env-gated)
Two specs added against a RUNNING dev server (skip unless