Skip to content

refactor: shared module layout (craft-contrib#20) - #4889

Merged
aiongg merged 172 commits into
storytold:mainfrom
aiongg:layout
Oct 27, 2026
Merged

aiongg merged 172 commits into
storytold:mainfrom
aiongg:layout

Conversation

@aiongg

@aiongg aiongg commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Why

Part of the suite-wide module layout (storytold/craft-contrib#20): large files split by concern, mod.rs files converted, inline test modules moved to their own files, and the flat crates/ui-egui/src grouped into directories. Pure moves only: no behaviour change and no item renames. Every public and crate path stays the same through pub use / pub(crate) use aliases in the old parent.

Merge without squashing: each commit is one move.

What moved

Large files split

Line counts are wc -l (including comments, tests and blank lines) at main (f94668f1c) and at this PR (f022ef067).

File on main Lines on main Split into Left in the original Largest new file
crates/render/src/raster.rs 8,333 2 files 508 raster/tests.rs (7,037)
crates/ui-egui/src/canvas.rs 8,036 10 files 2,664 canvas/tests.rs (2,034)
crates/render/src/inspect.rs 4,369 6 files 89 inspect/tests.rs (1,872)
crates/ui-egui/src/lib.rs 3,917 13 files 614 app/files.rs (682)
crates/edit/src/text.rs 3,667 6 files 281 text/rewrite.rs (857)
crates/cos/src/document.rs 3,621 6 files 77 document/tests.rs (1,287)
crates/render/src/text.rs 3,540 4 files 391 text/tests.rs (1,761)
crates/automation/src/lib.rs 3,411 8 files 170 dispatch.rs (784)
crates/ui-egui/src/control.rs 3,296 7 files 607 control/lifecycle_tests.rs (906)
crates/ui-egui/src/combine_ui.rs (original replaced by crates/ui-egui/src/workflows/combine_ui.rs) 2,828 7 files 163 workflows/combine_ui/view.rs (641)
crates/annot/src/lib.rs 2,687 6 files 73 modify.rs (825)
crates/js/src/formcalc.rs 2,679 9 files 230 formcalc/eval.rs (618)
crates/ui-egui/src/comments.rs (original replaced by crates/ui-egui/src/tools/comments.rs) 2,675 7 files 394 tools/comments/input.rs (586)
crates/sign/src/pdf.rs 2,513 5 files 107 pdf/validate.rs (649)
crates/xfa/src/layout.rs 2,132 7 files 230 layout/measure.rs (366)
crates/ui-egui/src/panels.rs 2,086 5 files 50 panels/right.rs (711)
crates/forms/src/af.rs 2,074 4 files 394 af/format.rs (533)
crates/xfa/src/data.rs 2,003 8 files 154 data/merge.rs (399)
crates/ui-egui/src/edit_text_ui.rs (original replaced by crates/ui-egui/src/tools/edit_text_ui.rs) 1,998 3 files 913 tools/edit_text_ui/image.rs (637)
crates/ui-egui/src/editing.rs 1,870 3 files 1,022 editing/tests.rs (345)
crates/forms/src/lib.rs 1,858 4 files 293 values.rs (638)
crates/export/src/lib.rs 1,850 5 files 41 tests.rs (771)
crates/ui-egui/src/prepare.rs (original replaced by crates/ui-egui/src/tools/prepare.rs) 1,758 3 files 759 tools/prepare/tabs.rs (386)
crates/js/src/lib.rs 1,749 6 files 64 format.rs (620)
crates/ui-egui/src/sign_ui.rs (original replaced by crates/ui-egui/src/tools/sign_ui.rs) 1,730 2 files 899 tools/sign_ui/dialog.rs (486)
crates/forms/src/author.rs 1,711 4 files 126 author/look.rs (473)
crates/ui-egui/src/combine_grid.rs (original replaced by crates/ui-egui/src/workflows/combine_grid.rs) 1,710 3 files 575 workflows/combine_grid/card.rs (421)
crates/js/src/xfa.rs 1,655 6 files 36 xfa/globals.rs (362)
crates/xfdf/src/lib.rs 1,613 3 files 324 xfdf.rs (536)
crates/engine/src/session.rs 1,590 4 files 48 session/editing.rs (521)
crates/engine/src/edit.rs 1,577 2 files 553 edit/run.rs (696)
crates/ui-egui/src/print_ui.rs (original replaced by crates/ui-egui/src/workflows/print_ui.rs) 1,560 2 files 786 workflows/print_ui/body.rs (545)
crates/organize/src/import.rs 1,554 4 files 525 import/combine.rs (307)
crates/xfa/src/pdf.rs 1,433 2 files 963 pdf/strip.rs (282)
crates/redact/src/interp.rs 1,430 2 files 831 interp/prune.rs (354)
crates/edit/src/added.rs 1,295 4 files 71 added/draw.rs (383)
apps/pdfcraft-cli/src/main.rs 1,235 5 files 197 commands.rs (413)
crates/automation/src/a11y.rs 1,118 3 files 599 a11y/documents.rs (219)
crates/edit/src/text_regions.rs 1,106 2 files 11 text_regions/styled.rs (787)
crates/edit/src/lib.rs 1,054 3 files 77 place.rs (424)
crates/print/src/lib.rs 1,052 4 files 45 sheets.rs (350)

Also: 11 test modules moved out to tests.rs files, 1 mod.rs file renamed.

crates/render/src/raster.rs (8,333 → 508 + 2 files)
New file Lines
raster/tests.rs 7,037
raster/pool.rs 755
crates/ui-egui/src/canvas.rs (8,036 → 2,664 + 10 files)
New file Lines
canvas/tests.rs 2,034
canvas/cache.rs 736
canvas/organize.rs 535
canvas/bars.rs 487
canvas/navigation.rs 445
canvas/zoom.rs 359
canvas/find.rs 301
canvas/selection.rs 250
canvas/area.rs 168
canvas/xform.rs 151
crates/render/src/inspect.rs (4,369 → 89 + 6 files)
New file Lines
inspect/tests.rs 1,872
inspect/navigation.rs 550
inspect/model.rs 539
inspect/annotations.rs 474
inspect/resources.rs 468
inspect/core.rs 417
crates/ui-egui/src/lib.rs (3,917 → 614 + 13 files)
New file Lines
app/files.rs 682
app.rs 610
state.rs 417
app/control.rs 392
app/prefs.rs 337
app/commands.rs 195
app/frame.rs 191
app/input.rs 140
app/links.rs 125
app/keys.rs 116
app/clipboard.rs 81
app/window.rs 62
hooks.rs 27
crates/edit/src/text.rs (3,667 → 281 + 6 files)
New file Lines
text/rewrite.rs 857
text/interp.rs 856
text/fallback.rs 599
text/lines.rs 585
text/blocks.rs 424
text/editor.rs 127
crates/cos/src/document.rs (3,621 → 77 + 6 files)
New file Lines
document/tests.rs 1,287
document/reader.rs 874
document/objects.rs 572
document/open.rs 344
document/xref.rs 277
document/state.rs 210
crates/render/src/text.rs (3,540 → 391 + 4 files)
New file Lines
text/tests.rs 1,761
text/device.rs 498
text/order.rs 487
text/layout.rs 427
crates/automation/src/lib.rs (3,411 → 170 + 8 files)
New file Lines
dispatch.rs 784
documents.rs 606
tests.rs 552
assemble.rs 424
pages.rs 363
json.rs 361
paths.rs 180
error.rs 33
crates/ui-egui/src/control.rs (3,296 → 607 + 7 files)
New file Lines
control/lifecycle_tests.rs 906
control/transport.rs 615
control/requests.rs 369
control/screenshot.rs 284
control/host.rs 188
control/pending.rs 176
control/plugin.rs 172
crates/ui-egui/src/combine_ui.rs (2,828 → 163 + 7 files)
New file Lines
workflows/combine_ui/view.rs 641
workflows/combine_ui/files.rs 473
workflows/combine_ui/session.rs 449
workflows/combine_ui/table.rs 363
workflows/combine_ui/parts.rs 288
workflows/combine_ui/actions.rs 275
workflows/combine_ui/tests.rs 212
crates/annot/src/lib.rs (2,687 → 73 + 6 files)
New file Lines
modify.rs 825
types.rs 663
create.rs 471
info.rs 276
lookup.rs 243
draw.rs 198
crates/js/src/formcalc.rs (2,679 → 230 + 9 files)
New file Lines
formcalc/eval.rs 618
formcalc/builtins.rs 477
formcalc/parser.rs 451
formcalc/access.rs 431
formcalc/dates.rs 166
formcalc/lexer.rs 129
formcalc/value.rs 92
formcalc/words.rs 75
formcalc/ast.rs 48
crates/ui-egui/src/comments.rs (2,675 → 394 + 7 files)
New file Lines
tools/comments/input.rs 586
tools/comments/tests.rs 386
tools/comments/menu.rs 369
tools/comments/state.rs 354
tools/comments/paint.rs 257
tools/comments/geometry.rs 194
tools/comments/composer.rs 182
crates/sign/src/pdf.rs (2,513 → 107 + 5 files)
New file Lines
pdf/validate.rs 649
pdf/signing.rs 610
pdf/changes.rs 579
pdf/listing.rs 375
pdf/types.rs 225
crates/xfa/src/layout.rs (2,132 → 230 + 7 files)
New file Lines
layout/measure.rs 366
layout/draw.rs 324
layout/flow.rs 310
layout/field.rs 305
layout/pages.rs 280
layout/common.rs 211
layout/items.rs 145
crates/ui-egui/src/panels.rs (2,086 → 50 + 5 files)
New file Lines
panels/right.rs 711
panels/edit.rs 370
panels/bookmarks.rs 360
panels/pages.rs 359
panels/tools.rs 282
crates/forms/src/af.rs (2,074 → 394 + 4 files)
New file Lines
af/format.rs 533
af/calc.rs 514
af/script.rs 340
af/tests.rs 309
crates/xfa/src/data.rs (2,003 → 154 + 8 files)
New file Lines
data/merge.rs 399
data/import.rs 353
data/write.rs 264
data/passwords.rs 194
data/dates.rs 193
data/values.rs 192
data/build.rs 164
data/path.rs 156
crates/ui-egui/src/edit_text_ui.rs (1,998 → 913 + 3 files)
New file Lines
tools/edit_text_ui/image.rs 637
tools/edit_text_ui/layout.rs 270
tools/edit_text_ui/background.rs 195
crates/ui-egui/src/editing.rs (1,870 → 1,022 + 3 files)
New file Lines
editing/tests.rs 345
editing/save.rs 304
editing/close.rs 212
crates/forms/src/lib.rs (1,858 → 293 + 4 files)
New file Lines
values.rs 638
read.rs 568
appearances.rs 237
tab_order.rs 153
crates/export/src/lib.rs (1,850 → 41 + 5 files)
New file Lines
tests.rs 771
layout.rs 468
as_docx.rs 364
as_rtf.rs 127
as_html.rs 103
crates/ui-egui/src/prepare.rs (1,758 → 759 + 3 files)
New file Lines
tools/prepare/tabs.rs 386
tools/prepare/properties.rs 332
tools/prepare/draft.rs 297
crates/js/src/lib.rs (1,749 → 64 + 6 files)
New file Lines
format.rs 620
run.rs 256
globals.rs 239
document.rs 224
model.rs 199
host.rs 197
crates/ui-egui/src/sign_ui.rs (1,730 → 899 + 2 files)
New file Lines
tools/sign_ui/dialog.rs 486
tools/sign_ui/panel.rs 358
crates/forms/src/author.rs (1,711 → 126 + 4 files)
New file Lines
author/look.rs 473
author/edit.rs 425
author/tree.rs 380
author/lifecycle.rs 326
crates/ui-egui/src/combine_grid.rs (1,710 → 575 + 3 files)
New file Lines
workflows/combine_grid/card.rs 421
workflows/combine_grid/thumbs.rs 391
workflows/combine_grid/tests.rs 345
crates/js/src/xfa.rs (1,655 → 36 + 6 files)
New file Lines
xfa/globals.rs 362
xfa/nodes.rs 343
xfa/host.rs 286
xfa/instances.rs 279
xfa/model.rs 228
xfa/run.rs 170
crates/xfdf/src/lib.rs (1,613 → 324 + 3 files)
New file Lines
xfdf.rs 536
fdf.rs 516
common.rs 266
crates/engine/src/session.rs (1,590 → 48 + 4 files)
New file Lines
session/editing.rs 521
session/files.rs 397
session/save.rs 335
session/view.rs 304
crates/engine/src/edit.rs (1,577 → 553 + 2 files)
New file Lines
edit/run.rs 696
edit/labels.rs 336
crates/ui-egui/src/print_ui.rs (1,560 → 786 + 2 files)
New file Lines
workflows/print_ui/body.rs 545
workflows/print_ui/draft.rs 238
crates/organize/src/import.rs (1,554 → 525 + 4 files)
New file Lines
import/combine.rs 307
import/fields.rs 297
import/carry.rs 233
import/copy.rs 220
crates/xfa/src/pdf.rs (1,433 → 963 + 2 files)
New file Lines
pdf/strip.rs 282
pdf/common.rs 200
crates/redact/src/interp.rs (1,430 → 831 + 2 files)
New file Lines
interp/prune.rs 354
interp/layers.rs 256
crates/edit/src/added.rs (1,295 → 71 + 4 files)
New file Lines
added/draw.rs 383
added/layout.rs 356
added/store.rs 301
added/types.rs 212
apps/pdfcraft-cli/src/main.rs (1,235 → 197 + 5 files)
New file Lines
commands.rs 413
check.rs 206
run.rs 186
options.rs 148
ui.rs 131
crates/automation/src/a11y.rs (1,118 → 599 + 3 files)
New file Lines
a11y/documents.rs 219
a11y/form_tools.rs 163
a11y/ocr.rs 146
crates/edit/src/text_regions.rs (1,106 → 11 + 2 files)
New file Lines
text_regions/styled.rs 787
text_regions/grouping.rs 319
crates/edit/src/lib.rs (1,054 → 77 + 3 files)
New file Lines
place.rs 424
marks.rs 298
apply.rs 291
crates/print/src/lib.rs (1,052 → 45 + 4 files)
New file Lines
sheets.rs 350
imposition.rs 348
settings.rs 250
error.rs 84

Totals: 41 files split, 81,956 lines moved out of them, 199 new files.

Also:

  • 22 inline mod tests modules → <file>/tests.rs; control.rs's lifecycle_tests → control/lifecycle_tests.rs.
  • i18n/mod.rs → i18n.rs; xtask/src/demo_pdf/mod.rs → demo_pdf.rs.
  • 78 whole ui-egui files into directories, one commit each: canvas/, panels/, dialogs/, menus/, widgets/, home/, and four new ones: tools/ (task tools used on the page: comments, forms, prepare, fill & sign, sign, redact, measure…), workflows/ (whole-document flows: combine, create, export, compare, OCR, optimize, print…), platform/ (OS integration: pickers, file watching, portable mode, updates, window controls, system fonts…) and persist/ (what the app saves between runs: last session, last view, recovery, units, window state).

Changes besides moves

In the move commits, where the move needs them to compile: visibility (pub(super) / pub(crate), never pub), use and mod lines, impl X { wrappers, the old-path aliases, cfg attributes on use lines whose items are gated to native or to wasm, and relative include_str! / include_bytes! depths (the 34 i18n .tsv catalogs; fonts, render and ui-egui test fixtures; icon_data.rs's 190 icons; the macOS Info.plist.in).

Own commits:

  • test: scan source directories recursively
  • style(ui-egui): format i18n.rs after the include path update
  • test(pdfcraft): cut main.rs at the moved test module's declaration
  • test(ui-egui): skip test files in the page pointer scan
  • docs(parity): point evidence at the tests' new files
  • docs: name i18n.rs and demo_pdf.rs after the mod.rs moves
  • test(ui-egui): point the page-pointer source scan at canvas/*.rs
  • test(ui-egui): list edit_text_ui/image.rs among the page modules
  • docs(parity): point evidence at combine_ui's moved tests
  • test(automation): skip use lines in the file access scan
  • docs(parity): point evidence at panels' moved tests
  • test(ui-egui): list the comments/ modules in PAGE_MODULES
  • docs(parity): point evidence at inspect's moved tests
  • test(sign): read the split pdf modules in wordings_are_complete
  • test(ui-egui): list fill_sign/scan.rs among the page modules
  • test(ui-egui): rerun the fontconfig tests by their platform:: path
  • docs(parity): point evidence at the ui-egui files' new directories
  • test(ui-egui): name the page modules by their new directories
  • docs: name the ui-egui files by their new directories
  • test(automation): end the file access scan at the test module, not at a cfg(test) use
  • style: cargo fmt on moved files

Log targets

The default filter (warn,pdfcraft*=info) is unaffected. Targets that change: ui-egui canvas::cache, app::frame, menus::tab_context, persist::recovery, platform::{macos_association, portable, system_fonts, system_fonts::fontconfig}; render raster::pool.

Builds

Clippy -D warnings with --all-targets for the workspace on Linux and for x86_64-pc-windows-msvc (sign, engine, automation, ui-egui and both apps through cargo xwin, the rest with plain cargo check), and the wasm32 check. On macOS (aarch64-apple-darwin), every crate except sign, engine, automation, ui-egui and both apps: their dependencies ring and aws-lc-sys have C build scripts that don't cross-compile to macOS on a Linux host. For those crates, the macOS-only code was name-checked on Linux with the macos and linux cfgs swapped; the only errors left are macOS-only dependencies that are absent on Linux. The full macOS build and tests run on a Mac.

Open PRs that conflict

Open PRs whose diff touches each split file (2026-10-26). Git follows the whole-file moves on rebase.

File PRs Numbers
crates/ui-egui/src/canvas.rs find.rs, selection.rs, cache.rs, zoom.rs, navigation.rs, xform.rs, organize.rs, bars.rs, area.rs, canvas/tests.rs
crates/ui-egui/src/lib.rs app.rs, app/files.rs, app/links.rs, app/input.rs, app/keys.rs, app/clipboard.rs, app/window.rs, app/prefs.rs, app/commands.rs, app/control.rs, app/frame.rs, state.rs, hooks.rs
crates/ui-egui/src/control.rs plugin.rs, requests.rs, screenshot.rs, pending.rs, host.rs, transport.rs
crates/ui-egui/src/combine_ui.rs files.rs, view.rs, table.rs, parts.rs, session.rs, actions.rs, combine_ui/tests.rs
crates/ui-egui/src/comments.rs state.rs, geometry.rs, input.rs, paint.rs, composer.rs, menu.rs, comments/tests.rs
crates/ui-egui/src/dialogs.rs prompts.rs
crates/ui-egui/src/panels.rs tools.rs, edit.rs, right.rs, bookmarks.rs, pages.rs
crates/ui-egui/src/edit_text_ui.rs background.rs, layout.rs, image.rs
crates/ui-egui/src/prepare.rs draft.rs, properties.rs, tabs.rs
crates/ui-egui/src/sign_ui.rs dialog.rs, panel.rs
crates/ui-egui/src/print_ui.rs draft.rs, body.rs
crates/ui-egui/src/combine_grid.rs thumbs.rs, card.rs, combine_grid/tests.rs
crates/ui-egui/src/fill_sign.rs scan.rs
crates/ui-egui/src/editing.rs save.rs, close.rs, editing/tests.rs
crates/engine/src/lib.rs doc_state (new) and existing modules.rs, tests.rs
crates/automation/src/lib.rs error.rs, dispatch.rs, documents.rs, assemble.rs, pages.rs, paths.rs, json.rs, tests.rs
crates/edit/src/text.rs editor.rs, interp.rs, blocks.rs, lines.rs, rewrite.rs, fallback.rs
crates/redact/src/interp.rs layers.rs, prune.rs
crates/edit/src/added.rs types.rs, layout.rs, draw.rs, store.rs
crates/edit/src/text_regions.rs styled.rs, grouping.rs
crates/edit/src/lib.rs marks.rs, place.rs, apply.rs
crates/export/src/lib.rs layout.rs, as_html.rs, as_docx.rs, as_rtf.rs, tests.rs
crates/print/src/lib.rs error.rs, settings.rs, sheets.rs, imposition.rs
crates/annot/src/lib.rs types.rs, lookup.rs, create.rs, modify.rs, draw.rs, info.rs
crates/sign/src/pdf.rs listing.rs, types.rs, validate.rs, changes.rs, signing.rs
crates/cos/src/document.rs state.rs, xref.rs, open.rs, objects.rs, reader.rs, document/tests.rs
crates/render/src/inspect.rs core.rs, annotations.rs, resources.rs, navigation.rs, model.rs, inspect/tests.rs
crates/render/src/text.rs device.rs, layout.rs, order.rs, text/tests.rs
crates/render/src/raster.rs pool.rs, raster/tests.rs
crates/fonts/src/pdf.rs pdf/tests.rs
crates/annot/src/appearance.rs symbols.rs
crates/forms/src/lib.rs read.rs, tab_order.rs, values.rs, appearances.rs
crates/forms/src/author.rs tree.rs, look.rs, edit.rs, lifecycle.rs
crates/forms/src/af.rs script.rs, calc.rs, format.rs, af/tests.rs
crates/xfdf/src/lib.rs util.rs, xfdf.rs, fdf.rs
crates/organize/src/import.rs copy.rs, fields.rs, combine.rs, carry.rs
crates/automation/src/a11y.rs ocr.rs, documents.rs, forms.rs
apps/pdfcraft-cli/src/main.rs options.rs, commands.rs, check.rs, run.rs, ui.rs
apps/pdfcraft/src/main.rs tests.rs
crates/js/src/lib.rs model.rs, host.rs, document.rs, util.rs, globals.rs, run.rs
crates/js/src/formcalc.rs lexer.rs, ast.rs, parser.rs, value.rs, access.rs, eval.rs, dates.rs, words.rs, builtins.rs
crates/js/src/xfa.rs model.rs, host.rs, nodes.rs, instances.rs, globals.rs, run.rs
crates/xfa/src/layout.rs items.rs, helpers.rs, pages.rs, flow.rs, measure.rs, draw.rs, field.rs
crates/xfa/src/data.rs path.rs, dates.rs, values.rs, build.rs, merge.rs, write.rs, import.rs, passwords.rs
crates/xfa/src/pdf.rs helpers.rs, strip.rs
crates/ui-egui/src/canvas.rs 187 #151 #162 #252 #344 #596 #687 #827 #927 #1090 #1108 #1128 #1165 #1166 #1179 #1454 #1465 #1487 #1572 #1625 #1629 #1636 #1731 #1732 #1734 #1740 #1851 #1861 #1870 #1915 #1988 #1990 #1993 #2021 #2081 #2087 #2088 #2113 #2125 #2126 #2133 #2137 #2146 #2155 #2161 #2169 #2197 #2202 #2238 #2251 #2263 #2265 #2345 #2348 #2369 #2467 #2491 #2518 #2530 #2546 #2557 #2573 #2575 #2635 #2643 #2690 #2720 #2732 #2737 #2742 #2770 #2775 #2779 #2808 #2844 #2875 #2883 #2886 #2939 #3003 #3055 #3062 #3065 #3069 #3078 #3134 #3200 #3222 #3232 #3233 #3251 #3281 #3315 #3335 #3342 #3346 #3347 #3380 #3394 #3398 #3400 #3427 #3457 #3484 #3500 #3527 #3544 #3545 #3547 #3567 #3575 #3635 #3641 #3669 #3753 #3763 #3766 #3773 #3787 #3789 #3806 #3859 #3860 #3864 #3876 #3889 #3891 #3896 #3939 #4072 #4090 #4094 #4135 #4139 #4146 #4148 #4190 #4239 #4241 #4247 #4268 #4275 #4282 #4290 #4305 #4315 #4325 #4333 #4378 #4400 #4418 #4428 #4457 #4472 #4474 #4480 #4497 #4501 #4502 #4525 #4530 #4533 #4540 #4541 #4543 #4546 #4556 #4557 #4584 #4585 #4589 #4611 #4618 #4625 #4627 #4666 #4673 #4689 #4693 #4707 #4709 #4738 #4748 #4751 #4762 #4799 #4838 #4840
crates/ui-egui/src/lib.rs 275 #162 #182 #252 #359 #438 #467 #596 #687 #827 #904 #977 #1059 #1090 #1108 #1118 #1119 #1128 #1166 #1172 #1181 #1212 #1241 #1267 #1407 #1412 #1433 #1446 #1476 #1572 #1593 #1604 #1607 #1612 #1615 #1625 #1636 #1641 #1692 #1723 #1724 #1731 #1732 #1733 #1734 #1837 #1840 #1851 #1856 #1870 #1871 #1896 #1906 #1915 #1918 #1972 #1988 #1990 #1991 #1993 #1996 #1997 #1998 #2005 #2014 #2021 #2024 #2043 #2044 #2081 #2087 #2088 #2103 #2125 #2126 #2133 #2146 #2147 #2152 #2155 #2158 #2161 #2186 #2187 #2197 #2202 #2215 #2238 #2251 #2263 #2291 #2296 #2325 #2326 #2340 #2348 #2369 #2376 #2381 #2389 #2453 #2467 #2471 #2475 #2482 #2491 #2503 #2518 #2520 #2541 #2551 #2573 #2610 #2623 #2635 #2643 #2650 #2677 #2690 #2729 #2732 #2737 #2741 #2742 #2765 #2769 #2770 #2771 #2772 #2773 #2774 #2775 #2776 #2777 #2779 #2808 #2815 #2844 #2849 #2865 #2886 #2899 #2910 #2923 #2930 #2939 #2967 #2996 #3003 #3019 #3025 #3026 #3027 #3028 #3036 #3054 #3055 #3059 #3066 #3100 #3105 #3198 #3233 #3251 #3268 #3281 #3288 #3315 #3342 #3346 #3347 #3380 #3382 #3402 #3416 #3457 #3483 #3484 #3486 #3500 #3544 #3545 #3554 #3575 #3589 #3605 #3635 #3641 #3704 #3705 #3706 #3729 #3748 #3753 #3757 #3760 #3779 #3826 #3860 #3870 #3876 #3896 #3971 #4042 #4045 #4059 #4089 #4091 #4135 #4146 #4148 #4162 #4190 #4193 #4197 #4201 #4208 #4238 #4239 #4241 #4247 #4264 #4268 #4286 #4290 #4306 #4315 #4327 #4344 #4378 #4382 #4383 #4400 #4418 #4427 #4428 #4457 #4460 #4472 #4479 #4480 #4502 #4516 #4517 #4527 #4530 #4542 #4543 #4546 #4547 #4553 #4560 #4575 #4584 #4594 #4605 #4611 #4636 #4646 #4650 #4666 #4672 #4691 #4694 #4707 #4709 #4718 #4738 #4746 #4751 #4753 #4762 #4763 #4802 #4816 #4838
crates/ui-egui/src/control.rs 45 #252 #596 #1090 #1108 #1166 #1172 #1446 #2081 #2088 #2113 #2155 #2340 #2471 #2573 #2690 #2775 #2849 #2883 #2886 #3055 #3105 #3233 #3251 #3315 #3381 #3483 #3484 #3641 #3748 #3753 #3843 #3870 #3876 #4135 #4238 #4239 #4241 #4286 #4315 #4378 #4400 #4428 #4501 #4646 #4738
crates/ui-egui/src/combine_ui.rs 30 #596 #1090 #1118 #1172 #1241 #1412 #1915 #2155 #2326 #2503 #2541 #2573 #2650 #2741 #2883 #2910 #3059 #3268 #3293 #3315 #3382 #3483 #3605 #3748 #3939 #4089 #4427 #4460 #4479 #4738
crates/ui-egui/src/comments.rs 62 #252 #596 #1090 #1108 #1572 #1625 #1775 #1851 #1915 #2021 #2030 #2113 #2137 #2155 #2169 #2197 #2262 #2369 #2518 #2557 #2573 #2643 #2690 #2737 #3003 #3125 #3134 #3315 #3380 #3400 #3402 #3465 #3484 #3545 #3704 #3763 #3787 #3896 #3939 #4090 #4094 #4146 #4148 #4219 #4285 #4290 #4358 #4474 #4539 #4542 #4543 #4597 #4626 #4649 #4673 #4690 #4709 #4719 #4738 #4826 #4834 #4846
crates/ui-egui/src/dialogs.rs 90 #162 #252 #359 #596 #687 #1090 #1128 #1172 #1212 #1636 #1724 #1906 #1915 #1918 #1993 #1998 #2014 #2126 #2152 #2155 #2161 #2187 #2202 #2263 #2291 #2348 #2356 #2376 #2482 #2518 #2573 #2677 #2690 #2769 #2773 #2774 #2776 #2777 #2899 #2923 #3025 #3027 #3028 #3054 #3105 #3288 #3315 #3346 #3380 #3382 #3398 #3483 #3486 #3494 #3575 #3635 #3729 #3757 #3760 #3789 #3876 #3939 #4045 #4135 #4162 #4193 #4208 #4219 #4241 #4264 #4268 #4315 #4325 #4418 #4427 #4497 #4516 #4546 #4560 #4594 #4646 #4650 #4694 #4718 #4738 #4753 #4762 #4816 #4826 #4829
crates/ui-egui/src/panels.rs 64 #182 #252 #438 #596 #1090 #1118 #1412 #1465 #1487 #1490 #1572 #1604 #1915 #1990 #2087 #2125 #2133 #2155 #2238 #2291 #2296 #2298 #2325 #2348 #2482 #2573 #2643 #2690 #2760 #2770 #2775 #2776 #2849 #2869 #2996 #3055 #3106 #3315 #3346 #3347 #3361 #3400 #3465 #3528 #3605 #3641 #3705 #3706 #3760 #3859 #3939 #4072 #4180 #4197 #4219 #4241 #4247 #4333 #4396 #4560 #4672 #4694 #4708 #4738
crates/ui-egui/src/edit_text_ui.rs 56 #252 #438 #596 #827 #1090 #1487 #1572 #1625 #1740 #1851 #1861 #1915 #1925 #1990 #2155 #2233 #2251 #2296 #2372 #2518 #2529 #2573 #2643 #2652 #2811 #2883 #2996 #3003 #3067 #3069 #3222 #3251 #3315 #3394 #3465 #3528 #3641 #3695 #3864 #3891 #3982 #3987 #4063 #4179 #4180 #4190 #4471 #4584 #4620 #4624 #4708 #4709 #4738 #4799 #4806 #4844
crates/ui-egui/src/prepare.rs 21 #252 #687 #1128 #1629 #1915 #1952 #2262 #2292 #2844 #2883 #3003 #3382 #3398 #3605 #4219 #4401 #4627 #4631 #4709 #4738 #4829
crates/ui-egui/src/sign_ui.rs 41 #252 #1090 #1118 #1241 #1412 #1465 #1593 #1615 #1837 #1840 #1896 #1915 #2014 #2087 #2155 #2215 #2453 #2677 #2772 #2808 #3003 #3281 #3315 #3382 #3495 #3500 #3635 #3760 #3876 #3939 #4045 #4193 #4219 #4405 #4427 #4460 #4517 #4666 #4694 #4709 #4738
crates/ui-egui/src/print_ui.rs 50 #252 #344 #687 #1165 #1212 #1241 #1657 #1692 #1723 #1724 #1915 #2025 #2103 #2155 #2161 #2381 #2491 #2492 #2551 #2672 #2673 #2675 #2807 #2865 #2883 #3021 #3065 #3066 #3068 #3251 #3315 #3382 #3494 #3554 #3641 #3939 #3964 #4059 #4191 #4263 #4290 #4435 #4436 #4460 #4623 #4694 #4738 #4759 #4763 #4816
crates/ui-egui/src/combine_grid.rs 9 #596 #1915 #2573 #2643 #2883 #3293 #4089 #4172 #4738
crates/ui-egui/src/fill_sign.rs 28 #252 #437 #596 #1241 #1915 #2087 #2164 #2233 #2369 #2518 #2573 #2635 #2643 #2745 #2883 #3003 #3315 #3545 #3635 #3787 #3876 #4146 #4219 #4460 #4539 #4543 #4709 #4738
crates/ui-egui/src/editing.rs 97 #162 #252 #596 #1119 #1241 #1572 #1629 #1843 #1861 #1990 #2087 #2137 #2155 #2187 #2238 #2348 #2356 #2466 #2467 #2491 #2518 #2546 #2573 #2635 #2690 #2720 #2737 #2772 #2773 #2777 #2808 #2815 #3019 #3027 #3028 #3076 #3125 #3168 #3315 #3394 #3398 #3483 #3484 #3500 #3528 #3544 #3567 #3641 #3710 #3753 #3760 #3785 #3787 #3859 #3971 #4146 #4148 #4179 #4180 #4197 #4219 #4264 #4268 #4327 #4333 #4359 #4460 #4497 #4499 #4523 #4525 #4542 #4543 #4545 #4548 #4557 #4560 #4563 #4573 #4585 #4589 #4626 #4627 #4631 #4634 #4649 #4666 #4672 #4673 #4692 #4693 #4719 #4738 #4746 #4748 #4753 #4838
crates/automation/src/lib.rs 191 #63 #162 #252 #344 #359 #467 #977 #1012 #1059 #1063 #1083 #1090 #1101 #1128 #1159 #1165 #1166 #1172 #1179 #1181 #1267 #1282 #1465 #1476 #1487 #1490 #1629 #1636 #1724 #1785 #1837 #1840 #1851 #1861 #1879 #1896 #1906 #1918 #1925 #1983 #1990 #1991 #1994 #1998 #2014 #2081 #2112 #2113 #2125 #2126 #2137 #2155 #2161 #2202 #2215 #2296 #2319 #2326 #2336 #2340 #2453 #2467 #2471 #2477 #2482 #2633 #2643 #2650 #2672 #2673 #2689 #2690 #2744 #2769 #2770 #2771 #2772 #2773 #2774 #2775 #2776 #2777 #2801 #2815 #2869 #2883 #2885 #2899 #2910 #2923 #2930 #2939 #2996 #3025 #3026 #3027 #3028 #3038 #3054 #3055 #3066 #3067 #3069 #3078 #3105 #3134 #3222 #3251 #3268 #3281 #3288 #3295 #3315 #3331 #3337 #3484 #3486 #3528 #3544 #3628 #3635 #3641 #3667 #3729 #3748 #3757 #3760 #3821 #3859 #3868 #3889 #4045 #4064 #4090 #4166 #4180 #4190 #4193 #4197 #4208 #4219 #4223 #4250 #4264 #4268 #4290 #4304 #4320 #4335 #4342 #4359 #4384 #4396 #4404 #4416 #4434 #4440 #4442 #4456 #4471 #4480 #4494 #4525 #4530 #4545 #4551 #4556 #4557 #4560 #4563 #4564 #4573 #4578 #4585 #4589 #4611 #4632 #4634 #4658 #4692 #4693 #4708 #4738 #4746 #4751 #4753 #4799 #4805 #4806 #4829 #4838
crates/edit/src/text.rs 72 #252 #827 #977 #1012 #1267 #1487 #1775 #1851 #1902 #1925 #1949 #1990 #2155 #2296 #2372 #2466 #2467 #2477 #2529 #2560 #2562 #2575 #2652 #2705 #2778 #2811 #2883 #2928 #2955 #2961 #2968 #2996 #3078 #3283 #3315 #3334 #3358 #3465 #3492 #3528 #3539 #3544 #3619 #3627 #3635 #3641 #3695 #3727 #3820 #3822 #3825 #3843 #3855 #3891 #3981 #4180 #4190 #4197 #4200 #4247 #4456 #4471 #4514 #4634 #4708 #4720 #4738 #4773 #4778 #4779 #4799 #4806
crates/redact/src/interp.rs 17 #162 #252 #1916 #1949 #2539 #2598 #2808 #3500 #3663 #3680 #4092 #4579 #4629 #4643 #4656 #4666 #4724
crates/edit/src/added.rs 34 #252 #827 #1851 #1861 #1918 #1944 #2066 #2116 #2409 #2466 #2560 #2575 #2633 #2811 #2869 #2883 #2928 #3076 #3186 #3315 #3465 #3492 #3528 #3544 #3635 #3696 #3843 #3847 #3886 #4115 #4180 #4219 #4264 #4268
crates/edit/src/text_regions.rs 46 #827 #1012 #1487 #1775 #1851 #1902 #1925 #1949 #2296 #2467 #2477 #2529 #2562 #2575 #2652 #2811 #2928 #2961 #2968 #2996 #3358 #3465 #3492 #3539 #3627 #3642 #3695 #3727 #3820 #3822 #3825 #3836 #3843 #3855 #3981 #4180 #4190 #4471 #4514 #4634 #4708 #4738 #4778 #4799 #4803 #4806
crates/edit/src/lib.rs 45 #252 #827 #977 #1083 #1165 #1861 #1906 #1918 #1925 #1990 #1998 #2155 #2336 #2467 #2482 #2575 #2633 #2801 #2815 #2869 #2883 #3067 #3076 #3222 #3283 #3315 #3334 #3544 #3641 #3705 #3706 #3727 #3743 #3822 #3843 #3855 #3868 #4180 #4197 #4219 #4234 #4247 #4694 #4738 #4778
crates/export/src/lib.rs 12 #252 #1063 #1101 #2389 #2930 #3251 #3641 #3727 #3855 #4580 #4723 #4778
crates/print/src/lib.rs 25 #252 #1165 #1657 #1692 #2025 #2103 #2161 #2491 #2673 #2675 #2865 #2883 #3021 #3066 #3068 #3869 #4059 #4098 #4282 #4596 #4668 #4694 #4763 #4816 #4819
crates/annot/src/lib.rs 37 #151 #252 #467 #1775 #2066 #2137 #2345 #2560 #2745 #2829 #2877 #2883 #2927 #3315 #3400 #3454 #3465 #3484 #3635 #3710 #3787 #4072 #4094 #4146 #4148 #4153 #4219 #4290 #4358 #4365 #4541 #4542 #4543 #4597 #4673 #4690 #4738
crates/sign/src/pdf.rs 22 #63 #252 #622 #1465 #1880 #1916 #1949 #2087 #2677 #2808 #2883 #3315 #3440 #3500 #3635 #3843 #4437 #4478 #4576 #4666 #4694 #4738
crates/cos/src/document.rs 23 #162 #252 #1063 #1143 #1527 #1916 #2014 #2777 #2883 #3028 #3251 #3305 #3415 #3641 #3734 #4013 #4304 #4320 #4335 #4384 #4404 #4738 #4805
crates/render/src/inspect.rs 27 #151 #252 #1527 #2068 #2081 #2097 #2137 #2683 #2745 #2760 #2852 #2877 #2883 #3691 #3757 #4094 #4148 #4290 #4358 #4396 #4474 #4525 #4530 #4538 #4556 #4597 #4611
crates/render/src/text.rs 40 #252 #1901 #1949 #2068 #2075 #2113 #2125 #2431 #2438 #2467 #2483 #2808 #2838 #2883 #2960 #3134 #3191 #3241 #3242 #3243 #3353 #3465 #3500 #3628 #3669 #3676 #3689 #3722 #3740 #3812 #3889 #3892 #4074 #4090 #4191 #4468 #4470 #4514 #4666 #4793
crates/render/src/raster.rs 72 #252 #455 #467 #596 #687 #827 #1063 #1165 #1166 #1260 #1358 #1370 #1567 #1586 #1739 #1785 #1840 #1881 #1883 #1994 #2068 #2112 #2113 #2155 #2176 #2288 #2372 #2466 #2554 #2560 #2573 #2643 #2770 #2877 #2885 #2988 #3034 #3076 #3134 #3191 #3281 #3295 #3315 #3413 #3451 #3454 #3624 #3628 #3636 #3683 #3777 #3857 #3858 #3969 #3981 #4090 #4172 #4191 #4197 #4209 #4235 #4290 #4393 #4396 #4561 #4565 #4567 #4672 #4738 #4749 #4751 #4811
crates/fonts/src/pdf.rs 18 #252 #827 #1949 #2155 #2296 #2372 #2560 #2652 #2883 #2996 #3026 #3076 #3528 #3836 #3843 #3855 #3969 #4044
crates/annot/src/appearance.rs 27 #252 #467 #1775 #2066 #2345 #2560 #2745 #3186 #3315 #3400 #3454 #3465 #3484 #3710 #3787 #3843 #3896 #4072 #4146 #4148 #4153 #4195 #4219 #4365 #4542 #4543 #4690
crates/forms/src/lib.rs 46 #252 #1128 #1629 #1651 #1949 #1952 #2066 #2155 #2466 #2546 #2560 #2761 #2844 #2883 #3062 #3168 #3315 #3398 #3465 #3527 #3710 #3843 #4152 #4219 #4489 #4491 #4496 #4499 #4511 #4516 #4522 #4523 #4532 #4548 #4585 #4589 #4627 #4631 #4693 #4695 #4726 #4751 #4784 #4798 #4809 #4829
crates/forms/src/author.rs 24 #252 #1629 #1949 #1952 #2466 #2546 #2547 #2560 #2761 #2844 #2883 #3315 #3398 #3605 #3710 #3843 #4092 #4219 #4325 #4401 #4627 #4631 #4695 #4829
crates/forms/src/af.rs 10 #252 #1128 #1572 #2546 #2883 #3315 #4325 #4511 #4522 #4738
crates/xfdf/src/lib.rs 13 #252 #1128 #1949 #1952 #2155 #2524 #2883 #3484 #4485 #4491 #4496 #4599 #4774
crates/organize/src/import.rs 8 #252 #1946 #2799 #2883 #2896 #3748 #4595 #4738
crates/automation/src/a11y.rs 58 #252 #344 #433 #572 #977 #1012 #1059 #1063 #1101 #1128 #1159 #1490 #1636 #1785 #1874 #1878 #1994 #2081 #2112 #2319 #2389 #2520 #2547 #2771 #2777 #2930 #3026 #3028 #3105 #3251 #3335 #3527 #3575 #3589 #3641 #3662 #3766 #4250 #4306 #4359 #4527 #4545 #4546 #4547 #4559 #4563 #4564 #4573 #4585 #4589 #4659 #4691 #4692 #4693 #4722 #4738 #4751 #4762
apps/pdfcraft-cli/src/main.rs 36 #596 #1090 #1165 #1166 #1724 #1843 #2161 #2215 #2340 #2379 #2471 #2773 #2774 #2808 #2920 #3025 #3027 #3134 #3268 #3315 #3500 #3635 #3857 #3888 #3956 #4045 #4064 #4090 #4193 #4235 #4290 #4393 #4666 #4701 #4738 #4778
apps/pdfcraft/src/main.rs 58 #182 #596 #784 #829 #904 #977 #1090 #1172 #1241 #1260 #1433 #1593 #1612 #1615 #1616 #1723 #1837 #1856 #1988 #1991 #2005 #2024 #2043 #2087 #2147 #2340 #2471 #2500 #2503 #2541 #2573 #2610 #2652 #2741 #2765 #2807 #2967 #3066 #3100 #3204 #3268 #3281 #3315 #3336 #3381 #3483 #3554 #3635 #3641 #3753 #3870 #3956 #4045 #4193 #4238 #4344 #4681 #4738
crates/js/src/lib.rs 22 #252 #344 #1949 #2081 #2547 #2883 #3168 #3315 #3527 #3575 #3589 #3635 #3843 #4069 #4306 #4527 #4546 #4547 #4691 #4738 #4751 #4762
crates/js/src/formcalc.rs 8 #2883 #3778 #3843 #3941 #4306 #4545 #4547 #4791
crates/js/src/xfa.rs 15 #1949 #2883 #3575 #3589 #3778 #3941 #4069 #4306 #4527 #4545 #4546 #4547 #4691 #4762 #4791
crates/xfa/src/layout.rs 15 #1949 #2783 #2883 #3941 #4149 #4152 #4336 #4522 #4537 #4588 #4598 #4608 #4663 #4664 #4675
crates/xfa/src/data.rs 9 #2783 #2883 #3315 #3635 #4461 #4462 #4522 #4599 #4784
crates/xfa/src/pdf.rs 11 #2783 #3315 #3635 #3843 #4152 #4336 #4476 #4511 #4522 #4537 #4675

After the freeze

  • Rule 3: callers import from the defining module, then the pub(crate) use aliases go.
  • ui-egui canvas.rs document_area (1,845 lines): split into phases, then into canvas/area.
  • ui-egui dialogs.rs fn dialogs (~1,600 lines): one function per dialog, then dialogs/<dialog>.rs.
  • engine commands.rs → cmd/: needs COMMANDS built from per-family slices.
  • Test-only files over 1,500 lines (21): split by topic.
  • Paths in prose that name moved files: the .tsv catalog header comments (i18n/mod.rs) and the ATTRIBUTION.toml / ATTRIBUTION.md icon usage lines (crates/ui-egui/src/icon_data.rs, now widgets/icon_data.rs).

pure-move-check

pure-move-check upstream/main..HEAD: 172 commits, 137 ok, 35 with unmatched lines. Every unmatched line is one of the edits listed above: a path or include-depth fix, a cfg on a moved use line, or a scan test or docs commit. No doc comment (///, //!) or attribute line is lost.

aiongg added 30 commits October 26, 2026 20:51
@aiongg
aiongg merged commit 1dd2737 into storytold:main Oct 27, 2026
9 checks passed
lukashold added a commit to lukashold/pdfcraft that referenced this pull request Oct 27, 2026
Main split several large files into modules and moved ui-egui files into
directories (storytold#4889 and the split series). Each conflict takes main's layout
and carries the branch's changes to where main put their code:
- cos document/: generation-aware reads (try_get_reference, ObjRef-keyed
  /Length cache, full-save comparisons at the live generation, Root lookup
  by whole reference) in objects.rs, reader.rs and state.rs.
- engine edit/ and session/: DeskewPage (enum, label, permission class,
  runner), AddOcrText through ocr_pdf, and the fixed transaction timestamp;
  local_offset is pub(crate) for the clock-switching test.
- automation a11y/ocr.rs, dispatch.rs, documents.rs, lib.rs: scan
  correction arguments and results, ocr_enhance, the Hot Folder tools and
  modules, and the lossless optimization profile.
- render raster/tests.rs: the cancel-flag and hang-guard test fixes.
- export publications.rs imports Item and items from main's layout module.
- parity takes main's evidence plus the branch's, with optimize_ui.rs at its
  new workflows/ path; ATTRIBUTION.md is regenerated.

A scripted check confirmed every line the branch adds still exists after
the merge (the one exception is that remapped parity path).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
EricKaden added a commit to EricKaden/pdfcraft that referenced this pull request Oct 27, 2026
Main's module layout (storytold#4889) moves the sign-tab unit tests to canvas/sign_tab_tests.rs.
EricKaden added a commit to EricKaden/pdfcraft that referenced this pull request Oct 27, 2026
Main's module layout (storytold#4889) moves forms af.rs's tests to af/tests.rs.
Combiler01 added a commit to Combiler01/pdfcraft that referenced this pull request Oct 27, 2026
Lcoding15 pushed a commit to Lcoding15/pdfcraft that referenced this pull request Oct 27, 2026
# Conflicts:
#	crates/ui-egui/src/control.rs
#	crates/ui-egui/src/lib.rs

Main's module layout (storytold#4889) moved what this branch changed in those two
files: the settings to app/prefs.rs, the start-up values and the frame
hook to app.rs, the control channel's command list to control/host.rs.
The shortcuts are applied there now, and custom_shortcuts.rs follows the
other dialogs into dialogs/ (still pdfcraft_ui_egui::custom_shortcuts).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbuSKAS2k5248LGFEapMUR
Lcoding15 pushed a commit to Lcoding15/pdfcraft that referenced this pull request Oct 27, 2026
…-text-styles

# Conflicts:
#	crates/automation/src/lib.rs
#	crates/engine/src/lib.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/src/panels.rs

Main's module layout (storytold#4889) moved what this branch changed: the tools to
automation's dispatch.rs (the levels parser to json.rs), the edit to
engine's edit.rs, edit/labels.rs and edit/run.rs, Document::text_styles
to document.rs, the dialog state to state.rs and app.rs, and the menu
item to panels/right.rs and panels/bookmarks.rs. The dialog module joins
the others in dialogs/. Main's craft-menu bar (storytold#4752) lists its commands
by hand, so bookmark.from_text_styles is added after
bookmark.from_structure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbuSKAS2k5248LGFEapMUR
Lcoding15 pushed a commit to Lcoding15/pdfcraft that referenced this pull request Oct 27, 2026
…arnings

# Conflicts:
#	crates/ui-egui/src/canvas.rs
#	crates/ui-egui/src/control.rs

Main's module layout (storytold#4889) split both files. The warning state stays
in DocView (canvas.rs), its accessors and the raster intake go to
canvas/cache.rs, the note's drawing to canvas/bars.rs, its tests to
canvas/tests.rs, and page_warnings in ui.state to control/host.rs. The
note uses the names main's egui update gave Ui::id and WidgetType
(scope_id, Role).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbuSKAS2k5248LGFEapMUR
Lcoding15 pushed a commit to Lcoding15/pdfcraft that referenced this pull request Oct 27, 2026
…sks-before-save

# Conflicts:
#	crates/ui-egui/src/editing.rs
#	crates/ui-egui/src/lib.rs

Main's module layout (storytold#4889) moved the save path to editing/save.rs and
the start-up values to app.rs; the recovered-path guard and the full
save of a recovered document are applied there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbuSKAS2k5248LGFEapMUR
Lcoding15 pushed a commit to Lcoding15/pdfcraft that referenced this pull request Oct 27, 2026
…fter-zoom

# Conflicts:
#	crates/ui-egui/src/canvas.rs

Main's module layout (storytold#4889) split canvas.rs. The hold on the match stays
with DocView and document_area (canvas.rs); flash_match and the match's
centre go to canvas/find.rs, the page jumps letting go of it to
canvas/navigation.rs, the anchored zoom to canvas/zoom.rs, and the unit
tests to canvas/tests.rs. The wheel event in search_position.rs names
its source, which main's egui update made a field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbuSKAS2k5248LGFEapMUR
Lcoding15 pushed a commit to Lcoding15/pdfcraft that referenced this pull request Oct 28, 2026
…entity-tounicode

# Conflicts:
#	crates/automation/src/lib.rs
#	crates/engine/src/lib.rs
#	crates/ui-egui/src/edit_text_ui.rs

Main's module layout (storytold#4889) moved what this branch changed: ImageEdit
to engine's doc_state.rs, its label and run arm to edit/labels.rs and
edit/run.rs, the image tool's arguments to automation's dispatch.rs, and
the picture input and menu to tools/edit_text_ui/image.rs. There the
double-click reads the pages' PagePointer, as page modules now must,
instead of egui's raw press and position: PagePointer already leaves out
presses that land on a menu or another layer over the group.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbuSKAS2k5248LGFEapMUR
Lcoding15 pushed a commit to Lcoding15/pdfcraft that referenced this pull request Oct 28, 2026
Main moved recovery.rs into persist/ (storytold#4889); the two tests this branch
cites as evidence stayed under the old path, which cargo xtask parity
refuses, failing the gate. The snapshot test is cited too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbuSKAS2k5248LGFEapMUR
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants