v0.1.2
fix: fold all 11 audit findings into a 0.1.2 release
Pre-publish deep scan of src/ surfaced correctness/robustness bugs also
present in 0.1.0/0.1.1. This lands all eleven (5 HIGH + 6 MED), each with a
regression test (58 -> 75 tests), and cuts a 0.1.2 (v0.1.1 was tagged on
GitHub but never published to PyPI; 0.1.2 avoids a public-tag rewrite).
HIGH:
- watermark detection: bucket by abs_page, not chunk-relative page_idx
- open() everywhere: encoding="utf-8" (UnicodeError under non-UTF-8 locale)
- qa sample: clamp n to the page window (crashed on books < ~23 pages)
- chapter-split frontmatter: JSON-quoted scalars -> always valid YAML
- batch: catch convert/fetch errors per-book instead of aborting the run
MED:
- indent_suspect: catch ValueError (NUL byte in code) alongside SyntaxError
- run_mineru: TimeoutExpired -> PassFailed (clean hard-stop, cache intact)
- scan_one: page reads inside try -> one bad page can't abort the dir scan
- batch CLI: exit non-zero when any book is not done
- ToC: drop destination-less level-1 bookmarks (page -1) -> no spurious H1
- render_block: coerce explicit JSON-null field values to "" (no crash)