Files
ai-customer-service/test/QA_GATE_STATUS.md
Your Name 142b991334 fix(config+app): production fail-fast + readiness收紧
1. config.go: AI_CS_ENV runtime mode with production restriction
   - New RuntimeConfig.Env field (AI_CS_ENV / AI_CS_RUNTIME_ENV)
   - production + Postgres.Enabled=false → Load() returns error
   - production + empty webhook secret → Load() returns error
   - normalizeRuntimeEnv: dev/dev/ → development, prod/production → production, test → test

2. app.go: probe.SetReady only when store is confirmed ready
   - Postgres.Enabled: probe.SetReady(true) after DB+migration OK
   - Memory mode: probe.SetReady(false) — not production-ready

3. health_handler_test.go: add probe live+ready state transition tests

4. config_test.go: add TestLoad_RejectsProdWhenPostgresDisabled,
   TestLoad_RejectsProdWhenWebhookSecretMissing

5. app_test.go: add TestNew_RejectsMemoryModeWithoutExplicitNonProdEnv,
   TestNew_AllowsMemoryModeInTestEnv, TestNew_WithPostgresEnabled_*
   for invalid DSN and migration-failure paths

Phase 1 (code gate) objectives met:
 prod cannot fall back to memory store
 readiness reflects actual store readiness
 both changes have test coverage
2026-05-04 07:38:10 +08:00

