Windows checks out symlinks as files, so only Linux (CI) and macOS
(release.sh) write source archives. ci.sh skips names already on
the release; the first platform's copy stays.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The walk over cargo metadata ignored an edge's target, so lopdf (Linux
only, a test dependency elsewhere) counted on Windows. Linux needs the
BSD-3-Clause text for alloc-stdlib, which ships no licence file.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Windows prints through the system dialog at the document's paper;
Linux through the desktop portal, the dialog's choices laid out by Ely.
Round 3 findings fixed without a further review, as the rules say.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The warning watch skips MuPDF's non-embedded font notice and its
repeat counts. Text and search reads are watched too: damage they meet
is kept on the document, told by the next draw or picture check, and
fails image and text exports until then.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The worker set the accessory policy after AppKit had already registered it
as a Dock app, so 11 of 15 launches showed Foreground for about 30 ms.
Now it sets LSUIElement in its main bundle's info before the kernel starts
AppKit, and fails to start unless the policy came up as accessory.
tests/scripts/dock-macos.sh samples each worker's type from its start until
the first tile; on the Mac mini 30 launches were all UIElement, and the
shipped worker fails it.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
R6.12: on macOS the worker sets LibreOffice's own NSApplication to the
accessory policy before the kit starts, so it never shows in the Dock.
R6.13: when the whole slide fits, the wheel and Up/Down (nothing
selected, no text editing) turn slides in the ElyShow editor.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Backups under .ely-old are numbered in list order, so paths near the
Windows limit still upgrade and uninstall. Uninstall checks the list
file first and puts everything back if it cannot delete it. Five
comments shortened. Round 3 was the last; ticked without review.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The list names each file and folder; upgrades and uninstall move only
listed files and remove a folder only when empty. Every file, nested
ones included, must be writable first. A new file whose place holds a
file this app did not install refuses the install. A copy failing
midway removes what it wrote and puts the old release back.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reinstalling deleted files Ely never installed, and a busy file left a
half-removed install. The installer now writes the top-level names it
installs (.ely-files, from packaging/windows/files.sh); upgrades and
uninstall remove only those, and releases before the list only in the
folder the registry names. It checks that every listed file can be
written, moves them all into .ely-old, and on any refusal puts them
back and exits 2. A file that cannot be written fails the install,
which removes what it created and restores the old release.
tests/scripts/windows-installer.sh covers each case.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upgrades kept ElyMark's old git folder and CEF files. The installer
now runs the uninstaller's file list before copying, only when the
folder already holds this app's exe.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The lookup is split from the developer fallback, so the tests
need no built Git and check NoGit explicitly. Shorter stage.sh comment.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Component 5954132 sizes headings by Typora's steps over the body.
Checked in a real Windows window with R6.7 and R6.8.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Component 9fb607b measures the drawn line, so a caret after a CJK
character sits after it, not mid-glyph.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
git::own returns git::NoGit when neither the app nor ElyTree has Git;
ElyMark's Git item then reads 'needs ElyTree'. Linux AppImages stand
alone, so ElyMark keeps its Git there (packages share the AppDir).
The bundle fixture now has ElyTree's executable folder.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Component 93efa7f draws soft breaks as lines (Typora's default when
writing); exports and copies read with MarkdownReader::joined, as GFM.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Windows and Linux no longer stage Git or its licenses for ElyMark.
git::own looks beside the app, then beside ElyTree (sibling install
or macOS registration). R6.5 review round 1 passed; R6.6-R6.10 listed.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
0.1.5's Developer ID signing turned on the hardened runtime. UNO's
bridge maps its vtables with MAP_JIT, which needs allow-jit; without
it the worker aborts on its first request, so ElyDoc, ElyTable and
ElyShow could not start on macOS.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Real footage of the installed 0.1.5 apps, composited in Remotion with
shape morphs between sections; synthesized score and UI sounds. Logs
P3-17 (ElyTable keyboard zoom leaves the grid half-scrolled).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
An explicit open checks the session registry by file identity, so a
hard link to a shown file joins the list. Ticked after round 3.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Opening a file a tab already shows only focuses it; the recent list
now learns it too. The restart regression reopens the restored file.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A tab reopened from the session counts as already remembered, so
clearing the list survives a restart; explicit opens still join it.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>