# Rust
target/
**/*.rs.bk

# Python
__pycache__/
*.py[cod]
*.pyo
.venv
.venv/
*.egg-info/
dist/
build/
.pytest_cache/
.mypy_cache/
.ruff_cache/
.coverage
htmlcov/

# MkDocs build output + Material social-card cache
site/
.cache/

# Snap build artifacts. Anchored to the repository root with a leading slash:
# an unanchored `overlay/` matches a directory of that name at ANY depth, and it
# was silently swallowing `src/yazsesoverlay/` — the shipped voice-activity
# overlay package. Tracked files there were unaffected, so nothing looked wrong,
# but a NEW file added to that package never appeared in `git status` at all.
# `parts/` and `stage/` are common enough words to deserve the same treatment.
/stage/
/prime/
/parts/
/overlay/
*.snap

# Editor / OS
.vscode/
.idea/
.cursor/
.DS_Store
Thumbs.db

# Env / secrets
.env
.env.*
*.key
*.pem
*.crt
*.p12
*.pfx

# Logs / databases
*.log
*.db

# ─────────────────────────────────────────────────────────────────────────────
# PRIVATE / INTERNAL MATERIALS — NEVER PUBLISH
# This repo is the single source of truth. The paths below live in the working
# tree so they can be edited locally, but must never be committed/pushed.
# (Enforced twice: here, and by the pre-commit guard in .git/hooks/pre-commit.)
# ─────────────────────────────────────────────────────────────────────────────

# AI / assistant tooling
.claude/
CLAUDE.md
# Maintainer's personal inbox/backlog for this project (single entry point for
# ideas + tasks, driven by .claude/skills/note). Never published.
.note
.note.*
GEMINI.md
# AGENTS.md is deliberately NOT ignored: unlike CLAUDE.md it holds no private
# config, it is the public agents.md contributor standard that coding agents read.
.superpowers/
.playwright-mcp/
.mcp.json
mcp.json
.cursor/
.run/

# ── Strategy tier — PRIVATE ──────────────────────────────────────────────────
# One directory, one visibility. `design/` is PUBLIC (engineering + science);
# everything commercially or strategically sensitive lives here instead and is
# never published: marketing copy, SEO analysis, vision/idea notes for features
# that may never ship, and distribution status.
# See design/README.md for the full contract.
#
# `.mohsen.*` is the owner's own scratch notes, dropped in the repo root while
# working: raw thinking — unordered task dumps, half-formed feature ideas,
# reminders. Same tier, same reason. Globbed rather than listed so a second note
# file does not have to remember to come back here. It also still catches the
# pre-rename `.mohsen.note*` backups the note tool leaves behind; the live note
# itself is `.note`/`.note.*`, listed above.
.mohsen.*
strategy/
notes/
drafts/
.craft/

# Three subtrees of the otherwise-public `design/` that are strategy, not
# engineering. They were named private by the pre-commit hook's link-leak check and
# by hooks/design_tier.py — which excludes them from the built site — and were in
# neither the hook's block list nor here, so `git add -A` would have published them.
# Found 2026-08-16; the hook's two lists are now cross-checked by
# tests/test_privacy_hook_blocks_what_it_calls_private.py.
design/vision/
design/marketing/
design/seo/

# The manuscript stays private. It also contains paper/data/ (688 MB LibriSpeech)
# and third-party paper PDFs used for reference checking, neither of which may
# ever be published.
#
# The BENCHMARK HARNESS is the exception, and deliberately so: docs/benchmarks.md
# is a public page whose whole claim is "every number here can be reproduced with
# the commands at the bottom", and those commands are `git clone` + a script under
# paper/benchmark/. While all of paper/ was ignored those instructions 404'd for
# every reader, which made the page's central promise false. The harness is pure
# Python (~84 KB, no data, no PDFs, no manuscript), so it is published and the
# rest stays private.
paper/*
!paper/benchmark/
paper/benchmark/__pycache__/
# The RESULTS are the other half of that promise. docs/benchmarks.md publishes numbers
# and points at the harness that produced them; while paper/results/ was ignored, the
# artifacts those numbers came from -- the provenance block naming the CPU, the OS, the
# library versions and the load average, plus every per-row figure that did not fit on
# the page -- existed on one laptop and nowhere else. That is not reproducible and it is
# not citable. They are small JSON (tens of KB), carry no audio, no transcripts and no
# hostname or username (tests/test_benchmark_results_are_archived.py fails the build if
# one appears), so they are published with the harness.
!paper/results/
# ...including the per-run logs, which the global `*.log` rule above would
# otherwise swallow. Two of them are the ONLY surviving record of a measurement:
# the test-other engine matrix ran twice on one box, the second run overwrote the
# first, and they disagreed by 2.83 WER points on large-v3. paper/results/probes/
# README.md names which log is which run. 300 KB of console text, scanned for
# paths and login names by tests/test_benchmark_results_are_archived.py.
!paper/results/probes/logs/*.log

# Private-only docs — deliberately not published.
# Delete a line here to publish that doc. Only the master-reference PDF stays
# private now, because it is a heavy generated binary; architecture, roadmap,
# how-to/ and diagrams/ are all published on the MkDocs site (see mkdocs.yml).
docs/yazses-complete-reference.pdf

# ── Copyright guard: third-party paper PDFs ──────────────────────────────────
# PDFs of other people's papers are downloaded for personal research use only.
# Redistributing them would be a copyright violation, so no PDF is committed:
# we publish the citation, never the paper. The pre-commit hook blocks *.pdf
# outright as the enforcing check — this is the belt to that pair of braces.
*.pdf

# Extra secret belt-and-suspenders
*.local
id_rsa
id_rsa.*
id_ed25519
id_ed25519.*
secrets/
credentials/

# Android build artifacts + signing material (see docs/mobile/adr/adr-mob-009)
android/.gradle/
android/build/
android/*/build/
android/local.properties
android/.cxx/
android/captures/
*.apk
*.aab
*.keystore
*.jks
keystore.properties

# Local maintainer strategy staging area (not published)
YazSes-1000-Contributors-Playbook/
YazSes-Rapid-Growth-Execution-Pack/

# Product Questionbook run packages — candid internal assessment, never published
.questionbook/
runs/

# Deferred until there are ~30 contributors — sprints need the maintainer present
campaign/online-sprint.md
