Repository navigation
[Bug] Admission sweep: shared history deadline starves later PRs #140
Description
Status: verified complete within the bounded-scanning scope (2026-10-26). See the acceptance evidence and before/after diagram. Separate HTTP422/status-publication failures are not claimed resolved.
Problem
The admission sweep can repeatedly fail older PRs with “Status history could not be read”, even when those PRs have not changed. The shared deadline expires while earlier PRs are evaluated; whole-sweep retries repeat the same ordering.
Related: #50. This is a new bounded-scanning defect following #98, not a reason to reopen the completed lifecycle/reporting scope of #81.
Observed evidence
Inspected main: 65147a03e465dc838770474736a620e04d72337e. The scanner is unchanged from the failed runs' policy revision 7218d48657a84f02cd2a60d1fdbbc794cfa6d49f.
| Observation | Evidence |
|---|---|
| Three attempts: 11 compliant PRs and the same 7 history-unavailable results | Run 40103754221 / job log |
| Affected targets: #113, #97, #92, #90, #55, #51, #31 | Same run; no noncompliant result in this run |
| #136 remained compliant on all attempts | Exact head f8f32f9ec51385ed137bc5c70b281b5ad0d397df; errors=[], rerun=false |
| Earlier run also exhausted history budget | Run 40101746231; it additionally contained a separate #113 noncompliance |
Both runs preceded #136's merge. Its per-PR success does not mean the repository-wide sweep succeeded. These findings come from source and CI-log inspection, not newly executed tests.
Failure path
flowchart LR
A["Start shared clock"] --> B["Evaluate earlier PRs"]
B --> C["History budget exhausted"]
C --> D["Later PRs fail closed"]
D --> E["Restart whole sweep"]
E --> A
- Constants: 60-second shared budget with a 15-second reserve.
- History guard refuses work after that effective window; serial evaluation also spends the clock on other PR processing.
- The newest-first order is retained. Runner retries restart the same prefix without progress.
- One attempt started at 14:43:28 UTC; Record Qwen3-Omni two-GPU campaign and source-grounded tuning knowledge #113's history-failure status appeared at 14:44:15, consistent with the cutoff. Per-page timing is unavailable, so not every individual read failure is independently attributed.
- The existing deadline regression checks safe failure of a later target, but not eventual progress across targets.
Smallest correction
Give each target a bounded opportunity to read complete history, while retaining an overall execution deadline and publication reserve. Retries should advance unfinished work rather than repeatedly consuming the budget on the same prefix. Choose the smallest change to the existing scanner/runner; no new service or admission framework.
Preserve: fail-closed incomplete reads, status-capacity safeguards, shared-head checks, lifecycle revalidation and the separate per-PR policy verdict.
Do not: ignore read failures, fabricate green statuses, rewrite affected PR heads, remove all bounds, or treat a larger timeout alone as a scaling fix. No model/effort policy change.
Acceptance
- Deterministic multi-PR regression consumes more than the former effective window in ordinary evaluation; later targets receive a bounded evaluation opportunity instead of starving across retries.
- Genuine history/API failures remain visible and fail closed without preventing unrelated targets from making progress.
- Overall timeout, request/page bounds and publication reserve remain explicit; retry progress is safe under PR/head/base changes.
- Existing invalidation, status-capacity and lifecycle tests pass; exact-head CI and independent review recorded.
- Existing-PR operational evidence distinguishes sweep execution from individual admission verdicts, with remaining limitations stated.
- Closeout includes a concise before/after flow or code-delta diagram.
No extra synthetic noncompliant PR, paid/model experiment, branch-protection change or #50 acceptance is required or granted by this issue.
Activity
fix: carry settled admission targets across retry attempts
fix: revalidate approval and ownership before reusing a settled target
fix: store the premises a reassessed verdict actually used
fix: give each admission target a bounded share of the sweep (#146)
Dong1017 commentedon Oct 26, 2026
Verified closeout — 2026-10-26
The bounded starvation fix in #146 is merged as
6c426e8da46c729cec1d1ada27a1e530049c7a79, from reviewed head5ac8b933133913ba2ea35d313a83e572340e0867. The owner authorized completing this issue after evidence verification. All six original criteria are met within the bounded-scanning scope.Operational evidence
The immediate trusted-main runs used policy
6c426e8…:Both final summaries had 20 compliant, #51/#90/#113 noncompliant, and #55 invalidation HTTP422; aggregate execution remained unfinished. Initial attempts are not misrepresented as all-green.
Later #153 attempt 2, policy
bcc37c55…after #154, again had zero history-unavailable. Its global summary retained 11 compliant, #90/#113 noncompliant and #51/#55 invalidation HTTP422. Its successful job was explicitly trigger-PR scoped to #153, not global-sweep success. #154 is related reporting context, not an added acceptance requirement here.flowchart LR subgraph Before A["Shared history window"] --> B["Earlier PRs consume budget"] B --> C["Later targets fail closed"] C --> D["Retry repeats the prefix"] D --> B end subgraph After E["Bounded opportunity per target"] --> F["Retain settled verdict and premises"] F --> G["Retry revalidates premises"] G --> H["Evaluate unfinished or changed targets"] H --> I["Publish verdicts; retain genuine failures"] endLimits: This resolves the shared-history-deadline starvation defect only. HTTP422 failures, noncompliant declarations, #50 operational follow-up and campaign acceptance remain distinct. No new synthetic PR, model/hardware experiment, workflow rerun or settings change was needed for this verification. Source, test assertions, independent review, CI and existing operational logs were checked; no universal all-green claim is made.