Repository navigation
feat(console): desk phases 8-9 — alerts, logs and the overview - #1097
Conversation
The Meridian desk shipped with two of its six pages as stubs. This adds the remaining pair against the contracts that already existed in schemas/desk (API-CONTRACT.md 3.17-3.19), so all six dock destinations render real content. - alerts: severity filters, open-first ordering, resolved rows, and the delivery channel panel; a resolved alert always carries its resolution time. - logs: today's sessions and run tape from the ribbon, plus a level-filtered log tail rendered as text (never HTML). - both read from fixtures; DESK_SOURCES keeps them mock until the backend routes exist, so nothing here can call a live endpoint. - guards reject a resolved alert without resolved_at, an unknown level, a shortened retention window, and an unredacted tail. - new console_desk_phase8_validation joins test:operations. - css budget: 20 -> 22 KB gzip, since two real pages cost ~0.9 KB and the old ceiling had no slack left.
|
@codex review governance head 1f28ea4 — 分支已合并最新 main(含 #1096),请按当前 head 出评审回执。 关注点:
|
The overview rendered the hero and the needs-you list and stopped there, so the page the desk opens on was the least informative screen in it. The contract and the fixture already carried the rest: totals, the six book rows with their own 30-day paths, the equity curve with a benchmark and a drawdown series. - headline figures: NAV, day change, coverage, freshness, and a sentence whose three counts share one denominator (running books), so it always adds up. - risk envelope: a segmented meter for drawdown against its limit; gross and leveraged-ETF exposure as multiples; today's run progress; config drift. - equity curve: portfolio and benchmark on one scale, the drawdown band below; no benchmark draws no line rather than a flat one. - six book cards: masked account, day change, sparkline broken at gap dates, drawdown meter, saved-vs-platform state, last run. - signals from the ribbon tape; a failed ribbon read says so instead of going blank. A ratio without its limit fills no cells and reads unknown; an unreadable book drops out of the running count instead of counting as fine. - overview/model.ts holds the formatting, counting and plotting geometry, so the page holds no arithmetic. - console_desk_overview_validation joins test:operations.
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
🛡️ Codex Security Review · Automatically triggeredSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 00718cc910
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
All four are honesty bugs rather than formatting nits. - sparklines were drawn per segment with each segment scaled to the full width and its own min/max, so a series with a missing day produced two overlapping lines and no sense of when the gap happened. sparkPaths now places every point on the window's calendar and plots all runs on one shared x and y scale; a run of a single point draws nothing, and an unaligned series is drawn by index rather than split at a guessed date. - the same function no longer falls back to the unsegmented series when every run is a single point, which had rejoined the line across the missing day. - a running book whose config could not be read was counted as steady, so a page where no config was readable still claimed everything matched the saved plan. headlineCounts now counts those separately and the sentence says they are unknown. - the logs page showed 'loading' forever when the ribbon failed, hiding sessions and runs with no error. It now says the runs could not be read and keeps the log tail. console_desk_overview_validation covers the gap geometry exactly (both runs on one timeline), the all-single-point case and the unreadable-config count.
|
@codex review 新 head 30865f2 — 已按上一轮 4 个 P2 修复:
本地: |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 30865f2c45
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
🛡️ Codex Security Review · Automatically triggeredSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
Second review round, three findings. - the alert fixtures carried Chinese titles and details, so the English UI showed English filters over Chinese bodies. Fixture copy is now a key translated by deskText, which passes a live server string through untouched instead of mistaking it for a key. - an unreadable runtime was reported as 'no strategy is running'. It now reports how many accounts could not be confirmed; only confirmed-stopped accounts reach the 'nothing is running' sentence. - the logs headline counted the tape's entries and called them today's runs, which contradicted the overview's 11-of-12. The copy now says what the list is: runs confirmed complete in this list.
|
@codex review 新 head(第三轮)已修完上一轮 3 条:
上一轮讨论串已全部 resolve(改动对应位置)。本地: |
|
Codex Review: Didn't find any major issues. 👍 Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
🛡️ Codex Security Review · Automatically triggeredSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
AI assistance
WorkBuddy agent (DeepSeek V4.1) drafted both phases; the owner reviewed the scope and approved the CSS budget change. The owner will review this diff.
What changed
Meridian 控制台(
#/desk)原来只有四个页面有内容:提醒、日志是PageStub,总览只有 hero 和 needs-you 两段。本 PR 把这两块补齐,六个导航由此都有真实内容。Phase 8 — 提醒与日志
alerts#/desk/alertsalert_deliveryunknown≠failing)、最近投递、每日摘要logs#/desk/logsribbon.tape)+ 按级别筛选的日志尾巴Phase 9 — 总览
契约和 fixture 里本来就有
totals/book/equity_curve,页面一个都没用。现在:ribbon.tape前 5 条;读取失败会明说,不留空。诚实态规则(本 PR 的边界)
runtime.unknown)不计入"正在运行",不会被算成正常。DESK_SOURCES里alerts / alertDelivery / logs仍是mock,后端路由不存在时不会发请求、不会写入。{line.message}),无dangerouslySetInnerHTML。How verified
新增校验覆盖:六个 fixture 通过 guard;拒绝"已解决但无
resolved_at""未解决却带resolved_at"、未知 severity、retention.days != 90、未知 level、redaction != applied;未处理优先排序;计数取自响应;日志总量取自 ribbon tape;总览的符号金额、计数同分母、计量条在缺失上限时不填、单点不成线、缺口断线;两页无写请求、无 HTML 注入。Risk
check-budget.mjs上限已由 20 KB 调至 22 KB gzip;本 PR 结束于 21.7 KB,余量约 300 字节。