* chore: repo-wide bloat sweep, remove dead code and fold duplicate helpers
Remove 33 dead files, ~270 unreferenced exports/types, 13 dead i18n
namespaces and 4 unused dependencies; fold byte-identical helper copies
into one canonical home each (lib/utils chunk/sleep/utcDateStamp,
lib/dates/iso, lib/invariants/uuid, lib/xml/escape, lib/reports/sru/format,
lib/pdf/number-text, lib/browser/panel-request, lib/api/v1/body +
v1ValidationError rolled out to ~55 v1 routes, booking-template schemas).
No behaviour change: v1 bodies and status codes, MCP tool schemas, DB
writes and money math are untouched. Naive ore rounding was deliberately
not swapped for roundOre; see DECISIONS.md 2026-09-02 for the full list
of things left alone on purpose.
tsc, lint, 19588 unit tests and check:guards green; antipattern baseline
ratcheted (naive-ore-round 622 -> 620, hand-rolled-invariant 115 -> 113).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* test(transactions): import RawTransaction from @/types after the ingest re-export removal
CI's type ratchet (check:types, full tsconfig) caught the one test file
that still imported the type through lib/transactions/ingest.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
---------
Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* feat(mcp): kontoplan account tools + verifikat notes exposure
Two gaps reported by an MCP-driven user: no account management in the
API, and verifikat notes invisible to agents (they exist in the product
but MCP could neither read nor write them).
- add staged gnubok_create_account / gnubok_update_account (BAS 2026
prefill for catalog numbers; rename/VAT-default/SRU/activate via
update; both LOW risk reference data)
- add staged gnubok_set_voucher_note (notes-only annotation, legal on
posted entries per the 20260608120000 trigger carve-out) and return
entry_notes from gnubok_query_journal
- new pending_operations types create_account / update_account /
set_voucher_note (CHECK migration + validate companion, applied to
staging)
- tools/list payload ceiling 54K -> 56K (documented; wire contract,
descriptions trimmed first)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(skatteverket): unstick BankID connect flow and stale connection views
- respond to the OAuth callback immediately and run the post-connect
refresh after the response (next/server after()): users no longer
stare at Skatteverket's consumed consent page for up to 40s
- open the consent flow in a full tab instead of a 600x750 popup that
hid the approve button below the fold
- disable connect buttons while the OAuth tab is open (parallel flows
overwrote oauth_state + the PKCE verifier) and recover via a
closed-tab watcher plus a delayed status refetch
- persist MISSING_SCOPE token health from the post-connect sync and
show an actionable "approve all permissions" notice
- refetch connection state on tab visibility (settings connect panel,
enable-banking panel, /skattekonto) so a connect completed in another
tab or after a mobile app-switch shows up without a manual reload;
fix /skattekonto never clearing its not-connected state
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(article-form): add article number field with validation to ArticleForm
* feat(account): enforce account type consistency with BAS class and add validation
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>