# OS
.DS_Store
Thumbs.db
*.swp
*~

# Editors
.vscode/
.idea/
*.iml

# Node (Prettier gate on posts/ — see issue #76; deps installed via `npm ci`)
node_modules/

# Python (for sanitizer when it lands)
__pycache__/
*.py[cod]
*$py.class
.Python
.venv/
venv/
env/
.pytest_cache/
.mypy_cache/
.ruff_cache/
.coverage
htmlcov/
dist/
build/
*.egg-info/

# uv — library convention is to not commit the lockfile.
uv.lock

# Jekyll (if local previews are ever built here)
_site/
.jekyll-cache/
.jekyll-metadata

# Local-only artifacts
*.local
local/

# Raw session data — defense in depth on top of the sanitizer policy.
# Any file matching these patterns must NOT be committed.
*.raw.jsonl
fixtures/raw/
fixtures/_quarantine/

# Sanitizer config (PRD section 12 -- the `.ccs-sanitize.yaml` rule file).
# A per-project sanitizer config holds the LITERAL strings to scrub:
# real home dir, real email, real name, real GitHub handle, real branch
# names, etc. Committing the live config to a public repo would leak the
# very PII the sanitizer is meant to remove. The sidecar's `config_source`
# field intentionally records only the basename, so sidecars stay safe to
# commit -- only the config file itself is sensitive.
#
# `.ccs-sanitize.example.yaml` (committed) is the schema-only reference;
# copy it to `.ccs-sanitize.yaml` locally and fill in your own match values.
.ccs-sanitize.yaml

# Claude Code settings (local-only)
.claude/settings.local.json

# Social drafts — pre-publication scratch, not tracked.
# Scoped to drafts/ so curated/finalized social assets under social/ can be
# tracked later if desired.
social/drafts/
