# macOS
.DS_Store

# Local agent tooling (machine-specific, not part of the repository layout)
.serena/
.mcp.json
**/.claude/settings.local.json

# Python
.venv/
__pycache__/
*.pyc
.pytest_cache/
.ruff_cache/

# Node / TypeScript
node_modules/
dist/
dist-ssr/
coverage/
*.tsbuildinfo

# stray local debug transcripts (e.g. `vitest > scratch_debug.log`)
scratch_debug.log

# Go
/src/bin/
# stray `go build ./cmd/<name>` output left at src/ root (no -o given)
/src/generate
/src/logika
/src/server

# local credentials (never committed)
.env
.env.production

# promo: local config + secrets (admin/promo/config.example.toml documents
# every key; config.toml and secrets.toml are the owner's real values)
/admin/promo/config.toml
/admin/promo/secrets.toml
# stray per-member lockfile: uv workspaces keep a single root uv.lock; running
# `uv` from admin/promo/ regenerates this one, which must never be committed.
/admin/promo/uv.lock

# harness-managed implementer worktrees
.claude/worktrees/

# run store: history db + streamed logs; the committed repository settings
# layer (.nock/settings.toml) is deliberately not ignored (settings.py layer 2)
.nock/*
!.nock/settings.toml
.nock/settings.local.toml
