# Dependencies
# Match BOTH the directory and a stray `node_modules` symlink — a
# self-referential symlink was committed once (node_modules -> itself, ELOOP),
# which broke binary resolution in CI + every fresh worktree. The no-slash form
# also ignores a symlink so `git add -A` can never re-introduce it.
node_modules
node_modules/
.pnp
.pnp.js
.pnpm-debug.log*

# Runtime state from scheduled-tasks framework (per-session lock)
.claude/scheduled_tasks.lock

# Build outputs
dist/
build/
out/
.next/
.cache/
_next/



# Environment variables
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
.npmrc

# Logs
logs/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace

# IDE - JetBrains
.idea/
*.iml
*.iws
*.ipr
.idea_modules/

# Testing
coverage/
.nyc_output/
.jest/

# OS
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Temporary files
*.tmp
*.temp
*.swp
*.swo
*~

# Turbo
.turbo
.turbo/

# Miscellaneous
.vercel
.netlify
*.tsbuildinfo
.eslintcache


# Project Specific
.cursor/rules/nx-rules.mdc
.github/instructions/nx.instructions.md
vite.config.*.timestamp*
vitest.config.*.timestamp*
**/test-report.junit.xml
test-results/
*.junit.xml
test-report.junit.xml

# Antigravity Stability (High Churn & Large Artifacts)
# Rationale: Prevents FSEvents buffer overflows in the monorepo.
**/.nx/**
**/.next/**
**/.parcel-cache/**
**/.vercel/**
**/dist/**
**/build/**
**/out/**
**/coverage/**
**/.nyc_output/**
**/test-results/**
**/tmp/**
**/.cache/**
**/storybook-static/**
**/playwright-report/**
**/.lighthouseci/**
**/.pnpm-store/**
**/.contentlayer/**
**/.eslintcache
**/*.tsbuildinfo
**/*.log
**/graph.json
**/.DS_Store
**/ehthumbs.db
**/Thumbs.db
**/_next/**
**/public/video_frames/**
**/artifacts/recordings/**
**/recordings/**

**/tmp/**
.env*.local

# Local Content Staging
# distribution/ is tracked intentionally — it holds public-facing project
# strategy (AI discovery, competitor landscape, package registry, publishing
# queue, content tracker, etc.) that benefits viewers and contributors.
# Personal/career-sensitive files inside it stay local-only:
distribution/EMPLOYER_SIGNAL.md
distribution/EXPOSURE_AUDIT_LOG.md
distribution/EXPOSURE_IMPACT_REVIEW.md
**/articles/
!apps/docs/src/app/articles/
.eslintcache

# Generated by benchmarks/suites/ilb-oxlint-parity/harvest-fixtures.mjs
benchmarks/suites/ilb-oxlint-parity/harvested-fixtures/
benchmarks/results/ilb-oxlint-parity/.parity.oxlintrc.json

# Agents Control Plane Sync (Private Data Boundary)
**/.agents-data/
**/.agent-tools/


# Generated compiled files in source directories
packages/*/src/**/*.js
packages/*/src/**/*.js.map
packages/*/src/**/*.d.ts
.review-screens/
.build-nocomments

# scratch dir from benchmarks/scripts/repro-deep-chain.mjs (self-cleans, but not if interrupted)
.deep-chain-repro/

# Written by scripts/ci-build.mts so post-build checks know what this shard built.
.ci-built-packages.json
benchmarks/.real-source-cache/

benchmarks/.corpus-gh-cache.json

# Derived case artifacts — regenerated, never hand-edited.
#
# `RULE_CASES.json` alone was 135,000 lines, and every PR that touched a rule
# carried it. Nobody can find a nine-line behaviour change in that, so the
# review it was supposed to enable never happened.
#
# What stays in git is what cannot be derived:
#   benchmarks/cases/registry.json    hand-authored — the accountability register
#   benchmarks/budgets/*.json         ratchet baselines — the shrink-only contract
#   benchmarks/*_PHILOSOPHY.md, VERDICT_LEDGER.md, CASE_PHILOSOPHY.md   written
#
# Regenerating is also what makes the locks honest. `sealed-vs-open-lock` read
# the COMMITTED ledger, so it verified whatever was last generated rather than
# what the tests currently say; it now regenerates first, and a poisoned
# artifact no longer changes its verdict.
#
#   npm run rule-cases          # RULE_CASES.{json,md}
#   npm run case-registry       # CASE_REGISTRY.md
#   npm run audit:spellings     # SPELLING_MISSES.{json,md}
#   npm run probe:name-dependence
benchmarks/RULE_CASES.json
benchmarks/RULE_CASES.md
benchmarks/SPELLING_MISSES.json
benchmarks/SPELLING_MISSES.md
benchmarks/NAME_DEPENDENCE.json
benchmarks/CASE_REGISTRY.md
benchmarks/CANDIDATES.md

# The sabotage fixture written by benchmarks/__tests__/sealed-vs-open-lock.test.ts.
# It is deleted in a `finally`, but a killed process leaves it behind — and it
# deliberately contains a contradictory FN marker, so committing it would wedge
# the ledger for everyone. Ignored so `git add -A` cannot pick it up.
packages/*/src/tests/__coherence-probe.test.ts

# Stryker HTML/JSON reports (scripts/mutation.mts) — CI uploads them as artifacts.
benchmark-results/stryker/
.stryker-tmp/
