node_modules/
.turbo/
# .next-* 也要盖住：NEXT_DIST_DIR 会另起 dist 目录（.next-probe / .next-dev …），
# 每个都带完整 standalone 产物（实测 835MB）。只写 .next/ 匹配不到它们。
.next/
**/.next-*/
dist/
out/
coverage/
*.tsbuildinfo

# Foundry
cache/
broadcast/
!broadcast/**/run-latest.json

# 环境变量
# ⚠️ `.env` 这一条只匹配**文件名恰好是 `.env`** 的，匹配不到 `.env.deploy`
# —— 而那个文件里放的是部署者私钥。所以下面用 `.env.*` 兜住所有变体，
# 再单独把 *.example 放出来（那些是要进版本库的模板）。
# 负向规则必须写在 `.env.*` 之后，否则会被后面的规则覆盖掉。
.env
.env.*
!.env.example
!.env.*.example

# 系统
.DS_Store
*.log

# SDD 工作区（临时产物，不入库）
.superpowers/
out/
out-v4/
out-fork/
# 每个 foundry profile 一个产物目录（见 packages/contracts/foundry.toml 的注释：
# 刻意分开，避免两棵源码树的同名 artifact 互相覆盖）
out-fusor/
out-fusor-v4/
out-split/
out-deploy/
cache/
.image-cache/
packages/contracts/lib/

# Python SDK
__pycache__/
*.py[cod]
.pytest_cache/
*.egg-info/

# ── 部署记录必须进版本库（这几条要放在**最后**）──
# .gitignore 里有两条 `out/`（第 5、30 行），而 `out/` 匹配任何层级名叫 out 的目录，
# 于是 packages/contracts/deploy/out/ 被连带忽略。那里放的是部署记录
# （oracle-registry.json 是阶段 1 的 stockRegistry 来源，launchpad.json 是 SDK 的输入），
# 丢了等于丢掉「我们部署在哪」这个事实。
# 负向规则必须写在所有 `out/` 之后，否则会被后面的规则重新盖掉（踩过）。
# 目录本身要先放出来，不然 git 根本不会往里走。
!packages/contracts/deploy/out/
!packages/contracts/deploy/out/*.json
# 但 fork 演练产生的临时记录不要进
packages/contracts/deploy/out/*.anvil.json

# 部署密钥：绝不进版本库，也绝不进构建上下文
secrets/
deploy.env

# 备份集：scripts/backup.sh 的产物。单次就有 190MB+
# （postgres.dump + images.tar.gz + caddy-data.tar.gz），而且里面有库的全量数据
# 与 TLS 私钥 —— 既不能进版本库，也不能进构建上下文（.dockerignore 同理）。
# 异地存放的做法见 docs/ops/ingress-and-backup.md。
backups/
.vercel
.env*.local

# 发布凭据（npm / PyPI token）。放在仓库内本来就不该，但如果放了，
# 至少不能被提交。发布完请立刻删除 —— 见 PROGRESS.md 的「发布」一节。
sdks/.publish-npmrc
sdks/.publish-pypirc
# Python SDK 的压缩构建暂存目录（scripts/build.py 用完即删）
sdks/python/.build/
