Skip to content

The two required-context shims disagree on base: a non-Dev_new_gui PR can never receive smoke-test #16200

Description

@mrveiss

The gap

The two required-context shims disagree about which PRs they cover:

# .github/workflows/docker-smoke-required-context.yml
on:
  pull_request:
    branches: [ Dev_new_gui ]

# .github/workflows/python-required-context.yml
on:
  pull_request:

docker-smoke-required-context.yml is base-filtered; python-required-context.yml is not. A pull request whose base is anything other than Dev_new_gui therefore gets python-required-context and no smoke-test context at all.

smoke-test is a required status context. A PR that can never receive it is blocked with no failing check to fix — absence, which is the one state that cannot be waited out or re-run.

Why it is latent, and exactly when it stops being

Nothing exercises it today because main is closed to pull requests by policy and every PR targets Dev_new_gui. The day someone opens a release PR into main, or any branch-to-branch PR, it stops being latent — and the symptom will be an absent required context, which is the hardest CI state to attribute. Two sessions spent a combined afternoon on an unrelated instance of absence before establishing what it was not.

The shim pattern exists so a required context is always published, including when the real job legitimately does not run — docker-smoke-required-context.yml's own header says so:

docker paths untouched -> smoke-test below, which reports the context green

A base filter is a second, undocumented condition on that guarantee, and it is present in one shim and not its sibling.

Not the cause of #16171

Recording this because it was found while investigating #16171's absent smoke-test, and it is not the explanation there — that PR's base is Dev_new_gui, so the filter is satisfied. The mechanism in that case is still unknown; the exclusion list across two sessions covers the workflow file, the branch tree, branch/base divergence, the event, the base filter, the conflict state, the approval path, rulesets, Actions policy, and the author. What survives is that it is intermittent across dependabot PRs from the same generator — #15977 and #16171 hit it, #15976/#15978/#15979/#15980 did not.

Acceptance criteria

  • Both required-context shims cover the same set of pull requests — either both carry the base filter or neither does, decided deliberately and with the reason recorded in the file
  • If the filter is kept, the workflow header states that the context is not published for other bases, so the guarantee it documents matches what it delivers
  • A test asserts every shim publishing a required context has the same trigger conditions as its siblings, so the next shim cannot drift from the set silently
  • The test enumerates shims by discovery rather than by a hand-written list, and binds a floor to what it examined

Related

Activity

  1. added this to the Backlog milestone on Sep 12, 2026
  2. mrveiss commented on Sep 12, 2026

    @mrveiss
    OwnerAuthor

    No longer latent — confirmed live and currently blocking the merge queue. Since the 2026-09-12 rename, main is the default branch and every PR targets it, which is exactly the trigger condition this issue predicted.

    Confirmed both halves of the pair are still base-filtered to the old branch, not just the shim:

    • docker-smoke-required-context.yml:37: branches: [ Dev_new_gui ]
    • docker-smoke-test.yml:11,15 (both push: and pull_request:): branches: [ Dev_new_gui ]

    So for a PR against main, neither the real smoke-test job (docker paths changed) nor its fallback shim (docker paths untouched) can ever fire — not just the shim as originally described. smoke-test is one of main's required status checks, so this affects every open PR, not just docker-touching ones.

    Concrete evidence from a same-day sweep of 55 approved-and-ready PRs targeting main: 20 of them (16414, 16489, 16492, 16496, 16497, 16498, 16500, 16503, 16508, 16509, 16518, 16523, 16534, 16544, 16550, 16553, 16555, 16560, 16564, plus 16318) show zero runs at all for smoke-test on their current head SHA — not skipped, not failed, absent. None of these touch Docker paths, so they're all waiting on the shim specifically.

    Fix is the same shape already applied correctly elsewhere in this repo (e.g. code-quality.yml, ci.yml, verify-generated-types.yml, migration-gate.yml all already list branches: [ main, Dev_new_gui ] or similar) — add main to both files' branches: lists. Given the blast radius (blocks a required context on ~1/3 of the currently-approved queue), flagging for priority.

  3. mrveiss commented on Sep 12, 2026

    @mrveiss
    OwnerAuthor

    Correction to my comment above: #16487 (the in-repo branch-rename swap, PR for #16479/#16461) already fixes exactly this — both docker-smoke-required-context.yml:37 and docker-smoke-test.yml's push/pull_request branches change from Dev_new_gui to main in that diff. So this isn't a separate unaddressed gap; it resolves the moment #16487 lands and the 20 affected PRs rebase onto the new main. Sorry for the noise — should have checked #16487's own diff before treating this as a fresh finding. Leaving this comment thread as confirming evidence that the bug was real and #16487 is the fix, not as an open ask.

  4. modified the milestones: Backlog, v0.15.0 on Sep 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions