julia-ci.yml reads the ci-timings orphan branch but contains no job that writes it, so the
timings-informed LPT planning it advertises can never activate for a caller.
The header says:
timings-informed LPT planning kicks in automatically when a ci-timings orphan branch with
timings.tsv exists (else deterministic round-robin).
and the plan job implements the read (lines 60–67). Nothing in the file produces timings.tsv.
The test job does not upload per-shard timings and there is no record-timings job.
Measured, 2026-07-30
| caller |
shards |
ci-timings branch |
QAtlasHub/AbstractQAtlas.jl |
4 |
absent |
QAtlasHub/DataVault.jl |
1 |
absent |
QAtlasHub/ParamIO.jl |
1 |
absent |
lab-sotashimozono/ParaLinearAlgebra.jl (inline CI, has record-timings) |
8 |
present, updated 2026-07-30T03:33:30Z |
shards: 1 needs no timings, so DataVault and ParamIO are unaffected. AbstractQAtlas is not: it
fans out four ways and its planner has been round-robin on every run since adoption, with no path to
ever becoming anything else. The failure is silent — round-robin is a legitimate documented fallback,
so the log line "no ci-timings branch yet — round-robin fallback" looks like a first-run state
forever rather than a permanent one.
Fix
Port the producer half from ParaLinearAlgebra.jl's inline CI.yml (jobs test upload +
record-timings, lines 110–160):
test uploads test/.ci-out/timings-*.tsv as an artifact per shard;
- a
record-timings job downloads them, merges into the existing timings.tsv (latest value wins),
and force-pushes the ci-timings orphan branch. Needs contents: write.
Gate it on inputs.shards > 1 so unsharded callers pay nothing, and on github.ref == 'refs/heads/main'
so PR runs do not race each other for the branch.
Why this blocks a larger migration
lab-sotashimozono/.github has no julia-ci, and 45 repos across the three owners still carry an
inline CI.yml (6016 lines total) that this reusable is meant to absorb — see
lab-sotashimozono/.github#15. ParaLinearAlgebra's inline version does record timings, so adopting
the reusable as it stands would be a regression for it and for every other sharded repo. Fixing the
producer here first, then porting, keeps the known defect from being copied into a second hub.
Not a gap
The compat job (minimum LTS + latest) has no counterpart here, but it does not need one:
AbstractQAtlas.jl already expresses it as a second call with julia-version: "1.10", which is the
better factoring. Only the timings producer is missing.
julia-ci.ymlreads theci-timingsorphan branch but contains no job that writes it, so thetimings-informed LPT planning it advertises can never activate for a caller.
The header says:
and the
planjob implements the read (lines 60–67). Nothing in the file producestimings.tsv.The
testjob does not upload per-shard timings and there is norecord-timingsjob.Measured, 2026-07-30
shardsci-timingsbranchQAtlasHub/AbstractQAtlas.jlQAtlasHub/DataVault.jlQAtlasHub/ParamIO.jllab-sotashimozono/ParaLinearAlgebra.jl(inline CI, hasrecord-timings)2026-07-30T03:33:30Zshards: 1needs no timings, so DataVault and ParamIO are unaffected. AbstractQAtlas is not: itfans out four ways and its planner has been round-robin on every run since adoption, with no path to
ever becoming anything else. The failure is silent — round-robin is a legitimate documented fallback,
so the log line "no ci-timings branch yet — round-robin fallback" looks like a first-run state
forever rather than a permanent one.
Fix
Port the producer half from
ParaLinearAlgebra.jl's inlineCI.yml(jobstestupload +record-timings, lines 110–160):testuploadstest/.ci-out/timings-*.tsvas an artifact per shard;record-timingsjob downloads them, merges into the existingtimings.tsv(latest value wins),and force-pushes the
ci-timingsorphan branch. Needscontents: write.Gate it on
inputs.shards > 1so unsharded callers pay nothing, and ongithub.ref == 'refs/heads/main'so PR runs do not race each other for the branch.
Why this blocks a larger migration
lab-sotashimozono/.githubhas nojulia-ci, and 45 repos across the three owners still carry aninline
CI.yml(6016 lines total) that this reusable is meant to absorb — seelab-sotashimozono/.github#15. ParaLinearAlgebra's inline version does record timings, so adopting
the reusable as it stands would be a regression for it and for every other sharded repo. Fixing the
producer here first, then porting, keeps the known defect from being copied into a second hub.
Not a gap
The
compatjob (minimum LTS + latest) has no counterpart here, but it does not need one:AbstractQAtlas.jlalready expresses it as a second call withjulia-version: "1.10", which is thebetter factoring. Only the timings producer is missing.