PlutarchPages is upstream PdfCraft plus the changes below. Fork changes describes them for users; this file is for whoever merges upstream next.
Last upstream merge: f137a289 (31 October 2026).
Upstream's tests for these were changed to assert the fork's behaviour. Keep them that way.
- Redaction refuses when content under the marks is also used where the marks don't reach.
Upstream goes ahead. Tests in
crates/redactandcrates/automation. - Copy-restricted documents refuse text extraction through the tools, including
text_find. - An empty password never skips the Document Open prompt or lifts restrictions.
pdfcraft-cli check-onechecks before it renders. - CSV exports write formula-like cells as text, and import doesn't strip the apostrophe, so a neutralised cell doesn't round-trip back into a formula.
- The PDF-XChange-style converters, speech, bookmark, optimiser, colour and Excel features.
- Mermaid colour scheme:
crates/ui-egui/src/theme.rsholds every interface colour, andchrome_literals_stay_in_the_themefails when a merge brings a colour literal back. The catalogue hues incrates/engine/src/catalog.rs, the app icon andUPDATE_APP's accent follow it. The test only sees hexadecimal literals: named colours such asColor32::WHITEon chrome need searching by hand when upstream moves or adds a control. - Brand: no ArtCraft name or logos (
AGENTS.mdsection 1.2). Upstream merges add them back, in new files too, so search for them after every merge. - Update check and repository links point at EquityBot.
new_updaterincrates/ui-egui/src/platform/updates.rsignores ArtCraft Launcher's version pins, which are keyed by thepdfcraftid. Don't giveUPDATE_APPanother id to avoid them: it also names the packages and binaries the updater installs. - Update results:
crates/ui-egui/src/platform/updates.rskeeps the fork's themed, translated dialog overcraft_update'sCheckResultDialog, which is English only with its own colours. Upstream merges delete its catalogue rows and changecrates/ui-egui/tests/it/updates.rs, so restore both. - Flatpak manifests don't carry upstream's
--filesystem=xdg-data/ArtCraft/versions:rogrant, which lets an upstream launcher's version choices reach the app. - Shared CI: workflows from
storytold/craft-common-actionsare pinned to a commit, and SonarCloud receives onlySONAR_TOKEN. Upstream merges restore@mainandsecrets: inherit, so reapply both. - Releases:
.github/workflows/release.ymlis this fork's own and uses nothing fromcraft-common-actions. It builds unsigned packages, tests an installed MSI and an upgrade from v0.15.0 withpackaging/windows/test-install.ps1, and only drafts the release. Keep it over upstream's. Its FreeBSD, riscv64, web and Flatpak jobs are ported from that repository'srelease.ymlat2b3fb9dc, without the FreeBSD Cargo cache action, andpackaging/linux/arch-package.shreplaces itsarch-packageaction. All are first included in the release after v0.15.0, and theassetsjob fails unless all 30 packages are there. - Linux identity: the Flatpak's id is
io.github.EquityBot.PlutarchPagesand the Arch package isplutarchpages, so neither updates or replaces upstream's. If a merge brings backpackaging/linux/flatpak/ai.storyteller.pdfcraft*.yml, move its changes across and delete it. The other packages still useai.storyteller.pdfcraftand thepdfcraftpackage name, which v0.15.0 shipped, so they can't be installed alongside upstream's either. packaging/linux/nfpm.yamltakes its glibc floors frompackage.sh, because riscv64 builds on Ubuntu 24.04 and needs 2.39. Upstream hard-codes 2.35, which understates it there.- Windows registration:
PlutarchPages.*names and its own context-menu component GUIDs, so it doesn't share registry state with an upstream install.pdfcraft.exestays, soApp Paths\pdfcraft.exeandApplications\pdfcraft.exeare still shared: installing it alongside upstream isn't supported. - CodeQL:
.github/codeql/codeql-config.ymlexcludes tests andvendor/. - Windows printing with Type 3 fonts (upstream #2684, from upstream PR #3021 as it stood at
ed6252a6): those pages go as pictures. Unlike the PR, a printer's job is built on its worker (Session::print_source) and the dialog's check runs in the background, because rendering on the UI thread froze the app. If upstream merges its version, keep the worker.
git merge --no-ffupstream'smainon aryan/branch. Never rewrite history.- Search for ArtCraft names (packaging too), trademark-licensed assets,
storytold/pdfcraftlinks in app code and new colour literals, named colours included. - Run
cargo xtask ci.cargo xtask assets --writeregeneratesATTRIBUTION.md. - A failure that also occurs on plain upstream isn't the merge's fault: check before patching it.
- Update the commit above.