sddflow 2.7.52__tar.gz → 2.7.54__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (756) hide show
  1. {sddflow-2.7.52 → sddflow-2.7.54}/PKG-INFO +39 -1
  2. {sddflow-2.7.52 → sddflow-2.7.54}/README.md +38 -0
  3. {sddflow-2.7.52 → sddflow-2.7.54}/pyproject.toml +1 -1
  4. sddflow-2.7.54/sdd/__init__.py +1 -0
  5. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/commands/review.py +376 -7
  6. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/commands/upgrade.py +91 -0
  7. {sddflow-2.7.52/sdd/packs/sdd-fullstack → sddflow-2.7.54/sdd/packs/sdd-backend-service}/.github/prompts/specify-brd.prompt.md +10 -3
  8. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/specify-doc.prompt.md +7 -3
  9. {sddflow-2.7.52/sdd/packs/sdd-fullstack → sddflow-2.7.54/sdd/packs/sdd-backend-service}/.github/prompts/specify-srd.prompt.md +7 -3
  10. {sddflow-2.7.52/sdd/packs/sdd-fullstack → sddflow-2.7.54/sdd/packs/sdd-backend-service}/.github/prompts/specify-uc.prompt.md +8 -3
  11. {sddflow-2.7.52/sdd/packs/sdd-universal → sddflow-2.7.54/sdd/packs/sdd-backend-service}/.github/prompts/validate.prompt.md +36 -7
  12. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/manifest.yml +1 -1
  13. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/CLAUDE.md +11 -0
  14. {sddflow-2.7.52/sdd/packs/sdd-mobile → sddflow-2.7.54/sdd/packs/sdd-frontend-spa}/.github/prompts/specify-brd.prompt.md +10 -3
  15. {sddflow-2.7.52/sdd/packs/sdd-fullstack → sddflow-2.7.54/sdd/packs/sdd-frontend-spa}/.github/prompts/specify-doc.prompt.md +7 -3
  16. {sddflow-2.7.52/sdd/packs/sdd-backend-service → sddflow-2.7.54/sdd/packs/sdd-frontend-spa}/.github/prompts/specify-srd.prompt.md +7 -3
  17. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/specify-uc.prompt.md +8 -3
  18. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/validate.prompt.md +36 -7
  19. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/manifest.yml +1 -1
  20. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/CLAUDE.md +11 -0
  21. {sddflow-2.7.52/sdd/packs/sdd-frontend-spa → sddflow-2.7.54/sdd/packs/sdd-fullstack}/.github/prompts/specify-brd.prompt.md +10 -3
  22. {sddflow-2.7.52/sdd/packs/sdd-frontend-spa → sddflow-2.7.54/sdd/packs/sdd-fullstack}/.github/prompts/specify-doc.prompt.md +7 -3
  23. {sddflow-2.7.52/sdd/packs/sdd-frontend-spa → sddflow-2.7.54/sdd/packs/sdd-fullstack}/.github/prompts/specify-srd.prompt.md +7 -3
  24. {sddflow-2.7.52/sdd/packs/sdd-backend-service → sddflow-2.7.54/sdd/packs/sdd-fullstack}/.github/prompts/specify-uc.prompt.md +8 -3
  25. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/validate.prompt.md +36 -7
  26. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/manifest.yml +1 -1
  27. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/CLAUDE.md +11 -0
  28. {sddflow-2.7.52/sdd/packs/sdd-backend-service → sddflow-2.7.54/sdd/packs/sdd-mobile}/.github/prompts/specify-brd.prompt.md +10 -3
  29. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/specify-doc.prompt.md +7 -3
  30. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/specify-srd.prompt.md +7 -3
  31. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/specify-uc.prompt.md +8 -3
  32. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/validate.prompt.md +36 -7
  33. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/manifest.yml +1 -1
  34. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/CLAUDE.md +11 -0
  35. sddflow-2.7.54/sdd/packs/sdd-universal/.github/prompts/specify-brd.prompt.md +227 -0
  36. sddflow-2.7.54/sdd/packs/sdd-universal/.github/prompts/specify-doc.prompt.md +313 -0
  37. sddflow-2.7.54/sdd/packs/sdd-universal/.github/prompts/specify-srd.prompt.md +240 -0
  38. sddflow-2.7.54/sdd/packs/sdd-universal/.github/prompts/specify-uc.prompt.md +259 -0
  39. {sddflow-2.7.52/sdd/packs/sdd-backend-service → sddflow-2.7.54/sdd/packs/sdd-universal}/.github/prompts/validate.prompt.md +36 -7
  40. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/manifest.yml +1 -1
  41. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/CLAUDE.md +11 -0
  42. sddflow-2.7.52/sdd/__init__.py +0 -1
  43. sddflow-2.7.52/sdd/packs/sdd-universal/.github/prompts/specify-brd.prompt.md +0 -220
  44. sddflow-2.7.52/sdd/packs/sdd-universal/.github/prompts/specify-doc.prompt.md +0 -309
  45. sddflow-2.7.52/sdd/packs/sdd-universal/.github/prompts/specify-srd.prompt.md +0 -236
  46. sddflow-2.7.52/sdd/packs/sdd-universal/.github/prompts/specify-uc.prompt.md +0 -254
  47. {sddflow-2.7.52 → sddflow-2.7.54}/.gitignore +0 -0
  48. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/__main__.py +0 -0
  49. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/commands/__init__.py +0 -0
  50. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/commands/config.py +0 -0
  51. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/commands/confluence.py +0 -0
  52. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/commands/cr.py +0 -0
  53. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/commands/dashboard.py +0 -0
  54. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/commands/init.py +0 -0
  55. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/commands/jira.py +0 -0
  56. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/commands/pr.py +0 -0
  57. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/address-review.md +0 -0
  58. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/analyze.md +0 -0
  59. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/ava.md +0 -0
  60. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/bug-assess.md +0 -0
  61. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/bug-fix.md +0 -0
  62. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/change.md +0 -0
  63. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/check-review.md +0 -0
  64. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/checklist.md +0 -0
  65. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/clarify.md +0 -0
  66. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/create-context.md +0 -0
  67. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/implement.md +0 -0
  68. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/jira-push.md +0 -0
  69. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/kai.md +0 -0
  70. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/leo.md +0 -0
  71. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/maya.md +0 -0
  72. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/morgan.md +0 -0
  73. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/orchestrate.md +0 -0
  74. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/plan-adr.md +0 -0
  75. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/plan-arch.md +0 -0
  76. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/plan-design.md +0 -0
  77. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/plan-hld.md +0 -0
  78. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/plan-lld.md +0 -0
  79. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/pre-review.md +0 -0
  80. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/quinn.md +0 -0
  81. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/release.md +0 -0
  82. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/rex.md +0 -0
  83. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/riley.md +0 -0
  84. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/specify-brd.md +0 -0
  85. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/specify-doc.md +0 -0
  86. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/specify-srd.md +0 -0
  87. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/specify-uc.md +0 -0
  88. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/specify.md +0 -0
  89. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/start.md +0 -0
  90. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/submit-review.md +0 -0
  91. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/task.md +0 -0
  92. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/taskstoissues.md +0 -0
  93. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.claude/commands/validate.md +0 -0
  94. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.cursor/rules/sdd-framework.mdc +0 -0
  95. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/copilot-instructions.md +0 -0
  96. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/instructions/api.instructions.md +0 -0
  97. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/instructions/domain.instructions.md +0 -0
  98. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/instructions/java.instructions.md +0 -0
  99. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/instructions/tests.instructions.md +0 -0
  100. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/address-review.prompt.md +0 -0
  101. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/analyze.prompt.md +0 -0
  102. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/ava.prompt.md +0 -0
  103. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/bug-assess.prompt.md +0 -0
  104. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/bug-fix.prompt.md +0 -0
  105. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/change.prompt.md +0 -0
  106. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/check-review.prompt.md +0 -0
  107. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/checklist.prompt.md +0 -0
  108. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/clarify.prompt.md +0 -0
  109. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/create-context.prompt.md +0 -0
  110. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/implement.prompt.md +0 -0
  111. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/jira-push.prompt.md +0 -0
  112. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/kai.prompt.md +0 -0
  113. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/leo.prompt.md +0 -0
  114. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/maya.prompt.md +0 -0
  115. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/morgan.prompt.md +0 -0
  116. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/orchestrate.prompt.md +0 -0
  117. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/plan-adr.prompt.md +0 -0
  118. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/plan-arch.prompt.md +0 -0
  119. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/plan-design.prompt.md +0 -0
  120. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/plan-hld.prompt.md +0 -0
  121. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/plan-lld.prompt.md +0 -0
  122. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/pre-review.prompt.md +0 -0
  123. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/quinn.prompt.md +0 -0
  124. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/release.prompt.md +0 -0
  125. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/rex.prompt.md +0 -0
  126. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/riley.prompt.md +0 -0
  127. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/specify.prompt.md +0 -0
  128. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/submit-review.prompt.md +0 -0
  129. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/task.prompt.md +0 -0
  130. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/prompts/taskstoissues.prompt.md +0 -0
  131. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.github/workflows/quality-gate.yml +0 -0
  132. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.gitignore +0 -0
  133. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.gitlab-ci.yml +0 -0
  134. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/contexts/CONTEXT-GUIDE.md +0 -0
  135. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/integrations.yml.example +0 -0
  136. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/memory/change-rules.md +0 -0
  137. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/memory/constitution.md +0 -0
  138. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/memory/roles.yml +0 -0
  139. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/memory/summary-rules.md +0 -0
  140. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/memory/token-pricing.yml.example +0 -0
  141. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/adr-template.md +0 -0
  142. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/analyze-template.md +0 -0
  143. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/api-spec-template.md +0 -0
  144. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/arch-template.md +0 -0
  145. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/brd-template.md +0 -0
  146. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/changeset-template.md +0 -0
  147. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/checklist-template.md +0 -0
  148. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/clarify-template.md +0 -0
  149. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/constitution-amendment-template.md +0 -0
  150. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/context-template.md +0 -0
  151. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/data-model-template.md +0 -0
  152. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/design-template.md +0 -0
  153. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/docker-config-template.md +0 -0
  154. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/feature-story-template.md +0 -0
  155. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/hld-template.md +0 -0
  156. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/investigation-template.md +0 -0
  157. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/jira-export-template.md +0 -0
  158. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/k8s-manifest-template.md +0 -0
  159. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/lld-template.md +0 -0
  160. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/openapi-template.md +0 -0
  161. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/plan-template.md +0 -0
  162. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/qa-testcases-template.md +0 -0
  163. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/release-template.md +0 -0
  164. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/resilience-template.md +0 -0
  165. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/runbook-template.md +0 -0
  166. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/security-design-template.md +0 -0
  167. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/srd-template.md +0 -0
  168. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/tasks-template.md +0 -0
  169. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/token-usage-template.md +0 -0
  170. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/use-cases-template.md +0 -0
  171. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.specify/templates/validate-template.md +0 -0
  172. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.vscode/extensions.json +0 -0
  173. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/.windsurfrules +0 -0
  174. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/CHANGE-GUIDE.md +0 -0
  175. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/CLAUDE.local.md +0 -0
  176. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/FLOW-ROLES-GATES.md +0 -0
  177. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/HOW-TO-USE.md +0 -0
  178. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/IMPROVEMENT-BACKLOG.md +0 -0
  179. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/PROMPT-GUIDE.md +0 -0
  180. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/QUICKSTART.md +0 -0
  181. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/README.md +0 -0
  182. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/SDLC-COMPLETE-GUIDE.md +0 -0
  183. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/WHY-SDD.md +0 -0
  184. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/azure-pipelines.yml +0 -0
  185. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/bitbucket-pipelines.yml +0 -0
  186. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/docs/SUMMARY-GUIDE.md +0 -0
  187. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/setup.ps1 +0 -0
  188. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-backend-service/setup.sh +0 -0
  189. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/address-review.md +0 -0
  190. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/analyze.md +0 -0
  191. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/ava.md +0 -0
  192. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/bug-assess.md +0 -0
  193. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/bug-fix.md +0 -0
  194. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/change.md +0 -0
  195. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/check-review.md +0 -0
  196. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/checklist.md +0 -0
  197. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/clarify.md +0 -0
  198. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/create-context.md +0 -0
  199. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/implement.md +0 -0
  200. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/jira-push.md +0 -0
  201. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/kai.md +0 -0
  202. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/leo.md +0 -0
  203. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/maya.md +0 -0
  204. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/morgan.md +0 -0
  205. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/orchestrate.md +0 -0
  206. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-adr.md +0 -0
  207. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-arch.md +0 -0
  208. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-design.md +0 -0
  209. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-hld.md +0 -0
  210. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-lld.md +0 -0
  211. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/pre-review.md +0 -0
  212. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/quinn.md +0 -0
  213. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/release.md +0 -0
  214. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/rex.md +0 -0
  215. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/riley.md +0 -0
  216. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-brd.md +0 -0
  217. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-doc.md +0 -0
  218. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-srd.md +0 -0
  219. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-uc.md +0 -0
  220. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/specify.md +0 -0
  221. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/start.md +0 -0
  222. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/submit-review.md +0 -0
  223. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/task.md +0 -0
  224. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/taskstoissues.md +0 -0
  225. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.claude/commands/validate.md +0 -0
  226. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.cursor/rules/sdd-framework.mdc +0 -0
  227. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/copilot-instructions.md +0 -0
  228. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/instructions/components.instructions.md +0 -0
  229. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/instructions/services.instructions.md +0 -0
  230. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/instructions/tests.instructions.md +0 -0
  231. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/address-review.prompt.md +0 -0
  232. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/analyze.prompt.md +0 -0
  233. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/ava.prompt.md +0 -0
  234. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/bug-assess.prompt.md +0 -0
  235. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/bug-fix.prompt.md +0 -0
  236. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/change.prompt.md +0 -0
  237. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/check-review.prompt.md +0 -0
  238. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/checklist.prompt.md +0 -0
  239. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/clarify.prompt.md +0 -0
  240. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/create-context.prompt.md +0 -0
  241. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/implement.prompt.md +0 -0
  242. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/jira-push.prompt.md +0 -0
  243. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/kai.prompt.md +0 -0
  244. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/leo.prompt.md +0 -0
  245. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/maya.prompt.md +0 -0
  246. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/morgan.prompt.md +0 -0
  247. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/orchestrate.prompt.md +0 -0
  248. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-adr.prompt.md +0 -0
  249. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-arch.prompt.md +0 -0
  250. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-design.prompt.md +0 -0
  251. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-hld.prompt.md +0 -0
  252. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-lld.prompt.md +0 -0
  253. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/pre-review.prompt.md +0 -0
  254. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/quinn.prompt.md +0 -0
  255. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/release.prompt.md +0 -0
  256. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/rex.prompt.md +0 -0
  257. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/riley.prompt.md +0 -0
  258. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/specify.prompt.md +0 -0
  259. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/submit-review.prompt.md +0 -0
  260. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/task.prompt.md +0 -0
  261. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/prompts/taskstoissues.prompt.md +0 -0
  262. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.github/workflows/quality-gate.yml +0 -0
  263. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.gitignore +0 -0
  264. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.gitlab-ci.yml +0 -0
  265. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/contexts/CONTEXT-GUIDE.md +0 -0
  266. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/integrations.yml.example +0 -0
  267. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/memory/change-rules.md +0 -0
  268. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/memory/constitution.md +0 -0
  269. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/memory/roles.yml +0 -0
  270. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/memory/summary-rules.md +0 -0
  271. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/memory/token-pricing.yml.example +0 -0
  272. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/adr-template.md +0 -0
  273. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/analyze-template.md +0 -0
  274. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/api-spec-template.md +0 -0
  275. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/arch-template.md +0 -0
  276. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/brd-template.md +0 -0
  277. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/changeset-template.md +0 -0
  278. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/checklist-template.md +0 -0
  279. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/clarify-template.md +0 -0
  280. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/component-library-template.md +0 -0
  281. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/component-spec-template.md +0 -0
  282. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/constitution-amendment-template.md +0 -0
  283. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/context-template.md +0 -0
  284. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/data-model-template.md +0 -0
  285. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/design-template.md +0 -0
  286. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/docker-config-template.md +0 -0
  287. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/feature-story-template.md +0 -0
  288. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/hld-template.md +0 -0
  289. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/investigation-template.md +0 -0
  290. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/jira-export-template.md +0 -0
  291. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/lld-template.md +0 -0
  292. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/plan-template.md +0 -0
  293. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/qa-testcases-template.md +0 -0
  294. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/release-template.md +0 -0
  295. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/resilience-template.md +0 -0
  296. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/runbook-template.md +0 -0
  297. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/security-design-template.md +0 -0
  298. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/srd-template.md +0 -0
  299. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/tasks-template.md +0 -0
  300. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/token-usage-template.md +0 -0
  301. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/use-cases-template.md +0 -0
  302. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/ux-flow-template.md +0 -0
  303. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.specify/templates/validate-template.md +0 -0
  304. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.vscode/extensions.json +0 -0
  305. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/.windsurfrules +0 -0
  306. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/CHANGE-GUIDE.md +0 -0
  307. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/CLAUDE.local.md +0 -0
  308. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/FLOW-ROLES-GATES.md +0 -0
  309. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/HOW-TO-USE.md +0 -0
  310. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/IMPROVEMENT-BACKLOG.md +0 -0
  311. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/PROMPT-GUIDE.md +0 -0
  312. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/QUICKSTART.md +0 -0
  313. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/README.md +0 -0
  314. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/SDLC-COMPLETE-GUIDE.md +0 -0
  315. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/WHY-SDD.md +0 -0
  316. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/azure-pipelines.yml +0 -0
  317. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/bitbucket-pipelines.yml +0 -0
  318. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/docs/SUMMARY-GUIDE.md +0 -0
  319. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/setup.ps1 +0 -0
  320. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-frontend-spa/setup.sh +0 -0
  321. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/address-review.md +0 -0
  322. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/analyze.md +0 -0
  323. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/ava.md +0 -0
  324. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/bug-assess.md +0 -0
  325. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/bug-fix.md +0 -0
  326. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/change.md +0 -0
  327. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/check-review.md +0 -0
  328. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/checklist.md +0 -0
  329. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/clarify.md +0 -0
  330. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/create-context.md +0 -0
  331. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/implement.md +0 -0
  332. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/jira-push.md +0 -0
  333. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/kai.md +0 -0
  334. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/leo.md +0 -0
  335. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/maya.md +0 -0
  336. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/morgan.md +0 -0
  337. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/orchestrate.md +0 -0
  338. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/plan-adr.md +0 -0
  339. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/plan-arch.md +0 -0
  340. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/plan-design.md +0 -0
  341. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/plan-hld.md +0 -0
  342. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/plan-lld.md +0 -0
  343. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/pre-review.md +0 -0
  344. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/quinn.md +0 -0
  345. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/release.md +0 -0
  346. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/rex.md +0 -0
  347. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/riley.md +0 -0
  348. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/specify-brd.md +0 -0
  349. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/specify-doc.md +0 -0
  350. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/specify-srd.md +0 -0
  351. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/specify-uc.md +0 -0
  352. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/specify.md +0 -0
  353. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/start.md +0 -0
  354. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/submit-review.md +0 -0
  355. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/task.md +0 -0
  356. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/taskstoissues.md +0 -0
  357. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.claude/commands/validate.md +0 -0
  358. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.cursor/rules/sdd-framework.mdc +0 -0
  359. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/copilot-instructions.md +0 -0
  360. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/instructions/backend-tests.instructions.md +0 -0
  361. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/instructions/components.instructions.md +0 -0
  362. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/instructions/domain.instructions.md +0 -0
  363. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/instructions/frontend-services.instructions.md +0 -0
  364. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/instructions/java.instructions.md +0 -0
  365. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/address-review.prompt.md +0 -0
  366. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/analyze.prompt.md +0 -0
  367. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/ava.prompt.md +0 -0
  368. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/bug-assess.prompt.md +0 -0
  369. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/bug-fix.prompt.md +0 -0
  370. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/change.prompt.md +0 -0
  371. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/check-review.prompt.md +0 -0
  372. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/checklist.prompt.md +0 -0
  373. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/clarify.prompt.md +0 -0
  374. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/create-context.prompt.md +0 -0
  375. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/implement.prompt.md +0 -0
  376. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/jira-push.prompt.md +0 -0
  377. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/kai.prompt.md +0 -0
  378. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/leo.prompt.md +0 -0
  379. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/maya.prompt.md +0 -0
  380. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/morgan.prompt.md +0 -0
  381. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/orchestrate.prompt.md +0 -0
  382. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/plan-adr.prompt.md +0 -0
  383. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/plan-arch.prompt.md +0 -0
  384. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/plan-design.prompt.md +0 -0
  385. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/plan-hld.prompt.md +0 -0
  386. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/plan-lld.prompt.md +0 -0
  387. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/pre-review.prompt.md +0 -0
  388. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/quinn.prompt.md +0 -0
  389. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/release.prompt.md +0 -0
  390. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/rex.prompt.md +0 -0
  391. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/riley.prompt.md +0 -0
  392. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/specify.prompt.md +0 -0
  393. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/submit-review.prompt.md +0 -0
  394. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/task.prompt.md +0 -0
  395. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/prompts/taskstoissues.prompt.md +0 -0
  396. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.github/workflows/quality-gate.yml +0 -0
  397. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.gitignore +0 -0
  398. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.gitlab-ci.yml +0 -0
  399. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/contexts/CONTEXT-GUIDE.md +0 -0
  400. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/integrations.yml.example +0 -0
  401. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/memory/change-rules.md +0 -0
  402. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/memory/constitution.md +0 -0
  403. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/memory/roles.yml +0 -0
  404. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/memory/summary-rules.md +0 -0
  405. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/memory/token-pricing.yml.example +0 -0
  406. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/adr-template.md +0 -0
  407. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/analyze-template.md +0 -0
  408. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/api-spec-template.md +0 -0
  409. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/arch-template.md +0 -0
  410. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/brd-template.md +0 -0
  411. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/changeset-template.md +0 -0
  412. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/checklist-template.md +0 -0
  413. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/clarify-template.md +0 -0
  414. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/component-library-template.md +0 -0
  415. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/component-spec-template.md +0 -0
  416. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/constitution-amendment-template.md +0 -0
  417. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/context-template.md +0 -0
  418. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/data-model-template.md +0 -0
  419. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/design-template.md +0 -0
  420. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/docker-config-template.md +0 -0
  421. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/feature-story-template.md +0 -0
  422. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/hld-template.md +0 -0
  423. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/investigation-template.md +0 -0
  424. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/jira-export-template.md +0 -0
  425. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/lld-template.md +0 -0
  426. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/openapi-template.md +0 -0
  427. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/plan-template.md +0 -0
  428. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/qa-testcases-template.md +0 -0
  429. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/release-template.md +0 -0
  430. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/resilience-template.md +0 -0
  431. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/runbook-template.md +0 -0
  432. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/screen-spec-template.md +0 -0
  433. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/security-design-template.md +0 -0
  434. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/srd-template.md +0 -0
  435. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/tasks-template.md +0 -0
  436. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/token-usage-template.md +0 -0
  437. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/use-cases-template.md +0 -0
  438. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/ux-flow-template.md +0 -0
  439. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.specify/templates/validate-template.md +0 -0
  440. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.vscode/extensions.json +0 -0
  441. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/.windsurfrules +0 -0
  442. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/CHANGE-GUIDE.md +0 -0
  443. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/CLAUDE.local.md +0 -0
  444. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/FLOW-ROLES-GATES.md +0 -0
  445. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/HOW-TO-USE.md +0 -0
  446. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/PROMPT-GUIDE.md +0 -0
  447. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/QUICKSTART.md +0 -0
  448. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/README.md +0 -0
  449. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/SDLC-COMPLETE-GUIDE.md +0 -0
  450. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/WHY-SDD.md +0 -0
  451. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/azure-pipelines.yml +0 -0
  452. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/bitbucket-pipelines.yml +0 -0
  453. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/docs/SUMMARY-GUIDE.md +0 -0
  454. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/setup.ps1 +0 -0
  455. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-fullstack/setup.sh +0 -0
  456. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.claude/commands/create-context.md +0 -0
  457. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.claude/commands/implement.md +0 -0
  458. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.claude/commands/specify.md +0 -0
  459. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.claude/commands/start.md +0 -0
  460. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.claude/commands/task.md +0 -0
  461. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.cursor/rules/sdd-framework.mdc +0 -0
  462. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.github/copilot-instructions.md +0 -0
  463. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.github/prompts/create-context.prompt.md +0 -0
  464. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.github/prompts/implement.prompt.md +0 -0
  465. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.github/prompts/specify.prompt.md +0 -0
  466. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.github/prompts/task.prompt.md +0 -0
  467. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.specify/contexts/CONTEXT-GUIDE.md +0 -0
  468. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.specify/manifest.yml +0 -0
  469. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.specify/memory/constitution.md +0 -0
  470. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.specify/templates/context-template.md +0 -0
  471. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.specify/templates/tasks-template.md +0 -0
  472. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/.windsurfrules +0 -0
  473. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/CLAUDE.md +0 -0
  474. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/QUICKSTART.md +0 -0
  475. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/README.md +0 -0
  476. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/WHY-SDD.md +0 -0
  477. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/setup.ps1 +0 -0
  478. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-micro/setup.sh +0 -0
  479. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/address-review.md +0 -0
  480. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/analyze.md +0 -0
  481. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/ava.md +0 -0
  482. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/bug-assess.md +0 -0
  483. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/bug-fix.md +0 -0
  484. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/change.md +0 -0
  485. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/check-review.md +0 -0
  486. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/checklist.md +0 -0
  487. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/clarify.md +0 -0
  488. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/create-context.md +0 -0
  489. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/implement.md +0 -0
  490. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/jira-push.md +0 -0
  491. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/kai.md +0 -0
  492. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/leo.md +0 -0
  493. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/maya.md +0 -0
  494. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/morgan.md +0 -0
  495. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/orchestrate.md +0 -0
  496. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/plan-adr.md +0 -0
  497. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/plan-arch.md +0 -0
  498. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/plan-design.md +0 -0
  499. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/plan-hld.md +0 -0
  500. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/plan-lld.md +0 -0
  501. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/pre-review.md +0 -0
  502. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/quinn.md +0 -0
  503. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/release.md +0 -0
  504. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/rex.md +0 -0
  505. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/riley.md +0 -0
  506. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/specify-brd.md +0 -0
  507. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/specify-doc.md +0 -0
  508. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/specify-srd.md +0 -0
  509. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/specify-uc.md +0 -0
  510. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/specify.md +0 -0
  511. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/start.md +0 -0
  512. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/submit-review.md +0 -0
  513. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/task.md +0 -0
  514. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/taskstoissues.md +0 -0
  515. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.claude/commands/validate.md +0 -0
  516. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.cursor/rules/sdd-framework.mdc +0 -0
  517. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/copilot-instructions.md +0 -0
  518. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/instructions/screens.instructions.md +0 -0
  519. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/instructions/services.instructions.md +0 -0
  520. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/instructions/tests.instructions.md +0 -0
  521. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/address-review.prompt.md +0 -0
  522. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/analyze.prompt.md +0 -0
  523. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/ava.prompt.md +0 -0
  524. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/bug-assess.prompt.md +0 -0
  525. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/bug-fix.prompt.md +0 -0
  526. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/change.prompt.md +0 -0
  527. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/check-review.prompt.md +0 -0
  528. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/checklist.prompt.md +0 -0
  529. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/clarify.prompt.md +0 -0
  530. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/create-context.prompt.md +0 -0
  531. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/implement.prompt.md +0 -0
  532. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/jira-push.prompt.md +0 -0
  533. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/kai.prompt.md +0 -0
  534. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/leo.prompt.md +0 -0
  535. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/maya.prompt.md +0 -0
  536. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/morgan.prompt.md +0 -0
  537. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/orchestrate.prompt.md +0 -0
  538. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/plan-adr.prompt.md +0 -0
  539. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/plan-arch.prompt.md +0 -0
  540. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/plan-design.prompt.md +0 -0
  541. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/plan-hld.prompt.md +0 -0
  542. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/plan-lld.prompt.md +0 -0
  543. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/pre-review.prompt.md +0 -0
  544. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/quinn.prompt.md +0 -0
  545. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/release.prompt.md +0 -0
  546. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/rex.prompt.md +0 -0
  547. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/riley.prompt.md +0 -0
  548. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/specify.prompt.md +0 -0
  549. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/submit-review.prompt.md +0 -0
  550. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/task.prompt.md +0 -0
  551. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/prompts/taskstoissues.prompt.md +0 -0
  552. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.github/workflows/quality-gate.yml +0 -0
  553. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.gitignore +0 -0
  554. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.gitlab-ci.yml +0 -0
  555. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/contexts/CONTEXT-GUIDE.md +0 -0
  556. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/integrations.yml.example +0 -0
  557. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/memory/change-rules.md +0 -0
  558. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/memory/constitution.md +0 -0
  559. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/memory/roles.yml +0 -0
  560. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/memory/summary-rules.md +0 -0
  561. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/memory/token-pricing.yml.example +0 -0
  562. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/adr-template.md +0 -0
  563. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/analyze-template.md +0 -0
  564. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/api-spec-template.md +0 -0
  565. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/arch-template.md +0 -0
  566. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/brd-template.md +0 -0
  567. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/changeset-template.md +0 -0
  568. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/checklist-template.md +0 -0
  569. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/clarify-template.md +0 -0
  570. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/constitution-amendment-template.md +0 -0
  571. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/context-template.md +0 -0
  572. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/data-model-template.md +0 -0
  573. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/design-template.md +0 -0
  574. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/docker-config-template.md +0 -0
  575. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/feature-story-template.md +0 -0
  576. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/hld-template.md +0 -0
  577. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/investigation-template.md +0 -0
  578. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/jira-export-template.md +0 -0
  579. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/lld-template.md +0 -0
  580. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/plan-template.md +0 -0
  581. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/qa-testcases-template.md +0 -0
  582. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/release-template.md +0 -0
  583. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/resilience-template.md +0 -0
  584. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/runbook-template.md +0 -0
  585. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/screen-spec-template.md +0 -0
  586. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/security-design-template.md +0 -0
  587. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/srd-template.md +0 -0
  588. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/tasks-template.md +0 -0
  589. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/token-usage-template.md +0 -0
  590. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/use-cases-template.md +0 -0
  591. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/ux-flow-template.md +0 -0
  592. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.specify/templates/validate-template.md +0 -0
  593. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.vscode/extensions.json +0 -0
  594. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/.windsurfrules +0 -0
  595. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/CHANGE-GUIDE.md +0 -0
  596. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/CLAUDE.local.md +0 -0
  597. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/FLOW-ROLES-GATES.md +0 -0
  598. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/HOW-TO-USE.md +0 -0
  599. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/IMPROVEMENT-BACKLOG.md +0 -0
  600. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/PROMPT-GUIDE.md +0 -0
  601. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/QUICKSTART.md +0 -0
  602. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/README.md +0 -0
  603. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/SDLC-COMPLETE-GUIDE.md +0 -0
  604. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/WHY-SDD.md +0 -0
  605. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/azure-pipelines.yml +0 -0
  606. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/bitbucket-pipelines.yml +0 -0
  607. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/docs/SUMMARY-GUIDE.md +0 -0
  608. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/setup.ps1 +0 -0
  609. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-mobile/setup.sh +0 -0
  610. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/address-review.md +0 -0
  611. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/analyze.md +0 -0
  612. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/ava.md +0 -0
  613. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/bug-assess.md +0 -0
  614. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/bug-fix.md +0 -0
  615. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/change.md +0 -0
  616. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/check-review.md +0 -0
  617. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/checklist.md +0 -0
  618. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/clarify.md +0 -0
  619. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/create-context.md +0 -0
  620. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/implement.md +0 -0
  621. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/jira-push.md +0 -0
  622. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/kai.md +0 -0
  623. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/leo.md +0 -0
  624. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/maya.md +0 -0
  625. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/morgan.md +0 -0
  626. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/orchestrate.md +0 -0
  627. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/plan-adr.md +0 -0
  628. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/plan-arch.md +0 -0
  629. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/plan-design.md +0 -0
  630. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/plan-hld.md +0 -0
  631. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/plan-lld.md +0 -0
  632. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/pre-review.md +0 -0
  633. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/quinn.md +0 -0
  634. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/release.md +0 -0
  635. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/rex.md +0 -0
  636. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/riley.md +0 -0
  637. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/specify-brd.md +0 -0
  638. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/specify-doc.md +0 -0
  639. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/specify-srd.md +0 -0
  640. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/specify-uc.md +0 -0
  641. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/specify.md +0 -0
  642. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/start.md +0 -0
  643. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/submit-review.md +0 -0
  644. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/task.md +0 -0
  645. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/taskstoissues.md +0 -0
  646. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.claude/commands/validate.md +0 -0
  647. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.cursor/rules/sdd-framework.mdc +0 -0
  648. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/copilot-instructions.md +0 -0
  649. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/instructions/domain.instructions.md +0 -0
  650. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/instructions/entrypoints.instructions.md +0 -0
  651. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/instructions/tests.instructions.md +0 -0
  652. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/address-review.prompt.md +0 -0
  653. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/analyze.prompt.md +0 -0
  654. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/ava.prompt.md +0 -0
  655. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/bug-assess.prompt.md +0 -0
  656. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/bug-fix.prompt.md +0 -0
  657. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/change.prompt.md +0 -0
  658. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/check-review.prompt.md +0 -0
  659. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/checklist.prompt.md +0 -0
  660. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/clarify.prompt.md +0 -0
  661. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/create-context.prompt.md +0 -0
  662. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/implement.prompt.md +0 -0
  663. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/jira-push.prompt.md +0 -0
  664. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/kai.prompt.md +0 -0
  665. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/leo.prompt.md +0 -0
  666. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/maya.prompt.md +0 -0
  667. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/morgan.prompt.md +0 -0
  668. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/orchestrate.prompt.md +0 -0
  669. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/plan-adr.prompt.md +0 -0
  670. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/plan-arch.prompt.md +0 -0
  671. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/plan-design.prompt.md +0 -0
  672. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/plan-hld.prompt.md +0 -0
  673. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/plan-lld.prompt.md +0 -0
  674. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/pre-review.prompt.md +0 -0
  675. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/quinn.prompt.md +0 -0
  676. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/release.prompt.md +0 -0
  677. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/rex.prompt.md +0 -0
  678. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/riley.prompt.md +0 -0
  679. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/specify.prompt.md +0 -0
  680. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/submit-review.prompt.md +0 -0
  681. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/task.prompt.md +0 -0
  682. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/prompts/taskstoissues.prompt.md +0 -0
  683. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.github/workflows/quality-gate.yml +0 -0
  684. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.gitignore +0 -0
  685. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.gitlab-ci.yml +0 -0
  686. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/contexts/CONTEXT-GUIDE.md +0 -0
  687. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/integrations.yml.example +0 -0
  688. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/memory/change-rules.md +0 -0
  689. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/memory/constitution.md +0 -0
  690. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/memory/roles.yml +0 -0
  691. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/memory/summary-rules.md +0 -0
  692. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/memory/token-pricing.yml.example +0 -0
  693. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/adr-template.md +0 -0
  694. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/analyze-template.md +0 -0
  695. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/api-spec-template.md +0 -0
  696. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/arch-template.md +0 -0
  697. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/brd-template.md +0 -0
  698. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/changeset-template.md +0 -0
  699. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/checklist-template.md +0 -0
  700. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/clarify-template.md +0 -0
  701. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/constitution-amendment-template.md +0 -0
  702. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/context-template.md +0 -0
  703. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/data-model-template.md +0 -0
  704. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/design-template.md +0 -0
  705. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/docker-config-template.md +0 -0
  706. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/feature-story-template.md +0 -0
  707. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/hld-template.md +0 -0
  708. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/investigation-template.md +0 -0
  709. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/jira-export-template.md +0 -0
  710. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/k8s-manifest-template.md +0 -0
  711. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/lld-template.md +0 -0
  712. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/openapi-template.md +0 -0
  713. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/plan-template.md +0 -0
  714. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/qa-testcases-template.md +0 -0
  715. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/release-template.md +0 -0
  716. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/resilience-template.md +0 -0
  717. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/runbook-template.md +0 -0
  718. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/security-design-template.md +0 -0
  719. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/srd-template.md +0 -0
  720. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/tasks-template.md +0 -0
  721. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/token-usage-template.md +0 -0
  722. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/use-cases-template.md +0 -0
  723. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.specify/templates/validate-template.md +0 -0
  724. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.vscode/extensions.json +0 -0
  725. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/.windsurfrules +0 -0
  726. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/CHANGE-GUIDE.md +0 -0
  727. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/CLAUDE.local.md +0 -0
  728. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/FLOW-ROLES-GATES.md +0 -0
  729. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/HOW-TO-USE.md +0 -0
  730. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/IMPROVEMENT-BACKLOG.md +0 -0
  731. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/PROMPT-GUIDE.md +0 -0
  732. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/QUICKSTART.md +0 -0
  733. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/README.md +0 -0
  734. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/SDLC-COMPLETE-GUIDE.md +0 -0
  735. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/WHY-SDD.md +0 -0
  736. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/azure-pipelines.yml +0 -0
  737. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/bitbucket-pipelines.yml +0 -0
  738. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/docs/SUMMARY-GUIDE.md +0 -0
  739. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/setup.ps1 +0 -0
  740. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/packs/sdd-universal/setup.sh +0 -0
  741. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/__init__.py +0 -0
  742. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/atlassian_auth.py +0 -0
  743. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/cf_to_md.py +0 -0
  744. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/confluence_client.py +0 -0
  745. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/dashboard_comments.py +0 -0
  746. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/detect.py +0 -0
  747. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/git_host.py +0 -0
  748. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/integrations.py +0 -0
  749. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/jira_client.py +0 -0
  750. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/manifest.py +0 -0
  751. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/md_to_cf.py +0 -0
  752. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/mermaid_render.py +0 -0
  753. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/scaffold.py +0 -0
  754. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/sdd_parser.py +0 -0
  755. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/status.py +0 -0
  756. {sddflow-2.7.52 → sddflow-2.7.54}/sdd/utils/validate.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sddflow
