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>
This commit is contained in:
jackyu66git
2026-08-02 16:24:57 +08:00
co-authored by Cursor
parent dd94e57277
commit 0f320e040b
49 changed files with 1907 additions and 191 deletions
+62
View File
@@ -0,0 +1,62 @@
# 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](development.md))。
- Docker 本地用途默认 = **依赖服务**Postgres 等),见 [docker.md](docker.md)。
- 部署相关只改 [deployment.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 / 页面)。
## Related
- Local: [development.md](development.md)
- Docker role: [docker.md](docker.md)
- Prod/CI deploy: [deployment.md](deployment.md)
- Commands: [commands.md](commands.md)