Files
ai-customer-service/prd/PRODUCTION_PHASE1_SCOPE.md

117 lines
5.1 KiB
Markdown
Raw Normal View History

# 生产一期范围与门禁定义
> 版本v1.0 | 状态:已生效
> 关联PRODUCTION_EXECUTION_PLAN.md、PRODUCTION_PHASE1_STATUS.md、tech/INTERFACE.md
---
## 1. 生产一期目标定位
生产一期是 ai-customer-service 从原型验证到生产可用的第一步。目标不是功能完备,而是**入口安全、闭环真实、运维可控**,在有限范围内做到生产级别质量。
---
## 2. 已落地能力(生产一期基线)
以下能力已在代码中实现并通过验证:
| 能力 | 代码位置 | 说明 |
|------|----------|------|
| webhook HMAC 签名校验 | `internal/http/handlers/webhook_security.go` | HMAC-SHA256skew 校验 |
| 时间戳防重放 | `internal/http/handlers/webhook_security.go` | skew window 内有效 |
| 消息幂等去重 | `internal/store/postgres/dedup_store.go` | `(channel, message_id)` 去重 |
| 工单创建 | `internal/service/dialog/service.go` | 退款/敏感意图触发转人工 |
| 工单持久化 | `internal/store/postgres/ticket_store.go` | PostgreSQL |
| 工单列表/分配/解决 | `internal/http/handlers/ticket_handler.go` | `GET /tickets``POST /assign``POST /resolve` |
| 审计日志持久化 | `internal/store/postgres/audit_store.go` | 写入 `cs_audit_logs`fail-closed |
| 健康检查 | `internal/http/handlers/health_handler.go` | `/live``/ready`(含 PostgreSQL 依赖检查) |
| 请求体大小限制 | `internal/platform/httpx/limits.go` | 全局 BodyLimit 配置 |
| JSON Schema 校验 | `internal/http/handlers/webhook_handler.go` | 最小字段必填与 unknown field 拒绝 |
| graceful shutdown | `internal/app/app.go` | 优雅停机 |
---
## 3. 生产一期明确排除范围
以下能力**不在生产一期范围内**,不作为阶段完成的阻塞项:
- 人工回复用户链路(人工客服 → 用户消息推送)
- 排队位置查询
- webhook 速率限制
- metrics / tracing / SLO 监控面板
- 知识库 CRUD / 发布 / 审核
- WebSocket 实时会话
- 多租户隔离
- 外部系统NewAPI/Sub2API深度集成
---
## 4. 剩余 P0 缺口(门禁必须项)
在以下 P0 缺口**全部收口**前,不得将项目状态汇报为"生产一期完成"
### P0-1工单状态流转审计
- **当前状态**:✅ 已落地,`TicketWorkflowStore` 在 Assign/Resolve/Close 时均调用 `writeAudit`
- **代码位置**`internal/store/postgres/ticket_workflow.go`
- **记录内容**before_state隐式/ after_state显式、actor_id、source_ip、actionassign/resolve/close
### P0-2安全拒绝事件审计
- **当前状态**:✅ 已落地,`WebhookSecurity.auditReject` 在签名缺失/无效/过期/body 读取失败时均写入审计
- **代码位置**`internal/http/handlers/webhook_security.go`
- **记录内容**Type=`webhook_security_rejected`Action=`security_reject`error_code、path、timestamp 等信息
### P0-3工单关闭语义明确
- **当前状态**:只有 resolve没有 close 语义
- **要求**:工单关闭语义明确为 resolve=已解决关闭,或补充 close 接口
- **代码位置**`internal/http/handlers/ticket_handler.go`
### P0-4Webhook 路由对齐
- **当前状态**:已落地统一入口 `/api/v1/customer-service/webhook`
- **INTERFACE.md 定义**`/api/v1/customer-service/webhook/{channel}`(按渠道独立入口)
- **当前方案**:统一入口通过 Query/Body 中的 `channel` 字段识别渠道,与 INTERFACE 定义兼容,无需路由拆分
- **说明**:生产一期采用统一入口简化运维;如后续渠道量增加,可扩展为 `/webhook/{channel}` 路径
---
## 5. 门禁检查表
### Gate A允许进入生产底座实现
- [x] 生产一期范围文档已建立(本文档)
- [x] PM / TechLead / QA 对范围达成一致
- [ ] TechLead 生产架构方案已冻结
### Gate B允许联调前
- [x] webhook 签名、防重放、幂等、鉴权、审计 fail-closed 已具备
- [x] P0-1工单状态流转审计已落地
- [x] P0-2安全拒绝事件审计已落地
- [x] P0-3工单关闭语义已明确resolve=已解决关闭,另有独立 close 接口支持
- [x] P0-4Webhook 路由)已对齐:统一入口兼容 INTERFACE 定义
- [ ] OpenAPI 与实现一致(无漂移)
- [x] readiness 健康检查可真实阻断坏实例
- [ ] 关键失败路径自动化测试存在
### Gate C允许灰度前
- [ ] P1 缺口速率限制、人工回复链路、排队位置查询、metrics/tracing明确完成或推迟计划
- [ ] 灰度/回滚 Runbook 已完成并演练
- [ ] 工单闭环真实可用
- [ ] 监控告警上线
---
## 6. 范围变更策略
任何范围变更(如新增功能、调低优先级)必须:
1. PM 提出书面变更申请
2. TechLead 评估技术影响
3. 三方PM/TechLead/QA签字确认
4. 更新本文档版本号
---
## 7. 当前版本状态
- **本文档版本**v1.1
- **生效日期**2026-04-30
- **更新内容**P0-1工单状态流转审计、P0-2安全拒绝事件审计、P0-4Webhook 路由对齐)已确认落地,更新门禁检查表状态
- **下次审查**:灰度前最终检查