docs(marketplace): record MLM-04 integration

This commit is contained in:
2026-08-28 18:45:30 +08:00
parent 97c9ad1aad
commit 2c4f766b3b
2 changed files with 21 additions and 203 deletions

View File

@@ -1,203 +0,0 @@
# Task: Marketplace Release A MLM-04 Renderer
## Identity
- Task ID: 20260828-marketplace-mlm04-renderer-e4c7a2
- Mode: Feature
- Branch: codex/20260828-marketplace-mlm04-renderer-e4c7a2-marketplace-mlm04-renderer
- Worktree: D:\Datas\OthersProjects\makelore-plugin-marketplace-mlm04-renderer-e4c7a2
- Base commit: 8b6824a8ba08d8df98fc75af17e170bf3d8ed630
- Owner: marketplace-mlm04-renderer
- Status: Ready for integration
## Scope
- Implement Marketplace Release A ticket MLM-04 from exact integrated MLM-02/03
frontier `8b6824a8ba08d8df98fc75af17e170bf3d8ed630`.
- Own only new `src/pages/PluginMarketplace/**`, `src/pages/MyPlugins/**`,
`src/lib/plugin-marketplace.ts`, `src/stores/plugin-marketplace.ts`, joined
installation/effective-state changes in `src/pages/ProjectPlugins/**` and
`src/stores/coding-plugins.ts`, global Renderer routing/navigation seams, and
focused Renderer/API/store/component/E2E tests.
- Do not modify Main, manifest/parser, registry, Pi, Package Store, server,
Operations, Release B, or unrelated Renderer behavior.
- Coordinator ownership ruling transferred one minimal Main seam to this task:
`electron/api/coding-product-services.ts` plus its focused service test and, only
if needed for closed HTTP-shape verification, the existing Marketplace route
test. Route source, composition, and Package Store source remain out of scope.
- A second coordinator ruling within the same transferred service seam requires
`CodingPluginProjectProjection.unknownPluginIds`: stable sorted selected IDs absent
from real bundled/installed definitions. Renderer may display these as retained
unavailable configuration but must not invent package metadata or chain any action.
This ruling explicitly includes the corresponding Renderer parser
`src/lib/coding-plugins.ts` and focused composition/route/parser integration tests.
- A third narrow transfer covers `electron/coding-plugins/project-service.ts` and
its focused test only: disabling an unknown ID is allowed solely when that exact ID
already exists in the current selection. Unknown enable and unselected unknown
disable remain rejected; other IDs and legacy behavior are unchanged.
## Intent And Constraints
- Keep `免费获取`, `下载`/`更新`, `启用到项目`, and `分配给伙伴` visible and
independent. Every action calls only its corresponding MLM-03 Main route and
never supplies account, path, Release, admission, or other authority.
- Cover catalog/search/category/detail, Library/install/update/remove/reacquire,
system-included/free and included/token-point/mixed copy, stable status/failure
states, retained unknown/removed project IDs, and unchanged typed Data Service
settings.
- Preserve account/project A→B→A intent and per-scope mutation epochs so stale
reads or mutations cannot commit after navigation, logout, or a newer action.
- Stay inside the existing light design system. Apply the interface-quality skill
only where the owned UI truly needs it: minimum 40px targets, explicit
transition properties, balanced headings, pretty body copy, tabular dynamic
numbers, and no first-load decorative animation or new dependency.
- The canonical integrated memory predates Marketplace; the accepted design,
implementation spec, ticket graph, exact frontier, and MLM-02/03 task outcomes
are the current authority.
## Project Context Loaded
Task context:
- Task ID: `20260828-marketplace-mlm04-renderer-e4c7a2`
- Mode: Feature
- Branch: `codex/20260828-marketplace-mlm04-renderer-e4c7a2-marketplace-mlm04-renderer`
- Worktree: `D:\Datas\OthersProjects\makelore-plugin-marketplace-mlm04-renderer-e4c7a2`
- Base commit: `8b6824a8ba08d8df98fc75af17e170bf3d8ed630`
- Other active local tasks: Marketplace coordinator plus completed MLM-02/03
implementers and the prior Plugin P0 coordinator; unrelated registry owners are
outside this exact branch and ownership set.
- Overlap or semantic-conflict assessment: no unresolved conflict. MLM-02 and
MLM-03 are integrated at this exact frontier; their Main routes and closed DTOs
are read-only inputs. The coordinator and user root remain untouched.
Read:
- mandatory `implement-spec`, `maintain-project-docs`, and
`make-interfaces-feel-better` skills, including typography, surfaces,
animations, and performance references
- repository `AGENTS.md`, project-memory startup set, architecture/domain/evidence/
reflection/commitment/stale indexes, active and relevant peer task records
- Marketplace implementation specification sections 1113, ticket graph MLM-04,
and accepted design Renderer/offline/failure/acceptance sections
- integrated local Marketplace route/service DTOs and existing project Plugin
Center store/page/routing/navigation seams
Relevant understanding:
- Electron Main owns authentication, Marketplace access, package trust, installation,
account binding, Release selection, and admissions. Renderer consumes bounded
projections through fixed local Host API paths.
- Marketplace Release A separates account Library, device installation, project
selection, Agent assignment, runtime authorization, and billing. Neither server
publication nor any UI action may chain these states implicitly.
- Project plugin configuration remains schema 1 and retains unknown/removed IDs.
Data Service remains bundled, system-included, typed, and included.
- First catalog failure is unknown/error; a prior trusted catalog may be stale.
Retired differs from suspended, and bad/yanked/incompatible/signature states must
remain visible without inventing a fallback listing.
- Likely files are exactly the owned new pages/lib/store, ProjectPlugins/coding store
join, App/layout/sidebar/module routing, and focused tests/E2E.
- Unknowns: the Main public catalog/Library projection does not itself join all
project state. The initial MLM-03 local Library response also lacked device
installation state; the coordinator rejected a session-observed approximation
and authorized the narrow Main-derived joined Library projection above.
Gate result:
- Concurrent Task Gate: Passed. Project-doc check passed; task-context ownership
exactly matches task ID, owner `marketplace-mlm04-renderer`, feature mode,
worktree, branch, and base.
- Planning Gate: Passed. Required memory/spec/design/peer scopes and exact integrated
contracts were read; no unresolved semantic or ownership conflict blocks work.
## Implementation Plan
1. Add failing focused tests for the safe Renderer API wrapper and account-scoped
catalog/Library/install store, including route/body exactness, no hidden chaining,
A→B→A intent, logout clearing, and mutation epochs.
2. Implement the closed Renderer DTO/client and minimal deep store over MLM-03 Main
routes, then make those tests pass without adding account/path/release/admission
authority.
3. Add failing component/navigation tests for Marketplace, My Plugins, Project
Plugins joins, the four explicit actions, state/copy/accessibility/loading/error
matrices, and retained unknown/removed IDs; implement the pages and routing.
4. Add/adjust the targeted Marketplace Electron E2E, run focused and adjacent tests,
typecheck, lint, build, and target E2E, then complete drift/task gates and create
one source commit whose sole parent is the exact base.
## Outcome
- Added the global Plugin Center catalog/search/category/detail experience and an
account-scoped My Plugins Library for acquire, download, update, remove,
reacquire, and uninstall. Acquisition, device installation, project enablement,
and partner assignment remain four visible independent actions.
- Added a closed Renderer client and store over fixed MLM-03 Main routes. The store
clears account state on logout/switch, rejects stale A→B→A reads, and uses
mutation epochs so an older mutation cannot overwrite a newer projection.
- Joined Main-owned Library snapshots with safe current device installation
projections. Fresh-process reads and acquire/remove return the same atomic shape;
installation projection contains only status/plugin/release/version and is
filtered to the active account Library.
- Preserved selected unknown project plugin IDs as explicit “配置保留、当前不可用”
rows without fabricated metadata or implicit actions. A selected unknown ID may
be explicitly disabled; unknown enable and unselected unknown disable remain
rejected. Existing Data Service settings and included billing behavior are
unchanged.
- Added global lazy routes/sidebar entries and kept Plugin Center/My Plugins outside
provider-initialization gating while retaining programming-module access rules.
- Covered system-included/free acquisition and included/token-point/mixed billing
copy, stale/empty/error states, retired/suspended/unavailable listings, absent or
incompatible releases, signature/package failures, and removed/uninstalled joins.
- Coordinator ownership transfers used during implementation:
1. `electron/api/coding-product-services.ts` joined Library projection and its
focused service/route tests.
2. `unknownPluginIds` in that service plus the corresponding Renderer parser
`src/lib/coding-plugins.ts` and composition/route/parser integration tests.
3. `electron/coding-plugins/project-service.ts` selected-unknown disable seam and
its focused test.
No further Main, route source, composition, Package Store, registry, Pi, server,
Operations, or Release B ownership was required.
### Interface skill impact
#### Interaction and motion
| Before | After |
| --- | --- |
| New Marketplace actions had no owned UI implementation | Added at least 40px hit targets (`min-h-10`) with keyboard-visible focus rings in Plugin Center, My Plugins, Project Plugins, and global navigation |
| New Marketplace surfaces had no transition contract | Added only explicit `transition-colors` or `transition-[box-shadow,background-color]`; no `transition-all`, new animation dependency, or first-load decorative animation |
#### Typography and dynamic data
| Before | After |
| --- | --- |
| New Marketplace heading/body copy had no wrapping behavior | Added `text-balance` to headings and `text-pretty` to explanatory/error copy so narrow layouts wrap intentionally |
| New catalog counts, versions, and point values used default numeral spacing | Added `tabular-nums` where dynamic Marketplace numbers are compared or updated |
#### Surfaces
| Before | After |
| --- | --- |
| New Marketplace cards and status states had no visual hierarchy | Reused existing `background`, `surface-subtle`, `brand-soft`, border, shadow, warning, and destructive tokens for catalog, detail, Library, loading, empty, and error surfaces; no redesign or new design token was introduced |
## Verification
- Focused/adjacent Vitest: 12 files, 73 tests passed (`plugin-marketplace` client,
store, pages; coding product service; project service; composition/routes/parsers;
Project Plugins page; MainLayout/module gate).
- `corepack pnpm run typecheck`: passed.
- `corepack pnpm run lint:check`: passed with 0 errors; 5 pre-existing warnings in
`src/pages/Home/index.tsx` and `src/pages/Makelore/index.tsx` remain unchanged.
- `corepack pnpm run build:vite`: passed for Renderer, Electron Main/preload, and
release utility worker. Existing dynamic-import/chunk-size warnings remain.
- Target Electron Playwright E2E: 2 passed (`plugin-marketplace.spec.ts` and
`project-plugins.spec.ts`). The first run exposed and then fixed an assertion that
included unrelated startup requests and a closed-DTO fixture missing `tool: null`.
- `corepack pnpm run test:electron:windows`: 2 files, 6 tests passed.
## Follow-ups
- No implementation or ownership blocker remains. Integration must preserve the
exact MLM-02/03 frontier contracts and the three coordinator-approved seam
transfers listed above.
## Promotion Candidates
- None recorded.

