- digest.py: DigestScheduler with daily 06:00 PT loop
- SmtpConfig env-driven (CRAFTING_SMTP_*)
- notify.on event filter respected per project
- GET /digests/{date} + POST /admin/digest/run-now (dry_run flag)
- migration 006: digest_runs (idempotency via UNIQUE(date, project_name))
- text + HTML email bodies; matches spec's worked example
- Server lifespan integration; gracefully disables if SMTP not configured
- tests/test_digest.py: 8 tests (aggregation / filter / smtp mock / idempotency / endpoint)
Patch-drafted line is a placeholder until wave 3 / step 9 ships.
Spec: memory/spec-crafting-table.md
|
||
|---|---|---|
| .. | ||
| __init__.py | ||
| conftest.py | ||
| test_auth.py | ||
| test_db.py | ||
| test_digest.py | ||
| test_e2e_register_run.py | ||
| test_jobs_api.py | ||
| test_projects_api.py | ||
| test_runner.py | ||