fix: resolve plugin market detail mix-up for same-named plugins - #23
Conversation
AI-assisted review (project philosophy)This is an independent AI-assisted review for the merge bar in Verdict: request changes. The final Dashboard identity ( I re-ran: 3 files / 17 tests passed. I did not re-run full What is aligned
Blocking: absorb record does not match the code
This PR has three commits:
Problems:
Please do one of:
Do not leave the durable sync record describing a design this fork rejected. Code / test gaps to fix or explicitly accept
DocsUser-visible market detail URLs change from Security / runtimeDashboard-only. No TLS, MCP, DOMPurify, or config-redaction changes. Catch-all is limited to Merge bar
|
…BotDevs#9925) Identify market plugins with author/name, keep ExtensionDetails + #market, and skip $meta / source-emitted market_plugin_id during ingest. Upstream-Commit: 9852285 Upstream-Author: Hayston <160645940+Hayston1001@users.noreply.github.com> Upstream-PR: AstrBotDevs#9925 Sync-Disposition: adapt Fork-Adaptation: Use the 2026-06-27 plugin_id coordinate (author/name) instead of upstream's market_plugin_id || repo || name fallback; implement helpers in dashboard/src/utils/marketPluginKey.ts; keep ExtensionDetails + #market; send market_plugin_id on install; add focused Vitest coverage. Tested: cd dashboard && pnpm exec vitest run tests/marketPluginKey.vitest.ts tests/extensionRuntimeSmokes.vitest.ts tests/coverageCloseout.vitest.ts && pnpm typecheck && pnpm test AI-Generated: true Generated-At: 2026-09-04T02:55:58Z
Record the adapt decision for AstrBotDevs#9925 and advance the upstream cursor to 9852285. AI-Generated: true Generated-At: 2026-09-04T02:56:28Z
f883705 to
3fd393c
Compare
|
Addressed the AI-assisted review:
Human maintainer review is still required. This is not an approval or merge. |
Summary
Market plugin details mixed up two registry entries that share the same metadata
namebut have different authors, repos, and versions. Navigation, list keys, random sampling, detail lookup, and install requests now use the 2026-06-27plugin_idcoordinateauthor/name.Related issue
Related: AstrBotDevs#9925 (Fixes AstrBotDevs#9924)
Root cause
The Dashboard treated metadata
nameas a unique market identity. Two plugins can publish the same name, so the first match won for the detail route, Vue reused the wrong card instances, and random sampling collapsed the pair.Reproduction
nameand differ byauthor.Implementation notes
Adapt of upstream
9852285bdafcbfd0078ae5a4c5f326a068a0dab7onto this fork's TypeScript Dashboard. Unique-key helpers live indashboard/src/utils/marketPluginKey.ts. Market navigation keeps the fork routeExtensionDetailswith#marketinstead ofExtensionMarketDetails.This fork does not copy upstream's
market_plugin_id || repo || namefallback.repois not plugin identity; name-only market deep links do not resolve. Ingest skips$metaand ignores source-emittedmarket_plugin_id. Repeatable route param/extension/:pluginId+carriesauthor/namewithout encoding the slash as%2F. Installed-tab routes still use the local pluginname(spec §16).Validation
Compatibility and risk
Dashboard-only. Market detail URLs change from
/extension/{name}#marketto/extension/{author}/{name}#market. Old name-only market deep links no longer resolve (they pick neither entry). Installed-plugin URLs stay/extension/{name}#installed. New install requests sendmarket_plugin_id. No OpenAPI, docs, or Python runtime change.Checklist
docs/zh/anddocs/en/when needed.docs/public/openapi.json, and tests change together when routes or schemas change.pyproject.toml,requirements.txt, anduv.locktogether.!and aBREAKING CHANGE:footer.Agent note
Goal: absorb upstream AstrBotDevs#9925 without a direct cherry-pick, because this fork converted
useExtensionPage.jsto TypeScript and uses a unifiedExtensionDetailsroute. Identity isauthor/name(fork market spec), not upstream's repo/name fallback. Paths:dashboard/src/utils/marketPluginKey.ts,dashboard/src/router/MainRoutes.ts,dashboard/src/stores/common.ts,dashboard/src/views/extension/useExtensionPage.ts,dashboard/src/views/extension/MarketPluginsTab.vue,dashboard/src/views/extension/InstalledPluginsTab.vue,dashboard/src/views/ExtensionPage.vue,dashboard/tests/marketPluginKey.vitest.ts, plus cursor filesupstream-sync.yamlandupstream-decisions.jsonl. History was rewritten to one adapt commit (dd93de80f6add6f586f8cadbb4b0e74f08c5dd79) plus one cursor commit. Checks run: focused Vitest,pnpm typecheck, ESLint on touched files, and fullpnpm test(86 Vitest files / 296 tests, plus Node tests). Residual risk: installed→market lookup is case-sensitive whileStarMetadata.plugin_idlowercases; invalid sources that omitnameon anauthor/nameroot key would double-prefix; records missingauthorcannot open market details. Tools: grok-4.6 via opencode, sync-upstream skill.