With all 11 plan modals migrated onto the session-backed engine, the mm multi-step
wizard framework has zero runtime callers (transaction/edit.clj builds its
:multi-form-state map from its own wrap-derive-state and never required the namespace).
Delete it:
- src/.../components/multi_modal.clj — the ModalWizardStep/LinearModalWizard/
Initializable/Discardable protocols, the MultiStepFormState record, and the
wrap-wizard / wrap-decode-multi-form-state / default-render-step / encode-step-key
middleware + helpers (~22KB).
- test/.../transaction/edit_simple_advanced_mode_test.clj — the last importer of mm; it
was already broken (refers edit-vendor-changed-handler / edit-wizard-toggle-mode-handler,
both removed when Transaction Edit migrated, so it no longer loaded) and tests the old
mm interface that no longer exists.
- test_server.clj: drop the stale unused mm require.
form-cursor (fc/*) stays — still used by ~18 non-wizard forms outside this plan. The
alpine-morph focus mechanism stays — it belongs to the whole-form-swap doctrine, not the
wizard machinery.
Fresh from-disk JVM compiles clean without the namespace; full e2e suite 71/71.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Alphabetize the import.clj :require block (AGENTS.md Import Formatting).
- Remove unused imports (digest, strip) flagged by clj-kondo.
- Make the client-not-found classify-table test independent: it previously
reused the bank-account-not-found input and added zero marginal coverage;
now seeds an orphan bank account so only the client error fires.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Implement the SSR/alpine/htmx manual transaction import, wiring the
already-declared but unhandled ::external-import-page/parse/import routes.
Mirrors the SSR ledger import: paste the exact master-branch Yodlee
positional-column TSV, review parsed rows in an editable grid with per-row
error/warning badges, and import. Every master validation is preserved and
the existing import.transactions engine is reused unchanged
(via import.manual/import-batch), so core components are untouched.
- New ns auto-ap.ssr.transaction.import (page, paste/parse, editable grid,
two-tier validation, import handler) + admin-only transactions Import nav.
- Two-tier validation: fixable problems (bad date/amount, unknown client or
bank-account code, missing fields) are hard errors that block the whole
batch; inherent skip-conditions (non-POSTED, before start-date/locked,
already-imported) are warnings computed from the engine's own
categorize-transaction so the grid preview matches the import result.
- Tests: failing-first Playwright e2e (e2e/transaction-import.spec.ts) plus
unit/integration coverage (ssr/transaction/import_test.clj, 10 tests).
- Deterministic bank-account code in the e2e seed.
Plan: docs/plans/2026-06-01-001-feat-manual-transaction-import-ssr-plan.md
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add vendor-changed HTMX handlers for both bulk code and individual edit
- Pre-populate default account at 100% when vendor is selected and no accounts exist
- Fix render-accounts-section to render from step-params correctly
- Change bulk code vendor-changed from hx-get to hx-post to include form data
- Add routes for vendor-changed endpoints
- Update e2e tests to cover vendor pre-population
- Run lein cljfmt fix across codebase