View File

@@ -97,6 +97,15 @@
`05917a789a9b9f30ed9500f4cd1210ec72119646`. Coordinator-transferred
Package Store ownership was limited to removing unconditional latest-Release
protection while preserving account-snapshot and active-worker protection.
- MLM-04 task `20260828-marketplace-mlm04-renderer-e4c7a2` completed from exact
frontier `8b6824a8ba08d8df98fc75af17e170bf3d8ed630` as source commit
`d61221d34da49f97dd4a9aeb1081fb3544cc6c86` and was integrated without
conflict as coordinator product commit
`97c9ad1aad2638609168a8e1901b61b5ba671def`. Three coordinator-approved
seam transfers remained minimal: joined safe Library/installation projection,
explicit project `unknownPluginIds`, and disable-only removal for an already
selected unknown ID. No Main route, registry, Pi, or Package Store source was
otherwise expanded.
## Outcome
@@ -127,6 +136,12 @@
Skill assignments remain in project/Agent configuration but do not enter runtime
projections, and automatically become effective again when the trusted package
source returns.
- MLM-04 delivered global Marketplace and My Plugins pages plus the joined Project
Plugins state. The four user actions remain distinct and call only their matching
Main route; fresh installation/account projection, stale/error states, retained
unknown project IDs, typed Data Service settings, account/project generation, and
mutation epochs are bounded in Renderer state. No account, filesystem path,
Release Admission, token, or signed URL authority enters Renderer.
## Verification
@@ -161,6 +176,12 @@
gates, and task-context completion. The Windows installer embedded exact source
HEAD `7ad6b8c...`; production signing, real Provider, macOS, and native Linux
activation evidence remain explicit external/platform holds rather than passes.
- MLM-04 verification passed 73 focused/adjacent tests across 12 files, typecheck,
lint with zero errors and five unchanged warnings, Vite build, two Marketplace/
Project Plugins Electron Playwright cases, six Windows Electron Vitest cases, and
documentation drift. Its task record also captured the actual interface-polish
Before/After changes: bounded hit targets, explicit transitions, wrapping, and
tabular dynamic values within the existing design system.
## Follow-ups