## storytold/printcraft — v0.1.1…v0.2.0

_64 commits._

### Features
- **Edit text: a paragraph's new colour no longer spills into the text after it (#6)** (24f0a89)

### Backend
- **Merge pull request #33 from storytold/pr/release-0.2.0** (2ea5846)
- **Release: PrintCraft v0.2.0** (df3457e)
- **Issue #28: Help ▸ Check for updates, with an opt-in check at start** (85a8652)
- **Issue #8: prefer the integrated GPU, and the save prompt answers to the keyboard** (27f7ef9)
- **Never crash: predictor rows and stroke widths from the input can't exhaust memory** (a5d830b)
- **Never crash: absurd image-mask and CCITT sizes are refused before decoding** (6058068)
- **Never crash: bound the allocations behind the nightly fuzz runner's out-of-memory deaths** (1449b71)
- **Fuzz: run the CLI cargo built, refuse to run without it, and cap child memory on Linux** (330a4f5)
- **Git: no line-ending conversion for any file, so Windows checkouts keep asset hashes** (1ca5763)
- **Tests: frame budgets take turns and keep the best of three rounds** (9ecfd0a)
- **Merge pull request #25 from storytold/pr/never-crash-edit-xfdf** (f5e3255)
- **Merge pull request #24 from storytold/pr/never-crash-attrs** (342593a)
- **Merge pull request #23 from storytold/pr/never-crash-create** (fb0ea34)
- **Merge pull request #22 from storytold/pr/never-crash-ui** (cec677c)
- **Merge pull request #21 from storytold/pr/never-crash-automation** (b8f40d0)
- **Merge pull request #20 from storytold/pr/never-crash-engine** (0772e99)
- **Merge pull request #19 from storytold/pr/never-crash-render** (66d127b)
- **Merge pull request #18 from storytold/pr/never-crash-organize** (0133cb7)
- **Merge pull request #17 from storytold/pr/never-crash-sign** (e373293)
- **Merge pull request #16 from storytold/pr/never-crash-small** (414060a)
- **Merge pull request #15 from storytold/pr/never-crash-crypt** (7da7ec6)
- **Merge pull request #14 from storytold/pr/never-crash-guard** (a76263a)
- **Merge pull request #13 from storytold/pr/never-crash-js** (5c4988a)
- **Merge pull request #12 from storytold/pr/never-crash-forms** (ff8c75f)
- **Merge pull request #11 from storytold/pr/never-crash-steering** (3dc6a81)
- **Never crash: edit and xfdf have no expect calls** (ac222e8)
- **Edit text: a rewritten paragraph keeps its place in the text object it shares (#7)** (e7ba974)
- **Forms: multi-select list values survive XML, CSV and text import (#5)** (95af23d)
- **Root clippy.toml: tests may unwrap, expect, panic and index** (59f74ea)
- **Root clippy.toml: tests may unwrap, expect, panic and index** (4e74f9e)
- **Root clippy.toml: tests may unwrap, expect, panic and index** (e96a89c)
- **Root clippy.toml: tests may unwrap, expect, panic and index** (f688415)
- **Root clippy.toml: tests may unwrap, expect, panic and index** (0e2f8a2)
- **Root clippy.toml: tests may unwrap, expect, panic and index** (6ea62a0)
- **Root clippy.toml: tests may unwrap, expect, panic and index** (dd0eed7)
- **Root clippy.toml: tests may unwrap, expect, panic and index** (9261715)
- **Root clippy.toml: tests may unwrap, expect, panic and index** (cfe84da)
- **Root clippy.toml: tests may unwrap, expect, panic and index** (9902ff3)
- **Root clippy.toml: tests may unwrap, expect, panic and index** (b834c6c)
- **Forms: CSV import keeps values that span lines (#4)** (096b515)
- **Optimizer: Audit space usage counts images PrintCraft added as images (#3)** (3908a03)
- **Never crash: forbid unsafe, clippy.toml for tests, guard and craftrules link** (554969d)
- **Agent rules: never panic (AGENTS.md §4, CLAUDE.md non-negotiables)** (d9d7cac)
- **Never crash: deny the panic lints in crates that are already clean** (1434db6)
- **Never crash: create has no expect calls** (7632d8b)
- **Never crash: UI and app shell have no expect/unreachable** (5102732)
- **Never crash: the automation (MCP/script) tools have no expect/unreachable** (d54f7c2)
- **Never crash: render has no expect/unreachable** (f7a0d3a)
- **Never crash: organize has no expect/unreachable** (c74fb89)
- **Never crash: sign has no expect/unreachable** (456a42a)
- **Never crash: last-resort guard around edits, opens, saves and UI commands** (7f09486)
- **Never crash: hostile form scripts can't overflow the stack** (18c1acd)
- **Never crash: engine denies the panic lints** (58cd661)
- **Never crash: filters, fonts, js, optimize and a11y deny the panic lints** (9fc3354)
- **Never crash: crypt has no panic paths** (95d8ba3)
- **Never crash: forms scripts can't overflow the stack or the date arithmetic** (15f6fa7)
- **Git: mark PDFs, keys, fonts and images binary so Windows checkouts keep their bytes** (8f1f4e7)
- **Tests: take split part names with Path::file_name so the test passes on Windows** (48f1495)
- **Merge pull request #9 from storytold/pr/license-standard** (788456a)
- **Licensing: standard LICENSE files, NOTICE, ArtCraft brand terms** (d20eef9)
- **M4: Deleted pages leave the file even when bookmarks, links or widgets still point at them (#2)** (2336b24)
- **M8: Redaction drops /PCAdded from rewritten content streams so redacted added text does not stay in the file (#1)** (0523ccd)

### Chore
- **CI: as_chunks instead of constant-size chunks_exact (clippy 1.99 chunks_exact_to_as_chunks)** (ab47bf4)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/storytold/printcraft?utm_source=github-action)._