* refactor(arcim-migration): remove the dead gateway SIE export path
fetchSIEExport and SIEExportFile have had zero callers since the direct
provider clients replaced the Arcim Sync gateway (#181, #718). The path
returned SIE as a pre-decoded string, and the gateway's decode of CP437
bytes as windows-1252 is what wrote the 2026-03-17 mojibake into posted
entries. Deleting it makes the string-typed SIE fetch impossible to
re-wire; a comment marks the grave. The consent lifecycle and entity
accessors stay untouched.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(import): warn when SIE text carries CP437-as-CP1252 mojibake
The 2026-03-17 migration wrote mojibake ("L"neutbetalning"-style C1
specials) into posted entries because the retired gateway handed the
/import-sie handler an already-decoded string: byte-level encoding
detection never saw it, and nothing downstream checked. The live bug is
gone; this is the tripwire so the signature can never land silently
again.
- lib/import/sie-artifact-scan.ts: pure scanner over parsed SIE account
names and voucher/line descriptions, reusing hasCp1252Artifact from
charset-repair; flags at >= 2 hits so a lone legitimate curly quote or
apostrophe cannot false-positive a whole file.
- arcim-migration /import-sie: warn-never-block; the Swedish warning
rides on result.warnings, which the workspace UI already renders, plus
a server-side log.warn.
- wizard parse route: same scan, surfaced through the existing
parse-issue warnings card in the preview, pointing at the first
affected line.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test(bookkeeping): pin the reported gateway mojibake strings
Adds the four strings reported from the affected company's journal as
reverse_cp437 cases (all reverse losslessly) plus a false-positive
guard: space-padded typography must never route into the CP437
reversal.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>