Notable changes to TextStack. Newest first.
How this file works — three homes, on purpose. This one stays scannable:
CHANGELOG.md (this file) |
One line per change, grouped by deploy date. The index. |
docs/incidents/ |
Postmortems. What broke, why it was invisible, what it taught. |
docs/changelog-archive/ |
The full write-up behind every line here, preserved verbatim. |
docs/STATUS.md |
Where the project actually is right now. |
Format: Keep a Changelog. Versions are CalVer — the deploy date, because TextStack ships to one production environment on merge and there is no other version anyone can name.
Writing an entry: one line, ending with a link. If it needs a paragraph, the paragraph belongs in
the archive; if it broke production, it belongs in docs/incidents/. See
.claude/commands/changelog.md.
- AI — 24 LLM traces a day were silently dropped: Postgres cannot store a NUL — backend · details
- Backend — Npgsql was declared 9.0.3 and running 10.0.2 — backend · details
- Security — two packages with high-severity advisories, one of them unused — backend · details
- CI — 14 E2E tests removed, two of which could not fail — infra · details
- Web — links rendered outside the language provider pointed at paths the router does not serve — web + infra · details
- Mobile — crash reporting, wired but dormant until a DSN is supplied — mobile · details
- CI — E2E stops gating production on everything except smoke, and the Chrome download stops flaking deploys — infra · details
- Legal — the privacy policy said data stayed in your browser and that nothing was shared; both were false — web + mobile · details
- Mobile — a farewell banner for the frozen
1.0.0runtime, before the fingerprint switch strands it — mobile · details - Reader — the dyslexic font was a saved GitHub web page on both platforms, so the setting never worked — web + mobile · details
- CI — web unit tests and the whole mobile app were never checked by CI — infra · details
- Mobile — Play production plumbing: a submit profile that exists, two permissions that shouldn't, and a guard — mobile + infra · details
- Docs — CHANGELOG split into an index, an archive and postmortems — docs · details
- SEO — static-site generation had been dead for five weeks; a forbidden HTTP header killed it — backend · postmortem · details
- Users — entitlement tiers replace two hardcoded storage constants — backend · details
- Worker — provider readiness check + circuit breaker, and a Sentry environment tag that lied — backend + infra · details
- Observability — Sentry leaked SQL a second way: EF Core error EVENTS, not just breadcrumbs — backend · postmortem · details
- Reader — reading position was silently lost on concurrent saves (23505 upsert race) — backend · postmortem · details
- Observability — Sentry for API + Worker, with LLM agent and provider-routing spans — backend + infra · details
- Quality pipeline — a shifted double-delete could destroy a real chapter (Ivan Ilyich lost chapter I) — infra + backend · postmortem · details
- Mobile — persistent Book Chat parity (history, markdown, quote-and-ask, spoiler toggle) — mobile + shared · details
- Book Chat — precomputed per-chapter summaries: "summarize chapter N" now draws on a whole-chapter digest — backend · details
- RAG — deterministic tie-breaker on retrieval ORDER BY (repo now matches the article) — backend · details
- Upload — truncated PDFs are caught with a clear message instead of a scary "corrupted" failure — backend + web · details
- Book Chat — tutor-grade answers: prompt rewrite, gpt-4.1, markdown rendering, 10× token headroom — backend + web · details
- Book Chat — "Ask this book" gets persistent history, quote-and-ask, and your highlights as context — backend + web · details
- Reliability — a slow/hung RAG parse can no longer wedge the indexing worker — backend · postmortem · details
- Hotfix — PDF vision-RAG parse routes to gpt-4.1 in the Worker (was Ollama) · postmortem · details
- Reliability — "Ask this book" indexing no longer gets stuck + reading sessions survive a deleted book — backend + web · details
- Reader — highlights are now reachable (nav + in-reader drawer/sheet) & translation offers every language — web + mobile · details
- Reader — highlights work in the Original-layout PDF reader (web + mobile) · details
- User books — metadata enrichment is reliable + visible (description/genre/year) — backend + web + mobile · details
- Extraction — drop PDF inline-image extraction for user books (gate, don't delete) — backend (ADR-012 S5a) · details
- Mobile — PDFs render in "Original layout" (PDF.js in the reader WebView) — mobile + shared (ADR-012 S4) · details
- Reader — restore the standard chrome in PDF "Original" mode + page bookmarks — web + backend · details
- AI quality —
pdfvisioneval gate scores the PDF vision-RAG feature end-to-end (ADR-012 S3) — backend · details - Ask this book — vision-RAG for PDFs with page citations that jump to the page (ADR-012 S3) — backend + web · details
- Reader — PDF reading progress is page-based (library % + resume) — web + backend (ADR-012 S2) · details
- Reader — PDFs open instantly, Original-only (ADR-012 S1) — web + backend · details
- Ops — root cause: the nightly backup was leaking 156 GB of orphaned pgdata volumes — infra · postmortem · details
- Ops — backup verify self-diagnoses failures + reaps leaked containers — infra · details
- Reader — "Original layout": pixel-perfect PDF view for uploaded books — web + backend · details
- Reader — hide the misleading word-based % in the PDF Original top bar — web · details
- Auth — longer sessions: refresh-token TTL 30 → 365 days — backend · details
- Auth — fix spurious "Unauthorized" mid-session (refresh-token stampede) — web · postmortem · details
- Library — drop the shelf carousels, book grid to the top — web · details
- PDF reader fixes — Word/Quartz exports parse cleanly (KMK OSCE model book) — extraction + web/mobile · details
104 entries from 2026-05 to 2026-06 — the AI platform build-out (Phases 1–12), the mobile app, RAG, agents, and the SRS work — are archived in full:
Pre-2026 releases: docs/changelog-archive/2025-and-earlier.md