# Database — contains personal watch history, never commit
echo.db
echo.db-shm
echo.db-wal

# Source data zips — large, sensitive, not needed in repo
*.zip
# Spotify export data (same sensitivity rules as watch history)
spotify-export/
*.spotify.json

# API keys
.env

# Python
__pycache__/
*.pyc
*.pyo
*.pyd
.Python
*.egg-info/
dist/
# Exception: the SvelteKit build artifacts that `echo serve` mounts ship in
# the wheel (per pyproject.toml [tool.hatch.build.targets.wheel.force-include]).
# Friends `pip install -e .` and immediately have a working UI - no Node /
# npm required at install time. Re-builds (cd ui && npm run build &&
# cp -r build ../src/echo/ui/dist) are infrequent UI-change-only churn.
!src/echo/ui/dist/
!src/echo/ui/dist/**
build/
.venv/
venv/

# Generated outputs (reproducible from scripts)
weekly_signal.png

# Scratch / debug output files
early_entries.txt

# Langfuse trace dumps — contain user queries about personal data
trace_corpus.json
analysis_traces.py
analysis_synthesis.py

# A/B test markdown exports — contain personal findings about real life data
AB Test/

# OS
.DS_Store
Thumbs.db
reflections_viewer.html
lancedb/

# IDE / editor per-developer settings
.vscode/
ui/.vscode/
.idea/

# Claude Code per-developer state
.claude/

# gstack per-developer analytics (retros, timeline snapshots, etc.)
.context/
# (Permits committed CLAUDE.md at repo root since CLAUDE.md is not under .claude/)

# gstack design tool working directory
.design-audit/

# AGENTS.md is a stub — CLAUDE.md is the source of truth for AI conventions
AGENTS.md

# Test caches
.pytest_cache/

# Log files
*.log

# Personal life-context annotations (per-user, never committed)
# See annotations.example.yaml at repo root for the template.
private/

# Raw source archives (Takeout zips, Spotify export, etc.)
# ingest.py reads these from _data/ at runtime; never commit them.
_data/
.gstack/
