feat(overview): merge the matrix footer into one bar and dim stale data in flight / 合并矩阵页脚为单栏并在加载中淡化旧数据 - #744
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Claude finished @edwingao28's task in 5m 21s —— View job Review: overview footer merge & in-flight dimming🟢 LGTM — no blocking issues found.
I reviewed the code statically and verified it at runtime against the dev server. Static review
Runtime verification (
CI: |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 63cca8f8ce
ℹ️ 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".
|
Claude finished @edwingao28's task in 1m 34s —— View job Re-review: overview footer merge & in-flight dimming🟢 LGTM — no blocking issues found. New commit
This re-review covers the delta since the prior LGTM on New test commit (
Static review of the rest — consistent with the prior pass; nothing new to flag. The Runtime verification (
CI: |
…en / 一屏信息总览与全屏演示 (#719) * feat(overview): fit the matrix on one screen and present it full screen The matrix overflowed a laptop viewport (1188px against ~900px of usable height). Row padding tightens, the AgentX scenario name is abbreviated in the row header with the full name kept as the accessible name, and both comparison modes can now hide uninteresting rows — the 30-day view keeps its existing control, the hardware views gain one for rows with no result on any platform. Separate URL keys (rows=, hwrows=) let each mode remember its own answer across a tab switch; both default to showing everything. Present mode hands the matrix to the Fullscreen API and scales it with one CSS zoom, so the projection cannot drift from the page layout. While presenting, the control strip carries the SLO, the view tabs, and the filters beside Exit as chips that name the click and flip with the scope. Arrow keys page between views. 中文:本PR解决此前overview下不能一屏放下所有信息的局限。方法:全屏显示 * fix(overview): keep the dormant row scope on the URL `overviewHref` emitted only the active mode's row key, and the scope resolvers cleared the other mode's answer out of the page data. Since every href the page builds — including the one the client router starts from — comes from that data, the dormant filter was erased on first load and deleted again by the models toggle, which merges both keys. Refreshing, or opening a link carrying both, could not restore the other tab. Emit each scope whenever it is set regardless of mode, and carry the off-screen scope through its no-op branch instead of resetting it to `all`. Only the row count is zeroed there, since that mode has no control to label while it is off screen. Reported by Bugbot on #719. 中文:`overviewHref` 只输出当前模式的行过滤 key,而作用域解析函数会把另一模式的 选择从页面数据中清除。页面构建的每个 href 都源自这份数据(包括客户端路由的起始 URL),因此休眠的过滤器在首次加载时即被抹除,并会被同时合并两个 key 的模型开关 再次删除;刷新或打开带两个参数的链接都无法恢复另一个标签页的状态。 现改为:只要作用域非默认就输出,与当前模式无关;跨模式的空操作分支改为透传该作用 域而非重置为 `all`,仅将行计数清零——该模式不在屏幕上时没有控件需要标注。 由 Bugbot 在 #719 中发现。 Co-authored-by: Cursor <cursoragent@cursor.com> * fix(overview): update /api/v1/overview route digest after merge The api-route-catalog guardrail (added on master) pins a SHA-256 of each route's source. This PR added 4 lines to the overview route, so its stored digest was stale once master was merged in. Update it to match the current source; no classification/documentation change is needed. 中文:master 引入的 api-route-catalog 守卫会对每个路由源码计算 SHA-256 摘要。 本 PR 为 overview 路由新增了 4 行,合并 master 后其存储的摘要已过期。此处将摘要 更新为与当前源码一致,无需改动分类或文档。 Co-authored-by: Alec Ibarra <93070681+adibarra@users.noreply.github.com> * chore(api): re-register the overview route digest after the row-scope params #718 landed a catalog that stores a SHA-256 of every API route source, so any edit to a route has to come with a documentation and classification review. This branch added `rows` and `hwrows` to `GET /api/v1/overview` before that guard existed, so the merge left the digest stale and unit tests red. The route stays `page-bff` and excluded from the public reference: the two new parameters are more overview-UI-coupled projection, not a public contract. The exclusion reason now names row scoping alongside the tier and comparison projections it already listed. 中文:#718 引入了记录每个 API 路由源文件 SHA-256 的目录,任何路由改动都必须 伴随一次文档与分类审查。本分支在该守卫存在之前就为 `GET /api/v1/overview` 新增了 `rows` 与 `hwrows`,合并后摘要过期导致单元测试失败。 该路由仍归类为 `page-bff` 并排除在公开参考之外:新增的两个参数属于与概览界面 耦合的投影,而非公开契约。排除理由中现已在原有的档位与比较投影之外补上行范围。 Co-authored-by: Cursor <cursoragent@cursor.com> * test(overview): assert the DOM this branch actually renders Two overview e2e assertions encoded the pre-branch DOM and failed on both browsers in shard 3. The comparison tabs were asserted to be a direct child of the page section. They now sit inside the surface handed to the Fullscreen API, because a presentation that dropped its own view tabs would be a worse deck. Asserting against the surface keeps the "exactly one, centred" guard and adds the containment that fullscreen depends on. The scenario cell was asserted by flattened text. Abbreviating AgentX in the row header leaves the full name in an sr-only node, so that text now reads "...(AgentX)AgentX". A helper checks the visible acronym and the accessible full name as the two layers they are, rather than their concatenation. 中文:两条总览 e2e 断言写死了本分支之前的 DOM,在 shard 3 的两个浏览器上都失败。 其一断言对比标签页是页面区块的直接子元素。它现在位于交给 Fullscreen API 的容器 内,因为演示时丢掉自己的视图标签页会是更差的体验。改为针对该容器断言,既保留了 “有且仅有一个、居中”的约束,又补上了全屏所依赖的包含关系。 其二用扁平化文本断言场景单元格。行首缩写 AgentX 后,完整名称保留在 sr-only 节点 中,该文本因而变成“……(AgentX)AgentX”。新增的辅助函数按可见缩写与无障碍全称这两 个层次分别断言,而非断言二者的拼接结果。 Co-authored-by: Cursor <cursoragent@cursor.com> * fix(overview): key the client data cache on the row scopes The row filters moved the address bar and left every row on screen. #704 introduced `overviewDataKey`, which collapses equivalent URLs onto one cache and request identity so a `ref` change repaints from the payload in hand. It rebuilds that key from the params it knows, and this branch's `rows`/`hwrows` arrived without being added — so a scoped URL keyed to the unfiltered payload already in the cache, and the click resolved instantly against the full matrix. The label reads from the response too, so it never flipped either. Both scopes narrow the rows the server sends, and the dormant one still reaches the payload that restores the other tab, so neither can be treated as client-derived the way `ref` deliberately is. The route itself was always correct: `?rows=changed` returns 2 of 8 rows. Covered twice, because unit coverage alone is what let this through: the provider must issue a request for each scope, and the overview e2e now clicks the control and asserts the matrix actually shrinks. 中文:行过滤器只改动地址栏,矩阵一行不减。#704 引入的 `overviewDataKey` 把等价 URL 归一为同一个缓存与请求标识,好让切换 `ref` 直接用手头的数据重绘;它按已知 参数重建该 key,而本分支新增的 `rows`/`hwrows` 没有登记进去——于是带作用域的 URL 命中了缓存中未过滤的旧数据,点击瞬间“完成”却仍是完整矩阵。按钮文案同样取自 响应,因此也不会翻转。 两个作用域都会改变服务端返回的行,且休眠的那个仍要随载荷回传以恢复另一个标签页 的状态,所以都不能像 `ref` 那样按客户端自行推导处理。路由本身一直是对的: `?rows=changed` 会把 8 行返回成 2 行。 补了两层测试,因为只有单测正是这个缺陷得以溜过的原因:provider 必须为每个作用域 发出请求,总览 e2e 则真实点击控件并断言矩阵确实变短。 Co-authored-by: Cursor <cursoragent@cursor.com> * feat(overview): merge the matrix footer into one bar and dim stale data in flight / 合并矩阵页脚为单栏并在加载中淡化旧数据 (#744) * feat(overview): merge the matrix footer into one bar and dim stale data in flight * test(overview): cover the pending lifecycle across success and failure * test(overview): assert the flipped row-filter chip by its accessible name * fix(overview): page one view per arrow press while presenting * fix(overview): render the window menu in place while presenting * fix(overview): name the active window in the row-filter copy --------- Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Alec Ibarra <93070681+adibarra@users.noreply.github.com> Co-authored-by: Wenyao Gao <105094497+edwingao28@users.noreply.github.com> Co-authored-by: Wenyao Gao <wgao11@u.rochester.edu>
Stacked on #719 — UI/UX polish only, no behavior change to its features.
Summary
OverviewNavigationProviderexposespending; a fetch still unresolved after 150ms dims the stale matrix to 60% opacity. Cache hits and fast responses stay under the delay and never flicker. The URL-driven server filtering, hover prefetch and client cache are untouched.Test plan
bun run test:unit— 3,796 tests passbun run typecheck,bun run lint,bun run fmtcleanoverview.cy.tsagainst a fixtures dev server: same 5 pre-existing environmental failures as the unmodified feat(overview): fit the matrix on one screen and present it full screen / 一屏信息总览与全屏演示 #719 head, zero new; the zh model-scope assertion updated for the chip label with the full sentence asserted onaria-labelrows=/hwrows=correctly中文说明
基于 #719 的增量 PR——仅打磨 UI/UX,不改变其功能行为。
OverviewNavigationProvider暴露pending;请求超过 150ms 未返回时旧矩阵淡化至 60% 不透明度,缓存命中与快速响应不闪烁。URL 驱动的服务端过滤、悬停预取与客户端缓存均未改动。Note
Low Risk
Client-side overview navigation and presentation UI only; no API or data-model changes, with tests for pending state and existing navigation race handling.
Overview
Overview UI polish on top of #719: layout and loading feedback, not new filtering behavior.
The matrix card footer is one bar—methodology notes on the left, row/model scope controls as chips with count badges on the right (full counted sentences on
aria-label/title). Scope toggles use the same chip style in the footer and presentation toolbar; presentation drops the badge.The control strip matches the presenting toolbar’s three-column layout: view tabs centered, Present (expand/collapse icons) anchored on the right.
OverviewNavigationProviderexposespending; the matrix card dims to 60% opacity after a 150ms delay while a selector fetch is in flight, and clears on success or failure. Unit tests coverpendinglifecycle; Cypress zh locale asserts the short chip label plus fullaria-label.Reviewed by Cursor Bugbot for commit 0385d4b. Bugbot is set up for automated code reviews on this repo. Configure here.