# Git files
.git/
.gitignore

# Build artifacts. Recursive because web/ is a separate mix project: the
# top-level _build/deps rules do not match web/_build or web/deps, so host
# build artifacts (including a macOS-built NIF) leaked into the Linux image.
_build/
deps/
**/_build/
**/deps/
.fetch

# Test and development. Recursive: an unanchored `test/` matches only the
# repo root, so every packages/*/test leaked into the context (8.3MB).
# `*.md` stays root-anchored deliberately -- ex_keccak reads its own README.md
# at compile time for @moduledoc.
#
# The re-include is load-bearing: `test` names a mix SUITE at a package root
# but a NAMESPACE under lib/, and the recursive glob cannot tell them apart.
# `packages/raxol_mcp/lib/raxol/mcp/test/` holds Raxol.MCP.Test.Session and
# .Assertions -- shipped library code. Dropping them compiled raxol_mcp with
# 25 files instead of 27, so Raxol.MCP.Test could not expand %Session{} and
# every Linux release build died in `mix release`. macOS builds natively with
# no Docker context, so it passed and the break reached a tag unseen.
**/test/
!**/lib/**/test/
bench/
# InstallController embeds this one script at compile time.
scripts/*
!scripts/install.sh

# Documentation
docs/
*.md

# IDE files
.vscode/
.idea/
.claude/
*.swp
*.swo
*~

# MacOS files
.DS_Store

# Elixir artifacts
*.beam
/tmp/
# Recursive: two dumps (web/, packages/raxol_agent/) were 28% of the context.
**/erl_crash.dump

# NIF build artifacts (must not leak host-platform binaries into Docker).
# Recursive so nested build dirs are caught, e.g.
# web/_build/prod/lib/raxol_terminal/priv/termbox2_nif.so.
*.so
*.o
**/*.so
**/*.o
priv/termbox2_nif.so
packages/raxol_terminal/lib/termbox2_nif/c_src/*.o
packages/raxol_terminal/lib/termbox2_nif/c_src/*.so
packages/raxol_terminal/lib/termbox2_nif/priv/*.so

# Node modules (root or nested)
node_modules/
**/node_modules/

# Docker files themselves
Dockerfile*
docker/
.dockerignore

# CI/CD
.github/

# Large directories that aren't needed. These are build-irrelevant artifacts that
# otherwise bloat the build context (uploaded to the fly builder on every deploy):
#   priv/plts -- Dialyzer PLT cache (~49MB)
#   demos     -- asciinema .cast recordings (~23MB)
#   doc       -- generated ExDoc HTML (~15MB; distinct from the `docs/` rule above)
# priv/plts is load-bearing, not just context hygiene: _build/prod/lib/raxol/priv
# is a SYMLINK to the repo priv/, and mix release's copy_app dereferences it, so
# without this line the PLT cache ships inside the release itself.
priv/static/
priv/plts/
demos/
doc/
# Console packaging artifacts (host-built binaries must not enter the build context)
**/burrito_out/
**/vendor/
**/node_modules/
