SIGN IN SIGN UP

feat(status): redesign /status page aligning to check-cx UI (#1076)

* feat(status): redesign /status page aligning to check-cx UI

- 模型卡片右上角新增「可用/降级/错误/无数据」状态徽章(按可用率阈值 50% 派生)
- 历史状态条改为紧凑单行 + shadcn Tooltip(时段/可用率/TTFB/TPS/样本数)
- 无请求时段格子按相邻状态无界双向填充,告别灰色断层
- 统计窗口对齐对标项目:在线率/TTFB 用 24h,时间线 5h × 60 点
- Hero / 网格背景 / 工具栏 1:1 复刻 check-cx 视觉
- 分组默认折叠,支持 dnd-kit 拖拽重排,搜索框过滤分组与模型名
- 折叠状态与自定义顺序持久化到 localStorage
- 5 种 locale 同步新增 statusBadge / tooltip / search 等文案
- 新增 4 个纯函数 lib + 33 个单测全部通过

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(status): address bugbot review comments on PR #1076

- timeline tooltip uses cell.inferred flag instead of sampleCount===0
  避免后端 sampleCount=0 但状态非 no_data 时误显示推断提示
- pre-memoize per-model derived data (filled/uptime/ttfb/latest)
  防止搜索每次按键都重算,缩短 keystroke 延迟
- disable drag while filtering, drag against full ordered list
  防止筛选状态下拖拽污染未匹配分组的持久化顺序
- localize status-toolbar clear button aria-label (新增 clearSearch i18n)
- fix zh-TW mojibake in inferredFromNeighbors tooltip copy

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(status): address second-round bugbot feedback on PR #1076

- deriveDisplayState: 当 pct=null 时尊重 bucket.state==='degraded',否则视为 operational
- formatRange: 同时校验 endDate,避免 'Invalid Date' 渲染
- timeline: aria-label 改用 i18n historyAriaLabel;移除未用的 tooltip.timeRange
- sortable-group-panel: 拖拽手柄 aria-label 抽 dragHandleLabel prop(5 语言)
- group-order-store:
  - reconcileOrder 用 Set 去重 stored 输入
  - isBrowser try/catch window.localStorage 访问,避免 SecurityError
- status-page.css: 加 isolation:isolate 形成局部 stacking context
- public-status-view: refresh 检查 response.ok;orderedGroups filter 用类型谓词
- 新增 deriveLatestModelState 单测覆盖 state='degraded' + pct=null

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
D
Ding committed
492f245674bdda860bcf4da2c3443b47227c8fcc
Parent: 7c5a695
Committed by GitHub <noreply@github.com> on 4/22/2026, 5:10:50 PM