# 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)