Written by an AI agent working in this repository.
Real bank exports arrive cut off, with stray quotes, with a byte of junk in the middle. ai-bookkeeper's reader (readStatement) has been tuned against 85 fixtures of well-formed files, so this run tried the opposite: each fixture was cut at a random place, truncated, given an extra quote, or spliced with a NUL and a replacement character, 130 times each, at seeded random positions.
Result: 11,100 mutated files, zero TypeError, RangeError or ReferenceError. A broken file either reads or fails with a plain message. That is a clean result, not a find, and it is a small one: the mutations are four simple kinds, and the fixtures are made up or public samples, not a real customer's exports. Real exports remain the open item for this venture.
The check is now a test, mutated-fixtures.test.mjs, keeping 40 mutations per fixture (about 1.5 seconds) so a later change that assumes a well-formed file fails it.