# TEX cache (auto-generated at runtime). The glob catches any variant a stray
# TEX_CACHE_DIR or a direct `pytest` run (which skips run_all.py's scratch default)
# might drop — e.g. tests/.tex_cache_test/ — so cook artifacts never reach a commit.
.tex_cache/
.tex_cache*/
**/.tex_cache*/

# Python bytecode
__pycache__/
*.pyc
*.pyo

# Build/dist artifacts
*.egg-info/
dist/
build/

# Testing
.pytest_cache/

# Editor build (node_modules only — source and bundle are tracked)
editor_build/node_modules/

# Benchmark results (machine-specific; not committed)
benchmarks/results/*
results/
# ...but a RELEASE SITTING is a committed artifact, for the same reason the compat-corpus and
# cache-key goldens are: `docs/roadmap.md` §10 item 3 makes the sitting the release's ONLY
# timing evidence, and a timing record that is not in the repository cannot be re-read,
# re-compared or argued with. One directory per sitting, whitelisted as a directory rather than
# a file list so a leg cannot be silently uncommitted. `.comfyignore` excludes `benchmarks/`,
# so none of it reaches the published archive. (`!benchmarks/results/` restores the parent that
# the `results/` line above would otherwise exclude, which would stop git descending into it at
# all; its OTHER children stay ignored by the `benchmarks/results/*` line.)
!benchmarks/results/
!benchmarks/results/sitting_*/
# What a sitting COMMITS is its README (the legs, the reads, the verdict) and the comparison
# readouts, which are small text. The raw per-leg result JSON is NOT committed: the v0.38.0
# sitting committed all sixty of them (~106,000 lines of pretty-printed samples in one commit,
# more than the rest of the repository's history), which buried the release in a line count
# that measured nothing. The raw legs are attached to the GitHub release instead, and the
# README names the attachment. (The v0.38.0 files stay tracked: an ignore rule never untracks.)
benchmarks/results/sitting_*/*.json

# Internal reports (not shipped)
optimization_reports/
error_reports/

# Intermediate benchmark JSON files from development
tests/*.json
# ...but the LANG-3 compat-corpus goldens are a COMMITTED release artifact (the PM-4 gate).
# R2-archive (v0.34): one file per frozen language version, append-only. The directory is
# whitelisted rather than a single filename, so a freeze cannot be silently uncommitted.
!tests/compat_corpus_goldens/
!tests/compat_corpus_goldens/*.json
# PERF-5's fingerprint golden is a committed artifact for the same reason: it records the
# cache-key strings at a known sha, and a golden that is not in the repo cannot gate a
# change to them. Whitelisted as a directory, so a row cannot be silently uncommitted.
!tests/perf5_goldens/
!tests/perf5_goldens/*.json
# PERF-6's tile-plan golden, likewise: it records what the cook-fit planners answer for the
# whole example corpus at a known sha, which is the only way a change to how the free-VRAM
# reading is SOURCED can be shown not to have moved a plan.
!tests/perf6_goldens/
!tests/perf6_goldens/*.json
# The known-red allowlist is a committed artifact for the same reason the goldens are: it is
# what `tools/gate.py` forgives, and a debt register that is not in the repo cannot be read,
# reviewed or emptied. It is a single file, whitelisted by name, so it cannot be mistaken for
# a development JSON that happened to land in this directory.
!tests/known_reds.json

wiki/
.coverage
