# macOS
.DS_Store
.AppleDouble
.LSOverride

# Editor directories and files
.vscode/
.idea/
*.swp
*.swo
*~

# Node modules (if you add tooling)
node_modules/
npm-debug.log*

# Build outputs
dist/
build/
*.log

# Python
.venv/
venv/
env/
__pycache__/
*.py[cod]
*$py.class
*.egg-info/
.pytest_cache/
.coverage
.coverage.*
htmlcov/
.mypy_cache/
.ruff_cache/
coverage.xml

# Generated reports
reports/
/release-notes.md
wiki/
# wiki/ above ignores generated vault output; the ao bounded-context package is source
!cli/internal/wiki/

# Agent runtime state
# Repo-root .agents/ is local/private runtime state for Codex, Claude,
# AgentOps, and other agents. It must never be tracked in git.
/.agents/
tests/claude-code/.agents/

# Allow test fixtures under .agents/ paths
!cli/cmd/ao/testdata/**/.agents/
!cli/cmd/ao/testdata/**/.agents/**

# Runtime state
state.json
.runtime/
.claude/memory.md

# MkDocs build output + local venv
_site/
.venv-docs/

# Local temp artifacts (generated during skill self-tests / hooks)
.tmp/
skills/.tmp/
.x/
cli/.x/
hook-output.txt
skills/vibe/README.md

# Go binaries (built locally)
cli/ao
cli/bin/ao
cli/cmd/ao/ao
cli/cmd/ao/ao-test-bin
cli/coverage.out
cli/coverage.html
# Go test binaries
*.test

# CLI local state (generated by ao runs in cli/ workdir)
cli/.agents/

# Agent Farm temp files
.farm.meta
.witness.pid
.witness.heartbeat
.witness/

# Gas Town (added by gt)
.claude/
.logs/
.beads/

# Session artifacts (generated by agents)
HANDOFF_SUMMARY.md

# Dolt database files (added by bd init)
.dolt/
*.db
.coverdata/

# Coverage artifacts
cli/*cov*.out
cli/*cov*.html
cli/cmd/ao/.tmp
MEMORY.md

# Beads / Dolt files (added by bd init)
.beads-credential-key

# Gas City runtime (created by gc init)
.gc/
city.toml
city.toml.bak
prompts/
formulas/
orders/
hooks/claude.json
packs/

# gvkj6 reference-City pack — committed source, NOT gc-init runtime.
# The rules above ignore the `gc init` runtime variants of these names; the lines
# below un-ignore ONLY the repo-root AgentOps reference city + its pack tree
# (anchored with a leading `/`, so nested `gc init` output elsewhere stays
# ignored). git cannot re-include a file whose parent dir is excluded by a
# trailing-slash pattern (`packs/` line 121, `.claude/` line 92) unless every
# intermediate directory level is itself re-included first — hence the explicit
# per-level `!` chain below, not a single `!/packs/agentops/**`.
!/city.toml
!/packs/
!/packs/agentops/
!/packs/agentops/**
!/packs/agentops/overlay/
!/packs/agentops/overlay/.claude/
!/packs/agentops/overlay/.claude/**

# AgentOps session artifacts
# Default: everything under the repo-root .agents/ is local/private runtime
# state (anchored — leading `/` keeps the rule from also matching nested
# .agents/ dirs like cli/.agents/, which has its own rule above).
/.agents/*
/.agents/**/*

# Force-tracked .agents/ paths that compound across runs (audit truth, not
# session state). Each path below must remain reproducible: nightly+evolve
# digests, fitness deltas, and probe history depend on these existing in
# main between runs. Never broaden the allowlist without updating
# CLAUDE.md / PROGRAM.md to match. The leading directory re-includes are
# required because git refuses to re-include files inside an excluded
# parent directory. All patterns are anchored with a leading `/` so
# cli/.agents/, tests/claude-code/.agents/, etc. stay excluded.
!/.agents/
!/.agents/rpi/
!/.agents/rpi/next-work.jsonl
!/.agents/nightly/
!/.agents/nightly/**
!/.agents/evolve/
!/.agents/evolve/cycle-history.jsonl
!/.agents/evolve/session-state.json
!/.agents/goals/
!/.agents/goals/**/
!/.agents/goals/**/attempts.jsonl
!/.agents/findings/
!/.agents/findings/registry.jsonl
# Reconciliation Engine arc — static contract artifacts (snapshot + operator
# decision records).
!/.agents/reconcile/
!/.agents/reconcile/wave-0-thesis-snapshot.md
!/.agents/reconcile/thesis-stability-decision.md
!/.agents/reconcile/promotion-decision.md

# AgentOps session artifacts
.agents/
# Re-include the per-repo evolve preferences template (soc-6svt). The template
# ships in the repo as a starter; the actual preferences.yaml stays per-operator
# and remains gitignored. We have to re-allowlist each ancestor directory after
# the unanchored `.agents/` re-exclude above — git won't recurse into an
# excluded directory to evaluate file-level negations.
!/.agents/
!/.agents/evolve/
!/.agents/evolve/preferences.yaml.template
evals/workbench/scorecard-latest.json
.doctor/

# Release evidence/output dir generated by the release CI (pre-publish-evidence
# SBOM + security-gate summary). Must be ignored so GoReleaser's --clean dirty-state
# check passes in the publish job.
release-artifacts/
