Add a dedicated acceptance script for providers.html, cover it in the local real-host script regression suite, and document the current frontend review baseline, closure audit, providers action matrix, and remediation task board. This keeps the frontend acceptance boundary explicit: providers.html now has a repeatable verification entry point for its page-level actions, while non-UI provider operations remain documented as backend-only capabilities.
9.6 KiB
9.6 KiB
providers.html 动作级 Acceptance 矩阵(2026-05-31)
日期:2026-05-31
目的
这份矩阵专门回答一个此前被混在一起的问题:
providers.html当前到底承载了哪些动作- 这些动作里哪些已经有历史真验证据
- 哪些只是后端有接口,但页面并没有显式做成 UI
- 哪些还缺独立页面级 acceptance
本矩阵只针对 deploy/tksea-portal/admin/providers.html。
先给结论
providers.html 当前真正显式承载的动作只有两类:
- provider 目录 +
preview-import/import - provider draft 的
save / update / delete / publish
它并没有显式承载 rollback 或 reconcile 按钮。
所以:
- 不能把后端存在
POST /api/providers/{providerID}/rollback/POST /api/providers/{providerID}/reconcile,直接说成“providers.html 已完成这两个前端动作闭环” - 更准确的说法是:
preview-import / import:页面显式承载rollback / reconcile:后端已提供,real-host acceptance 也有证据,但当前不属于这页的显式 UI 能力
页面实际承载范围
从 providers.html 当前实现看,页面明确包含:
- 管理员 session 登录
- pack / host / provider 目录加载
preview-importimport- manifest draft 生成
- 草稿保存到服务端
- 草稿更新
- 草稿删除
- 草稿发布到仓库
页面未显式提供:
rollbackreconcileprovider statusprovider resourcesaccess statusimport-batches历史列表
这些能力虽然在后端存在,但不是当前 providers.html 的显式按钮或结果区。
动作级矩阵
| 动作 | 后端接口 | 当前是否在 providers.html 显式承载 |
当前证据强度 | 审计结论 |
|---|---|---|---|---|
| 加载 pack / host / provider 目录 | GET /api/packs GET /api/hosts GET /api/packs/{pack_id}/providers |
是 | 代码接线 + 静态回归 | 已接线,缺独立远端页面级矩阵 |
| preview-import | POST /api/providers/{provider_id}/preview-import |
是 | 页面接线 + real-host acceptance API 证据 | 部分闭环 |
| import | POST /api/providers/{provider_id}/import |
是 | 页面接线 + real-host acceptance 强证据 | 部分闭环 |
| draft save | POST /api/provider-drafts |
是 | 执行板 + 页面接线 | 历史已闭环 |
| draft update | PUT /api/provider-drafts/{draft_id} |
是 | 执行板 + 页面接线 | 历史已闭环 |
| draft delete | DELETE /api/provider-drafts/{draft_id} |
是 | 执行板 + 页面接线 | 历史已闭环 |
| draft publish | POST /api/provider-drafts/{draft_id}/publish |
是 | 执行板远端真验强证据 | 历史已闭环 |
| rollback | POST /api/providers/{provider_id}/rollback |
否 | 后端路由 + 单测 | 不属于当前页面显式能力 |
| reconcile | POST /api/providers/{provider_id}/reconcile |
否 | 后端路由 + real-host acceptance API 证据 | 不属于当前页面显式能力 |
| provider status | GET /api/providers/{provider_id}/status |
否 | 后端路由 + acceptance 证据 | 不属于当前页面显式能力 |
| access status | GET /api/providers/{provider_id}/access/status |
否 | 后端路由 + acceptance 证据 | 不属于当前页面显式能力 |
| import-batches | GET /api/providers/{provider_id}/import-batches |
否 | 后端路由 + OpenAPI | 不属于当前页面显式能力 |
逐项审计
1. 目录加载
- 页面证据:
GET /api/packsGET /api/hostsGET /api/packs/{pack_id}/providers
- 当前结论:
- 页面层面接线明确
test_tksea_portal_assets.sh只证明页面引用了这些入口,不证明远端目录加载全过程持续可用
- 状态:
已接线
2. preview-import
- 页面证据:
- 页面有“预检导入”按钮
- 直接调用
POST /api/providers/{provider_id}/preview-import - preview 结果区直接展示原始 JSON
- 后端证据:
- 路由已注册
- OpenAPI 已声明
real_host_acceptance.sh会固定落盘04-preview-import.json
- 当前结论:
- 这条动作在 API 层有真实宿主证据
- 但仓库里没有一份专门说明“通过
providers.html点击预检导入完成远端验证”的独立页面级证据
- 状态:
部分闭环
3. import
- 页面证据:
- 页面有“执行导入”按钮
- 直接调用
POST /api/providers/{provider_id}/import - import 结果区直接展示原始 JSON
- 后端证据:
- 路由已注册
- OpenAPI 已声明
real_host_acceptance.sh固定落盘05-import.jsonimport_remote43_provider.sh有 remote43 定向验收链
- 当前结论:
- import 主链路本身证据很强
- 但
providers.html页面级 acceptance 仍与 API acceptance 混在一起,未形成动作级单页矩阵
- 状态:
部分闭环
4. draft save / update / delete
- 页面证据:
- 页面提供按钮并直接调用:
POST /api/provider-draftsPUT /api/provider-drafts/{draft_id}DELETE /api/provider-drafts/{draft_id}
- 页面提供按钮并直接调用:
- 执行板证据:
- 已明确记录:
- 草稿落到 CRM SQLite
providers.html可保存、回看、更新、删除服务端草稿
- 已明确记录:
- 当前结论:
- 这些动作已经属于页面显式能力,且历史上已被写成真实交付范围
- 状态:
历史已闭环
5. draft publish
- 页面证据:
- 页面提供“发布到仓库”按钮
- 调用
POST /api/provider-drafts/{draft_id}/publish
- 执行板证据:
- remote43 公网真验已记录:
draft_idprovider_idprovider_pathpack_versionbumpcommit_sha- 远端 repo
HEAD与 API 返回commit_sha一致
- remote43 公网真验已记录:
- 当前结论:
- 这是
providers.html当前证据最强的动作之一 - 可认为历史上已形成页面驱动的完整闭环
- 这是
- 状态:
历史已闭环
6. rollback
- 页面证据:
- 当前
providers.html没有rollback按钮,也没有结果区对应rollback
- 当前
- 后端证据:
- 路由已注册:
POST /api/providers/{provider_id}/rollback - OpenAPI 已声明
app_test.go有 API handler 测试
- 路由已注册:
- 注意:
- 当前 real-host 主脚本真实验证的是
POST /api/import-batches/{batch_id}/rollback - 这证明“回滚链路存在”,但不是“
providers.html已显式支持 provider rollback”
- 当前 real-host 主脚本真实验证的是
- 当前结论:
- 不能把它算作
providers.html已闭环动作 - 它属于“后端存在,但页面未显式承载”
- 不能把它算作
- 状态:
不属于当前页面显式能力
7. reconcile
- 页面证据:
- 当前
providers.html没有reconcile按钮,也没有结果区对应reconcile
- 当前
- 后端证据:
- 路由已注册:
POST /api/providers/{provider_id}/reconcile - OpenAPI 已声明
real_host_acceptance.sh固定落盘09-reconcile.json- runbook 明确把
reconcile视为真实宿主验收链一环
- 路由已注册:
- 当前结论:
- API 层与 real-host 层证据都存在
- 但这仍然不能推导出“当前
providers.html已做 reconcile 前端闭环”
- 状态:
不属于当前页面显式能力
为什么 providers.html 当前只能判为“部分闭环”
因为这页混合了承担两类完全不同的事情:
- provider 引导与导入前置动作
- provider draft 的仓库发布动作
其中:
- draft 发布链已经有很强的远端真验证据
preview-import / import有真实宿主 API 证据,但缺单页动作级 acceptancerollback / reconcile根本不是当前页面显式 UI
因此把整页粗暴标成“已闭环”会夸大页面能力;标成“未闭环”又会抹掉 draft publish 这条已经很扎实的链。
最准确的结论只能是:
providers.html:部分闭环
当前仓库已新增专用脚本入口:
bash ./scripts/acceptance/verify_provider_admin_actions.sh
它的职责是把页面内显式动作收成可重复执行的 acceptance;是否在某个具体环境真正跑成“全部通过”,仍取决于该环境的 host、provider key、repo root 与发布权限配置。
建议的下一步验收拆法
如果要把 providers.html 继续收口成真正的动作级 acceptance,建议拆成两组:
A. 页面内显式动作
必须补页面级 acceptance 的动作:
- 加载目录
preview-importimport- draft
save - draft
update - draft
delete - draft
publish
这组动作可以直接定义为“providers.html 页面 acceptance”。
B. 后端 provider 运维动作
当前不应强行算到 providers.html 的动作:
rollbackreconcileprovider statusaccess statusimport-batches
这组动作有两条路:
- 要么新增一个 “Provider Operations” 视图
- 要么明确归到脚本/API 运维面,而不是当前前端页
推荐的补强顺序
如果继续做,优先级建议是:
- 先给
providers.html补页面内显式动作的 acceptance 记录 - 再决定要不要把
rollback / reconcile / status / import-batches真正做进一个可视化运维页
原因很简单:
- 现在的主要问题不是后端没有能力
- 而是“这页到底承载什么”没有被正式写清楚
- 先把边界写清,再补页面级 acceptance,性价比最高
审计口径结论
截至 2026-05-31,针对 providers.html 最准确的口径是:
- 页面内显式动作:
preview-import / import:已接线,且有真实宿主 API 证据,但仍缺单页动作级 acceptancedraft save / update / delete / publish:历史闭环证据充分,其中publish证据最强
- 页面外后端动作:
rollback / reconcile / status / access / import-batches:后端已提供,但当前不应宣称为providers.html已支持的前端闭环能力