Skip to content

Status after release 2026.41.0: open work and handover #535

Description

@DutchSailor

Handover of the open work after release 2026.41.0 (status 2026-10-06). Development is paused for the rest of week 41.

1. Release v2026.41.0 (draft, not published)

  • Tag v2026.41.0 on c8459398 (merge of Release 2026.41.0: integrate ten PRs (#510, #513, #525, #526, #528, #529, #530, #531, #532, #533) #534). Release run: https://github.com/OpenAEC-Foundation/open-pdf-studio/actions/runs/37424995404
  • The draft has 15 assets: Windows system + user installers, Linux (deb, AppImage, snap), Android, mcpb, latest.json. That is the 2026.39 set minus the three macOS files.
  • Checked: the system installer is Authenticode-signed (Valid). The CI install check passed for open-pdf-studio.exe, pdfium-worker.exe and uninstall.exe. latest.json points to 2026.41.0.
  • The release notes are in the draft. They cover everything since 2026.39, because 2026.39.1 and 2026.39.2 were never published.
  • The windows-system job needed three attempts. The Azure signing service returned an internal error (SignerSign() failed), first on an NSIS plugin and then on uninstall.exe. It was not a code problem.

To do

  • Accept the Apple developer agreement. macOS notarisation fails with HTTP 403 "A required agreement is missing or has expired". Then rerun only the macOS job (gh run rerun --job <macos job id>), not --failed.
  • Test the draft installers and publish: gh api -X PATCH repos/OpenAEC-Foundation/open-pdf-studio/releases/404395853 -F draft=false -f make_latest=true. Then check releases/latest and releases/latest/download/latest.json.
  • Update the website after publishing (version labels and download sizes).
  • Delete the stale drafts v2026.39.2 and v2026.39.1-concept (gh release delete <tag> --yes --cleanup-tag).
  • Manual check of [Feature]: faster stop on scroll #522 in the real window, since synthetic wheel input does not reproduce native behaviour. Check one notch on a heavy drawing, fast spin then stop, page flip at the edge, touchpad, Shift+wheel and Ctrl+wheel.

2. Branch fix/idle-raf-loops (a49800f, no PR yet)

Problem: an idle window kept two requestAnimationFrame loops running at the display refresh rate.

  • The viewport render loop rescheduled itself every frame even without work.
  • CanvasScrollbars polled the viewport every frame, even with scrollbars switched off.

Measured on 2026.41.0 with a heavy drawing open, doing nothing, on a 240 Hz screen: the renderer used ~16% of a CPU core and the GPU process ~7%. Suppressing only the scrollbar loop (no document open) brought both to ~0.

Change:

  • The render loop runs on demand. viewport.dirty and viewport.active are accessors that plan one frame (js/pdf/frame-planner.js), and the wheel ease-out still pumps every frame. All 53 existing writers are unchanged.
  • The scrollbars follow the viewport through volgViewport() instead of polling. The geometry is unchanged, now in scrollbalk-geometrie.js.
  • Unit tests are green (2989 passed), and so is vite build. A multi-lens review found two issues, both fixed.

To do before the PR (it touches the render loop, so the full render gate applies):

  • Build a rig from the branch.
  • Measure idle CPU: renderer and GPU should be ~0.
  • Run the release gate: text rotation, rotation sweep, save round trip (.mjs + .py), save duplicates, placement under the cursor, continuous ink, fast zoom, search, and the comparison sweep.
  • Interactive check of the [Feature]: faster stop on scroll #522 ease-out and of the scrollbars (preference showScrollbars).
  • Rebase on main, then open the PR.

3. Branch fix/rotated-resize-snap (37a075a, no PR yet)

Problem: dragging a grip of a rotated shape (for example a rectangle with /Rotation 270 from another editor) jumped whenever an object snap engaged. The snapped delta was measured from the grip in the unrotated frame instead of where the grip is drawn. The grip tooltip showed NaN px, because the document measure scale is an object, not a number.

Change:

  • The snap origin and the tracking-line base use the on-screen grip position (greepOpScherm in handles.js; logic in js/tools/greep-strek.js).
  • The tooltip uses the same scale lookup as the width/height fields (findMeasureScale), for example 3.13 m.
  • Also fixed:
    • a legacy two-point symbol without stored end points no longer collapses on a snapped drag;
    • the equal-size snap is skipped for rotated images, because it moved them back into the unrotated frame.
  • Unit tests are green, and so is vite build.

To do before the PR

  • Build a rig. Resize an imported rectangle with /Rotation 270 with object snap on, on a dense CAD drawing.
  • Check the tooltip with a document scale, a scale area and no scale.
  • Open the PR.

Follow-ups found during review (not in this branch)

  • Equal-size snap for rotated images: re-anchor about the rotated centre instead of skipping it.
  • Snap origin for plugin shapes with {x, y, w, h} and for the text/draw types still uses orig.width/orig.x, which can give NaN or a wrong point when a snap engages.

4. Parked: freeze reported when opening a heavy drawing

The report: the window froze when opening a one-page A0 CAD plot (~117k vector paths, 13 annotations, opened from a synced cloud folder) in 2026.39.2.

It could not be reproduced in eight variants:

  • a fresh instance;
  • the user's preferences;
  • opening via the file argument;
  • the same path and file name;
  • the original file;
  • a second instance in a shared WebView2 profile;
  • maximized on a 100% second monitor next to a 150% primary.

The file renders in 0.5 s in another engine. The frozen window looked normal from outside: not hung, no modal dialog, normal CPU and memory.

Next time: first check whether it repeats after reopening. Then, with the user's consent, read app_get_recent_console from that instance's MCP port.

5. Other open items

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions