Validation: basketball-api#449 — WESTSIDE_STREAMLIT_RO_PASSWORD env var injection
Validation: basketball-api#449 — WESTSIDE_STREAMLIT_RO_PASSWORD env var injection
Verdict: PASS — 2026-04-11 20:37 UTC, after pal-e-deployments PR #111 merged and ArgoCD reconciled.
Acceptance criteria verified
| Check | Command | Result |
|---|---|---|
| Secret exists in cluster | <code>kubectl -n basketball-api get secret westside-streamlit-secret</code> | ✅ Opaque, 1 data key, 33s old |
| Env var injected on deployment | <code>kubectl -n basketball-api get deploy basketball-api -o jsonpath='{.spec.template.spec.containers[0].env[*].name}'</code> | ✅ includes <code>WESTSIDE_STREAMLIT_RO_PASSWORD</code> |
| basketball-api pod healthy | <code>kubectl -n basketball-api get pods -l app=basketball-api</code> | ✅ 1/1 Running, 0 restarts, 47s old |
| Old CrashLoop pod terminated | — | ✅ <code>basketball-api-5c4b9bcc-vvfsx</code> (20h) terminated cleanly |
| ArgoCD app state | <code>kubectl -n argocd get application basketball-api</code> | ✅ <code>Synced / Healthy</code> (was <code>Degraded</code> for 20+ hours) |
| alembic_version reaches 044 | <code>psql -tc "SELECT version_num FROM alembic_version"</code> | ✅ <code>044</code> (was <code>042</code>) |
| <code>westside_streamlit_ro</code> postgres role exists | <code>psql -tc "SELECT 1 FROM pg_roles WHERE rolname='westside_streamlit_ro'"</code> | ✅ returns <code>1</code> |
| <code>jersey_public_orders</code> table exists (collateral, from 043) | <code>psql -c "\dt jersey_public_orders"</code> | ✅ table present, owner=basketball |
| No plaintext password in git | <code>git log -p</code> on PR #111 | ✅ SOPS-encrypted, recipient matches harbor-creds.enc.yaml |
Fix chain
basketball-api#433— original T2 jersey_public_orders migration (introduced 040 collision)basketball-api#442— fixed 040 collision (renamed jersey migration to 043)basketball-api#444— fixed 041 collision (renamed streamlit_ro to 044) — UNCOVERED the env var bugpal-e-deployments#111— injected the env var via new SOPS-encrypted Secretwestside-streamlit-secret+ envFrom in deployment-patch.yaml
What this unblocks
- basketball-api deploy pipeline (was stuck for 20+ hours)
- System B production rollout (jersey_public_orders table now exists for the POST/GET endpoints)
- Future migrations can land cleanly
- westside-streamlit dashboard can finally use its read-only role
Process gaps captured (separate follow-up tickets recommended)
- Woodpecker should run
alembic headsas a pre-build check to fail-fast on dual-revision collisions - PR template should require: "if your migration reads an env var, the same PR must update the basketball-api kustomize overlay to inject it"
- basketball-api CI test step has been failing for 5+ merges (test drift in test_templated_email and test_first_payment_email) — not gated, deploys go through anyway per commit f17b49b
Related
arch-jersey-intake— System B architecturestory:WS-S31basketball-api#441,basketball-api#443,basketball-api#449,pal-e-deployments#110— all closed by this fix chain