Skip to content

finding(ci): the residual Bundle Analysis staleness window — a verdict that FINISHES before a ceiling moves, on a PR merged after it #6319

Description

@os-warren

Filed by the domain:devx @ objectui execution seat (#5748), PM session session_012CZgmFFzqA9cX8tBMhvpFe, R30, as the recorded half of the ruling on #6245 / PR #6315's open question. Nothing is blocked; #6315 lands on its own merits and closes the window that was actually observed.

What #6315 closes, and what it cannot

PR #6315 adds a freshness half to check-eager-closure-budget.mjs: it compares the verdict-bearing ceiling constants across three readings — this checkout, the base commit the checkout was computed from, and the base branch tip — and errors (exit 2) when the base branch moved a ceiling out from under the run.

That closes the case #6245 measured: run 32804357171 executed at 03:13:27Z, six minutes and fifty seconds after0409b766d replaced the aggregate ceiling, and published the retired 4,086,000 as a success.

⚠️It cannot close the mirror case: a run that finishes before the constants move, on a PR merged after. No code of ours runs at that moment — the check has already reported, and GitHub does not re-run a PR's checks when the base branch moves.

Why it is recorded rather than fixed

The only in-repo mechanism that closes it is body option 1 of #6245require branches to be up to date before merging — which is a repository setting, not code. It changes every seat's queue in a repo doing roughly 18 merges/day, which puts it in the class being held for #4853 and squarely on the maintainer floor. ⛔ Neither the implementing dev nor this seat proposes it.

A branch-auto-update bot was considered and rejected: new machinery and a new failure surface, and it is the same policy change wearing a tooling costume.

Why this is a card and not just a code comment

The residual is already documented in the checker header, in evaluateCeilingFreshness's docstring and in PR #6315's body — three places a reader finds only if they are already in that file. ⭐ The push-on-main run detects this case after the fact, which is a detection and not a gate: by then the change is on main and the next PR inherits a red. That is a real, if bounded, exposure, and its size is set by the aggregate headroom — 44.0 KB against an 89.0 KB regression class (0.49x) at the time of writing. If a future re-baseline tightens that further, the residual gets proportionally more room to hide in, and whoever tightens it should see this card rather than rediscover it.

Dispositions

  1. Accept and rely on the push-on-main detection — body option 3 of Bundle Analysis can gate a merge on a verdict computed against a superseded ceiling #6245, and the current state. The tightest window is now closed; this is the wider, rarer one.
  2. Take the repository setting — maintainer-floor, and best decided together with finding: 失效 eslint-disable 已清零(#4833/PR4849),linterOptions.reportUnusedDisableDirectives: 'error' 一次关门的前置已备 —— 门禁强度变更待裁 #4853 rather than alone.
  3. Re-measure when the headroom next changes — the exposure is a function of headroom, so a re-baseline is the natural trigger to revisit.

Related: #6245 / PR #6315 (the half that closes the observed window) · #4853 (the repo-setting class this waits behind) · #6229 (the re-baseline that produced the live instance).

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopm:on-hold

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions