deploy: harden compose harness
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
| 验证命令可跑 | strong | Makefile 全部命令在 README + AGENTS.md 双重列出 |
|
||||
| 快速反馈环路 | strong | `go build ./...` < 2s,`go vet ./...` < 1s,单包测试支持 |
|
||||
| 任务契约质量 | partial | 模板已写(`ai/task-templates.md`),但还没有真实任务用过 |
|
||||
| 守卫规则清晰度 | strong | 11 条 G1-G11,每条都有可机械验证命令 |
|
||||
| 守卫规则清晰度 | strong | G1-G13 覆盖交易硬边界、精度、架构、指标和 compose 部署路径,关键规则进入 `make guard` |
|
||||
| 架构决策耐久度 | strong | ADR 0001 记录 9 条核心决策;其他 ADR 等触发 |
|
||||
| Spec / test-plan | partial | 还没有 specs/,因为 v1 没有需要 spec 的任务;v2 新数据源时必填 |
|
||||
| 失败反馈环路 | partial | AGENTS.md §10 写了升级时机,但还没有 `ai/risk-guardrails.md` 改动史可参考 |
|
||||
@@ -31,7 +31,7 @@
|
||||
## 已具备的工程基础
|
||||
|
||||
- **3 层 AI 文档系统**:`AGENTS.md`(速查)→ `ai/project-map.md`(结构)→ `ai/adr/`(决策)。`docs/dev.md` 作为最详细的设计源头单独存在。
|
||||
- **可机械验证的守卫**:G1-G10 全部给了 grep / make 命令,没有靠 review 的软规则。
|
||||
- **可机械验证的守卫**:G1-G13 给了 grep / make / compose 验证命令,关键规则进入 `make guard`。
|
||||
- **唯一的组合根**:`internal/app/app.go`,DI 一处可见。
|
||||
- **接口边界文件**:`internal/usecase/ports.go` 是唯一定义对外接口的位置,新 agent 找接口去这里。
|
||||
- **强约束 grep 在 AGENTS.md §6**:每次 PR 都可以直接跑。
|
||||
@@ -95,7 +95,7 @@ AGENTS.md ← AI agent 速查
|
||||
README.md ← 用户向使用文档
|
||||
docs/dev.md ← 完整设计文档(源头)
|
||||
ai/project-map.md ← 仓库结构与扩展点
|
||||
ai/risk-guardrails.md ← G1-G10 守卫规则
|
||||
ai/risk-guardrails.md ← G1-G13 守卫规则
|
||||
ai/adr/0001-architecture-foundations.md ← 9 条架构基础决策
|
||||
ai/task-templates.md ← 6 种任务模板
|
||||
ai/harness-health.md ← 本文件
|
||||
|
||||
@@ -222,6 +222,32 @@ grep -rn --include="*.go" "float64\|float32" internal/entity
|
||||
|
||||
---
|
||||
|
||||
## G13. docker compose 部署路径不可裸奔
|
||||
|
||||
**规则**:`docker compose up -d` 的生产/测试路径必须满足:
|
||||
|
||||
- Postgres 密码从 `.env` 注入,`.env.example` 只能留空占位,不能给 `postgres` 这类弱默认值。
|
||||
- `.dockerignore` 必须排除 `.env` 和 `.env.*`,防止 `Dockerfile` 的 `COPY . .` 把 secrets 送进 build context / builder layer。
|
||||
- app 容器内端口固定为 8080;宿主机暴露端口只通过 `APP_HOST_PORT` 调整。不要在 compose 中用 `${APP_PORT}` 同时控制容器内监听和宿主机映射。
|
||||
- app 必须等待 Postgres healthcheck 通过、migration init container 成功退出后再启动。
|
||||
|
||||
**为什么**:这个服务虽然不接 Binance 私钥,但 DB 密码和代理凭据仍可能出现在 `.env`。同时 app 启动前若表不存在,会导致 collector/API 失败;端口变量混用会让健康检查和端口映射分叉。
|
||||
|
||||
**怎么验证**:
|
||||
```bash
|
||||
make guard
|
||||
|
||||
# 部署机额外跑(本地无 docker 时可跳过,但发布前必须跑)
|
||||
docker compose config
|
||||
docker compose up -d
|
||||
docker compose ps
|
||||
curl -s http://localhost:${APP_HOST_PORT:-8080}/v1/health
|
||||
```
|
||||
|
||||
**例外**:无。若改为 Kubernetes / Helm / systemd 部署,也必须保留同等约束:secret 不进镜像、migration 先于 app、readiness 可观测、容器内端口稳定。
|
||||
|
||||
---
|
||||
|
||||
## 升级守护规则的时机
|
||||
|
||||
同一类错误第二次出现 → 写一条新规则进来。修改本文件 = 改动了项目契约,需要在 PR 描述里说明原因并 @ 维护者。
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
objective: 一句话说要做的事
|
||||
scope: 会改的文件 / 目录(具体路径,不要"相关文件")
|
||||
out-of-scope: 显式不改的范围(防止 scope creep)
|
||||
constraints: 引用 ai/risk-guardrails.md 的哪几条(G1-G10)
|
||||
constraints: 引用 ai/risk-guardrails.md 的哪几条(G1-G13)
|
||||
validation: 要跑哪些命令证明通过(必须可机械执行)
|
||||
acceptance: 完成判据(行为可观测的描述)
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user