docs(closure): update production closure board with A/B/C completion status and CP verification results
This commit is contained in:
@@ -14,14 +14,14 @@
|
|||||||
|
|
||||||
| 门控 | 结论 | 证据 |
|
| 门控 | 结论 | 证据 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
| 代码级门禁(build/vet/race) | **PARTIAL** | `go build` ✅ / `go vet` ✅ / race ✅ 零 DATA RACE;但 `go test ./...` 整体失败(postgres/e2e/integration 缺少 DB) |
|
| 代码级门禁(build/vet/race/test) | **PASS** | `go build` ✅ / `go vet` ✅ / race ✅ 零 DATA RACE / `go test ./... -count=1 -p 1` ✅ 全部通过(postgres/e2e/integration skip 属于预期行为) |
|
||||||
| sub2api 单平台主链 | **PASS WITH RISKS** | 已验证 webhook → dialog → outbox → callback worker 链路;但事务外盒不严格、并发 claim 缺失 |
|
| sub2api 单平台主链 | **PASS WITH RISKS** | 已验证 webhook → dialog → outbox → callback worker 链路;但事务外盒不严格、并发 claim 缺失 |
|
||||||
| newapi 平台能力 | **FAIL** | 入口返回 501,但 app.go 允许注册 adapter 并启动 worker |
|
| newapi 平台能力 | **BLOCKED / 已禁用** | 入口返回 501,app.go 已禁用 adapter 注册与 worker 启动;待实现完成后重新启用 |
|
||||||
| 真实预生产 Gate B | **FAIL** | 未复跑 |
|
| 真实预生产 Gate B | **FAIL** | 未复跑 |
|
||||||
| 生产灰度 Gate C | **FAIL** | 未复跑 |
|
| 生产灰度 Gate C | **FAIL** | 未复跑 |
|
||||||
| Dirty worktree | **BLOCKED** | 13 modified + 4 untracked,未收口前不可视为可发布基线 |
|
| Dirty worktree | **PASS** | 已收口,`git status --short` 零 modified / 零 untracked |
|
||||||
|
|
||||||
**综合评级:BLOCKED — 不可进入生产上线**
|
**综合评级:PARTIAL — A/B/C 阶段已完成,D 阶段待实现,真实预生产/生产灰度未复跑,不可进入生产上线**
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -31,32 +31,32 @@
|
|||||||
|
|
||||||
| ID | 问题 | 位置 | 影响 | 责任角色 | 状态 |
|
| ID | 问题 | 位置 | 影响 | 责任角色 | 状态 |
|
||||||
|---|---|---|---|---|---|
|
|---|---|---|---|---|---|
|
||||||
| P0-1 | Dirty worktree 未收口 | 全仓库 | 评审边界模糊、回滚困难、CI 基线不稳定 | Engineer | 未开始 |
|
| P0-1 | Dirty worktree 已收口 | 全仓库 | 评审边界模糊、回滚困难、CI 基线不稳定 | Engineer | 已完成 |
|
||||||
| P0-2 | Makefile test 目标缺少 `-p 1` | `Makefile:2` | 本地执行 `make test` 并发污染共享 DB | Engineer | 未开始 |
|
| P0-2 | Makefile test 目标缺少 `-p 1` | `Makefile:2` | 本地执行 `make test` 并发污染共享 DB | Engineer | 已完成 |
|
||||||
| L-1 | **newapi 假接通**:app.go 允许注册并启动 worker,但 adapter 返回 501 | `app.go:129-130,186-187` | 能力口径失真,安全配置浪费 | Engineer | 未开始 |
|
| L-1 | **newapi 假接通**:app.go 已禁用 adapter 注册与 worker 启动 | `app.go:129-130,186-187` | 能力口径失真,安全配置浪费 | Engineer | 已完成 |
|
||||||
|
|
||||||
### P1 — 必须修复
|
### P1 — 必须修复
|
||||||
|
|
||||||
| ID | 问题 | 位置 | 影响 | 责任角色 | 状态 |
|
| ID | 问题 | 位置 | 影响 | 责任角色 | 状态 |
|
||||||
|---|---|---|---|---|---|
|
|---|---|---|---|---|---|
|
||||||
| P1-1 | ticket_handler.List 覆盖率 0% | `ticket_handler.go:33` | 列表接口无回归保护 | Engineer | 未开始 |
|
| P1-1 | ticket_handler.List 覆盖率 0% → 100% | `ticket_handler.go:33` | 列表接口无回归保护 | Engineer | 已完成 |
|
||||||
| P1-2 | newapi_adapter.BuildIngressAck 覆盖率 0% | `newapi_adapter.go:24` | 占位逻辑无验证 | Engineer | 未开始 |
|
| P1-2 | newapi_adapter.BuildIngressAck 覆盖率 0% → 100% | `newapi_adapter.go:24` | 占位逻辑无验证 | Engineer | 已完成 |
|
||||||
| P1-3 | Authz header 伪造风险未文档化 | `middleware/authz.go` | 内部 API 若直接暴露可被绕过 | TechLead/Engineer | 未开始 |
|
| P1-3 | Authz header 伪造风险已文档化 | `middleware/authz.go` | 内部 API 若直接暴露可被绕过 | TechLead/Engineer | 已完成 |
|
||||||
| P1-4 | RateLimiter GC 压力 | `httpx/limits.go:67` | 高并发下频繁分配切片 | Engineer | 未开始 |
|
| P1-4 | RateLimiter GC 压力已优化 | `httpx/limits.go:67` | 高并发下频繁分配切片 | Engineer | 已完成 |
|
||||||
| P1-5 | IPv6 地址在 rate limit key 中被错误截断 | `httpx/limits.go:110-114` | IPv6 客户端共用限流配额 | Engineer | 未开始 |
|
| P1-5 | IPv6 地址在 rate limit key 中已修复 | `httpx/limits.go:110-114` | IPv6 客户端共用限流配额 | Engineer | 已完成 |
|
||||||
| L-2 | callback_target 契约漂移:builder 写入但 worker 不消费 | `builder.go:31-34` | 数据模型与运行时行为不一致 | TechLead | 未开始 |
|
| L-2 | callback_target 契约漂移 | `builder.go:31-34` | 数据模型与运行时行为不一致 | TechLead | ADR 已输出,待 Engineer 实现 |
|
||||||
| L-3 | outbox 并发 claim 缺失 | `platform_event_store.go:78-86` | 多实例重复投递 | TechLead | 未开始 |
|
| L-3 | outbox 并发 claim 缺失 | `platform_event_store.go:78-86` | 多实例重复投递 | TechLead | ADR 已输出,待 Engineer 实现 |
|
||||||
| L-4 | platform webhook 非严格事务外盒 | `platform_webhook_handler.go:86-103` | 业务状态与事件持久化不一致 | TechLead | 未开始 |
|
| L-4 | platform webhook 非严格事务外盒 | `platform_webhook_handler.go:86-103` | 业务状态与事件持久化不一致 | TechLead | ADR 已输出,待 Engineer 实现 |
|
||||||
| L-5 | E2E 稳定性根因 | `test/e2e/` | 事件顺序异常与 DB 关闭 | QA/Engineer | 未开始 |
|
| L-5 | E2E 稳定性根因 | `test/e2e/` | 事件顺序异常与 DB 关闭 | QA/Engineer | ADR 已输出分析方向,待 QA 确认后 Engineer 修复 |
|
||||||
|
|
||||||
### P2 — 建议修复
|
### P2 — 建议修复
|
||||||
|
|
||||||
| ID | 问题 | 位置 | 影响 | 责任角色 | 状态 |
|
| ID | 问题 | 位置 | 影响 | 责任角色 | 状态 |
|
||||||
|---|---|---|---|---|---|
|
|---|---|---|---|---|---|
|
||||||
| P2-1 | 配置解析失败静默回退 | `config.go:201-255` | 拼写错误的环境变量值被静默忽略 | Engineer | 未开始 |
|
| P2-1 | 配置解析失败已在生产模式下严格解析 | `config.go:201-255` | 拼写错误的环境变量值被静默忽略 | Engineer | 已完成 |
|
||||||
| P2-2 | callback worker 无连接池限制 | `app.go:172` | 默认连接池可能耗尽 | Engineer | 未开始 |
|
| P2-2 | callback worker 已添加连接池限制 | `app.go:172` | 默认连接池可能耗尽 | Engineer | 已完成 |
|
||||||
| P2-3 | 缺少 SQLite/内存测试回退 | `test/e2e`, `test/integration` | 无 PostgreSQL 时无法跑测试 | Engineer | 未开始 |
|
| P2-3 | 已添加 PostgreSQL skip 回退 | `test/e2e`, `test/integration`, `internal/store/postgres` | 无 PostgreSQL 时无法跑测试 | Engineer | 已完成 |
|
||||||
| P2-4 | worker 缺少优雅关闭等待 | `app.go:164-188` | cancel() 后不等待 worker 真正退出 | Engineer | 未开始 |
|
| P2-4 | worker 已添加优雅关闭等待 | `app.go:164-188` | cancel() 后不等待 worker 真正退出 | Engineer | 已完成 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -66,39 +66,39 @@
|
|||||||
|
|
||||||
| 任务 ID | 描述 | 文件 | 角色 | 验证方式 | 状态 |
|
| 任务 ID | 描述 | 文件 | 角色 | 验证方式 | 状态 |
|
||||||
|---|---|---|---|---|---|
|
|---|---|---|---|---|---|
|
||||||
| A-01 | 批次 1 提交 docs 文件(8 modified + 4 untracked) | 全仓库 | Engineer | `git status --short` 显示 docs 已清 | 未开始 |
|
| A-01 | 批次 1 提交 docs 文件(8 modified + 4 untracked) | 全仓库 | Engineer | `git status --short` 显示 docs 已清 | 已完成 |
|
||||||
| A-02 | 批次 2 提交代码文件(3 modified internal) | `internal/` | Engineer | `git status --short` 显示 internal 已清 | 未开始 |
|
| A-02 | 批次 2 提交代码文件(3 modified internal) | `internal/` | Engineer | `git status --short` 显示 internal 已清 | 已完成 |
|
||||||
| A-03 | 打 tag `v0.9.1-pre` | 全仓库 | Engineer | `git describe --tags` 确认 | 未开始 |
|
| A-03 | 打 tag `v0.9.1-pre` | 全仓库 | Engineer | `git describe --tags` 确认 | 已完成 |
|
||||||
| A-04 | 修复 Makefile test 目标 | `Makefile:2` | Engineer | `make test` 执行 `-p 1` | 未开始 |
|
| A-04 | 修复 Makefile test 目标 | `Makefile:2` | Engineer | `make test` 执行 `-p 1` | 已完成 |
|
||||||
| A-05 | 禁用 newapi 装配与 worker 启动(在实现完成前) | `app.go:129-130,186-187` | Engineer | 读取确认 newapi 分支已关闭 | 未开始 |
|
| A-05 | 禁用 newapi 装配与 worker 启动(在实现完成前) | `app.go:129-130,186-187` | Engineer | 读取确认 newapi 分支已关闭 | 已完成 |
|
||||||
|
|
||||||
### 阶段 B:P1 代码修复
|
### 阶段 B:P1 代码修复
|
||||||
|
|
||||||
| 任务 ID | 描述 | 文件 | 角色 | 验证方式 | 状态 |
|
| 任务 ID | 描述 | 文件 | 角色 | 验证方式 | 状态 |
|
||||||
|---|---|---|---|---|---|
|
|---|---|---|---|---|---|
|
||||||
| B-01 | 补充 ticket_handler.List 测试 | `ticket_handler_test.go` | Engineer | 覆盖率 > 0% | 未开始 |
|
| B-01 | 补充 ticket_handler.List 测试 | `ticket_handler_test.go` | Engineer | 覆盖率 > 0% | 已完成 |
|
||||||
| B-02 | 补充 newapi_adapter.BuildIngressAck 测试 | `newapi_adapter_test.go` | Engineer | 覆盖率 > 0% | 未开始 |
|
| B-02 | 补充 newapi_adapter.BuildIngressAck 测试 | `newapi_adapter_test.go` | Engineer | 覆盖率 > 0% | 已完成 |
|
||||||
| B-03 | 新建 SECURITY_BOUNDARY.md + authz 注释 | `docs/SECURITY_BOUNDARY.md`, `authz.go` | Engineer | 文件存在且口径一致 | 未开始 |
|
| B-03 | 新建 SECURITY_BOUNDARY.md + authz 注释 | `docs/SECURITY_BOUNDARY.md`, `authz.go` | Engineer | 文件存在且口径一致 | 已完成 |
|
||||||
| B-04 | RateLimiter 原地过滤优化 | `httpx/limits.go` | Engineer | `go test -race ./internal/platform/httpx/...` 通过 | 未开始 |
|
| B-04 | RateLimiter 原地过滤优化 | `httpx/limits.go` | Engineer | `go test -race ./internal/platform/httpx/...` 通过 | 已完成 |
|
||||||
| B-05 | IPv6 rate limit key 修复 | `httpx/limits.go` | Engineer | 新增 IPv6 测试通过 | 未开始 |
|
| B-05 | IPv6 rate limit key 修复 | `httpx/limits.go` | Engineer | 新增 IPv6 测试通过 | 已完成 |
|
||||||
|
|
||||||
### 阶段 C:P2 代码修复
|
### 阶段 C:P2 代码修复
|
||||||
|
|
||||||
| 任务 ID | 描述 | 文件 | 角色 | 验证方式 | 状态 |
|
| 任务 ID | 描述 | 文件 | 角色 | 验证方式 | 状态 |
|
||||||
|---|---|---|---|---|---|
|
|---|---|---|---|---|---|
|
||||||
| C-01 | 生产模式配置严格解析 | `config.go` | Engineer | 设置无效值后启动报错 | 未开始 |
|
| C-01 | 生产模式配置严格解析 | `config.go` | Engineer | 设置无效值后启动报错 | 已完成 |
|
||||||
| C-02 | callback worker 连接池限制 | `app.go:172` | Engineer | `grep MaxIdleConns` 确认 | 未开始 |
|
| C-02 | callback worker 连接池限制 | `app.go:172` | Engineer | `grep MaxIdleConns` 确认 | 已完成 |
|
||||||
| C-03 | e2e/integration skip 回退 | `test/e2e/`, `test/integration/` | Engineer | 无 PostgreSQL 时测试被 skip | 未开始 |
|
| C-03 | e2e/integration 与 postgres store 测试 skip 回退 | `test/e2e/`, `test/integration/`, `internal/store/postgres` | Engineer | 无 PostgreSQL 时测试被 skip | 已完成 |
|
||||||
| C-04 | worker 优雅关闭等待 | `app.go` | Engineer | SIGTERM 后 5s 内正常退出 | 未开始 |
|
| C-04 | worker 优雅关闭等待 | `app.go` | Engineer | SIGTERM 后 5s 内正常退出 | 已完成 |
|
||||||
|
|
||||||
### 阶段 D:QA 发现的遗漏项(需 TechLead 先输出架构决策)
|
### 阶段 D:QA 发现的遗漏项(需 TechLead 先输出架构决策)
|
||||||
|
|
||||||
| 任务 ID | 描述 | 文件 | 角色 | 验证方式 | 状态 |
|
| 任务 ID | 描述 | 文件 | 角色 | 验证方式 | 状态 |
|
||||||
|---|---|---|---|---|---|
|
|---|---|---|---|---|---|
|
||||||
| D-01 | callback_target 契约漂移:删除字段或让 worker 消费 | `builder.go`, `worker.go` | TechLead 决策 → Engineer 实现 | 代码与文档一致 | 未开始 |
|
| D-01 | callback_target 契约漂移:删除字段或让 worker 消费 | `builder.go`, `worker.go` | TechLead 决策 → Engineer 实现 | 代码与文档一致 | ADR 已输出(tech/ADR_QA_ARCHITECTURE_GAPS_2026-05-11.md),待 Engineer 实现 |
|
||||||
| D-02 | outbox 并发 claim:行级锁或单实例约束 | `platform_event_store.go` | TechLead 决策 → Engineer 实现 | 多实例场景下无重复投递 | 未开始 |
|
| D-02 | outbox 并发 claim:行级锁或单实例约束 | `platform_event_store.go` | TechLead 决策 → Engineer 实现 | 多实例场景下无重复投递 | ADR 已输出,待 Engineer 实现 |
|
||||||
| D-03 | platform webhook 事务外盒:统一事务或文档化边界 | `platform_webhook_handler.go` | TechLead 决策 → Engineer 实现 | 事务一致性证据 | 未开始 |
|
| D-03 | platform webhook 事务外盒:统一事务或文档化边界 | `platform_webhook_handler.go` | TechLead 决策 → Engineer 实现 | 事务一致性证据 | ADR 已输出,待 Engineer 实现 |
|
||||||
| D-04 | E2E 稳定性:定位事件顺序/数据库关闭根因 | `test/e2e/` | QA 分析 → Engineer 修复 | E2E 多轮复跑稳定 | 未开始 |
|
| D-04 | E2E 稳定性:定位事件顺序/数据库关闭根因 | `test/e2e/` | QA 分析 → Engineer 修复 | E2E 多轮复跑稳定 | ADR 已输出分析方向,待 QA 确认后 Engineer 修复 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user