/research/
/ghidra_proj/
/game/
*.iso
*.7z
/build/
.vs/
/out/
/tools/
__pycache__/
/recomp/output/
/recomp/output_*/
/recomp/build/
/recomp/*.raw.csv
/recomp/*.raw.toml
# Sprint 13 C5: Ghidra's side config (scripts/ghidra_export_functions.sh writes <out>.toml beside <out>.csv) and a
# revision's derived config (build_revision.sh step 3) are products; r0004's derived config is the tracked record.
/recomp/socom2_ghidra*.toml
/recomp/socom2_ghidra_r0001*.csv
/recomp/socom2_r[0-9]*.toml
!/recomp/socom2_r0004.toml
/recomp/*.log
/third_party/ps2recomp/build*/
*.log
/dist/
/dist-release/
/dist-linux/
/dist-linux-release/
# Per-revision build outputs (dist-r0004/, dist-r0005/, ...): scripts/build_revision.sh drops a
# ~192 MB exe in each, and this repo is public, so one `git add -A` must not be able to commit one.
# /dist/ above is deliberately left as its own rule; this covers only the dist-r<rev>/ siblings.
/dist-r[0-9]*/
# Sprint 14 S4: docs/GIT_STRATEGY.md section 3's never-commit list, made true here: every build or dist folder at
# the root (build-clang/, build-linux/, any dist-*/) and root-level .bin/.wav dumps. Root-anchored and
# folder-only, so build.sh and the tracked fixtures under tests/ and scripts/ stay tracked.
/build*/
/dist*/
/*.bin
/*.wav
/logs/
/server/horizon-server-database-middleware/
/server/horizon-docker/
/server/logs/
/server/*.log
/server/horizon-server/**/bin/
/server/horizon-server/**/obj/
/server/config/simulated.db
# Sprint 13 O3: the box scripts' secrets, addresses and key paths (server/ops/ops.env.example is the tracked shape)
/server/ops/*.env
/server/ops/pulled/
imgui.ini
vm/
# .claude/: only the tracked project configuration; the harness's local state (worktrees/, scheduled_tasks.lock,
# settings.local.json) stays out (Sprint 14 G1). This block owns the policy: it outranks a global excludes file
# with `.claude/*` on every clone. Git needs a parent un-ignored before a child negation works, hence the dirs.
/.claude/*
!/.claude/settings.json
!/.claude/agents/
!/.claude/skills/
# a local Claude skill that names a host and an SSH key (owner 2026-09-19)
/.claude/skills/s2u-bug-reports/
# 2026-09-20 (controller handoff): what showed as untracked on every `git status` and must never be committed.
# (The audio suite's .bin/.wav/.vpk fixtures used to be listed here; since Sprint 10 H4 ps2x_tests writes them
# under the system temp directory, and the fresh-clone trial's root stayed clean.)
# stray card folders a run from the repo root leaves behind; the live cards are under game/disc/ and cards/
/mc0/
/mc1/
/third_party/ps2recomp/mc0/
/third_party/ps2recomp/mc1/
# pytest is not used here (tools_py/tests/test_test_hygiene.py); its cache is debris
.pytest_cache/
# a generic onboarding template, the owner's, never the project's
/ONBOARDING.md

# Sprint 10 hardening (2026-09-20, the day the repository went public): the leak check's owner-specific literals
# -- a street address, an old account name -- live here and only here. Committing a secret to catch it defeats
# the exercise. tools_py/release/leakcheck.py `ignored` proves this line still holds.
/tools_py/release/leak_extra.txt
# key material and credential files, whatever their directory (the leak check refuses them by name as well)
*.pem
*.ppk
*.p12
*.pfx
*.jks
*.keystore
*.kdbx
id_rsa*
id_ed25519*
id_ecdsa*
id_dsa*
.env
.env.*
*.secret
.netrc
.pgpass
.npmrc
.pypirc
.htpasswd

# the owner's local Horizon checkouts beside the server tree: never submodules (no .gitmodules), never tracked
/server/horizon-docker/
/server/horizon-server-database-middleware/

# web: web/redotcom (the map viewer and its server), web/landing (socomunzipped.com), web/shared (the design
# system). Dependencies, builds, and game data extracted from the owner's disc or rendered from it -- no SOCOM II
# asset is ever committed; the landing build makes its game-derived files from the disc and docs/story at build time.
/web/**/node_modules/
/web/**/dist/
/web/**/public/maps/
/web/redotcom/test-fixtures/
/web/**/playwright-report/
/web/**/test-results/
/web/**/release.tgz
/web/landing/public/media/
/web/landing/public/story/
/web/landing/public/sfx/
/web/landing/public/img/logo.webp
/web/landing/public/img/intel.jpg
/web/landing/public/img/share.jpg
/web/landing/story.html
/web/landing/map-viewer/
/web/landing/art/
/web/landing/e2e/goldens/home-*
/web/landing/e2e/goldens/story-*
# the layout before 2026-09-29 (everything under web/ directly): a tree that still holds its maps there cannot stage them
/web/public/maps/
/web/test-fixtures/

# macOS port: the Python venv scripts/build_macos.sh uses (requirements.txt, pinned)
/.venv/
