# FabledRulebook-required (agent-authored specs/plans live local only) docs/superpowers/specs/ docs/superpowers/plans/ # Secrets and environment .env .env.* !.env.example *.secret *.key *.pem # Python __pycache__/ *.py[cod] *$py.class .pytest_cache/ .mypy_cache/ .ruff_cache/ .coverage .coverage.* htmlcov/ .tox/ *.egg-info/ build/ dist/ venv/ .venv/ # Node / Vue / Vite frontend/node_modules/ frontend/dist/ frontend/.vite/ frontend/coverage/ *.log npm-debug.log* yarn-debug.log* yarn-error.log* .pnpm-debug.log # Firefox extension build artifacts (lands in FC-3) extension/*.xpi extension/web-ext-artifacts/ # Runtime volumes (must never be tracked) — anchored to repo root so they # don't accidentally match Python package dirs like backend/app/models/ /images/ /import/ /downloads/ /models/ /postgres_data/ /redis_data/ # IDE / OS .vscode/ .idea/ *.swp *.swo .DS_Store Thumbs.db # Claude Code per-user local overrides (shared .claude/settings.json is OK to commit) .claude/settings.local.json # Transient scheduler lock/state (committed by accident in 3f30327) .claude/scheduled_tasks.lock .claude/scheduled_tasks*.json # Alembic / DB scratch alembic/versions/__pycache__/ *.sqlite *.sqlite-journal .superpowers/ # Raw platform captures (milestone 387 C0 and successors). These are real # authenticated API responses taken from the operator's own account, so they # carry account data — creator lists, pledge amounts, and (in Patreon's case) # the account email inside the `card` resources. They are kept locally because # re-capturing means re-authenticating by hand, and they are the ground truth a # characterization gets re-checked against. # # The whole directory is ignored, not one filename, so a future capture is # covered by this rule instead of needing a new line somebody has to remember. # # SANITIZED fixtures derived from these DO belong in git — put them somewhere # else (tests/fixtures/, not here), with the account data stripped. # Ignore the CONTENTS, not the directory: git does not descend into an # excluded directory, so a negation for a file inside one never takes effect. # Writing it this way lets README.md be committed while everything else here # stays out. tests/fixtures/captures/* !tests/fixtures/captures/README.md