diff --git a/docs/EXECUTION_BOARD.md b/docs/EXECUTION_BOARD.md index c93b7c73..fd2b00b0 100644 --- a/docs/EXECUTION_BOARD.md +++ b/docs/EXECUTION_BOARD.md @@ -438,6 +438,68 @@ - 插件侧已经具备“帐号库存列表 + 人工启停状态”的最小资产闭环 - 首版语义仍然是“插件库存状态”,不是“宿主账号状态联动” - `P3-T2` 可以直接继续做帐号资产页和 route / shadow group 归属展示 + - 2026-05-29 已完成 Phase 3 / `P3-T2 帐号资产页与归属展示` + - 提交: + - `c982c595 feat(accounts): add provider account admin view` + - `d8d9e6e1 fix(accounts): tolerate ambiguous shadow bindings` + - 新增管理页: + - `deploy/tksea-portal/admin/accounts.html` + - 公网地址:`https://sub.tksea.top/portal/admin/accounts.html` + - 当前页面能力: + - 列出 `provider_accounts` + - 按 `host_id / provider_id / logical_group_id / route_id / shadow_group_id / account_status / q` 过滤 + - 详情区展示: + - `provider` + - `host` + - `logical_group` + - `route` + - `shadow_group` + - `shadow_host` + - `upstream_base_url_hint` + - `last_probe_status` + - 直接触发: + - `POST /api/provider-accounts/{account_id}/enable` + - `POST /api/provider-accounts/{account_id}/disable` + - `POST /api/provider-accounts/{account_id}/retire` + - 后端归属补齐规则已收口: + - 若 `shadow_host_id + shadow_group_id` 只命中一条 `logical_group_route`,则自动回填 `route_id` + - 若命中多条 route,则不再返回 `500`;改为保留 `shadow_group`,并把 `route / logical_group` 显式留空,等待后续运营整理 + - 本地门禁已通过: + - `gofmt -l .` + - `go vet ./...` + - `go test -cover ./internal/...` + - `go test ./tests/integration/... -count=1` + - `bash ./scripts/test/test_tksea_portal_assets.sh` + - `bash ./scripts/test/test_real_host_scripts.sh` + - remote43 已原位升级到: + - `repo HEAD = d8d9e6e1` + - CRM 活跃监听 PID:`2015702` + - `http://127.0.0.1:18173/healthz` 返回 `ok` + - portal 已重新发布,`https://sub.tksea.top/portal/admin/accounts.html` 返回 `200` + - remote43 真实验证已通过: + - 页面回读: + - `page_title=Provider Accounts Admin` + - `page_nav=/portal/admin/accounts.html` + - `GET /api/provider-accounts` + - 返回样本: + - `id=1` + - `provider_id=gpt-asxs-shadow-lab` + - `account_status=active` + - `shadow_group_id=9` + - `shadow_host=proxy-real-host-1780026133` + - 同一条样本的启停动作: + - `disable -> list` 保持 `disabled` + - `enable -> list` 恢复 `active` + - `retire -> list` 保持 `deprecated` + - 验证完成后已恢复为 `active` + - 当前 remote43 真相: + - 这条现网样本的 `logical_group / route` 当前仍为空 + - 根因不是列表页丢字段,而是 remote43 上有多条 `logical_group_route` 复用同一 `shadow_host_id + shadow_group_id` + - 当前系统已把这种情况从“500 致命错误”降级成“可读但未归属”的显式状态 + - 当前结论: + - 管理员已经能通过统一页面查看帐号资产、筛选 `shadow_group`、执行人工启停 + - `route / logical_group` 归属在唯一 shadow binding 下会自动补齐;在歧义 shadow binding 下会显式显示未归属 + - `P3-T3` 可以继续做“帐号资产与 route 的显式整理动作”或更完整的运营看板 - 2026-05-28 已完成 Phase 1 / `P1-T1 SQLite schema foundation` - 提交:`7f75d8a6 feat(routing): add logical group schema foundation` - 新 migration:`internal/store/migrations/0010_logical_groups_and_routes.sql`