VoucherBot v2.0.1
v2.0.1 — Bug Fixes
Patch release fixing the two issues that broke the scheduler after deployment.
What changed since v2.0.0
- Startup migration crash fixed.
o9p8q7r6s5t4no longer fails with
"column ... already exists" when the database was originally created via
create_all. The migration is now idempotent — it only addscreated_at/
updated_attokeywordsandpipeline_lockwhen the columns are missing. - Scheduler
greenlet_spawn has not been callederror fixed.- The dispatcher success path refreshes the source ORM instance after the
pipeline's commit before reading it. - The failure path now passes pre-captured
source_id/source_name
scalars into_mark_unrecoverableinstead of touching the expired ORM
instance aftersession.rollback()— accessing any attribute (even the
primary key) of an expired object raisesMissingGreenletunder async
SQLAlchemy 2.0.51, so sources that 401/403/404 (e.g. a dead RSS feed like
the TechTarget redirect) were crashing the loop instead of being disabled. - Breaking feeds are now properly disabled instead of looping errors every ~60s.
- The dispatcher success path refreshes the source ORM instance after the
Testing
- 372 passed, 15 skipped.
- New regression test:
tests/test_dispatcher.py::test_dispatch_tick_disables_unrecoverable_source
guards that the unrecoverable path passes scalars (not the ORM instance). ruff checkandruff format --checkpass.
Full Changelog: v2.0.0...v2.0.1