Skip to content

The timing history stopped recording when prebuild was added - #89

Merged
sotashimozono merged 2 commits into
mainfrom
fix/timings-inherits-a-skip
Sep 6, 2026
Merged

sotashimozono merged 2 commits into
mainfrom
fix/timings-inherits-a-skip

Conversation

@sotashimozono

Copy link
Copy Markdown
Member

timings has been skipped on every run of every consumer since #36. Suites are green, shards pass, and the history the next run is planned from has not moved.

repo ci-timings last written
TestShards.jl (its own call) 2026-07-28
ITensorInfiniteMPSKit.jl 2026-07-30
ParaLinearAlgebra.jl, ITensorMPSKit.jl, EnvTPQMPS.jl, ITensorcMPS.jl, ComplexAnalysis.jl, SingleSiteDMRG.jl, FunctionMeasures.jl 2026-08-03
AbstractQAtlas.jl never

Bisection

ac87a88 (2026-07-28 08:33) recorded. f3681d7 (2026-07-28 10:17, #36) did not. Exactly one commit between them, and that run was a push to main with all eight shards green and All shards passed green.

That commit does not touch this job — timings is byte-identical across the boundary. It adds prebuild and changes test to needs: [labels, prebuild] with an if:.

The condition is not what fails

On a push to the default branch, github.event_name, github.ref and default_branch are all trivially true. And needs.test.result == 'success' is provable from the same runs: gate reads that exact value and exit 1s if it is anything else — and gate is green on every run where timings skipped.

A job whose condition is true and which is skipped anyway was not skipped by its condition. It inherited the skip. prebuild is off by default, so it is skipped on essentially every run, and a job with no status-check function in its if inherits that through the graph even though test itself ran and passed.

The two siblings that kept working are the two that carry one:

job status function outcome
collect always() && … runs
gate always() runs
timings — skipped

The change

!cancelled(), the weaker of the two, is enough — needs.test.result == 'success' still gates on the shards actually passing, so a red suite records nothing, exactly as before. This makes the job consistent with the other two in the same file.

What is and is not verified

Verified: the bisection, that the job is byte-identical across it, that needs.test.result is success on the runs where it skips, and the fleet-wide dates above.

Not verified: I could not run it. Confirming needs one push to a default branch — this PR's own merge to main is that test.

A separate observation, not in this PR

labels reads the history once and fans it out as an artifact (#53's fix for the seven-shards-agree-one-doesn't split, and for the force-push race). That upload is continue-on-error because a full artifact quota once turned every consumer red before a test ran (#74).

labels is not a matrix job, so it could carry the history as a job output instead: measured across the fleet the file is 401 B – 17.9 kB (QAtlas.jl, 325 rows), against a 1 MB per-output limit — ~57x headroom at today's largest. That would remove the read-side artifact, its download in each shard, and the needs.labels.outputs.timings == 'success' conditional, and with them the quota failure mode on that path. The write side genuinely needs artifacts: test is a matrix job and matrix legs overwrite each other's outputs.

Happy to open that separately if it is wanted; keeping it out of a bug fix.

`timings` has been skipped on every run of every consumer since #36. The suite is green, the
shards pass, and the history it plans the next run from has not moved since 2026-07-28.

Bisected to one commit. `ac87a88` recorded; `f3681d7` (#36) did not; nothing between them.
That commit does not touch this job — it is byte-identical across the boundary — it adds
`prebuild` and gives `test` `needs: [labels, prebuild]`.

The condition is not what fails. On a push to the default branch all three of its own conjuncts
are true, and `needs.test.result == 'success'` is provable from the same run: `gate` reads that
value and exits 1 if it is anything else, and `gate` is green. A job whose condition is true and
which is skipped anyway was not skipped by its condition. It inherited the skip: `prebuild` is
off by default, so it is skipped on essentially every run, and a job with no status-check
function in its `if` inherits that through the graph even though `test` ran and passed.

The two siblings that kept working are the two that carry one. `collect` has
`always() && ...`, `gate` has `always()`, `timings` had none. This gives it `!cancelled()`,
which is the weaker of the two and enough: `needs.test.result == 'success'` still gates on the
shards actually passing, so a red suite records nothing, as before.

Not verified by running it — I have no way to dispatch a push to a default branch here. What is
verified is the bisection, that the job is byte-identical across it, and that `needs.test.result`
is `success` on the runs where this skips.
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

📚 Docs preview: https://codes.sota-shimozono.com/TestShards.jl/previews/PR89/

(updates on each push to this PR)

@codecov

codecov Bot commented Sep 6, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

A behaviour fix in the shipped workflow, which is this package's product. Patch: nothing is
removed, renamed, or changed in meaning — a job that was silently skipped now runs when its
condition says it should.
@sotashimozono
sotashimozono merged commit 3c2b239 into main Sep 6, 2026
32 checks passed
@sotashimozono
sotashimozono deleted the fix/timings-inherits-a-skip branch September 6, 2026 10:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant