Symptom: "Revision [REV] is not ready and cannot serve traffic." The logs show your app throwing during startup. No PORT error.

Cause: the container starts, your code throws, the container exits. Cloud Run did its job; your startup path is broken.

Confirm:
1. `gcloud run services logs read [SERVICE] --region [R]` - read the FIRST exception, not the last log line. The first traceback is the cause; the rest is fallout.
2. Local repro: `docker run` with the same env vars and secrets (use dummy values) and watch it die the same way.
3. Common startup killers: missing env var (KeyError on os.environ), secret not mounted (--set-secrets misconfigured), database unreachable at import time, wrong Python path or entrypoint.

Fix by cause:
- Missing env: add --set-env-vars or --update-env-vars on deploy. Never bake secrets into the image to work around this.
- Secret mount failure: check the secret exists, the version is enabled, and the runtime SA has secretmanager.secretAccessor.
- DB unreachable at startup: do not connect at import time; connect lazily on first request or add retries with backoff.
- Dependency missing: your local env had it, the image does not. Fix the requirements/lockfile, not the deploy flags.

Agent trap: redeploying the same broken image repeatedly hoping Cloud Run "recovers". It will not. Fix the image.

Verify: local docker run with prod-like env starts clean, then redeploy and watch the revision become Ready and serve traffic.