Skip to content

feat(plugins): add ratings and reviews with installed card grid - #1727

Merged
Tioit-Wang merged 4 commits into
mainfrom
feat/plugin-reviews-grid
Oct 16, 2026
Merged

Tioit-Wang merged 4 commits into
mainfrom
feat/plugin-reviews-grid

Conversation

@Tioit-Wang

Copy link
Copy Markdown
Collaborator

What

Installed plugins now render as a card grid with one action per card and their trust, update, and scope state at a glance, and marketplace cards carry a public rating chip. A plugin's detail sheet gains a ratings summary, and a read-only review drawer lists public reviews with sentiment/sort filters and cursor paging.

Reviews are read anonymously through host-core (market.reviewSummaries / market.reviews): the renderer keeps no network access of its own, there is no desktop login and no write path, and writing a review opens the plugin center's web page in the system browser (web login only).

Scope

  • crates/host-core: public review client (5 s deadline, 1 MiB response cap, redirect refusal, trusted-origin-only URLs, id dedup + 100-id batching, schema validation) and two read-only RPCs (market.reviewSummaries, market.reviews).
  • packages/shared: public PluginReviewSummary / PluginReview / PluginReviewPage / PluginReviewQuery types and the two IPC channels.
  • apps/desktop: Electron IPC pass-through, renderer API (api.marketReviewSummaries / api.marketReviews), installed-grid + detail-sheet + review-drawer UI, styling, and nine locales.
  • Docs: privacy policy, marketplace/center/UI spec updates, E2E plan rows; the full desktop test plan lives in docs/spec/06-delivery/plugin-reviews-test-plan.md.
  • Release prep for this branch: 0.21.0-beta.2 version surfaces and a refreshed bundled models.dev snapshot.

Evidence

  • Test plan with per-row results: docs/spec/06-delivery/plugin-reviews-test-plan.md (RVD-*); the end-to-end scenario is E2E-PLUGIN-reviews-public-reads in docs/spec/06-delivery/04-e2e-test-plan.md.
  • Targeted JS: 64/64 across market-review-ipc, plugin-reviews-logic, plugin-reviews-surface, plugins-page-style, extensions-page, settings-dialog-overlay.
  • Electron fixture probes: 8/8 (5 review-drawer incl. narrow-geometry and stale-batch, 2 installed-grid, 1 detail-focus).
  • Rust: 22 review tests (16 RPC + 6 client unit), cargo fmt clean, cargo clippy -p host-core --all-targets exit 0.
  • Full desktop typecheck and production electron-vite build exit 0.
  • Cross-host contract check against the real plugin center (task host binary over stdio RPC): zero-state 9/9 and nonzero 11/11, reviewUrl derived from the effective fixture origin, no private userId/hiddenReason/report fields. The center lane's separate plan pairs with this one and carries its Go integration/store evidence, including real MySQL.
  • Known baseline (present before this branch, not introduced here): the full host-core suite is 933 passed / 18 failed in this Windows environment (shell/worktree/CRLF tests; reproduced on the base revision), and one warn-level pre-existing clippy note at transcripts.rs:893. Remote CI is authoritative for the full gates.

closes #1678
closes #1679

Installed plugins read as a card grid with one clear action per card and
their trust, update, and scope state visible, and marketplace cards carry
public rating summaries. The renderer reads reviews anonymously through
host-core: two read-only RPCs proxy the plugin center's public summary and
review endpoints, build the review webpage URL from the effective trusted
center origin, and bound every request with a deadline and response cap
while never holding host state across network I/O.

The reads stay separate from install and update: a legacy or unreachable
center surfaces as an unavailable state rather than fabricated zeros, ids
are deduplicated and batched, and both response and result schema are
validated. Writing a review happens on the plugin center's web page; the
desktop has no login and no write path.

fixes #1678
fixes #1679
Bump every version-bearing surface to 0.21.0-beta.2: the workspace and
app package manifests, the Cargo workspace version with the host-core
lockfile entry, and the shared APP_VERSION constant.

Refresh the bundled models.dev snapshot from the official endpoint before
tagging (232 providers / 8983 models, two providers added, none removed,
validated as a provider catalog). The in-app changelog catalogs the stable
0.21.0 line rather than the prerelease identifier, and the release-document
preflight passes for it.
…utes

The fixture's market override is process-global, so another test opening
an AppState while these tests hold it makes a /catalog.json fetch that the
whole-log assertions counted; under full-suite parallelism that failed the
redirect-refusal test even though the redirect was never followed. Count
review-route traffic only, so the "no review traffic" promises still fail
when a review request is actually made.
The documentation checks require every English spec page to carry a zh-CN
mirror with the same table and code-fence structure, and the NAV index to
list both. Add the missing zh-CN mirror of the reviews test plan, index it
in both NAV files, and carry the anonymous review-read section into the
plugin-center mirror so that pair's structure matches English again. The
center-mirror drift predates this branch; it surfaced only now because
this branch touches docs, which triggers the docs workflow.
@Tioit-Wang
Tioit-Wang merged commit d683746 into main Oct 16, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant