sddflow 2.7.55__tar.gz → 2.7.59__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.
- {sddflow-2.7.55 → sddflow-2.7.59}/PKG-INFO +7 -2
- {sddflow-2.7.55 → sddflow-2.7.59}/README.md +6 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/pyproject.toml +1 -1
- sddflow-2.7.59/sdd/__init__.py +1 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/commands/dashboard.py +1 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/commands/review.py +122 -39
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/commands/upgrade.py +138 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/analyze.prompt.md +49 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/clarify.prompt.md +47 -0
- {sddflow-2.7.55/sdd/packs/sdd-universal → sddflow-2.7.59/sdd/packs/sdd-backend-service}/.github/prompts/validate.prompt.md +13 -0
- {sddflow-2.7.55/sdd/packs/sdd-frontend-spa → sddflow-2.7.59/sdd/packs/sdd-backend-service}/.specify/integrations.yml.example +43 -5
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/manifest.yml +1 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/clarify-template.md +2 -2
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/CLAUDE.md +10 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/HOW-TO-USE.md +41 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/PROMPT-GUIDE.md +13 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/analyze.prompt.md +49 -1
- {sddflow-2.7.55/sdd/packs/sdd-fullstack → sddflow-2.7.59/sdd/packs/sdd-frontend-spa}/.github/prompts/clarify.prompt.md +47 -0
- {sddflow-2.7.55/sdd/packs/sdd-mobile → sddflow-2.7.59/sdd/packs/sdd-frontend-spa}/.github/prompts/validate.prompt.md +13 -0
- {sddflow-2.7.55/sdd/packs/sdd-fullstack → sddflow-2.7.59/sdd/packs/sdd-frontend-spa}/.specify/integrations.yml.example +43 -5
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/manifest.yml +1 -1
- {sddflow-2.7.55/sdd/packs/sdd-fullstack → sddflow-2.7.59/sdd/packs/sdd-frontend-spa}/.specify/templates/clarify-template.md +2 -2
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/CLAUDE.md +10 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/HOW-TO-USE.md +41 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/PROMPT-GUIDE.md +13 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/analyze.prompt.md +49 -1
- {sddflow-2.7.55/sdd/packs/sdd-frontend-spa → sddflow-2.7.59/sdd/packs/sdd-fullstack}/.github/prompts/clarify.prompt.md +47 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/validate.prompt.md +13 -0
- {sddflow-2.7.55/sdd/packs/sdd-backend-service → sddflow-2.7.59/sdd/packs/sdd-fullstack}/.specify/integrations.yml.example +43 -5
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/manifest.yml +1 -1
- {sddflow-2.7.55/sdd/packs/sdd-mobile → sddflow-2.7.59/sdd/packs/sdd-fullstack}/.specify/templates/clarify-template.md +2 -2
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/CLAUDE.md +10 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/HOW-TO-USE.md +41 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/PROMPT-GUIDE.md +12 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/analyze.prompt.md +49 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/clarify.prompt.md +47 -0
- {sddflow-2.7.55/sdd/packs/sdd-frontend-spa → sddflow-2.7.59/sdd/packs/sdd-mobile}/.github/prompts/validate.prompt.md +13 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/integrations.yml.example +43 -5
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/manifest.yml +1 -1
- {sddflow-2.7.55/sdd/packs/sdd-frontend-spa → sddflow-2.7.59/sdd/packs/sdd-mobile}/.specify/templates/clarify-template.md +2 -2
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/CLAUDE.md +10 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/HOW-TO-USE.md +41 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/PROMPT-GUIDE.md +12 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/analyze.prompt.md +49 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/clarify.prompt.md +47 -0
- {sddflow-2.7.55/sdd/packs/sdd-backend-service → sddflow-2.7.59/sdd/packs/sdd-universal}/.github/prompts/validate.prompt.md +13 -0
- sddflow-2.7.59/sdd/packs/sdd-universal/.specify/integrations.yml.example +464 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/manifest.yml +1 -1
- sddflow-2.7.59/sdd/packs/sdd-universal/.specify/templates/clarify-template.md +94 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/CLAUDE.md +10 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/HOW-TO-USE.md +41 -1
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/PROMPT-GUIDE.md +12 -1
- sddflow-2.7.55/sdd/__init__.py +0 -1
- sddflow-2.7.55/sdd/packs/sdd-universal/.specify/integrations.yml.example +0 -426
- sddflow-2.7.55/sdd/packs/sdd-universal/.specify/templates/clarify-template.md +0 -94
- {sddflow-2.7.55 → sddflow-2.7.59}/.gitignore +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/__main__.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/commands/__init__.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/commands/config.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/commands/confluence.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/commands/cr.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/commands/init.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/commands/jira.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/commands/pr.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/ava.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/change.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/implement.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/kai.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/leo.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/maya.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/release.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/rex.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/riley.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/specify.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/start.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/task.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.claude/commands/validate.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/instructions/api.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/instructions/domain.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/instructions/java.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/instructions/tests.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/specify-brd.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/specify-doc.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/specify-srd.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/specify-uc.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.gitignore +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.gitlab-ci.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/k8s-manifest-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/openapi-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.vscode/extensions.json +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.windsurfrules +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/CLAUDE.local.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/IMPROVEMENT-BACKLOG.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/QUICKSTART.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/README.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/WHY-SDD.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/azure-pipelines.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/setup.ps1 +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/setup.sh +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/ava.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/change.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/implement.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/kai.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/leo.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/maya.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/release.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/rex.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/riley.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/specify.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/start.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/task.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.claude/commands/validate.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/instructions/components.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/instructions/services.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/instructions/tests.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/specify-brd.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/specify-doc.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/specify-srd.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/specify-uc.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.gitignore +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.gitlab-ci.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/component-library-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/component-spec-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/ux-flow-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.vscode/extensions.json +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/.windsurfrules +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/CLAUDE.local.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/IMPROVEMENT-BACKLOG.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/QUICKSTART.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/README.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/WHY-SDD.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/azure-pipelines.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/setup.ps1 +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-frontend-spa/setup.sh +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/ava.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/change.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/implement.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/kai.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/leo.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/maya.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/release.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/rex.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/riley.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/specify.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/start.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/task.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.claude/commands/validate.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/instructions/backend-tests.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/instructions/components.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/instructions/domain.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/instructions/frontend-services.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/instructions/java.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/specify-brd.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/specify-doc.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/specify-srd.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/specify-uc.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.gitignore +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.gitlab-ci.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/component-library-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/component-spec-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/openapi-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/screen-spec-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/ux-flow-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.vscode/extensions.json +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/.windsurfrules +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/CLAUDE.local.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/QUICKSTART.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/README.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/WHY-SDD.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/azure-pipelines.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/setup.ps1 +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-fullstack/setup.sh +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.claude/commands/implement.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.claude/commands/specify.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.claude/commands/start.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.claude/commands/task.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.specify/manifest.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/.windsurfrules +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/CLAUDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/QUICKSTART.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/README.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/WHY-SDD.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/setup.ps1 +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-micro/setup.sh +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/ava.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/change.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/implement.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/kai.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/leo.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/maya.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/release.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/rex.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/riley.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/specify.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/start.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/task.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.claude/commands/validate.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/instructions/screens.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/instructions/services.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/instructions/tests.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/specify-brd.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/specify-doc.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/specify-srd.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/specify-uc.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.gitignore +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.gitlab-ci.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/screen-spec-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/ux-flow-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.vscode/extensions.json +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/.windsurfrules +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/CLAUDE.local.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/IMPROVEMENT-BACKLOG.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/QUICKSTART.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/README.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/WHY-SDD.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/azure-pipelines.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/setup.ps1 +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-mobile/setup.sh +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/ava.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/change.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/implement.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/kai.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/leo.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/maya.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/release.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/rex.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/riley.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/specify.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/start.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/task.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.claude/commands/validate.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/instructions/domain.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/instructions/entrypoints.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/instructions/tests.instructions.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/specify-brd.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/specify-doc.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/specify-srd.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/specify-uc.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.gitignore +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.gitlab-ci.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/k8s-manifest-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/openapi-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.vscode/extensions.json +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/.windsurfrules +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/CLAUDE.local.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/IMPROVEMENT-BACKLOG.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/QUICKSTART.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/README.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/WHY-SDD.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/azure-pipelines.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/setup.ps1 +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-universal/setup.sh +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/__init__.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/atlassian_auth.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/cf_to_md.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/confluence_client.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/dashboard_comments.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/detect.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/git_host.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/integrations.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/jira_client.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/manifest.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/md_to_cf.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/mermaid_render.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/scaffold.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/sdd_parser.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/status.py +0 -0
- {sddflow-2.7.55 → sddflow-2.7.59}/sdd/utils/validate.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sddflow
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.59
|
|
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
|
|
@@ -447,7 +447,12 @@ History` row. A question asked in more than one document (the table's
|
|
|
447
447
|
`Locations` column lists more than one ID, e.g. `brd:NC-003, srd:NC-001`)
|
|
448
448
|
gets the same answer applied everywhere at once. Safe to call
|
|
449
449
|
unconditionally (e.g. at the top of every `/validate` run) — it exits
|
|
450
|
-
quietly whenever there's nothing to do.
|
|
450
|
+
quietly whenever there's nothing to do. If a document predates
|
|
451
|
+
`[NEEDS CLARIFICATION-NNN]` numbering and still has the old unnumbered
|
|
452
|
+
`[NEEDS CLARIFICATION: ...]` form, `pull-answers` retroactively numbers it
|
|
453
|
+
first, in order of appearance, before patching. Each patched document's
|
|
454
|
+
own Confluence page (when `confluence:` is configured) is also re-pushed
|
|
455
|
+
immediately, so it never goes stale relative to the answered `.md`.
|
|
451
456
|
|
|
452
457
|
---
|
|
453
458
|
|
|
@@ -412,7 +412,12 @@ History` row. A question asked in more than one document (the table's
|
|
|
412
412
|
`Locations` column lists more than one ID, e.g. `brd:NC-003, srd:NC-001`)
|
|
413
413
|
gets the same answer applied everywhere at once. Safe to call
|
|
414
414
|
unconditionally (e.g. at the top of every `/validate` run) — it exits
|
|
415
|
-
quietly whenever there's nothing to do.
|
|
415
|
+
quietly whenever there's nothing to do. If a document predates
|
|
416
|
+
`[NEEDS CLARIFICATION-NNN]` numbering and still has the old unnumbered
|
|
417
|
+
`[NEEDS CLARIFICATION: ...]` form, `pull-answers` retroactively numbers it
|
|
418
|
+
first, in order of appearance, before patching. Each patched document's
|
|
419
|
+
own Confluence page (when `confluence:` is configured) is also re-pushed
|
|
420
|
+
immediately, so it never goes stale relative to the answered `.md`.
|
|
416
421
|
|
|
417
422
|
---
|
|
418
423
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.7.59"
|
|
@@ -682,7 +682,7 @@ def _fetch_review_links(feature: str) -> dict:
|
|
|
682
682
|
try:
|
|
683
683
|
issue = jira_client.find_by_label(cfg.jira.key_for("review"), f"sdd-doc:{feature}:{doc_key}")
|
|
684
684
|
if issue:
|
|
685
|
-
review_status, comments = _get_review_status(
|
|
685
|
+
review_status, comments, _ = _get_review_status(
|
|
686
686
|
doc_key, jira_client, cfg.jira.key_for("review"), cfg, feature,
|
|
687
687
|
)
|
|
688
688
|
entry["jira"] = {
|
|
@@ -115,13 +115,40 @@ def _mark_md_approved(md_path: Path) -> bool:
|
|
|
115
115
|
return True
|
|
116
116
|
|
|
117
117
|
|
|
118
|
-
def
|
|
119
|
-
"""
|
|
118
|
+
def _jira_status_banner(issue_key: str, issue_url: str, status: str, role: str) -> str:
|
|
119
|
+
"""Confluence storage-format panel summarizing the Jira review ticket's
|
|
120
|
+
link and current status, prepended to the page body on every push so a
|
|
121
|
+
reviewer can see review state without leaving Confluence."""
|
|
122
|
+
macro_type = {"APPROVED": "success", "NEEDS_REVISION": "warning"}.get(status, "info")
|
|
123
|
+
label = {
|
|
124
|
+
"APPROVED": "Approved",
|
|
125
|
+
"NEEDS_REVISION": "Needs Revision",
|
|
126
|
+
"PENDING": "Pending review",
|
|
127
|
+
}.get(status, status)
|
|
128
|
+
return (
|
|
129
|
+
f'<ac:structured-macro ac:name="{macro_type}">'
|
|
130
|
+
f'<ac:rich-text-body><p>'
|
|
131
|
+
f'<strong>Jira review:</strong> '
|
|
132
|
+
f'<a href="{issue_url}">{issue_key}</a> — <strong>{label}</strong>'
|
|
133
|
+
f' (assigned: {role})'
|
|
134
|
+
f'</p></ac:rich-text-body>'
|
|
135
|
+
f'</ac:structured-macro>'
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def _push_doc_page(doc: str, md_path: Path, feature_name: str) -> tuple[str, str] | None:
|
|
140
|
+
"""Upsert the document's Confluence page so it reflects the current .md.
|
|
120
141
|
|
|
121
|
-
Returns
|
|
122
|
-
configured. Raises on push errors — callers decide how fatal that
|
|
123
|
-
Page title resolution matches `sdd review submit`: document_reviews
|
|
124
|
-
first, then the confluence page_map, then a sensible default.
|
|
142
|
+
Returns (page_title, page_url) on success, or None when Confluence is
|
|
143
|
+
not configured. Raises on push errors — callers decide how fatal that
|
|
144
|
+
is. Page title resolution matches `sdd review submit`: document_reviews
|
|
145
|
+
entry first, then the confluence page_map, then a sensible default.
|
|
146
|
+
|
|
147
|
+
When a Jira review ticket already exists for this doc (jira: configured
|
|
148
|
+
and document_reviews has an entry for it), a status banner linking to
|
|
149
|
+
that ticket is prepended to the page body -- this is what lets a
|
|
150
|
+
reviewer see the Jira link + current status directly on Confluence
|
|
151
|
+
instead of having to check Jira separately."""
|
|
125
152
|
try:
|
|
126
153
|
cfg = load_integrations()
|
|
127
154
|
except FileNotFoundError:
|
|
@@ -147,16 +174,33 @@ def _push_doc_page(doc: str, md_path: Path, feature_name: str) -> str | None:
|
|
|
147
174
|
prof = load_profile(cfg.profile)
|
|
148
175
|
session = build_session(prof)
|
|
149
176
|
cf_client = ConfluenceClient(session, prof.base_url)
|
|
177
|
+
|
|
178
|
+
banner = ""
|
|
179
|
+
if cfg.jira and doc in cfg.document_reviews:
|
|
180
|
+
try:
|
|
181
|
+
jira_client = JiraClient(session, prof.base_url)
|
|
182
|
+
status, _, issue = _get_review_status(
|
|
183
|
+
doc, jira_client, cfg.jira.key_for("review"), cfg, feature_name,
|
|
184
|
+
)
|
|
185
|
+
if issue:
|
|
186
|
+
issue_url = f"{prof.base_url}/browse/{issue['key']}"
|
|
187
|
+
banner = _jira_status_banner(
|
|
188
|
+
issue["key"], issue_url, status, cfg.document_reviews[doc].reviewer_role,
|
|
189
|
+
)
|
|
190
|
+
except Exception:
|
|
191
|
+
pass # banner is a best-effort addition -- never blocks the page push itself
|
|
192
|
+
|
|
150
193
|
body_html, attachments, diagram_warnings = md_to_storage(md_path.read_text(), cfg.confluence.diagrams)
|
|
151
194
|
from sdd.commands.confluence import resolve_doc_parent_id, upload_diagram_attachments
|
|
152
195
|
parent_id = resolve_doc_parent_id(cf_client, cfg.confluence, project_name, feature_name, doc)
|
|
153
196
|
page, _created = cf_client.upsert_page(
|
|
154
|
-
cfg.confluence.space_key, title, body_html, parent_id,
|
|
197
|
+
cfg.confluence.space_key, title, banner + body_html, parent_id,
|
|
155
198
|
)
|
|
156
199
|
upload_diagram_attachments(cf_client, page["id"], attachments)
|
|
157
200
|
for w in diagram_warnings:
|
|
158
201
|
console.print(f" [yellow]! {w}[/yellow]")
|
|
159
|
-
|
|
202
|
+
page_url = f"{prof.base_url}/wiki{page.get('_links', {}).get('webui', '')}"
|
|
203
|
+
return title, page_url
|
|
160
204
|
|
|
161
205
|
|
|
162
206
|
# ── Text extraction ────────────────────────────────────────────────────────────
|
|
@@ -231,29 +275,32 @@ def _get_review_status(
|
|
|
231
275
|
project_key: str,
|
|
232
276
|
cfg: IntegrationsConfig,
|
|
233
277
|
feature_name: str,
|
|
234
|
-
) -> tuple[str, list[dict]]:
|
|
235
|
-
"""Return (status, comments).
|
|
278
|
+
) -> tuple[str, list[dict], dict | None]:
|
|
279
|
+
"""Return (status, comments, issue).
|
|
236
280
|
status: APPROVED | NEEDS_REVISION | PENDING | NOT_SUBMITTED
|
|
281
|
+
issue is the raw Jira issue dict (or None if never submitted) -- callers
|
|
282
|
+
that also need the issue key/link (e.g. the Confluence status banner)
|
|
283
|
+
reuse this instead of a second find_by_label lookup.
|
|
237
284
|
|
|
238
285
|
Label is feature-qualified — must match the label `review_submit` writes,
|
|
239
286
|
or a submitted review would never be found again.
|
|
240
287
|
"""
|
|
241
288
|
issue = client.find_by_label(project_key, f"sdd-doc:{feature_name}:{doc_key}")
|
|
242
289
|
if not issue:
|
|
243
|
-
return "NOT_SUBMITTED", []
|
|
290
|
+
return "NOT_SUBMITTED", [], None
|
|
244
291
|
|
|
245
292
|
jira_status = issue.get("fields", {}).get("status", {}).get("name", "")
|
|
246
293
|
comments = client.get_comments(issue["key"])
|
|
247
294
|
|
|
248
295
|
if jira_status in cfg.approved_statuses:
|
|
249
|
-
return "APPROVED", comments
|
|
296
|
+
return "APPROVED", comments, issue
|
|
250
297
|
|
|
251
298
|
for c in comments:
|
|
252
299
|
text = _extract_text(c.get("body", "")).lower()
|
|
253
300
|
if any(kw in text for kw in cfg.approved_keywords):
|
|
254
|
-
return "APPROVED", comments
|
|
301
|
+
return "APPROVED", comments, issue
|
|
255
302
|
|
|
256
|
-
return ("NEEDS_REVISION" if comments else "PENDING"), comments
|
|
303
|
+
return ("NEEDS_REVISION" if comments else "PENDING"), comments, issue
|
|
257
304
|
|
|
258
305
|
|
|
259
306
|
def _check_predecessor(
|
|
@@ -275,7 +322,7 @@ def _check_predecessor(
|
|
|
275
322
|
if not preds:
|
|
276
323
|
return True, None
|
|
277
324
|
pred_key = preds[0]
|
|
278
|
-
status, _ = _get_review_status(pred_key, client, cfg.jira.key_for("review"), cfg, feature_name)
|
|
325
|
+
status, _, _ = _get_review_status(pred_key, client, cfg.jira.key_for("review"), cfg, feature_name)
|
|
279
326
|
return (status == "APPROVED"), (None if status == "APPROVED" else pred_key)
|
|
280
327
|
|
|
281
328
|
|
|
@@ -527,7 +574,7 @@ def review_command():
|
|
|
527
574
|
|
|
528
575
|
@review_command.command("submit")
|
|
529
576
|
@click.option("--doc", required=True,
|
|
530
|
-
help="Document key: brd, use-cases, srd, design (unified) / arch, hld, adr (separate), lld, tasks, runbook, release")
|
|
577
|
+
help="Document key: brd, use-cases, srd, design (unified) / arch, hld, adr (separate), validate, analyze, clarify, lld, tasks, runbook, release")
|
|
531
578
|
@click.option("--profile", default=None)
|
|
532
579
|
@click.option("--feature", default=None)
|
|
533
580
|
def review_submit(doc, profile, feature):
|
|
@@ -688,6 +735,16 @@ def review_submit(doc, profile, feature):
|
|
|
688
735
|
|
|
689
736
|
_record_review_link(doc, story_key)
|
|
690
737
|
|
|
738
|
+
# ── Re-push Confluence with the now-existing Jira link/status banner ──────
|
|
739
|
+
# The first push above (before the ticket existed) couldn't include this --
|
|
740
|
+
# _push_doc_page's own find-by-label lookup will now find the ticket just
|
|
741
|
+
# created/updated and prepend a banner showing its link + live status, so
|
|
742
|
+
# a reviewer sees Jira state without leaving Confluence.
|
|
743
|
+
try:
|
|
744
|
+
_push_doc_page(doc, md_path, feature_name)
|
|
745
|
+
except Exception as e:
|
|
746
|
+
console.print(f" [yellow]! Could not stamp Jira status onto Confluence: {e}[/yellow]")
|
|
747
|
+
|
|
691
748
|
if epic_key:
|
|
692
749
|
_link_review_story_to_epic(jira_client, story_key, epic_key, cfg.jira)
|
|
693
750
|
|
|
@@ -774,7 +831,9 @@ def review_push_questions(doc, profile, feature):
|
|
|
774
831
|
page_title = None
|
|
775
832
|
if cfg.confluence:
|
|
776
833
|
try:
|
|
777
|
-
|
|
834
|
+
pushed = _push_doc_page(doc, md_path, feature_name)
|
|
835
|
+
if pushed:
|
|
836
|
+
page_title, _page_url = pushed
|
|
778
837
|
except Exception as e:
|
|
779
838
|
console.print(f" [yellow]! Confluence push failed: {e}[/yellow]")
|
|
780
839
|
|
|
@@ -932,6 +991,7 @@ def review_pull_answers(doc, profile, feature):
|
|
|
932
991
|
raise SystemExit(0)
|
|
933
992
|
|
|
934
993
|
patched_docs: dict[str, int] = {}
|
|
994
|
+
patched_paths: dict[str, Path] = {}
|
|
935
995
|
for item in items:
|
|
936
996
|
# The reviewer only ever cites the row's primary ID (item["id"]) --
|
|
937
997
|
# that single answer must propagate to every location listed for
|
|
@@ -950,6 +1010,7 @@ def review_pull_answers(doc, profile, feature):
|
|
|
950
1010
|
continue
|
|
951
1011
|
if _patch_marker(loc_path, nnn, answer_text):
|
|
952
1012
|
patched_docs[doc_key] = patched_docs.get(doc_key, 0) + 1
|
|
1013
|
+
patched_paths[doc_key] = loc_path
|
|
953
1014
|
console.print(f" [green]✓[/green] {loc_id} resolved in {loc_path.name}")
|
|
954
1015
|
|
|
955
1016
|
if patched_docs:
|
|
@@ -960,6 +1021,25 @@ def review_pull_answers(doc, profile, feature):
|
|
|
960
1021
|
)
|
|
961
1022
|
console.print()
|
|
962
1023
|
|
|
1024
|
+
# Re-push each patched doc's own Confluence page so it doesn't go
|
|
1025
|
+
# stale relative to the .md file we just edited. Until now,
|
|
1026
|
+
# pull-answers only ever wrote the local file -- BRD/SRD/UC's
|
|
1027
|
+
# Confluence pages (created back at their own /specify-brd ->
|
|
1028
|
+
# `sdd review submit` time) kept showing the pre-answer
|
|
1029
|
+
# [NEEDS CLARIFICATION] markers even after every question was
|
|
1030
|
+
# resolved here. Best-effort per doc: one page's failure doesn't
|
|
1031
|
+
# block the others or the patching that already succeeded.
|
|
1032
|
+
if cfg.confluence:
|
|
1033
|
+
for doc_key, loc_path in patched_paths.items():
|
|
1034
|
+
try:
|
|
1035
|
+
pushed = _push_doc_page(doc_key, loc_path, feature_name)
|
|
1036
|
+
if pushed:
|
|
1037
|
+
title, _page_url = pushed
|
|
1038
|
+
console.print(f" [green]✓[/green] Confluence page refreshed: [cyan]{title}[/cyan]")
|
|
1039
|
+
except Exception as e:
|
|
1040
|
+
console.print(f" [yellow]! Could not refresh Confluence page for {doc_key}: {e}[/yellow]")
|
|
1041
|
+
console.print()
|
|
1042
|
+
|
|
963
1043
|
|
|
964
1044
|
# ── sdd review check ───────────────────────────────────────────────────────────
|
|
965
1045
|
|
|
@@ -1010,10 +1090,22 @@ def review_check(doc, profile, feature):
|
|
|
1010
1090
|
raise SystemExit(3)
|
|
1011
1091
|
|
|
1012
1092
|
client = JiraClient(session, prof.base_url)
|
|
1013
|
-
status, comments = _get_review_status(doc, client, cfg.jira.key_for("review"), cfg, feature_name)
|
|
1093
|
+
status, comments, _ = _get_review_status(doc, client, cfg.jira.key_for("review"), cfg, feature_name)
|
|
1014
1094
|
doc_cfg = cfg.document_reviews.get(doc)
|
|
1015
1095
|
role = doc_cfg.reviewer_role if doc_cfg else "reviewer"
|
|
1016
1096
|
|
|
1097
|
+
# ── Refresh the Confluence status banner to match what we just polled ─────
|
|
1098
|
+
# Best-effort: a reviewer who only looks at Confluence (never Jira
|
|
1099
|
+
# directly) should see the same status this command just printed, without
|
|
1100
|
+
# having to wait for the next `sdd review submit`/`apply`/`approve`.
|
|
1101
|
+
if cfg.confluence:
|
|
1102
|
+
try:
|
|
1103
|
+
md_path = resolve_doc_path(doc, feature_name)
|
|
1104
|
+
if md_path.exists():
|
|
1105
|
+
_push_doc_page(doc, md_path, feature_name)
|
|
1106
|
+
except Exception:
|
|
1107
|
+
pass
|
|
1108
|
+
|
|
1017
1109
|
if status == "APPROVED":
|
|
1018
1110
|
console.print(f" [green]✓ {doc.upper()} — APPROVED[/green]")
|
|
1019
1111
|
console.print()
|
|
@@ -1095,7 +1187,7 @@ def review_comments(doc, feature, ack):
|
|
|
1095
1187
|
|
|
1096
1188
|
@review_command.command("approve")
|
|
1097
1189
|
@click.option("--doc", required=True,
|
|
1098
|
-
help="Document key: brd, use-cases, srd, design (unified) / arch, hld, adr (separate), lld, ...")
|
|
1190
|
+
help="Document key: brd, use-cases, srd, design (unified) / arch, hld, adr (separate), validate, analyze, clarify, lld, ...")
|
|
1099
1191
|
@click.option("--local", is_flag=True, required=True,
|
|
1100
1192
|
help="Write a local approval record (fallback when Jira is not configured)")
|
|
1101
1193
|
@click.option("--by", default="chat",
|
|
@@ -1144,8 +1236,9 @@ def review_approve(doc, local, by, note, feature, no_confluence):
|
|
|
1144
1236
|
try:
|
|
1145
1237
|
manifest = read_manifest() or {}
|
|
1146
1238
|
feature_name = feature or (manifest.get("project") or {}).get("feature", "")
|
|
1147
|
-
|
|
1148
|
-
if
|
|
1239
|
+
pushed = _push_doc_page(doc, md_path, feature_name)
|
|
1240
|
+
if pushed:
|
|
1241
|
+
title, _page_url = pushed
|
|
1149
1242
|
console.print(f" [green]✓[/green] Confluence page updated: [cyan]{title}[/cyan]")
|
|
1150
1243
|
else:
|
|
1151
1244
|
console.print(" [dim]· Confluence not configured — page not updated[/dim]")
|
|
@@ -1214,31 +1307,21 @@ def review_apply(doc, profile, feature):
|
|
|
1214
1307
|
console.print(f" [red]✗ '{doc}' not found in document_reviews[/red]")
|
|
1215
1308
|
raise SystemExit(1)
|
|
1216
1309
|
|
|
1217
|
-
project_name = proj.get("name", "Project")
|
|
1218
|
-
|
|
1219
1310
|
jira_client = JiraClient(session, prof.base_url)
|
|
1220
|
-
cf_client = ConfluenceClient(session, prof.base_url)
|
|
1221
1311
|
|
|
1222
|
-
# Re-push updated doc
|
|
1312
|
+
# Re-push updated doc (picks up the Jira link/status banner automatically,
|
|
1313
|
+
# since the review ticket from the original `sdd review submit` already exists)
|
|
1223
1314
|
try:
|
|
1224
1315
|
md_path = resolve_doc_path(doc, feature_name)
|
|
1225
1316
|
except ValueError as e:
|
|
1226
1317
|
console.print(f" [red]✗ {e}[/red]")
|
|
1227
1318
|
raise SystemExit(1)
|
|
1228
|
-
page_url
|
|
1319
|
+
page_url = ""
|
|
1229
1320
|
if md_path.exists():
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
page, _ = cf_client.upsert_page(
|
|
1235
|
-
cfg.confluence.space_key, page_title, body_html, parent_id,
|
|
1236
|
-
)
|
|
1237
|
-
upload_diagram_attachments(cf_client, page["id"], attachments)
|
|
1238
|
-
page_url = f"{prof.base_url}/wiki{page.get('_links', {}).get('webui', '')}"
|
|
1239
|
-
console.print(f" [green]✓[/green] Confluence updated: [cyan]{page_title}[/cyan]")
|
|
1240
|
-
for w in diagram_warnings:
|
|
1241
|
-
console.print(f" [yellow]! {w}[/yellow]")
|
|
1321
|
+
pushed = _push_doc_page(doc, md_path, feature_name)
|
|
1322
|
+
if pushed:
|
|
1323
|
+
page_title, page_url = pushed
|
|
1324
|
+
console.print(f" [green]✓[/green] Confluence updated: [cyan]{page_title}[/cyan]")
|
|
1242
1325
|
else:
|
|
1243
1326
|
console.print(f" [dim]·[/dim] {md_path} not found — skipping Confluence update")
|
|
1244
1327
|
|
|
@@ -1318,7 +1401,7 @@ def review_status(profile, feature):
|
|
|
1318
1401
|
icon, label, style = "🔒", "Blocked", "dim"
|
|
1319
1402
|
all_statuses[key] = "BLOCKED"
|
|
1320
1403
|
else:
|
|
1321
|
-
st, _ = _get_review_status(key, client, cfg.jira.key_for("review"), cfg, feature_name)
|
|
1404
|
+
st, _, _ = _get_review_status(key, client, cfg.jira.key_for("review"), cfg, feature_name)
|
|
1322
1405
|
all_statuses[key] = st
|
|
1323
1406
|
if st == "APPROVED":
|
|
1324
1407
|
icon, label, style = "✓ ", "Approved", "green"
|
|
@@ -2204,6 +2204,144 @@ MIGRATIONS = [
|
|
|
2204
2204
|
],
|
|
2205
2205
|
"migrate": lambda m: {**m, "sdd_version": "2.7.55"},
|
|
2206
2206
|
},
|
|
2207
|
+
{
|
|
2208
|
+
"from": "2.7.55",
|
|
2209
|
+
"to": "2.7.56",
|
|
2210
|
+
"description": "Fix: sdd review pull-answers patched BRD/SRD/UC locally but never refreshed their existing Confluence pages, leaving them showing stale pre-answer [NEEDS CLARIFICATION] markers -- no manifest schema changes",
|
|
2211
|
+
"notes": [
|
|
2212
|
+
"User-reported: after /validate's push-questions/pull-answers "
|
|
2213
|
+
"round-trip resolved every open question, brd.md/srd.md/"
|
|
2214
|
+
"use-cases.md were updated on disk and their versions bumped, "
|
|
2215
|
+
"but their Confluence pages (created back at their own "
|
|
2216
|
+
"/specify-brd -> sdd review submit time) still showed the old "
|
|
2217
|
+
"unresolved markers -- only validate.md's own page was ever "
|
|
2218
|
+
"touched by push-questions/pull-answers",
|
|
2219
|
+
"review_pull_answers now tracks the on-disk path of every doc "
|
|
2220
|
+
"it successfully patches, and after the patch loop, re-pushes "
|
|
2221
|
+
"each one's Confluence page via the same _push_doc_page() "
|
|
2222
|
+
"helper sdd review approve already uses -- best-effort per "
|
|
2223
|
+
"doc, so one page's failure never blocks the others or the "
|
|
2224
|
+
"patching that already succeeded",
|
|
2225
|
+
"Only runs when confluence: is configured in integrations.yml; "
|
|
2226
|
+
"silently skipped otherwise, matching the rest of "
|
|
2227
|
+
"pull-answers' safe-to-call-unconditionally contract",
|
|
2228
|
+
"1 new test: push-questions -> answer -> pull-answers, "
|
|
2229
|
+
"confirming both patched docs' Confluence pages are created/"
|
|
2230
|
+
"updated with the expected page-map titles",
|
|
2231
|
+
"This migration only bumps sdd_version -- no manifest.yml "
|
|
2232
|
+
"field changes for any pack",
|
|
2233
|
+
],
|
|
2234
|
+
"migrate": lambda m: {**m, "sdd_version": "2.7.56"},
|
|
2235
|
+
},
|
|
2236
|
+
{
|
|
2237
|
+
"from": "2.7.56",
|
|
2238
|
+
"to": "2.7.57",
|
|
2239
|
+
"description": "Guardrail: validate.prompt.md Step C no longer lets a document-level approval auto-check per-item §1-§4 confirmation checkboxes -- no manifest schema changes",
|
|
2240
|
+
"notes": [
|
|
2241
|
+
"User-reported (from a live project's /analyze run): a prior "
|
|
2242
|
+
"agent session, chasing the analyze.prompt.md verify gate's "
|
|
2243
|
+
"literal 'VALIDATE complete' string, bulk-checked every "
|
|
2244
|
+
"unchecked box in validate.md's §1 (Reviewer Confirms), §2 "
|
|
2245
|
+
"(BA/PO Confirms), §3 (assumption Correct?), §3a (UC Business "
|
|
2246
|
+
"Scenario Correct?), and §4 (Scope Confirmation) -- inferring "
|
|
2247
|
+
"itemized per-line business sign-off purely from the "
|
|
2248
|
+
"document's overall Jira ticket having been closed after a "
|
|
2249
|
+
"Q&A comment thread, which is not the same as a named "
|
|
2250
|
+
"reviewer actually addressing that specific item",
|
|
2251
|
+
"validate.prompt.md's own Step C only ever specified updating "
|
|
2252
|
+
"the header (Status: Draft -> Approved) and the §5 Approvals "
|
|
2253
|
+
"table -- the agent's bulk-check of §1-§4 was not something "
|
|
2254
|
+
"the prompt told it to do; this migration tightens the "
|
|
2255
|
+
"wording to explicitly forbid it and to say what to do "
|
|
2256
|
+
"instead (leave unchecked with a note, or point to the "
|
|
2257
|
+
"specific reviewer statement that confirmed that exact item)",
|
|
2258
|
+
"This matters most for regulated/financial-transfer features "
|
|
2259
|
+
"where §1-§4's checkboxes are meant to be a traceable, "
|
|
2260
|
+
"defensible audit trail of actual line-item business review "
|
|
2261
|
+
"-- not a formality that gets rubber-stamped to satisfy a "
|
|
2262
|
+
"downstream gate's string match",
|
|
2263
|
+
"Applied identically to validate.prompt.md in all 5 packs "
|
|
2264
|
+
"(not a shared/blocks file -- each pack's copy edited "
|
|
2265
|
+
"individually, same wording)",
|
|
2266
|
+
"This migration only bumps sdd_version -- no manifest.yml "
|
|
2267
|
+
"field changes for any pack",
|
|
2268
|
+
],
|
|
2269
|
+
"migrate": lambda m: {**m, "sdd_version": "2.7.57"},
|
|
2270
|
+
},
|
|
2271
|
+
{
|
|
2272
|
+
"from": "2.7.57",
|
|
2273
|
+
"to": "2.7.58",
|
|
2274
|
+
"description": "Feature: analyze.md and clarify.md can now go through the same Jira/Confluence review-gate flow as brd/srd/etc (a new 'validate' phase) -- no manifest schema changes",
|
|
2275
|
+
"notes": [
|
|
2276
|
+
"User asked why /analyze and /clarify never got pushed to "
|
|
2277
|
+
"Confluence/Jira the way /validate does -- by design they "
|
|
2278
|
+
"were chat-only working documents, but nothing in "
|
|
2279
|
+
"resolve_doc_path/review_submit/review_approve actually "
|
|
2280
|
+
"required that; they're fully generic by doc key",
|
|
2281
|
+
"Added document_reviews.validate/.analyze/.clarify entries "
|
|
2282
|
+
"to integrations.yml.example (phase: validate, sequence "
|
|
2283
|
+
"1/2/3 -- validate before analyze before clarify, enforced "
|
|
2284
|
+
"by the same predecessor-sequence gate every other phase "
|
|
2285
|
+
"already uses), plus matching page_map entries",
|
|
2286
|
+
"analyze.prompt.md and clarify.prompt.md (all 5 packs) gained "
|
|
2287
|
+
"the same Stakeholder Review and Approval Step B/C section "
|
|
2288
|
+
"validate.prompt.md already has -- sdd review submit/check/"
|
|
2289
|
+
"approve, same approval-signal handling, same guardrail "
|
|
2290
|
+
"against inferring per-section findings as individually "
|
|
2291
|
+
"confirmed by a document-level approval",
|
|
2292
|
+
"Fixed clarify-template.md's header, which said "
|
|
2293
|
+
"'Status: OPEN' instead of 'Status: Draft' -- "
|
|
2294
|
+
"_mark_md_approved's regex only recognizes Draft/Proposed, "
|
|
2295
|
+
"so the approval flip would have silently never updated the "
|
|
2296
|
+
"header for clarify.md without this fix",
|
|
2297
|
+
"Each of validate/analyze/clarify is optional individually -- "
|
|
2298
|
+
"add only the ones you want routed through Jira/Confluence; "
|
|
2299
|
+
"the rest stay chat-only, per review-gates.md",
|
|
2300
|
+
"4 new tests: generic submit works for analyze/clarify doc "
|
|
2301
|
+
"keys, the validate-phase sequence gate blocks analyze until "
|
|
2302
|
+
"validate is approved, and the clarify.md header fix is "
|
|
2303
|
+
"confirmed to make the approval flow work end-to-end",
|
|
2304
|
+
"This migration only bumps sdd_version -- no manifest.yml "
|
|
2305
|
+
"field changes for any pack",
|
|
2306
|
+
],
|
|
2307
|
+
"migrate": lambda m: {**m, "sdd_version": "2.7.58"},
|
|
2308
|
+
},
|
|
2309
|
+
{
|
|
2310
|
+
"from": "2.7.58",
|
|
2311
|
+
"to": "2.7.59",
|
|
2312
|
+
"description": "Feature: Confluence pages for documents under Jira review now show a live Jira link + status banner, and page_map covers every generated doc type (qa-testcases, tasks, checklist, and the living/service docs) -- no manifest schema changes",
|
|
2313
|
+
"notes": [
|
|
2314
|
+
"User asked why a doc pushed to Jira for review didn't also "
|
|
2315
|
+
"get its Confluence page stamped with the ticket link/status "
|
|
2316
|
+
"so a reviewer could see it without leaving Confluence -- the "
|
|
2317
|
+
"page only ever mirrored the .md content, never the Jira "
|
|
2318
|
+
"state, since the two pushes happened in unrelated code paths",
|
|
2319
|
+
"sdd review submit/check/apply now prepend a small info/"
|
|
2320
|
+
"success/warning panel (via the new _push_doc_page banner) "
|
|
2321
|
+
"showing the ticket key, link, and live status (Pending/"
|
|
2322
|
+
"Needs Revision/Approved) -- refreshed every time the CLI "
|
|
2323
|
+
"touches that document's review state, so it never goes "
|
|
2324
|
+
"stale between submit and the reviewer's eventual decision",
|
|
2325
|
+
"Only applies to doc keys with a document_reviews entry (i.e. "
|
|
2326
|
+
"actually under Jira review) -- docs pushed via the page_map "
|
|
2327
|
+
"fallback alone (no Jira gate configured) get a plain page, "
|
|
2328
|
+
"same as before",
|
|
2329
|
+
"User also asked for a Confluence page for 'QA test case etc "
|
|
2330
|
+
"-- whatever there in local md file' -- page_map in "
|
|
2331
|
+
"integrations.yml.example now also covers qa-testcases, "
|
|
2332
|
+
"tasks, checklist, and the 4 living/service-level docs "
|
|
2333
|
+
"(data-model, security-design, api-spec, component-library), "
|
|
2334
|
+
"so `sdd confluence push --doc <key>` works for all of them, "
|
|
2335
|
+
"not just the phase-gated documents",
|
|
2336
|
+
"6 new tests: banner HTML per status, submit stamps a Pending "
|
|
2337
|
+
"banner once the ticket exists, check refreshes an existing "
|
|
2338
|
+
"page to Approved, and the page_map fallback path (no Jira "
|
|
2339
|
+
"gate) omits the banner entirely",
|
|
2340
|
+
"This migration only bumps sdd_version -- no manifest.yml "
|
|
2341
|
+
"field changes for any pack",
|
|
2342
|
+
],
|
|
2343
|
+
"migrate": lambda m: {**m, "sdd_version": "2.7.59"},
|
|
2344
|
+
},
|
|
2207
2345
|
]
|
|
2208
2346
|
|
|
2209
2347
|
|
{sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/analyze.prompt.md
RENAMED
|
@@ -79,6 +79,54 @@ CF-NNN IDs. Include in analyze.summary.md:
|
|
|
79
79
|
|
|
80
80
|
- Save to: .specify/features/{manifest.project.feature}/analyze.md
|
|
81
81
|
- Save summary to: analyze.summary.md (max SUMMARY_MAX_LINES)
|
|
82
|
+
- Present the report.
|
|
83
|
+
|
|
84
|
+
### Stakeholder Review and Approval
|
|
85
|
+
|
|
86
|
+
**Step B — Formal submission**
|
|
87
|
+
|
|
88
|
+
If `.specify/integrations.yml` has `document_reviews.analyze` configured:
|
|
89
|
+
```bash
|
|
90
|
+
sdd review submit --doc analyze
|
|
91
|
+
```
|
|
92
|
+
If the command succeeds, tell the user:
|
|
93
|
+
> "Analysis report submitted for Jira review. Reply **'approved'** (or 'yes', 'LGTM', 'looks good') once the Tech Lead approves."
|
|
94
|
+
|
|
95
|
+
If the CLI fails or is not configured, present the document and ask:
|
|
96
|
+
> "Analysis report generated. Review §1–§9 above and reply **'approved'** (or 'yes', 'LGTM', 'looks good') to continue, or provide feedback:"
|
|
97
|
+
|
|
98
|
+
**Step C — On approval (any path: Jira or chat)**
|
|
99
|
+
|
|
100
|
+
When the user replies with any approval signal — **'approved'**, **'approve'**, **'yes'**, **'LGTM'**, **'looks good'**, **'go ahead'**, **'confirmed'**, or any similar affirmative (case-insensitive):
|
|
101
|
+
1. Run `sdd review check --doc analyze` to verify:
|
|
102
|
+
- Exit 0 → confirmed. Proceed.
|
|
103
|
+
- Non-0 and CLI is configured → warn: "Jira shows not yet approved. Confirm you want to proceed? (yes/no)" — wait for response.
|
|
104
|
+
- CLI not available → skip check and proceed.
|
|
105
|
+
2. Update `analyze.md`:
|
|
106
|
+
- Header: `Status: Draft` → `Status: Approved`, date → today.
|
|
107
|
+
- Approvals table: all Pending rows → `Approved` + today's date.
|
|
108
|
+
- Version History: append a row using the document's **current**
|
|
109
|
+
version (a pure approval doesn't bump it):
|
|
110
|
+
`| {current version} | {today} | {jira or chat} | Approved | — |`
|
|
111
|
+
- **Never** use this document-level approval signal to also check any
|
|
112
|
+
of the per-item risk/dependency/complexity findings in §1–§9 as
|
|
113
|
+
resolved — approval here means "the analysis is sound and complete
|
|
114
|
+
enough to proceed," not that every CF-NNN finding or R-NNN risk has
|
|
115
|
+
been individually addressed. Those are tracked to closure by
|
|
116
|
+
/clarify and /task, not by this approval.
|
|
117
|
+
3. Re-save `analyze.md` and regenerate `analyze.summary.md`.
|
|
118
|
+
4. Ask once: "Recording the approval — approver name/role and an optional comment?"
|
|
119
|
+
(defaults: the accountable role for this gate in roles.yml; "approved in chat")
|
|
120
|
+
5. Record locally and sync Confluence:
|
|
121
|
+
```bash
|
|
122
|
+
sdd review approve --doc analyze --local --by "{approver}" --note "{comment}"
|
|
123
|
+
```
|
|
124
|
+
This also updates the document's existing Confluence page when a `confluence:`
|
|
125
|
+
section exists in `.specify/integrations.yml`.
|
|
126
|
+
If the command fails or the CLI is not installed, note: "Analyze approved ✓
|
|
127
|
+
(Confluence page not updated)" and continue — the `Status: Approved` header is
|
|
128
|
+
the authoritative gate.
|
|
129
|
+
|
|
82
130
|
<!-- shared:token-usage-log-step:start -->
|
|
83
131
|
## Token Usage Logging (this command)
|
|
84
132
|
Check now, with a fresh file read — not a memory of whether
|
|
@@ -93,4 +141,4 @@ update its Running Totals table. If the file still doesn't exist, skip
|
|
|
93
141
|
this silently — do not create it and do not mention it.
|
|
94
142
|
<!-- shared:token-usage-log-step:end -->
|
|
95
143
|
|
|
96
|
-
-
|
|
144
|
+
- Do NOT proceed to /clarify until the approval above is recorded.
|
{sddflow-2.7.55 → sddflow-2.7.59}/sdd/packs/sdd-backend-service/.github/prompts/clarify.prompt.md
RENAMED
|
@@ -81,6 +81,53 @@ For each spec document with content affected by a resolved item:
|
|
|
81
81
|
|
|
82
82
|
Write `.specify/features/{manifest.project.feature}/clarify.summary.md` — confirm all items RESOLVED. If any items were resolved by best guess, list them so the Plan-Design reviewer is aware.
|
|
83
83
|
|
|
84
|
+
### Step 6 — Stakeholder Review and Approval
|
|
85
|
+
|
|
86
|
+
**Step B — Formal submission**
|
|
87
|
+
|
|
88
|
+
If `.specify/integrations.yml` has `document_reviews.clarify` configured:
|
|
89
|
+
```bash
|
|
90
|
+
sdd review submit --doc clarify
|
|
91
|
+
```
|
|
92
|
+
If the command succeeds, tell the user:
|
|
93
|
+
> "Clarification report submitted for Jira review. Reply **'approved'** (or 'yes', 'LGTM', 'looks good') once the Architect approves."
|
|
94
|
+
|
|
95
|
+
If the CLI fails or is not configured, present the document and ask:
|
|
96
|
+
> "Clarification report generated — all items resolved. Review the answers above and reply **'approved'** (or 'yes', 'LGTM', 'looks good') to continue, or provide feedback:"
|
|
97
|
+
|
|
98
|
+
**Step C — On approval (any path: Jira or chat)**
|
|
99
|
+
|
|
100
|
+
When the user replies with any approval signal — **'approved'**, **'approve'**, **'yes'**, **'LGTM'**, **'looks good'**, **'go ahead'**, **'confirmed'**, or any similar affirmative (case-insensitive):
|
|
101
|
+
1. Run `sdd review check --doc clarify` to verify:
|
|
102
|
+
- Exit 0 → confirmed. Proceed.
|
|
103
|
+
- Non-0 and CLI is configured → warn: "Jira shows not yet approved. Confirm you want to proceed? (yes/no)" — wait for response.
|
|
104
|
+
- CLI not available → skip check and proceed.
|
|
105
|
+
2. Update `clarify.md`:
|
|
106
|
+
- Header: `Status: Draft` → `Status: Approved`, date → today.
|
|
107
|
+
- Approvals table: all Pending rows → `Approved` + today's date.
|
|
108
|
+
- Version History: append a row using the document's **current**
|
|
109
|
+
version (a pure approval doesn't bump it — Step 3 above already
|
|
110
|
+
bumped it when the items were resolved):
|
|
111
|
+
`| {current version} | {today} | {jira or chat} | Approved | — |`
|
|
112
|
+
- This approval confirms the Architect has reviewed the resolved
|
|
113
|
+
answers (including any best-guess items) and is satisfied to
|
|
114
|
+
proceed to /plan-design — it does not re-open, and must not be
|
|
115
|
+
used to silently overwrite, the per-item RESOLVED/CONFIRMED/
|
|
116
|
+
DECIDED/CORRECTED status already recorded in the STATUS TABLE at
|
|
117
|
+
Step 3.
|
|
118
|
+
3. Re-save `clarify.md` and regenerate `clarify.summary.md`.
|
|
119
|
+
4. Ask once: "Recording the approval — approver name/role and an optional comment?"
|
|
120
|
+
(defaults: the accountable role for this gate in roles.yml; "approved in chat")
|
|
121
|
+
5. Record locally and sync Confluence:
|
|
122
|
+
```bash
|
|
123
|
+
sdd review approve --doc clarify --local --by "{approver}" --note "{comment}"
|
|
124
|
+
```
|
|
125
|
+
This also updates the document's existing Confluence page when a `confluence:`
|
|
126
|
+
section exists in `.specify/integrations.yml`.
|
|
127
|
+
If the command fails or the CLI is not installed, note: "Clarify approved ✓
|
|
128
|
+
(Confluence page not updated)" and continue — the `Status: Approved` header is
|
|
129
|
+
the authoritative gate.
|
|
130
|
+
|
|
84
131
|
<!-- shared:token-usage-log-step:start -->
|
|
85
132
|
## Token Usage Logging (this command)
|
|
86
133
|
Check now, with a fresh file read — not a memory of whether
|
|
@@ -155,6 +155,19 @@ When the user replies with any approval signal — **'approved'**, **'approve'**
|
|
|
155
155
|
version (a pure approval doesn't bump it — only an assumption
|
|
156
156
|
correction in §3 above does):
|
|
157
157
|
`| {current version} | {today} | {jira or chat} | Approved | — |`
|
|
158
|
+
- **Never** use this document-level approval signal to also check any
|
|
159
|
+
of the per-item confirmation checkboxes in §1 (Reviewer Confirms),
|
|
160
|
+
§2 (BA Confirms / PO Confirms), §3 (Correct?), §3a (Business
|
|
161
|
+
Scenario Correct?), or §4 (Scope Confirmation). Those require the
|
|
162
|
+
named reviewer to have actually addressed that *specific* item —
|
|
163
|
+
a blanket "approved" reply, a Jira status flip to Done/Closed, or a
|
|
164
|
+
comment thread that only answered NEEDS CLARIFICATION questions is
|
|
165
|
+
not itemized evidence for them. If any of those boxes are still
|
|
166
|
+
`[ ]` when the header flips to Approved, leave them `[ ]` and add a
|
|
167
|
+
note under §5: "Approved as a whole document; items in §1–§4 were
|
|
168
|
+
not itemized during review." Only check a specific box when you can
|
|
169
|
+
point to the actual reviewer statement that confirmed that exact
|
|
170
|
+
item.
|
|
158
171
|
3. Re-save `validate.md` and regenerate `validate.summary.md`.
|
|
159
172
|
4. Ask once: "Recording the approval — approver name/role and an optional comment?"
|
|
160
173
|
(defaults: the accountable role for this gate in roles.yml; "approved in chat")
|