Skip to content

Add Quick print-to-PDF and exact document exports - #263

Merged
mberrys merged 10 commits into
devfrom
feat/issue-123-quick-print-export
Oct 11, 2026
Merged

mberrys merged 10 commits into
devfrom
feat/issue-123-quick-print-export

Conversation

@mberrys

@mberrys mberrys commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Closes #123.

Quick operators can now use File → Print to PDF and Export document. Print-to-PDF and current-page PNG/TIFF output use Core's transparency renderer, with explicit fidelity acknowledgment and renderer, resolution, color, revision, and artifact identity in the result. PDF export preserves the accepted correction's exact published bytes and links them to Core's existing mutation receipt; original-input exports verify the loaded source digest. Stale, cancelled, incomplete-render, permission-restricted, and source-overwrite requests fail before destination publication.

Scope follows the approved print-to-PDF and export choice. Native printer spooling is deferred. Annotation appearances remain an acknowledged fidelity limitation; raster output is a color-managed RGB composite. No Widgets or PrintSupport dependency, protected Core interface, or receipt schema changes.

Validation at head b9dccb3aa620820b6739542be2066f3d065314dd:

  • Windows 11, Qt 6.11.1/MSVC 2022 Release: all 23 mapped CTest suites passed in the final check-change run (148.88 seconds), including the complete Editor host, Action List, product operator, shell keyboard, and workspace suites.
  • Focused output tests: 10 passed, 0 failed, 0 skipped; exact original/corrected PDF bytes and receipt identity, visual PDF/PNG/TIFF output, stale/cancel fences, overprint acknowledgment, and fatal-render refusal.
  • Final ProductQuickAccessibilitySmoke --preview-fixtures loop-preflight/testdata/fixtures passed with the edited QML, software rendering, and native_accessibility_backend_active=0.
  • Command catalog, Quick policy, mirror parity, architecture, and adapter checks passed. Final-head python scripts/agent/check-change.py --base origin/dev --build-dir C:/Users/micha/AppData/Local/Temp/loop-issue123-build --report C:/Users/micha/AppData/Local/Temp/loop-issue123-proof.json passed: format, affected builds, clang-tidy, source/architecture contracts, and all 23 mapped suites. Static analysis passed the configured policy; it still emitted existing/header diagnostics.

The focused visual fixture command was UnitTestsEditorHost.exe outputBytesAndFences outputPublishedPacket outputRenderFormats outputOverprintWarning outputRenderFailure fixJourneyPublishesOnlyAnApprovedPlanBoundToTheDisplayedIdentity with the Qt runtime on PATH and QT_QPA_PLATFORM=offscreen. The external native-test log records these per-run identities:

Output Fixture PDF SHA-256 Output SHA-256
Print PDF 370bc05952f29a458ba6904fb48f7c4dbee41261c4026deaa390e89c81c6e7c4 9a7aef9c3d822a62edd0207cea72da86d118cc8f07ed6d578e6b6d2e213f0129
PNG 370bc05952f29a458ba6904fb48f7c4dbee41261c4026deaa390e89c81c6e7c4 6a32647618b13a2dcc0a1791bde9893b58c0a14fa26ec245af0e0dfe079cd70e
TIFF efe6c17a79011eb3988527112d73efb555d37e79f13b7192f6b8fa9193dce3ac 8c3b7e0f8e9be72fbf24b589904fe059c8765700a4a35471bb0bdf64e806d7a5

The tests reopen and render the print PDF, check black/white content and page geometry, verify raster pixels/resolution, and compare output hashes. PDF fixture and print hashes vary with generated PDF metadata.

Hosted checks at the same head: CodeQL, Documentation truth, and Supply Chain Policy passed. CI run 38089727912 remains in progress.

Draft qualification boundary: clean-machine Windows and Linux print-to-file lanes have not been performed. The local Quick smoke used software rendering and reported native_accessibility_backend_active=0. This PR does not claim those lanes or print proof.

Anti-slop review: reused Core rendering, artifact identity, governed publication receipts, and the safe writer. Removed stale explanatory test comments and added an explicit render-error refusal; retained cancellation, revision, provenance, and atomic-publication checks.

mberrys and others added 8 commits October 10, 2026 14:33
Run both the document output finish step and the signature-check finish step
after an Action List job, so neither outcome is dropped.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lqo8EDq3w2nU1zekEZDoZc
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lqo8EDq3w2nU1zekEZDoZc
Keep both published-output records side by side. The Action List worker
still records the in-memory published bytes that the export and receipt use,
and now also records the published path that the undo and redo history
tracks. The editor host clears and sets both together. Both sides' tests stay,
the command catalog takes the union of the two branches' implemented commands,
and the facade test expects the 30 implemented commands. The quick PDF parity
note lists print and export and undo and redo as done.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lqo8EDq3w2nU1zekEZDoZc
@mberrys
mberrys marked this pull request as ready for review October 11, 2026 11:07
The editor host constructor now takes the settings store first, then the
parent and recipes directory. The merged tests still used the old two-argument
form, which fails to compile. Pass a null settings argument at each
recipe-path call.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lqo8EDq3w2nU1zekEZDoZc
The settings-first constructor exists only on the epic branch. This branch
still builds against dev, where the constructor takes the parent and the
recipes directory, so the test calls I changed here do not compile. Restore
the calls to the dev form.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lqo8EDq3w2nU1zekEZDoZc
@mberrys
mberrys merged commit beceb62 into dev Oct 11, 2026
15 checks passed
mberrys pushed a commit that referenced this pull request Oct 11, 2026
Bring in the print and export commands from #263. Keep this branch's finish
steps and availability updates alongside dev's document output step and the
print and export availability. Keep both sides' editor host tests, with the
print and export tests first and the display-mode test after them. Take the
union of both branches' implemented commands and regenerate the handler
ratchet, which now records 48 gaps. The facade test expects the 55 implemented
commands.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lqo8EDq3w2nU1zekEZDoZc
@mberrys
mberrys deleted the feat/issue-123-quick-print-export branch October 12, 2026 19:01
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