# 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` ≠ 已完成最终放行
