check-dependency-minmax
Skill2.3k starsChanged 4 days agoBSD-3-ClauseView on GitHub
Audit which dependency versions CI really tests (from a ci.yml run's job summaries) against INSTALL.md claims and ci.yml job descriptions. Explicit slash-command use only.
We split this skill into the rules it gives an agent
16 rules. About 0 are common, 6 are distinctive, and 10 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈6
Distinctive · estimate
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 44
Read it before step 1, and add to it when something is learned.
- Very specific: line 46
When updating the skill, decide where the change belongs.
- Distinctive: line 78
Never hard-code a run URL in this skill or in files you edit.
- Very specific: line 82
If an argument names a run, use it (gh run view <id-or-url> --json ...).
- Very specific: line 85
If nothing, say so and ask.
- Very specific: line 141
Run <tool> --buildinfo (and --version if the tool has it).
- Distinctive: line 150
Treat the local build as unverified evidence: it may raise a documented maximum only after user confirmation (step 7).
- Very specific: line 170
Check the tag lists by eye: many projects have tags that are not releases or that do not sort well, so a naive sort -V | tail can be wrong.
- Very specific: line 179
Use assets/known-issues.md as context: say whether each known issue is still present, fixed, or changed.
- Distinctive: line 195
If INSTALL gives only major.minor, any tested patch release of that major.minor satisfies it (INSTALL min 3.1 is met by CI 3.1.x).
- Distinctive: line 248
Add to this list when we think of new checks.
- Very specific: line 252
Write ./dependency-report-YYYY-MM-DD.md (today's date) with: run URL and SHA.
- Distinctive: line 279
Do NOT lower claims that CI merely fails to support (a documented max newer than any tested build) unless the user asks.
- Very specific: line 293
Check assets/known-issues.md first: a fix tried before and reverted must not be proposed again unless something has changed.
- Very specific: line 298
Ask before committing anything.
- Very specific: line 301
Update assets/known-issues.md with this audit's date: add new issues, mark resolved ones, and record any newly understood "right way to fix …
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Audit the dependency versions tested in practice by our CI against what
INSTALL.md documents and what the ci.yml job descriptions and comments
claim, and against the local build. The skill has three phases:
- Gather data, run all checks, save the dated report (steps 1-6).
- Make the simple, behavior-neutral doc fixes without asking (step 7):
ci.ymldescriptions/comments andINSTALL.mdtested maxima. - Offer fixes that change code or workflows, applied only one at a time as the user selects them, with no commit without asking (step 8).
This is a LIVING DOCUMENT. When we discover a new thing worth checking, a better way to do a step, or the right fix for a problem the audit finds, update this skill as part of that work (see "Project-specific files").
Arguments: $ARGUMENTS
- First argument (optional): a GitHub Actions run URL or numeric run id for
the
ci.ymlworkflow. If omitted, use the latest SUCCESSFULci.ymlrun on the current git branch (see step 1).
Project-specific files
This skill is shared by OpenImageIO (OIIO) and OpenShadingLanguage (OSL),
whose build, test, and CI scripts are intentionally very similar.
SKILL.md and scripts/ must stay IDENTICAL in both projects. Everything
that differs between them lives in assets/, whose contents are expected
to differ:
assets/project.md: facts about this project. Read it before step 1. The buildinfo tool, the CI job naming conventions, dependency-specific quirks of the buildinfo data, the key dependencies to check in job descriptions, and where to find each dependency's latest upstream release (step 4).assets/known-issues.md: problems found by past audits of this project, their status, and the right fixes once known. Read it before step 5 and update it at the end (step 8).assets/lessons-learned.md: project-specific tips for running the audit. Read it before step 1, and add to it when something is learned.
When updating the skill, decide where the change belongs. A better method
or a new check that would apply to both projects goes in SKILL.md or
scripts/, and should be copied to the other project too (tell the user,
who will propagate it). A fact about a particular dependency, job, or past
audit of this project goes in assets/. Never put project names, tool
names, or dependency-specific details in SKILL.md or scripts/ except as
clearly marked examples.
Ground truth
- Each
ci.ymljob runssrc/build-scripts/ci-test.bash, which runs the project's buildinfo tool (<tool> --buildinfo; the tool is named inassets/project.md) and appends its output to the job's step summary ($GITHUB_STEP_SUMMARY). That output (compiler, C++ standard, and aDependencies:list) is the ground truth for what a job used. The same text is in the job log. The step summary itself is not available through the API, so use the job logs. INSTALL.mddocuments, per dependency, the minimum supported version and the maximum version tested (sometimes "and main/master").ci.ymlmatrix entries have adesc:(which becomes the job name) and#comments that state intent, such as "oldest" or "bleeding edge".
Step 0: environment
ghneeds the sandbox disabled here (TLS error otherwise); run everyghandcurlcall withdangerouslyDisableSandbox: true.- The sandbox blocks Bash writes (chmod, heredocs) under
.agents/skills; edit skill files with the Edit/Write tools and run scripts viabash/python3(no exec bit needed). - Work in the session scratchpad dir, not the repo. Put the report in the
repo root as
./dependency-report-YYYY-MM-DD.md(untracked; do not commit it). - Never hard-code a run URL in this skill or in files you edit.
Step 1: choose the run
- If an argument names a run, use it (
gh run view <id-or-url> --json ...). - Otherwise:
gh run list --workflow ci.yml --branch "$(git branch --show-current)" --status success --limit 1 --json databaseId,url,headSha,createdAtIf nothing, say so and ask; do not silently fall back to another branch. Runs on forks live in the fork's repo; if the branch has no runs in the default repo, checkgit remote -vand pass--repo. - Report the run URL, head SHA, and whether that SHA matches local HEAD
(if not, the report may not match the local ci.yml; say so, or read
ci.yml at that SHA with
git show <sha>:.github/workflows/ci.yml).
Step 2: fetch job logs and parse buildinfo
gh run view <run> --log fails ("too many API requests"); fetch per job
(--job <id>), which the script below does.
bash scripts/fetch_logs.sh <run-id-or-url> <outdir> [--repo owner/name]downloads every job's log in parallel to<outdir>/logs/<jobid>.log(and a job list to<outdir>/jobs.tsv). Paths are relative to this skill's directory.python3 scripts/parse_buildinfo.py <outdir> [dep ...]writes<outdir>/parsed.json(per job: name, compiler, C++ std, deps),<outdir>/versions.txt(all distinct versions per dependency, includingCMake; the direct input for table A), and prints a per-dependency pivot (version -> jobs).
Notes on the data:
- Log lines are interleaved with shell trace (
+ echo ...), and longDependencies:lines can wrap onto indented continuation lines. The parser handles this; if the format of--buildinfochanges, fix the parser first. The parser finds the buildinfo block by its first line,<PROJ> <version> | <platform>, so it needs no project-specific setting. - Jobs with no buildinfo (ABI checks, clang-format, anything with
skip_tests) are excluded; say so in the report. - Duplicate entries in
Dependencies:are normal; the first wins. NONEmeans looked for and not found; a dependency that is absent from the list was not requested or disabled. A dependency with no version (presentin the parsed data) was found but its version was not detected.- buildinfo does not report CMake; the parser takes it from the
-- CMake X.Y.Z(or-- Using CMake version X) status line early in the build step of the log and adds it to deps asCMake. - Further quirks of particular dependencies (versions that are API levels
rather than releases, dependencies buildinfo does not report, and so on)
are listed in
assets/project.md. - A version reported for a main/master build is that tree's own version
string (e.g., a dependency's master may still say the last release), so
"master" cannot be confirmed from the summary alone. When it matters,
grep the job log (strip the log prefix first) with
grep -o -E "git clone [^ ]+ [^ ]+( -b;[a-z]+)?|git checkout [a-zA-Z0-9._-]+ --force"and compare against the upstream master's version header.
Step 2b: the local build
Also gather what the current local tree builds with, since the developer's machine may have compilers or dependencies newer than CI can get.
- Find the built buildinfo tool (named in
assets/project.md):find dist build -maxdepth 4 -name <tool> -type f 2>/dev/null. If several, or none, ask which to use (or whether to build first). - Run
<tool> --buildinfo(and--versionif the tool has it); parse the same way as CI (compiler line andDependencies:). Record the binary's path and modification time, and compare its version to HEAD; warn if it looks stale. <build>/CMakeCache.txtgives compiler paths,CMAKE_CXX_STANDARD, and*_ROOT/*_DIRhints if a version is ambiguous;cmake --versiongives the local CMake.- Local Python and NumPy versions (
python3 -c 'import sys,numpy') if the bindings were built. - Treat the local build as unverified evidence: it may raise a documented maximum only after user confirmation (step 7).
Step 3: read the claims
INSTALL.md"Dependencies" section: min, and "tested through" (and main/master) per dependency and per compiler/CMake..github/workflows/ci.yml: every matrix entry'sdesc, comments, and the version-pinning env vars insetenvs(e.g.<DEP>_VERSION,*_GIT_TAG,*_BUILD_VERSION,*_ver:inputs,container:,runner:).- Defaults for locally built deps live in
src/cmake/build_*.cmake(*_BUILD_VERSION) andsrc/build-scripts/build_*.bash. Check that each pin inci.ymluses the variable name the script actually reads.
Step 4: find latest upstream releases
Query real upstream state; do not trust memory. Use tags (many projects
have no GitHub "releases"), filter out rc/beta/dev, sort -V | tail.
Also confirm with gh api repos/<r>/releases --jq where releases exist.
Check the tag lists by eye: many projects have tags that are not releases
or that do not sort well, so a naive sort -V | tail can be wrong.
Where to look for each dependency, with any tag filter it needs, is the
table in assets/project.md. If a dependency is missing from it, find its
upstream and add it there.
Step 5: analyses to perform
Use assets/known-issues.md as context: say whether each known issue is
still present, fixed, or changed.
A. Per-dependency table, with exactly these columns:
| Dependency | INSTALL min/max | CI versions | Latest |
|---|---|---|---|
| libFoo | 1.5 - 3.2 | 1.5.2, 1.8.4, 2.0.5, 3.0.1, 3.2.1, main | 3.2.1 |
| libBar | *3.0* - *4.0* | 3.1, 3.2, 3.8 | *4.2* |- "INSTALL min/max": the documented minimum and maximum tested.
Bold the min or max (
*x*in the example above; use**x**in the real report) if it does NOT reflect what CI tests as its min or max, respectively. - If INSTALL gives only major.minor, any tested patch release of that major.minor satisfies it (INSTALL min 3.1 is met by CI 3.1.x). If INSTALL gives a full major.minor.patch, the table must flag it (bold) when CI does not test that exact release.
- "CI versions": every distinct version tested by any CI job (from the
buildinfo pivot), ascending, with
main/masterlast if a job really builds from it (see step 2 notes). Include compilers (gcc, clang, Apple clang, MSVC, icx), CMake, Python. CMake versions come fromparsed.json/versions.txt(keyCMake, taken from the build log; see step 2 notes), so list them like any other dependency and never report CMake as "not verified". Ignore jobs that do not build (clang-format). - "Latest": the highest tagged release upstream (step 4), if it can be detected. Bold it if it is newer than anything CI tests.
B. "oldest" jobs (see assets/project.md for which jobs claim to be
oldest/minimum): is every dependency at the INSTALL minimum? List each
that is not, and why (system package, pin ignored, pin commented out,
dependency not installed, different pins between the gcc and clang
variants).
C. "latest releases" jobs: is every dependency at the newest tagged release from step 4? List each that is not. Mark ones that are apt or Homebrew system packages versus pinned by us.
D. "bleeding edge" job: which dependencies are on main/master, which fall back to the latest tag, which are neither (system packages), and which are disabled.
E. Description check: for every matrix entry, compare the desc and the
comments against the summary (compiler and version, C++ std, Python,
the key dependencies listed in assets/project.md, simd, and any
"main"/"oldest"/"latest" claim). Runner-image compilers drift (Apple
clang, gcc from apt), and so do default dependency versions, so the
summary, not the name, is right. Also check nametags for stale
version strings.
F. INSTALL.md claims of "main"/"master": each must correspond to a job that really builds that dependency from main/master.
G. INSTALL.md minimum claims that no job exercises, and jobs that pass below the documented minimum (e.g., ASWF containers shipping an older system library).
H. Pin sanity: every version-pinning variable in ci.yml must be one the
build scripts read (see step 3), and must show up in the summary.
I. Local build (from step 2b): for each compiler, CMake, or dependency where the local tree's build is NEWER than the newest CI job achieves, list it as a candidate documented maximum (needs user confirmation before INSTALL.md is changed, see step 7). Also note anything local that is older than INSTALL's minimum.
Add to this list when we think of new checks.
Step 6: report (phase 1 ends here)
Write ./dependency-report-YYYY-MM-DD.md (today's date) with: run URL and
SHA; local build info (step 2b); table A; sections B-I; status of each
known issue; a "Not verified" list (things buildinfo cannot show). Show a
concise version to the user. Be concrete: name job, variable, version. Do
not publish externally unless asked. Do not commit the report.
Step 7: simple fixes, done unconditionally (phase 2)
These do not change what CI does, and are trivially revertible by the user before committing, so make them without asking. Do not commit them.
ci.ymldesc:strings,nametag:version strings, and#comments must reflect what each job actually tests per its summary (E). Say in your final message thatdescis the job name, so renaming can break required-status-check rules.INSTALL.mdmust reflect the actual maximum tested version:- Where CI tests something newer than INSTALL's "tested through", update it.
- Where INSTALL says "and main/master", keep it only if a job really builds that dependency from main/master; otherwise remove it. Add "and main/master" where a job really does.
- Local-build maxima (step 2b, analysis I): FIRST list every case where the local tree's build uses a compiler or dependency newer than the newest CI achieves, and ask the user to confirm that these should be recorded as the documented maximum on the assumption that they work. Edit INSTALL.md only for the confirmed ones. (Do the CI-based edits without waiting for this answer.)
- Do NOT lower claims that CI merely fails to support (a documented max newer than any tested build) unless the user asks; list them in the summary instead.
Step 8: fixes that change code or workflows (phase 3)
These change behavior of CI or the build. Never batch them and never apply them without a decision.
- Build a numbered list of candidate fixes from analyses B, C, D, G, H (for
example: pin variable with the wrong name, missing or commented-out
pin, job not at its stated minimum or latest, system package instead of
a pinned version, disable flag that has no effect). For each: what is
wrong, evidence (job, variable, log line), proposed change, risk.
Check
assets/known-issues.mdfirst: a fix tried before and reverted must not be proposed again unless something has changed. - Present the list and let the user pick items ONE AT A TIME (use AskUserQuestion, or ask in prose). Apply only the chosen item, then show the diff before moving to the next.
- Ask before committing anything. Follow the repo and user commit rules
(only an
Assisted-by:trailer, terse messages). One commit per fix, separate from the phase 2 doc edits unless the user says otherwise. - Update
assets/known-issues.mdwith this audit's date: add new issues, mark resolved ones, and record any newly understood "right way to fix it". Add anything learned about running the audit itself toassets/lessons-learned.md, or to this file if it applies to both projects (see "Project-specific files").
Trending
Steady talk.about the whole repository
Who's talking about AcademySoftwareFoundation/OpenShadingLanguage
- A Hacker News story“Open Shading Language – Advanced shading language for production GI renderers”Hacker News · Aug 23, 2021 · 54 points
- github-linguist/linguist“Open Shading Language”GitHub · Jan 19, 2025 · 2 reactions
- appleseedhq/appleseed“Osl update to 1.13”GitHub · Jul 29, 2025 · 1 reactions
- GafferHQ/dependencies“Update OpenImageIO, OSL, Cycles and others”GitHub · Jun 3, 2025 · 1 reactions
- AcademySoftwareFoundation/OpenImageIO“ci: cache the dependencies that Windows CI builds from source”GitHub · Oct 26, 2026
The biggest 5 of 38 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 38
Talked about on GitHub and Hacker News (38 times).
On GitHub · 37
- Jan 19, 2025Open Shading Language — github-linguist/linguist2 reactions
- Jul 29, 2025Osl update to 1.13 — appleseedhq/appleseed1 reaction
- Jun 3, 2025Update OpenImageIO, OSL, Cycles and others — GafferHQ/dependencies1 reaction · 2 comments
- Oct 26, 2026ci: cache the dependencies that Windows CI builds from source — AcademySoftwareFoundation/OpenImageIO0 reactions · 1 comment
- Aug 3, 2026openshadinglanguage: 1.15.5.0 -> 1.15.6.0 — NixOS/nixpkgs0 reactions · 3 comments
32 more on GitHub
- May 20, 2026OCIO 2.3.2 doesn't build in 2023.3 image due to invalid hex constant in mz.h — AcademySoftwareFoundation/aswf-docker0 reactions · 3 comments
- May 6, 2026openshadinglanguage: 1.15.3.0 -> 1.15.5.0 — NixOS/nixpkgs0 reactions · 3 comments
- Mar 10, 2026openshadinglanguage: 1.15.1.0 -> 1.15.3.0 — NixOS/nixpkgs0 reactions · 1 comment
- Dec 2, 2025osl: 1.14.7.0 -> 1.15.1.0 — NixOS/nixpkgs0 reactions · 2 comments
- Nov 14, 2025Encountered a shader codegen related exception for the following node: ND_surfacematerial, ND_geompropvalueuniform_filename, ND_blur_float, ND_blur_color3, etc. — AcademySoftwareFoundation/MaterialX0 reactions · 6 comments
- Nov 10, 2025MaterialXGenOsl_LibsToOso: Unable to generate OSL shaders with ND prefix — AcademySoftwareFoundation/MaterialX0 reactions · 4 comments
- Aug 8, 2025osl: 1.14.6.0 -> 1.14.7.0 — NixOS/nixpkgs0 reactions
- Jul 3, 2025osl: 1.14.5.1 -> 1.14.6.0 — NixOS/nixpkgs0 reactions
- Feb 21, 2025Integrating matrix multiplication fix from OSL — AcademySoftwareFoundation/OpenColorIO0 reactions · 1 comment
- Jan 3, 2025Reference geometric normal in `mx_forward_facing_normal` — AcademySoftwareFoundation/MaterialX0 reactions
- Oct 10, 2024Undefined behavior in Vec::operator[] — AcademySoftwareFoundation/Imath0 reactions · 8 comments
- Sep 14, 2024osl: 1.13.10.0 -> 1.13.11.0 — NixOS/nixpkgs0 reactions
- Aug 21, 2024Align smoothstep edge cases with OSL — AcademySoftwareFoundation/MaterialX0 reactions
- Jun 11, 2024Dev Days 2024 Project Application - Open Shading Language — AcademySoftwareFoundation/tac0 reactions · 1 comment
- Jun 3, 2024osl: 1.13.9.0 -> 1.13.10.0 — NixOS/nixpkgs0 reactions
- May 2, 2024osl: 1.13.8.0 -> 1.13.9.0 — NixOS/nixpkgs0 reactions
- Apr 4, 2024ArnoldTextureBackTest : Hack around OSL bug — GafferHQ/gaffer0 reactions
- Apr 2, 2024osl: 1.13.7.0 -> 1.13.8.0 — NixOS/nixpkgs0 reactions
- Mar 2, 2024osl: 1.13.6.1 -> 1.13.7.0 — NixOS/nixpkgs0 reactions
- Feb 2, 2024osl: 1.12.14.0 -> 1.13.6.1 — NixOS/nixpkgs0 reactions
- Nov 20, 2023osl: fix build, 1.12.13.0 -> 1.12.14.0 — NixOS/nixpkgs0 reactions · 7 comments
- Nov 14, 2023[Bug][CI Image][osx] fatal error: 'wchar.h' file not found — microsoft/vcpkg0 reactions · 9 comments
- Oct 21, 2023Build failure: osl — NixOS/nixpkgs0 reactions · 3 comments
- Sep 7, 2023Intermittent crash in LLVM when used from OSL (Open Shading Language) in interactive use case (seemingly due to insufficient 32 bit relocation offsets?) — llvm/llvm-project0 reactions · 33 comments
- May 5, 2023osl: 1.12.11.0 -> 1.12.12.0 — NixOS/nixpkgs0 reactions
- Jan 19, 2023ShadingEngine : Prototype support for OSL SIMD — GafferHQ/gaffer0 reactions · 9 comments
- May 29, 2022Fix incorrect transform in genosl — AcademySoftwareFoundation/MaterialX0 reactions · 9 comments
- Dec 9, 2021Different translucent closure def in stdosl.h compared to OSL — AcademySoftwareFoundation/MaterialX0 reactions · 14 comments
- Nov 22, 2021OSLCode : Check for empty `.oso` files — GafferHQ/gaffer0 reactions · 1 comment
- Nov 5, 2021[New Port Request] Open Shading Language — microsoft/vcpkg0 reactions · 1 comment
- Jun 6, 2021Create an onboarding process/document — vfx-rs/openexr-bind0 reactions
- Mar 23, 2021Added initial draft for OSL closures — AcademySoftwareFoundation/MaterialX0 reactions · 4 comments
On Hacker News · 1
- Aug 23, 2021Open Shading Language – Advanced shading language for production GI renderers54 points · 8 comments
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
- AcademySoftwareFoundation/OpenImageIO★ 2.4k100% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository3 other files it gives its agents.
- AGENTS.mdAGENTS.md
- prepare-patch-releaseSkill
- release-notes-updateSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

