Repository navigation
feat(plugins): two-column marketplace grid and footer review ticker line - #1759
Tioit-Wang wants to merge 7 commits into
Conversation
Marketplace cards rendered in an auto-fill grid that grew to three or
more columns on wide windows, their rating chip repeated the review
count next to the average, and a plugin with no reviews collapsed its
footer review slot entirely. The card footer is the review surface, so
it now reads as one: a fixed two-column grid, a rotating review line
that keeps a localized "no reviews yet" placeholder when empty, and a
chip that shows the average alone, reading a fixed 0.0 when the centre
answered with no ratings while an unavailable centre still hides the
chip so service absence never reads as a zero rating.
Installed-row chips and the detail sheet summary are unchanged. Locales
drop {{count}} from ratingChip and gain tickerEmpty; the reviews-drawer
E2E fixture and the source-contract tests pin the new shapes, and the
marketplace spec, decisions log (D665), and zh-CN mirrors follow.
The marketplace chip treated "no summary yet" and "a summary with zero ratings" as one state, so every card flashed a 0.0 while the summaries batch was still in flight and a plugin the centre stopped serving kept a fabricated rating. The E2E probes caught it: the stale-answer probe saw no batch ordering, and the unavailable probe found a chip on a card the centre never answered. A summary that is absent now renders nothing, whatever showZero says; only a summary the centre actually returned with ratingCount 0 reads the fixed 0.0. The new zero-rating probe drives the whole footer contract in real Chromium: a rated card keeps the average alone, a zero-rating card reads 0.0, an unanswered card keeps no chip, and the review line holds its slot with the centre's rows or the empty placeholder.
|
Reviewed in an isolated worktree: The grid change is right and, notably, it ships its own guard: the new The responsive fallback is a real rule, not just an assertion: One question rather than a finding: Non-blocking, and unrelated to the diff: this PR and my open #1751 touch disjoint files ( |
The one-column fallback used a viewport media query, so a narrow content pane inside a wide window kept two cramped columns — each card right at the ~272px the old auto-fill layout already treated as too tight. The page root now owns the query context (`container-type: inline-size`, `container-name: plugins-page`) and the grid collapses below 560px of pane width, the threshold where two columns would drop under that floor. Container queries are already the pattern in this stylesheet's neighbours (composer, settings, messages), so this tracks the pane with the mechanism the page already expects. The zero-rating probe now measures both ends in real Chromium: a 900px pane resolves two tracks and a 500px pane resolves one, with the window still wide.
|
Thanks — the container-query point was right and it is now fixed in You were accurate about the failure mode: What changed:
Verified locally: Noted on #1751: disjoint files, either order works for me. |
|
CI note on The failing step is
I did not touch |
|
The red check is not yours — it is a repo-level CI breakage that landed with the #1724 merge this morning, and it is currently failing every branch that contains What failed (run 39362941824, job Root cause: both the script and the step are new in #1724 ( # .github/workflows/ci.yml:162 on current main
- name: Run provider optional client certificate E2E
run: pnpm test:e2e:provider-client-certificatewhile every sibling Electron step wraps in run: xvfb-run --auto-servernum pnpm test:e2e:provider-client-certificateProof it is not branch-specific: identical failure at the identical step on On the change itself: the container-query implementation reads right. |
`Run provider optional client certificate E2E` was the only Electron step in this job invoked without `xvfb-run`. The job installs the `xvfb` package but never starts a resident display server, so the probe opened no window and died on `Missing X server or $DISPLAY`, failing the whole trusted extensions job — on main as well as on every branch built on it. The step now runs under `xvfb-run --auto-servernum` like its three neighbours. The probe itself was already green: it passes locally, and the only thing missing in CI was the display the other Electron steps get.
The step was the only Electron run in this job without `xvfb-run`, so it died immediately on `Missing X server or $DISPLAY`. Wrapping it the same way as its neighbours gets it past that, but the first attempt then hung: Electron started, never reached the probe's own output, and the job sat for thirty minutes until it was cancelled, because the runner script's sixty-second fallback sent only SIGTERM and waited for a `close` that never came. The step now starts openbox inside the virtual display like the browser-capture step does, and the runner escalates SIGTERM to SIGKILL after five seconds and reports the hang as a failure, so a probe that cannot start can no longer hold a CI job open.
|
CI is green now — Root cause was twofold, and both halves were on the harness rather than on this PR's code:
What I changed:
The probe itself was never broken — it passes locally, including with the display environment cleared — so no assertion or fixture behaviour changed. I picked this up here rather than as a separate PR because you asked for it in this one; the diff is |
…o-column-ticker Four files conflicted, all because main had already re-solved the same problems this branch carried: - `.github/workflows/ci.yml` and `scripts/e2e-provider-client-certificate.mjs` keep main's side. #1792 landed the same virtual-display fix here and then replaced the hand-rolled SIGTERM-then-SIGKILL timer with `waitForChildExitWithEscalation()`, so the branch's copy is a strictly older version of the same repair. - `docs/spec/08-meta/decisions-log.md` and its zh-CN mirror keep both sides. The branch's decision was numbered D665, which main has held since 2026-10-16 (macOS opaque window surface, amended by D666/D667) and has since grown to D670; the marketplace entry is renumbered D671 in the table and in the appended section of both mirrors, and its two `07-plugin-marketplace.md` cross-references follow. The merge also folded main's copy of the marketplace spec's monogram-glyph paragraph back to one copy: the branch carried it twice, which hid the duplicate from the three-way merge. Marketplace grid, ticker, chip, and locale changes merge cleanly and stay as they are.
feat(plugins): two-column marketplace grid and footer review ticker line
Marketplace cards rendered in an auto-fill grid that grew to three or
more columns on wide windows, their rating chip repeated the review
count next to the average, and a plugin with no reviews collapsed its
footer review slot entirely. The card footer is the review surface, so
it now reads as one: a fixed two-column grid, a rotating review line
that keeps a localized "no reviews yet" placeholder when empty, and a
chip that shows the average alone, reading a fixed 0.0 when the centre
answered with no ratings while an unavailable centre still hides the
chip so service absence never reads as a zero rating.
Installed-row chips and the detail sheet summary are unchanged. Locales
drop {{count}} from ratingChip and gain tickerEmpty; the reviews-drawer
E2E fixture and the source-contract tests pin the new shapes, and the
marketplace spec, decisions log (D665), and zh-CN mirrors follow.