diff --git a/.project-docs/30-worklog/tasks/20260828-marketplace-mlm04-renderer-e4c7a2.md b/.project-docs/30-worklog/tasks/20260828-marketplace-mlm04-renderer-e4c7a2.md deleted file mode 100644 index 42b3b0e..0000000 --- a/.project-docs/30-worklog/tasks/20260828-marketplace-mlm04-renderer-e4c7a2.md +++ /dev/null @@ -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 11–13, 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. diff --git a/.project-docs/30-worklog/tasks/20260828-plugin-marketplace-client-5f8b3d72.md b/.project-docs/30-worklog/tasks/20260828-plugin-marketplace-client-5f8b3d72.md index 0314ef7..30adf09 100644 --- a/.project-docs/30-worklog/tasks/20260828-plugin-marketplace-client-5f8b3d72.md +++ b/.project-docs/30-worklog/tasks/20260828-plugin-marketplace-client-5f8b3d72.md @@ -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