81 lines
4.9 KiB
Markdown
81 lines
4.9 KiB
Markdown
# Sub2API CN Relay Manager 生产整改任务板
|
||
|
||
日期:2026-05-18
|
||
当前 Gate:历史快照(本任务板描述的是 2026-05-18 当时的整改收口状态,不代表当前最新 gate)
|
||
对应审查:`docs/2026-05-18-PRODUCTION_READINESS_REVIEW.md`
|
||
|
||
> 状态说明:这份任务板保留为“2026-05-18 整改阶段”的执行快照。
|
||
>
|
||
> 当前最新真相与放行判断请以以下文档为准:
|
||
> - `docs/SOURCE_OF_TRUTH.md`
|
||
> - `docs/EXECUTION_BOARD.md`
|
||
> - `docs/PRODUCTION_CLOSURE_BOARD.md`
|
||
> - `docs/REAL_HOST_ACCEPTANCE_RUNBOOK.md`
|
||
> - `docs/REAL_HOST_ACCEPTANCE_LEARNINGS.md`
|
||
|
||
## 当前结论
|
||
|
||
本轮代码整改已完成审查报告中的 4 个系统性阻塞项修复:
|
||
|
||
1. 宿主身份已贯穿控制面与运行时链路
|
||
2. managed_resources 已具备宿主维度
|
||
3. capability probe 已改为无副作用探测
|
||
4. rollback-provider 已收敛为按已记录资源集回滚
|
||
|
||
当前剩余工作不再是代码级阻塞,而是“真实宿主访问闭环与现场治理未收口”。
|
||
|
||
## 已完成工作分解
|
||
|
||
| ID | 类别 | 任务 | 交付物 | 验证方式 | 状态 |
|
||
|---|---|---|---|---|---|
|
||
| R1 | 设计/状态模型 | 宿主身份模型统一:运行时链路显式使用 `host_id`,宿主认证随 host 持久化 | `internal/app/http_api.go`, `internal/store/migrations/0004_host_identity_and_managed_resources.sql`, `internal/store/sqlite/hosts_repo.go` | `go test ./...` | 已完成 |
|
||
| R2 | 状态库 | `managed_resources` 增加宿主维度并完成迁移回填 | `internal/store/migrations/0004_host_identity_and_managed_resources.sql`, `managed_resources_repo.go` | `go test ./...` | 已完成 |
|
||
| R3 | 应用层 | import / reconcile / rollback / access/status 同步切到 host-scoped 查询,并收紧 batch detail 的 reconcile 视图为 batch-scoped | `internal/provision/*`, `internal/app/http_api.go` | `go test ./...` | 已完成 |
|
||
| R4 | 宿主适配 | capability probe 改为只读/无副作用探测 | `internal/host/sub2api/capability_probe.go` | `go test ./...` | 已完成 |
|
||
| R5 | 安全回滚 | rollback-provider 只按已记录批次资源回滚;缺记录则拒绝危险删除 | `internal/app/http_api.go`, `internal/provision/rollback_service.go` | `go test ./...` | 已完成 |
|
||
| R6 | 文档真相同步 | 下调部署文档乐观口径,同步整改板/执行板/OpenAPI | `docs/DEPLOYMENT.md`, `docs/EXECUTION_BOARD.md`, `docs/openapi.yaml` | 文档复读 + 搜索校验 | 已完成 |
|
||
|
||
## 最新真实宿主验收结果
|
||
|
||
| ID | 类别 | 任务 | 验证方式 | 状态 |
|
||
|---|---|---|---|---|
|
||
| V1 | 质量门禁 | `gofmt -l .` / `go vet ./...` / `go test -race ./...` / `go test -cover ./internal/...` / `go test ./tests/integration/... -count=1` | 终端验证 | 已完成 |
|
||
| V2 | `self_service` 真实宿主验收 | 重新生成 `preview-import / import / access-preview / status / reconcile / rollback` artifact | `artifacts/real-host-acceptance/20260518_self_service_reaccept_v6` | 已执行(未通过) |
|
||
| V3 | `subscription` 真实闭环 | 重新生成 `preview-import / import / access-preview / status / reconcile / rollback` artifact | `artifacts/real-host-acceptance/20260518_subscription_reaccept_v6` | 已执行(未通过) |
|
||
|
||
## 失败摘要
|
||
|
||
### V2 `self_service`
|
||
- `05-import.json`:`batch_status=partially_succeeded`、`access_status=broken`
|
||
- `06-access-preview.json`:`available=false`
|
||
- `09-reconcile.json`:`status=degraded`、`extra_count=0`、`missing_count=0`
|
||
- 判断:代码侧“跨宿主串扰 / 漂移误判”已明显收敛,但真实宿主访问闭环仍被 `gateway 403` 阻断
|
||
|
||
### V3 `subscription`
|
||
- `05-import.json`:`batch_status=partially_succeeded`、`access_status=broken`
|
||
- `06-access-preview.json`:`available=false`
|
||
- `09-reconcile.json`:`status=drifted`、`missing_count=3`
|
||
- 判断:`subscription` 仍未形成可复核的真实闭环 artifact
|
||
|
||
## 完成标准
|
||
|
||
必须同时满足:
|
||
|
||
- 导入批次不再用 `host_base_url` 充当宿主主键
|
||
- 同一 provider 若存在多个宿主实例,status/resources/import-batches/access-preview 能通过 `host_id` 准确定位
|
||
- `managed_resources` 的唯一性和查询不再跨宿主串扰
|
||
- capability probe 不再对真实创建接口发空 `POST`
|
||
- rollback-provider 不再走“按名字重新枚举再删”的危险路径
|
||
- 剩余质量门禁全部通过
|
||
- `self_service` 真实宿主链路至少达到:`available=true` 或 `latest_access_status=self_service_ready`
|
||
- `subscription` 真实宿主链路至少达到:`available=true` 或 `latest_access_status=subscription_ready`
|
||
- 上述两条真实宿主 artifact 均通过后,才能重新给出最终放行结论
|
||
|
||
## 禁止错误结论
|
||
|
||
- ❌ 代码整改完成 ≠ 真实宿主最终放行
|
||
- ❌ 新的 host_id 契约已落地 ≠ 历史 artifact 自动变真
|
||
- ❌ rollback-provider 已改安全路径 ≠ 历史脏资源自动消失
|
||
- ❌ 文档里去掉 `/metrics` 承诺 ≠ 已补齐观测能力
|
||
- ❌ `self_service` 的 `extra_count=0` ≠ 已完成最终放行
|