What's Changed
Features
- feat(chat): record and show what each answer was built from by @mrsibe in #93
- feat(provenance): persist document structure as document_blocks by @mrsibe in #105
- feat(chunking): block-aware chunks with canonical offsets by @mrsibe in #106
- feat(provenance): persist chunk↔block mapping and page range by @mrsibe in #108
- feat(provenance): stabilise source identity, refine PDF blocks, extract the Retrieval seam by @mrsibe in #111
- feat(eval): freeze a reproducible v1.4 retrieval baseline by @mrsibe in #115
- feat(reader): render sources through a PDF-first reader contract by @mrsibe in #116
- feat(citations): carry structured citations from retrieval into the answer by @mrsibe in #113
- feat(citations): resolve and validate [n] markers by @mrsibe in #114
- feat(citations): open a citation chip at its source page and block by @mrsibe in #117
- feat(notes): save a reader excerpt into the note, anchored to its source by @mrsibe in #118
- feat(workspace): organise the shell around Library → Reading/Chat → Notes by @mrsibe in #127
- feat(chat): render an answer's state, and keep the part that arrived by @mrsibe in #149
- feat(chat): guard the stream — idle deadline, pre-token retry, configurable ceiling by @mrsibe in #152
- feat(chat): continue a stopped answer, and ask a bad one again by @mrsibe in #153
Bug Fixes
- fix(generation): stop creative-space generations failing on Anki metadata validation by @mrsibe in #63
- fix(ui): align the window controls with the title bar by @mrsibe in #84
- fix(ui): give every window the same title bar by @mrsibe in #86
- fix(layout): rebuild the panel resizing gesture by @mrsibe in #89
- fix(shell): restore the panel gutter and close the gaps the critique found in #89 by @mrsibe in #90
- fix(shell): honour reduced motion, announce answers, and test the resize geometry by @mrsibe in #92
- fix(pdf): upgrade pdfjs-dist past GHSA-hq66-cqwq-w95j (5.7.284 → 6.3.289) by @mrsibe in #124
- fix(reader): render the PDF reader with the pdfjs legacy build by @mrsibe in #129
- fix(pdf): bundle PDF.js CMap/font assets so CJK documents render and index by @mrsibe in #131
- fix(embedding): enable RAG with the built-in local model and batch local embeddings by @mrsibe in #134
- fix(protocol): register all custom scheme privileges in one call by @mrsibe in #136
- fix(chat): report a broken stream as a failure, not a finished answer by @mrsibe in #137
- fix(chat): settle a turn once, so an abort is not a completion by @mrsibe in #144
- refactor(chat): move the turn lifecycle into a Main-process ChatStreamManager by @mrsibe in #145
- fix(library): a failed import is reported, and the library is re-read either way by @mrsibe in #147
Build & Packaging
Dependencies
Documentation
- docs: align the README with the site's positioning by @mrsibe in #83
- docs(design): correct DESIGN.md against the current tokens and components by @mrsibe in #85
- docs(arch): record the seams v1.4 actually produced, and close the one reverse dependency by @mrsibe in #126
- docs(adr): decide the local MCP server, pinned to spec revision 2026-07-28 by @mrsibe in #128
Other Changes
- refactor(chat): carry the SDK's own events to the renderer, and let the SDK assemble by @mrsibe in #148
Full Changelog: v1.3.0...v1.4.0