# Build artifacts
dist/
*.egg-info/
build/truemend.build/
build/truemend.dist/
server/.next/
server/tsconfig.tsbuildinfo

# Local agent/session tooling (ZCode plans, agent state — not project content)
.zcode/

# TrueMend state files (user-specific, regenerated per run — never commit)
.truemend-cache.json
.truemend-cache/
.truemend-profile.json
.truemend-review.json
.truemend-workflow.json
.truemend-progression.jsonl
.truemend-learning.json
.truemend-zones.json
.truemend-definitions.json
.truemend-license
*.truemend-license
.truemend/*
# but the self-healing repair-task drop-zone IS tracked — bot PRs commit manifests here
!.truemend/heal/

# Desloppify state
.desloppify/

# Python
__pycache__/
*.pyc
*.pyo

# Coverage artifacts
.coverage
.coverage.*
coverage.xml
htmlcov/

# IDE
.vscode/
.idea/
*.swp

# OS
.DS_Store
Thumbs.db

# Keys (never commit)
keys/
*.pem
*.key
.agents/
.cursor/

# Pytest temp dirs
pytest-of-*/
tmp*/
.pytest_cache/

# Build artifacts (generated)
truemend-workspace/
tasks/
.agent/

# Validation baselines (large JSON, regenerated per Phase 0)
tests/fixtures/validation/baseline-*.json
.playground-tmp/
benchmarks/validation/
nul
.venv/
# FP-campaign worker artifacts
fp_campaign/logs/
fp_campaign/*.json
# precision_baseline.json is a CI-required input (tests/test_precision_gate.py reads it
# at collection time) — committed, unlike the other transient fp_campaign/*.json scratch
# files. It was gitignored by the blanket rule above and never committed until 2026-07-20,
# which meant every CI Test/Precision-Gate job failed at collection on a clean checkout —
# undetected for 6+ weeks because GitHub Actions was independently disabled at the repo
# level over the same window. See CLAUDE.md's CI-hygiene note.
!fp_campaign/precision_baseline.json
# transient per-vendor dogfood-trim reports (reproducible from fp_campaign tooling)
WORKER_REPORT_*.md
# generated baselines (reproducible from the campaign tooling)
fp_campaign/*.log
fp_campaign/baseline_failures.txt
# mypy_baseline.txt is a CI-required ratchet input (fp_campaign/mypy_gate.py reads it) —
# committed for the same reason as precision_baseline.json above, not gitignored.

# precision-gate output cache (worktree-safe scratch)
fp_campaign/.gate_cache/

# generated campaign state (reproducible from fp_campaign/campaign.py)
fp_campaign/campaigns/

# TrueMend SARIF analysis artifacts (generated in CI)
*.sarif

# Claude Code harness transient state
.claude/scheduled_tasks.lock

# Claude Code agent worktrees (transient)
.claude/worktrees/

# fp-campaign parallel worktrees (transient, per-target)
.worktree/

# Generated run/build artifacts (never commit)
*-audit-report.html
audit_check.json
nuitka-crash-report.xml

# fleet tooling + cloned bench corpora (not source)
.fleet/
.fleet_misses/
benchmarks/corpus/repos/
# standalone competitor-tool installs for the bench harness (not source)
benchmarks/corpus/harness/tools/
# generated benchmark run output (reproducible from benchmarks/corpus/harness/)
benchmarks/corpus/harness/runs/
# generated benchmark build/test logs (reproducible; result JSONs stay tracked)
benchmarks/results/**/*.log
