.venv/
__pycache__/
*.pyc
.env
# .claude/* rather than .claude/ so ONE file can be re-included below. Git never
# descends into an excluded directory, so a `!` exception under a plain `.claude/`
# rule is silently dead -- the trailing `/*` is what makes the negation work.
.claude/*
# The clone guard's wiring (CLAUDE.md 1a, made executable -- see databeat/clone_guard.py).
# Tracked deliberately: it must exist in BOTH clones and survive a fresh checkout, and
# git is the only channel the two clones share. Everything else under .claude/ stays
# ignored, including settings.local.json (personal permissions) and worktrees/.
!.claude/settings.json
backups/
# The operational log (beats/observability.md). These rows describe a developer's machine
# -- which scripts connected to which database, from which worktree, at what time -- not
# repository content. operations.db-wal / -shm are SQLite's WAL sidecar files.
#
# logs/STATUS.md, the generated front page, is ignored too, and that is a DECISION rather
# than an accident of covering the directory. Committing it would put a snapshot of one
# machine's readings into every checkout, where it would be out of date on arrival -- the
# spec's worst failure mode ("a stale front page is worse than no front page", because it
# carries the authority of instrumentation). It would also write production's Supabase
# project ref into git, and CLAUDE.md 1a requires the product clone to be unable to name
# production. Both clones generate their own from their own rows; every worktree shares
# the main clone's copy, because oplog_status.status_path() resolves through the same
# worktree pointer the database does.
logs/

# TODO-filed.md (P11, docs/design/project-roadmap.md §11) -- generated from the
# peer-findings ledger, same reasoning as logs/STATUS.md above: a snapshot committed here
# would be stale on arrival in every other checkout. Regenerate with
# `python -m databeat.peer_findings --generate`.
TODO-filed.md

# Generated report-product deliverables (databeat/report_*.py) -- sale artifacts, not
# source. Re-run the generator to reproduce; nothing in here is hand-edited.
reports/
# statsmapped-mcp build output (python -m build mcp-server) -- published to PyPI, never committed
mcp-server/dist/
