feat(FN-1674): add roadmap export and handoff system

- Add RoadmapStore with read APIs for project-scoped roadmap data
- Add roadmap-handoff mapper to transform roadmap data for export
- Add project-scoped handoff API route (/api/projects/:id/roadmap/handoff)
- Add useRoadmaps hook for fetching and exposing roadmap data to components
- Update RoadmapsView with export/handoff UX path and roadmap detail view
- Add roadmap routes with project-scoped handoff endpoint
- Add comprehensive tests for handoff mapper and roadmap routes
- Update architecture.md and add dashboard-guide.md documentation
This commit is contained in:
Fusion
2026-04-15 17:06:36 -07:00
committed by gsxdsm
parent d52ae1cb99
commit b37dfc23f5
12 changed files with 1151 additions and 6 deletions

View File

@@ -160,8 +160,17 @@ The roadmap model is intentionally lightweight and independent from `MissionStor
- FK cascade integrity: deleting a roadmap removes milestones and features
- Export/handoff DTO methods for integration with downstream systems:
- `getRoadmapExport()``RoadmapExportBundle` (flat export payload)
- `getRoadmapMissionHandoff()``RoadmapMissionPlanningHandoff` (mission conversion)
- `getRoadmapFeatureHandoff()``RoadmapFeatureTaskPlanningHandoff` (task planning)
- `getMissionPlanningHandoff()``RoadmapMissionPlanningHandoff` (mission conversion)
- `listFeatureTaskPlanningHandoffs()``RoadmapFeatureTaskPlanningHandoff[]` (all features as task handoffs)
- `getRoadmapFeatureHandoff()``RoadmapFeatureTaskPlanningHandoff` (single feature task handoff)
- Pure handoff mapping helpers in `roadmap-handoff.ts` for read-only transformations
**Roadmap handoff contract boundary (FN-1674):**
- Handoffs are **read-only** transformations — no mission/task records are created
- Source lineage is preserved on every emitted item (roadmapId, milestoneId, featureId, titles, order indices)
- Ordering is deterministic using `normalizeRoadmapMilestoneOrder` and `normalizeRoadmapFeatureOrder`
- Not-found semantics: store handoff methods throw when roadmapId is unknown; routes map to HTTP 404
- The combined handoff endpoint (`GET /:roadmapId/handoff`) returns both mission and task handoffs
Key roadmap invariants:
- milestone ordering is scoped to a single roadmap and must remain contiguous + 0-based
@@ -173,7 +182,7 @@ Key roadmap invariants:
- Roadmaps: `GET /`, `POST /`, `GET /:roadmapId`, `PATCH /:roadmapId`, `DELETE /:roadmapId`
- Milestones: `GET /:roadmapId/milestones`, `POST /:roadmapId/milestones`, `PATCH /milestones/:milestoneId`, `DELETE /milestones/:milestoneId`, `POST /:roadmapId/milestones/reorder`
- Features: `GET /milestones/:milestoneId/features`, `POST /milestones/:milestoneId/features`, `PATCH /features/:featureId`, `DELETE /features/:featureId`, `POST /milestones/:milestoneId/features/reorder`, `POST /features/:featureId/move`
- Export/Handoff: `GET /:roadmapId/export`, `GET /:roadmapId/handoff/mission`, `GET /:roadmapId/milestones/:milestoneId/features/:featureId/handoff/task`
- Export/Handoff: `GET /:roadmapId/export`, `GET /:roadmapId/handoff`, `GET /:roadmapId/handoff/mission`, `GET /:roadmapId/milestones/:milestoneId/features/:featureId/handoff/task`
**Database schema:**
- `roadmaps` — roadmap metadata (id, title, description, timestamps)

View File

@@ -295,6 +295,33 @@ Within each milestone, you can generate AI-powered feature suggestions to quickl
- **No milestones**: "This roadmap has no milestones. Click + on a milestone lane to add one."
- **No features**: "No features yet." displayed within each milestone card
### Roadmap Export / Handoff
Roadmaps can be exported as structured data for use in mission and task planning flows.
**How to use:**
1. Hover over a roadmap in the sidebar
2. Click the **download icon** (↘) to open the export modal
3. Click **Load Handoff Data** to fetch the roadmap's handoff payload
4. Review the exported data:
- **Mission Planning Handoff**: Roadmap structure with milestones and features in deterministic order
- **Feature Task Handoffs**: Individual feature entries with source lineage (roadmap ID, milestone ID, feature ID, titles, and order indices)
**Key features:**
- This is a **read-only** export — no missions, slices, or tasks are created
- The handoff preserves source lineage for traceability to the original roadmap
- Ordering is deterministic (milestone order, then feature order)
- Click **Copy to Clipboard** to copy the full handoff payload as JSON
- Handoff data can be manually used to seed mission planning prompts or task creation flows
**Use cases:**
- Export a roadmap's milestone/feature structure to guide AI-assisted mission planning
- Copy individual feature handoffs as task planning prompts
- Preserve roadmap context when creating tasks in the task board
## Task Detail Modal
Inspect logs, step progress, workflow outcomes, and model overrides.