Static reports generated from library data — each one a single self-contained HTML file, built by a script rather than assembled by hand. These are samples and experiments: the point is the method, the shape of the output, and what the underlying data can actually answer.
When a branch closes or moves, which titles leave the circulating collection entirely? Not the busy ones — the ones this branch holds every copy of. 767 titles, 1.93% of what the branch shelves.
Correction, 2026-08-07. This report was withdrawn earlier today and has been republished with corrected demand figures. The original counted every circulation event — check-ins, renewals and hold placements as well as checkouts — while labelling the result “checkouts per year,” overstating demand by roughly 3.8× and distorting the priority tiers. The underlying model now counts checkouts only. The corrected totals are materially lower: 1,843 checkouts per year across the 767 titles rather than 7,099, and 12 titles in the top two priority tiers rather than 204. The finding the report exists for — which titles this branch holds every copy of — never depended on those figures and is unchanged at 767.
On what these contain. Collection data only — titles, call numbers, shelf locations, and how often an item circulated. No patron data appears in any of them, and none of it can be traced to a borrower: circulation is a count against a copy, never a list of who took it out. Where a report includes its per-title worklist, that is a deliberate choice for that report rather than the default.
Each report is one run of a parameterized generator against chimpy-lake, the library-owned data platform: a read-only query builds a dataset, a renderer turns it into Markdown, pandoc renders that to a single self-contained file, and a verification pass checks the result — including a headless-browser layout check — before it ships. Every figure quoted in a report is computed by the generator; none are typed in by hand.