diff --git a/docs/EXECUTION_BOARD.md b/docs/EXECUTION_BOARD.md index cd6df7d5..c93b7c73 100644 --- a/docs/EXECUTION_BOARD.md +++ b/docs/EXECUTION_BOARD.md @@ -387,6 +387,57 @@ - Phase 2 的控制面、运行态、正式数据面、管理页都已被收敛进固定脚本矩阵 - 后续任何 Phase 2 回归都可以直接在 `remote43` 上复用同一套脚本,而不再依赖临时串命令 - `P2` 已具备可持续回归的最小产品闭环 + - 2026-05-29 已完成 Phase 3 / `P3-T1 帐号清单与启停 API` + - 提交: + - `b5343452 feat(accounts): add provider account inventory api` + - 新增 SQLite migration: + - `internal/store/migrations/0012_provider_accounts.sql` + - 新增帐号库存 repo / 回填逻辑: + - `internal/store/sqlite/provider_accounts_repo.go` + - `internal/store/sqlite/provider_accounts_sync.go` + - 新增管理 API: + - `GET /api/provider-accounts` + - `POST /api/provider-accounts/{account_id}/enable` + - `POST /api/provider-accounts/{account_id}/disable` + - `POST /api/provider-accounts/{account_id}/retire` + - 当前首版设计边界已明确: + - `provider_accounts` 是插件侧帐号资产库存 + - 列表接口会先按最新 `reconcilable import batch` 做一次库存回填,避免 remote43 上已有导入结果看不到 + - runtime import 完成后会自动把 `managed_resources + import_batch_items` 同步进 `provider_accounts` + - `enable / disable / retire` 当前只更新插件 SQLite 库存状态,不猜测宿主 `/api/v1/admin/accounts/:id` 的写入 payload + - 为避免人工禁用状态被回填覆盖,同步层现在会保留人工 `disabled` / 人工 `deprecated`;只允许 `missing_from_latest_batch` 这种自动弃用在新 batch 命中后被恢复 + - 本地门禁已通过: + - `gofmt -l .` + - `go vet ./...` + - `go test -cover ./internal/...` + - `go test ./tests/integration/... -count=1` + - remote43 已原位升级到: + - `repo HEAD = b5343452` + - CRM 实例目录:`/home/ubuntu/sub2api-kimi-patched-auto2-20260525_18169` + - 活跃监听 PID:`1771174` + - `http://127.0.0.1:18173/healthz` 返回 `ok` + - remote43 真实 API 验证已通过: + - `GET /api/provider-accounts` + - `count=1` + - 样本帐号: + - `id=1` + - `provider_id=gpt-asxs-shadow-lab` + - `host_account_id=10` + - 初始 `account_status=active` + - `POST /api/provider-accounts/1/disable` + - `reason=p3_t1_remote_verify` + - 返回 `account_status=disabled` + - 再次 `GET /api/provider-accounts` + - 同一条样本仍为 `account_status=disabled` + - 说明列表回填不会把人工禁用状态刷回 `active` + - `POST /api/provider-accounts/1/enable` + - 返回 `account_status=active` + - 再次 `GET /api/provider-accounts` + - 同一条样本恢复为 `account_status=active` + - 当前结论: + - 插件侧已经具备“帐号库存列表 + 人工启停状态”的最小资产闭环 + - 首版语义仍然是“插件库存状态”,不是“宿主账号状态联动” + - `P3-T2` 可以直接继续做帐号资产页和 route / shadow group 归属展示 - 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`