Repository navigation
refactor: shared module layout (craft-contrib#20) - #4889
Merged
Merged
Conversation
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
12 of 13 tasks
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Part of the suite-wide module layout (storytold/craft-contrib#20): large files split by concern,
mod.rsfiles converted, inline test modules moved to their own files, and the flatcrates/ui-egui/srcgrouped into directories. Pure moves only: no behaviour change and no item renames. Every public and crate path stays the same throughpub use/pub(crate) usealiases 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).crates/render/src/raster.rsraster/tests.rs(7,037)crates/ui-egui/src/canvas.rscanvas/tests.rs(2,034)crates/render/src/inspect.rsinspect/tests.rs(1,872)crates/ui-egui/src/lib.rsapp/files.rs(682)crates/edit/src/text.rstext/rewrite.rs(857)crates/cos/src/document.rsdocument/tests.rs(1,287)crates/render/src/text.rstext/tests.rs(1,761)crates/automation/src/lib.rsdispatch.rs(784)crates/ui-egui/src/control.rscontrol/lifecycle_tests.rs(906)crates/ui-egui/src/combine_ui.rs(original replaced bycrates/ui-egui/src/workflows/combine_ui.rs)workflows/combine_ui/view.rs(641)crates/annot/src/lib.rsmodify.rs(825)crates/js/src/formcalc.rsformcalc/eval.rs(618)crates/ui-egui/src/comments.rs(original replaced bycrates/ui-egui/src/tools/comments.rs)tools/comments/input.rs(586)crates/sign/src/pdf.rspdf/validate.rs(649)crates/xfa/src/layout.rslayout/measure.rs(366)crates/ui-egui/src/panels.rspanels/right.rs(711)crates/forms/src/af.rsaf/format.rs(533)crates/xfa/src/data.rsdata/merge.rs(399)crates/ui-egui/src/edit_text_ui.rs(original replaced bycrates/ui-egui/src/tools/edit_text_ui.rs)tools/edit_text_ui/image.rs(637)crates/ui-egui/src/editing.rsediting/tests.rs(345)crates/forms/src/lib.rsvalues.rs(638)crates/export/src/lib.rstests.rs(771)crates/ui-egui/src/prepare.rs(original replaced bycrates/ui-egui/src/tools/prepare.rs)tools/prepare/tabs.rs(386)crates/js/src/lib.rsformat.rs(620)crates/ui-egui/src/sign_ui.rs(original replaced bycrates/ui-egui/src/tools/sign_ui.rs)tools/sign_ui/dialog.rs(486)crates/forms/src/author.rsauthor/look.rs(473)crates/ui-egui/src/combine_grid.rs(original replaced bycrates/ui-egui/src/workflows/combine_grid.rs)workflows/combine_grid/card.rs(421)crates/js/src/xfa.rsxfa/globals.rs(362)crates/xfdf/src/lib.rsxfdf.rs(536)crates/engine/src/session.rssession/editing.rs(521)crates/engine/src/edit.rsedit/run.rs(696)crates/ui-egui/src/print_ui.rs(original replaced bycrates/ui-egui/src/workflows/print_ui.rs)workflows/print_ui/body.rs(545)crates/organize/src/import.rsimport/combine.rs(307)crates/xfa/src/pdf.rspdf/strip.rs(282)crates/redact/src/interp.rsinterp/prune.rs(354)crates/edit/src/added.rsadded/draw.rs(383)apps/pdfcraft-cli/src/main.rscommands.rs(413)crates/automation/src/a11y.rsa11y/documents.rs(219)crates/edit/src/text_regions.rstext_regions/styled.rs(787)crates/edit/src/lib.rsplace.rs(424)crates/print/src/lib.rssheets.rs(350)Also: 11 test modules moved out to
tests.rsfiles, 1mod.rsfile renamed.crates/render/src/raster.rs(8,333 → 508 + 2 files)raster/tests.rsraster/pool.rscrates/ui-egui/src/canvas.rs(8,036 → 2,664 + 10 files)canvas/tests.rscanvas/cache.rscanvas/organize.rscanvas/bars.rscanvas/navigation.rscanvas/zoom.rscanvas/find.rscanvas/selection.rscanvas/area.rscanvas/xform.rscrates/render/src/inspect.rs(4,369 → 89 + 6 files)inspect/tests.rsinspect/navigation.rsinspect/model.rsinspect/annotations.rsinspect/resources.rsinspect/core.rscrates/ui-egui/src/lib.rs(3,917 → 614 + 13 files)app/files.rsapp.rsstate.rsapp/control.rsapp/prefs.rsapp/commands.rsapp/frame.rsapp/input.rsapp/links.rsapp/keys.rsapp/clipboard.rsapp/window.rshooks.rscrates/edit/src/text.rs(3,667 → 281 + 6 files)text/rewrite.rstext/interp.rstext/fallback.rstext/lines.rstext/blocks.rstext/editor.rscrates/cos/src/document.rs(3,621 → 77 + 6 files)document/tests.rsdocument/reader.rsdocument/objects.rsdocument/open.rsdocument/xref.rsdocument/state.rscrates/render/src/text.rs(3,540 → 391 + 4 files)text/tests.rstext/device.rstext/order.rstext/layout.rscrates/automation/src/lib.rs(3,411 → 170 + 8 files)dispatch.rsdocuments.rstests.rsassemble.rspages.rsjson.rspaths.rserror.rscrates/ui-egui/src/control.rs(3,296 → 607 + 7 files)control/lifecycle_tests.rscontrol/transport.rscontrol/requests.rscontrol/screenshot.rscontrol/host.rscontrol/pending.rscontrol/plugin.rscrates/ui-egui/src/combine_ui.rs(2,828 → 163 + 7 files)workflows/combine_ui/view.rsworkflows/combine_ui/files.rsworkflows/combine_ui/session.rsworkflows/combine_ui/table.rsworkflows/combine_ui/parts.rsworkflows/combine_ui/actions.rsworkflows/combine_ui/tests.rscrates/annot/src/lib.rs(2,687 → 73 + 6 files)modify.rstypes.rscreate.rsinfo.rslookup.rsdraw.rscrates/js/src/formcalc.rs(2,679 → 230 + 9 files)formcalc/eval.rsformcalc/builtins.rsformcalc/parser.rsformcalc/access.rsformcalc/dates.rsformcalc/lexer.rsformcalc/value.rsformcalc/words.rsformcalc/ast.rscrates/ui-egui/src/comments.rs(2,675 → 394 + 7 files)tools/comments/input.rstools/comments/tests.rstools/comments/menu.rstools/comments/state.rstools/comments/paint.rstools/comments/geometry.rstools/comments/composer.rscrates/sign/src/pdf.rs(2,513 → 107 + 5 files)pdf/validate.rspdf/signing.rspdf/changes.rspdf/listing.rspdf/types.rscrates/xfa/src/layout.rs(2,132 → 230 + 7 files)layout/measure.rslayout/draw.rslayout/flow.rslayout/field.rslayout/pages.rslayout/common.rslayout/items.rscrates/ui-egui/src/panels.rs(2,086 → 50 + 5 files)panels/right.rspanels/edit.rspanels/bookmarks.rspanels/pages.rspanels/tools.rscrates/forms/src/af.rs(2,074 → 394 + 4 files)af/format.rsaf/calc.rsaf/script.rsaf/tests.rscrates/xfa/src/data.rs(2,003 → 154 + 8 files)data/merge.rsdata/import.rsdata/write.rsdata/passwords.rsdata/dates.rsdata/values.rsdata/build.rsdata/path.rscrates/ui-egui/src/edit_text_ui.rs(1,998 → 913 + 3 files)tools/edit_text_ui/image.rstools/edit_text_ui/layout.rstools/edit_text_ui/background.rscrates/ui-egui/src/editing.rs(1,870 → 1,022 + 3 files)editing/tests.rsediting/save.rsediting/close.rscrates/forms/src/lib.rs(1,858 → 293 + 4 files)values.rsread.rsappearances.rstab_order.rscrates/export/src/lib.rs(1,850 → 41 + 5 files)tests.rslayout.rsas_docx.rsas_rtf.rsas_html.rscrates/ui-egui/src/prepare.rs(1,758 → 759 + 3 files)tools/prepare/tabs.rstools/prepare/properties.rstools/prepare/draft.rscrates/js/src/lib.rs(1,749 → 64 + 6 files)format.rsrun.rsglobals.rsdocument.rsmodel.rshost.rscrates/ui-egui/src/sign_ui.rs(1,730 → 899 + 2 files)tools/sign_ui/dialog.rstools/sign_ui/panel.rscrates/forms/src/author.rs(1,711 → 126 + 4 files)author/look.rsauthor/edit.rsauthor/tree.rsauthor/lifecycle.rscrates/ui-egui/src/combine_grid.rs(1,710 → 575 + 3 files)workflows/combine_grid/card.rsworkflows/combine_grid/thumbs.rsworkflows/combine_grid/tests.rscrates/js/src/xfa.rs(1,655 → 36 + 6 files)xfa/globals.rsxfa/nodes.rsxfa/host.rsxfa/instances.rsxfa/model.rsxfa/run.rscrates/xfdf/src/lib.rs(1,613 → 324 + 3 files)xfdf.rsfdf.rscommon.rscrates/engine/src/session.rs(1,590 → 48 + 4 files)session/editing.rssession/files.rssession/save.rssession/view.rscrates/engine/src/edit.rs(1,577 → 553 + 2 files)edit/run.rsedit/labels.rscrates/ui-egui/src/print_ui.rs(1,560 → 786 + 2 files)workflows/print_ui/body.rsworkflows/print_ui/draft.rscrates/organize/src/import.rs(1,554 → 525 + 4 files)import/combine.rsimport/fields.rsimport/carry.rsimport/copy.rscrates/xfa/src/pdf.rs(1,433 → 963 + 2 files)pdf/strip.rspdf/common.rscrates/redact/src/interp.rs(1,430 → 831 + 2 files)interp/prune.rsinterp/layers.rscrates/edit/src/added.rs(1,295 → 71 + 4 files)added/draw.rsadded/layout.rsadded/store.rsadded/types.rsapps/pdfcraft-cli/src/main.rs(1,235 → 197 + 5 files)commands.rscheck.rsrun.rsoptions.rsui.rscrates/automation/src/a11y.rs(1,118 → 599 + 3 files)a11y/documents.rsa11y/form_tools.rsa11y/ocr.rscrates/edit/src/text_regions.rs(1,106 → 11 + 2 files)text_regions/styled.rstext_regions/grouping.rscrates/edit/src/lib.rs(1,054 → 77 + 3 files)place.rsmarks.rsapply.rscrates/print/src/lib.rs(1,052 → 45 + 4 files)sheets.rsimposition.rssettings.rserror.rsTotals: 41 files split, 81,956 lines moved out of them, 199 new files.
Also:
mod testsmodules →<file>/tests.rs;control.rs'slifecycle_tests→control/lifecycle_tests.rs.i18n/mod.rs→i18n.rs;xtask/src/demo_pdf/mod.rs→demo_pdf.rs.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…) andpersist/(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), neverpub),useandmodlines,impl X {wrappers, the old-path aliases,cfgattributes onuselines whose items are gated to native or to wasm, and relativeinclude_str!/include_bytes!depths (the 34 i18n.tsvcatalogs; fonts, render and ui-egui test fixtures;icon_data.rs's 190 icons; the macOSInfo.plist.in).Own commits:
test: scan source directories recursivelystyle(ui-egui): format i18n.rs after the include path updatetest(pdfcraft): cut main.rs at the moved test module's declarationtest(ui-egui): skip test files in the page pointer scandocs(parity): point evidence at the tests' new filesdocs: name i18n.rs and demo_pdf.rs after the mod.rs movestest(ui-egui): point the page-pointer source scan at canvas/*.rstest(ui-egui): list edit_text_ui/image.rs among the page modulesdocs(parity): point evidence at combine_ui's moved teststest(automation): skip use lines in the file access scandocs(parity): point evidence at panels' moved teststest(ui-egui): list the comments/ modules in PAGE_MODULESdocs(parity): point evidence at inspect's moved teststest(sign): read the split pdf modules in wordings_are_completetest(ui-egui): list fill_sign/scan.rs among the page modulestest(ui-egui): rerun the fontconfig tests by their platform:: pathdocs(parity): point evidence at the ui-egui files' new directoriestest(ui-egui): name the page modules by their new directoriesdocs: name the ui-egui files by their new directoriestest(automation): end the file access scan at the test module, not at a cfg(test) usestyle: cargo fmt on moved filesLog targets
The default filter (
warn,pdfcraft*=info) is unaffected. Targets that change: ui-eguicanvas::cache,app::frame,menus::tab_context,persist::recovery,platform::{macos_association, portable, system_fonts, system_fonts::fontconfig}; renderraster::pool.Builds
Clippy
-D warningswith--all-targetsfor the workspace on Linux and forx86_64-pc-windows-msvc(sign, engine, automation, ui-egui and both apps throughcargo xwin, the rest with plaincargo check), and the wasm32 check. On macOS (aarch64-apple-darwin), every crate except sign, engine, automation, ui-egui and both apps: their dependenciesringandaws-lc-syshave 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 themacosandlinuxcfgs 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.
crates/ui-egui/src/canvas.rsfind.rs,selection.rs,cache.rs,zoom.rs,navigation.rs,xform.rs,organize.rs,bars.rs,area.rs,canvas/tests.rscrates/ui-egui/src/lib.rsapp.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.rscrates/ui-egui/src/control.rsplugin.rs,requests.rs,screenshot.rs,pending.rs,host.rs,transport.rscrates/ui-egui/src/combine_ui.rsfiles.rs,view.rs,table.rs,parts.rs,session.rs,actions.rs,combine_ui/tests.rscrates/ui-egui/src/comments.rsstate.rs,geometry.rs,input.rs,paint.rs,composer.rs,menu.rs,comments/tests.rscrates/ui-egui/src/dialogs.rsprompts.rscrates/ui-egui/src/panels.rstools.rs,edit.rs,right.rs,bookmarks.rs,pages.rscrates/ui-egui/src/edit_text_ui.rsbackground.rs,layout.rs,image.rscrates/ui-egui/src/prepare.rsdraft.rs,properties.rs,tabs.rscrates/ui-egui/src/sign_ui.rsdialog.rs,panel.rscrates/ui-egui/src/print_ui.rsdraft.rs,body.rscrates/ui-egui/src/combine_grid.rsthumbs.rs,card.rs,combine_grid/tests.rscrates/ui-egui/src/fill_sign.rsscan.rscrates/ui-egui/src/editing.rssave.rs,close.rs,editing/tests.rscrates/engine/src/lib.rsdoc_state (new) and existing modules.rs,tests.rscrates/automation/src/lib.rserror.rs,dispatch.rs,documents.rs,assemble.rs,pages.rs,paths.rs,json.rs,tests.rscrates/edit/src/text.rseditor.rs,interp.rs,blocks.rs,lines.rs,rewrite.rs,fallback.rscrates/redact/src/interp.rslayers.rs,prune.rscrates/edit/src/added.rstypes.rs,layout.rs,draw.rs,store.rscrates/edit/src/text_regions.rsstyled.rs,grouping.rscrates/edit/src/lib.rsmarks.rs,place.rs,apply.rscrates/export/src/lib.rslayout.rs,as_html.rs,as_docx.rs,as_rtf.rs,tests.rscrates/print/src/lib.rserror.rs,settings.rs,sheets.rs,imposition.rscrates/annot/src/lib.rstypes.rs,lookup.rs,create.rs,modify.rs,draw.rs,info.rscrates/sign/src/pdf.rslisting.rs,types.rs,validate.rs,changes.rs,signing.rscrates/cos/src/document.rsstate.rs,xref.rs,open.rs,objects.rs,reader.rs,document/tests.rscrates/render/src/inspect.rscore.rs,annotations.rs,resources.rs,navigation.rs,model.rs,inspect/tests.rscrates/render/src/text.rsdevice.rs,layout.rs,order.rs,text/tests.rscrates/render/src/raster.rspool.rs,raster/tests.rscrates/fonts/src/pdf.rspdf/tests.rscrates/annot/src/appearance.rssymbols.rscrates/forms/src/lib.rsread.rs,tab_order.rs,values.rs,appearances.rscrates/forms/src/author.rstree.rs,look.rs,edit.rs,lifecycle.rscrates/forms/src/af.rsscript.rs,calc.rs,format.rs,af/tests.rscrates/xfdf/src/lib.rsutil.rs,xfdf.rs,fdf.rscrates/organize/src/import.rscopy.rs,fields.rs,combine.rs,carry.rscrates/automation/src/a11y.rsocr.rs,documents.rs,forms.rsapps/pdfcraft-cli/src/main.rsoptions.rs,commands.rs,check.rs,run.rs,ui.rsapps/pdfcraft/src/main.rstests.rscrates/js/src/lib.rsmodel.rs,host.rs,document.rs,util.rs,globals.rs,run.rscrates/js/src/formcalc.rslexer.rs,ast.rs,parser.rs,value.rs,access.rs,eval.rs,dates.rs,words.rs,builtins.rscrates/js/src/xfa.rsmodel.rs,host.rs,nodes.rs,instances.rs,globals.rs,run.rscrates/xfa/src/layout.rsitems.rs,helpers.rs,pages.rs,flow.rs,measure.rs,draw.rs,field.rscrates/xfa/src/data.rspath.rs,dates.rs,values.rs,build.rs,merge.rs,write.rs,import.rs,passwords.rscrates/xfa/src/pdf.rshelpers.rs,strip.rscrates/ui-egui/src/canvas.rscrates/ui-egui/src/lib.rscrates/ui-egui/src/control.rscrates/ui-egui/src/combine_ui.rscrates/ui-egui/src/comments.rscrates/ui-egui/src/dialogs.rscrates/ui-egui/src/panels.rscrates/ui-egui/src/edit_text_ui.rscrates/ui-egui/src/prepare.rscrates/ui-egui/src/sign_ui.rscrates/ui-egui/src/print_ui.rscrates/ui-egui/src/combine_grid.rscrates/ui-egui/src/fill_sign.rscrates/ui-egui/src/editing.rscrates/automation/src/lib.rscrates/edit/src/text.rscrates/redact/src/interp.rscrates/edit/src/added.rscrates/edit/src/text_regions.rscrates/edit/src/lib.rscrates/export/src/lib.rscrates/print/src/lib.rscrates/annot/src/lib.rscrates/sign/src/pdf.rscrates/cos/src/document.rscrates/render/src/inspect.rscrates/render/src/text.rscrates/render/src/raster.rscrates/fonts/src/pdf.rscrates/annot/src/appearance.rscrates/forms/src/lib.rscrates/forms/src/author.rscrates/forms/src/af.rscrates/xfdf/src/lib.rscrates/organize/src/import.rscrates/automation/src/a11y.rsapps/pdfcraft-cli/src/main.rsapps/pdfcraft/src/main.rscrates/js/src/lib.rscrates/js/src/formcalc.rscrates/js/src/xfa.rscrates/xfa/src/layout.rscrates/xfa/src/data.rscrates/xfa/src/pdf.rsAfter the freeze
pub(crate) usealiases go.canvas.rsdocument_area(1,845 lines): split into phases, then intocanvas/area.dialogs.rsfn dialogs(~1,600 lines): one function per dialog, thendialogs/<dialog>.rs.commands.rs→cmd/: needsCOMMANDSbuilt from per-family slices..tsvcatalog header comments (i18n/mod.rs) and theATTRIBUTION.toml/ATTRIBUTION.mdicon usage lines (crates/ui-egui/src/icon_data.rs, nowwidgets/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, acfgon a moveduseline, or a scan test or docs commit. No doc comment (///,//!) or attribute line is lost.