Issue #1 deliverable
迁移范围先收口到 5 个 ops-facing surfaces
这次先不盲目复制整个 OCTest 前端,而是把最明确属于 internal operations 的页面单独列出来,配上 supporting modules 和迁移阶段。
这样后面每个 follow-up issue 都能围绕一个清晰页面簇推进,不会继续把 OCTest 当作临时 ops 容器。
Phase 1 inventory
候选迁移页面与模块映射
先把页面、目标归属、支撑模块和优先级说清楚。
| 当前 OCTest 路由 | Ops 目标归属 | 阶段 | 优先级 | 现状判断 | 支撑模块 |
|---|---|---|---|---|---|
| /operations | OCTest_Ops dashboard + source-health/jobs pages | Phase 2 | P0 | 已有 source health 基础,适合先迁 | source-health adapter, dashboard view model, ops shell |
| /review-queue | OCTest_Ops review workflow page | Phase 2 | P0 | 需在 Ops 端补内容审核队列 UI | content-review adapter, audit logging, ACL |
| /releases | OCTest_Ops release visibility page | Phase 2 | P1 | 适合接在 review queue 之后迁 | releases adapter, release batch tables |
| /sources | OCTest_Ops source governance page | Phase 2 | P0 | 与 source health 同域,建议并入同一导航簇 | source registry adapter, source health detail tables |
| /blog/[slug]/provenance | OCTest_Ops provenance inspector | Phase 2 | P1 | 文章页保留轻量 reader-facing provenance,深挖工具迁入 Ops | provenance adapter, replay trace, source article lookup |
Migration principles
迁移原则
- • 先在 OCTest_Ops 复建可用页面,再收缩 OCTest 内部入口,不反着做。
- • OCTest 保留面向读者的轻量体验,内部排障、观测、审核和 release 工具统一落到 Ops。
- • 迁移时优先搬 data adapters 与页面壳层,不把内容站的视觉和路由习惯原样复制过来。
- • 每迁完一个面板,都要明确 OCTest 侧是删除、降级还是仅保留跳转。
Cut-over rule
OCTest 侧保留边界
保留在 OCTest 的应该是 reader-facing experience,例如文章内容页和轻量 provenance 信号。
迁入 OCTest_Ops 的应该是 internal observability、review、release、governance 和 provenance 深挖工具。
这条边界写清楚后,后面新需求就不会继续默认落回 OCTest。
Follow-up queue
建议后续拆分 issue
让 parent migration issue 变成可连续推进的实施队列。
| ID | 建议实施项 | 优先级 |
|---|---|---|
| ops-01 | 把 `/operations` 明确拆成 `/dashboard/source-health` + `/dashboard/jobs` 的落地页面 | Done |
| ops-02 | 补 review queue 页面,并接 audit logging | Done |
| ops-03 | 补 sources 页面,承接 source governance / registry 视图 | Done |
| ops-04 | 补 release batches 页面 | Done |
| ops-05 | 补 provenance inspector 页面,并让 OCTest 文章页只保留轻量入口 | Done |
| ops-06 | 盘 internal data adapters,明确 move / duplicate / keep shared / redesign disposition | P0 |