v1.1.0 Phase 1: Postgres test tier + CI hardening #94
No reviewers
Labels
No labels
area:ai
area:ci-cd
area:notifications
area:observability
area:public-pages
backlog
bug
duplicate
enhancement
help wanted
invalid
question
type:decision
type:feature
type:infra
type:maintenance
type:security
v1.0.1
v1.1.0
v1.2.0
v1.3.0
v2.0.0
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
rbrooks/WeatherBot!94
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/v1.1.0-postgres-ci"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
First slice of the v1.1.0 milestone — the test/CI foundation everything else rides on.
#68 — Postgres integration test tier
WEATHERBOT_TEST_DB=postgres, so a Postgres tier runs as a separate pytest invocation against a real PostgreSQL (real JSONB / FK / unique-NULL semantics). Newpg_engine/pg_dbfixtures build the schema from ORM metadata;@pytest.mark.postgrestests are excluded from the default SQLite run (addopts = -m "not postgres").sent_alertsUNIQUE dedup under asyncpg, dashboard NULL-channel rows not deduped (documents the gap #57 will close), channel-deleteON DELETE SET NULL(the authoritative F-09 check SQLite couldn't do), and apg_notifyLISTEN/NOTIFY round-trip (the SSE contract).#65 — CI hardening
postgres:16-alpineservice and steps for ruff (permissive starter: E9/F63/F7),alembic upgrade headagainst a fresh PG (catches migration-chain errors), the SQLite bulk tier, and the Postgres tier.cd.ymlunchanged (itspytestexcludes the postgres marker by default, so no PG service needed).Verified on the dev server (mirrors this CI)
ruff clean ·
alembic upgrade headclean through 0018 · SQLite tier 429 passed · Postgres tier 4 passed.⚠️ Decision embedded: pip-audit is advisory, not gating
pip-audit --strictcurrently fails on a backlog of advisories in the pinned stack (starlette, pyjwt, python-multipart, python-dotenv, setuptools) — all cleared by the pending Renovate upgrades (#30–#37), which are out of scope for this test/CI slice. So pip-audit runscontinue-on-error: truefor now; once the Renovate backlog lands it's a one-line change to--strictgating. Flagging in case you'd rather prioritize those dependency upgrades to enable strict gating sooner.Closes #65, #68
🤖 Generated with Claude Code
c409fb5c2f91fdcebe01