/target
# tb-py is excluded from the cargo workspace (built via maturin), so it has its own target dir.
crates/tb-py/target/
**/*.rs.bk
Cargo.lock.bak
*.pdb


# Python
__pycache__/
*.py[cod]
.venv/
venv/
*.egg-info/
build/
dist/

# Tooling caches
.pytest_cache/
.ruff_cache/
.mypy_cache/

# OS / editor
.DS_Store
Thumbs.db

# Obsidian vault UI state (the tickets/notes themselves ARE tracked; the
# vault config — window layout, open panes — is local-only). Match at any
# depth so both the root vault and tickets/ are covered.
.obsidian/

# Autonomous-loop scratch: per-ticket worktrees, stop sentinels, salvaged WIP
# patches. HOLIDAY_LOG.md is deliberately NOT ignored — it is the tracked record
# of the unattended /holiday-loop run.
.worktrees/
.loop-stop
.loop-wip/
.holiday-stop
.unattended-stop
.unattended-inflight

# Harness hook scratch (pre-compaction snapshots, markers) -- local-only
.harness/

# Unmanaged incident reports (security forensics) -- local-only, never committed
INCIDENT-*.md

# Ticket-tooling bug reports: observed bugs/quirks in ticket.py + its gate-guard
# hook, collected for hand-off to the tooling maintainer. Local-only (the .gitignore
# rule + the CLAUDE.md pointer are tracked; the reports themselves are not).
ticket-bugs/

# Real capture pairs (TB-35 sample_1; TB-33 review captures sample_2/3): the full
# originals are large (LTspice .raw + WaveForms CSVs, and a 15 MB Saleae .sal in
# sample_3). Keep them local-only. sample_1 commits its small trimmed/ fixtures
# (tests + manual app opening); sample_2/3 are hands-on review captures, not test
# fixtures, so they stay fully local.
/samples/sample_1/*
!/samples/sample_1/trimmed/
/samples/sample_2/
/samples/sample_3/
