# Build artifacts
target/
*.o
*.app/
__pycache__/
*.py[cod]

# Android Gradle: caches and build outputs are regenerable. Source under
# android-build/ that we DO track: build.gradle.kts files, gradle wrapper,
# AndroidManifest.xml, Kotlin sources under app/src/main/java, and resources
# under app/src/main/res. Everything below is daemon cache or compiler
# intermediates that churn on every build.
android-build/.gradle/
android-build/build/
android-build/app/build/
android-build/local.properties
android-build/.idea/
android-build/captures/

# Doc-example test reports (generated by scripts/run_doc_tests.sh,
# uploaded as a CI artifact in test.yml — never source)
docs/examples/_reports/

# External demo assets (game project assets the user keeps adjacent for
# perry-ui-* manual testing — not perry source). The publish.rs `assets/`
# references are about the *consumer's* project layout, not perry's repo.
/assets/
benchmarks/suite/assets/

# V2.2 per-module object cache (machine-local: keyed by opts + source hash,
# but the cached .o files bake in host CPU features via clang -mcpu=native /
# -march=native, so sharing across machines with different CPUs can produce
# SIGILL at runtime. Always machine-local, always regenerable.)
.perry-cache/
.feature-matrix/

# `perry compile --trace llvm` dumps per-module .ll files here.
.perry-trace/

# Compiled test executables in the project root (no extension)
/test_*
/test-*
!/test_*.ts
!/test-*.ts
# Re-include the test source directories
!test-files/
!tests/
!test-features/
!test-parity/
!test-coverage/
# But ignore compiled test binaries (no extension) inside them
test-files/test_*
test-files/test-*
!test-files/test_*.ts
!test-files/test_*.tsx
!test-files/test-*.ts
!test-files/test-*.tsx
!test-files/*/
tests/test_*
tests/test-*
!tests/test_*.ts
!tests/test-*.ts
!tests/test_*.sh
!tests/test-*.sh
!tests/test_copied_minor_fallback_report.py
!tests/test_compiler_output_regression.py
!tests/test_gc_1090_evidence_report.py
!tests/test_native_abi_evidence_report.py
!tests/test_typed_feedback_runtime_evidence.py
!tests/test_perf_frontier_report.py
!tests/test_test262_focused_report.py
!tests/test_npm_sweep.py
!tests/test_perf_frontier_gate_smoke.sh
!tests/*/
bench_*
!bench_*.ts
# Polyglot JSON benchmark source files (one per language).
!benchmarks/json_polyglot/bench_*.cpp
!benchmarks/json_polyglot/bench_*.go
!benchmarks/json_polyglot/bench_*.rs
!benchmarks/json_polyglot/bench_*.swift
!benchmarks/json_polyglot/bench_*.kt
!benchmarks/json_polyglot/bench_*.java

# Compiled benchmark binaries in suite/ (01_startup, 05_fibonacci, etc.)
benchmarks/suite/[0-9][0-9]_*
!benchmarks/suite/[0-9][0-9]_*.ts
benchmarks/suite/_perry_failed_stubs.o
benchmarks/suite/*.o
.bench-results/

# Compiled output binaries (catch-all for extensionless files in root)
# Named binaries from example/benchmark compilation
worker
controls
/main
/cli
counter_web
fastify
hello_web
mock-openai-repro
myairank_worker
searchbird
simple-json-test
simple-server
05_fibonacci
07_object_create
10_nested_loops
11_prime_sieve
15_mandelbrot
16_matrix_multiply
index
http-server
http_server_test
demo
auth
config
comments
posts
express_server
fastify_server
hono_server
http_server
searchbird_*
image_conv
issue42_noalloc
enum_repro
no_pragma_test

# Test output
test-parity/output/
test-parity/reports/

# Generated bundles
__perry_js_bundle.js

# Node.js
node_modules/
!benchmarks/compiler_output/fixtures/native_memory_fixture_project/node_modules/
!benchmarks/compiler_output/fixtures/native_memory_fixture_project/node_modules/@perry-fixtures/
!benchmarks/compiler_output/fixtures/native_memory_fixture_project/node_modules/@perry-fixtures/native-memory-fixture/
!benchmarks/compiler_output/fixtures/native_memory_fixture_project/node_modules/@perry-fixtures/native-memory-fixture/**
benchmarks/compiler_output/fixtures/native_memory_fixture_project/node_modules/@perry-fixtures/native-memory-fixture/native/Cargo.lock
benchmarks/compiler_output/fixtures/native_memory_fixture_project/node_modules/@perry-fixtures/native-memory-fixture/native/target/

# npm packaging: rendered package.json + staged binaries/libs
# (rebuilt by scripts/stage-npm.sh; only templates and wrapper sources are tracked)
npm/perry/package.json
npm/perry/LICENSE
npm/perry-*/package.json
npm/perry-*/bin/
npm/perry-*/lib/
npm/perry-*/LICENSE
npm/perry-*/README.md

# Temporary files
tmp/
debug_test.ts
test-hir.txt
response.txt
menu-demo.ts

# Private files
private-*

# Claude Code
.claude/worktrees/
.claude/scheduled_tasks.lock

# OS files
.DS_Store

# IDE
.idea/
.vscode/
*.swp
*.swo

# mdBook output
docs/book/

# scripts/fp_fuzz.mjs failure dumps (regenerable, machine-local)
fp_fuzz_failures/

test-files/.perry-cache/

# #800/#799: the `/test-*` rule above sweeps all of test-compat/, but the
# compat radars' source-of-truth (config, shim, README) must be tracked.
# Re-include node-core (#800) and test262 (#799); keep the rest of
# test-compat — and each radar's generated report.json — ignored.
!/test-compat/
/test-compat/*
!/test-compat/node-core/
!/test-compat/node-core/**
/test-compat/node-core/report.json
!/test-compat/test262/
!/test-compat/test262/**
/test-compat/test262/report.json
!/test-compat/npm-sweep/
!/test-compat/npm-sweep/**
!/test-compat/npm-sweep-history.csv
/test-compat/npm-sweep/__pycache__/
/test-compat/npm-sweep/out/
/test-compat/npm-sweep/.npm-sweep-results/
/test-compat/test262/reports/

# Vendored upstream corpora for the compat radars (large; never committed).
/vendor/

# stray test-output binaries (compile with -o /tmp/... instead)
/v8mini
/tiny_test
/wasm_test
/t1
