Rounds out project mode, where the workspace is the project root and one
subfolder holds the manuscript proper:
- Characters and Outline windows, backed by new `characters` and `outline`
modules that read the cast from character sheets and measure how much of
the snowflake outline is actually written.
- Edit ▸ Changes… diffs the open file against its last committed version.
- Revision status, per-file and project word counts, an archive action and
hidden folders in the file panel.
- Chapter-file export alongside the ODT master, richer header parsing, and
a project word list for names and invented terms.
- The export path now follows the workspace: opening a project points it at
that project root, keeping a file name you chose yourself and re-deriving
one that merely echoed the folder it sat in.
- Clicking an issue in the grammar/spelling panel takes the editor to it,
selecting the words and centring them; applying a suggestion jumps to the
rewritten text as well.
README covers the new windows and workflows.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017bSn3Xijp8GofZVUnRX4oq
src/app.rs had grown to 3,700 lines, ~2,400 of them a single impl App
block. Move it to src/app/mod.rs and spread the behaviour across eleven
child modules grouped by feature: workspace, grammar, spelling, beats,
find, editor, autocomplete, file_list, ui, style and util.
The new modules are children of app rather than siblings, so they still
reach App's private fields without widening its interface; methods and
free helpers that are now used across module boundaries are marked
pub(super). mod.rs keeps the state types, App::new and the eframe::App
update loop.
This is pure code motion - every non-blank line of the original file
reappears exactly once, and the only edits are the pub(super) markers,
the module scaffolding, and rewrapping five signatures that the added
prefix pushed past 100 columns. Largest file is now editor.rs at 520
lines. Tests still 56/56, and cargo clippy --release reports the same
five warnings as before the split.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GBWj9TphFMCoh7VHaSRnvQ