deploy: harden compose harness

This commit is contained in:
dela
2026-05-24 21:18:19 +08:00
parent ea22d06dab
commit 542eeefdbd
9 changed files with 110 additions and 13 deletions

View File

@@ -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 ← 本文件

View File

@@ -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 描述里说明原因并 @ 维护者。

View File

@@ -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: 完成判据(行为可观测的描述)
```