Commit Graph
14 Commits
Author SHA1 Message Date
Kharec 764c9d4dc3 fix: recognise Final Draft files by their content
load() chose the parser from the extension alone, so a .txt that is
really FDX was parsed as Fountain. The .fdx extension still wins, and
other names are sniffed for the FinalDraft root element.
2026-10-15 17:58:46 +02:00
Kharec 6622203506 fix: create the file passed on the command line when it is missing
A path that did not exist was silently ignored: plotzilla
new-script.fountain opened an untitled document instead of a new
script saved to that file on the first save.
2026-10-15 17:57:24 +02:00
Kharec 82bfef8cba fix: give each translation worker its share of the CPUs
Translate runs NumCPU/2 sentence workers and each of them started
GOMAXPROCS goroutines for the logit projection of every step: on 16
cores, 128 goroutines fighting for 16 cores. The model now caps the
goroutines of a step (SetThreads, called once after Load) so that
workers x threads stays within the machine.
2026-10-15 17:53:38 +02:00
Kharec d6ee57130f fix: copy decoder caches once per surviving beam, not per candidate
Each beam-search step deep-cloned the keys and values of every layer
for every candidate it kept, so the cost grew quadratically with the
sentence length and produced garbage faster than the unrolled dot()
could win. Survivors are now chosen first; a beam whose parent has a
single survivor takes its slices over (the parent is dead), and only a
shared cache is cloned. The step's other buffers (query/key/value,
hidden, logits) are reused across layers, beams and steps instead of
being allocated afresh each time. TestRealModel confirms the output is
unchanged.
2026-10-15 17:52:37 +02:00
Kharec e80ad634ef feat: warn when a PDF export replaces characters it cannot draw
The hand-written PDF writer uses the standard Courier fonts
(WinAnsiEncoding), so any character outside CP1252 - a Polish, Greek,
Cyrillic or CJK script - was silently written as '?'. Render now
collects the characters it had to replace and returns them, and the
export dialog lists them in a warning once the file is written.

Embedding a TrueType font (e.g. Courier Prime) with a CID/ToUnicode
map would fix the root cause; the warning keeps the zero-dependency
trade-off honest in the meantime.
2026-10-15 17:49:53 +02:00
Kharec 5e7ae97b57 fix: make atomic saves durable and preserve the file
writeAtomic renamed the temporary file over the target without syncing
either: on ext4 with delayed allocation a power cut just after a save
could leave a zero-length script, the exact failure autosave exists to
prevent. Sync the temp file before the rename and the directory after
it. While here, keep an existing file's permissions instead of forcing
0o644, and resolve symlinks first so saving through a link replaces
the file it points to, not the link itself (Dropbox/dotfile setups).
2026-10-15 17:44:56 +02:00
Kharec c0a52a9040 fix: protect the dirty flag with an atomic.Bool
SetDirty runs on a Wails call goroutine while the GTK close handler
reads the flag, with no synchronisation: an edit landing while a save
finished could make the close confirmation unreliable. The spellMu
comment already documents the goroutine-per-call convention; the flag
that guards against losing work deserves the same care.
2026-10-15 17:43:56 +02:00
KharecandClaude Opus 5.5 643adffb12 chore: release 1.4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 16:41:35 +02:00
Kharec 082152fc31 chore: update changelog 2026-10-13 18:15:10 +02:00
Kharec 60032ce490 chore: update chanelchore: update changelog 2026-10-01 10:17:50 +02:00
Kharec 5cf16588c1 chore: update changelog 2026-09-29 14:26:51 +02:00
Kharec 89dafc010e chore: update changelog 2026-09-29 14:25:39 +02:00
Kharec 23c97bdbc5 chore: update changelog 2026-09-29 14:15:26 +02:00
Kharec 664527182d feat: first release ! 2026-09-28 14:21:06 +02:00