# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python

# Virtual environments
venv/
.venv/
env/
ENV/
env.bak/
venv.bak/

# Distribution / packaging
dist/
build/
!.ai-engineering/skills/build/
!src/ai_engineering/templates/.ai-engineering/skills/build/
*.egg-info/
*.egg
MANIFEST

# PyInstaller
*.manifest
*.spec

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv — .python-version is tracked intentionally for uv version pinning

# pipenv
Pipfile.lock

# pdm
.pdm.toml
.pdm-python
.pdm-build/

# PEP 582
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# IDEs
.vscode/
.idea/
*.swp
*.swo
*~
.project
.pydevproject
.settings/
*.sublime-project
*.sublime-workspace

# OS files (recursive — `.DS_Store` matches at any depth without the
# `**/` prefix, but the explicit form is documented for clarity).
.DS_Store
**/.DS_Store
Thumbs.db
**/Thumbs.db
desktop.ini
**/desktop.ini
# Editor swap files (vim, emacs, etc.)
*.swp
*.swo
*.swn
*~

# Secrets and credentials
*.pem
*.key
*.p12
*.pfx
credentials*.json

# ai-engineering specific
.ai-engineering/local.yml
.ai-engineering/.cache/
.ai-engineering/state/framework-events.ndjson
.ai-engineering/state/framework-capabilities.json
.ai-engineering/state/observation-events.ndjson
# spec-148 files-only: per-install state SoTs (machine-specific, regenerated
# by install / ownership flows — never committed).
.ai-engineering/state/install-state.json
.ai-engineering/state/ownership-map.json
# decision-store.json is a COMMITTED governance source of truth: risk
# acceptances (DEC-*) are born here via `ai-eng risk accept` and are NOT
# rebuildable from spec markdown by `ai-eng decision backfill`. Tracking it
# is what lets the CI `risk-check` gate evaluate acceptances — intentionally
# NOT ignored.
# spec-127 cleanup: legacy artifacts (post-rename, prevent resurrection if stale processes run)
.ai-engineering/instincts/
.ai-engineering/state/instinct-observations.ndjson
.ai-engineering/learnings/
.claude/session-topics/
# Antigravity CLI local session state (never a tracked surface)
.antigravitycli/

# spec-125 D-125-04/05: relocated runtime + cache subtrees
.ai-engineering/runtime/
.ai-engineering/cache/
# spec-127 cleanup: agent-runtime working dirs (transient autopilot output)
.ai-engineering/runs/
.ai-engineering/notes/

.skill-map/settings.local.json
.skill-map/skill-map.db

# spec-122-b unified state.db (per-user, derived from event stream)
.ai-engineering/state/state.db
.ai-engineering/state/state.db-wal
.ai-engineering/state/state.db-shm
state.db
state.db-wal
state.db-shm
# spec-125 D-125-09: gate-findings.json is DOCUMENTED_TRANSIENT (regenerated by ai-commit)
.ai-engineering/state/gate-findings.json
# spec-125 D-125-09: state/runtime/ is forbidden, strategic-compact.json is transient
.ai-engineering/state/runtime/
.ai-engineering/state/strategic-compact.json
.ai-engineering/runtime/research/
.ai-engineering/runtime/presentations/
.ai-engineering/runtime/reports/
.claude/scheduled_tasks.lock
