ADR-1227: Workflow display names are short labels; the axis list lives in the file¶
- Status: Accepted
- Date: 2026-09-07
- Deciders: Lusoris
- Tags: ci, docs, fork-local
Context¶
ADR-0116 §2 set the workflow-level name: convention as "Title Case, with an em-dash separating area from scope/axis list", giving names like:
Tests & Quality Gates — Netflix Golden / Sanitizers / Tiny AI / Coverage (72)
Security Scans — Semgrep / CodeQL / Gitleaks / Dependency Review (64)
libvmaf Build Matrix — Linux/macOS/Windows/ARM × CPU/SYCL/CUDA (62)
FFmpeg Integration — Linux/macOS × gcc/clang + SYCL (51)
Upstream watcher — FFmpeg HIP hwdec (closes T-FFMPEG-HIP-FILTER-DEFERRED) (73)
That reads well in a YAML file. It renders badly everywhere the name is actually consumed. GitHub's badge.svg endpoint paints the workflow name into the badge, so the seven status badges at the top of README.md — whose link labels are already the short Tests / Security / Builds / FFmpeg — render as 60-to-70-character banners that wrap the README header onto several lines. The same names crowd the Actions sidebar and gh run list output.
The irony is that ADR-0116's sibling rule already fixed this one level down: docs/development/ci-job-names.md sets a ≤30-character budget for job display names, with the reasoning that verbose parentheticals and citations belong in workflow comments rather than the check name. Workflow names were simply never brought under the same rule.
Decision¶
We will apply the existing ≤30-character job-name budget to workflow-level name: fields as well, superseding ADR-0116 §2 (workflow name:) only. Every other clause of ADR-0116 stands: filenames stay purpose-descriptive kebab-case, job names keep their Title Case axis tags, and status-check contexts keep deriving from job names.
The axis list the old convention carried in the name moves to a comment at the top of the workflow file, where it does not have to fit in a badge.
Filenames do not change. The badge and Actions URLs are keyed on the filename, so this is a label-only edit — no README badge URL churn, no branch-protection re-pin, and no re-pointing of any workflow_run trigger (none of the renamed workflows is referenced by name).
Applied:
| File | Before | After |
|---|---|---|
tests-and-quality-gates.yml | 72 chars | Tests |
security-scans.yml | 64 chars | Security |
libvmaf-build-matrix.yml | 62 chars | Builds |
ffmpeg-integration.yml | 51 chars | FFmpeg |
e2e-k8s.yml | 45 chars | E2E |
dev-container-build.yml | 29 chars | Dev Container |
dev-container-publish.yml | 21 chars | Dev Container Publish |
docker-publish-production.yml | 25 chars | Publish Production |
docker-publish-operator-node.yml | 28 chars | Publish Operator Node |
fuzz.yml | 24 chars | Fuzz |
sycl-parity.yml | 24 chars | SYCL Parity |
upstream-ffmpeg-hip-hwdec-watcher.yml | 73 chars | Watcher — FFmpeg HIP hwdec |
upstream-netflix-955-watcher.yml | 61 chars | Watcher — Netflix#1494 |
upstream-netflix-645-hdr-model-watcher.yml | 50 chars | Watcher — Netflix HDR model |
The four names the README badges render are deliberately made identical to the badge link labels that were already there, so the badge text and the link text finally agree.
Alternatives considered¶
| Option | Pros | Cons | Why not chosen |
|---|---|---|---|
| Leave the names and drop the badges from the README | No CI churn | The badges are the fastest signal of whether master is green; removing a user-facing surface to avoid renaming a label is backwards | Rejected |
| Shorten only the four workflows the README badges point at | Minimal diff | Leaves the same defect in the Actions sidebar for the other ten, and the next badge added re-opens it | Rejected — fix the rule, not the four instances |
Use shields.io static badges with hand-written labels | Full control of badge text | Static badges do not show live status, which is the entire point of these seven | Rejected |
Keep the axis list but abbreviate it (Tests — Golden/ASan/AI/Cov) | Retains some axis information | Still 26+ chars of noise in a badge whose job is to say pass/fail, and the abbreviations need their own glossary | Rejected — the axis list belongs in the file |
Consequences¶
- Positive: the README header renders on one line again; the Actions sidebar and
gh run listbecome scannable; badge text and link label agree. - Negative: a workflow's axis coverage is no longer visible from its name alone — a reader has to open the file (or
docs/development/ci-job-names.md) to see which legs it runs. The header comment carries it. - Neutral / follow-ups:
docs/development/ci-job-names.mdgains a workflow-name section so the two budgets are documented together. HistoricalCHANGELOG.mdandchangelog.d/entries quoting the old names are left alone: they are an accurate record of what the names were at the time.
References¶
- req: the user asked for the CI names to be shortened so the badges render correctly again.
- ADR-0116 — superseded on the workflow
name:clause only. docs/development/ci-job-names.md— the ≤30-character job-name budget this extends.