__pycache__/
*.pyc
.pytest_cache/
.coverage
htmlcov/
# build artifacts
dist/
build/
*.egg-info/
.venv/
node_modules/
*.tgz
# --- DATA SAFETY: never commit real conversation exports or rendered output ---
# (deny-by-default for anything that could hold private conversation content)
_site/
_site_gemini/
/real_data/
exports/
data/
out/
*.har
conversations.json
chatgpt_export.json
chatgpt_projects_export.json
gemini_full_harvest.json
transcript.json
*.local.json
*.local.html
# The adapter-parity fixture embeds sampled REAL conversation content for a local
# byte-for-byte adapter check — it is generated on demand and must NEVER be committed
# or packaged. The renderer/sanitize parity fixtures are synthetic and ARE committed.
js/test/fixtures/adapter-parity.json
# Real exports should live OUTSIDE this tree entirely — this is the last line of defence.

# Audit / port scratch: UI captures, review artifacts, workflow evidence.
# The durable findings live in the commit messages; these are working files.
.audit/
.port/
# Verification scratch: synthetic corpus fixtures + their build/probe scripts, and research
# working notes. The .db files here are SYNTHETIC (no real session content ever) but they are
# regenerable build artifacts, not source — `make_fixture.py` rebuilds them deterministically.
# Ignoring the tree also keeps a stray real index from ever being committed by accident.
.scratch/
# The DIRECTORY pattern above does not cover a sibling FILE. Agents write one-off harnesses
# to the repo root as `.scratch_<name>.py` (measured: `.scratch_reanchor.py`,
# `.scratch_sweep.py` both landed untracked and un-ignored, so `git add -A` would have
# committed them). Same intent as `.scratch/`, so the same rule — a leading-dot name is
# invisible in a casual `ls` and easy to miss in review, which is exactly how scratch
# reaches a public repo.
.scratch_*

# Staged engine interpreter (a ~35MB build artifact produced by cockpit/scripts/stage-engine.ps1)
cockpit/src-tauri/resources/

# Coverage output from `npx vitest run --coverage` (v8 provider writes here by default).
# Both spellings: the reportsDirectory is relative to the CWD the runner started in,
# so running from the repo root lands it at the root instead of under cockpit/.
cockpit/coverage/
coverage/

# Beads / Dolt files (added by bd init)
.dolt/
*.db
.beads-credential-key

# Agent scratch: throwaway probe harnesses written to compare environments/tools.
# Not source, and NOT to be committed — this is how scratch leaks into a public repo.
cockpit/.dom-probe/
