# v1.0.0-rc.4 — Release Notes
**Tag:** `v1.0.0-rc.4`
RC4 is a stabilisation candidate. Where RC3 added a new editor and turned
books into real manuscripts, RC4 makes sure that what you already had tells
you the truth.
Three audits — security, code robustness, design — were run over everything
that changed since RC3, then their reports were worked through end to end.
Almost nothing they found was a crash. The pattern was worse than that:
**the application produced wrong results without saying so**, and **the
documentation described things the code did not do**.
If you write books, read section 1 first. Two of those defects silently
removed text from an exported manuscript.
---
## 1. What you were seeing that was wrong
- **Every PDF title page was corrupted as soon as a name contained `&`.**
Metadata was escaped for LaTeX before being handed to pandoc — which
escapes it too. `Dupont & Fils` printed as `Dupont \textbackslash& Fils`.
Ten characters were affected (`\ & % $ # _ { } ~ ^`), so an **abstract**
became unreadable from its first ampersand.
- **A footnote placed inside an HTML block disappeared from the book.** If
you use a `
` for a boxed aside and put a note in it, the note's text
was lost on export and `[^1]` printed literally. The parser treats an HTML
block as opaque; pandoc does not. Chapter-prefixing therefore renamed the
definition without touching the call, and both ended up orphaned.
- **Exporting an article could produce the wrong document.** The export took
whatever file was *open* in the editor — and the project panel invites you
to open `abstract.md` and `context.md`. Exporting while your abstract was
open produced a PDF containing the abstract, under the article's title,
with no warning.
- **The "Sources" panel no longer showed the source's own text.** The context
compressor rewrites excerpts, and the panel displays the result. Markdown
tables were shredded and recomposed into rows that never existed; sentences
taken from far apart were joined with no ellipsis, reading as a continuous
quotation found nowhere in the document; and a fallback returned them in
*score* order, rewriting the text's chronology. Tables and code blocks now
pass through whole, cuts are marked `[…]`, and document order is kept.
- **Manual OCR reported success without checking.** The write could fail and
the card still showed a tick. Worse, the transcription never reached the
search index: the re-indexing function carried a `TODO` and — more
seriously — *deleted* the extracts without regenerating them.
- **Two book export paths failed outright.** A recipe exporting a book with
endnotes stopped on a LaTeX error and produced no PDF at all; and the
native Word export printed `\mainmatter` as a paragraph at the top of the
document.
---
## 2. What you could lose
- **`Cmd+Q` just after typing lost the text.** Quitting stopped background
services but never asked the editor to save, and there was no
`beforeunload` guard. With auto-save off, the loss was unbounded. The app
now flushes the editor before exiting — waiting at most four seconds, so a
stuck window can never stop you quitting.
- **A chapter could vanish permanently from the manuscript index.** Its
fingerprint was written *before* its content, so a failure part-way left a
valid fingerprint with nothing behind it, and every later pass skipped that
chapter as "unchanged". Writing is now all-or-nothing.
- **The renumber/export lock only worked one way.** Exports refused to start
during a renumbering, but nothing stopped you renumbering *during* an
export — whose assembly reads chapters for several seconds. That is the
exact scenario the RC3 fix claimed to close.
---
## 3. Security
- **The main window can no longer leave the application.** Only pop-ups were
blocked; a link clicked inside an assistant reply could navigate the window
away, and the preload — with its ~184 IPC channels, including file read and
write — was re-injected into the remote page. Web links now open in your
system browser; everything else is refused.
- **MCP servers declared in a project no longer start without your
agreement.** The safeguard existed but was only wired to manual additions:
opening a project shared by a colleague ran whatever command its
`config.json` contained. Approvals are remembered per command fingerprint,
outside the workspace — so a hostile project cannot approve itself.
- **`context.md` is now inspected.** It is injected as a `system` message,
above the application's own instructions, and it lives at the root of your
project — it travels with a shared folder. It now goes through the same
source inspector as RAG excerpts and MCP results.
- **Cloud consent applies to one named provider**, not to "the cloud" in
general; and ticking *use this provider for embeddings* now asks first,
because it sends your **entire corpus** — PDFs, transcriptions, notes,
manuscript — on every indexing pass.
---
## 4. Things that finally have an interface
RC3 shipped several features whose settings existed only in `project.json`
or nowhere at all. RC4 gives them controls.
- **Book settings** — footnotes or endnotes, continuous or per-chapter
numbering, one bibliography or one per chapter, chapter numbering. RC3's
notes admitted none of these had a UI; they now do, and they drive the
Word export as well as the PDF one (see the limitation below on endnotes).
- **The manuscript corpus** — RC3 indexed your own text as a fourth corpus,
but two defects meant it never actually reached the assistant, and nothing
in the interface showed it existed. Both are fixed: excerpts now compete on
a comparable score with reserved places, and Settings → *Manuscript corpus*
shows the index state, the date of the last indexing pass, a re-index
button, and the on/off switch.
- **Research journal purge**, with a double confirmation naming exactly what
disappears.
- **Drafts panel** — send a Brainstorm reply to the Writing mode.
- **Embeddings section** in Settings — provider and embedded model.
- **Manual OCR button** per primary source.
- **Collection filter** wired into Similarities and Tropy.
- **Flagged-source badge** in the chat.
- **Prose fonts** in the editor font picker, and an **interface density**
setting (comfortable or compact) whose stylesheet existed but could not be
switched on.
---
## 5. Every language, everywhere
The interface is now fully translatable into French, English and German.
The previous check compared the three translation files *with each other*,
so it could not see a string that was missing from all three — which is how
the OCR settings dialog stayed English in every language, and how a whole
transcription-import dialog did the same. A new check confronts the **code**
with the translation files instead.
A language-blind scan then found **181 hard-coded strings** where looking for
French alone had found 27 — the bibliography statistics, the Zotero sync
preview, the RAG settings panel, and much of the Settings screen were English
literals that no translation could reach.
One case is worth naming because nobody would think to look there: the
**insertion templates write into your manuscript**, not into the interface.
"texte en gras", "Titre de la slide" and "Notes du présentateur" arrived in
French inside a German speaker's own document.
---
## 6. Under the hood
- The test suite is at **1 397 tests, all running** on the ABI where the
SQLite suites actually execute.
- Five structural guards were added, each verified by deliberately breaking
the code to check the test fails: i18n keys confronted with the code, no
hard-coded visible strings, a z-index scale that cannot be bypassed, focus
traps actually wired, and the manuscript corpus quota.
- **Two tests that tested nothing were repaired.** One copied the function it
claimed to verify; the other stubbed exactly the mechanism the bug it
should have caught depended on.
---
## Upgrading
Nothing to do — existing projects open as they are.
Two things you may notice:
- If you use cloud embeddings, the setting now asks for confirmation the
next time you tick it. Existing configurations are untouched.
- If a project declares MCP servers, the first launch after upgrading asks
you to approve each one. The answer is remembered.
---
## Known limitations
- **The Word export still does not honour endnote *style*** (footnotes vs
endnotes remains PDF/LaTeX only). Chapter numbering and document structure
*are* now honoured in Word.
- No index (`\index{}`) or typed cross-references yet.
- A footnote defined in one chapter but called from another becomes two
orphans — a consequence of per-chapter isolation.
- Headings with the same title in different chapters produce duplicate
anchors, so manual cross-links may point at the first one.
- The manuscript corpus panel reads its state when you open Settings; the
figures do not refresh if you leave Settings open while writing.
- `Tab` can still leave a few side panels (it is trapped in dialogs).
- **`pdfjs-dist` stays at 3.11.174.** `npm audit` flags a CVE against it, but
it is not reachable here — the vulnerable code is in canvas rendering,
which ClioDeck never calls; extraction is text-only, in an isolated child
process. Upgrading means rewriting the PDF ingestion bootstrap, which was
not a sensible thing to do during a release candidate. Tracked in
[issue #77](https://github.com/cliodeck/cliodeck-app/issues/77).
- **The source inspector is detection-only by default.** Nothing is ever
discarded unless you raise the mode. This is deliberate: a primary source —
correspondence, a speech, a leaflet — legitimately contains imperatives
that look like injection patterns, and truncating a genuine testimony would
be worse than the risk avoided. Use `audit` for corpora of third-party
origin.
- Code signing is still not in place: macOS Gatekeeper warns on first launch
(right-click → Open), and managed institutional machines may block the app
([issue #75](https://github.com/cliodeck/cliodeck-app/issues/75)).
- Tested on macOS and Linux. No Windows build is published; the code should
work there but **has not been tested** — reports welcome.
- The Linux x86_64 build is **more than twice the size** of the arm64 one
(570 MB against 262 MB for the AppImage). `node-llama-cpp` ships CUDA and
Vulkan backends on x86_64 that have no equivalent on Apple Silicon. They
are used — GPU detection is automatic — but every x86_64 user downloads
them whether they own an NVIDIA card or not.
---
## See also
- [RC3 Release Notes](./3.3-RC3-Release-Notes.md)
- [RC2 Release Notes](./3.2-RC2-Release-Notes.md)
- [Features](./Features.md)