# Release preparation logs and upload-ready artifacts
verify-logs/
release-artifacts/

# Benchmarking runs
benchmark/

# Bootstrapping demo runs
bootstrap/

# Hydra wiki
wiki/

# Old files
old/

# Haskell / Stack / Cabal
.ghcup/
.stack-work
dist-newstyle/
stack.yaml.lock
*.cabal

# Java / Gradle
.gradle
gradle.properties
build

# IDEs
.bsp/
.idea
*.iml
.vscode

# Python
__pycache__/
*.pyc
.venv/
.venv-*/
.pytest_cache/
.ruff_cache/

# Clojure CLI tools.deps cache
.cpcache/

# Node
node_modules/

# sbt build artifacts
project/target/
/target/
# heads/scala has no build.sbt — these are orphan sbt scratch dirs
heads/scala/target/
heads/scala/project/
# orphan sbt scratch dir at the repo root (no root build.sbt; canonical build is heads/scala)
/project/

# Run logs
runs/

# Analysis notebooks and debug scripts
analysis/
debug_*.py
debug_*.hs
debug_*.clj

# Working documents (local only)
docs/reviews/
docs/work/

# Package distributions.
# dist/json/ is the source of truth (tracked). dist/haskell/ is tracked
# through the 0.15 release to support bootstrapping from a fresh clone.
# All other target-language trees are regenerated from dist/json/ and
# not checked in.
#
# Exception within the tracked dist/haskell/ tree (#418): the hand-written
# distribution-package content that sync-haskell.sh OVERLAYS from its canonical
# home under the top-level overlay/haskell/ tree is NOT committed — it would
# duplicate the canonical source, and the whole dist/haskell/ tree leaves Git
# after 0.16.0 anyway. The canonical copies under overlay/haskell/ ARE tracked.
#   - hydra umbrella package (entirely copied)
dist/haskell/hydra/
#   - hydra-kernel hand-written runtime (copied from dist-packages/hydra-kernel/)
dist/haskell/hydra-kernel/src/main/haskell/Hydra/Settings.hs
dist/haskell/hydra-kernel/src/main/haskell/Hydra/Kernel.hs
dist/haskell/hydra-kernel/src/main/haskell/Hydra/Haskell/Lib/
dist/haskell/hydra-kernel/src/main/haskell/Hydra/Dsl/Terms.hs
dist/haskell/hydra-kernel/src/main/haskell/Hydra/Dsl/Literals.hs
dist/haskell/hydra-kernel/src/main/haskell/Hydra/Dsl/Meta/Common.hs
#   - hydra-kernel hand-written test bridge (overlaid from overlay/haskell/.../src/test/)
dist/haskell/hydra-kernel/src/test/haskell/Hydra/Test/TestEnv.hs

dist/clojure/
dist/common-lisp/
dist/coq/
dist/emacs-lisp/
dist/go/
dist/java/
dist/python/
dist/scala/
dist/scheme/
dist/typescript/
dist/wasm/

# Test-cache artifacts written by Layer 2.5 testers.
dist/haskell/test-cache.json

# Per-package input-hash cache stamps written by assemble-distribution.sh
# to short-circuit redundant work. Local caches, not part of the build.
dist/haskell/*/.main-input-hash.txt
dist/haskell/*/.test-input-hash.txt

# Build-cache directories. Each dist/<lang>/<pkg>/build/ holds local
# cache state (digest.json files for the sync pipeline's freshness
# checks) — derived, regenerated by every sync, and a missing or stale
# file is a cache miss, never a correctness problem. Tracking digests
# previously caused merge conflicts on every cross-branch merge because
# the hashes always diverged. See #379. The matching root-level cache
# directory is dist/json/build/ (universe digest).
dist/**/build/

# Other
*.log
*.swp
# TypeScript incremental-build outputs (heads/typescript)
*.tsbuildinfo
heads/typescript/build/
heads/typescript/node_modules/
# Per-user Claude state (settings, session caches, etc.) is gitignored,
# but the in-repo slash commands live under .claude/commands/ and ARE
# tracked. Pattern: exclude .claude contents but re-include .claude/commands/.
.claude/*
!.claude/commands/
# Hydra branch plan files (see CLAUDE.md). These are per-branch working notes named
# <branch>-plan.md and always live at the WORKTREE ROOT. The leading slash anchors
# the rule to the root so it ignores only those files — an unanchored `*-plan.md`
# matched every `-plan.md` anywhere in the tree (e.g. .claude/commands/compact-plan.md,
# which IS tracked). Keep this anchored. Note: any *other* root-level file ending in
# `-plan.md` will also be ignored by convention; tracked planning docs belong in docs/.
/*-plan.md
# Cross-worktree Claude messages (see CLAUDE.md)
claude-hydra-messages/
# Claude session helper scripts (local-only; CI monitors, log-tailers, ad-hoc
# survey/ff/bootstrap watchers). These are dot-prefixed .sh under claude/;
# the tracked claude/ content is the .md protocol docs, never dot-.sh scripts.
claude/.*.sh
