Problem
Today scans are one-shot — kicked off via POST /api/v1/scans from the dashboard, CLI, or webhook. Many users want recurring security audits without writing their own cron / GitHub Actions wrapper.
Acceptance criteria
Suggested approach
Use apscheduler (already a popular FastAPI-friendly choice). Persist schedules to SQLite, run the scheduler in the same process (single-worker constraint already documented).
For multi-worker: schedule must be claimed by exactly one worker — see #3 (multi-worker pubsub issue).
Difficulty
~1 day.
Problem
Today scans are one-shot — kicked off via
POST /api/v1/scansfrom the dashboard, CLI, or webhook. Many users want recurring security audits without writing their own cron / GitHub Actions wrapper.Acceptance criteria
schedulestable:(id, name, target_path, scan_types, cron_expression, last_run, enabled, created_at).POST/GET/PATCH/DELETE /api/v1/schedules(admin scope)./settings/schedulesto manage.Suggested approach
Use
apscheduler(already a popular FastAPI-friendly choice). Persist schedules to SQLite, run the scheduler in the same process (single-worker constraint already documented).For multi-worker: schedule must be claimed by exactly one worker — see #3 (multi-worker pubsub issue).
Difficulty
~1 day.