Files
jackyu66gitandCursor 0f320e040b feat: P1 profile/portrait API and freeze local-dev environment
Add host-first environment contracts (Local vs CI vs Prod), deps-only
compose, and the Profile → Portrait → deep-access mock payment slice
with device identity and auto-migrate on API startup.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-02 16:24:57 +08:00

2.6 KiB
Raw Permalink Blame History

Environment Policy — AI Contract

项目环境分为三类,禁止混用配置与工作流

Environment Goal Typical tools
1. Local Development 分钟级反馈、快速改代码 本机 Go / Node + Docker 仅依赖服务
2. CI 一致性、可重复验证 容器构建、单测、集成测
3. Production Deployment 稳定、不可变交付 镜像 + Compose/K8s

Principles

  1. Local 优先开发效率 — 改一行代码应秒级/十秒级可见,禁止「每次改代码都 docker build」。
  2. CI 优先一致性 — 用干净环境证明可构建、可测试。
  3. Production 优先稳定性 — 不可变镜像;禁止服务器上 git pull && go build 当主路径。

AI MUST

  • 本地写 Go / Vue 时默认 本机 runtime(见 development.md)。
  • Docker 本地用途默认 = 依赖服务Postgres 等),见 docker.md
  • 部署相关只改 deployment.md / deploy/*,不把 prod 流程套到本地编码。

AI MUST NOT

  • 假设「有 Docker = 本地必须 compose 起 api/web」。
  • 为改一行业务代码要求 rebuild application image。
  • .env / 生产密钥写进镜像或提交进库。
  • 用 production APP_ENV / 生产 DATABASE_URL 跑本地热更。

Configuration Ownership

File Owner Committed?
deploy/.env.example(或根 .env.example 模板:键名 + 无秘密默认值 Yes
.env.local 本地覆盖 No
.env.test / CI secrets CI 注入或加密变量 密钥 No
.env.production / 平台密钥 部署系统注入 No

Rules

  • Code never contains environment-specific secret values.
  • Local values stay in .env.local(已被 .gitignore*.local / .env 覆盖)。
  • Production values are injected by the deployment system — not copied from a laptop.
  • .env* files containing secrets must never be committed.
  • Do not load .env.production in local air / Vite.
  • Prefer one template (.env.example);按环境注入,勿把三套真密钥放进仓库。

Freeze

环境层(本文件 + development.md + docker.md + deployment.md + commands.md 相关部分)已冻结
除非真实踩坑,否则不再横向扩工程规范;下一投入点 = P1 领域实现(schema / API / 页面)。