lw-warm is a python script that keeps the expensive pages of this wiki—today that means Scientific articles, a DPL over ~5000 templates—rendered and cached on both the local and the online copy, so that no visitor ever pays for the parse.
A {{#dpl:}} query leaves no trace in the link tables: when a new paper joins Category:Articles, nothing tells Scientific articles that it is now stale. DPL's own remedy was a clock—expire hourly, re-render regardless—which at ~20 seconds a render (a full minute online) became untenable as the bibliography grew. The cache now lasts 30 days, and lw-warm is the thing that makes that safe: it fingerprints the category (member count + newest arrival) and only purges and re-renders when something actually changed.
The two wikis are warmed differently, and the difference matters. Locally the render is a plain web fetch (~21 s). Online it cannot be: the parse outlasts the host's 30-second web execution limit, so a purged page would answer HTTP 500 until rescued. The online render therefore runs over ssh—a one-line ParserOutputAccess::getParserOutput() on the server, the exact code path of a page view minus the time limit—and the web is only ever asked to serve.
lw-warm # both wikis: purge and re-render the listed pages
lw-warm --if-changed # ...only if Category:Articles gained or lost members
lw-warm --touch # fetch WITHOUT purging: revives an expired cache, ~0.1 s when it is still good
lw-warm --local # one wiki only; --online for the other
lw-warm -n # say what would happen, touch nothing
The daily cron (04:41) runs --if-changed then --touch: the first catches new papers, the second the 30-day expiry when nothing changed at all. For now rather than tomorrow, bib2wiki -uo (bib2wiki v4.0) forces the online rebuild on demand.
Credentials and the WAF header come from ~/.llw2lw, the same file llw2lw reads; the change-detection state lives in ~/.lw-warm-state, written only after a clean run so a failed warm is retried rather than forgotten.
Written on 9 August (2026), the day sci.bib grew from 1320 to 4939 referenced articles.