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:
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user