Since protected develop@314ddeae7b775a4957594b599358c8255617eb2e (ci: consolidate repository workflow backstops, #1165, merged 2026-09-04), the branch-protection contract and the current CodeQL producer no longer agree.
Fresh live evidence — 2026-09-07
Protected develop still requires all 14 contexts, including:
Analyze (javascript-typescript)
Analyze (python)
The same protected snapshot removed the repository .github/workflows/codeql.yml that used to emit those names. The organization-required CodeQL PR workflow is live on BandScope PRs targeting the protected product branch and reports CodeQL compatibility analysis (<language>); it does not emit the retired Analyze (...) names.
On canonical Project Persistence #970 exact 46478c4aadb4f4ad4a5c4ed9821a6456be0db09d, CodeQL run 34062487160 separates two central defects from this stale-name defect. Attempt 1 detected languages successfully; CodeQL compatibility analysis (actions), (python), and (javascript-typescript) each successfully executed Request current-head CodeQL scan dispatch, then intentionally failed at Release runner or enforce current-head CodeQL verdict while awaiting the trusted handler. No authenticated terminal codeql-dispatch/<language> status appeared on that exact BandScope head. On attempt 2, all compatibility shards fail earlier because the central required workflow treats RUN_ATTEMPT != 1 as proof a prior terminal verdict should exist and emits Exact CodeQL job was rerun without an authenticated terminal verdict.
The rerun-recovery defect is canonically owned by ContextualWisdomLab/.github#1902; BandScope's exact consumer canary has been attached there. The central producer chain also has separate dispatch/template, authorization-identity, and terminal-status publication owner paths (.github#1925/#1927/#1929/#1991). These failures remain fail closed. They are independent of the BandScope protection-name drift: even after the central verdict path is repaired, the retired Analyze (...) required contexts stay unsatisfiable until this repository's protection contract is migrated.
There is also a repository-source consistency defect: docs/security/github-required-checks.md on protected develop still lists the two retired Analyze (...) names as the intended develop and main contexts while simultaneously saying the organization/default CodeQL owner is authoritative. The setting mutation and documentation update must land as one rollout contract.
Foundation and repository-source repair
Canonical inherited-base formatter repair #1176 current exact head is 8488a02a1b36a99c94b3e248e948d754ed446750. Its tree is byte-identical to semantic repair head a7b0030a3a6cc6296a19ba3f8eaf595d470d05bd; 340b0a343ecfc05f630c7da729b8af40c7da4a2c and 8488a02a… are empty Trigger CI retry descendants. The PR still changes exactly one file, services/analysis-engine/tests/test_supply_chain_policy.py, with only the repository-pinned Ruff formatting delta. Exact 8488a02a… has terminal-success ci, build-baseline, and sbom; Security Scan, SAST Semgrep, and central CodeQL are still queued. Review threads are empty and formal review inventory is empty, so #1176 remains Draft.
Draft PR #1183 owns the repository-source half. Its exact source head remains c0db8829873b0bff8efa25371dc4ee76bf6ff3a5, stacked on #1176's semantic tree by ordinary non-force ancestry with one semantic file: docs/security/github-required-checks.md. The later #1176 retry commits change no tree bytes and create no semantic restack requirement. After #1176 normally merges, #1183 must be retargeted to fresh protected develop, materialize fresh exact-head repository/central checks, and only then proceed with the admin-side setting rollout.
Root cause
#1165 correctly removed the repository-owned PR CodeQL workflow as part of workflow consolidation, but the classic branch-protection required-context list and the repository's intended-check documentation were not migrated in the same change. GitHub matches required checks by emitted check-run context name, so the two retired names remain unsatisfiable even if central CodeQL ultimately succeeds.
This is a branch-protection/configuration defect plus distinct central-dispatch/verdict defects, not a reason to weaken CodeQL coverage or reconstruct a repository-local scanner.
Required repair
Preserve the central CodeQL security gate and migrate the two stale BandScope required contexts from:
Analyze (javascript-typescript)
Analyze (python)
to the exact current central job contexts:
CodeQL compatibility analysis (javascript-typescript)
CodeQL compatibility analysis (python)
After #1176 merges, retarget #1183 to fresh protected develop, obtain exact-head checks/review, and land its documentation update in the same rollout as the admin-side protection mutation. Independently, central .github owners must complete the current-head native scan / authenticated terminal-verdict chain so the new compatibility contexts can actually reach terminal success.
Do not solve this by deleting CodeQL from branch protection, restoring a second repository PR scanner solely to manufacture legacy names, creating a pass-through success job, synthesizing statuses, or bypassing branch protection.
Prevention / owner path
ContextualWisdomLab/.github#1923 is the central required-context-name guard owner; it protects against future producer job-name drift. ContextualWisdomLab/.github#1902 is the current rerun-recovery owner for missing authenticated terminal verdicts. The prevention invariant is that central job rename/removal, consumer required-context migration, code-current intended-check documentation, and an actually functioning exact-head verdict producer are treated as one rollout rather than independent cosmetic changes.
Closure criteria
Since protected
develop@314ddeae7b775a4957594b599358c8255617eb2e(ci: consolidate repository workflow backstops, #1165, merged 2026-09-04), the branch-protection contract and the current CodeQL producer no longer agree.Fresh live evidence — 2026-09-07
Protected
developstill requires all 14 contexts, including:The same protected snapshot removed the repository
.github/workflows/codeql.ymlthat used to emit those names. The organization-requiredCodeQL PRworkflow is live on BandScope PRs targeting the protected product branch and reportsCodeQL compatibility analysis (<language>); it does not emit the retiredAnalyze (...)names.On canonical Project Persistence #970 exact
46478c4aadb4f4ad4a5c4ed9821a6456be0db09d, CodeQL run34062487160separates two central defects from this stale-name defect. Attempt 1 detected languages successfully;CodeQL compatibility analysis (actions),(python), and(javascript-typescript)each successfully executedRequest current-head CodeQL scan dispatch, then intentionally failed atRelease runner or enforce current-head CodeQL verdictwhile awaiting the trusted handler. No authenticated terminalcodeql-dispatch/<language>status appeared on that exact BandScope head. On attempt 2, all compatibility shards fail earlier because the central required workflow treatsRUN_ATTEMPT != 1as proof a prior terminal verdict should exist and emitsExact CodeQL job was rerun without an authenticated terminal verdict.The rerun-recovery defect is canonically owned by
ContextualWisdomLab/.github#1902; BandScope's exact consumer canary has been attached there. The central producer chain also has separate dispatch/template, authorization-identity, and terminal-status publication owner paths (.github#1925/#1927/#1929/#1991). These failures remain fail closed. They are independent of the BandScope protection-name drift: even after the central verdict path is repaired, the retiredAnalyze (...)required contexts stay unsatisfiable until this repository's protection contract is migrated.There is also a repository-source consistency defect:
docs/security/github-required-checks.mdon protecteddevelopstill lists the two retiredAnalyze (...)names as the intendeddevelopandmaincontexts while simultaneously saying the organization/default CodeQL owner is authoritative. The setting mutation and documentation update must land as one rollout contract.Foundation and repository-source repair
Canonical inherited-base formatter repair #1176 current exact head is
8488a02a1b36a99c94b3e248e948d754ed446750. Its tree is byte-identical to semantic repair heada7b0030a3a6cc6296a19ba3f8eaf595d470d05bd;340b0a343ecfc05f630c7da729b8af40c7da4a2cand8488a02a…are emptyTrigger CI retrydescendants. The PR still changes exactly one file,services/analysis-engine/tests/test_supply_chain_policy.py, with only the repository-pinned Ruff formatting delta. Exact8488a02a…has terminal-successci,build-baseline, andsbom; Security Scan, SAST Semgrep, and central CodeQL are still queued. Review threads are empty and formal review inventory is empty, so #1176 remains Draft.Draft PR #1183 owns the repository-source half. Its exact source head remains
c0db8829873b0bff8efa25371dc4ee76bf6ff3a5, stacked on #1176's semantic tree by ordinary non-force ancestry with one semantic file:docs/security/github-required-checks.md. The later #1176 retry commits change no tree bytes and create no semantic restack requirement. After #1176 normally merges, #1183 must be retargeted to fresh protecteddevelop, materialize fresh exact-head repository/central checks, and only then proceed with the admin-side setting rollout.Root cause
#1165 correctly removed the repository-owned PR CodeQL workflow as part of workflow consolidation, but the classic branch-protection required-context list and the repository's intended-check documentation were not migrated in the same change. GitHub matches required checks by emitted check-run context name, so the two retired names remain unsatisfiable even if central CodeQL ultimately succeeds.
This is a branch-protection/configuration defect plus distinct central-dispatch/verdict defects, not a reason to weaken CodeQL coverage or reconstruct a repository-local scanner.
Required repair
Preserve the central CodeQL security gate and migrate the two stale BandScope required contexts from:
to the exact current central job contexts:
After #1176 merges, retarget #1183 to fresh protected
develop, obtain exact-head checks/review, and land its documentation update in the same rollout as the admin-side protection mutation. Independently, central.githubowners must complete the current-head native scan / authenticated terminal-verdict chain so the new compatibility contexts can actually reach terminal success.Do not solve this by deleting CodeQL from branch protection, restoring a second repository PR scanner solely to manufacture legacy names, creating a pass-through success job, synthesizing statuses, or bypassing branch protection.
Prevention / owner path
ContextualWisdomLab/.github#1923is the central required-context-name guard owner; it protects against future producer job-name drift.ContextualWisdomLab/.github#1902is the current rerun-recovery owner for missing authenticated terminal verdicts. The prevention invariant is that central job rename/removal, consumer required-context migration, code-current intended-check documentation, and an actually functioning exact-head verdict producer are treated as one rollout rather than independent cosmetic changes.Closure criteria
developand receives fresh exact-head repository/central checks plus review evidence required by then-live policy.developno longer requires the two retiredAnalyze (...)contexts.developrequires the two exact current central CodeQL compatibility contexts.docs/security/github-required-checks.mdnames the same current contexts and ownership model.