Research 0905 — .gitignore + .github/workflows/ staleness audit (2026-05-30)¶
Question¶
After the ADR-0700 directory rename (libvmaf/ → core/, python/vmaf/ → compat/python-vmaf/) and the post-rebrand workflow additions, which .gitignore rules now match no real artefact and which workflow files have never fired? Remove the genuinely dead entries without overlapping the in-flight .gitignore PRs (#321,
330).¶
Method¶
- Enumerated every
.gitignorein the worktree (find . -name .gitignore) — 12 files. For each rule, ran a direct existence probe in the current tree (ls/find/git check-ignore). - Diffed PR #321 (libvmaf → core rename) and PR #330 (Go binary anchoring) to identify lines other agents are already rewriting, so this PR leaves them alone.
- Enumerated every workflow in
.github/workflows/(24 files) and queried the last run for each viagh run list -R VMAFx/vmafx -w <name> --limit 1. For the ones that returned no runs, read the workflow'son:triggers to distinguish "dead" from "dormant by design" (release / cron schedule not yet hit / newly added). - For each candidate-stale gitignore path, cross-checked any referencing build script or documentation (
testdata/generate.sh,mkdocs.yml,setup.py) to ensure the rule is not a forward-looking gate against a generated artefact.
Findings¶
.gitignore (root)¶
| Rule | Status | Action |
|---|---|---|
.gradle/ | Stale — no Gradle in repo, no build.gradle*, never created. | Remove. |
.idea/ | Standard JetBrains pattern; conservative keep. | Keep. |
.tox/ | python/tox.ini exists — actively used. | Keep. |
.pypirc | No PyPI publishing path in repo; ad-hoc dev concern only. | Remove. |
vmaf_output.xml | CLI output file, may regenerate on user invocation. | Keep. |
compile_commands.json | Generated by meson — actively used by IDE. | Keep. |
ai/data/* (with re-allowlist) | Per ADR-0203, ADR-0325, ADR-0335 — load-bearing tracked files in the allowlist. | Keep. |
testdata/*_{1280x720,1920x1080,3840x2160}_*.yuv | Output of testdata/generate.sh. | Keep. |
testdata/bbb/*.yuv, testdata/bbb/results/, testdata/bbb/{ref,dis}_3840x2160_30f.yuv | Forward-looking — used by scripts/perf/bench-multi-resolution.sh, testdata/bench_all.sh, docs/benchmarks.md, etc. Dir is intentionally created at bench time. | Keep. |
*.mp4, *.mkv | Standard large-binary guard. | Keep. |
python/vmaf/matlab/**/*.mex* family (11 rules) | Stale path — after ADR-0700, matlab lives at compat/python-vmaf/matlab/. | Rewire to new path. |
.corpus/ | Per CLAUDE.md §12: large fixtures. | Keep. |
.workingdir/, .workingdir2/ | Per CLAUDE.md. | Keep. |
corpus.jsonl, tools/vmaf-tune/{build,dist,*.egg-info}/ | Per ADR-0237 (vmaf-tune Phase A). | Keep. |
tools/external-bench/** patterns | Per ADR-0332. | Keep. |
.zed/local/, .claude/settings.local.json, .claude/scheduled_tasks.lock, .claude/worktrees/ | Per-user / per-machine. | Keep. |
preprints202604.0035.v1.pdf | Ad-hoc download; never committed; no docs reference. | Keep (defensive; tiny rule, removing it adds zero clarity). |
build-docs/ | mkdocs.yml has site_dir: build-docs/site — actively used. | Keep. |
libvmaf/subprojects/... (4 rules) | PR #321 owns these — leave untouched. | Skip. |
model/tiny/training_runs/, model/u2netp_mirror.* | Per ADR-0325. | Keep. |
vmafx-server, vmafx-mcp, vmafx-tune (Go binaries) | PR #330 owns these — leave untouched. | Skip. |
/target/, **/*.rs.bk, bindings/rust/**/Cargo.lock | Per ADR-0702 (Rust workspace). | Keep. |
*.ncu-rep | Standard Nsight Compute report. | Keep. |
Upscaled perf fixtures testdata/ref_1920x1080_48f.yuv etc. | Generated by testdata/generate.sh. | Keep. |
python/.gitignore¶
| Rule | Status | Action |
|---|---|---|
vmaf/externals.py | Stale — file lives at compat/python-vmaf/resource/example/externals.py, not under python/vmaf/. | Remove. |
test/resource/{icpf,mp4,test_image_yuv,test_images,yuv,tiff,y4m} | Stale — none of these subdirs exist in python/test/resource/. | Remove. |
adm_dwt2_cy.c* | Stale at python scope — Cython source is at compat/python-vmaf/core/adm_dwt2_cy.pyx; generated .c would land next to it, not under python/. | Replace with explicit root-level rule. |
Resolution: rewrite python/.gitignore as a brief documentation stub; add compat/python-vmaf/core/adm_dwt2_cy.{c,cpp} rules to the root .gitignore adjacent to the matlab block.
Workspace .gitignore files (10 files)¶
compat/python-vmaf/matlab/.gitignore (*~) and the nine compat/python-vmaf/workspace/*/.gitignore (* + !.gitignore) all follow the standard "keep dir tracked, ignore contents" pattern. Keep as-is.
.github/workflows/¶
24 workflow files total. Last-run conclusions:
- Active (success / failure / skipped — recent runs): 19 workflows have at least one run in the last 24 h. Skipped runs are
paths-filterexclusions (e.g.build.ymlskips when no C source touched), not staleness. - No-runs-yet: 5 workflows (
supply-chain.yml,upstream-watcher.yml,upstream-ffmpeg-hip-hwdec-watcher.yml,upstream-netflix-645-hdr-model-watcher.yml,upstream-netflix-955-watcher.yml). Investigation: supply-chain.yml— trigger isrelease: published+workflow_dispatch. Dormant until the first signed release; not dead.- Four
upstream-*-watcher.yml— cron0 6 * * 0/15 6 * * 0/30 6 * * 0/0 8 * * 1, all weekly. Files added 2026-05-30 (today, via PR #242). The first cron tick hasn't landed yet;workflow_dispatchis wired in. Not dead.
Result: zero workflow removals.
Decision¶
- Remove
.gradle/,.pypircfrom root.gitignore. - Rewire 11 matlab MEX patterns from
python/vmaf/matlab/**tocompat/python-vmaf/matlab/**. - Rewrite
python/.gitignoreas a 6-line documentation stub (explaining the post-ADR-0700 layout). - Add
compat/python-vmaf/core/adm_dwt2_cy.{c,cpp}to root.gitignoreto cover the Cython-generated C in its new home. - Leave PR #321 (
libvmaf/subprojects/rewire) and PR #330 (Go binary anchoring) lines untouched — no merge conflicts. - No workflow files removed.
Per-category removal count¶
| Category | Removed | Rewired | Added |
|---|---|---|---|
Root .gitignore rules | 2 (.gradle/, .pypirc) | 11 (matlab paths) | 2 (Cython output) |
python/.gitignore rules | 9 (stale legacy paths) | 0 | 6-line doc stub |
| Workflow files | 0 | 0 | 0 |
| Workspace gitignores (10) | 0 | 0 | 0 |
References¶
- ADR-0700 (directory rename
libvmaf/→core/,python/vmaf/→compat/python-vmaf/). - ADR-0203 / ADR-0325 / ADR-0335 (
ai/data/allowlist invariants). - ADR-0237 (vmaf-tune Phase A scratch outputs).
- ADR-0332 (external-bench harness scratch).
- ADR-0702 (Go + Rust workspace artefacts).
- PR #321 (in-flight: IDE / lint paths post-ADR-0700; rewires
libvmaf/subprojects/...). - PR #330 (in-flight: Go binary roots
/vmafx-*). - PR #242 (added the five no-runs-yet workflows on 2026-05-30).
- Source: agent task brief 2026-05-30.