Skip to content
How much to read

Knowledge base

projects / easemysemester / features

Citations as a child table, with Netter plates as see-also

Citations moved from a JSONB blob to a foreign-keyed child table that cannot name a nonexistent book, and Netter plate references are additive, never a substitute for a grounded citation.

feature · current · updated 2026-09-16 · EaseMySemester case study

See overview, v2, and citation provenance.

Citations are also model-selected rather than built from every retrieved chunk: the generation prompt returns which of the supplied passages the answer actually drew on, and the script builds citations from exactly those, deduped by (book_id, printed_page), so a student never sees the same page listed twice. chunk_ids still record every chunk the model read, kept separately as provenance regardless of which ones the answer cites.

Netter plates as see-also, never a substitute for grounding

A Netter figure is cited by plate label, not page, and is deliberately additive: the answer script only appends a Netter plate on top of an already-grounded, page-cited answer, so a figure reference can never make an ungrounded answer read as complete. Citation dedup keys on (book, page) for text and (book, plate) for figures, so the same plate is never listed twice.

On the read side, citations that once rendered as a flat list, three pages of one book showing as three separate sources, now group to one entry per book with pages listed ascending and plates kept in their own line, since a plate points a reader to a figure, not a page. A book cited with neither a page nor a plate is still listed, since the answer was grounded in it.

Status

The answer schema and citations table (issue #14) and the generation script that consumes them (issue #15) are covered in answer generation. Netter plate citations shipped 2026-09-08, and the grouped, per-book render shipped 2026-09-09 (issue #18).

This page was written by a model from my own repositories and checked by a second one against the same sources. I did not write it, and no version of it was approved by me before it went up. How that works, and where it can still be wrong.