# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# Virtual envs
.venv/
venv/
ENV/
env/

# Editors / IDE
.idea/
.vscode/
*.swp
*.swo
*~
.DS_Store

# Test / coverage
.pytest_cache/
.coverage
.coverage.*
htmlcov/
.tox/
.nox/
coverage.xml
*.cover
.hypothesis/
.mypy_cache/
.ruff_cache/

# Node / UI
ui/node_modules/
ui/dist/
ui/.vite/
ui/test-results/
ui/playwright-report/
ui/playwright/.cache/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Local state (HAL0_HOME dev override)
/var/
/etc-local/
/usr-local/
hal0-home/

# Test harness runtime artifacts
.harness/
tests/harness/reports/
tests/harness/reports.*/

# Local hal0 install state (HAL0_HOME on dev hosts)
.hal0ai/

# Secrets
.env
.env.local
*.pem
*.key
auth.json

# Operator-only docs (live notes referencing internal lab hosts; kept
# out of public history so they don't have to be sanitised every edit).
docs/**/handoff-*.md
/.handoff-*.md
tests/release-gate-report.json

# Developer/agent-internal docs (planning, handoffs, agent workflow notes,
# internal audits) — local-only; public-facing docs are the hal0-web mirror
# under docs/*.mdx plus docs/adr/. No IP scrubbing needed for local notes.
docs/.devdocs/
docs/internal/
# Agent-session plan/spec docs (#1988). These lived in the public tree while
# the policy above homed them here; they belong with the other local-only
# notes, not in a published repo. Source comments still cite the old
# docs/superpowers/... paths — those citations predate the move.
docs/superpowers/

# Internal test-harness ops log (lab-host run tables)
tests/harness/FINDINGS.md

# OS
Thumbs.db
.claude/worktrees/
.claude/design-import/
.claude/wip.json
.claude/.wip.lock
# per-branch team worktree state (graphify caches etc.) — machine-local
.claude/team-wt/

# knowledge graph — generated locally by `graphify update .`, never committed.
# The report used to be tracked; it was a 400 KB generated artefact that went
# stale against the commit it was built from, so nothing under here is kept now.
graphify-out/
.claude/branch-status.json

# pi agent artefacts — session-scoped, never committed
.pi/
.pi-subagents/
.pi-tasks/

# never track node_modules anywhere (incl. symlinks)
node_modules
**/node_modules

# superpowers brainstorm/visual-companion scratch (mockups, server state)
.superpowers/

# Superset workspace state. The lifecycle scripts + config.json are tracked;
# the per-workspace port assignment, run pidfile, and local config extension
# are machine-local (docs/agents/superset-integration.md).
.superset/workspace.env
.superset/run.pid
.superset/config.local.json

# Claude Code local settings + Playwright MCP session artifacts (local-only)
.claude/settings.local.json
.playwright-mcp/

# ad-hoc QA screenshots at repo root (brand/UI assets live under ui/)
/*.png

# git worktrees (project-local isolation; see superpowers:using-git-worktrees)
/.worktrees/

# Local docs scratch — never committed, never mirrored
docs/.dev/

# Serena MCP project config (per-developer, local only)
/.serena/

# docs->Discourse sync output artifact (generated per run; CI uploads it
# as a workflow artifact instead of committing it — see
# scripts/docs_discourse_sync/README.md)
/scripts/docs_discourse_sync/redirect-map.json
