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 982eb75..0314ef7 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 @@ -88,6 +88,15 @@ - Current client frontier contains the frozen MLM-02 Marketplace client/account cache/Package Store contract. MLM-03 may now start from the documentation checkpoint recorded after this integration. +- MLM-03 task `20260828-plugin-marketplace-mlm03-4c8e1a7d` was dispatched from + exact frontier `1d64b89499f68de721e0f1c845dad2c57f1a78ed`. Its original agent was + interrupted after becoming unresponsive; a serial finisher resumed the same + registered owner and preserved the dirty worktree with no concurrent writer. + The completed source commit `7ad6b8c66d9ca64b5778690667c91c424aae456a` + was integrated without conflict as coordinator product commit + `05917a789a9b9f30ed9500f4cd1210ec72119646`. Coordinator-transferred + Package Store ownership was limited to removing unconditional latest-Release + protection while preserving account-snapshot and active-worker protection. ## Outcome @@ -110,6 +119,14 @@ verified before an atomic index switch, and install failure preserves the previous release. Account A/B snapshots remain isolated and logout/account switch invalidates them. The official public key activation hold remains unchanged. +- MLM-03 delivered one effective installed-plugin resolver, Main-owned Marketplace + routes, and a frozen parent-worker snapshot shared across resource loading, + Extension Host, tool declarations, CLI/context, and runtime authorization. Child + workers remain empty; active Releases are registered for Package Store cleanup; + old workers reject new plugin actions after invalidation. Unknown or uninstalled + Skill assignments remain in project/Agent configuration but do not enter runtime + projections, and automatically become effective again when the trusted package + source returns. ## Verification @@ -137,6 +154,13 @@ build, diff/doc gates, and task-context completion. Its exact sole parent, five owned paths, clean status, and `READY_FOR_INTEGRATION` state were independently verified before cherry-pick. +- MLM-03 verification passed 142 focused/adjacent tests with two staged-runtime + skips, full Vitest `1738 passed, 2 skipped`, the pressure case, typecheck, lint + with zero errors and five unchanged warnings, Vite build, Windows package, + Windows and Pi artifact verification, publish-runtime verification, diff/doc + 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. ## Follow-ups @@ -144,4 +168,13 @@ ## Promotion Candidates -- None recorded. +- After MLM-06 review and XMA-01, promote the Marketplace Main/Package Store/effective + resolver chain into `.project-docs/20-architecture/module-map.md` and + `data-flow.md`, including account cache, immutable installation, frozen worker + snapshot, and lifecycle invalidation. +- Refresh `.project-docs/30-worklog/current-state.md` and + `.project-docs/40-domain/business-rules.md` with the separation between Account + Library, Device Installation, project enablement, Agent assignment, runtime + authorization, and billing; retain the official public-key activation hold. +- Add the final MLM-05/MLM-06/XMA-01 evidence to the evidence index only after live + acceptance; repository package/tests must not be promoted as signed-in live proof. diff --git a/.project-docs/30-worklog/tasks/20260828-plugin-marketplace-mlm03-4c8e1a7d.md b/.project-docs/30-worklog/tasks/20260828-plugin-marketplace-mlm03-4c8e1a7d.md deleted file mode 100644 index 2d219b0..0000000 --- a/.project-docs/30-worklog/tasks/20260828-plugin-marketplace-mlm03-4c8e1a7d.md +++ /dev/null @@ -1,153 +0,0 @@ -# Task: Implement MLM-03 effective resolver, Main routes, Pi, and lifecycle - -## Identity - -- Task ID: 20260828-plugin-marketplace-mlm03-4c8e1a7d -- Mode: Feature -- Branch: codex/20260828-plugin-marketplace-mlm03-4c8e1a7d-marketplace-mlm03 -- Worktree: D:\Datas\OthersProjects\makelore-plugin-marketplace-mlm03-4c8e1a7d -- Base commit: 1d64b89499f68de721e0f1c845dad2c57f1a78ed -- Owner: marketplace-mlm03-implementer -- Status: Ready for Integration - -## Scope - -- Implement MLM-03 from the exact integrated MLM-02 frontier. Own only the - Main-owned effective resolver, project-plugin registry/service/composition - seams, Marketplace local Host routes, required Pi resource/extension/runtime/ - worker lifecycle integration, focused resolver/route/lifecycle/Pi tests, and - this task record. -- Do not modify Renderer, Package Store/MarketplaceClient/account cache, server, - Operations, project root, or unrelated Pi behavior unless a real semantic seam - blocker is found and reported first. - -## Intent And Constraints - -- Implement Marketplace Release A only: one frozen `EffectivePluginSnapshot` - supplies Skills, declarations, Extension Host, Pi CLI `--tools`, worker - context, and safe Renderer projection. Preserve the separation of acquisition, - installation, project enablement, Agent assignment, backend configuration, and - runtime authorization. -- Exact eligibility is runtime-enabled AND (system-included OR current account - Library) AND compatible installed/bundled Release AND project enabled AND - assigned Skill allowed AND (skill_only OR admitted current server policy). - Retired blocks discovery/new acquire but does not erase an existing Library - user's local eligibility; suspended blocks new resolve/download/runtime - admission. Skill-only does not wait for Runtime Policy. -- Preserve retained disabled/removed/unknown project and Agent assignments, - child-empty/current-worker-frozen semantics, Main-derived account/path/release/ - admission authority, and lifecycle invalidation on disable/remove/account or - project switch/suspend refresh/Main stop. No hosted adapter, Provider, - Plugin Charges, arbitrary code, generic invoke/config route, or billing path. -- Concurrent Task Gate: passed. `check_project_docs.py` succeeded; task_context - owns this isolated worktree and task ID; `status --json` matches owner, - feature mode, branch, worktree, and exact base commit. -- Planning Gate: passed. Required project memory, architecture/domain indexes, - accepted decisions, Marketplace implementation spec/ticket graph, MLM-01 and - MLM-02 outcomes, and coordinator scope were read. Other active local task - records were assessed; no unresolved semantic conflict or ownership overlap - blocks this plan. Coordinator/user-root worktrees remain untouched. -- The original coordinator interrupted an unresponsive prior implementer. This - serial finisher resumed the same registered logical owner and preserved the - complete dirty diff; the prior agent was confirmed interrupted and no - concurrent writer remained. -- The coordinator explicitly transferred one predecessor-owned seam for this - task only: `PluginPackageStore.removeUnused` and its focused regression. - No other MLM-02 Package Store ownership was adopted. - -## Outcome - -- Implemented one Main-owned effective resolver for bundled and immutable - installed Plugin definitions. It joins runtime status, current Account - Library, compatible installed/bundled Release, project selection, Agent Skill - assignment, and current Runtime Policy; `skill_only` does not wait for Policy, - retired Library entries remain eligible, suspended entries do not, and child - snapshots contain no Plugin resources. -- Composed the frozen `EffectivePluginSnapshot` through registry resources, - installed Skill roots, managed resource manifests, Extension Host context and - bridge declarations, Pi CLI tool allowlist, runtime context, and safe Host - projections. Known disabled and removed/unknown assignments remain in project - and Agent files but are not passed to workers; reinstall/re-enable restores - them without rewriting configuration. -- Added bounded Main Marketplace catalog/detail/Library/acquire/remove/install/ - update/uninstall routes. Renderer supplies only a Plugin ID and explicit - action; Main derives account, release, admission, client version, and package - root, while route failures exclude tokens, paths, signed URLs, and raw bodies. -- Lifecycle invalidation now covers project selection, Library/session/account - changes, successful next-worker resolution, and Main shutdown. Parent workers - ref-count their frozen Release IDs in Package Store until stop/invalidation; - old workers re-resolve authority before a Plugin action and refuse stale or - disabled resources. Child workers register no Plugin Release or tool. -- Corrected the transferred Package Store seam: `removeUnused` no longer - self-protects the latest Release. A single unreferenced Release can be removed, - while every account snapshot and active worker still protects it and a missing - install remains idempotently removed. -- No Renderer page, hosted adapter, Provider, Plugin Charges, generic invoke/ - config route, arbitrary code/MCP/hook path, server, Operations, project-root - schema, Release B, or Token Point behavior was added. - -## Implementation Plan - -1. Inspect the exact MLM-02 Main contracts, current project/Agent Skill - assignment and Pi opener/lifecycle seams, plus existing route/test conventions; - record any genuine seam mismatch before editing. -2. Add red focused tests for the exact resolver predicate and state separation, - skill-only/policy-backed behavior, retired/suspended handling, snapshot - equality across Pi/resource/declarations/CLI/context, child-empty and worker - freeze/invalidation, lifecycle cleanup, and Main local route authority. -3. Implement the smallest cohesive resolver/registry/service/composition/routes - and Pi lifecycle changes within the owned paths, preserving Data Service's - exact ten tools and preview lifecycle. -4. Run focused tests, relevant Pi/Data Service regressions, typecheck, scoped - lint/full lint as proportionate, Vite build for Main/preload/package imports, - and task-aware diff/doc gates. Fix only failures attributable to this scope. -5. Update this record with actual outcome/evidence/follow-ups, complete the task - context, and create one clean source commit whose sole parent is the exact - dispatch base. - -## Verification - -- Initial focused diagnosis: - `coding-plugin-effective-resolver`, `plugin-marketplace-routes`, and - `coding-product-services` — 3 files / 13 passed; initial typecheck passed. -- Red/green corrections: - Package Store cleanup failed because the unreferenced latest Release returned - `kept`; worker lifecycle failed because active-Release registration was called - zero times; removed/unknown assignments failed in both resolver and Product - Tools with `Unknown bundled coding skill`. Each passed after its minimal fix. -- Final focused plus adjacent resolver/routes/registry/Pi/Package Store/Data - Service matrix — 17 files / 142 passed / 2 staged-runtime skips. -- `pnpm test` — 205 files / 1,738 passed / 2 staged-runtime skips, followed by - the serialized coding-chat pressure file 1/1 passed. -- `pnpm run typecheck` — passed. -- `pnpm run lint:check` — 0 errors; the same five pre-existing Renderer warnings - in `src/pages/Home/index.tsx` and `src/pages/Makelore/index.tsx` remain. -- `pnpm run build:vite` — Renderer, Main, Preload, and release utility passed; - only existing dynamic-import and chunk-size warnings were reported. -- `pnpm run package:win` — passed; staged bundled Python and uv, built Pi - win32-x64 closure (130 packages / 6 assets), `win-unpacked`, and NSIS installer. -- `pnpm run verify:artifact:pi` — passed against final `Makelore.exe`/`app.asar`; - Pi is exactly 0.84.2, packaged closure is complete, the extension contract is - present, and bundled Data Service exposes exactly ten tools. The inherited - real-Provider and macOS/native-Linux waivers remain explicit. -- `pnpm run verify:publish-runtime` — passed with npm 11.6.2. -- Windows packaged-runtime verification with the verifier's explicit - `--allow-dirty` mode passed against the exact pre-commit product bytes: - installer 208,233,099 bytes, SHA-256 - `CE9049C26939DE3281F0100936D87E39C968047BCD559ED764C5231521DC5B4B`; - bundled Python, uv 0.10.0, npm 11.6.2, native addons, and Unicode copy passed. - A default clean-tree verifier rerun is the final post-commit gate. -- `git diff --check` — passed before documentation finalization. - -## Follow-ups - -- Production Marketplace activation still depends on the official Ed25519 - signing public/private pair already recorded by MLM-02; this task adds no key - or trust override. -- Real Provider compatibility and macOS x64/arm64 plus native non-WSL Linux - product artifact execution remain explicitly unverified inherited release - gates; no broader platform Pass is claimed here. - -## Promotion Candidates - -- None recorded.