# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# Distribution / packaging
build/
dist/
*.egg-info/
*.egg
.eggs/

# Virtual environments
.venv/
venv/
env/

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

# Testing
.pytest_cache/
.coverage
htmlcov/
.tox/

# Environment variables
.env
.env.*

# Claude Code -- local agent state stays out, but skills are shared tooling and are tracked.
# Must be `.claude/*` rather than `.claude/`: git does not descend into an excluded directory, so a
# negation for something inside it can never re-include the file.
.claude/*
!.claude/skills/

# OS files
.DS_Store
Thumbs.db

# Jupyter
.ipynb_checkpoints/

# Generated Mintlify files (built by scripts/)
docs/knowledge-base-source/
docs/mint.json
docs/.mintlify/
dist/

# AppMap trace artifacts (generated locally, never commit)
appmap.log
*.appmap.json

# Generated by scripts/audit/*.py. These are reports OF a run, not source:
# the committed copies were a v0.4.0 snapshot describing a 70/136 baseline that
# the audits themselves superseded, and they read as current. Re-generate with
# `python scripts/audit/run_all.py`.
audit_results/

# Working notes: status docs, session summaries, handoffs, next-steps, and anything stamped with a
# date. They describe a moment and are then read as describing now -- STATUS.md, SESSION-SUMMARY.md,
# kb-next-steps.md and findings/session-summary-2026-02-22.md were all committed and all stale, and
# one of them opened with the words "Not committed. Working note only."
#
# Scoped to .md so nothing shadows real code.
# `tests/test_discoverability.py` fails the build if one is committed anyway -- belt and braces,
# because .gitignore does nothing for a file already tracked or added with `-f`.
[Ss][Tt][Aa][Tt][Uu][Ss].md
*[-_][Ss][Tt][Aa][Tt][Uu][Ss].md
*[Ss][Ee][Ss][Ss][Ii][Oo][Nn][-_][Ss][Uu][Mm][Mm][Aa][Rr][Yy]*.md
*[Hh][Aa][Nn][Dd][Oo][Ff][Ff]*.md
*[Nn][Ee][Xx][Tt][-_][Ss][Tt][Ee][Pp][Ss]*.md
*[Ss][Cc][Rr][Aa][Tt][Cc][Hh][Pp][Aa][Dd]*.md
*[Ww][Ii][Pp].md

# Anything date-stamped: notes-2026-08-10.md, summary_2026_08_10.md, report-20260810.md
*[-_][0-9][0-9][0-9][0-9][-_][0-9][0-9][-_][0-9][0-9].md
*[-_][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].md

# `tests/test_architecture_docs.py` parses every mermaid block with the real mermaid library, which
# is a local `npm install mermaid jsdom` away and skips without it. The install is a developer's
# tool, not a repo asset -- thousands of vendored files that nothing here imports.
node_modules/

# The MCP server over the graph. Untracked for now: it is a CONSUMER of the installed package
# rather than part of it, and its home is beside the agent that uses it.
mangrove_kb_mcp.py
mangrove_kb_mcp.md
