# ── Power BI Project (PBIP) — Microsoft official baseline ──
# Local workspace settings (can carry connection context) and local data cache.
# G1 requires these two exact lines verbatim; keep them.
**/.pbi/localSettings.json
**/.pbi/cache.abf
# Plus the rest of the machine-local .pbi/ folder (editorSettings.json etc.).
# definition/ stays tracked (model-as-code); never ignore definition/.
**/.pbi/

# ── Secrets ──
.env
.env.*
!.env.example

# ── Raw source data (never commit; bronze is loaded into Postgres, not git) ──
# Raw CSV/Excel sources land in the DB bronze layer; the files stay local + untracked.
data/raw/

# ── Python (future pipelines) ──
__pycache__/
*.py[cod]
.venv/
venv/
.ipynb_checkpoints/

# ── Ad-hoc / scratch EDA notebooks at the repo root ──
# Exploratory notebooks kept locally; not part of the governed medallion pipeline
# (which lives in warehouse/ + powerbi/ + mappings/). Anchored to root so an
# intentionally-tracked notebook under a notebooks/ dir is unaffected.
/retail-sales-dataset.ipynb

# ── OS / editor junk ──
.DS_Store
Thumbs.db
*.swp
.idea/
.vscode/*
!.vscode/extensions.json

# ── Python build / test / lint caches ──
.pytest_cache/
.ruff_cache/
*.egg-info/
.coverage
htmlcov/
dist/
build/
.mypy_cache/
tmp/
# Local release build output (wheel/sdist already published to PyPI as seshat-bi)
release-staging/

# ── Vendored Power BI Modeling MCP (36MB binary tool, not source) ──
# The Microsoft Power BI Modeling MCP server, kept locally to build/edit the
# semantic model. It is a vendored binary, never committed. The launcher config
# is machine-local too: a tracked .mcp.json would point every fresh checkout at
# this untracked tree and fail to spawn (Codex PR#143 review). Copy
# .mcp.json.example -> .mcp.json after vendoring the extension.
*.vsix
tools/powerbi-modeling-mcp/
.mcp.json

# --- Agent-harness runtime scratch (machine-local, never committed) ---
# Per-run scratch created by coding-agent harnesses: Codex (.codex/), other
# agent runtimes (.agents/), and the temporary git worktrees a Workflow run
# mounts (.claude/worktrees/). NOTE: only .claude/worktrees/ is ignored, NOT
# all of .claude/ -- .claude/skills/ and .claude/workflows/ are tracked source.
.agents/*
!.agents/plugins/
.agents/plugins/*
!.agents/plugins/marketplace.json
.codex/
.claude/worktrees/

# Public-distribution validation scratch. Only sanitized examples under
# tests/fixtures/public_distribution/ are tracked.
.distribution-build/
.seshat-acceptance/
acceptance-evidence/private/
.claude-seshat-test/
.codex-seshat-test/

# F038 BPA runner auto-generated smoke evidence: machine-specific (absolute paths
# + timestamp), regenerated on every run. The durable record is the hand-written
# six-gate-verdict-*.md alongside it, which IS committed.
specs/038-tabular-editor-bpa-adapter/evidence/smoke-*.md

# Local git worktrees (isolated workspaces)
.worktrees/

# Demo harness (spec 083) working directory: `retail demo init` materializes the
# committed sample fixtures here for a throwaway run; the durable source is the
# committed mappings/demo_sample_orders/ + tests/fixtures/demo/. Never committed.
.demo-work/

# Generated ecosystem output (passports, benchmark runs, demo HTML, explorer).
# Durable reference fixtures live in tracked source directories, never here.
.seshat-output/

# Portfolio Watch (spec 131): the local run summary + baseline-diff snapshot
# (`retail watch`). Machine-local run output, regenerated every run; not a
# gate, not a source of truth. Git-ignored by default (research D2) -- a team
# that wants a reviewable committed baseline may deliberately un-ignore/commit
# their own .seshat/watch/snapshot.json.
.seshat/watch/

# Dagster orchestration adapter (spec 134): raw per-run records
# (records.jsonl + summary.json) under .seshat/dagster/runs/<run-id>/.
# Machine-local run output; the COMMITTED record is the rendered
# orchestration/dagster/run-evidence/<run-id>.md.
.seshat/dagster/
# Governed dbt adapter local state (spec 133). The example profile is tracked;
# the local profile contains env_var() references only and real values stay in
# the already-ignored .env.
/profiles.yml
/.user.yml
/dbt/target/
/dbt/logs/
/.seshat/dbt/

# Optional analytics integrations (`seshat integrations setup`): the shallow
# clones of the upstream Fabric/dbt skill bundles, the generated MCP
# registration, and the first-run offer marker. All of it is machine-local
# installer output -- committing it would vendor two third-party repositories
# into this tree and dirty every adopter's `git status` (same reasoning as
# .seshat/watch/ above).
.seshat/integrations/

# Generated status dashboard (regenerated by `retail dashboard`)
reports/dashboard/

# Subagent-driven-development scratch workspace (ledgers, briefs, review packages).
# Scoped to PER-PLAN subdirectories only (.superpowers/sdd/<plan-name>/) -- NOT the
# whole .superpowers/ tree, which would also swallow the committed top-level
# .superpowers/sdd/*.md reports that pre-date this ignore rule.
.superpowers/sdd/*/
.superpowers/brainstorm/

# Spec 137: full generated Finance GL fixtures. The GENERATOR and the tiny
# excerpts/ samples are committed; the ~5,000-line output is not (the largest
# committed data fixture in this repo is 1,801 bytes -- see spec 137 research R3).
tests/fixtures/finance_gl/generated/

# Adopter Sim (blind client sandbox): per-run evidence and machine-local
# timings. The tracked record is benchmark/journeys/baseline/*.findings.json;
# timings are machine-dependent and would make any other machine a permanent
# false regression (same reasoning as .seshat/watch/ above).
benchmark/journeys/runs/
.seshat/adopter-sim/

# Spec 139 (Studio frontend). The SOURCE in studio-ui/src is committed; the build
# artifacts are not.
#
# `src/seshat/studio/static/` is where `python scripts/build_studio_frontend.py` stages
# the bundle so hatchling ships it in the wheel. It is deliberately NOT tracked:
# FR-005 promises that END USERS need no Node, and end users install a wheel, not a git
# checkout. Committing a 199 kB generated bundle with content-hashed filenames would
# put it in every diff and cause conflicts on names that change with every build.
# Building the wheel is a release step that runs the build command first.
studio-ui/dist/
studio-ui/node_modules/
src/seshat/studio/static/
