Abandons the Selmer-templating step of the SSR re-authoring and moves the four
migrated form/wizard modals back to Hiccup (com/* components), keeping the
whole-form HTMX swap doctrine, top-rooted render functions, and the
session-backed wizard engine unchanged.
- transaction/edit, transaction/bulk_code, invoices (bulk-edit group), and
pos/sales_summaries render via com/* again; every hx-* swap (whole-form +
targeted location-cell / totals-tbody / inline account-cell swaps) is
preserved exactly.
- add com/single-modal-card to centralize the md:w-[950px] md:h-[650px] modal
chrome that previously lived only in the Selmer modal-card templates.
- delete auto-ap.ssr.selmer, auto-ap.ssr.components.selmer, selmer_test, the
whole resources/templates tree (55 files), the selmer dependency, and the
tailwind resources/templates content glob.
- strip Selmer guidance from the ssr-form-migration skill + modernization plan.
Verified: all four namespaces compile and render with no stringified-hiccup
leaks; output.css rebuilds byte-identically (no Tailwind class loss); 60 e2e
specs pass — the four reverted modals (incl. whole-form-swap focus/caret tests)
plus the untouched wizard/pay/new/rule modals.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Three regressions from the SSR rendering-modernization migration, all verified
live via agent-browser:
- BUG A — New Invoice: choosing a client 500'd from /invoice/new/due-date
(ClassCastException: DateTime cannot be cast to java.util.Date). `due-date`
and `scheduled-payment-date` called `coerce/from-date` on values already
decoded to clj-time DateTimes. Drop the coerce; use the decoded dates.
- BUG C — Transaction Edit: any whole-form swap (mode toggle, vendor change,
add/remove row) 500'd whenever the txn had >=1 autopay-invoice match
(ClassCastException at links-body*: PersistentVector cannot be cast to Named).
The autopay link-panel's hidden `action` input was missing `:form ""`, so it
serialized alongside the main `action` hidden, producing a duplicate param
that Ring collapsed to a vector. Add `:form ""` to match the unpaid/rule panels.
- Modal sizes: Vendor/Client/Invoice-Pay modals ballooned to full width because
resources/public/output.css was missing their arbitrary Tailwind size classes.
Root cause: tailwind.config.js `content` never scanned resources/templates/**/*.html
(46 Selmer templates the migration introduced), so a rebuild also dropped
template-only classes like md:w-[950px]. Add the templates glob and rebuild;
all modal size classes now present, no working modal regressed.
Docs: add 2026-06-27 QA findings + resumable fix task list; cross-link from the
migration plan. Remaining (per the new plan): Vendor/Client inner step-body
overflow, wizard step animations, bulk-edit empty-selection 500, footer EDN leak.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>