feat(FN-4604): complete Step 2 — wire interview milestone acceptance derivation

Fusion-Task-Id: FN-4604
Fusion-Task-Lineage: 71752cd0-eadb-4434-a2a3-d9fff562ea63
This commit is contained in:
Fusion
2026-05-15 07:36:46 -07:00
committed by gsxdsm
parent 87ff4db2c6
commit 56782d989c
3 changed files with 8 additions and 2 deletions

View File

@@ -395,6 +395,7 @@ Your job: help users transform high-level goals into structured mission plans wi
- Features should be specific and actionable
- ALWAYS include verification/acceptance criteria at every level:
- Milestone: "verification" field — how to confirm this phase is complete (e.g., "All API endpoints return correct responses, integration tests pass")
- Milestone: optional "acceptanceCriteria" field for explicit milestone-level completion bars (if omitted, acceptance can be auto-derived from child feature criteria/descriptions)
- Slice: "verification" field — how to confirm this work unit is done (e.g., "Auth flow works end-to-end from signup through login")
- Feature: "acceptanceCriteria" field — how to verify this specific deliverable (e.g., "JWT tokens expire after 1 hour and refresh correctly")
- Suggest sensible defaults and push for specificity
@@ -408,7 +409,7 @@ For questions:
{"type": "question", "data": {"id": "unique-id", "type": "text|single_select|multi_select|confirm", "question": "The question text", "description": "Helpful context", "options": [{"id": "opt1", "label": "Option 1", "description": "Details"}]}}
For completion (when you have enough information):
{"type": "complete", "data": {"missionTitle": "Refined mission title", "missionDescription": "Comprehensive mission description based on the conversation", "milestones": [{"title": "Milestone title", "description": "What this phase achieves", "verification": "How to confirm this milestone is complete", "slices": [{"title": "Slice title", "description": "What this work unit covers", "verification": "How to confirm this slice is done", "features": [{"title": "Feature title", "description": "What to build", "acceptanceCriteria": "How to verify this feature works"}]}]}]}}`,
{"type": "complete", "data": {"missionTitle": "Refined mission title", "missionDescription": "Comprehensive mission description based on the conversation", "milestones": [{"title": "Milestone title", "description": "What this phase achieves", "verification": "How to confirm this milestone is complete", "acceptanceCriteria": "Optional explicit milestone criteria (omit to auto-derive from features)", "slices": [{"title": "Slice title", "description": "What this work unit covers", "verification": "How to confirm this slice is done", "features": [{"title": "Feature title", "description": "What to build", "acceptanceCriteria": "How to verify this feature works"}]}]}]}}`,
},
"ai-refine-system": {
key: "ai-refine-system",

View File

@@ -147,6 +147,7 @@ PREFER structured question types over free-text. This makes the interview faster
- Features should be specific and actionable
- ALWAYS include verification/acceptance criteria at every level:
- Milestone: "verification" field — how to confirm this phase is complete (e.g., "All API endpoints return correct responses, integration tests pass")
- Milestone: optional "acceptanceCriteria" field for explicit milestone-level completion bars (if omitted, acceptance can be auto-derived from child feature criteria/descriptions)
- Slice: "verification" field — how to confirm this work unit is done (e.g., "Auth flow works end-to-end from signup through login")
- Feature: "acceptanceCriteria" field — how to verify this specific deliverable (e.g., "JWT tokens expire after 1 hour and refresh correctly")
- Suggest sensible defaults and push for specificity
@@ -169,7 +170,7 @@ For text question (use ONLY for names, URLs, or truly unique free-form input):
{"type": "question", "data": {"id": "q-project-name", "type": "text", "question": "What is the project or product name?", "description": "Used in documentation and configuration"}}
For completion (when you have enough information):
{"type": "complete", "data": {"missionTitle": "Refined mission title", "missionDescription": "Comprehensive mission description based on the conversation", "milestones": [{"title": "Milestone title", "description": "What this phase achieves", "verification": "How to confirm this milestone is complete", "slices": [{"title": "Slice title", "description": "What this work unit covers", "verification": "How to confirm this slice is done", "features": [{"title": "Feature title", "description": "What to build", "acceptanceCriteria": "How to verify this feature works"}]}]}]}}`;
{"type": "complete", "data": {"missionTitle": "Refined mission title", "missionDescription": "Comprehensive mission description based on the conversation", "milestones": [{"title": "Milestone title", "description": "What this phase achieves", "verification": "How to confirm this milestone is complete", "acceptanceCriteria": "Optional explicit milestone criteria (omit to auto-derive from features)", "slices": [{"title": "Slice title", "description": "What this work unit covers", "verification": "How to confirm this slice is done", "features": [{"title": "Feature title", "description": "What to build", "acceptanceCriteria": "How to verify this feature works"}]}]}]}}`;
// ── Types ───────────────────────────────────────────────────────────────────
@@ -193,6 +194,7 @@ export interface MissionPlanMilestone {
title: string;
description?: string;
verification?: string;
acceptanceCriteria?: string;
slices: MissionPlanSlice[];
}

View File

@@ -792,6 +792,7 @@ export function createMissionRouter(
title: milestoneData.title,
description: milestoneData.description || undefined,
verification: milestoneData.verification,
acceptanceCriteria: milestoneData.acceptanceCriteria,
});
// Milestone-level assertion remains on the milestone even when it has no slices.
@@ -844,6 +845,8 @@ export function createMissionRouter(
missionStore.linkFeatureToAssertion(feature.id, assertion.id);
}
}
missionStore.applyDerivedMilestoneAcceptanceCriteria(milestone.id);
}
// Cleanup the interview session