agentleFS
InternationalColorConsortiumInternationalColorConsortium/iccDEV/AGENTS.md

iccDEV

AGENTS.md187 starsChanged 6 months agoBSD-3-ClauseView on GitHub

This file is a short navigation aid for automated coding agents and maintainers. Detailed rules live in .github/copilot-instructions.md and .github/instructions/*.instructions.md. AGENTS.md is the canonical agent-instruction file. GitHub Copilot also recognizes CLAUDE.md (Anthropic Claude) and GEMINI.md (Google Gemini) at the repository root; both are thin mirrors that route back here so every agent shares one source of truth. Update rules here, not in the mirrors. - Check git --no-pager status --short --branch before edits. - Prefer focused changes with exact repros…

We split this AGENTS.md into the rules it gives an agent

17 rules. About 0 are common, 5 are distinctive, and 12 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 12

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Check git --no-pager status --short --branch before edits.

    line 14
  2. Distinctive:

    Prefer focused changes with exact repros and regression coverage.

    line 15
  3. Very specific:

    Keep documentation links Doxygen-safe: use relative Markdown links for generated Markdown pages and \ref for generated source files.

    line 16
  4. Very specific:

    Keep HAVE_DOT=YES for checked-in diagrams.

    line 25
  5. Very specific:

    Use 2-space C++ indentation, K&R braces, m_ members, and return-value errors.

    line 27
  6. Very specific:

    Use sanitizer builds for bug hunting.

    line 29
  7. Distinctive:

    Add the nearest regression test for behavior fixes.

    line 30
  8. Very specific:

    Before the first automated review, record a base...HEAD contract matrix for every changed cross-cutting surface: producer, consumer, …

    line 44
  9. Very specific:

    Every new or relocated ICC-owned C/C++ source or header must retain the complete BSD-3-Clause notice derived from LICENSE.md.

    line 50
  10. Very specific:

    Keep the pure Python iccdev-mcp Python 3.10+ package contract separate from the compiled iccdev CPython 3.11-3.14 wheel contract.

    line 57
  11. Distinctive:

    Keep the six command-line CFL targets as filesystem-backed CLI wrappers.

    line 155
  12. Distinctive:

    Keep them separate rather than folding serialization into the model target, so a crash stays attributable to one layer.

    line 166
  13. Very specific:

    Keep its address, undefined, and memory builds separate, pass all compiler and linker instrumentation through the OSS-Fuzz environment, …

    line 170
  14. Very specific:

    Keep cmmapply controls outside the ICC header: an optional three-byte trailer selects direction, intent, and interpolation without …

    line 179
  15. Very specific:

    Use .github/skills/wasm-build-test/SKILL.md for the current module smoke and profile parity checks.

    line 208
  16. Very specific:

    Use vs2022-clangcl-x64-avx2-diagnostics for a Windows source-level AVX2 debugging session.

    line 213
  17. Very specific:

    Use .github/scripts/iccdev-windows-clut-avx2-benchmark.ps1 for interleaved Release comparisons across 8-16 outputs.

    line 219

≈ “Common” is an estimate: at least 1 in 5 of the 36,368 AGENTS.md 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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
AGENTS.md

AGENTS.md -- iccDEV

This file is a short navigation aid for automated coding agents and maintainers. Detailed rules live in .github/copilot-instructions.md and .github/instructions/*.instructions.md.

AGENTS.md is the canonical agent-instruction file. GitHub Copilot also recognizes CLAUDE.md (Anthropic Claude) and GEMINI.md (Google Gemini) at the repository root; both are thin mirrors that route back here so every agent shares one source of truth. Update rules here, not in the mirrors.

Ground Rules

  • Check git --no-pager status --short --branch before edits.
  • Prefer focused changes with exact repros and regression coverage.
  • Keep documentation links Doxygen-safe: use relative Markdown links for generated Markdown pages and \ref for generated source files. Use absolute GitHub HTML anchors for repo-only resources; relative HTML anchors can break in the packaged site even when Doxygen emits no warning. Before handing off documentation changes, run the bounded graph-light Doxygen check in docs/documentation-maintenance.md and require an empty docs/generated/doxygen-warnings.log. Time is valuable: reserve full graph generation for release packaging or graph changes, not routine prose edits. Keep HAVE_DOT=YES for checked-in diagrams; leave CTest implementation and fixtures outside the generated package. Do not add generated output to Git.
  • Use 2-space C++ indentation, K&R braces, m_ members, and return-value errors.
  • Exit 1-127 is graceful failure. Exit 128+ is signal termination.
  • Use sanitizer builds for bug hunting; see .github/instructions/build-system.instructions.md.
  • Add the nearest regression test for behavior fixes.
  • For legacy packed intent decoding and named-color overprint behavior, keep iccApplyNamedCmm and iccApplySearch coverage aligned with .github/scripts/iccdev-applynamedcmm-cli-args-regression.sh, .github/scripts/iccdev-applysearch-cli-args-regression.sh, and .github/scripts/iccdev-namedcolor-overprint-regression-tests.sh.
  • For maintainer pre-PR validation, use the current maintainer image and local tools for applicable builds, preflight, scanners, and dynamic checks. On the pushed pre-PR branch, run ci-qa-pr with ctest-mode=full and ctest-recent-limit=0 plus ci-codeql-security on the same head. Record terminal results before opening an explicitly authorized PR. Run ci-pr-action on the PR head for final cross-platform builds, profile checks, and representative CTest coverage; it does not replace the local or pre-PR screening.
  • Before the first automated review, record a base...HEAD contract matrix for every changed cross-cutting surface: producer, consumer, build/runtime behavior, platform or toolchain boundary, CI trigger, dependency owner, and local evidence. A later update still requires the complete contract matrix, not a delta-only review. Any newly found blocker returns the branch to branch-only grooming before another review.
  • Every new or relocated ICC-owned C/C++ source or header must retain the complete BSD-3-Clause notice derived from LICENSE.md; run .github/scripts/check-license-notices.py before review. Abbreviated, placeholder, or omitted notices are blocking defects. Preserve third-party and generated-file attribution as directed by their provenance.
  • For MCP runtime checks, validate every Docker image variant against its discovered capabilities. Do not hard-code a total tool count.
  • Keep the pure Python iccdev-mcp Python 3.10+ package contract separate from the compiled iccdev CPython 3.11-3.14 wheel contract. For MCP behavior or packaging changes, use .github/skills/mcp-server-qa/SKILL.md and require source tests plus the relevant installed-package, native, or image smoke; record skipped native tests as unverified coverage.
  • The published unified container is a native linux/amd64 and linux/arm64 manifest. Build and smoke each platform before publishing a tag; Apple Silicon Docker hosts must select linux/arm64 without emulation.
  • Python CI and rolling-release wheels share _build-python-wheels.yml between ci-json-python and ci-latest-release, with Python 3.13 driving cibuildwheel 3.4.0 for all seven platform lanes. Keep installed-wheel tests and their binary NumPy dependency aligned across all lanes. Primary CI disables shared wheel artifact upload and fails on empty test collection; release CI enables explicitly named artifact intake validated by .github/scripts/validate-python-release-wheels.py with an independent --lane inventory, complete license checks, checksums, and provenance; PyPI publication uses explicit pypi_packages selection on the manual ci-latest-release.yml workflow. Keep iccdev and iccdev-mcp staging, trusted-publisher identities, outcomes, and post-publication smoke tests separate. Run public-package smoke tests after every selected publication and report their diagnostic outcomes without blocking later package publications. Require complete package inventories, dual checksums, release attestations, the protected release environment, and OIDC publishing. Validate downloaded release wheels with --release to require all 36 targets without CI identifier files. Require RECORD file coverage, secure hashes, and sizes before attestation; ZIP CRCs alone do not prove this contract.
  • Rolling-release MCP artifacts are a separate universal wheel and sdist, validated by .github/scripts/validate-mcp-release-package.py. Keep the Windows/Linux source, installed wheel, and installed sdist checks in the mcp-package job. Prove parent/child imports and console stdio/REST behavior with iccdev-mcp-package-smoke.py; do not infer installed behavior from editable installs. Preserve the iccdev_mcp namespace and optional native capability failures. MCP distributions participate in checksums/provenance; publish them through the same protected trusted-publishing workflow without combining the MCP package contract with the compiled-wheel inventory.
  • MATLAB public entry points that require arguments must provide actionable bare-invocation errors pinned by matlab/tests/test_usage_guidance.m. Interactive examples must show visible UI defaults first; label hidden or headless options as automation-only. Shape errors must explain row semantics and include copy/paste-ready single-item and batch examples.

Navigation

NeedFile
Build, test, style, CI.github/copilot-instructions.md
Apple mobile static cores and smoke appdocs/build.md
Manual iOS example app helpersexamples/ios-apply-preview/README.md, examples/ios-benchapply/README.md, examples/ios-clut-editor/README.md, .github/skills/ios-manual-examples/SKILL.md
iOS CLUT editor POCexamples/ios-clut-editor/README.md, .github/skills/ios-clut-editor/SKILL.md
AVX2 CLUT diagnostics and optimization handoffdocs/avx2-clut-diagnostics.md
Pull request preparation and handoffdocs/pre-pr-security-cycle.md
Release version bump.github/skills/version-bump/SKILL.md, .github/prompts/version-bump.prompt.md
Maintainer local Git/devenv defaultsdocs/linear-stack-workflow.md
ClusterFuzzLite integration.github/ci/cfl/README.md, .github/skills/clusterfuzzlite/SKILL.md
Pre-PR security skill.github/skills/pre-pr-security-cycle/SKILL.md
Pre-PR security prompt.github/prompts/pre-pr-security-cycle.prompt.md
Stacked PR and fast-lane workflow.github/skills/stacked-pr-fast-lane/SKILL.md
Focused pull request review.github/skills/code-review/SKILL.md
Code-review bug hunting.github/prompts/code-review-hunting.prompt.md
Regression bisect workflow.github/prompts/bisect-regression.prompt.md
Unified maintainer containerdocs/regression-container.md
Memcheck, Helgrind, DRD, Massif, and Callgrinddocs/valgrind-analysis.md, .github/skills/valgrind-analysis/SKILL.md
Regression container prompt.github/prompts/regression-container-maintainer.prompt.md
Maintainer CTest selection and CI budget.github/skills/maintainer-ci-ctest/SKILL.md
ICC.2 spectral, bi-spectral, and MCS XML QAdocs/xml-spec-qa.md, .github/skills/icc2-xml-spec-qa/SKILL.md
ICC XML and JSON corpus round-trip QAdocs/xml-json-roundtrip-qa.md, .github/skills/xml-json-roundtrip-qa/SKILL.md
New CLI tool onboarding.github/prompts/add-new-tool.prompt.md
Manual iOS examples.github/prompts/ios-manual-examples.prompt.md
iOS CLUT editor planning.github/prompts/ios-clut-editor.prompt.md
Contributor onboarding.github/prompts/contributor-onboarding.prompt.md
Apply-path throughput benchmarkTools/CmdLine/IccBenchApply/Readme.md
Native HEIF inspection and extraction QATools/CmdLine/IccHeifDump/Readme.md, .github/ci/test-data/heif/Readme.md
Security repro.github/prompts/reproduce-security-issue.prompt.md
iccSpecSepToTiff QA.github/skills/specsep-qa/SKILL.md
IIS ISAPI endpoint QA.github/skills/iis-isapi-qa/SKILL.md
Issue filing format.github/prompts/file-security-issue.prompt.md
Library hardening.github/instructions/icc-library-code.instructions.md
Workflow hardening.github/instructions/workflow-governance.instructions.md
Maintainer label systemdocs/label-system.md
Label triage prompt.github/prompts/maintainer-label-triage.prompt.md
Label triage audit agent.github/agents/maintainer-label-triage.agent.md
Testing details.github/instructions/testing.instructions.md
Python bindings.github/instructions/python-bindings.instructions.md
MATLAB MEX bindings.github/instructions/matlab-mex.instructions.md
MATLAB MEX code review.github/instructions/matlab-code-review.instructions.md
MATLAB build, IccJSON conversion, and QAdocs/matlab-bindings.md
MATLAB binding and IccJSON tests.github/skills/matlab-bindings-test/SKILL.md
MATLAB binding debug.github/prompts/debug-matlab-bindings.prompt.md
Python binding tests.github/skills/python-bindings-test/SKILL.md
MCP server QA and package/runtime handoff.github/skills/mcp-server-qa/SKILL.md, iccdev-mcp/docs/build-and-test.md
WASM build tests.github/skills/wasm-build-test/SKILL.md
MCP subprocess debug.github/prompts/debug-mcp-subprocess.prompt.md
Python/Cython debug.github/prompts/debug-python-bindings.prompt.md
Documentation maintenancedocs/documentation-maintenance.md
PCS adjustment placement (CIccPcsXform refactor)docs/pcs-adjustment-placement.md

CFL Harness Scope

Keep the six command-line CFL targets as filesystem-backed CLI wrappers. The in-process targets are the intentional exceptions: consume only public headers, compile the engine sources as separate translation units, and never include a CLI implementation or call processLuts().

grouptargetscovers
coreprofileparse, cmmapply, profilevisualize, writerserializeprofile parsing, bounded CMM application, visualization, and serialization
formatsxmlparse, jsonparse, connectconfigXML/JSON profile parsing and IccConnect configuration round trips
assessmentpawgreportin-memory PAWG assessment and compression verdicts

Keep them separate rather than folding serialization into the model target, so a crash stays attributable to one layer.

The official ClusterFuzzLite lane builds all eight in-process targets above. Keep its address, undefined, and memory builds separate, pass all compiler and linker instrumentation through the OSS-Fuzz environment, require matching Clang 21 or 22 compilers across AFL, CFL, and ClusterFuzzLite, and keep the workflow limited to manual dispatch and the nightly schedule. The ClusterFuzzLite memory build must bootstrap the pinned instrumented libc++ and libc++abi, reject libstdc++ or another libc++ at runtime, and replay the pinned #2687 artifact before fuzzing. A report crossing an uninstrumented C++ runtime boundary is not attributable to iccDEV.

Keep cmmapply controls outside the ICC header: an optional three-byte trailer selects direction, intent, and interpolation without corrupting the encoded profile size. Keep at least one schema-shaped IccConnect configuration seed in .github/ci/test-data, use the dedicated config dictionary, and preserve round-trip coverage for top-level and nested CIccCfg* objects.

Temporary CFL MSan workarounds live as individual issue patches under .github/ci/fuzz-patches/cfl. The default fuzz build attempts every patch and continues after drift or prior integration; --strict is only for maintaining the patch inventory. Retire one issue patch at a time after its normal source fix lands.

An in-process target that needs a CLUT raster also needs a corpus that still contains one. max_seed_bytes and libFuzzer's max_len both removed the only CLUT-bearing seed at their old defaults (#2120), which left such a target reporting runs, coverage and a clean exit while never executing the layer it exists to cover. Both defaults now admit it, and dropping a seed committed under .github/ci/test-data is a hard error rather than a silent prune. Raise max_len alongside the cap when adding a target that consumes large structured inputs -- they are independent gates. Validate with

.github/ci/cfl/build.sh --targets profilevisualize,writerserialize --seconds 30

WASM Scope

WASM now ships as a staged Node/npm-style module package. Do not expect or restore legacy wasm/*.html, wasm/*.css, or wasm/*.js browser UI assets. Use .github/skills/wasm-build-test/SKILL.md for the current module smoke and profile parity checks.

AVX2 CLUT Diagnostics

Use vs2022-clangcl-x64-avx2-diagnostics for a Windows source-level AVX2 debugging session. It enables ICC_AVX2_CLUT_DEBUG, which traces runtime dispatch and kernel inputs through IccSignatureUtils.h. Do not use the diagnostic preset for throughput comparisons; use the matching vs2022-clangcl-x64-avx2-qa-flags build for measurements. The focused regression is iccdev.clut-eight-output-regression. Use .github/scripts/iccdev-windows-clut-avx2-benchmark.ps1 for interleaved Release comparisons across 8-16 outputs. Windows AVX2 is a ClangCL path; native MSVC intentionally retains SSE2 after measured AVX2 regressions. Runtime AVX2 dispatch is limited to 15 outputs. Require output_vector_match=True for every benchmark row.

For Linux evidence collection, configure a separate Release build with ICCDEV_ENABLE_TELEMETRY=ON and use .github/scripts/iccdev-clut-profile.sh. The script writes timing distributions, hardware-counter CSVs, syscall summaries, and optional FlameGraph inputs; keep profiling and source-coverage builds separate from release measurements.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.