You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
CI run 35010874544: quality job failed; its fail-fast step cancelled django, playwright, and container; ci-gate failed → run cancelled.
Deploy Dev run 35010874633: verify-ci (requires a green CI verdict for the exact SHA) failed → publish/deploy skipped.
Main has therefore had no green release pipeline since the run for 55a400c7 (15:56Z); the intervening runs for b297191d and d7e53f5f died in the quality job.
Root causes (all in the versioned quality contract, target order)
lint — B905 zip() without explicit strict= at courses/tests/test_course_illustrations.py:127, introduced by 6db5c2b3 (no issue reference).
format-check (would have failed next) — drift in content/sync_parsers/podcasts.py and content/tests/test_sync_parsers.py (via the D2.2b Content sync adoption: podcast and books #382 merge) and courses/tests/test_family_page_content.py.
typecheck (would have failed next) — 3 mypy errors from dict | None not narrowed after assertIsNotNone in content/tests/test_faq.py:405,417 and courses/tests/test_course_family_landing.py:425.
Fix (on-call, this issue)
strict=True on the flagged zip (both iterables have length 3; mispairing would silently build wrong fixtures).
ruff format applied to the four drifted files.
Bare assert x is not None narrowing lines added after the three assertIsNotNone calls (matches the existing pattern in content/tests/test_queries.py).
What happened
The push of
d7e53f5f(merge of #382) went red:qualityjob failed; its fail-fast step cancelleddjango,playwright, andcontainer;ci-gatefailed → run cancelled.verify-ci(requires a green CI verdict for the exact SHA) failed →publish/deployskipped.Main has therefore had no green release pipeline since the run for
55a400c7(15:56Z); the intervening runs forb297191dandd7e53f5fdied in thequalityjob.Root causes (all in the versioned quality contract, target order)
lint— B905zip()without explicitstrict=atcourses/tests/test_course_illustrations.py:127, introduced by6db5c2b3(no issue reference).format-check(would have failed next) — drift incontent/sync_parsers/podcasts.pyandcontent/tests/test_sync_parsers.py(via the D2.2b Content sync adoption: podcast and books #382 merge) andcourses/tests/test_family_page_content.py.typecheck(would have failed next) — 3 mypy errors fromdict | Nonenot narrowed afterassertIsNotNoneincontent/tests/test_faq.py:405,417andcourses/tests/test_course_family_landing.py:425.Fix (on-call, this issue)
strict=Trueon the flaggedzip(both iterables have length 3; mispairing would silently build wrong fixtures).ruff formatapplied to the four drifted files.assert x is not Nonenarrowing lines added after the threeassertIsNotNonecalls (matches the existing pattern incontent/tests/test_queries.py).Verified locally:
python -m ci.quality_contract --repository .passes end-to-end (lint, format 832 files, typecheck, migrations, django-check, deployment-check, test-ci 671 passed).Refs the introducing commit
6db5c2b3; also hardens files touched by #382.