Skip to content

Release 1.14.3 - #52

Merged
b451c merged 10 commits into
mainfrom
release/1.14.3
Nov 4, 2026
Merged

b451c merged 10 commits into
mainfrom
release/1.14.3

Conversation

@b451c

@b451c b451c commented Nov 4, 2026

Copy link
Copy Markdown
Owner

Two rendering fixes and a rating prompt for the Mac App Store version.

  • Blank lines around blocks: a blank line under a heading, or after a paragraph or list before the next heading, no longer renders as an extra empty line (each text chunk is trimmed to its first and last non-blank line; sourceLine and ids unchanged).
  • Display math that SwiftMath cannot typeset (for example \not\le) shows as a latex code block instead of empty space, on screen and in PDF/print, with exact row heights.
  • Mac App Store version only: asks for a rating with the system prompt after real use (10 opens on 3 days over 7+ days, 60 s of reading with recent input, once per version, 120 days apart, never during Source Edit). Not compiled into the GitHub build.

842 tests pass; Debug, Release and Release with -DAPPSTORE build.

b451c and others added 10 commits November 4, 2026 13:48
App Store build only. A document window that has been on screen, key and
unobstructed for 60 s in one go asks StoreKit for a rating when the reader
has settled in: at least 10 opened documents on 3 distinct days, the first
one at least 7 days ago, no request yet for this version and none in the
last 120 days. At most one request per app run.

ReviewPrompt is the pure policy (UserDefaults keys under reviewPrompt.*,
garbage reads as nothing recorded); ReviewPromptTrigger is compiled only
with -DAPPSTORE, so the GitHub/Homebrew build contains none of it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 60 s run is measured on systemUptime (no progress in sleep) and
restarts when two ticks are more than 3 s apart (sleep, App Nap, a stalled
main thread). A window that is not key does not tick at all: it waits for
didBecomeKeyNotification and starts a fresh run; every tick stops once any
window has asked. At the moment of asking the user must have produced
input within the last 60 s, otherwise the prompt keeps waiting.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A text run kept the blank source lines at its ends, and the renderer turns
every blank line into empty paragraphs: `## H\n\ntext` drew a whole empty
line above "text" that `## H\ntext` did not, and a list followed by a blank
line and a heading an extra one below it. flushTextBuffer now trims blank
(and whitespace-only) lines from both ends of every chunk; blank lines
between content lines are untouched. sourceLine was already the chunk's
first non-blank line and is unchanged; the measurer lays out the trimmed
string, so view and row height still agree.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A display formula SwiftMath refuses (e.g. `\not\le`: "Unsupported \not\le
combination") drew an empty row. Once per parse, on the main actor and before
layout, such a `.mathBlock` becomes a ```latex code block with the same id and
sourceLine, so the view, the exact-height measurer, search, selection, Source
Edit landing and print/PDF all use the existing code-block path. The decision
goes through the MathRendering seam (`typesets`, a parse-only check that
matches MTMathUILabel's own error test); measureMathRows measures a
substituted pending row as an exact code row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When 60 s of display completes while the user has been idle, the run is
reset instead of staying complete, so a reader coming back is never asked
on their first touch: it takes a fresh 60 s of display that ends with
input in the last 60 s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blank lines around blocks no longer render as empty lines, a formula
that cannot be typeset shows its LaTeX source, and the Mac App Store
version may ask for a rating after real use.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@b451c
b451c merged commit 37989d4 into main Nov 4, 2026
3 checks passed
@b451c
b451c deleted the release/1.14.3 branch November 5, 2026 05:45
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