Skip to content

chore(release): v0.11.1 - #26

Merged
nprudhomme merged 3 commits into
mainfrom
chore/release-0.11.1
Aug 13, 2026
Merged

nprudhomme merged 3 commits into
mainfrom
chore/release-0.11.1

Conversation

@nprudhomme

Copy link
Copy Markdown
Member

Description

Patch release. Fixes a regression shipped in 0.11.0 that made documents outside the home directory impossible to open, and adds the Finder-opening preference that the new multi-window support calls for.

Fixed — documents outside the home directory could not be opened

Since 0.11.0 documents are read through the read_document command, which only allowed paths under the home dir or the bundled resource dir. Opening a folder anywhere else — /tmp, /Volumes, a repo cloned outside home — listed its files in the sidebar but refused to open any of them: the listing goes through the fs plugin (scoped to /**), the read did not.

The failure was invisible. loadFile only logged to the console, so selecting a file just did nothing, which reads as an unresponsive click rather than a refusal.

Confining to the home dir also had the threat model backwards: it allowed ~/.ssh and ~/.aws while blocking /tmp. Reads are now confined to the folder the user opened — the access they actually granted — so every folder they can browse they can read, and a crafted relative link still cannot escape it. The resource dir stays allowed for the bundled examples.

Load failures are now surfaced in the content area (FR + EN).

Added — Finder opening behaviour

Opening a file from Finder handed it to the frontmost window, replacing whatever it was showing. That was the only possible behaviour before 0.11.0, when the app had a single window; with several windows it silently discards the document you were reading.

New General preference with the two reasonable answers, defaulting to new window — what macOS document viewers do, and what loses nothing. A window still on the welcome screen is reused either way, so choosing "new window" never leaves an empty window behind, and a failed spawn falls back to reusing rather than dropping the open.

The backend already accepted a file path for a spawned window (PendingOpen::File), so this only wires the choice through.

Verification

  • npx tsc --noEmit, 317 tests (3 new on the preference resolver and its validator), cargo build --release clean
  • Signed and notarized build tested on macOS 26.6.1: reading from /private/tmp, the error message on a deleted file, both Finder behaviours, and the welcome-screen reuse case

Type of Change

  • Bug fix
  • New feature
  • Refactoring
  • Documentation

Checklist

  • I have tested my changes locally
  • I have updated the documentation if needed
  • My code follows the existing code style

https://claude.ai/code/session_01NcJuB2iR4WEfuQVLpYqWi4

Since 0.11.0 documents are read through `read_document`, which only
allowed paths under the home dir or the bundled resource dir. Opening a
folder anywhere else — /tmp, /Volumes, a repo cloned outside home — listed
its files in the sidebar but refused to open any of them: the listing goes
through the fs plugin (scoped to `/**`), the read did not.

The failure was invisible. `loadFile` only logged to the console, so
selecting a file just did nothing, which reads as an unresponsive click
rather than a refusal.

Confining to the home dir also had the threat model backwards: it allowed
~/.ssh and ~/.aws while blocking /tmp. Confine to the folder the user
opened instead — the access they actually granted — so a crafted relative
link still cannot escape it, and every folder they can browse, they can
read. The resource dir stays allowed for the bundled examples.

Surface load failures in the content area (FR + EN) so a file that cannot
be opened says so instead of silently doing nothing.

Claude-Session: https://claude.ai/code/session_01NcJuB2iR4WEfuQVLpYqWi4
Opening a file from Finder handed it to the frontmost window, which
replaced whatever that window was showing. That was the only possible
behaviour before 0.11.0, when the app had a single window; now that
several windows exist, it silently discards the document you were reading.

Add a General preference with the two reasonable answers, defaulting to a
new window — what macOS document viewers do, and what loses nothing.
A window still on the welcome screen is reused instead of spawning a
second one, so choosing "new window" never leaves an empty window behind,
and a failed spawn falls back to reusing rather than dropping the open.

The backend already accepts a file path for a spawned window
(PendingOpen::File), so this only wires the choice through.

Claude-Session: https://claude.ai/code/session_01NcJuB2iR4WEfuQVLpYqWi4
@nprudhomme
nprudhomme merged commit db8d248 into main Aug 13, 2026
4 checks passed
@nprudhomme
nprudhomme deleted the chore/release-0.11.1 branch August 13, 2026 14:58
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.

1 participant