# Secrets — names are documented in .env.example, values never committed
.env
.env.*
!.env.example

# Python
__pycache__/
*.py[cod]
*.egg-info/
dist/
build/
.venv/
.mypy_cache/
.pytest_cache/
.ruff_cache/
.coverage
coverage.xml
htmlcov/

# Eval artifacts — generated, never committed (reports are reproducible)
evals/results/

# Supply-chain audit input, generated. `ci.yml`'s `audit` job and
# `release-gates.yml`'s `Supply-chain audit` step both run
# `uv export ... -o requirements-audit.txt` immediately before `pip-audit`
# reads it, so a committed copy is never the file that gets audited — it is a
# second, unread rendering of `uv.lock` that can (and did) drift away from it
# with nothing to notice. `uv.lock` is the tracked source of truth; this is
# derived from it at run time (GK-028).
requirements-audit.txt

# Local index data. SQLite runs in WAL mode (ADR-0002), so a store is three
# files rather than one and the `-wal`/`-shm` sidecars outlive any open
# connection — without them the sidecars are the only part of an index
# directory that shows up as untracked.
*.lance/
*.sqlite3
*.sqlite3-shm
*.sqlite3-wal

# The default index directory `grk` writes when `--index-dir` is not given.
# Listed as well as the globs above so a future artifact type inside it is
# ignored by placement, not only by extension.
.groundkit/

# Local AI-agent context file (solo-dev machine convenience, not shipped repo
# content). SPEC.md, KNOWN_LIMITATIONS.md and docs/adr/ are the tracked source
# of truth; a fresh clone is governed by those.
CLAUDE.md

# External review scratch — build scripts and rendered artifacts produced by
# agent review runs against this repo. Not repo content, and not held to its
# gates: `ruff check .` walks it otherwise and reports errors from code this
# project neither owns nor ships.
.codex-artifacts/

# Audit and review output (reports, rendered PDFs, working notes). Kept at the
# repo root and never under `docs/`, for a reason worth stating: MkDocs copies
# every *non-Markdown* file in `docs_dir` into the built site verbatim.
# `validation.omitted_files` only governs Markdown pages, so a PDF dropped
# under `docs/` triggers no warning, survives the `--strict` build, and is
# published to the public site by `docs.yml` — which is exactly what happened
# to a `docs/audit/` directory on 2026-08-18. Review material is not repo
# content and must not reach the site; BACKLOG.md is where its *conclusions*
# live, tracked.
_audit/

# Local MCP client config: machine-specific absolute paths, generated by
# whichever client registered the server. docs/guides/mcp-clients.md is the
# tracked source for client configuration.
.mcp.json

# Editors / OS
.idea/
.vscode/
.vs/
*.swp
Thumbs.db
.DS_Store
# Word/Excel owner-lock files, written beside an open document.
~$*

# Docs build
site/

# Terraform working state (infra/terraform/**). `.terraform/` is a provider
# cache, and `.terraform.lock.hcl` belongs to a ROOT module — this repo ships a
# reusable module, whose consumers own their own lock. Committing one here would
# pin every consumer to whatever provider version happened to resolve on the
# machine that ran `init`. `*.tfvars` is ignored because that is where a real
# deployment's account-specific values land, and `.tfvars.example` is the
# documented-names counterpart, matching the `.env` / `.env.example` rule above.
.terraform/
.terraform.lock.hcl
*.tfstate
*.tfstate.*
*.tfplan
crash.log
*.tfvars
!*.tfvars.example

# Internal design documents kept alongside the repo but never published
# with it (they are not part of the package and carry no license header).
*.docx
