.venv/
.venv-*/
__pycache__/
*.pyc
*.egg-info/
dist/
build/
.pytest_cache/
*.egg-link
node_modules/
web/metrics-worker/.wrangler/
web/metrics-worker/wrangler.local.jsonc
web/site/.next/
web/viewer/.next/
web/coming-soon/.vercel/
web/site/.vercel/
.vercel/
.gstack/
.opentraces/
.agent-trace/

.desloppify/

kb/
.opentraces/staging/
.opentraces/config.json

# Plan-59 parity harness emits its run-time JSON summary here. It is
# regenerated on every pytest run; never check it in.
tests/integration/parity_report.json
.agents/skills/opentraces
.claude/*
!.claude/skills/
.opentraces
.opentraces.json
# Committed test fixtures need their markers tracked (the migration legacy-world
# checkpoint restores this on-disk and `status`/`doctor` require it to exist).
!tests/migration/fixtures/legacy_world_v033/project/.opentraces.json
skills-lock.json
.coverage
.context/
tmp/
.spec
.agents/skills/agent-browser
.claude/skills/agent-browser
.agents/skills
otd
snapshot_report.html
.DS_Store
.sem

# otbox local state — boxes, snapshots, artifacts. Never checked in.
.otbox/

# otbox capture artifacts. Snapshots exceed the 1MB committed-blob
# threshold noted in tests/otbox/README.md, pending Git LFS migration.
# Regenerate on demand via `make capture-refresh SCENARIO=<name>`.
tests/otbox/captures/*/snapshot.tar.gz
tests/otbox/captures/*/metadata.json

# otbox journey footage (terminal-control). MEDIA ONLY — the recorder code is
# committed, the generated MP4/recordings/gallery are not. Regenerate via
# `make otbox-footage SCENARIO=<name>` / `make otbox-footage-all`.
tests/otbox/captures/**/footage/
tests/otbox/captures/_footage/
*.termctrl
tests/otbox/captures/**/*.mp4

# search-eval raw run artifacts (machine-specific perf; SEARCH-EVAL.md is the committed deliverable)
tests/search_eval/artifacts/

tests/search_eval/.cache/

# --live ad-hoc report (machine/bucket-specific; regenerate with make search-eval-live)
tests/search_eval/LIVE-EVAL.md
