# 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/

# Local cache (tradewinds runtime cache lives in $HOME/.tradewinds/; this catches any test-time fixtures that leak)
.tradewinds-cache/

# 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
.claude/scheduled_tasks.lock

# Planning artifacts — local GSD planning workspace; NOT for public consumption.
# Untracked since the repo went public (Phase 13 W0 cleanup commit, 2026-05-25).
# Operators keep these on disk for ongoing GSD workflow; nothing in `.planning/`
# should be required to build or run the SDK.
#
# Phase 15 W3 exception: `.planning/CROSS-SDK-SYNC.md` is the source of truth
# for `scripts/generate_parity_table.py` (consumed by docs-publish.yml on every
# v* / vts-* non-rc tag). Git's ignore semantics cannot re-include a file
# inside an ignored directory, so the canonical fix is to (a) un-ignore the
# `.planning/` directory itself, (b) re-ignore everything inside it, then
# (c) un-ignore the one file we want tracked. The file is not sensitive
# (it describes the public cross-SDK sync process) so promoting it to tracked
# is the right answer rather than mirroring it elsewhere.
!.planning/
.planning/*
!.planning/CROSS-SDK-SYNC.md

# 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/
