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
5.1 KiB
5.1 KiB
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/anddashboard-viewexport). - 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-levelRoadmapsViewimport. - Roadmap schema initialization is plugin-owned via
hooks.onSchemaInit(ensureRoadmapSchema). - AI suggestions use plugin-context session factory (
ctx.createAiSessionpassed into suggestion generation), not direct@fusion/engineimports.
2) Backend API route checks
Presence checks (Step 1)
- ✅
plugins/fusion-plugin-roadmap/exists. - ✅
plugins/fusion-plugin-roadmap/package.jsonexists. - ✅ 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.tsdeclares:manifest.id = "fusion-plugin-roadmap"hooks.onSchemaInit = ensureRoadmapSchemaroutes = createRoadmapPluginRoutes()dashboardViewsentry{ viewId: "roadmaps", placement: "primary" }
packages/dashboard/app/plugins/registerBundledPluginViews.tsstatically registers:- plugin id
fusion-plugin-roadmap - view id
roadmaps - lazy import
@fusion-plugin-examples/fusion-plugin-roadmap/dashboard-view
- plugin id
packages/dashboard/app/App.tsxrenders plugin views throughPluginDashboardViewHost.
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
/roadmapsmount is removed and plugin route wiring under/api/pluginsremains 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.