__pycache__/
*.py[cod]
*$py.class
*.egg-info/
dist/
build/
.eggs/
*.egg

# uv
.venv/
# uv.lock is committed so CI can use uv sync --frozen (fast, reproducible)

# Environment
.env
.env.*
!.env.example

# IDE
.vscode/*
!.vscode/mcp.json
.idea/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db

# Ansible
*.retry

# Testing
.pytest_cache/
.coverage
htmlcov/
*.sh
# …but keep committed dev / CI helper scripts
!scripts/dev_test.sh
!scripts/test_changed.sh
!scripts/hydrate_test_fixtures.sh
!scripts/ci_docker_v2_smoke.sh
config_validation_report.json

# Agent / local scratch logs (in-repo equivalent of /tmp)
tmp/

# Script library (runtime artifact, populated at startup)
scripts/library/
scripts/__pycache__/
scripts/tests/
tests/__pycache__/

# Debug / investigation scripts (root-level)
test_merge_*.py
test_delete_create.py

# Leftover seed copies from run_seed() (real seeds live in seeds/)
src/netops_api_navigator/analyze_topology.*
src/netops_api_navigator/enrich_topology.*
src/netops_api_navigator/onboard_device.*
src/netops_api_navigator/populate_base_graph.*
src/netops_api_navigator/populate_config_policy.*
src/netops_api_navigator/populate_monitoring.*

# Claude local config
.claude/
