diff --git a/src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md b/src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md index fb8d84772..d5aec15aa 100644 --- a/src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md +++ b/src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md @@ -109,11 +109,19 @@ If `{sprint_status}` file does not exist, note that story status was updated in Re-open the story file after saving and verify the top-level `Status:` field equals `{new_status}`. -Set `{reconciliation_result}` = `story file verified; sprint tracker verification skipped`. +If the story file does not match `{new_status}`, HALT with a closeout reconciliation failure instead of reporting completion. -If `{sprint_status}` exists and `{story_key}` was found, re-open `{sprint_status}` after saving and verify `development_status[{story_key}]` also equals `{new_status}`. If it matches, set `{reconciliation_result}` = `story markdown and sprint tracker agree on {new_status}`. +If `{sprint_status}` file does not exist, set `{reconciliation_result}` = `story file verified; sprint tracker not applicable`. -If the story file does not match `{new_status}`, or if `{sprint_status}` was verified and `development_status[{story_key}]` does not match `{new_status}`, HALT with a closeout reconciliation failure instead of reporting completion. +If `{sprint_status}` exists but `{story_key}` was not found during sprint-status sync, HALT with a closeout reconciliation failure instead of reporting completion. + +If `{sprint_status}` exists and `{story_key}` was found, re-open `{sprint_status}` after saving and verify `development_status[{story_key}]` also equals `{new_status}`. + +If `development_status[{story_key}]` is missing, unreadable, or cannot be verified, HALT with a closeout reconciliation failure instead of reporting completion. + +If `development_status[{story_key}]` matches `{new_status}`, set `{reconciliation_result}` = `story markdown and sprint tracker agree on {new_status}`. + +If `development_status[{story_key}]` does not match `{new_status}`, HALT with a closeout reconciliation failure instead of reporting completion. #### Completion summary diff --git a/test/test-closeout-reconciliation.js b/test/test-closeout-reconciliation.js index ca322de19..3a1ca84a6 100644 --- a/test/test-closeout-reconciliation.js +++ b/test/test-closeout-reconciliation.js @@ -45,16 +45,32 @@ assert( assert( codeReview.includes( - 'If the story file does not match `{new_status}`, or if `{sprint_status}` was verified and `development_status[{story_key}]` does not match `{new_status}`, HALT with a closeout reconciliation failure instead of reporting completion.', + 'If the story file does not match `{new_status}`, HALT with a closeout reconciliation failure instead of reporting completion.', ), - 'code-review halts when closeout reconciliation fails', + 'code-review halts when story markdown reconciliation fails', ); assert(codeReview.includes('development_status[{story_key}]'), 'code-review verifies the sprint tracker entry during reconciliation'); assert( - codeReview.includes('Set `{reconciliation_result}` = `story file verified; sprint tracker verification skipped`.'), - 'code-review records when sprint tracker verification is skipped', + codeReview.includes( + 'If `development_status[{story_key}]` is missing, unreadable, or cannot be verified, HALT with a closeout reconciliation failure instead of reporting completion.', + ), + 'code-review halts when the sprint tracker entry cannot be verified', +); + +assert( + codeReview.includes( + 'If `development_status[{story_key}]` does not match `{new_status}`, HALT with a closeout reconciliation failure instead of reporting completion.', + ), + 'code-review halts when sprint tracker reconciliation fails', +); + +assert( + codeReview.includes( + 'If `{sprint_status}` file does not exist, set `{reconciliation_result}` = `story file verified; sprint tracker not applicable`.', + ), + 'code-review treats skipped reconciliation as not applicable only when no sprint tracker exists', ); assert(