# ════════════════════════════════════════════════════════════════════════════
# Git 忽略规则
#
# 原则：**只提交源码与文档，构建产物、依赖缓存、密钥一律不入库。**
# ════════════════════════════════════════════════════════════════════════════

# ─────────────────────────── Java / Gradle ───────────────────────────
build/
!gradle/wrapper/gradle-wrapper.jar
.gradle/
out/
*.class
*.jar
*.war
*.ear
!**/gradle/wrapper/gradle-wrapper.jar
hs_err_pid*
replay_pid*

# ─────────────────────────── 测试与覆盖率产物 ───────────────────────────
# 注意：index/coverage-map.md 是**生成后要提交**的索引文件，故不在此忽略
test-results/
reports/
jacoco/
*.exec
*.hprof
# jqwik 属性测试的失败样本数据库（由测试运行生成，不入库）
.jqwik-database

# ─────────────────────────── Node / 前端（M3 起使用） ───────────────────────────
node_modules/
dist/
.vite/
*.tsbuildinfo
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
.pnpm-store/
# Playwright E2E 产物（trace / screenshot / storageState / 报告）
.e2e-artifacts/

# ─────────────────────────── uni-app / 小程序 / Android（M4-M5 起使用） ───────────────────────────
unpackage/
.hbuilderx/
.local/
android/app/build/
android/.gradle/
android/build/
*.apk
*.aab
*.keystore
*.jks
local.properties

# ─────────────────────────── IDE ───────────────────────────
.idea/
*.iml
*.ipr
*.iws
.vscode/
!.vscode/settings.json
!.vscode/extensions.json
*.swp
*.swo
*~

# ─────────────────────────── 操作系统 ───────────────────────────
.DS_Store
Thumbs.db
desktop.ini
$RECYCLE.BIN/

# ─────────────────────────── 日志与临时文件 ───────────────────────────
*.log
logs/
.tools/
*.tmp
*.bak
*.orig

# ─────────────────────────── ★ 密钥与本地配置（安全红线） ───────────────────────────
# 绝不允许把真实凭证推到远程仓库。
# .env 模板（.env.example，仅含占位值）应当提交，真实 .env 不提交。
.env
.env.*
!.env.example
!.env.*.example
*.pem
*.p12
*.pfx
secrets/
application-local.yml
application-prod.yml
# 例外：生产 profile 只含 ${ENV} 占位符、不含任何真实凭据，随部署制品一起入库。
# 个人覆盖仍走 application-prod.local.yml（被下面的 **/application-*.local.yml 忽略）。
!backend/server/src/main/resources/application-prod.yml

# ─────────────────────────── 本地环境覆盖 ───────────────────────────
# 开发者个人配置覆盖，因人而异，不入库
**/application-*.local.yml

# ─────────────────────────── M6 部署本地产物 ───────────────────────────
# 部署状态（当前/上一版 tag）、数据库备份、离线镜像构建上下文
infra/deploy/.deploy-state
infra/deploy/backups/
infra/deploy/offline/.context/

# ─────────────────────────── 本机构建环境（工作区内的 Gradle 主目录） ───────────────────────────
# 背景：本机沙箱不允许写工作区之外的路径（默认 GRADLE_USER_HOME 在 D:\Major_Software\Gradle\home），
#       因此把 Gradle 主目录放进工作区。它只是依赖缓存与守护进程状态（约 600 MB，可再生），
#       既不提交，也不应出现在 git status 里干扰评审。
.buildenv/

# ─────────────────────────── 交付物（按需保留） ───────────────────────────
# 课程要求提交的打包产物/截图等，如需入库请用 git add -f 强制添加
*.zip
!docs/assets/*.zip

# 一键启动脚本的运行日志（scripts/start-system.ps1）
.run/

# ─────────────────────────── 智能体工作区与临时目录 ───────────────────────────
# .workbuddy/ 是本机智能体的记忆与配置（跨会话上下文），属于"这台机器上的工作状态"，
# 不是项目产物；入库只会让评审看到一堆与本项目无关的笔记。
.workbuddy/
# 构建绕路时用来暂存旧产物的目录（见 app/desktop/README.md「验证前必看的本机坑」）
.tmp/
# 校验截图（.plan/shots/）只作过程证据，不入库
.plan/shots/

# Python（scripts/*.py 会生成）
__pycache__/
*.pyc
