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

# Virtual environments
.venv/
venv/
ENV/

# Testing / linting
.pytest_cache/
.ruff_cache/
.coverage
.coverage.*
htmlcov/
.tox/

# Phase 4 CI-05 — drift watchdog populates tests/fixtures/drift/ from the
# weekly cron. The scripts + README are tracked; the captured parquets
# and the drift-report are not (rotation is the whole point — git history
# isn't the storage layer for drift fixtures).
tests/fixtures/drift/case_*.parquet
tests/fixtures/drift/drift-report.md

# uv — uv.lock IS committed for dev reproducibility across Lane F + Lane V (decision: lockfile-tracked for dev parity)

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

# OS
.DS_Store
Thumbs.db

# Planning artifacts — local GSD planning workspace; NOT for public consumption.
# Untracked since the repo went public (Phase 13 W0 cleanup, 2026-05-25).
# Operators keep these on disk for ongoing GSD workflow (nested-clone of the
# private planning repo into `.planning/` — see PLANNING-SETUP.md). Nothing
# in `.planning/` is required to build or run the SDK.
#
# Phase 16 dev-env cleanup (2026-05-26): the prior Phase 15 W3 exception for
# `.planning/CROSS-SDK-SYNC.md` was removed. The planning repo is now the
# single source of truth for that file; `scripts/generate_parity_table.py`
# falls back to its built-in default registry when the file isn't present
# (e.g. for external contributors without the planning repo cloned), so the
# docs-publish CI job still works end-to-end.
.planning/

# Dev-only TODO scratchpad (replaced by GSD TODOS in .planning/)
TODOS.md

# TypeScript / pnpm workspace (packages-ts/)
node_modules/
coverage/
.tsbuildinfo
packages-ts/*/dist/
packages-ts/*/coverage/
# Note: top-level `dist/` and `build/` already covered by Python section above.

# TS-W2 Plan 08 drift watchdog — output files are transient, not committed.
packages-ts/meta/tests/parity/drift/*.json
packages-ts/meta/tests/parity/drift-report.md
.claude/

# Phase 15 W1 — Sphinx build artifacts.
# `_build/` holds rendered HTML + Markdown output (regenerated each build).
# `api/` is autosummary-emitted .rst stubs from the `:toctree: api` directive
# in `docs/sphinx/index.rst` (regenerated each build by autosummary_generate=True).
# Both are pure outputs; the docs source-of-truth is the docstrings in
# `packages/*/src/`, plus the hand-written `conf.py` + `index.rst` + `_templates/`.
docs/sphinx/_build/
docs/sphinx/api/

# Phase 15 W2 — TypeDoc markdown build artifacts.
# `docs-ts-build/markdown/` holds the rendered MDX output (regenerated each
# build by `scripts/build_ts_docs.sh`). The docs source-of-truth is the
# JSDoc/TSDoc on `packages-ts/*/src/`, plus the hand-written
# `packages-ts/typedoc.json` config.
docs-ts-build/
