# v1.0.0-rc.2 — Release Notes **Release date:** May 2026 **Tag:** `v1.0.0-rc.2` RC2 is the first release after the **ClioBrain fusion** — the standalone [ClioBrain](https://github.com/inactinique/cliobrain) project (now archived) has been absorbed into ClioDeck as the new Brainstorm mode. RC2 also ships an MCP server, three archive connectors (Europeana / Gallica / HAL), and Obsidian vault as a RAG source. The strategy and implementation plan that drove the fusion live in `docs/archive/fusion-cliobrain-strategy.md` and `docs/archive/fusion-cliobrain-implementation-plan.md` — commits on this branch reference the step numbers defined there. --- ## What's new ### 1. Brainstorm mode (ClioBrain fusion) ClioDeck now has a dedicated chat mode for the exploratory phase of research, sitting between the corpus panels and the Write WYSIWYG editor. Highlights: - Streamed chat through the typed `ProviderRegistry` (5 providers: Ollama, OpenAI-compatible, Anthropic, Mistral, Gemini). - Agent loop with MCP tool-use (any MCP client you've configured contributes its tools). - `.cliohints` injection — a workspace-level system-prompt fragment from `.cliodeck/hints.md`. - Context compaction sized to the active model (keeps system + recent turns verbatim, summarises the middle). - First-class `AbortController` cancellation per session. The legacy RAG chat is still wired for safety; RC3 will deepen Brainstorm and retire it. See: [Brainstorm Mode Guide](./1.11-Brainstorm-Mode-Guide.md). ### 2. MCP integration (both directions) ClioDeck speaks the Model Context Protocol as both a **client** and a **server**. - **MCP clients** (Settings → MCP Clients) — register stdio or SSE MCP servers. Their tools become callable by the LLM inside a Brainstorm turn. Each client exposes a typed state machine (`unconfigured | spawning | handshaking | ready | degraded | failed | stopped`), not a `connected` boolean; partial success is first-class. - **MCP server** (Settings → MCP Server) — toggles a `bin/cliodeck-mcp` binary that exposes the workspace's corpus to Claude Desktop, Claude Code, or any other MCP client. Off by default. Every call is appended to `.cliodeck/mcp-access.jsonl` as a typed event. The Settings panel generates ready-to-paste snippets for Claude Desktop, Claude Code CLI, and Generic MCP (stdio) clients. The server exposes 9 tools: `search_documents`, `search_obsidian`, `search_tropy`, `search_zotero`, `graph_neighbors`, `entity_context`, `search_gallica`, `search_hal`, `search_europeana`. See: [MCP Integration Guide](./1.12-MCP-Integration-Guide.md). ### 3. Archive connectors — Gallica, HAL, Europeana Three public-archive connectors are wired as MCP tools on the built-in server: - **Gallica (BnF)** — SRU public endpoint, no key. - **HAL (CCSD)** — Solr public endpoint, no key. - **Europeana** — REST, requires a free `wskey`. Configure in **Settings → Archives**. API keys are stored via Electron's `safeStorage` (OS keychain on macOS, libsecret on Linux, DPAPI on Windows) — never in `config.json`. The Europeana key is read at call time from `EUROPEANA_API_KEY`, so it can be rotated without a restart. See: [Archive Connectors Guide](./1.13-Archive-Connectors-Guide.md). ### 4. Obsidian vault as RAG source ClioDeck can point at an Obsidian vault folder, index the notes inside, and treat them as a first-class source alongside PDFs (secondary) and Tropy archives (primary): - Wikilinks, tags and frontmatter parsed. - Indexed into the shared `.cliodeck/brain.db` (`obsidian_*`-prefixed tables), alongside PDF and Tropy vectors — not a separate `obsidian-vectors.db` file, even at this tag. - Reachable from Brainstorm as the *notes* source-type and from external MCP clients via `search_obsidian`. - Partial-success reporting (`indexed / skipped / failed`). See: [Obsidian Vault Guide](./1.14-Obsidian-Vault-Guide.md). ### 5. Settings panel UX - All Settings sections are now collapsible (`CollapsibleSection` wrapper) so the Expert mode stops being a wall of forms. - Settings has Simple / Expert tabs — beginner-facing essentials by default, full surface on demand. - Archives section fully internationalised (FR / EN). --- ## Workspace layout changes The workspace is now flat — the previous nested `.cliodeck/v2/*` layout has been collapsed: ``` /.cliodeck/ brain.db # consolidated SQLite: PDFs, Tropy primary sources, research history, AND Obsidian vault vectors config.json # schema_version: 2 hints.md # .cliohints workspace context recipes/, recipes-runs/ mcp-access.jsonl # MCP server audit log security-events.jsonl # source-inspector events ``` ClioDeck **auto-migrates** the older nested layout (`.cliodeck/v2/*`), pre-fusion v1 layouts, and bare `.cliobrain/` workspaces on project load — no manual action required (`migrateWorkspaceToFlat` in `backend/core/workspace/migrator.ts`). By this release, the db-fusion was already complete — and further along than an earlier version of this page said. It's not just `vectors.db` (PDFs) and `primary-sources.db` (Tropy) folded into `brain.db`: **`obsidian-vectors.db` was folded in too**, 5 days before this tag was cut (`c044d42`, verified an ancestor of `v1.0.0-rc.2` via `git merge-base --is-ancestor`; `obsidianStorePath()` already returned the `brain.db` path at this exact tag). The migrator already renames the legacy vault tables in place (`notes`→`obsidian_notes`, `chunks`→`obsidian_chunks`, …) to avoid colliding with the PDF/Tropy tables sharing the same file. None of these four legacy files coexist as separate files at RC2. --- ## Bug fixes worth calling out - **RAG / BM25.** Short acronyms (e.g. `KAQG`, `CIA`) are now boosted on the exact-match path. Hybrid search takes `max(dense, sparse-synthetic)` so BM25 hits no longer get drowned by semantic neighbours. BM25-only hits are surfaced through the grounding prompt instead of being silently dropped. - **Chat.** `num_ctx` is plumbed end-to-end; gemma3 / gemma4 families are recognised on the Ollama provider. Chat-engine logs the resolved model name (not the provider's display name). - **PDF indexing.** Worker drains stdout before exit so large payloads don't get truncated. PDF re-index for Zotero-only citations is repaired. Embedding input is capped to avoid Ollama 500s on outsized chunks. Packaged app probes Homebrew/nvm Node paths so it can find a Node runtime to index PDFs. - **Journal.** Resolved model name is written into the AI-operation log. Sessions reload + error state clears when a project opens. --- ## Known issues / limitations - **Pre-existing test failures.** 21 tests fail under Vitest because of `better-sqlite3` native bindings; Ollama live-backend tests time out when no Ollama is running. None of these affect the runtime. - **No React component tests yet.** jsdom + `@testing-library/react` setup is pending. - **Brainstorm UX is inherited.** The chat panel is still the legacy shape. RC3 will rework it (parallel scratch threads, branching, tool-call surfacing). - **Per-tool toggle UI is minimal.** Brainstorm can filter the MCP tool catalog (`enabledTools`) but the renderer surface for this is bare-bones. - **Recipes `export` step.** `document_id` was already honored at this tag (contrary to an earlier version of this page, which claimed it was ignored) — the real limitation was that `pdfExportService.exportToPDF()` was called with `projectType: 'article'` hardcoded, so a recipe run inside a book project exported a single file rather than the assembled manuscript. Fixed before RC3 (`src/main/services/recipe-step-handlers.ts` now reads the real project type from `project.json` and calls `assembleManuscript()` for books). - **Ollama tool capability is whitelisted.** Only `ministral-3:8b/14b`, `qwen3:8b/14b/32b`, `mistral-nemo` advertise tool-use. Llama 3.x / 4.x families get `tools: false`. See `OLLAMA_TOOL_CAPABLE_PATTERNS` in `backend/core/llm/providers/ollama.ts` and `docs/archive/research-ollama-tools-1.8.md`. --- ## Upgrade notes - **From RC1.** Open your project — flat-layout migration runs automatically. No data loss; the previous `v2/` directory is replaced in place. - **From ClioBrain.** Migration is automatic on project load — `migrateWorkspaceToFlat` detects a `.cliobrain/` workspace (`MigrationKind = 'cliobrain'`) and copies canonical artifacts into the flat `.cliodeck/` layout. Vault path, notes index and chat history carry over. The fusion branch (`feat/fusion-cliobrain`) was ~190 commits ahead of `main` when it merged at this tag; it has since been merged and deleted, its history preserved on `main`. --- ## What's next (RC3) Deeper Brainstorm work: parallel scratch threads, branching turns, better tool-call surfacing, the per-tool toggle UI, and the long-postponed retirement of the legacy chat service. Plus continued polish on the RAG retrieval pipeline. --- ## Documentation - [Brainstorm Mode Guide](./1.11-Brainstorm-Mode-Guide.md) - [MCP Integration Guide](./1.12-MCP-Integration-Guide.md) - [Archive Connectors Guide](./1.13-Archive-Connectors-Guide.md) - [Obsidian Vault Guide](./1.14-Obsidian-Vault-Guide.md) For older release notes and implementation plans, see the [archive folder](./_archive/).