# Environment variables (contains API keys, passwords)
.env
scraper/.env

# Python
__pycache__/
*.py[cod]
*$py.class
venv/
.venv/
.venv312/
*.egg-info/
.coverage
.pytest_cache/
.ruff_cache/
packages/*/dist/
packages/*/build/

# Scraper caches (regeneratable)
scraper/cache/
scraper/artists/
scraper/.http_cache/
scraper/probe_results/
scraper/manual_claude_queue/
scraper/.api_pipeline.lock
scraper/.api_pipeline_*.lock
scraper/.pipeline_run_stats_cache_*.pkl
scraper/.backfill_images_rotation.json
scraper/.pipeline_alerts_rotation.json
scraper/.storage_layout.json
scraper/.storage_layout.required
scraper/.storage_drain.json
scraper/.storage_migration.flock
scraper/.ticketmaster_feed_state.json
scraper/.ticketmaster_feed_import.lock
scraper/.ticketmaster_feed_sweep_state.json
scraper/.ticketmaster_feed_sweep.lock
scraper/.auto_commit_smoke_strikes.json
scraper/.hourly_lane_state.json
scraper/.verify_imminent_state.json
scraper/.source_module_backfill_state.json
scraper/.stale_observation_prune_rotation.json
scraper/.stale_observation_prune_rotation.json.tmp
scraper/.registry_reconcile_state.json
scraper/.atomic_.registry_reconcile_state.json.*.tmp

# Scraper runtime artifacts
scraper/ml/artifacts/*.pkl
scraper/ml/artifacts/*.json
!scraper/ml/artifacts/.gitkeep
scraper/dns_report.json
scraper/disabled_scrapers.json
scraper/logs/
scraper/venues/_dead/
scraper/audit_results.json
scraper/.api_pipeline.done
scraper/.api_pipeline_*.done
scraper/.enrich.done
scraper/.pipeline.lock
scraper/.pipeline.done
scraper/.stale_recovery.lock
scraper/.stale_recovery.done
scraper/.enrich.lock
scraper/.enrich_pipeline.lock
scraper/.operator_orchestrator_tick.lockdir/
scraper/.hourly_lane_tick.lockdir/
scraper/.scheduler_lane_tick.flock
scraper/.scheduler_pipeline.flock
scraper/.service_installer.flock
scraper/.service_cross_repair.flock
scraper/.repository_generation.flock
scraper/.repository_generation_incomplete
scraper/.auto_commit_untracked_rebase_stash
scraper/.deploy_sync_request.json
scraper/.composed_smoke_verdicts.json
scraper/.deploy_sync_request.flock
scraper/.deploy_sync.flock
scraper/.service_cross_repair.pause
scraper/.service_cross_repair.pause.restore.json
scraper/.service_cross_repair/
scraper/.async_scraper_*.lock
scraper/.async_*.lock
scraper/.event_embeddings.flock
scraper/.event_freshness_controller.flock
scraper/.vibe_enrichment.flock
scraper/.embedding_refresh.flock
scraper/.venue_logistics.flock
scraper/.scheduler_worker.lock
scraper/.scheduler_shape_state.json
scraper/.scheduler_shape_state.json.lock
scraper/.scheduler_shape_trip.json
scraper/.atomic_.scheduler_shape_state.json.*.tmp
scraper/.atomic_.scheduler_shape_trip.json.*.tmp
*.smoke.*.py
scraper/pipeline_state/*.lock
scraper/pipeline_state/.expansion_run_lease.json
scraper/pipeline_state/.expansion_run_lease.lock
scraper/pipeline_state/.expansion_run_lease_*.json
scraper/pipeline_state/.expansion_run_lease_*.lock
scraper/pipeline_state/.atomic_*
scraper/pipeline_state/.resurrection_transactions/
scraper/pipeline_state/.shared_feed_routing_transactions/
scraper/pipeline_state/.coupled_writer_transactions/
scraper/coverage_campaigns/*.lock
scraper/venues/*/_registry.json.corrupt.*
scraper/venues/*/_registry.json.conflict.*
scraper/venues/**/*.py.pre_rebuild
scraper/pipeline_state/*.json.conflict.*
scraper/market_analysis/*.json.conflict.*
scraper/coverage_campaigns/*.json.conflict.*
scraper/.healthcheck_state
scraper/.orchestrator_state.json
scraper/.dmo_tribe_sweep_cursor.json
scraper/.dmo_simpleview_sweep_cursor.json
scraper/logs/discovery_url_claim_cursor.json
scraper/pipeline_state/.wix_validation_cursor.json
scraper/.geocode_failures.json
scraper/.url_validation_pending.json
scraper/pipeline_state.txt
scraper/venue_discovery/.budget_tracker.json
scraper/venue_discovery/.search_history.json
scraper/dark_factory/*.log
scraper/dark_factory/discovery_seed_cursor.json
scraper/dark_factory/cycle_contract_autofix.json
# Credit-free categorization batches/results and cross-host lease owner token.
scraper/manual_categorize_queue/

# IDE
.vscode/
.idea/
*.swp
*.swo
.DS_Store

# Keys
*.pem

# Claude — track rules, skills, settings; ignore the rest
.claude/*
!.claude/rules/
!.claude/skills/
!.claude/settings.json
CLAUDE.local.md

# WordPress probe results (regeneratable, large)
scraper/wordpress_venues.json
scraper/probe_results

# Git worktrees
.worktrees/

# Auto-build runtime artifacts
scraper/.auto_build.pid
scraper/data/.cache/

# Runtime batch/probe data (regeneratable)
.batch*.json
.scraper_batch*.json
.probe_results.json

# Audit step outputs — the scripts live in audit/, their JSON/TSV dumps
# are regenerated on every run and should never be committed.
audit/*.json
audit/*.tsv

# Audit-tool output is scratch: every writer under scraper/ mkdirs its own
# subdirectory here and regenerates its files. The previous single-level globs
# (*.csv, *.log, backfill_v2/) could not match dated/campaign subdirectories,
# so 13.6 MB of one-shot snapshots ended up tracked. Ignore the whole tree and
# whitelist the one report that live code cites as provenance.
scraper/audit_output/**
!scraper/audit_output/accuracy_report.md

# One-shot analysis snapshots. Nothing reads this directory at runtime; the
# 2026-04-03 analysis was archived to docs/archive/ and the coverage-gap
# scorecard dumps are regenerable via `python -m scraper.coverage_gap_scorecard`.
scraper/findings/

# The live discovery CSVs are scraper/venue_discovery/. A root-level copy is
# always a wrong-cwd artifact (31 MB of it was tracked from 2026-04-02 to
# 2026-07-23); the leading slash anchors this to the repo root only.
/venue_discovery/

# Discovery-coverage eval reports — regeneratable (deterministic with
# fixed seed), one JSON per daily run adds up fast, and the module's
# design note says operators can re-run locally to reproduce history.
scraper/eval_results/
.env.local
.env.local

# Local secrets (Apple Music keys, etc.)
secrets/
scraper/coverage_campaigns/.bibliocommons.lock

# Local incremental event-dedup cache snapshot (see scraper/event_cache_snapshot.py)
scraper/.event_cache_snapshot.pkl
scraper/.event_cache_snapshot.pkl.lock
scraper/.event_cache_snapshot.*.tmp

# Launch-scoped scheduler result transport; stale directories are bounded and
# removed by scheduler_worker, never replayed across launches.
scraper/.scheduler_result_spool/

# Local Codex/test scratch wrappers and sandboxes.
/tmp/

# Deployment rollback runtime retained beside the active production venv.
/.venv312.plan10-stage
