v0.16.1 — fixes from an external code review
·
6 commits
to main
since this release
[0.16.1] — 2026-06-14 — Fixes from an external code review
Fixed
--dbnow controls ALL persistence for LLM scrapers. Previously a fetch
throughcore.run_fetch(store=...)saved the OPPORTUNITIES on the caller's DB but
the LLM extraction cache + the crawl recipe store on a DEFAULT/BANDIRADAR_DBDB
(the scraper opened its ownStore(None)).corenow threads the caller'sstore
into an LLM source'sfetch(requires_llmsources only), binding the extraction
cache + recipe store to the same DB. (The production monitor was unaffected — it
pointsBANDIRADAR_DBat its state DB so both resolved to the same file — but the
--dbflag was leaky.)validate_refsnow requires a non-emptypost_id. A crawl ref with a url +
title but aNone/emptypost_idwas counted as "usable", yetpost_idbuilds
RawDoc.id/Opportunity.iddownstream — so it would collide assource:None. Such
a ref is now treated as drift (the listing's id field moved), surfacing via crawl
health instead of producing colliding ids.- Reproducible Quickstart.
--sampleruns now pin the reference time to a fixed
core.SAMPLE_NOW(2026-06-08, the fixtures' capture date), so the demo output no
longer drifts as the calendar moves (bundled fixtures have fixed deadlines; items
were silently "closing" over time). The README's match output is regenerated to the
reproducible result and documents the pin.