Changelog — tabs, restore, load busy (1.5.5 → 1.5.12)
Product: 1.5.12
Cache-bust: app/config.js → 1.5.12-redact-save-howto
Date: 2026-08-16
A pile of "why is my tab blank / why did I save half a PDF" fixes, plus a real redact tool and a save that comes back as the file. Packaging/SVC untouched.
1.5.12 — Redact, save bounce-back, how-to
- Redact tool (D): click or drag over PDF text (or a blank/scan region) and drop black cover bars. Per-line if you lasso a paragraph. Not certified redaction — visual cover until Save PDF.
- Bars stay quiet on create (no toolbar in your face). Click one later while still on Redact to move/recolor.
- Save Project: after write, reopen the
.gapdfinto the same tab (Chromium/PWA handle; Firefox uses the blob we just built). If reopen fails, the working tab stays put. - How-to:
dev/HOW-TO.md+ in-appapp/howto.html(linked from ?).tools/sync-version.ps1stamps VERSION → config/README and re-rendersDOCs/. - Cache-bust:
1.5.12-redact-save-howto.
TL;DR (if you're skimming)
- Click-to-redact (D), save-project reopens the file you just wrote, in-app how-to.
- Multi-file combine: dim + block save until done (no half-sandwich exports).
- Big single PDF: pages stream in, soft toast, save/print wait — no disco dim.
- Session restore: freeze-before-open, soft toast, no blank ghost tabs.
- Spare empty shell = secret canvas, not a fake tab.
- Close active tab → focus right, else left (not "Map.first = blank").
- Multi-drop actually gets all the files (Chromium DataTransferItem gotcha).
1.5.11 — Tab close focus
Right neighbor first, else left. Old code grabbed Map.first → often a hidden spare → blank until click.
1.5.10 — Spare shell hidden
Internal empty pane for the DOM. Not a tab while real docs exist. + still makes a real Untitled.
1.5.9 — Empty shell cleanup
Hard-refresh was leaving a blank tab buddy. Spares + don't persist empties.
1.5.8 — Restore soft status
Restore bar uses toast + gate, not full-screen dim.
1.5.7 — Soft doc gate
Multi-page open: watch pages roll in; save/print gated; 30min panic timeout; forceClearAppBusy().
1.5.6–1.5.5 — Load / restore / multi-drop
Startup open vs restore race fixed; restore de-dupe; Chromium multi-drop fix; multi-file dim+busy.