# Dependencies
node_modules/

# Build output
dist/
out/
packages/*/dist/
packages/*/dist-chrome/
packages/*/dist-firefox/
*.tsbuildinfo
*.tgz

# Cargo build output (crates/flows-jj and friends)
/target

# Electrobun build output
app/.electrobun/

# Caches
.artifacts/
.eslintcache
.cache/
.pnpm-store/
.nyc_output/
coverage/
*.lcov

# Logs and profiles
*.log
*.cpuprofile
tui-debug.log
default.profraw

# Environment
.env
.env.*
!.env.example
!.env.*.example
!.env.sample
!.env.template
*.pem

# Editor and OS files
.vscode/
.zed/
.idea/
.claude/
.opencode/
.gemini-clipboard/
*.swp
*.swo
*~
.DS_Store

# Playwright and other test output
playwright-report/
test-results/
.tui-test/

# Local agent and review scratch
.gstack/
.smithers-review/
.e2e-flakes/
REVIEW-*.md
# Review campaign working docs: intermediate evidence and plans, kept on disk, never committed
review-evidence/
consolidated-review-plan.md
release-rc0-review.md
release-review-*.md
packages/*/REVIEW-*.md
packages/std/test/__repro.test.ts
packages/std/test/ScratchGrepTiming.test.ts
compaction-results/
syntax.jsonl
out.jsonl
out.html
pi-*.html
collect.sh
todo.md
plans/
.pi/hf-sessions/
.pi/hf-sessions-backup/
.pi_config/
.money-scratch/

# Working copies
.worktrees/
worktrees/

# Infrastructure-as-code and edge local state
.alchemy/
.wrangler/
apps/observability/data/

# flows engine state (artifact CAS under .flows/objects, fork lanes under
# .flows/forks) — derived and engine-owned. jj must not snapshot it: a restore
# to a pre-publication change would delete CAS blobs live cache rows reference.
.flows/

# `.smithers/` holds the workspace declaration (WORKSPACE.ts), the factory
# declaration beside it (FACTORY.ts), the two files `//:factoryProjection`
# projects from it (factory.json, home.json), and the target index
# `//:targetIndex` generates (target-index.json), all of which are source.
# Only run state written beside them is ignored.
/.smithers/*
!/.smithers/WORKSPACE.ts
!/.smithers/FACTORY.ts
!/.smithers/factory.json
!/.smithers/home.json
!/.smithers/target-index.json
**/.smithers/*.db
**/.smithers/*.db-*
**/.smithers/runs/
**/.smithers/executions/
**/.smithers/cache/
# Scratch trees test lanes leave behind; never source.
/tmp/
smithers.db
smithers.db-shm
smithers.db-wal

# Reference corpus — shallow clones read by agents, never committed.
reference/*
!reference/electrobun-shell/

# Launch-checklist dry runs prove the runner, not the product: they touch no
# origin, so they are never evidence and never belong in the tracked report
# trail under apps/reports/launch-checklist/.
apps/reports/launch-checklist/*-dry-run/

# Crush agent local session database
.crush/

# Commit-pass mutexes. Several sessions commit into this checkout at once and
# coordinate through these paths, so they exist while work is in flight. They
# are host state, not source: jj snapshots the working copy, so an unignored
# lock reaches the index.
.commit-lock
.commit-lock-pass/

# Grafana runtime state written by the local observability stack
apps/observability/data/
