Version: 3.11.5 (confirmed unchanged through the latest 3.11.7)
Bug 1 — cleaner crash-loops on 404: BitbucketWorkspaceRunner.delete_runner() / BitbucketRepositoryRunner.delete_runner() (clients/bitbucket/base.py) call make_http_request(..., method='delete', ...) without ignore_exc. If Bitbucket has already removed the runner (e.g. it expired server-side) before the cleaner's own pass runs, the DELETE returns 404, make_http_request raises AutoscalerHTTPError, and it propagates uncaught — crashing the process. Kubernetes then restarts it into the identical failure indefinitely.
Bug 2 — controller crash-loops on 429: create_runner() (strategy/pct_runners_idle.py) catches AutoscalerHTTPError only for HTTP 400 ("runner limit reached") and re-raises everything else, including 429 (rate limited) during any reasonably bursty scale-up.
Impact: Both Deployments end up in CrashLoopBackOff under normal operation, degrading runner creation and cleanup reliability — CI jobs queue, stale runners aren't cleaned up.
Suggested fix: pass ignore_exc={404} on the delete call (make_http_request already supports this parameter, it's just never used for this call site); add retry/backoff handling for 429 in create_runner, mirroring the existing 400 branch.