Seven of ci.yml's seventeen job banners sit above the previous job's trailing
steps, so the banner and its rationale describe a job that starts 6-31 lines
further down, behind another job's sccache stats / Save sccache steps.
Reading top to bottom, # ── Valgrind (memcheck) ── is followed by three steps
that belong to linux-all-features, and only then by valgrind:. Same shape
for six more.
Verification status: reproduced
Measured on master @ a020e69c (the displacement is unchanged by the branch
that filed this). For each # ── banner, the next line that is neither blank
nor a comment:
OK hdr@92 '# ── Windows: MSVC + clang-cl ──' -> 93 'windows:'
OK hdr@208 '# ── Linux: GCC and Clang plain builds ──' -> 209 'linux-compilers:'
DISPLACED hdr@321 '# ── Linux: sanitizers + coverage (all clang) ──' -> 332 '- name: sccache stats'
OK hdr@552 '# ── Linux: coverage (clang, ladder + Qt) ──' -> 559 'linux-coverage:'
DISPLACED hdr@711 "# ── Linux: kanban's concurrent-move stress test" -> 736 '- name: sccache stats'
DISPLACED hdr@877 '# ── Linux: Qt WebSocket backend build + tests ──' -> 883 '- name: sccache stats'
DISPLACED hdr@967 '# ── Linux: application ladder testkit (path-fil' -> 973 '- name: sccache stats'
DISPLACED hdr@1363 "# ── Linux: every rung's tests under AddressSani" -> 1394 '- name: sccache stats'
DISPLACED hdr@1641 '# ── Linux: every optional feature enabled at on' -> 1658 '- name: sccache stats'
DISPLACED hdr@1919 '# ── Valgrind (memcheck) ──' -> 1928 '- name: sccache stats'
OK hdr@2094 '# ── clang-format (whole tree) ──' -> 2111 'clang-format:'
OK hdr@2150 '# ── clang-tidy-diff (changed lines only) ──' -> 2152 'clang-tidy:'
OK hdr@2340 '# ── Deprecation-marker format lint ──' -> 2342 'deprecation-lint:'
OK hdr@2373 '# ── Test file-scope type name collision lint ──' -> 2374 'test-type-name-lint:'
OK hdr@2392 '# ── Journal payload-fingerprint stamp lint ──' -> 2393 'journal-stamp-lint:'
OK hdr@2449 '# ── Install / export: find_package(morph CONFIG' -> 2460 'install-export:'
(Line numbers are from the branch of #605/#618, which adds one job and does not
move any banner; the seven displacements are all present on a020e69c.)
Every displaced banner has the same cause: the trailing sccache stats /
fastcache-cc stats / Save sccache steps were appended to each job after
the next job's banner already existed, and were inserted above it rather than
below.
Why it is worth fixing rather than tolerating
These banners are not decoration. Each carries the multi-paragraph argument for
why its job exists -- # ── Linux: every rung's tests under AddressSanitizer + UBSan ── is followed by ~30 lines explaining why ASan and UBSan but not TSan,
citing morph#128. A reader who finds that argument by scrolling attributes it to
ladder-tests, whose steps surround it, not to ladder-sanitizers, which it is
about. ci.yml is 2,4xx lines and its comments are the only documentation several
of these decisions have.
What I did not verify
- No behavioural claim: YAML comments are inert and no job's execution changes.
This is a readability defect only.
- I did not check whether the same displacement exists in the other six
workflows; the scan above covers ci.yml alone.
- I did not check git history to confirm the "appended later" explanation. It is
inferred from the uniformity of the pattern (all seven displaced banners are
displaced past cache steps, and only past cache steps), not from blame output.
What would change the verdict
Close when every # ── banner in ci.yml is immediately followed -- ignoring
its own continuation comments and blank lines -- by the <job-id>: key it
describes. The scan above is the check; it is cheap enough to run as a step, and
.github/workflows/drift-guard.yml would be its home once #614 releases it.
Re-open, or widen, if the same pattern is found in another workflow.
Found while working #605/#618, which touch ci.yml but not any of these lines.
Seven of ci.yml's seventeen job banners sit above the previous job's trailing
steps, so the banner and its rationale describe a job that starts 6-31 lines
further down, behind another job's
sccache stats/Save sccachesteps.Reading top to bottom,
# ── Valgrind (memcheck) ──is followed by three stepsthat belong to
linux-all-features, and only then byvalgrind:. Same shapefor six more.
Verification status: reproduced
Measured on
master@a020e69c(the displacement is unchanged by the branchthat filed this). For each
# ──banner, the next line that is neither blanknor a comment:
(Line numbers are from the branch of #605/#618, which adds one job and does not
move any banner; the seven displacements are all present on
a020e69c.)Every displaced banner has the same cause: the trailing
sccache stats/fastcache-cc stats/Save sccachesteps were appended to each job afterthe next job's banner already existed, and were inserted above it rather than
below.
Why it is worth fixing rather than tolerating
These banners are not decoration. Each carries the multi-paragraph argument for
why its job exists --
# ── Linux: every rung's tests under AddressSanitizer + UBSan ──is followed by ~30 lines explaining why ASan and UBSan but not TSan,citing morph#128. A reader who finds that argument by scrolling attributes it to
ladder-tests, whose steps surround it, not toladder-sanitizers, which it isabout. ci.yml is 2,4xx lines and its comments are the only documentation several
of these decisions have.
What I did not verify
This is a readability defect only.
workflows; the scan above covers
ci.ymlalone.inferred from the uniformity of the pattern (all seven displaced banners are
displaced past cache steps, and only past cache steps), not from blame output.
What would change the verdict
Close when every
# ──banner inci.ymlis immediately followed -- ignoringits own continuation comments and blank lines -- by the
<job-id>:key itdescribes. The scan above is the check; it is cheap enough to run as a step, and
.github/workflows/drift-guard.ymlwould be its home once #614 releases it.Re-open, or widen, if the same pattern is found in another workflow.
Found while working #605/#618, which touch
ci.ymlbut not any of these lines.