# Python
__pycache__/
*.pyc
*.pyo
*.egg-info/
dist/
build/
.venv/

# Environment
.env

# Dogfooding — local Allem credentials for the build-agent hook (never commit)
.claude/allem-dogfood.env

# Testing
.pytest_cache/
.mypy_cache/

# Celery
celerybeat-schedule
celerybeat-schedule.*

# Node
node_modules/

# OS
.DS_Store

# Document storage (pilot filesystem backend — never commit uploaded docs)
document_storage/
backend/document_storage/

# IDE
.vscode/
.idea/
# Frontend
.next/
node_modules/

# Planning & next steps
next-step.md

# AI / Claude Code context files
CLAUDE.md
AGENTS.md
frontend/CLAUDE.md
frontend/AGENTS.md
claude-code-prompt.md
claude-code-prompt-sprint2.md
claude-code-prompt-sprint3.md
claude-code-prompt-sprint4.md
claude-code-prompt-sprint5.md

# local scratch, not part of the project
_to_delete/

# ---------------------------------------------------------------------------
# Business & strategy docs — never commit.
# Moved here from .git/info/exclude on 2026-07-31. That file is local-only: it
# does not exist in a fresh clone, so on any new machine a plain `git add .`
# would have committed the pricing models, the financial models and the equity
# terms. These rules belong somewhere that travels with the repo.
# ---------------------------------------------------------------------------
/*.pdf
/*.docx
/*.xlsx
/allem-*.md
/claude-code-prompt-payload-*.md
/claude-code-prompt-block-c-*.md
/risk-trajectory-design-spec.md
/asif-infrastructure-checklist.*
/five-threads-agents-paper-outline.md
/.claude/

# Exception, ratified 2026-07-31 (María: "yes, track them — private repo").
# The mathematical spec is engineering material Asif builds from and it must be
# versioned. It is the only /allem-*.md file that is not business material —
# allem-cowork-context.md in particular names the Shuffle equity stake, so the
# pattern above stays and this one file is negated out of it.
!/allem-five-threads-mathematical-spec.md

# Connector config written by `allem init` (holds an API key).
#
# `.allem/*` and NOT `.allem/` — the difference is load-bearing. Excluding the
# directory makes git skip descending into it entirely, so a `!` negation
# underneath is silently ignored and `project.toml` would never be committable.
# Excluding its CONTENTS lets one file be negated back in.
#
# `project.toml` is meant to be committed: it carries the Allem-issued
# project_id, which is what makes project identity survive a rename, an org
# move, a clone and a monorepo split. If it were ignored, every clone would
# look like a new project, the boundary the customer drew would be lost, and
# the failure would be silent — which is the worst property a governance
# identifier can have. `config.toml` holds an API key and stays ignored.
.allem/*
!.allem/project.toml

# Duplicate files of the form "name 2.ext".
#
# Ten of these were swept into the evidence-integrity commit by `git add -A`,
# including two test modules that pytest's `test_*.py` glob collects (a space
# is not special to the glob) and one STALE copy of a service module. They are
# produced outside git — the same pattern exists 693 times inside the venvs,
# dated the day those were created — so the fix is to make them uncommittable
# rather than to keep noticing them.
* 2.*

# Suite-result artifacts. Emitted by scripts/suite_result.py; a record of one
# run on one machine, never checked in — the point is that a number is quoted
# from an artifact somebody produced, not from one that lives in the tree.
.suite-results/
