# ── Environment ───────────────────────────────────────────────────────────────
.env
.env.local
.env.production
.env.*.local
dashboard-next/.env.local

# ── Dependencies ──────────────────────────────────────────────────────────────
node_modules/
dashboard-next/node_modules/
ui/node_modules/
native-modules/

# ── Build artifacts ───────────────────────────────────────────────────────────
dist/
dist-bundle/
.next/
dashboard-next/.next/
dashboard-next/tsconfig.tsbuildinfo

# ── Electron build output ─────────────────────────────────────────────────────
release/
out/
*.exe
*.asar
*.dmg
*.AppImage

# ── Runtime-generated config & workspace ─────────────────────────────────────
workspace/
config/devos.config.json
config/hardware.json
# Graphify build artifacts — fully ignored. The graphify post-commit
# hook auto-regenerates GRAPH_REPORT.md every commit, which was
# causing rebases to abort with dirty-tree errors. Regenerate locally
# on demand via `python3 -c "from graphify.watch import _rebuild_code; ..."`
# (see CLAUDE.md). Not source of truth, not shipped to users.
graphify-out/

# Eval result artifacts. Timestamped JSON dumps from `npm run eval` —
# local-only run history. The directory itself stays tracked via the
# .gitkeep exemption so a fresh clone has somewhere to write.
evals/results/*
!evals/results/.gitkeep

# ── Claude Code session state ─────────────────────────────────────────────────
.claude/worktrees/
.claude/settings.local.json

# ── Deployment ────────────────────────────────────────────────────────────────
cloudflare-worker/wrangler.toml
.wrangler/
ui/.vercel/

# ── Secrets & certificates ────────────────────────────────────────────────────
*.key
*.pem
secrets/

# ── OS ────────────────────────────────────────────────────────────────────────
.DS_Store
Thumbs.db
Desktop/

# ── Auto-generated skills (user-specific, not committed) ──────────────────────
skills/learned/pending/*/
skills/learned/approved/*/
skills/installed/*/
# Keep scaffold
!skills/learned/pending/.gitkeep
!skills/learned/approved/.gitkeep
!skills/installed/.gitkeep

# scratch files
scratch/
cloudflare-worker/probe*.js
cloudflare-worker/patch_*.js
fix_*.js

# OS artifacts
desktop.ini
.DS_Store
Thumbs.db

# WhatsApp web cache
.wwebjs_cache/

# Shell redirect artifact
$null

# ── Internal workflow — never commit to public repo ───────────────────────────
CLAUDE.md
SESSION_RULES.md
SOUL.md
GATE_*.md
LAUNCH.md
HANDOVER*.md
WORK_LOG*.md
PROMPT_*.md
prompt_*.md
_INTERNAL*
_PRIVATE*
SCRATCH*
.claude/worktrees/
.claude/settings.local.json
.claude/scheduled_tasks.lock
# .claude/skills/ is committed intentionally (architecture docs)
.cursor/
.windsurf/
.aider/

# ── Vercel (replaced by Cloudflare) ──────────────────────────────────────────
.vercel/
vercel.json
aiden-dist/

# ── Build artifacts & binaries ────────────────────────────────────────────────
*.zip
*.tgz
*.docx
dev-*.log

# ── Legacy launchers ─────────────────────────────────────────────────────────
START_AIDEN*.bat
install.bat

# ── Internal test scripts ────────────────────────────────────────────────────
tests/prompt_*.ts
tests/reliability-sprint.ts
tests/AUDIT_LOG.md

# ── Cloudflare patch artifacts ────────────────────────────────────────────────
cloudflare-worker/patch_*.js
cloudflare-worker/contact_functions.js

# ── Dashboard scratch ─────────────────────────────────────────────────────────
dashboard-next/TERMINAL_PATCH.md
dashboard-next/dev-out.log

# ── Runtime config state (machine-specific) ───────────────────────────────────
config/setup-complete.json
config/model-selection.json

# ── Build / compile logs ──────────────────────────────────────────────────────
build-log.txt
build-win.log
dist-log.txt
pager-debug.log

# ── Runtime temp files ────────────────────────────────────────────────────────
tmp-*.log
tmp-*.json
tmp-*.sse
tmp-*.err.log
*.pid
logs/

# ── Ship / release artifacts (generated, not source) ─────────────────────────
release-notes.md
tester-dm.md
threads-post.md
SHIP-CHECKLIST.md

# ── Test reports (generated output) ──────────────────────────────────────────
tests/TEST_REPORT-*.md
tests/results/
docs/test-reports/

# ── Claude Code local settings ────────────────────────────────────────────────
.claude/settings.json

# ── Misc stray files ──────────────────────────────────────────────────────────
FileHandling.java
"UsersshivaDownloads 2/"

# ── Internal dev-process artifacts (sprint phase notes, diagnostics) ─────────
docs/sprint/_internal/
docs/sprint/phase-*.md
docs/sprint/diag-*.md
docs/sprint/v4.1-roadmap.md
docs/agents-audit-v3.md
docs/v4.0.0-architecture.md
docs/CLAUDE_CHAT_BRIEFING.md
docs/v3.19-issues-to-file.md
docs/v3.20-candidates.md
docs/v3.20-issues-staged.md
docs/issue-status-report.md
docs/v3.19.*-investigation-*.md
docs/v3.19.5-public-note-draft.md
docs/v3.19.5-runtime-publish-investigation.md
docs/v3.19.5-skill-bundle-investigation.md
docs/v3.19.5-version-display-investigation.md
docs/v3.19.6-code-execution-review.md
docs/v3.19.6-skill-license-audit.md
docs/v3.19.6-skill-locations.md
docs/v3.19.6-skill-triage.md
docs/v3.19.8-cli-noise-quick-fix.md
docs/v3.19.8-skill-bundle-bug.md
docs/research/
config/devos.config.backup.json
.claude/launch.json

# ── Smoke harnesses (CC self-smokes; not for shipping) ──────────────────────
scripts/smoke-*.ts
# Exceptions: cross-platform smokes are required CI gates (ci.yml:60,63).
# smoke-v4.1-attribution-sweep is invoked transitively by cross-platform
# at the G1 step, so it must also ship.
!scripts/smoke-v4.1-cross-platform.ts
!scripts/smoke-v4.1-cross-platform-runtime.ts
!scripts/smoke-v4.1-attribution-sweep.ts

# ── Server / test logs ──────────────────────────────────────────────────────
*.log
nse_swing_trading_poem.txt
