fix(FN-2176): honor planning summary overrides for task generation

- Add optional summary payload support to planning create-task and start-breakdown API client calls
- Pass edited summary data from PlanningModeModal when creating a task or starting breakdown
- Parse and validate summary overrides in planning routes and prioritize override data when present
- Add and update dashboard tests to verify override handling and modal call expectations
This commit is contained in:
Fusion
2026-04-20 09:32:04 -07:00
committed by gsxdsm
parent a1f535008b
commit 74f2b25c1d
5 changed files with 235 additions and 46 deletions

View File

@@ -877,7 +877,7 @@ describe("PlanningModeModal", () => {
fireEvent.click(screen.getByText("Create Task"));
await waitFor(() => {
expect(mockCreateTaskFromPlanning).toHaveBeenCalledWith("session-complete-2", undefined);
expect(mockCreateTaskFromPlanning).toHaveBeenCalledWith("session-complete-2", resumedSummary, undefined);
});
});
});
@@ -1415,7 +1415,7 @@ describe("PlanningModeModal", () => {
fireEvent.click(screen.getByText("Create Task"));
await waitFor(() => {
expect(mockCreateTaskFromPlanning).toHaveBeenCalledWith("session-123", undefined);
expect(mockCreateTaskFromPlanning).toHaveBeenCalledWith("session-123", mockSummary, undefined);
expect(mockOnTaskCreated).toHaveBeenCalledWith(createdTask);
});
});
@@ -1475,7 +1475,7 @@ describe("PlanningModeModal", () => {
fireEvent.click(screen.getByText("Break into Tasks"));
await waitFor(() => {
expect(mockStartPlanningBreakdown).toHaveBeenCalledWith("session-123", undefined);
expect(mockStartPlanningBreakdown).toHaveBeenCalledWith("session-123", mockSummary, undefined);
});
await waitFor(() => {

View File

@@ -686,14 +686,14 @@ export function PlanningModeModal({ isOpen, onClose, onTaskCreated, onTasksCreat
setView({ type: "loading" });
try {
const task = await createTaskFromPlanning(view.session.sessionId, projectId);
const task = await createTaskFromPlanning(view.session.sessionId, editedSummary ?? undefined, projectId);
onTaskCreated(task);
handleCancel();
} catch (err: any) {
setError(err.message || "Failed to create task");
setView({ type: "summary", session: view.session, summary: view.summary });
}
}, [view, onTaskCreated, handleCancel]);
}, [editedSummary, view, projectId, onTaskCreated, handleCancel]);
const handleStartBreakdown = useCallback(async () => {
if (view.type !== "summary") return;
@@ -702,7 +702,7 @@ export function PlanningModeModal({ isOpen, onClose, onTaskCreated, onTasksCreat
setView({ type: "loading" });
try {
const result = await startPlanningBreakdown(view.session.sessionId, projectId);
const result = await startPlanningBreakdown(view.session.sessionId, editedSummary ?? undefined, projectId);
setLockSessionId(result.sessionId);
setView({
type: "breakdown",
@@ -714,7 +714,7 @@ export function PlanningModeModal({ isOpen, onClose, onTaskCreated, onTasksCreat
setError(err.message || "Failed to start breakdown");
setView({ type: "summary", session: view.session, summary: view.summary });
}
}, [view, projectId]);
}, [editedSummary, view, projectId]);
const handleCreateTasksFromBreakdown = useCallback(async () => {
if (view.type !== "breakdown") return;