__pycache__/
*.py[cod]
*.egg-info/
dist/
build/
.eggs/
*.egg
.ruff_cache/
.pytest_cache/
.mypy_cache/
*.so
.env
.venv/

# Pytest temp directories
pytest-of-*/

# Coverage artifacts
.coverage
.coverage.*
htmlcov/
coverage.xml

# Hypothesis example database
.hypothesis/

# IDE
.idea
.vscode

# Claude Code / MCP
.claude/
.mcp.json
.worktrees/

# Project-specific ignores
CLAUDE.md
_archive/
ARCHIVE/
prompts/
plans/
logs/
*.log
config/broker.yaml
# editor / tooling backups — never let these reach the sdist tarball
*.bak
*.bak.*
.deepeval/

# Shell dotfiles (should not be in project)
.bash_profile
.bashrc
.zshrc
.zprofile
.profile
.gitconfig
.ripgreprc
.gitmodules

# Loose git objects (not part of this repo)
/HEAD
/hooks
/objects
/refs

# Session notes (personal)
CRASH_ROOT_CAUSE.md
CRASH_most_recent_chat.md
BASTION_LLM_INVENTORY.md
QUERIES_DRs.txt
TO_ADD_TO_DASHBOARD_BUTTONS_OPTION_TO_OPEN_NEW_TMUX.txt

# Personal / interview / session artifacts (never commit)
*.pdf
LATEST_BASTION.md
interview-aid-chunk-bastion.md

# Raw screen captures dropped into docs/demo/ while iterating on the TUI.
# Deliberately-named demo assets (dashboard-*.png/svg, *.gif, *.cast) still
# commit normally — only the camera-roll dumps are ignored, so a `git add -A`
# cannot sweep megabytes of unnamed stills into the history.
docs/demo/Screenshot*.png

# Git worktree pointer files. Under the bwrap sandbox these are bind-mounted to
# /dev/null and surface as character-special files; they do not exist outside
# it. Mirrors the matching sdist exclude in pyproject.toml.
config.lock
config.worktree

# Internal design specs — kept locally, never published. These document HOW
# features were designed (dev rationale), not how to run BASTION; they carry no
# product-runtime value and are not shipped. ADRs (docs/adrs/) stay tracked.
docs/design/specs/

# Session-scoped artifacts (transient plans, council runs, visual companions)
tmp/
tmp_*.md
tmp_*.sh
tmp_*.txt
.council-output/
.council_topic.txt
ROADMAP.md
reference/
