Skip to content

VoucherBot v2.0.1

Choose a tag to compare

@Devathmaj Devathmaj released this 16 Aug 08:12
· 4 commits to main since this release

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. o9p8q7r6s5t4 no longer fails with
    "column ... already exists" when the database was originally created via
    create_all. The migration is now idempotent — it only adds created_at /
    updated_at to keywords and pipeline_lock when the columns are missing.
  • Scheduler greenlet_spawn has not been called error 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_unrecoverable instead of touching the expired ORM
      instance after session.rollback() — accessing any attribute (even the
      primary key) of an expired object raises MissingGreenlet under 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.

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 check and ruff format --check pass.

Full Changelog: v2.0.0...v2.0.1