- Parenthetical blocks (Author year; Author year) now expand into individual
cite spans so each is independently clickable rather than linking only to the
first author
- Detected citation patterns always emit a cite segment regardless of whether
the reference is in citeIndex; empty-refs spans fall back to a fielded ADS
search (first_author:"Surname" year:YEAR) on click
- Matched corpus citations get a rubric-tinted dotted underline; unmatched get
a grey dotted underline; both turn rubric on hover
- Cite elements changed from <span> to <button> for accessibility
- Add .vite to frontend .gitignore; fix FakeCorpus test stub (arxiv_ids/bibcodes)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Raise retrieve_for_paragraphs default top_k from 3 to 10 so the backend
always returns up to ten ranked works per paragraph/figure (display slice
is controlled by the frontend preference). Add parse_text() for .txt/.md/.markdown
uploads: UTF-8 decode β segment_markdown, title from first heading or filename
stem, pages=0, figures=[], all seven pipeline stages still emitted. Tests: +1
top-k assertion on a 12-row FakeDataset, +8 parse_text unit tests, +1 API
integration test for markdown upload (66 total, all green).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
test: make figures traversal test exercise actual traversal payloadsβ
Adds backend figure extraction using pymupdf (extract_figures in figures.py),
a new Figure schema, a 7th pipeline stage ("Tipping in the plates"), batched
embedding of paragraph + caption texts in a single OpenAI call, litByFig
retrieval, and a validated GET /api/figures/{pdfHash}/{figId}.png endpoint.
Test suite grows from 31 to 44 (all green).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Wire parse pipeline as background job with SSE progress (six-stage events)
and annotate proxy with SQLite caching + token streaming; fix Anthropic
mid-stream error events and malformed JSON skip in all provider branches;
add max_tokens=400 to OpenAI branch.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>