3
- Version: 2.7.52
3
+ Version: 2.7.54
4
4
  Summary: SDD Framework CLI — initialize and upgrade Spec-Driven Development packs
5
5
  Project-URL: Homepage, https://github.com/sunil1983us/universalguide
6
6
  Project-URL: Repository, https://github.com/sunil1983us/universalguide
@@ -413,6 +413,44 @@ sdd review check --doc brd # poll again after reviewer re-reviews
413
413
 
414
414
  ---
415
415
 
416
+ ### `sdd review push-questions` / `sdd review pull-answers`
417
+
418
+ A document can be blocked before it's ever submitted for review — e.g.
419
+ `validate.md`'s §3a scans `brd.md`/`use-cases.md`/`srd.md` for unresolved
420
+ `[NEEDS CLARIFICATION-NNN: {question}]` markers (numbered locally per
421
+ document, the same discipline `[ASSUMPTION-NNN]` already uses) and refuses
422
+ to proceed while any remain. These two commands let a reviewer answer
423
+ those markers via Jira/Confluence instead of only through direct chat/doc
424
+ edits:
425
+
426
+ ```bash
427
+ sdd review push-questions --doc validate # push open questions to Jira + Confluence
428
+ # reviewer replies as a comment, one line per item:
429
+ # brd:NC-002: 90 days, per data retention policy DR-014
430
+ sdd review pull-answers --doc validate # pull replies, patch the answered markers
431
+ ```
432
+
433
+ `push-questions` reads the blocked document's `| ID | Locations | Question |`
434
+ table (see the doc's own gate for the exact format) and creates/updates
435
+ **one** Jira ticket — reusing `document_reviews.validate`'s
436
+ `reviewer_jira_user`/`reviewer_role`, no separate config needed. It uses
437
+ the *same* idempotency label `sdd review submit` looks for, so once every
438
+ question is answered and the document unblocks, `sdd review submit --doc
439
+ validate` finds and evolves this same ticket in place (a comment marks the
440
+ transition) instead of creating a second one.
441
+
442
+ `pull-answers` fetches every comment on that ticket, matches lines like
443
+ `brd:NC-002: <answer>` against the open items, and replaces each answered
444
+ `[NEEDS CLARIFICATION-NNN]` marker directly in its source document —
445
+ bumping that document's `Version:` header and appending a `## Version
446
+ History` row. A question asked in more than one document (the table's
447
+ `Locations` column lists more than one ID, e.g. `brd:NC-003, srd:NC-001`)
448
+ gets the same answer applied everywhere at once. Safe to call
449
+ unconditionally (e.g. at the top of every `/validate` run) — it exits
450
+ quietly whenever there's nothing to do.
451
+
452
+ ---
453
+
416
454
  ### `sdd review comments`
417
455
 
418
456
  Read or acknowledge dashboard-left comments directly, without going through
@@ -378,6 +378,44 @@ sdd review check --doc brd # poll again after reviewer re-reviews
378
378
 
379
379
  ---
380
380
 
381
+ ### `sdd review push-questions` / `sdd review pull-answers`
382
+
383
+ A document can be blocked before it's ever submitted for review — e.g.
384
+ `validate.md`'s §3a scans `brd.md`/`use-cases.md`/`srd.md` for unresolved
385
+ `[NEEDS CLARIFICATION-NNN: {question}]` markers (numbered locally per
386
+ document, the same discipline `[ASSUMPTION-NNN]` already uses) and refuses
387
+ to proceed while any remain. These two commands let a reviewer answer
388
+ those markers via Jira/Confluence instead of only through direct chat/doc
389
+ edits:
390
+
391
+ ```bash
392
+ sdd review push-questions --doc validate # push open questions to Jira + Confluence
393
+ # reviewer replies as a comment, one line per item:
394
+ # brd:NC-002: 90 days, per data retention policy DR-014
395
+ sdd review pull-answers --doc validate # pull replies, patch the answered markers
396
+ ```
397
+
398
+ `push-questions` reads the blocked document's `| ID | Locations | Question |`
399
+ table (see the doc's own gate for the exact format) and creates/updates
400
+ **one** Jira ticket — reusing `document_reviews.validate`'s
401
+ `reviewer_jira_user`/`reviewer_role`, no separate config needed. It uses
402
+ the *same* idempotency label `sdd review submit` looks for, so once every
403
+ question is answered and the document unblocks, `sdd review submit --doc
404
+ validate` finds and evolves this same ticket in place (a comment marks the
405
+ transition) instead of creating a second one.
406
+
407
+ `pull-answers` fetches every comment on that ticket, matches lines like
408
+ `brd:NC-002: <answer>` against the open items, and replaces each answered
409
+ `[NEEDS CLARIFICATION-NNN]` marker directly in its source document —
410
+ bumping that document's `Version:` header and appending a `## Version
411
+ History` row. A question asked in more than one document (the table's
412
+ `Locations` column lists more than one ID, e.g. `brd:NC-003, srd:NC-001`)
413
+ gets the same answer applied everywhere at once. Safe to call
414
+ unconditionally (e.g. at the top of every `/validate` run) — it exits
415
+ quietly whenever there's nothing to do.
416
+
417
+ ---
418
+
381
419
  ### `sdd review comments`
382
420
 
383
421
  Read or acknowledge dashboard-left comments directly, without going through
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sddflow"
7
- version = "2.7.52"
7
+ version = "2.7.54"
8
8
  description = "SDD Framework CLI — initialize and upgrade Spec-Driven Development packs"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -0,0 +1 @@
1
+ __version__ = "2.7.54"
@@ -161,21 +161,43 @@ def _push_doc_page(doc: str, md_path: Path, feature_name: str) -> str | None:
161
161
 
162
162
  # ── Text extraction ────────────────────────────────────────────────────────────
163
163
 
164
+ _ADF_BLOCK_TYPES = {"paragraph", "heading", "codeBlock", "blockquote", "listItem"}
165
+
166
+
164
167
  def _extract_text(body) -> str:
165
- """Extract plain text from Jira ADF (Cloud) or string (Server/DC) comment body."""
168
+ """Extract plain text from Jira ADF (Cloud) or string (Server/DC) comment
169
+ body, preserving line boundaries between block-level nodes as newlines.
170
+
171
+ Jira's rich-text comment editor stores each line a user types as a
172
+ SEPARATE paragraph node in the ADF tree, not one paragraph with embedded
173
+ newlines -- joining every text run in the whole document with a single
174
+ space (the previous behavior) collapsed a multi-line reply like
175
+ pull-answers' "{doc}:NC-{NNN}: {answer}" format (one item per line) into
176
+ one run-on line, breaking _ANSWER_LINE_RE's per-line matching entirely."""
166
177
  if isinstance(body, str):
167
178
  return body
168
179
  if isinstance(body, dict):
169
- texts: list[str] = []
180
+ lines: list[str] = []
170
181
 
171
- def walk(node: dict) -> None:
182
+ def walk_inline(node: dict, buf: list[str]) -> None:
172
183
  if node.get("type") == "text":
173
- texts.append(node.get("text", ""))
184
+ buf.append(node.get("text", ""))
185
+ elif node.get("type") == "hardBreak":
186
+ buf.append("\n")
174
187
  for child in node.get("content", []):
175
- walk(child)
188
+ walk_inline(child, buf)
176
189
 
177
- walk(body)
178
- return " ".join(texts)
190
+ def walk_block(node: dict) -> None:
191
+ if node.get("type") in _ADF_BLOCK_TYPES:
192
+ buf: list[str] = []
193
+ walk_inline(node, buf)
194
+ lines.append("".join(buf))
195
+ else:
196
+ for child in node.get("content", []):
197
+ walk_block(child)
198
+
199
+ walk_block(body)
200
+ return "\n".join(lines)
179
201
  return ""
180
202
 
181
203
 
@@ -298,6 +320,100 @@ def _record_review_link(doc: str, issue_key: str) -> None:
298
320
  _save_review_links(links)
299
321
 
300
322
 
323
+ # ── Open-questions push/pull (blocked-doc Jira Q&A) ────────────────────────────
324
+ # When a document like validate.md is blocked on [NEEDS CLARIFICATION-NNN]
325
+ # markers in its source docs, `sdd review push-questions` lets a reviewer
326
+ # answer them via Jira/Confluence comments instead of waiting for direct
327
+ # chat/doc edits -- `sdd review pull-answers` reads those comments back and
328
+ # patches the answered markers directly into brd.md/use-cases.md/srd.md.
329
+
330
+ _OPEN_QUESTION_ROW_RE = re.compile(
331
+ r'^\|\s*([a-zA-Z0-9_.-]+:NC-\d+)\s*\|\s*([^|]+?)\s*\|\s*([^|]+?)\s*\|\s*$',
332
+ re.MULTILINE,
333
+ )
334
+ _ANSWER_LINE_RE = re.compile(
335
+ r'^\s*([a-zA-Z0-9_.-]+):NC-(\d+)\s*:\s*(.+?)\s*$',
336
+ re.MULTILINE | re.IGNORECASE,
337
+ )
338
+
339
+
340
+ def _parse_open_questions(doc_text: str) -> list[dict]:
341
+ """Parse a blocked document's `| ID | Locations | Question |` table
342
+ (see validate.prompt.md's §3a-BLOCKING format) into structured items.
343
+ Tolerant of table-formatting drift across LLM runs -- anchors on the
344
+ `{doc}:NC-{NNN}` ID pattern itself, not exact column headers.
345
+
346
+ Each item's "locations" is every doc-qualified ID (e.g. "brd:NC-003")
347
+ that a single answer should be applied to -- almost always just its
348
+ own ID, but more than one when the same question was asked in more
349
+ than one document."""
350
+ items: list[dict] = []
351
+ for m in _OPEN_QUESTION_ROW_RE.finditer(doc_text):
352
+ primary_id, locations_raw, question = m.group(1).strip(), m.group(2).strip(), m.group(3).strip()
353
+ locations = [loc.strip() for loc in locations_raw.split(",") if loc.strip()]
354
+ if primary_id not in locations:
355
+ locations.append(primary_id)
356
+ items.append({"id": primary_id, "locations": locations, "question": question})
357
+ return items
358
+
359
+
360
+ def _parse_answers(comments: list[dict]) -> dict[str, str]:
361
+ """Parse every Jira comment for lines like 'brd:NC-002: <answer>'.
362
+ A later comment's answer for the same ID overrides an earlier one
363
+ (a reviewer correcting themselves)."""
364
+ answers: dict[str, str] = {}
365
+ for c in comments:
366
+ text = _extract_text(c.get("body", ""))
367
+ for m in _ANSWER_LINE_RE.finditer(text):
368
+ doc_key, nnn, answer = m.group(1).lower(), m.group(2), m.group(3)
369
+ answers[f"{doc_key}:NC-{nnn}"] = answer
370
+ return answers
371
+
372
+
373
+ def _bump_version_and_log(text: str, note: str) -> str:
374
+ """Bump the `Version: X.Y` header to X.(Y+1) and append a row to
375
+ `## Version History`, matching the same discipline every review-driven
376
+ edit in this codebase uses (see specify-brd.prompt.md's Revision
377
+ Logging). Best-effort: if either the Version header or a recognizable
378
+ `## Version History` table isn't found, the text is returned unchanged
379
+ rather than raising -- the marker replacement itself is what matters;
380
+ this bookkeeping is a bonus that shouldn't block on template drift."""
381
+ version_match = re.search(r'Version:\s*(\d+)\.(\d+)', text)
382
+ if not version_match:
383
+ return text
384
+ major, minor = version_match.group(1), int(version_match.group(2)) + 1
385
+ new_version = f"{major}.{minor}"
386
+ text = text[:version_match.start()] + f"Version: {new_version}" + text[version_match.end():]
387
+
388
+ heading = re.search(r'^## Version History\s*$', text, flags=re.IGNORECASE | re.MULTILINE)
389
+ if not heading:
390
+ return text
391
+ after = text[heading.end():]
392
+ sep_match = re.search(r'\n\|[-| ]+\|\s*\n', after)
393
+ if not sep_match:
394
+ return text
395
+ insert_at = heading.end() + sep_match.end()
396
+ row = f"| {new_version} | {date.today()} | Jira/Confluence | {note} | — |\n"
397
+ return text[:insert_at] + row + text[insert_at:]
398
+
399
+
400
+ def _patch_marker(md_path: Path, nnn: str, answer: str) -> bool:
401
+ """Replace `[NEEDS CLARIFICATION-{nnn}: ...]` with the answer text in
402
+ md_path, bumping its version + Version History. Returns True if a
403
+ matching marker was found and patched, False otherwise (already
404
+ resolved, or nnn doesn't exist in this file)."""
405
+ if not md_path.exists():
406
+ return False
407
+ text = md_path.read_text()
408
+ pattern = re.compile(r'\[NEEDS CLARIFICATION-' + re.escape(nnn) + r':\s*[^\]]*\]')
409
+ if not pattern.search(text):
410
+ return False
411
+ new_text = pattern.sub(lambda _m: answer, text, count=1)
412
+ new_text = _bump_version_and_log(new_text, f"NC-{nnn} resolved via Jira/Confluence comment")
413
+ md_path.write_text(new_text)
414
+ return True
415
+
416
+
301
417
  def _ensure_epic(jira_client: JiraClient, jira_cfg, feature_name: str) -> str | None:
302
418
  """Create the Feature/Epic container if it doesn't already exist yet,
303
419
  using the same content and idempotency label `sdd jira push` uses — so a
@@ -486,9 +602,27 @@ def review_submit(doc, profile, feature):
486
602
  _apply_team_field(fields, cfg.jira, "review")
487
603
 
488
604
  if existing:
605
+ # If this ticket started life as an `sdd review push-questions`
606
+ # "open questions" ticket (same idempotency label -- see that
607
+ # command), the fields update above already retitles/redescribes
608
+ # it into a normal review request. Post a comment marking the
609
+ # transition explicitly so the reviewer's ticket history shows
610
+ # why the ticket suddenly changed shape, rather than reusing it
611
+ # silently -- the "same ticket evolves in place" behavior a user
612
+ # asked for, without ever creating a second ticket for one doc.
613
+ was_open_questions = "sdd-open-questions" in (existing.get("fields", {}).get("labels") or [])
489
614
  jira_client.update_issue(existing["key"], fields)
490
615
  story_key = existing["key"]
491
616
  console.print(f" [dim]·[/dim] Jira review story updated: [cyan]{story_key}[/cyan]")
617
+ if was_open_questions:
618
+ try:
619
+ jira_client.add_comment(
620
+ story_key,
621
+ f"All open questions resolved — {doc.upper()} has been updated "
622
+ f"and is now ready for full review.",
623
+ )
624
+ except Exception:
625
+ pass # best-effort notification only; the ticket update above already succeeded
492
626
  else:
493
627
  result = jira_client.create_issue(fields)
494
628
  story_key = result["key"]
@@ -511,6 +645,241 @@ def review_submit(doc, profile, feature):
511
645
  console.print()
512
646
 
513
647
 
648
+ # ── sdd review push-questions ───────────────────────────────────────────────────
649
+
650
+ @review_command.command("push-questions")
651
+ @click.option("--doc", required=True,
652
+ help="Document key whose blocking gate produced open questions, e.g. validate")
653
+ @click.option("--profile", default=None)
654
+ @click.option("--feature", default=None)
655
+ def review_push_questions(doc, profile, feature):
656
+ """Push a blocked document's open [NEEDS CLARIFICATION-NNN] questions to
657
+ Jira + Confluence, so a reviewer can answer them without waiting for
658
+ the doc's own gate to clear first. Uses the same idempotency label
659
+ `sdd review submit` looks for -- once every question is answered and
660
+ the doc unblocks, `sdd review submit --doc {doc}` finds and evolves
661
+ this same ticket in place instead of creating a second one."""
662
+ console.print()
663
+ console.print("[bold]━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[/bold]")
664
+ console.print(f" [bold cyan]Push Open Questions[/bold cyan] — {doc.upper()}")
665
+ console.print("[bold]━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[/bold]")
666
+ console.print()
667
+
668
+ try:
669
+ cfg = load_integrations()
670
+ except FileNotFoundError as e:
671
+ console.print(f" [red]✗ {e}[/red]")
672
+ raise SystemExit(1)
673
+
674
+ if doc not in cfg.document_reviews:
675
+ console.print(
676
+ f" [red]✗ '{doc}' not in document_reviews in integrations.yml[/red]\n"
677
+ f" Available: {', '.join(cfg.document_reviews)}"
678
+ )
679
+ raise SystemExit(1)
680
+ if not cfg.jira:
681
+ console.print(" [red]✗ jira: section required in integrations.yml[/red]")
682
+ raise SystemExit(1)
683
+
684
+ manifest = read_manifest() or {}
685
+ proj = manifest.get("project") or {}
686
+ project_name = proj.get("name", "Project")
687
+ feature_name = feature or proj.get("feature", "")
688
+
689
+ try:
690
+ md_path = resolve_doc_path(doc, feature_name)
691
+ except ValueError as e:
692
+ console.print(f" [red]✗ {e}[/red]")
693
+ raise SystemExit(1)
694
+ if not md_path.exists():
695
+ console.print(f" [red]✗ {md_path} not found[/red]")
696
+ raise SystemExit(1)
697
+
698
+ items = _parse_open_questions(md_path.read_text())
699
+ if not items:
700
+ console.print(
701
+ f" [dim]No open [NEEDS CLARIFICATION-NNN] items found in {md_path.name} — nothing to push.[/dim]"
702
+ )
703
+ raise SystemExit(0)
704
+
705
+ try:
706
+ prof = load_profile(profile or cfg.profile)
707
+ session = build_session(prof)
708
+ except Exception as e:
709
+ console.print(f" [red]✗ Auth error: {e}[/red]")
710
+ raise SystemExit(1)
711
+
712
+ jira_client = JiraClient(session, prof.base_url)
713
+ doc_cfg = cfg.document_reviews[doc]
714
+
715
+ # ── Also push the (blocked) doc to Confluence, so reviewers can comment there too ──
716
+ page_title = None
717
+ if cfg.confluence:
718
+ try:
719
+ page_title = _push_doc_page(doc, md_path, feature_name)
720
+ except Exception as e:
721
+ console.print(f" [yellow]! Confluence push failed: {e}[/yellow]")
722
+
723
+ # ── Ensure a Feature/Epic exists (same as review_submit) ──────────────────
724
+ epic_key = _ensure_epic(jira_client, cfg.jira, feature_name)
725
+
726
+ # ── Create / update the SAME ticket review_submit will later find ─────────
727
+ # Same idempotency_label as review_submit uses for --doc {doc} -- this
728
+ # is what makes the ticket "evolve in place" later, with zero extra
729
+ # bookkeeping: review_submit's own find-by-label lookup will discover
730
+ # this ticket and update its fields, rather than creating a second one.
731
+ idempotency_label = f"sdd-doc:{feature_name}:{doc}"
732
+ review_project_key = cfg.jira.key_for("review")
733
+ existing = jira_client.find_by_label(review_project_key, idempotency_label)
734
+
735
+ table_lines = "\n".join(f"{it['id']}: {it['question']}" for it in items)
736
+ desc_text = (
737
+ f"{doc.upper()} is blocked on {len(items)} open question(s) before it can "
738
+ f"go to full review.\n\n"
739
+ f"Answer each item as a comment on THIS ticket, one line per item, "
740
+ f"starting with its ID:\n\n{table_lines}\n\n"
741
+ f"Example: \"{items[0]['id']}: <your answer>\"\n\n"
742
+ f"Once every item is answered, re-run /validate — it pulls the answers "
743
+ f"automatically, updates the spec, and re-checks."
744
+ )
745
+ fields: dict = {
746
+ "project": {"key": review_project_key},
747
+ "issuetype": {"name": cfg.jira.issue_hierarchy.get("story", "Story")},
748
+ "summary": f"Open Questions: {project_name} — {doc.upper()}",
749
+ "labels": cfg.jira.labels + ["sdd-review", "sdd-open-questions", idempotency_label],
750
+ "description": {
751
+ "type": "doc", "version": 1,
752
+ "content": [{"type": "paragraph", "content": [
753
+ {"type": "text", "text": desc_text}
754
+ ]}],
755
+ },
756
+ }
757
+ if doc_cfg.reviewer_jira_user:
758
+ fields["assignee"] = {"accountId": doc_cfg.reviewer_jira_user}
759
+ from sdd.commands.jira import _apply_team_field
760
+ _apply_team_field(fields, cfg.jira, "review")
761
+
762
+ if existing:
763
+ jira_client.update_issue(existing["key"], fields)
764
+ issue_key = existing["key"]
765
+ console.print(f" [dim]·[/dim] Jira ticket updated: [cyan]{issue_key}[/cyan]")
766
+ else:
767
+ result = jira_client.create_issue(fields)
768
+ issue_key = result["key"]
769
+ console.print(f" [green]✓[/green] Jira ticket created: [cyan]{issue_key}[/cyan]")
770
+
771
+ _record_review_link(doc, issue_key)
772
+ if epic_key:
773
+ _link_review_story_to_epic(jira_client, issue_key, epic_key, cfg.jira)
774
+
775
+ issue_url = f"{prof.base_url}/browse/{issue_key}"
776
+ console.print(f" {issue_url}")
777
+ if page_title:
778
+ console.print(f" Also on Confluence: [cyan]{page_title}[/cyan]")
779
+ console.print(
780
+ f" Assigned to: [cyan]{doc_cfg.reviewer_role}[/cyan]"
781
+ f" [dim]({doc_cfg.reviewer_jira_user})[/dim]"
782
+ )
783
+ console.print()
784
+ console.print(f" [bold]{len(items)} open question(s)[/bold] pushed. Reviewer replies as a comment")
785
+ console.print(f" starting with the item's ID, e.g. \"{items[0]['id']}: <answer>\".")
786
+ console.print(f" Run [cyan]sdd review pull-answers --doc {doc}[/cyan] (or just re-run /validate) once answered.")
787
+ console.print()
788
+
789
+
790
+ # ── sdd review pull-answers ──────────────────────────────────────────────────────
791
+
792
+ @review_command.command("pull-answers")
793
+ @click.option("--doc", required=True)
794
+ @click.option("--profile", default=None)
795
+ @click.option("--feature", default=None)
796
+ def review_pull_answers(doc, profile, feature):
797
+ """Pull Jira comments answering a blocked document's open
798
+ [NEEDS CLARIFICATION-NNN] questions and patch them directly into the
799
+ source docs (e.g. brd.md/use-cases.md/srd.md for --doc validate).
800
+ Safe to call unconditionally before re-scanning -- exits 0 quietly
801
+ whenever there's nothing to do (not configured, no ticket yet, no new
802
+ answers)."""
803
+ console.print()
804
+
805
+ try:
806
+ cfg = load_integrations()
807
+ except FileNotFoundError:
808
+ raise SystemExit(0)
809
+
810
+ if doc not in cfg.document_reviews or not cfg.jira:
811
+ raise SystemExit(0)
812
+
813
+ manifest = read_manifest() or {}
814
+ proj = manifest.get("project") or {}
815
+ feature_name = feature or proj.get("feature", "")
816
+
817
+ try:
818
+ md_path = resolve_doc_path(doc, feature_name)
819
+ except ValueError:
820
+ raise SystemExit(0)
821
+ if not md_path.exists():
822
+ raise SystemExit(0)
823
+
824
+ items = _parse_open_questions(md_path.read_text())
825
+ if not items:
826
+ raise SystemExit(0)
827
+
828
+ links = _load_review_links()
829
+ issue_key = (links.get(doc) or {}).get("key")
830
+ if not issue_key:
831
+ console.print(
832
+ f" [dim]· No Jira ticket recorded for {doc} yet — "
833
+ f"run `sdd review push-questions --doc {doc}` first.[/dim]"
834
+ )
835
+ raise SystemExit(0)
836
+
837
+ try:
838
+ prof = load_profile(profile or cfg.profile)
839
+ session = build_session(prof)
840
+ except Exception:
841
+ raise SystemExit(0)
842
+
843
+ jira_client = JiraClient(session, prof.base_url)
844
+ try:
845
+ comments = jira_client.get_comments(issue_key)
846
+ except Exception as e:
847
+ console.print(f" [yellow]! Could not fetch comments from {issue_key}: {e}[/yellow]")
848
+ raise SystemExit(0)
849
+
850
+ answers = _parse_answers(comments)
851
+ if not answers:
852
+ raise SystemExit(0)
853
+
854
+ patched_docs: dict[str, int] = {}
855
+ for item in items:
856
+ # The reviewer only ever cites the row's primary ID (item["id"]) --
857
+ # that single answer must propagate to every location listed for
858
+ # this question, not just the one the reviewer happened to name
859
+ # (a multi-location row exists specifically so one answer can
860
+ # resolve a question duplicated across several docs at once).
861
+ if item["id"] not in answers:
862
+ continue
863
+ answer_text = answers[item["id"]]
864
+ for loc_id in item["locations"]:
865
+ doc_key, nnn = loc_id.split(":NC-")
866
+ try:
867
+ loc_path = resolve_doc_path(doc_key, feature_name)
868
+ except ValueError:
869
+ continue
870
+ if _patch_marker(loc_path, nnn, answer_text):
871
+ patched_docs[doc_key] = patched_docs.get(doc_key, 0) + 1
872
+ console.print(f" [green]✓[/green] {loc_id} resolved in {loc_path.name}")
873
+
874
+ if patched_docs:
875
+ total = sum(patched_docs.values())
876
+ console.print(
877
+ f" [bold]{total} item(s) resolved[/bold] across "
878
+ f"{len(patched_docs)} document(s): {', '.join(patched_docs)}"
879
+ )
880
+ console.print()
881
+
882
+
514
883
  # ── sdd review check ───────────────────────────────────────────────────────────
515
884
 
516
885
  @review_command.command("check")
@@ -2064,6 +2064,97 @@ MIGRATIONS = [
2064
2064
  ],
2065
2065
  "migrate": lambda m: {**m, "sdd_version": "2.7.52"},
2066
2066
  },
2067
+ {
2068
+ "from": "2.7.52",
2069
+ "to": "2.7.53",
2070
+ "description": "Feature: blocked documents (e.g. validate.md, on unresolved [NEEDS CLARIFICATION-NNN] markers) can now collect reviewer answers via Jira/Confluence instead of only direct chat/doc edits -- no manifest schema changes",
2071
+ "notes": [
2072
+ "User-requested: a document like validate.md can be blocked "
2073
+ "before it's ever submitted for formal review (brd.md/"
2074
+ "use-cases.md/srd.md still have unresolved [NEEDS "
2075
+ "CLARIFICATION] markers) -- previously there was no way to "
2076
+ "route those specific open questions through Jira/Confluence "
2077
+ "the way an already-submitted document's reviewer comments "
2078
+ "already could",
2079
+ "[NEEDS CLARIFICATION] markers are now numbered locally per "
2080
+ "document -- [NEEDS CLARIFICATION-NNN: {question}] -- "
2081
+ "matching the [ASSUMPTION-NNN] convention already in use. "
2082
+ "This gives every marker a stable, doc-qualified ID "
2083
+ "({doc}:NC-{NNN}, e.g. brd:NC-002) that a reviewer's answer "
2084
+ "can cite exactly, instead of matching by paraphrased "
2085
+ "question text",
2086
+ "New sdd review push-questions --doc {doc}: parses a blocked "
2087
+ "document's | ID | Locations | Question | table (see "
2088
+ "validate.prompt.md's §3a-BLOCKING) and creates/updates one "
2089
+ "Jira ticket + Confluence page. Uses the SAME idempotency "
2090
+ "label sdd review submit looks for, so once every question "
2091
+ "is answered and the document unblocks, sdd review submit "
2092
+ "finds and evolves this same ticket in place (posting a "
2093
+ "transition comment) instead of creating a second one",
2094
+ "New sdd review pull-answers --doc {doc}: fetches comments "
2095
+ "from that ticket, matches lines like 'brd:NC-002: <answer>' "
2096
+ "against the open items, and patches each answered "
2097
+ "[NEEDS CLARIFICATION-NNN] marker directly into its source "
2098
+ "document -- bumping that document's Version header and "
2099
+ "appending a Version History row. A question asked in more "
2100
+ "than one document (a Locations column listing more than one "
2101
+ "ID) gets the same answer applied to every one of them from "
2102
+ "a single reviewer reply",
2103
+ "validate.prompt.md (all 5 packs, not a shared file) updated: "
2104
+ "§3a-BLOCKING now calls pull-answers before re-scanning and "
2105
+ "push-questions after detecting a block, and its table cites "
2106
+ "doc-qualified marker IDs instead of an ad-hoc Q1..Q7 scheme",
2107
+ "specify-brd/specify-uc/specify-srd/specify-doc.prompt.md "
2108
+ "(shared) and the submit-for-review-step block updated for "
2109
+ "the new marker numbering and ID-based comment matching",
2110
+ "23 new tests in test_review_helpers.py: table/answer "
2111
+ "parsing, marker patching (version bump + Version History, "
2112
+ "multi-location propagation, legacy/missing-marker "
2113
+ "tolerance), and the push-questions -> submit same-ticket "
2114
+ "transition end-to-end",
2115
+ "This migration only bumps sdd_version -- no manifest.yml "
2116
+ "field changes for any pack",
2117
+ ],
2118
+ "migrate": lambda m: {**m, "sdd_version": "2.7.53"},
2119
+ },
2120
+ {
2121
+ "from": "2.7.53",
2122
+ "to": "2.7.54",
2123
+ "description": "Fix: multi-line sdd review pull-answers replies (one 'brd:NC-NNN: answer' per line, e.g. a real 7-item Jira comment) were silently collapsed into a single garbled line, so only the first item ever got parsed -- no manifest schema changes",
2124
+ "notes": [
2125
+ "User-reported: a reviewer answered all 7 open questions on a "
2126
+ "push-questions ticket, one per line as instructed, but "
2127
+ "pull-answers reported 'no new replies' every time",
2128
+ "Root cause: _extract_text() joined every text run in the "
2129
+ "whole ADF comment body with a single space, with no regard "
2130
+ "for paragraph boundaries. Jira's rich-text comment editor "
2131
+ "stores each line a user types as a SEPARATE paragraph node "
2132
+ "in the ADF tree, not one paragraph with embedded newlines -- "
2133
+ "so a real multi-line reply collapsed into one run-on line, "
2134
+ "and _ANSWER_LINE_RE's per-line ^...$ matching (anchored on "
2135
+ "actual \\n characters) then only ever found the first item, "
2136
+ "with the rest of the comment swallowed into its answer",
2137
+ "_extract_text() rewritten to walk ADF block-level nodes "
2138
+ "(paragraph, heading, codeBlock, blockquote, listItem) and "
2139
+ "join THOSE with newlines, while text runs within a single "
2140
+ "block are concatenated directly (also fixes a smaller "
2141
+ "pre-existing issue: formatting-split text runs within one "
2142
+ "sentence previously got a spurious extra space inserted "
2143
+ "between them). hardBreak nodes (shift+enter within one "
2144
+ "paragraph) also now produce a newline",
2145
+ "Also used by review_check's printed reviewer-comment display "
2146
+ "and the dashboard's Jira-comment surfacing -- both benefit "
2147
+ "from the same fix, previously showing run-on multi-line "
2148
+ "Jira comments as one wrapped line",
2149
+ "5 new tests: separate-paragraphs-become-separate-lines, "
2150
+ "plain-string-body unchanged, hardBreak handling, and an "
2151
+ "end-to-end reproduction of the exact reported bug (7 "
2152
+ "distinct paragraph answers, all 7 must parse)",
2153
+ "This migration only bumps sdd_version -- no manifest.yml "
2154
+ "field changes for any pack",
2155
+ ],
2156
+ "migrate": lambda m: {**m, "sdd_version": "2.7.54"},
2157
+ },
2067
2158
  ]
2068
2159
 
2069
2160
 
@@ -34,7 +34,11 @@ Generate `brd.md` for the current feature:
34
34
  - Every non-functional requirement: **NFR-NNN** — must include a measurable target (e.g. "< 200ms p99", "99.9% uptime")
35
35
  - Marker discipline:
36
36
  - `[ASSUMPTION-NNN: {what}]` — safe default applied; needs sign-off
37
- - `[NEEDS CLARIFICATION: {question}]` — no safe default; human decision required before /validate
37
+ - `[NEEDS CLARIFICATION-NNN: {question}]` — no safe default; human decision
38
+ required before /validate. NNN is numbered locally within this document
39
+ (NC-001, NC-002, ... — continue the count on a later re-run/amendment,
40
+ never reuse a resolved ID) so a reviewer's answer (in Jira, Confluence,
41
+ or chat) can cite the exact marker unambiguously, e.g. "NC-002: 90 days".
38
42
  - Never leave a gap silently — always use one of the two markers
39
43
  - Save to: `.specify/features/{manifest.project.feature}/brd.md`
40
44
  - Write `.specify/features/{manifest.project.feature}/brd.summary.md` (max SUMMARY_MAX_LINES lines)
@@ -93,8 +97,11 @@ sdd confluence draft --doc {doc_key}
93
97
 
94
98
  When the user says **"done"**: run `sdd confluence pull --doc {doc_key}`
95
99
  automatically. If the pulled file contains a `## Confluence Comments`
96
- section, resolve each `[NEEDS CLARIFICATION]`/`[ASSUMPTION-NNN]` it
97
- answers, update the document, remove the comments section, and re-save
100
+ section, match each comment against the marker ID it cites (e.g. a comment
101
+ starting "NC-002: ..." answers `[NEEDS CLARIFICATION-002: ...]`; older
102
+ comments with no cited ID fall back to matching by nearest question text),
103
+ resolve the corresponding `[NEEDS CLARIFICATION-NNN]`/`[ASSUMPTION-NNN]`
104
+ marker, update the document, remove the comments section, and re-save
98
105
  the document and its `.summary.md`. Then present it and ask for
99
106
  **'approved'**.
100
107