Skip to content

develop protection still requires retired CodeQL contexts after #1165; central CodeQL reports different names #1172

Description

@seonghobae

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

  • repair(ci): format consolidated supply-chain policy test #1176 is normally merged after exact-head required checks and then-live review policy are satisfied without self-approval or fabricated evidence.
  • docs(ci): align intended CodeQL contexts with central owner #1183 is retargeted to fresh protected develop and receives fresh exact-head repository/central checks plus review evidence required by then-live policy.
  • develop no longer requires the two retired Analyze (...) contexts.
  • develop requires the two exact current central CodeQL compatibility contexts.
  • docs/security/github-required-checks.md names the same current contexts and ownership model.
  • The central current-head scan/verdict path is repaired so an unchanged BandScope PR head receives authenticated terminal-success JavaScript/TypeScript and Python compatibility contexts.
  • No repository-local duplicate CodeQL PR scanner or synthetic pass-through status is introduced.
  • Fresh branch-protection, source-document, and exact-head check evidence are attached before closing.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions