# Byte-compiled / optimized / DLL
.serena/
__pycache__/
*.py[cod]
*$py.class

.claude/worktrees
.claude/scheduled_tasks.lock
.claude/projects
.claude/policy-scan-state.json
.claude/tilion/sidekick/
.claude/tilion/audit/

/.probe-screenshots/

/test-results

/feature-analysis

# Built binaries from `go build` in repo root (use bin/ via the Makefile instead).
/connectord
/connectorctl
/substrate-verify
/tilion-api
/tilion
/tiliond
/execd
/migrate
/demo-bootstrap
/ontology-import
/clear-dev-org
/visibilitylint
/_generate
/dispatchgatelint

IDFILE

/*.test
/seed
TPoV/
node_modules/
/seed/
/*.out
*coverage-final.json
/*.png
/*.log
/*.txt
/*snapshot.md
*.tmp/
/.cache/

.cursor/debug-*
docker-compose.worktree.yml

/server.test
/db.test
/e2e.test
/web/tilion-api

/tilion-api
/bin/
.tilion
.npm-install.sentinel

# Stray cmd binaries from `go build ./cmd/<name>` without -o (compiled to repo root)
/auditloggen
/rendergen
/validatorgen
/writeerrgen
/policylint

# Virtual environments
.venv/
venv/
ENV/
env/

# Distribution / packaging
# Ignore build artifacts but allow descent (no trailing-slash directory prune)
# so the curated exec-sandbox OCI image source can be re-included below.
build/*
# …the curated exec-sandbox OCI image source IS tracked (PRD 0076 Task B7).
!build/exec-sandbox/
dist/
*.egg-info/
*.egg

# PyInstaller
*.manifest
*.spec

.tilion/coverage.json

# Installer
*.msi

# Testing / coverage
.coverage
.coverage.*
coverage-go.out
coverage-unit.out
coverage-db.out
coverage-analysis.out
htmlcov/
.pytest_cache/
.tox/
.nox/

# Type checkers / linters
.mypy_cache/
.ruff_cache/
.pytype/

# IDE / editor
.idea/
.vscode/
*.swp
*.swo
*~

# Environment
.env
.env.*
*.env
!.env.example
!.env.defaults

# OS
.DS_Store
Thumbs.db

# SQLite databases
*.db
*.db-wal
*.db-shm

# Generated tilion artifacts
.tilion/topology.yaml
.tilion/coverage.json

# uv
.uv/

# Air (Go hot-reload)
tmp/
tmp_connectord/
# Per-demo-org connectord build dirs + generated air configs (scripts/dev-connectord.sh)
tmp_connectord_demo_*/
build-errors.log

# Dev logs (tee'd from make dev)
logs/

# Worktree artifacts
.worktree-slots

# One-off prototypes / planning docs
feature-builder.html
future-features/
web/coverage/

# Playwright MCP logs
.playwright-mcp/

# Playwright HTML/screenshot reports
frontend/apps/web/playwright-report/
frontend/apps/web/playwright-layout-report/
frontend/apps/web/test-results/
frontend/apps/web/test-results-fidelity/
frontend/apps/web/tests/fidelity/test-results/
# Lock-tier mockup review artifacts (design-fidelity-loop.md §1.5) — regenerated
# on every run and pasted into the approval message, never a committed baseline.
frontend/apps/web/tests/fidelity/mockup-screenshots/
# Playwright dev-session storageState (written by tests/e2e/global-setup.ts)
frontend/apps/web/tests/e2e/.auth/
frontend/apps/web/tests/playwright/screenshots/
tests/playwright/l*-out/
tests/playwright/screenshots/

# Admin app design-fidelity harness (PRD 0359 F3) — mirrors the web app entries above.
frontend/apps/admin/playwright-report/
frontend/apps/admin/test-results/
frontend/apps/admin/test-results-fidelity/
frontend/apps/admin/tests/fidelity/test-results/
frontend/apps/admin/tests/fidelity/mockup-screenshots/
# No trailing slash: with one, this pattern matches only DIRECTORIES, and the
# entry that actually got committed here was a SYMLINK (mode 120000) pointing at
# one developer's absolute home path — which git happily tracked past this rule
# and which breaks module resolution in every other checkout.
tests/playwright/node_modules

# Local connectord watermark state (runtime, not source)
connectors-installed/.watermarks.json

# Benchmark run results (local snapshots, not tracked)
tests/benchmark/results/

# Retrieval-eval run reports (local snapshots, not tracked — the results/
# dir itself is tracked via results/.gitkeep so `make eval-retrieval` always
# has somewhere to write)
tests/retrieval-eval/results/*.json

# Answer-quality eval run reports (local snapshots, not tracked — mirrors
# tests/retrieval-eval/results/ above; the dir itself is tracked via
# results/.gitkeep, PRD 0360 Task B12)
tests/eval/results/*.json

# Generated demo running configs (contain live API keys — never commit).
# Unanchored (not scoped to knowledge/demos/*/) because demoseed apply accepts
# ANY existing bundle.yaml path (resolveBundlePath, cmd/demoseed/apply.go),
# not just the knowledge/demos/<name> convention (ENG-3071).
RUNNING.md
# Compiled binaries at the repo root (never commit). Anchored to / so the
# pattern only matches the top-level binary, not files inside cmd/demoseed/.
/demoseed
/classificationcodegen

# Stray binaries from cmd/* builds at repo root
/policylint
tmp_execd/

# PRD 0090 native-Postgres dev cluster (per-clone, never committed)
.localpg/
.localpg.lock
.claude/settings.local.json
audit-shots/
audit-shots*/

# stray root-built Go binaries (go build ./cmd/x dumps here)
/tilionctl

# PRD 0252: seed-generated launcher (machine-specific abs paths) + python caches
packages/app-document-analyzer/run.sh
# PRD 0261/ENG-985: same seed-generated/machine-specific-path shape as the
# Document Analyzer's above, for the Hello App's sayHello action.
packages/app-hello/run.sh
**/__pycache__/

# Frame-runtime build output (single-surface agent-app renderer) — built via
# `npm --prefix frontend/apps/web run build:frame-runtime`, not committed (the
# 3.4MB JS bundle exceeds the large-file guard). appframedist/README.md keeps
# the go:embed directory non-empty on a fresh checkout.
/internal/appframe/appframedist/app-frame-runtime.js
/internal/appframe/appframedist/app-frame-runtime.css

# Chat-widget runtime build output (PRD 0287 platform-served agent chat
# widget) — built via `npm --prefix frontend/apps/web run build:app-chat-widget`,
# not committed (same large-file guard as appframedist above).
# appchatwidgetdist/README.md keeps the go:embed directory non-empty on a
# fresh checkout.
/internal/server/appchatwidgetdist/app-chat-widget-runtime.js
/internal/server/appchatwidgetdist/app-chat-widget-runtime.css

# PRD 0386: the local app-dev helper binary, produced by `go build ./cmd/zetify-appdev`
# into the repo root. A 21MB compiled artifact, never committed.
/zetify-appdev
.localfiles/

# TypeScript incremental build caches — regenerated by every build, so tracking them
# churns the tree on any `tsc` run and the end-of-file-fixer rewrites them on every push.
*.tsbuildinfo

# Generated navigation indexes — derived from frontmatter, never authored.
# Deliberately NOT committed: every PR touching a tier file had to regenerate
# roadmap.md (133 commits in 14 days), so any two concurrent PRs conflicted by
# construction, on a diff carrying no information. Generate on demand:
#   python3 scripts/gen_roadmap.py
#   python3 scripts/gen_decision_ledger.py
knowledge/roadmap.md
knowledge/decisions-ledger.md
