9.7 KiB
9.7 KiB
Task: Implement unified plugin workspace ML-PLUGIN-NAV-001
Identity
- Task ID: 20260903-plugin-navigation-implementation-a4c7e291
- Mode: Feature
- Branch: codex/20260903-plugin-navigation-implementation-a4c7e291-plugin-navigation-implementation
- Worktree: C:\Users\7brot.codex\worktrees\1721\makelore
- Base commit:
959e2faf03 - Owner: codex
- Status: Ready for Integration
Scope
- Implement approved Spec
ML-PLUGIN-NAV-001serially as PN-01 through PN-04: a pure source-qualified Renderer projection, one/pluginsworkspace and detail surface, a hard route/sidebar cutover with exact replace redirects, removal of the three superseded page implementations, and focused/full/Electron verification. - Own only the Spec-listed Renderer page/navigation/tests/artifact-marker/README paths plus this task record. Preserve the existing Marketplace, Device Package, Coding Plugin, Agent assignment, runtime admission, and billing authorities.
Intent And Constraints
- Concurrent Task Gate passed for the exact identity/base/worktree above. The
superseded exact-overlap task
20260903-plugin-navigation-implementation-6b4d9e21was released from the registry after source-thread adjudication; its worktree, branch, and record were not removed or modified by this task. - Planning Gate passed after reading repository guidance, the complete Spec, startup project memory, architecture/domain rules, relevant indexes, and the completed AI Design peer record. That peer explicitly excludes plugin pages, navigation, Sidebar, and router, so no semantic overlap remains.
- Confirmed public test seams are
buildPluginWorkspaceProjection, the unified Renderer page/local dispatcher/detail dialog, route/sidebar/module guards, and the targeted Renderer-to-Main Electron flows. Work vertically red -> green at those seams rather than mocking internal modules. - Use
official:,local:, andretained:identity without inferred cross-source merging. Keep local installation conversation-only, native selected-model Web Search out of the projection, system-included actions restricted, and local package state explicitly device-global. - Do not change Server, Electron Main/plugin contracts, the three existing stores, Package Store/runtime/billing authority, app identity/global paths, or add a persistent Zustand authority, compatibility layer, feature flag, or visible local installation picker.
- Do not write or clean
D:\\Datas\\OthersProjects\\makelore; do not push, create a PR, deploy, publish, install a package, or mergemain.
Project Context Loaded
- Project goal: present official, acquired, local-device, project, and Agent Plugin state through one understandable UI while preserving each existing authority.
- Current integrated focus: curated Marketplace Release A, system-included Data Service, code-owned bundled Game Resource, conversation-only Device Packages, and selected-model native Web Search are already integrated contracts.
- Decisions affecting this task: acquisition/device delivery/project enablement/Agent assignment/runtime admission/billing remain independent; Device Packages are device-global and child workers remain empty; Renderer access stays behind typed Host API facades.
- Relevant evidence: the integrated Marketplace and Device Package suites establish the current DTO/authority behavior; installed-client Device Package activation is a separate release gate and is not claimed by this UI task.
- Likely modules:
src/pages/{PluginMarketplace,MyPlugins,ProjectPlugins,Plugins},src/App.tsx, layout navigation/guards,src/lib/ai-modules.ts, their unit/E2E and artifact marker tests, andREADME.md. - Unknown to verify before implementation: whether the current public Renderer DTOs express every Spec field without contract changes. A real interface conflict blocks that range rather than authorizing a wrapper or compatibility path.
- Non-blocking stale context: canonical
module-map.mdstill names the old three-page UI and must be proposed for later Integration Gate promotion, not edited in feature mode.
Outcome
PN-01added the purebuildPluginWorkspaceProjectioninterface, canonical query parser/serializer, and a local command dispatcher. The projection keepsofficial:,local:, andretained:identities separate; preserves catalog/Library/project-only/local/retained entries under partial failures; excludes only the native selected-modelmakelore_web_search; and derives the Spec action matrix without writing a store.PN-02replaced the three page-specific views with one/pluginsworkspace and one detail dialog. It independently loads Catalog, Library, Device Packages, and current-project projection; exposes URL-backed scope/source/state/search/detail state; keeps source errors local; dispatches every action to its existing owner; embeds the existing Data Service settings surface; resets project-scoped confirmation on project change; and provides dialog focus, Escape, focus-return, status, alert, and destructive-scope semantics.PN-03reduced the Code sidebar tosidebar-nav-plugins, registered the initialization-safe and non-provider-gated canonical route, added the three exact replace redirects, and deleted the old Marketplace, My Plugins, and Project Plugins implementations and their superseded page tests. No hidden fallback implementation remains.PN-04updated the targeted Electron flows, product artifact markers, andREADME.md. The E2E authenticated fixture now starts a fresh Renderer document against a Main-owned session and/api/auth/meidentity; this removed a measured reload/localStorage setup race without changing product authentication code.- Actual changed scope is limited to
src/pages/Plugins/**, the listed route/layout files, deletion of the three old page directories, focused unit/Electron tests,scripts/lib/pi-product-artifact.mjs,README.md, and this task record. No Server, Electron Main, Marketplace/Device/Coding store, Package Store, runtime, billing, or persistence authority was changed; no fourth Zustand authority was added.
Verification
corepack pnpm run typecheck— passed after the final E2E fixture edit.corepack pnpm run lint:check— passed with 0 errors. Five pre-existing warnings remain in untouched files: onereact-hooks/exhaustive-depswarning insrc/pages/Home/index.tsxand fourreact-refresh/only-export-componentswarnings insrc/pages/Makelore/index.tsx.corepack pnpm test— passed: 225 regular test files with 1821 passed and 2 skipped tests, followed by the isolated pressure file with 1 passed test.corepack pnpm run build:vite— passed for Renderer, Electron Main, Preload, and utility worker. Existing warnings remain for stale Browserslist data, static/dynamic imports, and the existing large Renderer chunk.corepack pnpm run test:e2e -- tests/e2e/plugin-marketplace.spec.ts tests/e2e/project-plugins.spec.ts --reporter=line— passed after its production build with all 4 targeted Renderer-to-Main flows.corepack pnpm exec playwright test tests/e2e/plugin-marketplace.spec.ts -g "keeps system, bundled, and local actions" --repeat-each=10 --workers=1 --reporter=line— 10/10 passed after stabilizing the authenticated fixture.corepack pnpm exec vitest run tests/unit/pi-product-artifact.test.ts --maxWorkers=1— passed: 15/15 artifact proof tests.- Focused projection/query/controller/page/navigation/Main-layout suites passed; the final page suite passed 5/5, including project-switch confirmation reset and dialog initial-focus/Escape/focus-return behavior.
- Existing parent/child/worker lifecycle coverage passed in the full suite through
coding-plugin-effective-resolver,pi-managed-worker-opener,device-package-manager, anddevice-package-routestests. check_doc_drift.py --task-id 20260903-plugin-navigation-implementation-a4c7e291— passed the feature-task ownership boundary check.git diff --checkpassed before Task Documentation Gate finalization.- One full-suite run transiently failed the untouched Marketplace client temp Package Store install case; its exact isolated rerun passed 1/1 and the subsequent full suite passed as recorded above. An earlier targeted E2E run exposed the test-only auth reload race; trace inspection showed no Library request and a signed-out persisted fixture, after which the clean-document Main-session fixture passed 10/10 and the formal targeted command passed 4/4.
Follow-ups
- No implementation follow-up or product deviation is known. The canonical module map promotion below remains intentionally deferred to an Integration Gate.
Promotion Candidates
- Target:
.project-docs/20-architecture/module-map.md. - Proposal: replace the three legacy Renderer plugin pages with the pure unified
projection,
/pluginsworkspace/detail surface, canonical query state, and exact legacy redirects; keep Catalog, Library, official Package Store, Device Packages, project enablement, Agent assignment, admission, and billing under their existing owners. - Evidence: approved Spec
ML-PLUGIN-NAV-001, this task's single implementation commit, pure projection/action tests, route/page tests, artifact proof, full unit suite, production build, and 4/4 targeted Electron flows. - Future impact: architecture readers will use
/pluginsandsrc/pages/Plugins/plugin-workspace-model.tsas the Renderer aggregation seam and will not extend the deleted page implementations. - Semantic conflicts: none known; the concurrent AI Design task owns no plugin navigation or plugin authority surface.
- Human confirmation: no new product-direction decision is required, but promotion must still occur only in an exclusively owned Integration Gate.