node_modules/
/.pnp
.pnp.*

/coverage

# Anywhere — the workspaces each build into their own.
.next/
out/
build/
.turbo/
# Python's bytecode cache. Six of these were committed with the Python SDK (dde08423), so every
# run of its tests rewrote tracked files and left the tree dirty.
__pycache__/

.DS_Store
*.pem

npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

.env*
!.env.example
opencode.json

.vercel

*.tsbuildinfo
next-env.d.ts

# Meshes rendered to compare pipeline settings side by side. Served from the dev
# server so the viewer is same-origin -- R2 presigned URLs carry no CORS header, so
# a page cannot fetch them directly. ~40MB of GLB that belongs in a bucket, not here.
app/public/_bench
# The two A/B scripts that write these moved to `modal/development/video/scripts/` on
# 2026-09-13 and they resolve their output as `scripts/../<name>`, so the directories follow
# them. Pointing these at `production/` would have ignored nothing and tracked 40 MB of PNG.
modal/development/video/prompt-ab/
modal/development/video/prompt-wrap/

# Supabase CLI link state — machine-local, and it names the project ref.
supabase/.temp/

# Pasted credentials, which have no business in a commit. Named broadly on purpose:
# the one that got through was called secret-delete-after-completed-task.txt.
#
# THE BREADTH HAS A COST, PAID ONCE ALREADY: a source module named `secret.ts` is silently
# never tracked, so it works locally and is missing from CI, from a fresh clone and from every
# deployment build. Do not name source files `secret*`. The one that hit this is now
# `packages/api-core/src/api/credential.ts`.
secret*
*secret*.txt

# The brand mark's source file, 2048x2048 and 960 kB of it. What the app actually
# serves is public/system-mark.png -- the same artwork cropped to its own bounding
# box, alpha only, 35 kB -- so committing this one would put a megabyte in every
# clone to be read by nothing. Keep it wherever you keep the artwork.
/logo.png

# Wrangler/miniflare's local emulator state. Ten of these were committed once by accident --
# 164 kB of SQLite holding one 27-byte R2 probe -- for a tool this project does not use: there
# is no wrangler.toml, wrangler.jsonc or wrangler dependency anywhere in the tree. It is
# machine-local by definition, and it names buckets and object keys from whoever ran it.
.wrangler/
# BOTH TREES, because which one gets it depends on where `py` was invoked: the suite runs from
# `modal/production/video` and the bench scripts from `modal/development/video`.
modal/*/video/Python/

# Built SDK output; `pnpm --filter @auray/client build` writes it, npm reads it, git does not.
packages/*/dist/

# Generated clients (scripts/generate-sdks.mjs writes them; the README beside them is the tree).
packages/sdk-generated/*/

# Python install manager drops a runtime here when `py` runs with this cwd; it is a toolchain, not source.
packages/sdk-python/Python/

# `next dev` writes AGENTS.md and a one-line CLAUDE.md that imports it, into whichever surface it
# is run in — the block says so itself and re-adds it when removed. They carry Next's own guidance
# about reading its bundled docs, not anything about this repository, and until 2026-09-06 only
# `admin/` had them because it was the only surface `next dev` had ever been run in here. Ignoring
# them is what keeps the four surfaces alike: otherwise the first person to run `next dev` in
# `app/`, `api/` or `landing/` gets two files in their diff that have nothing to do with what they
# changed.
app/AGENTS.md
app/CLAUDE.md
api/AGENTS.md
api/CLAUDE.md
landing/AGENTS.md
landing/CLAUDE.md
admin/AGENTS.md
admin/CLAUDE.md

# `node scripts/sync-runware.mjs --fetch` downloads the vendor's model index and ~370 schemas here
# by default. It is the vendor's text, re-fetchable at will, and until 2026-09-23 nothing kept it
# out of `git add -A` (audit fingerprint `scripts/sync-runware.mjs/schema-output-path-confinement`).
/.runware-cache/