153 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# QA_GATE_STATUS.md — 质量门禁状态(整改版)
> 生成时间2026-05-04 07:xx GMT+8
> QA小龙团队质量复核
> 项目ai-customer-service 生产一期
> 依据:`docs/RECTIFICATION_REVIEW_REPORT_V2.md`、当前代码实测结果、当前仓库文档对照
---
## 0. 阶段门控结论
- **当前结论REQUEST_CHANGES**
- **是否可进入下一阶段(按“生产可直接上线”口径放行):否**
- **是否可进入预生产整改 / 灰度准备:是,但前提是先完成剩余 P0/P1 真实环境项**
### 结论说明
当前项目的**代码主链已可用,仓库内关键测试已通过**;但 QA 不接受把这直接等同于“生产已具备上线条件”。
本轮已完成的关键整改:
1. **prod 默认 fallback 到 memory 的代码路径已收紧**
2. **readiness 不再在 memory 模式下直接返回 ready=UP**
3. **配置契约与执行板文档已同步回写**
当前剩余阻断已收敛到:
1. **真实环境门禁DB / migration / webhook 联调 / 入库验证)未闭环**
2. **部署侧 fail-fast / 监控 / 回滚基线仍未落地**
3. **代码级通过 ≠ 预生产通过 ≠ 生产可放量,仍需严格分层门禁**
---
## 1. 审查输入清单
### 1.1 已核对代码文件
- `internal/config/config.go`
- `internal/app/app.go`
- `internal/http/handlers/health_handler.go`
- `internal/http/router.go`
- `internal/store/postgres/*`
- `internal/store/memory/*`
### 1.2 已核对文档
- `prd/PRODUCTION_CHECKLIST.md`
- `docs/CONFIG_CONTRACT_BASELINE.md`
- `docs/P0_P1_P2_RECTIFICATION_EXECUTION_BOARD.md`
### 1.3 本轮已执行验证
```bash
go test ./internal/config ./internal/http/handlers ./internal/app -count=1
go test ./... -count=1
```
### 1.4 关键事实校准
- 当前仓库实测结论:**全量 Go 测试已通过**
- prod fallback / readiness 相关代码阻断:**已落地并有测试覆盖**
- 旧的“prod 默认可退回 memory / ready 过宽”结论:**对当前代码已不再成立**
- 旧的“可以直接按生产上线口径放行”结论:**仍不成立**
---
## 2. 规范审查结果
- **结果FAIL针对预生产 / 生产放行门禁)**
### 2.1 已通过项
- webhook / dialog / handoff / ticket 主链已落地
- feedback / handoff / stats 等 Phase 1 核心接口已具备
- Webhook HMAC / timestamp / dedup / body limit / rate limit 已存在
- Postgres 持久化链路已接通
- 仓库内全量 Go 测试已通过
- prod memory fallback 已收紧
- readiness 语义已收紧到不再对 memory 模式误报 ready=UP
### 2.2 未通过项
- 真实环境 DB / migration / webhook / audit / ticket 入库验证缺证据
- 部署侧关键配置 fail-fast、监控、回滚 runbook 未闭环
- 生产放行仍缺 Gate B / Gate C 证据
### 2.3 结论
若目标是“代码级门禁是否通过”,当前可判定通过;
若目标是“是否可按预生产完成或生产可上线放行”,**当前不通过**。
---
## 3. 实施漂移检测报告
| 检查项 | 结果 | 说明 |
|---|---|---|
| 模块拆分 | PASS | 当前实现与主链模块划分基本一致 |
| 接口签名 | PASS | 本轮关注的核心接口已存在 |
| 错误码 | PASS | 当前主要错误码口径已基本统一 |
| 数据模型 | PASS | session/ticket/audit/dedup 对应存储结构已存在 |
| 配置项 | PASS | 文档已收敛到 `internal/config/config.go` 真实读取项 |
| 测试覆盖状态 | PASS | 本轮新增约束已有单测/集成链路覆盖,且全量 Go 测试通过 |
| readiness / 运行门禁 | PASS代码级 | memory 模式不再误报 ready=UPprod 约束已落地 |
| 上线状态文档 | PASS当前基线 | 已回写执行板与 QA 文档 |
| 日志/监控/运行闭环 | PARTIAL | 代码未覆盖真实部署监控与回滚基线 |
---
## 4. 自动化验证结果表
| 检查项 | 状态 | 说明 |
|---|---|---|
| 构建 / 测试现状 | PASS | `go test ./... -count=1` 已通过 |
| 代码主链可用性 | PASS | webhook → dialog → handoff → ticket 主链存在 |
| 生产运行约束 | PASS代码级 | prod 下要求 Postgres缺失时 fail-fast |
| readiness 真实性 | PASS代码级 | memory 模式 startup not ready避免假 ready |
| 配置契约一致性 | PASS | 文档与代码变量名已对齐 |
| 真实环境门禁 | FAIL | DB/migration/webhook/入库闭环未完成证据化验证 |
| 文档状态一致性 | PASS | 当前 QA / board / checklist 已同步 |
---
## 5. 当前问题清单
### Critical
1. **真实环境验证闭环缺证据**
- 影响:无法证明 Gate B 已满足
- 建议:补预生产验证记录(真实 DB / migration / webhook / audit / ticket
2. **部署侧 fail-fast 与运行基线未闭环**
- 影响:代码已具备门禁,但部署入口仍可能绕过或缺失运行保障
- 建议:补 DevOps 基线、监控、回滚 runbook
### Important
1. **代码级通过与生产放行边界仍需持续防漂移**
- 影响:团队可能再次把仓库内通过误写成“生产可上线”
- 建议:后续所有状态文档继续坚持三层门禁表达
---
## 6. QA 最终判定
**当前项目应被定义为:**
> **代码级门禁已通过prod fallback 与 readiness P0 技术阻断已完成整改;但预生产与生产放行门禁尚未闭环,不能按“生产可直接上线”口径放行。**
因此 QA 当前给出的正式门禁结论是:
- **代码级门禁:通过**
- **预生产门禁:未通过**
- **生产放行门禁:未通过**
---
## 7. QA 自检清单
- [x] 结论基于真实文件或实测结果
- [x] 已明确区分代码门禁、预生产门禁、生产放行门禁
- [x] 已根据代码实际状态回收旧阻断项
- [x] 已保留仍未完成的真实环境与部署阻断项
- [x] 没有把“全量测试通过”夸大成“生产可上线”