来源
Roundtable Forge 圆桌对 frontend/src/app/admin/** 的实测诊断结论(2026-09-28~29),已在 docs/quality/regression-matrix.md §二 按十个维度登记三条。
圆桌形成的统一判据:可用性缺陷(会让操作者做出一个错的决定,现在修)> 工程债(下次改那页时顺手)> 纯审美(不花钱)。
三条缺陷
1. 批量操作静默失败(P0)
frontend/src/app/admin/sources/page.tsx 的 handleBatchToggle:
for (const id of ids) {
try {
await sourcesApi.update(id, { enabled });
} catch (err) {
console.error(`Batch toggle source ${id} failed:`, err); // 只进 console
}
}
setSelectedIds(new Set()); // 无条件清空,失败项也被清掉
await fetchSources();
批量停用 30 个信源、其中 5 个失败时,UI 表现为「全部处理完」。失败的 5 个仍按原状态继续采集并污染内容池,而监控大盘一切正常——系统宣称健康,实际状态与操作者认知相反。
2. Webhook 日志页读数口径撒谎(P1)
frontend/src/app/admin/webhook-logs/page.tsx:
successCount / failCount 只统计当前页 30 行,却与全局 total 并排渲染成同款 Badge。读者会把「本页 2 失败」除以「共 1240 条」读成 0.16% 失败率。
- 失败徽章以
failCount > 0 为条件渲染:翻到失败为 0 的分页时,「失败」整枚徽章消失。徽章的缺席本身在制造错误信念。
Webhook 是 TopicEye 的产品交付通道,这个读数错了等于对交付健康度撒谎。
3. 面包屑缺 4 项映射(P2)
frontend/src/components/AdminTopBar.tsx 的 ADMIN_PAGE_LABELS 只有 10 条,侧边栏 15 项。prompts / scoring-dashboard / evidence / webhook-logs 四页无映射,顶栏回退显示兜底文案「管理」。
修复方案
- 缺陷 1:逐条失败收集并上抛 UI(复用现成
AdminNoticeBanner,不引入 toast 框架);只清成功项的选择态,失败项保持选中以便重试;执行期间用户新勾选的项不被重建丢弃。
- 缺陷 2:页内计数显式标注「本页」,全局计数标「全部」;成功/失败徽章无条件渲染,0 失败显式写 0。
- 缺陷 3:补齐 4 项映射。已用脚本逐项核对:侧边栏壳内 14 项 ↔ 面包屑 14 条,全覆盖。
验收与已知缺口
- 本地验证:
tsc --noEmit 0 错;eslint 三个改动文件 0 错(11 个存量未用 import warning);vitest run 147/147。
- 回归测试暂缺:
vitest.config.ts 为 environment: 'node' + include: ['src/**/*.test.ts'],.tsx 组件行为不在覆盖内,CI 五 job 亦无 eslint,本切片无法机器钉住。按 AGENTS.md「教训必须机器化」不变量,这三条不得仅凭文档关闭——关闭条件是补 grep 形态门禁脚本(仿 scripts/check_layering.py)或扩 vitest 到 DOM。该脚本属后续批次,不在本 issue 范围内。
批次
docs:回归矩阵登记(本条)
fix(frontend):缺陷 1 + 缺陷 2
fix(frontend):缺陷 3
来源
Roundtable Forge 圆桌对
frontend/src/app/admin/**的实测诊断结论(2026-09-28~29),已在docs/quality/regression-matrix.md§二 按十个维度登记三条。圆桌形成的统一判据:可用性缺陷(会让操作者做出一个错的决定,现在修)> 工程债(下次改那页时顺手)> 纯审美(不花钱)。
三条缺陷
1. 批量操作静默失败(P0)
frontend/src/app/admin/sources/page.tsx的handleBatchToggle:批量停用 30 个信源、其中 5 个失败时,UI 表现为「全部处理完」。失败的 5 个仍按原状态继续采集并污染内容池,而监控大盘一切正常——系统宣称健康,实际状态与操作者认知相反。
2. Webhook 日志页读数口径撒谎(P1)
frontend/src/app/admin/webhook-logs/page.tsx:successCount/failCount只统计当前页 30 行,却与全局total并排渲染成同款 Badge。读者会把「本页 2 失败」除以「共 1240 条」读成 0.16% 失败率。failCount > 0为条件渲染:翻到失败为 0 的分页时,「失败」整枚徽章消失。徽章的缺席本身在制造错误信念。Webhook 是 TopicEye 的产品交付通道,这个读数错了等于对交付健康度撒谎。
3. 面包屑缺 4 项映射(P2)
frontend/src/components/AdminTopBar.tsx的ADMIN_PAGE_LABELS只有 10 条,侧边栏 15 项。prompts/scoring-dashboard/evidence/webhook-logs四页无映射,顶栏回退显示兜底文案「管理」。修复方案
AdminNoticeBanner,不引入 toast 框架);只清成功项的选择态,失败项保持选中以便重试;执行期间用户新勾选的项不被重建丢弃。验收与已知缺口
tsc --noEmit0 错;eslint三个改动文件 0 错(11 个存量未用 import warning);vitest run147/147。vitest.config.ts为environment: 'node'+include: ['src/**/*.test.ts'],.tsx组件行为不在覆盖内,CI 五 job 亦无 eslint,本切片无法机器钉住。按 AGENTS.md「教训必须机器化」不变量,这三条不得仅凭文档关闭——关闭条件是补 grep 形态门禁脚本(仿scripts/check_layering.py)或扩 vitest 到 DOM。该脚本属后续批次,不在本 issue 范围内。批次
docs:回归矩阵登记(本条)fix(frontend):缺陷 1 + 缺陷 2fix(frontend):缺陷 3