# Python-generated files
__pycache__/
*.py[oc]
build/
# desktop/build is electron-builder's buildResources. Neither icon.icns nor
# icon.ico is tracked: both are build OUTPUTS, derived at package time from
# web/public/nh-mark-512.png by packaging/derive-icons.mjs — see that file's
# header comment for why the binaries stopped being committed.
!desktop/build/
desktop/build/*
dist/
wheels/
*.egg-info

# Virtual environments
.venv

# Secrets & local state — never commit
.env
*.key
*.pem
.no_human/
secrets/
*.db
*.db-wal
*.db-shm
# ...except the memory-triage runbook's committed test fixture: a tracked
# INPUT (synthetic, neutral content -- see EXPORT_CLASSIFICATION.txt).
!testdata/memory_triage_fixture.db

# Test scratch
/tmp_e2e/
# pytest's node-id cache stores collected test names verbatim, so it carries
# whatever the test bodies spell. It was NOT ignored — only `__pycache__/` and
# `*.py[oc]` were — so a `git add -A` after a test run could have tracked it.
.pytest_cache/

# IDE-generated (skills, local settings)
.claude/
.windsurf/
# A git worktree directory created by tooling, not by this project. `.claude/`
# above does not match the name, and `git add -A` stages an unignored worktree
# as a gitlink (mode 160000). No slash, for the same reason `.nh-local` below
# carries none: a trailing slash matches the directory but not a symlink of
# that name.
.claude-worktrees

# web build
web/node_modules/
web/.board-stamp.json

# north-star bench: the raw built corpus is verbatim operator conversation
# content (personal + enterprise) — never committed. Curated specs live one
# level up and ARE tracked.
eval/northstar_tasks/generated/
# Machine-local translation from vendor-neutral spec paths to real checkouts.
# Holds real repo names by definition — never committed.
eval/repo_map.yaml
eval/results/northstar/

# desktop shell
desktop/node_modules/
# also match a SYMLINK: a trailing slash only matches a directory, so a
# symlinked node_modules slipped past and got committed as an absolute path.
desktop/node_modules
web/node_modules
desktop/dist/

# The adoption harness writes its report here on every run.
e2e/adoption/out/

# A developer-local symlink into whatever checkout the operator is running
# from. Never shipped: it carries an absolute path off this machine, and it
# dangles anywhere else. It was NOT ignored, so a `git add -A` during a hand
# landing swept it into a public commit (83b0b364) on 2026-09-13.
.nh-local
