6.8 KiB
6.8 KiB
Task: Plugin navigation R2 remediation
Identity
- Task ID: 20260903-plugin-navigation-remediation-r2-b8e4d317
- Mode: Feature
- Branch: codex/20260903-plugin-navigation-remediation-r2-b8e4d317-plugin-navigation-remediation-r2
- Worktree: C:\Users\7brot.codex\worktrees\plugin-nav-remediation-r2-b8e4d317\makelore
- Base commit:
c5020ae22c - Owner: codex-01a0656d
- Status: Ready for Integration
Scope
- Remediate the three R2 Spec findings against product base
c5020ae22c9bef1b5bc8190469998127842c4513. - Preserve the exact canonical
/plugins?...route through a successful login, while accepting only safe internal return paths and retaining/module-selectas the default. - Pass device/project refresh-failure provenance into the pure plugin workspace projection so retained snapshots stay visible and are labelled as cached.
- Surface
CodingPluginProject.policyStatus(staleorunavailable) beside affected project policy/pricing; leavecurrentunmarked. - Add focused projection, page, controller, login/route regressions and run the required unit, typecheck, lint, Vite, and relevant Electron verification.
- Produce one remediation commit and a clean READY_FOR_INTEGRATION handoff.
Intent And Constraints
- Follow the authoritative unified plugin workspace Spec and the exact three
findings recorded by R2 review commit
a698c41b39f11b4ebe15fd0f74b5fb8457ae3514. - Work test-first through public projection, page, controller, and router seams.
- Keep Catalog, Library, Package Store, Device Packages, project enablement, Agent Skill assignment, runtime admission, and billing authorities unchanged.
- Do not modify stores, Electron Main, server/runtime/billing contracts, or add a new cache/authority, compatibility layer, feature flag, or wrapper layer.
- Limit product edits to
src/pages/Plugins/**andsrc/pages/Login/index.tsx; a minimal existing route seam is permitted only if required by the login regression. Corresponding unit/page/route tests and this task record are owned. - Keep original R1 fixes covered and unchanged in semantics.
- Do not merge main, push, create a PR, deploy, publish, or install to a user machine. Do not modify or clean any other worktree or the repository root.
Project Context Loaded
- Product goal: finish ML-PLUGIN-NAV-001 R2 remediation without merging existing backend or runtime authorities into the Renderer projection.
- Current state: base
c5020ae22c9bef1b5bc8190469998127842c4513contains the initial implementation and R1 remediation; R2 Standards passed with zero findings and R2 Spec reported exactly three Medium roots. - Relevant decisions:
/pluginsis the canonical Code-owned, initialization-safe route; auth return uses router state; source-qualified identities and fail-closed partial-source behavior remain intact; Renderer displays but does not calculate or authorize project policy/billing state. - Evidence: the authoritative Spec, R2 review record, current App/Login/Plugins composition, device-package and coding-plugin snapshot-preservation stores, and existing unit/Electron fixtures were inspected.
- Likely modules:
src/pages/Plugins/plugin-workspace-controller.ts,src/pages/Plugins/plugin-workspace-model.ts,src/pages/Plugins/index.tsx,src/pages/Plugins/PluginDetails.tsx,src/pages/Login/index.tsx, and focused tests undertests/unit(plus relevant existing Electron coverage if needed). - Unknowns/risks: dependency availability in the fresh worktree must be checked; the stable public route unit seam may be more appropriate than expanding the Electron fixture for the login-return contract.
- Concurrent task assessment: the authoritative task owner exactly matches this managed worktree, branch, and base. Same-topic implementation/remediation/review tasks are READY_FOR_INTEGRATION; remaining planning peers declare no overlapping ownership of the scoped Plugin/Login files or semantics.
- Concurrent Task Gate: Passed.
- Planning Gate: Passed.
Outcome
- Plugin acquisition sign-in now carries the exact canonical workspace path (including scope/source/state/search/selected-plugin query) in router state. Login returns to that same path after successful credential and model sync.
- Login accepts only supported same-app absolute return paths with one leading
slash. Absolute external and protocol-relative targets fall back to
/module-select; the existing no-return default is unchanged. - The pure workspace projection now receives bounded device/project refresh failure provenance. Preserved local package, project-backed official, and retained unknown rows stay visible and render as cached; project failure does not mark catalog-only official rows.
- Project policy status is projected verbatim onto project-associated official
and retained rows. Details explain
staleandunavailablebeside billing, whilecurrentremains unmarked. No status changes commands, admission, or client-side pricing. - No stores, Electron Main, server, runtime, billing authority, dependencies, legacy routes, or unrelated product files were changed.
Verification
- TDD login/controller RED: 2 expected failures (bare
/login, fixed/module-select); GREEN: 2 files, 18 tests passed. - TDD refresh provenance RED: 2 expected failures (
stale=falsein model/page); GREEN: 2 files, 26 tests passed. - TDD policy status RED: 5 expected failures (missing projection and copy); GREEN: 2 files, 32 tests passed.
- Focused plugin/login/route suite: 6 files, 58 tests passed.
pnpm run typecheck: passed.pnpm run lint:check: passed with 0 errors and 5 pre-existing warnings insrc/pages/Home/index.tsxandsrc/pages/Makelore/index.tsx, outside this diff.pnpm test: 225 files / 1841 tests passed / 2 skipped, plus the isolated coding-chat pressure file 1/1 passed.pnpm run build:vite: passed. Existing Browserslist age, mixed static/dynamic import, and chunk-size warnings remained non-failing.- Targeted Electron E2E (
plugin-marketplace.spec.tsandproject-plugins.spec.ts): final combined rerun 4/4 passed. The first combined run was 3/4: one case timed out waiting for the test fixture to observe/api/auth/mebefore any plugin assertion. Playwright trace showed successful Electron launch and reload with no console/renderer crash; the isolated rerun passed 1/1, then the full targeted rerun passed 4/4. - Public router Login regression covers exact canonical return plus rejected external/protocol-relative targets and unchanged default behavior.
Follow-ups
- Source task will run a fresh fixed-range Standards + Spec acceptance review.
- Do not merge to main before that independent acceptance.
Promotion Candidates
- None. The changes implement the already-authoritative ML-PLUGIN-NAV-001 Spec and do not introduce a new shared architecture or product decision.