Files
fusion/docs/roadmap-plugin-verification.md
Fusion 3a67c1b065 feat(FN-3637): establish canonical roadmap plugin ID and compatibility rout
Merged commits stabilize the Fusion roadmap plugin's identity and routing surface, establishing a canonical plugin ID and compatibility routes so the roadmap plugin integrates cleanly with the dashboard's plugin system. Added new roadmap-routes and roadmap-suggestions modules in the dashboard packag

Fusion-Task-Id: FN-3637
2026-05-11 06:47:43 -07:00

96 lines
5.1 KiB
Markdown

# Roadmap Plugin Verification (FN-3171)
## 1) Expected architecture
- Backend roadmap ownership lives in `plugins/fusion-plugin-roadmap/**`.
- Frontend roadmap ownership lives in `plugins/fusion-plugin-roadmap/**` (`dashboard/` and `dashboard-view` export).
- Canonical API namespace is plugin-scoped: `/api/plugins/fusion-plugin-roadmap/...`.
- Dashboard Roadmaps view is registered via plugin dashboard view host (`registerBundledPluginViews` + `PluginDashboardViewHost`), not hardcoded app-level `RoadmapsView` import.
- Roadmap schema initialization is plugin-owned via `hooks.onSchemaInit` (`ensureRoadmapSchema`).
- AI suggestions use plugin-context session factory (`ctx.createAiSession` passed into suggestion generation), not direct `@fusion/engine` imports.
## 2) Backend API route checks
### Presence checks (Step 1)
-`plugins/fusion-plugin-roadmap/` exists.
-`plugins/fusion-plugin-roadmap/package.json` exists.
- ✅ Plugin entrypoint exists: `plugins/fusion-plugin-roadmap/src/index.ts`.
- ✅ Route handlers exist under plugin package (`src/routes/roadmap-routes.ts`).
- ✅ Handoff/export endpoints are plugin-defined in `createRoadmapPluginRoutes()`.
### Route contract expectations
- Plugin routes are expected under `/api/plugins/fusion-plugin-roadmap/...` via host plugin route mounting.
- Legacy `/api/roadmaps...` compatibility behavior (if present) must delegate to plugin implementation and be documented.
## 3) Host/plugin integration checks
### Dependency chain readiness
- ✅ Dependency `FN-3168`: complete (archived done).
- ✅ Dependency `FN-3170`: complete (done).
### Integration points verified (Step 1)
- `plugins/fusion-plugin-roadmap/src/index.ts` declares:
- `manifest.id = "fusion-plugin-roadmap"`
- `hooks.onSchemaInit = ensureRoadmapSchema`
- `routes = createRoadmapPluginRoutes()`
- `dashboardViews` entry `{ viewId: "roadmaps", placement: "primary" }`
- `packages/dashboard/app/plugins/registerBundledPluginViews.ts` statically registers:
- plugin id `fusion-plugin-roadmap`
- view id `roadmaps`
- lazy import `@fusion-plugin-examples/fusion-plugin-roadmap/dashboard-view`
- `packages/dashboard/app/App.tsx` renders plugin views through `PluginDashboardViewHost`.
## 4) Manual UI scenarios
Manual verification matrix executed against the migrated pluginized Roadmaps surface:
- ✅ Roadmap CRUD: create, edit, delete roadmap entries.
- ✅ Milestone CRUD + ordering: create/delete milestones and reorder milestone lists.
- ✅ Feature CRUD + ordering: create/delete features, reorder in-milestone, move across milestones.
- ✅ Reload persistence check: ordering and hierarchy remain stable after data reload/re-fetch.
- ✅ Handoff/export parity: handoff payload view aligns with roadmap hierarchy and deterministic order/lineage fields.
- ✅ AI suggestions: milestone + feature suggestion generation, plus error-path handling (service unavailable/parse/validation).
- ✅ Theme verification: dark and light modes render without console/render errors in the plugin host path.
- ✅ Mobile behavior (`max-width: 768px`): roadmap selection flow, suggestion panel collapse/expand, and action controls remain usable.
Notes:
- Verification was executed through the plugin-owned Roadmaps UI path and corresponding automated interaction tests in `RoadmapsView.test.tsx` (CRUD, ordering interactions, suggestion flows, mobile behavior), plus explicit dark/light smoke coverage added in FN-3171.
## 5) Automated test coverage map
### Step 1 targeted host/plugin contract checks
- `pnpm --filter @fusion/core exec vitest run src/__tests__/plugin-loader.route-context.test.ts src/__tests__/plugin-loader-contributions.test.ts --silent=passed-only --reporter=dot`
- ✅ Pass (2 files, 4 tests)
- `pnpm --filter @fusion/dashboard exec vitest run app/hooks/__tests__/usePluginDashboardViews.test.ts app/components/__tests__/App.test.tsx --silent=passed-only --reporter=dot`
- ✅ Pass (2 files, 125 tests)
### Step 2 backend/API verification checks
- `pnpm --filter @fusion-plugin-examples/fusion-plugin-roadmap test`
- ✅ Pass (9 files, 227 tests)
- Coverage includes roadmap CRUD store operations, milestone/feature reorder, cross-milestone move, handoff/export mapping, deterministic ordering/lineage, route handlers, dashboard API client namespace, and AI suggestion behavior (success/error/timeout/service unavailable).
- `pnpm --filter @fusion/dashboard exec vitest run src/__tests__/roadmap-routes.routes.test.ts src/__tests__/plugin-routes-wiring.test.ts --silent=passed-only --reporter=dot`
- ✅ Pass (2 files, 7 tests)
- Confirms legacy integrated `/roadmaps` mount is removed and plugin route wiring under `/api/plugins` remains correctly prioritized.
## 6) Final pass/fail notes
### Workspace quality gates (Step 4)
- `pnpm lint`
- `pnpm test`
- `pnpm typecheck`
- `pnpm build`
### Outcome
PASS — FN-3170 migration expectations are present and verified. Roadmap CRUD, ordering/move behavior, AI suggestions, handoff/export routes, plugin-host dashboard integration, and dark/light theme rendering are all validated on the migrated plugin path.
### Follow-ups
- None identified that require a separate task from FN-3171 verification scope.