@@ -690,7 +690,49 @@ Write "Intent Coverage Matrix" to discussion.md:
690690- (a) Add a dedicated discussion round to address it before continuing, OR
691691- (b) Explicitly confirm with user that it is intentionally deferred
692692
693- ##### Step 4.1: Consolidate Insights
693+ ##### Step 4.1: Findings-to-Recommendations Traceability (MANDATORY before consolidation)
694+
695+ Collect ALL actionable findings from every round and map each to a disposition:
696+
697+ ``` javascript
698+ // 1. Collect all actionable findings from discussion rounds
699+ // Sources: key findings with actionable implications, technical solutions (proposed/validated),
700+ // identified gaps (API-frontend gaps, missing features, design issues),
701+ // corrected assumptions that imply fixes
702+ const allFindings = collectActionableFindings (explorations, discussionRounds)
703+
704+ // 2. Map each finding → disposition
705+ // | Disposition | Meaning |
706+ // |-----------------|------------------------------------------------------|
707+ // | recommendation | Converted to a numbered recommendation |
708+ // | absorbed | Covered by another recommendation (specify which) |
709+ // | deferred | Explicitly out-of-scope with reason |
710+ // | informational | Pure insight, no action needed |
711+
712+ const findingsCoverage = allFindings .map (f => ({
713+ finding: f .summary ,
714+ round: f .round ,
715+ disposition: null , // MUST be assigned before proceeding
716+ target: null , // e.g., "Rec #1" or "→ Rec #3" or "Reason: ..."
717+ reason: null
718+ }))
719+
720+ // 3. Gate: ALL findings MUST have a disposition assigned.
721+ // Do NOT proceed to Step 4.2 with any disposition = null.
722+ // Unmapped findings must be either added as new recommendations or assigned a disposition.
723+
724+ // 4. Append Findings Coverage Matrix to discussion.md
725+ appendToDiscussion (`
726+ ### Findings Coverage Matrix
727+ | # | Finding (Round) | Disposition | Target |
728+ |---|----------------|-------------|--------|
729+ ${ findingsCoverage .map ((f , i ) =>
730+ ` | ${ i+ 1 } | ${ f .finding } (R${ f .round } ) | ${ f .disposition } | ${ f .target || ' —' } |`
731+ ).join (' \n ' )}
732+ ` )
733+ ```
734+
735+ ##### Step 4.2: Consolidate Insights
694736
695737``` javascript
696738const conclusions = {
@@ -703,6 +745,7 @@ const conclusions = {
703745 { point: ' ...' , evidence: ' ...' , confidence: ' high|medium|low' }
704746 ],
705747 recommendations: [ // Actionable recommendations
748+ // MUST include all findings with disposition = 'recommendation' from Step 4.1
706749 {
707750 action: ' ...' , // What to do (imperative verb + target)
708751 rationale: ' ...' , // Why this matters
@@ -726,12 +769,13 @@ const conclusions = {
726769 ],
727770 intent_coverage: [ // From Step 4.0
728771 { intent: ' ...' , status: ' addressed|transformed|absorbed|missed' , where_addressed: ' ...' , notes: ' ...' }
729- ]
772+ ],
773+ findings_coverage: findingsCoverage // From Step 4.1
730774}
731775Write (` ${ sessionFolder} /conclusions.json` , JSON .stringify (conclusions, null , 2 ))
732776```
733777
734- ##### Step 4.2 : Final discussion.md Update
778+ ##### Step 4.3 : Final discussion.md Update
735779
736780Append conclusions section and finalize:
737781
@@ -749,6 +793,8 @@ Append conclusions section and finalize:
749793| What Was Clarified | Important corrections (~~ wrong→right~~ ) |
750794| Key Insights | Valuable learnings for future reference |
751795
796+ ** Findings Coverage Matrix** : From Step 4.1 (already appended).
797+
752798** Decision Trail Section** :
753799
754800| Subsection | Content |
@@ -759,7 +805,7 @@ Append conclusions section and finalize:
759805
760806** Session Statistics** : Total discussion rounds, key findings count, dimensions covered, artifacts generated, ** decision count** .
761807
762- ##### Step 4.3 : Interactive Recommendation Review (skip in auto mode)
808+ ##### Step 4.4 : Interactive Recommendation Review (skip in auto mode)
763809
764810Walk through each recommendation one-by-one for user confirmation before proceeding:
765811
@@ -810,7 +856,7 @@ for (const [index, rec] of sortedRecs.entries()) {
810856| 3 | [ action] | low | 1 | ❌ Rejected | [ reason] |
811857```
812858
813- ##### Step 4.4 : Post-Completion Options
859+ ##### Step 4.5 : Post-Completion Options
814860
815861** Complexity Assessment** — determine available options:
816862
@@ -871,8 +917,9 @@ if (!autoYes) {
871917| Done | Display artifact paths, end |
872918
873919** Success Criteria** :
874- - conclusions.json created with complete synthesis
875- - discussion.md finalized with conclusions and decision trail
920+ - conclusions.json created with complete synthesis including findings_coverage[ ]
921+ - ** Findings Coverage Matrix** completed — all actionable findings mapped to disposition (recommendation/absorbed/deferred/informational)
922+ - discussion.md finalized with conclusions, decision trail, and findings coverage matrix
876923- ** Intent Coverage Matrix** verified — all original intents accounted for (no ❌ Missed without explicit user deferral)
877924- User offered meaningful next step options
878925- ** Complete decision trail** documented and traceable from initial scoping to final conclusions
@@ -960,7 +1007,7 @@ $csv-wave-pipeline "${topic}"
9601007| ` explorations/* .json` | 2 | Per-perspective exploration results (multi only) |
9611008| `explorations.json` | 2 | Single perspective aggregated findings |
9621009| `perspectives.json` | 2 | Multi-perspective findings with cross-perspective synthesis |
963- | `conclusions.json` | 4 | Final synthesis: conclusions, recommendations, open questions |
1010+ | `conclusions.json` | 4 | Final synthesis: conclusions, recommendations, findings_coverage, open questions |
9641011
9651012## Analysis Dimensions Reference
9661013
0 commit comments