DECISION/ACCESS NEEDED: the CI job log Gitea returns for a commit does not correspond to that commit #126
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@sneak — this needs your access. The Actions API returns 403
user should be the owner of the repofor theclawbotaccount, so I cannot investigate it myself.What was observed
While re-reviewing PR #122, a reviewer tried to corroborate the local Docker results against CI. The PR head
ff66eccshows a greencheck / check (push)run. The job log Gitea's API returns for that run is:go build, notscript/cibuild/docker build .as.gitea/workflows/check.ymlspecifies;So the log describes a build that predates this branch entirely. The green check mark on that PR is not evidence about that code.
Why this matters beyond one PR
"CI green" has been cited as corroborating evidence on every PR in this milestone. If the association between commit and run/log is unreliable, none of those citations mean anything.
This is now the fifth check in this repo found to look authoritative while not being so, joining
script/cibuild(#115, served a cached green in 0.262s having run nothing),script/bootstrap(#117, pinned linter install skipped so the running linter may not be the pinned one),script/lint(#121, shared cache returned another codebase's findings), andscript/docker(#124, same cache hole as #115).The one piece of good news: no merge decision in this milestone rested on CI. Every
merge-readylabel was granted on locally reproduced evidence — negative controls with planted sentinels, mutation tests, and repeated cache-bypassed-raceruns. In hindsight that was the correct instinct rather than luck, and it is the reason this discovery costs nothing retroactively.What I could not determine
Whether this is:
.gitea/workflows/check.yml;Option 2 and option 4 are materially worse than 1 and 3: they would mean CI has not actually been running
script/cibuildon this repo, and the green marks reflect a build nobody has inspected.What would settle it
ff66eccin the Gitea web UI and compare against what the API returns. If they differ, it is a log-association problem (1 or 3) and the runner is probably fine.script/cibuildand adocker build, withRUN make checkgenuinely executing.RUN make checklayer — so item 3 should be checked after #122 lands, or with the cache cleared.Definition of done
Either:
script/cibuildrunning the full check; orEither outcome is fine. What is not fine is leaving a green tick that reviewers might reasonably read as meaning something.
Note
I have not changed any process on the strength of this. Reviews here already require locally reproduced evidence and will continue to, regardless of how this resolves.
[manager] RESOLVED to the benign explanation. The gate is sound; the defect is in log association only. Downgrading this from "CI may never have run" to "CI logs are unreadable/misassociated".
The experiment
A log read was impossible (Actions API returns 403 for this account), so I ran a natural experiment instead — pushing a commit that cannot pass and seeing whether CI noticed.
Branch
ci-probe-126offmain(9347a28), one new fileinternal/config/zz_ci_probe_test.gocontaining a singlet.Fatal("CI-PROBE-126: ...").make checkcannot pass on that tree.Result — CI reported
failure:What this establishes
ff66ecc. A short fail and a longer pass is what a real pipeline produces.The layer-cache defect (#115) cannot confound this. That bug only serves a cached
RUN make checkon a byte-identical tree. This commit adds a new file, soCOPY . .invalidates and everything below it must rebuild — a cached green was not available. The check step had to run, and it ran, and it failed.Revised conclusion
Of the four candidate explanations in the issue body, 1 or 3 hold — a log-retention/association bug, or an artefact of the log endpoint — and 2 and 4 are excluded. There is no stale runner. CI has been executing
script/cibuildon this repository.So the green ticks on #97, #112, #113, #118 and #122 do reflect real builds of those commits. That does not change any merge decision, because none of them rested on CI in the first place — every
merge-readylabel in this milestone was granted on locally reproduced evidence — but it is a relief rather than a new problem.What remains, and what it is worth
The logs are still wrong: the API returned a 2026-02-21 log, showing a native
go buildwith pre-#93 DNS skips, for a run on a commit that did not exist then. Combined with the 403 on the Actions API for this account, that means CI failures on this repo are currently undiagnosable by an agent — we can see that something failed, never why. Every failure has to be reproduced locally to be understood.That is an annoyance rather than a correctness problem, and it is squarely in your court since it needs owner rights. Worth checking whether the web UI shows the correct log for run 109 (fail) versus what the API returns — if they differ, it is purely an API/retention artefact and can probably be ignored.
Housekeeping
PR #127 (the probe) is closed and branch
ci-probe-126is deleted fromorigin. The failing test existed only on that branch, never touchedmain, and is gone. Nothing to clean up.Credit for the approach goes to a manager on a sibling repo, who pointed out that a deliberately-broken push proves more than a log read can — and whose own repo produced the same shape of result independently.
[manager] Second, different CI symptom — recording here since this issue already tracks CI reliability.
While reviewing PR #131, CI never ran on head
db933f3: run 111 sat at "Waiting to run" for roughly 20 minutes. PR #128 had completed in 54s shortly before, so the runner was working moments earlier.Queued, not failed — so this is not a
needs-checkssituation and it did not block the review, which substituted a realdocker build --no-cache-filter=builderinstead.Distinct from the original symptom here (a log returned for a run that predates the commit), so it may or may not share a cause. Both point at the same place: the runner and its queue are worth a look when you triage this.
Practical effect, unchanged: CI on this repo is currently neither diagnosable (Actions API is 403 for this account, logs misassociated) nor reliably timely. Reviews here already record verdicts from locally reproduced evidence rather than the green tick, so nothing is blocked — but a missing tick should be read as "CI did not report", not as a problem with the branch.