# Windows OS files
Thumbs.db
ehthumbs.db
Desktop.ini
$RECYCLE.BIN/

# PowerShell temp/output artifacts
*.ps1xml
*.psd1.bak

# Editor/IDE
.vscode/
*.suo
*.user

# Netcanon runtime data — device credentials, backups, job history, schedules.
# These directories are created at runtime and must not be committed.
devices/
schedules/
jobs/
configs/

# AI-assistant tooling — local session state, never committed
.claude/
.cursor/
.aider*/

# setuptools_scm auto-generated version file — written at build time
# from the git tag; never committed.
netcanon/_version.py

# Python build artifacts
__pycache__/
*.py[cod]
*.pyo
*.pyd
*.egg-info/
*.egg
dist/
build/
.eggs/

# cx_Freeze / MSI build outputs
*.msi
*.wixpdb

# Pytest / coverage
.pytest_cache/
.coverage
htmlcov/

# Virtual environments
.venv/
venv/
env/

# Environment files
.env
.env.*
# ...but DO track the example file so new contributors know which vars exist
!.env.example

# Cross-mesh fidelity audit — per-run JSON output is timestamped and
# regenerated by `python tools/run_full_mesh.py`.  The committed
# CROSS_MESH_RESULTS.md is the current-state snapshot; individual
# JSON runs are operator scratch space, not archive material.
tests/fixtures/real/_cross_mesh_runs/*.json

# Phase 4 reconciliation — same pattern as Phase 1.  Per-run JSON is
# regenerated by `python tools/run_phase4_reconciliation.py`.  The
# committed PHASE4_RECONCILIATION.md is the current-state snapshot;
# the LATEST per-run JSON IS committed (it's the input for Phase 4b
# investigation agents) but every other run is gitignored.
tests/fixtures/real/_phase4_runs/*.json
!tests/fixtures/real/_phase4_runs/latest.json
