# Dependencies
node_modules/
.pnp
.pnp.js

# Python
__pycache__/
*.py[cod]
*$py.class
.venv/
venv/
*.egg-info/
dist/
build/

# Next.js
apps/dashboard/.next/
apps/dashboard/out/

# Environment
.env
.env.local
.env.*.local

# Vault runtime artifacts (agent-generated)
vault/20-Active-Loops/
vault/30-Archive/
vault/.obsidian/
vault/.system/run-log.md
vault/.system/Approvals-Digest.md

# IDE
.idea/
.vscode/
*.swp

# OS
.DS_Store
Thumbs.db

# Docker volumes
data/

# Logs
*.log

# Tier B — machine-local hook wrappers (install scripts regenerate)
scripts/agentmetry_*_hook.cmd

# Local driver toggles (never commit enabled/disabled state)
vault/.system/drivers.json
vault/.system/feedback/

# Backups
backups/

# Dashboard scratch / scratchpad (never commit)
apps/dashboard/scratch/

# Next.js/TS incremental build artifact
*.tsbuildinfo

# Local-only scratch directories (never part of the published repo):
#   apps/landing/   an unused Vite scaffold (88M of node_modules)
# Ignored so a stray `git add -A` cannot commit them.
/apps/landing/

# A stale duplicate clone of this repo used to sit at /agentmetry/, and the rule
# blocking it was `/agentmetry/`. That rule had to go when the Python package was
# renamed to `agentmetry`.
#
# Git anchors a leading slash to the repository root, so `/agentmetry/` never
# matched apps/orchestrator/agentmetry/ and `git ls-files` listed all 72 files
# happily. Hatchling anchors it to the *project* root instead, which is
# apps/orchestrator, so it excluded the entire package and built a wheel
# containing nothing but dist-info. A published package that installs no code is
# the worst possible first release, and nothing in the build said a word.
#
# Only a nested clone has a .git directory, and our package never will, so this
# blocks the thing that was actually the problem without any anchoring ambiguity.
/agentmetry/.git/

# Local dev launch config (absolute machine paths)
.claude/launch.json

# Internal review prompts and audit reports. These name pilot pricing, kill
# gates, and the private repo contents; they belong in agentmetry-notes.
#
# The "review" patterns were already here and still let `audit-prompt.md` and
# `audit-2026-08.md` through, because the rule matched the word we happened to
# use last time rather than the kind of document. An audit of a security tool
# is the worst thing to publish by accident: it is an evasion writeup with the
# author's name on it.
docs/*review*prompt*.md
docs/*-review-*.md
docs/*audit*prompt*.md
docs/audit-*.md
docs/*-audit-*.md
