# Byte-compiled / optimized
__pycache__/
*.py[cod]
*$py.class

# Distribution / packaging
build/
dist/
*.egg-info/
.eggs/

# MkDocs build output
site/

# Generated demo output (regenerated by `python demo/assemble_fhir.py`)
demo/out/*.ttl

# Virtual environments
.venv/
venv/
env/

# Test / coverage
.pytest_cache/
.ruff_cache/
.coverage
htmlcov/

# BAML generated client is regenerated from baml_src; do not hand-edit.
/baml_client

# Tooling / editors
.mypy_cache/
.idea/
.vscode/
*.swp
.DS_Store

# Confidential / internal — never commit (client/domain specifics).
# ROOT-ANCHORED, and the anchor is load-bearing: the bare pattern `internal/` matches a
# directory of that name at ANY depth, which silently swallowed the whole of
# `vocab/internal/` (the unpublished prog:/docgov:/corpus: vocabularies) — three separate
# authors hit it on the same day, and `git status` simply did not list the files.
# CLAUDE.md § Documentation governance defines the Confidential class as `internal/` at the
# repo root, and `tests/docgov_extract.py:43` already reads it root-anchored
# (`path.startswith("internal/")` on a repo-relative path). Anchoring here restores
# agreement between the two rules rather than changing either.
/internal/
.venv/

# Real third-party document corpus — fetched by scripts/fetch_corpus.py, never committed
corpus/

# Third-party agent skills — installed at USER scope (~/.claude/skills), never vendored here.
# `npx skills add` defaults to project scope and drops all three of these into the repo;
# .claude/skills/baml-core and .agents/skills/baml-core are ours and stay tracked.
.agents/skills/show-me/
.claude/skills/show-me
skills-lock.json
