Brandon Thomas and Claude Opus 5.5
85a8652de1
Issue #28 : Help ▸ Check for updates, with an opt-in check at start
...
PrintCraft asks GitHub for the latest release and, when it is newer, offers
its release page to download from. Nothing is downloaded or installed
automatically (installing in place needs signed release artifacts).
- ui-egui: updates module (version comparison, background check, dialog);
no network code: the desktop app supplies the source, and without one
(web build, tests) the command opens the releases page.
- desktop: one HTTPS request (ureq over rustls with the OS's trusted roots,
10 s timeout, 1 MiB cap). Only a page under the releases list is offered.
No bundled root list: webpki-roots/webpki-root-certs are CDLA-licensed.
- The check at start is opt-in and silent unless there is a newer version.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-05 01:40:27 -04:00
Brandon Thomas
0772e99cde
Merge pull request #20 from storytold/pr/never-crash-engine
...
Never crash: engine denies the panic lints
2026-10-04 14:48:05 -04:00
Brandon Thomas and Claude Opus 5.5
7f09486004
Never crash: last-resort guard around edits, opens, saves and UI commands
...
`printcraft_engine::guard` wraps `catch_unwind` and returns an error message.
- `Session::apply`: edits run on a copy of the document, so a panic leaves it unchanged and is
reported as an error. A panic while refreshing rolls the edit back.
- `Session::open`, `save_bytes`, `save_full_bytes` and `export_data` report a panic as an
open, write or export error.
- `PrintCraftApp::execute`: a command that panics shows a notice, and the app and its documents
keep running.
- The desktop app installs a panic hook that logs every panic to stderr, with a backtrace when
`RUST_BACKTRACE` is set.
Autosave and crash recovery (`RecoveryStore`) were already in place for anything that escapes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 13:06:24 -04:00
Brandon Thomas and Claude Opus 5.5
58cd6614ea
Never crash: engine denies the panic lints
...
The one `unreachable!` in the scoped refresh becomes a full refresh.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 13:06:23 -04:00
Brandon Thomas and Claude Opus 5.5
ab47bf4b9a
CI: as_chunks instead of constant-size chunks_exact (clippy 1.99 chunks_exact_to_as_chunks)
...
Stable clippy 1.99 denies chunks_exact/chunks_exact_mut with a constant
size (32 sites), which failed the test job on main and every open PR.
Behaviour unchanged; MSRV 1.90 has as_chunks.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-04 12:48:43 -04:00
Brandon Thomas and Claude Opus 5.5
70280a44d0
M10: Export to Word (.docx), HTML and RTF (new export crate with a small zip writer): paragraphs, headings, bold/italic, images, page breaks; doc_export_office tool
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 09:40:46 -04:00
Brandon Thomas and Claude Opus 5.5
4d60af8b1e
M11: PDF/A (new preflight crate): verify PDF/A-2b/3b structural rules, Save as PDF/A (XMP identification, generated sRGB output intent, forbidden actions, annotation flags, interpolation, encryption), PDF/A dialog; pdfa_verify, pdfa_convert tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 07:19:54 -04:00
Brandon Thomas and Claude Opus 5.5
632a21bfcf
M13: Action Wizard: built-in actions (Prepare for Distribution, Optimize Scanned Documents, page numbers, confidential, sanitize), custom actions with 12 step kinds, background runs over files; action_list, action_run tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 05:48:19 -04:00
Brandon Thomas and Claude Opus 5.5
a4bf717c06
M12: Compare files: visual differences (pages rendered and compared region by region), shaded orange; doc_compare visual option
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 05:37:23 -04:00
Brandon Thomas and Claude Opus 5.5
c12b795ce5
M12: Compare files (new compare crate): word-level text differences, Compare panel with shading on the new file, report PDF, differences as comments; doc_compare, doc_compare_report, doc_compare_mark tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 05:31:18 -04:00
Brandon Thomas and Claude Opus 5.5
aa194686f1
M6: Prepare a form detects fields (underscore blanks, rules, boxes, check squares) and names them from their labels; form.detect, form_detect_fields
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 05:21:01 -04:00
Brandon Thomas and Claude Opus 5.5
620ef4fcad
M6: Field Properties ▸ Actions tab (six triggers, JavaScript/link/reset/menu/page/show-hide/submit actions); form_actions, form_set_actions tools; signing UI tests get their own temp folders
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 05:08:28 -04:00
Brandon Thomas and Claude Opus 5.5
6ff0bf8f64
M6: Merge data files into spreadsheet (FDF, XFDF, filled PDF forms → CSV); form_merge_data tool
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 04:52:59 -04:00
Brandon Thomas and Claude Opus 5.5
06f8d73ec7
M6: Acrobat JavaScript: sandboxed boa engine with the forms object model (printcraft-js); custom keystroke/validate/calculate/format scripts, button scripts, document JavaScripts, JavaScript console (⌘J), Preferences ▸ Enable JavaScript; js_run, js_document_scripts, js_set_document_script, form_set_script, js_enabled tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 04:41:47 -04:00
Brandon Thomas and Claude Opus 5.5
a7ffee01b5
M10: Recognize text in multiple files (ocr.recognize_batch, ocr_recognize_files): searchable copies written to a folder in the background
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 03:54:11 -04:00
Brandon Thomas and Claude Opus 5.5
b87cf39168
M10: Scan & OCR ▸ Recognize text: ocrs-based recognition (models fetched by cargo xtask models), invisible searchable text layer, Recognize Text dialog with background progress; ocr_recognize / ocr_status tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 03:47:58 -04:00
Brandon Thomas and Claude Opus 5.5
385313e0bf
M7: Format existing text: font family, bold/italic, size, colour and alignment for a paragraph (Format text panel live while editing; text_edit formatting arguments); centred and right-aligned paragraphs are detected
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 03:07:43 -04:00
Brandon Thomas and Claude Opus 5.5
c2f53d5595
M7: Edit text & images: select existing page images to move, resize, rotate, flip, replace, save or delete; page_images, image_edit, image_save tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 02:55:08 -04:00
Brandon Thomas and Claude Opus 5.5
695e460bbb
M7: Edit text works on paragraphs: detection, in-place editing with rewrap to the box, original spacing, colour and font (or Helvetica); text_paragraphs and text_edit paragraph
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 02:42:18 -04:00
Brandon Thomas and Claude Opus 5.5
fb6208b089
M7: Edit text: click a line of existing text and retype it in place, reusing its font when it can show the text, else Helvetica; text_lines / text_edit tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-03 02:25:06 -04:00
Brandon Thomas and Claude Opus 5.5
01d0dc67ba
M5: Fill & Sign typed signatures and initials (Type or Draw; script-font outlines drawn as filled paths); fill_sign_add signature/initials
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 09:59:28 -04:00
Brandon Thomas and Claude Opus 5.5
1d8b1ecb02
M1/M4: Hybrid-reference files: /XRefStm entries replace the table's free entries; signed documents refuse edits that would force a full rewrite
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 07:45:20 -04:00
Brandon Thomas and Claude Opus 5.5
763cd70ece
M11: PDF Optimizer ▸ Audit space usage: bytes and share of the file per kind of content; doc_audit_space
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 07:37:48 -04:00
Brandon Thomas and Claude Opus 5.5
55275cd935
M3: Advanced Search panel (⇧⌘F): every match with its context, by page; click to go; shares the find bar's search
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 05:40:22 -04:00
Brandon Thomas and Claude Opus 5.5
e9322b597b
M12: Add alternate text: figures one by one with a preview, alternate text or Decorative (content becomes an artifact); accessibility_figures / accessibility_set_alt
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 05:36:39 -04:00
Brandon Thomas and Claude Opus 5.5
e8bc0db811
M5: Custom stamps: create from a PDF page or an image under a category and name, kept in the stamp library, placed at natural size; stamp_custom tool
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 05:24:28 -04:00
Brandon Thomas and Claude Opus 5.5
d5c659812c
M6: Image fields: Prepare a form ▸ Image field places an icon-only button that asks for a picture when clicked (buttonImportIcon recognised natively); form_set_image
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 05:16:42 -04:00
Brandon Thomas and Claude Opus 5.5
8486a35207
M4: Combine files lists the files first: reorder, remove, add more, and choose each file's pages (doc_combine pages)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 05:11:25 -04:00
Brandon Thomas and Claude Opus 5.5
0b628d5515
M12: Accessibility Checker: new a11y crate with Acrobat's 32 rules in 7 categories, HTML report, fixes (language, title, tab order); options dialog and results panel (Fix, Skip Rule, Explain, Check Again, Show Report); accessibility_check / _report / _fix tools
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 05:05:56 -04:00
Brandon Thomas and Claude Opus 5.5
1e69a92c41
M10: Export a PDF ▸ Export all images: JPEGs unchanged, other images as PNG with alpha; skipped images reported; doc_export_all_images
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:47:45 -04:00
Brandon Thomas and Claude Opus 5.5
19b5b1d6d2
M1: List document revisions and open an earlier one (Document Properties ▸ Advanced; doc_revisions, doc_open_revision); PDF version reads 1.7, not 17
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:40:25 -04:00
Brandon Thomas and Claude Opus 5.5
6a9dd32ef9
M3: Tabs and the window title show the document title when Initial View asks for it (DisplayDocTitle); parity for setting the document language
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:34:26 -04:00
Brandon Thomas and Claude Opus 5.5
d26821fdcd
M3: View ▸ Zoom ▸ Fit visible (⌘3): zoom so the current page's visible content spans the window
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:32:03 -04:00
Brandon Thomas and Claude Opus 5.5
aac0db461d
M6: Duplicate a field across pages (right-click ▸ Duplicate…, all pages or a range): widgets of the same field share one value; a field that is its own widget is split into a field and a widget kid. Prepare mode gets a field context menu (Properties, Duplicate, Delete)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:20:26 -04:00
Brandon Thomas and Claude Opus 5.5
e0d954f10a
M5: Eraser for drawings (Draw flyout): rubs out the parts of ink strokes it passes over, splitting strokes and deleting emptied drawings, in one undo step
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:12:36 -04:00
Brandon Thomas and Claude Opus 5.5
968d26a41e
M5: Attach a file as a comment (push pin, paperclip, graph or tag icon in PrintCraft's own drawings; the file is embedded and listed under Attachments); comment_add type attachment
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:09:44 -04:00
Brandon Thomas and Claude Opus 5.5
bf58d1f6bf
M5: Area highlight (drag the highlighter off text) and Replace Text (strikeout plus a grouped caret holding the replacement; Highlight flyout, comment_add type replace)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:05:25 -04:00
Brandon Thomas and Claude Opus 5.5
e61f75d69a
M3: Marquee zoom (drag to fill the window with an area, click to zoom in) and Take a Snapshot (copies an area at the current zoom to the clipboard as an image)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 04:00:12 -04:00
Brandon Thomas and Claude Opus 5.5
7515170103
M4: Cut, copy and paste pages in Organize Pages (⌘C/⌘X/⌘V and a thumbnail context menu; paste after the selection, across documents; the last page can't be cut)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:57:11 -04:00
Brandon Thomas and Claude Opus 5.5
c6d82ab62a
M4: Initial View: Document Properties ▸ Initial View (navigation panel, page layout, magnification, open-to page, window and interface options) and Advanced ▸ reading options (binding, language), honoured when a document opens; script open actions are kept; Bookmarks panel options expand all, expand top-level or collapse all; doc_initial_view tool (85 tools)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:50:56 -04:00
Brandon Thomas and Claude Opus 5.5
05195a2af6
M7: Backgrounds and watermarks from a file: an image or a page of a PDF (imported as a form XObject that draws upright, inherited resources included), scaled relative to the page, with rotation, opacity and placement; Source ▸ File in the dialogs; doc_watermark / doc_background take file, file_page and scale
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:44:22 -04:00
Brandon Thomas and Claude Opus 5.5
d97711302c
M6: Order tabs manually: the Fields panel lists fields in tab order and, while preparing a form, moves a field earlier or later on its page (widgets reordered in /Annots, other annotations keep their places, page switches to annotation order); form_tab_order takes field + move
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:37:13 -04:00
Brandon Thomas and Claude Opus 5.5
17e3eb255d
M8: Redaction Properties: overlay text font (Helvetica, Times, Courier), size or auto-size, colour, alignment and repeat, written as /DA, /Q and /Repeat and drawn on apply; overlay fonts are added to the page only when used
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:33:01 -04:00
Brandon Thomas and Claude Opus 5.5
dfae15ec67
M6: Field Properties ▸ Options for every field type: text alignment, default value, scroll long text, rich text, password, file selection, spell check, comb of characters (with its rules); choice defaults, sort items (the list is reordered), custom text, multiple selection, commit immediately; check box / radio checked by default and radios in unison. Reset form restores defaults. form_set_props takes align, default and flags
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:28:44 -04:00
Brandon Thomas and Claude Opus 5.5
9fcece8afb
M11.1: PDF Optimizer: new optimize crate measures each image's effective resolution where pages draw it and resamples (bicubic) and recompresses (JPEG quality steps or ZIP) colour and grayscale images, soft masks with them, only when smaller; discards thumbnails, alternate images, tags and print settings; Flate for unencoded streams. Reduce File Size now downsamples like Acrobat (150 ppi above 225, JPEG medium); Optimize PDF dialog (Images, Discard Objects, Discard User Data, Clean Up) composes Remove Hidden Information; doc_optimize tool (84 tools)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:18:47 -04:00
Brandon Thomas and Claude Opus 5.5
68ea2a068a
M9 perf: signature revalidation after edits reuses the signed ranges' digests and the parsed signed revision (DigestCache per document) and no longer scans the file for revision markers: a comment edit on a 120 MB signed file takes 6 ms instead of 84 ms; cos exposes xref entries so unchanged objects are skipped when diffing revisions
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 03:08:51 -04:00
Brandon Thomas and Claude Opus 5.5
bb1d9a0d8a
M9.6: Use a certificate in the app: Digitally sign / Certify (draw a rectangle, or click an empty signature field) and Certify (invisible); Sign with a Digital ID, Configure New Digital ID (create a self-signed ID or use a .p12/.pfx) and Sign as dialogs with appearance preview, reason, location and certification permissions; signing saves; Signatures panel (status, details, trust, view signed version, export certificate); signature message bar; digital IDs and trusted certificates persist. Fix: locate signature placeholders by their unique ByteRange marker (full saves renumber objects)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 02:59:19 -04:00
Brandon Thomas and Claude Opus 5.5
64e900f270
M9.5: Signatures in the engine and for agents: every document carries its validated signature fields (revalidated on edits and against the session's trusted certificates); Session::sign/mark_signed (signing saves; history before signing is dropped); full rewrites of signed documents are refused; certificates load from PEM/DER; sign_list, sign_id_create, sign_document and sign_trust tools (83 tools)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 02:50:12 -04:00
Brandon Thomas and Claude Opus 5.5
fb3eca5dcc
M5/M10: Comments panel filters by colour (named swatches) and checkmark; Create PDF from clipboard (image at its size, or text)
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 02:14:50 -04:00
Brandon Thomas and Claude Opus 5.5
7616535dd1
M5: Polygon, Connected lines, Cloud (cloudy border appearance), Callout (leader line with arrow, /RD text box, resize re-attaches the leader) and Insert text (caret) comments: annot shapes and appearances, click-to-place-points and drag-to-callout tools in the Comment/Highlight/Draw flyouts, /IT carried to the comment list (Callout, Cloud labels), comment_add types polygon/cloud/polyline/callout/caret
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-02 02:11:52 -04:00