sddflow 2.7.52__tar.gz → 2.7.53__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.52 → sddflow-2.7.53}/PKG-INFO +39 -1
- {sddflow-2.7.52 → sddflow-2.7.53}/README.md +38 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/pyproject.toml +1 -1
- sddflow-2.7.53/sdd/__init__.py +1 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/commands/review.py +347 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/commands/upgrade.py +53 -0
- {sddflow-2.7.52/sdd/packs/sdd-fullstack → sddflow-2.7.53/sdd/packs/sdd-backend-service}/.github/prompts/specify-brd.prompt.md +10 -3
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/specify-doc.prompt.md +7 -3
- {sddflow-2.7.52/sdd/packs/sdd-fullstack → sddflow-2.7.53/sdd/packs/sdd-backend-service}/.github/prompts/specify-srd.prompt.md +7 -3
- {sddflow-2.7.52/sdd/packs/sdd-fullstack → sddflow-2.7.53/sdd/packs/sdd-backend-service}/.github/prompts/specify-uc.prompt.md +8 -3
- {sddflow-2.7.52/sdd/packs/sdd-universal → sddflow-2.7.53/sdd/packs/sdd-backend-service}/.github/prompts/validate.prompt.md +36 -7
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/manifest.yml +1 -1
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/CLAUDE.md +11 -0
- {sddflow-2.7.52/sdd/packs/sdd-mobile → sddflow-2.7.53/sdd/packs/sdd-frontend-spa}/.github/prompts/specify-brd.prompt.md +10 -3
- {sddflow-2.7.52/sdd/packs/sdd-fullstack → sddflow-2.7.53/sdd/packs/sdd-frontend-spa}/.github/prompts/specify-doc.prompt.md +7 -3
- {sddflow-2.7.52/sdd/packs/sdd-backend-service → sddflow-2.7.53/sdd/packs/sdd-frontend-spa}/.github/prompts/specify-srd.prompt.md +7 -3
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/specify-uc.prompt.md +8 -3
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/validate.prompt.md +36 -7
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/manifest.yml +1 -1
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/CLAUDE.md +11 -0
- {sddflow-2.7.52/sdd/packs/sdd-frontend-spa → sddflow-2.7.53/sdd/packs/sdd-fullstack}/.github/prompts/specify-brd.prompt.md +10 -3
- {sddflow-2.7.52/sdd/packs/sdd-frontend-spa → sddflow-2.7.53/sdd/packs/sdd-fullstack}/.github/prompts/specify-doc.prompt.md +7 -3
- {sddflow-2.7.52/sdd/packs/sdd-frontend-spa → sddflow-2.7.53/sdd/packs/sdd-fullstack}/.github/prompts/specify-srd.prompt.md +7 -3
- {sddflow-2.7.52/sdd/packs/sdd-backend-service → sddflow-2.7.53/sdd/packs/sdd-fullstack}/.github/prompts/specify-uc.prompt.md +8 -3
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/validate.prompt.md +36 -7
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/manifest.yml +1 -1
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/CLAUDE.md +11 -0
- {sddflow-2.7.52/sdd/packs/sdd-backend-service → sddflow-2.7.53/sdd/packs/sdd-mobile}/.github/prompts/specify-brd.prompt.md +10 -3
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/specify-doc.prompt.md +7 -3
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/specify-srd.prompt.md +7 -3
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/specify-uc.prompt.md +8 -3
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/validate.prompt.md +36 -7
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/manifest.yml +1 -1
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/CLAUDE.md +11 -0
- sddflow-2.7.53/sdd/packs/sdd-universal/.github/prompts/specify-brd.prompt.md +227 -0
- sddflow-2.7.53/sdd/packs/sdd-universal/.github/prompts/specify-doc.prompt.md +313 -0
- sddflow-2.7.53/sdd/packs/sdd-universal/.github/prompts/specify-srd.prompt.md +240 -0
- sddflow-2.7.53/sdd/packs/sdd-universal/.github/prompts/specify-uc.prompt.md +259 -0
- {sddflow-2.7.52/sdd/packs/sdd-backend-service → sddflow-2.7.53/sdd/packs/sdd-universal}/.github/prompts/validate.prompt.md +36 -7
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/manifest.yml +1 -1
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/CLAUDE.md +11 -0
- sddflow-2.7.52/sdd/__init__.py +0 -1
- sddflow-2.7.52/sdd/packs/sdd-universal/.github/prompts/specify-brd.prompt.md +0 -220
- sddflow-2.7.52/sdd/packs/sdd-universal/.github/prompts/specify-doc.prompt.md +0 -309
- sddflow-2.7.52/sdd/packs/sdd-universal/.github/prompts/specify-srd.prompt.md +0 -236
- sddflow-2.7.52/sdd/packs/sdd-universal/.github/prompts/specify-uc.prompt.md +0 -254
- {sddflow-2.7.52 → sddflow-2.7.53}/.gitignore +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/__main__.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/commands/__init__.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/commands/config.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/commands/confluence.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/commands/cr.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/commands/dashboard.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/commands/init.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/commands/jira.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/commands/pr.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/ava.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/change.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/implement.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/kai.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/leo.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/maya.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/release.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/rex.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/riley.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/specify.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/start.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/task.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.claude/commands/validate.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/instructions/api.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/instructions/domain.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/instructions/java.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/instructions/tests.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/analyze.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/clarify.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.gitignore +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.gitlab-ci.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/integrations.yml.example +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/clarify-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/k8s-manifest-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/openapi-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.vscode/extensions.json +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/.windsurfrules +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/CLAUDE.local.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/HOW-TO-USE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/IMPROVEMENT-BACKLOG.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/PROMPT-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/QUICKSTART.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/README.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/WHY-SDD.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/azure-pipelines.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/setup.ps1 +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-backend-service/setup.sh +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/ava.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/change.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/implement.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/kai.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/leo.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/maya.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/release.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/rex.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/riley.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/specify.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/start.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/task.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.claude/commands/validate.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/instructions/components.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/instructions/services.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/instructions/tests.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/analyze.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/clarify.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.gitignore +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.gitlab-ci.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/integrations.yml.example +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/clarify-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/component-library-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/component-spec-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/ux-flow-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.vscode/extensions.json +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/.windsurfrules +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/CLAUDE.local.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/HOW-TO-USE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/IMPROVEMENT-BACKLOG.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/PROMPT-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/QUICKSTART.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/README.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/WHY-SDD.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/azure-pipelines.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/setup.ps1 +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-frontend-spa/setup.sh +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/ava.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/change.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/implement.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/kai.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/leo.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/maya.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/release.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/rex.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/riley.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/specify.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/start.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/task.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.claude/commands/validate.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/instructions/backend-tests.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/instructions/components.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/instructions/domain.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/instructions/frontend-services.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/instructions/java.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/analyze.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/clarify.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.gitignore +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.gitlab-ci.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/integrations.yml.example +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/clarify-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/component-library-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/component-spec-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/openapi-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/screen-spec-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/ux-flow-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.vscode/extensions.json +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/.windsurfrules +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/CLAUDE.local.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/HOW-TO-USE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/PROMPT-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/QUICKSTART.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/README.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/WHY-SDD.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/azure-pipelines.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/setup.ps1 +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-fullstack/setup.sh +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.claude/commands/implement.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.claude/commands/specify.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.claude/commands/start.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.claude/commands/task.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.specify/manifest.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/.windsurfrules +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/CLAUDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/QUICKSTART.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/README.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/WHY-SDD.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/setup.ps1 +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-micro/setup.sh +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/ava.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/change.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/implement.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/kai.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/leo.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/maya.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/release.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/rex.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/riley.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/specify.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/start.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/task.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.claude/commands/validate.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/instructions/screens.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/instructions/services.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/instructions/tests.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/analyze.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/clarify.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.gitignore +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.gitlab-ci.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/integrations.yml.example +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/clarify-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/screen-spec-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/ux-flow-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.vscode/extensions.json +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/.windsurfrules +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/CLAUDE.local.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/HOW-TO-USE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/IMPROVEMENT-BACKLOG.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/PROMPT-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/QUICKSTART.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/README.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/WHY-SDD.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/azure-pipelines.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/setup.ps1 +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-mobile/setup.sh +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/ava.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/change.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/implement.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/kai.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/leo.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/maya.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/release.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/rex.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/riley.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/specify.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/start.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/task.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.claude/commands/validate.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/instructions/domain.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/instructions/entrypoints.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/instructions/tests.instructions.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/analyze.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/clarify.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.gitignore +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.gitlab-ci.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/integrations.yml.example +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/clarify-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/k8s-manifest-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/openapi-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.vscode/extensions.json +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/.windsurfrules +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/CLAUDE.local.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/HOW-TO-USE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/IMPROVEMENT-BACKLOG.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/PROMPT-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/QUICKSTART.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/README.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/WHY-SDD.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/azure-pipelines.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/setup.ps1 +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/packs/sdd-universal/setup.sh +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/__init__.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/atlassian_auth.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/cf_to_md.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/confluence_client.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/dashboard_comments.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/detect.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/git_host.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/integrations.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/jira_client.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/manifest.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/md_to_cf.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/mermaid_render.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/scaffold.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/sdd_parser.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/sdd/utils/status.py +0 -0
- {sddflow-2.7.52 → sddflow-2.7.53}/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.53
|
|
4
4
|
Summary: SDD Framework CLI — initialize and upgrade Spec-Driven Development packs
|
|
5
5
|
Project-URL: Homepage, https://github.com/sunil1983us/universalguide
|
|
6
6
|
Project-URL: Repository, https://github.com/sunil1983us/universalguide
|
|
@@ -413,6 +413,44 @@ sdd review check --doc brd # poll again after reviewer re-reviews
|
|
|
413
413
|
|
|
414
414
|
---
|
|
415
415
|
|
|
416
|
+
### `sdd review push-questions` / `sdd review pull-answers`
|
|
417
|
+
|
|
418
|
+
A document can be blocked before it's ever submitted for review — e.g.
|
|
419
|
+
`validate.md`'s §3a scans `brd.md`/`use-cases.md`/`srd.md` for unresolved
|
|
420
|
+
`[NEEDS CLARIFICATION-NNN: {question}]` markers (numbered locally per
|
|
421
|
+
document, the same discipline `[ASSUMPTION-NNN]` already uses) and refuses
|
|
422
|
+
to proceed while any remain. These two commands let a reviewer answer
|
|
423
|
+
those markers via Jira/Confluence instead of only through direct chat/doc
|
|
424
|
+
edits:
|
|
425
|
+
|
|
426
|
+
```bash
|
|
427
|
+
sdd review push-questions --doc validate # push open questions to Jira + Confluence
|
|
428
|
+
# reviewer replies as a comment, one line per item:
|
|
429
|
+
# brd:NC-002: 90 days, per data retention policy DR-014
|
|
430
|
+
sdd review pull-answers --doc validate # pull replies, patch the answered markers
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
`push-questions` reads the blocked document's `| ID | Locations | Question |`
|
|
434
|
+
table (see the doc's own gate for the exact format) and creates/updates
|
|
435
|
+
**one** Jira ticket — reusing `document_reviews.validate`'s
|
|
436
|
+
`reviewer_jira_user`/`reviewer_role`, no separate config needed. It uses
|
|
437
|
+
the *same* idempotency label `sdd review submit` looks for, so once every
|
|
438
|
+
question is answered and the document unblocks, `sdd review submit --doc
|
|
439
|
+
validate` finds and evolves this same ticket in place (a comment marks the
|
|
440
|
+
transition) instead of creating a second one.
|
|
441
|
+
|
|
442
|
+
`pull-answers` fetches every comment on that ticket, matches lines like
|
|
443
|
+
`brd:NC-002: <answer>` against the open items, and replaces each answered
|
|
444
|
+
`[NEEDS CLARIFICATION-NNN]` marker directly in its source document —
|
|
445
|
+
bumping that document's `Version:` header and appending a `## Version
|
|
446
|
+
History` row. A question asked in more than one document (the table's
|
|
447
|
+
`Locations` column lists more than one ID, e.g. `brd:NC-003, srd:NC-001`)
|
|
448
|
+
gets the same answer applied everywhere at once. Safe to call
|
|
449
|
+
unconditionally (e.g. at the top of every `/validate` run) — it exits
|
|
450
|
+
quietly whenever there's nothing to do.
|
|
451
|
+
|
|
452
|
+
---
|
|
453
|
+
|
|
416
454
|
### `sdd review comments`
|
|
417
455
|
|
|
418
456
|
Read or acknowledge dashboard-left comments directly, without going through
|
|
@@ -378,6 +378,44 @@ sdd review check --doc brd # poll again after reviewer re-reviews
|
|
|
378
378
|
|
|
379
379
|
---
|
|
380
380
|
|
|
381
|
+
### `sdd review push-questions` / `sdd review pull-answers`
|
|
382
|
+
|
|
383
|
+
A document can be blocked before it's ever submitted for review — e.g.
|
|
384
|
+
`validate.md`'s §3a scans `brd.md`/`use-cases.md`/`srd.md` for unresolved
|
|
385
|
+
`[NEEDS CLARIFICATION-NNN: {question}]` markers (numbered locally per
|
|
386
|
+
document, the same discipline `[ASSUMPTION-NNN]` already uses) and refuses
|
|
387
|
+
to proceed while any remain. These two commands let a reviewer answer
|
|
388
|
+
those markers via Jira/Confluence instead of only through direct chat/doc
|
|
389
|
+
edits:
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
sdd review push-questions --doc validate # push open questions to Jira + Confluence
|
|
393
|
+
# reviewer replies as a comment, one line per item:
|
|
394
|
+
# brd:NC-002: 90 days, per data retention policy DR-014
|
|
395
|
+
sdd review pull-answers --doc validate # pull replies, patch the answered markers
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
`push-questions` reads the blocked document's `| ID | Locations | Question |`
|
|
399
|
+
table (see the doc's own gate for the exact format) and creates/updates
|
|
400
|
+
**one** Jira ticket — reusing `document_reviews.validate`'s
|
|
401
|
+
`reviewer_jira_user`/`reviewer_role`, no separate config needed. It uses
|
|
402
|
+
the *same* idempotency label `sdd review submit` looks for, so once every
|
|
403
|
+
question is answered and the document unblocks, `sdd review submit --doc
|
|
404
|
+
validate` finds and evolves this same ticket in place (a comment marks the
|
|
405
|
+
transition) instead of creating a second one.
|
|
406
|
+
|
|
407
|
+
`pull-answers` fetches every comment on that ticket, matches lines like
|
|
408
|
+
`brd:NC-002: <answer>` against the open items, and replaces each answered
|
|
409
|
+
`[NEEDS CLARIFICATION-NNN]` marker directly in its source document —
|
|
410
|
+
bumping that document's `Version:` header and appending a `## Version
|
|
411
|
+
History` row. A question asked in more than one document (the table's
|
|
412
|
+
`Locations` column lists more than one ID, e.g. `brd:NC-003, srd:NC-001`)
|
|
413
|
+
gets the same answer applied everywhere at once. Safe to call
|
|
414
|
+
unconditionally (e.g. at the top of every `/validate` run) — it exits
|
|
415
|
+
quietly whenever there's nothing to do.
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
381
419
|
### `sdd review comments`
|
|
382
420
|
|
|
383
421
|
Read or acknowledge dashboard-left comments directly, without going through
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.7.53"
|
|
@@ -298,6 +298,100 @@ def _record_review_link(doc: str, issue_key: str) -> None:
|
|
|
298
298
|
_save_review_links(links)
|
|
299
299
|
|
|
300
300
|
|
|
301
|
+
# ── Open-questions push/pull (blocked-doc Jira Q&A) ────────────────────────────
|
|
302
|
+
# When a document like validate.md is blocked on [NEEDS CLARIFICATION-NNN]
|
|
303
|
+
# markers in its source docs, `sdd review push-questions` lets a reviewer
|
|
304
|
+
# answer them via Jira/Confluence comments instead of waiting for direct
|
|
305
|
+
# chat/doc edits -- `sdd review pull-answers` reads those comments back and
|
|
306
|
+
# patches the answered markers directly into brd.md/use-cases.md/srd.md.
|
|
307
|
+
|
|
308
|
+
_OPEN_QUESTION_ROW_RE = re.compile(
|
|
309
|
+
r'^\|\s*([a-zA-Z0-9_.-]+:NC-\d+)\s*\|\s*([^|]+?)\s*\|\s*([^|]+?)\s*\|\s*$',
|
|
310
|
+
re.MULTILINE,
|
|
311
|
+
)
|
|
312
|
+
_ANSWER_LINE_RE = re.compile(
|
|
313
|
+
r'^\s*([a-zA-Z0-9_.-]+):NC-(\d+)\s*:\s*(.+?)\s*$',
|
|
314
|
+
re.MULTILINE | re.IGNORECASE,
|
|
315
|
+
)
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
def _parse_open_questions(doc_text: str) -> list[dict]:
|
|
319
|
+
"""Parse a blocked document's `| ID | Locations | Question |` table
|
|
320
|
+
(see validate.prompt.md's §3a-BLOCKING format) into structured items.
|
|
321
|
+
Tolerant of table-formatting drift across LLM runs -- anchors on the
|
|
322
|
+
`{doc}:NC-{NNN}` ID pattern itself, not exact column headers.
|
|
323
|
+
|
|
324
|
+
Each item's "locations" is every doc-qualified ID (e.g. "brd:NC-003")
|
|
325
|
+
that a single answer should be applied to -- almost always just its
|
|
326
|
+
own ID, but more than one when the same question was asked in more
|
|
327
|
+
than one document."""
|
|
328
|
+
items: list[dict] = []
|
|
329
|
+
for m in _OPEN_QUESTION_ROW_RE.finditer(doc_text):
|
|
330
|
+
primary_id, locations_raw, question = m.group(1).strip(), m.group(2).strip(), m.group(3).strip()
|
|
331
|
+
locations = [loc.strip() for loc in locations_raw.split(",") if loc.strip()]
|
|
332
|
+
if primary_id not in locations:
|
|
333
|
+
locations.append(primary_id)
|
|
334
|
+
items.append({"id": primary_id, "locations": locations, "question": question})
|
|
335
|
+
return items
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
def _parse_answers(comments: list[dict]) -> dict[str, str]:
|
|
339
|
+
"""Parse every Jira comment for lines like 'brd:NC-002: <answer>'.
|
|
340
|
+
A later comment's answer for the same ID overrides an earlier one
|
|
341
|
+
(a reviewer correcting themselves)."""
|
|
342
|
+
answers: dict[str, str] = {}
|
|
343
|
+
for c in comments:
|
|
344
|
+
text = _extract_text(c.get("body", ""))
|
|
345
|
+
for m in _ANSWER_LINE_RE.finditer(text):
|
|
346
|
+
doc_key, nnn, answer = m.group(1).lower(), m.group(2), m.group(3)
|
|
347
|
+
answers[f"{doc_key}:NC-{nnn}"] = answer
|
|
348
|
+
return answers
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
def _bump_version_and_log(text: str, note: str) -> str:
|
|
352
|
+
"""Bump the `Version: X.Y` header to X.(Y+1) and append a row to
|
|
353
|
+
`## Version History`, matching the same discipline every review-driven
|
|
354
|
+
edit in this codebase uses (see specify-brd.prompt.md's Revision
|
|
355
|
+
Logging). Best-effort: if either the Version header or a recognizable
|
|
356
|
+
`## Version History` table isn't found, the text is returned unchanged
|
|
357
|
+
rather than raising -- the marker replacement itself is what matters;
|
|
358
|
+
this bookkeeping is a bonus that shouldn't block on template drift."""
|
|
359
|
+
version_match = re.search(r'Version:\s*(\d+)\.(\d+)', text)
|
|
360
|
+
if not version_match:
|
|
361
|
+
return text
|
|
362
|
+
major, minor = version_match.group(1), int(version_match.group(2)) + 1
|
|
363
|
+
new_version = f"{major}.{minor}"
|
|
364
|
+
text = text[:version_match.start()] + f"Version: {new_version}" + text[version_match.end():]
|
|
365
|
+
|
|
366
|
+
heading = re.search(r'^## Version History\s*$', text, flags=re.IGNORECASE | re.MULTILINE)
|
|
367
|
+
if not heading:
|
|
368
|
+
return text
|
|
369
|
+
after = text[heading.end():]
|
|
370
|
+
sep_match = re.search(r'\n\|[-| ]+\|\s*\n', after)
|
|
371
|
+
if not sep_match:
|
|
372
|
+
return text
|
|
373
|
+
insert_at = heading.end() + sep_match.end()
|
|
374
|
+
row = f"| {new_version} | {date.today()} | Jira/Confluence | {note} | — |\n"
|
|
375
|
+
return text[:insert_at] + row + text[insert_at:]
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
def _patch_marker(md_path: Path, nnn: str, answer: str) -> bool:
|
|
379
|
+
"""Replace `[NEEDS CLARIFICATION-{nnn}: ...]` with the answer text in
|
|
380
|
+
md_path, bumping its version + Version History. Returns True if a
|
|
381
|
+
matching marker was found and patched, False otherwise (already
|
|
382
|
+
resolved, or nnn doesn't exist in this file)."""
|
|
383
|
+
if not md_path.exists():
|
|
384
|
+
return False
|
|
385
|
+
text = md_path.read_text()
|
|
386
|
+
pattern = re.compile(r'\[NEEDS CLARIFICATION-' + re.escape(nnn) + r':\s*[^\]]*\]')
|
|
387
|
+
if not pattern.search(text):
|
|
388
|
+
return False
|
|
389
|
+
new_text = pattern.sub(lambda _m: answer, text, count=1)
|
|
390
|
+
new_text = _bump_version_and_log(new_text, f"NC-{nnn} resolved via Jira/Confluence comment")
|
|
391
|
+
md_path.write_text(new_text)
|
|
392
|
+
return True
|
|
393
|
+
|
|
394
|
+
|
|
301
395
|
def _ensure_epic(jira_client: JiraClient, jira_cfg, feature_name: str) -> str | None:
|
|
302
396
|
"""Create the Feature/Epic container if it doesn't already exist yet,
|
|
303
397
|
using the same content and idempotency label `sdd jira push` uses — so a
|
|
@@ -486,9 +580,27 @@ def review_submit(doc, profile, feature):
|
|
|
486
580
|
_apply_team_field(fields, cfg.jira, "review")
|
|
487
581
|
|
|
488
582
|
if existing:
|
|
583
|
+
# If this ticket started life as an `sdd review push-questions`
|
|
584
|
+
# "open questions" ticket (same idempotency label -- see that
|
|
585
|
+
# command), the fields update above already retitles/redescribes
|
|
586
|
+
# it into a normal review request. Post a comment marking the
|
|
587
|
+
# transition explicitly so the reviewer's ticket history shows
|
|
588
|
+
# why the ticket suddenly changed shape, rather than reusing it
|
|
589
|
+
# silently -- the "same ticket evolves in place" behavior a user
|
|
590
|
+
# asked for, without ever creating a second ticket for one doc.
|
|
591
|
+
was_open_questions = "sdd-open-questions" in (existing.get("fields", {}).get("labels") or [])
|
|
489
592
|
jira_client.update_issue(existing["key"], fields)
|
|
490
593
|
story_key = existing["key"]
|
|
491
594
|
console.print(f" [dim]·[/dim] Jira review story updated: [cyan]{story_key}[/cyan]")
|
|
595
|
+
if was_open_questions:
|
|
596
|
+
try:
|
|
597
|
+
jira_client.add_comment(
|
|
598
|
+
story_key,
|
|
599
|
+
f"All open questions resolved — {doc.upper()} has been updated "
|
|
600
|
+
f"and is now ready for full review.",
|
|
601
|
+
)
|
|
602
|
+
except Exception:
|
|
603
|
+
pass # best-effort notification only; the ticket update above already succeeded
|
|
492
604
|
else:
|
|
493
605
|
result = jira_client.create_issue(fields)
|
|
494
606
|
story_key = result["key"]
|
|
@@ -511,6 +623,241 @@ def review_submit(doc, profile, feature):
|
|
|
511
623
|
console.print()
|
|
512
624
|
|
|
513
625
|
|
|
626
|
+
# ── sdd review push-questions ───────────────────────────────────────────────────
|
|
627
|
+
|
|
628
|
+
@review_command.command("push-questions")
|
|
629
|
+
@click.option("--doc", required=True,
|
|
630
|
+
help="Document key whose blocking gate produced open questions, e.g. validate")
|
|
631
|
+
@click.option("--profile", default=None)
|
|
632
|
+
@click.option("--feature", default=None)
|
|
633
|
+
def review_push_questions(doc, profile, feature):
|
|
634
|
+
"""Push a blocked document's open [NEEDS CLARIFICATION-NNN] questions to
|
|
635
|
+
Jira + Confluence, so a reviewer can answer them without waiting for
|
|
636
|
+
the doc's own gate to clear first. Uses the same idempotency label
|
|
637
|
+
`sdd review submit` looks for -- once every question is answered and
|
|
638
|
+
the doc unblocks, `sdd review submit --doc {doc}` finds and evolves
|
|
639
|
+
this same ticket in place instead of creating a second one."""
|
|
640
|
+
console.print()
|
|
641
|
+
console.print("[bold]━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[/bold]")
|
|
642
|
+
console.print(f" [bold cyan]Push Open Questions[/bold cyan] — {doc.upper()}")
|
|
643
|
+
console.print("[bold]━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[/bold]")
|
|
644
|
+
console.print()
|
|
645
|
+
|
|
646
|
+
try:
|
|
647
|
+
cfg = load_integrations()
|
|
648
|
+
except FileNotFoundError as e:
|
|
649
|
+
console.print(f" [red]✗ {e}[/red]")
|
|
650
|
+
raise SystemExit(1)
|
|
651
|
+
|
|
652
|
+
if doc not in cfg.document_reviews:
|
|
653
|
+
console.print(
|
|
654
|
+
f" [red]✗ '{doc}' not in document_reviews in integrations.yml[/red]\n"
|
|
655
|
+
f" Available: {', '.join(cfg.document_reviews)}"
|
|
656
|
+
)
|
|
657
|
+
raise SystemExit(1)
|
|
658
|
+
if not cfg.jira:
|
|
659
|
+
console.print(" [red]✗ jira: section required in integrations.yml[/red]")
|
|
660
|
+
raise SystemExit(1)
|
|
661
|
+
|
|
662
|
+
manifest = read_manifest() or {}
|
|
663
|
+
proj = manifest.get("project") or {}
|
|
664
|
+
project_name = proj.get("name", "Project")
|
|
665
|
+
feature_name = feature or proj.get("feature", "")
|
|
666
|
+
|
|
667
|
+
try:
|
|
668
|
+
md_path = resolve_doc_path(doc, feature_name)
|
|
669
|
+
except ValueError as e:
|
|
670
|
+
console.print(f" [red]✗ {e}[/red]")
|
|
671
|
+
raise SystemExit(1)
|
|
672
|
+
if not md_path.exists():
|
|
673
|
+
console.print(f" [red]✗ {md_path} not found[/red]")
|
|
674
|
+
raise SystemExit(1)
|
|
675
|
+
|
|
676
|
+
items = _parse_open_questions(md_path.read_text())
|
|
677
|
+
if not items:
|
|
678
|
+
console.print(
|
|
679
|
+
f" [dim]No open [NEEDS CLARIFICATION-NNN] items found in {md_path.name} — nothing to push.[/dim]"
|
|
680
|
+
)
|
|
681
|
+
raise SystemExit(0)
|
|
682
|
+
|
|
683
|
+
try:
|
|
684
|
+
prof = load_profile(profile or cfg.profile)
|
|
685
|
+
session = build_session(prof)
|
|
686
|
+
except Exception as e:
|
|
687
|
+
console.print(f" [red]✗ Auth error: {e}[/red]")
|
|
688
|
+
raise SystemExit(1)
|
|
689
|
+
|
|
690
|
+
jira_client = JiraClient(session, prof.base_url)
|
|
691
|
+
doc_cfg = cfg.document_reviews[doc]
|
|
692
|
+
|
|
693
|
+
# ── Also push the (blocked) doc to Confluence, so reviewers can comment there too ──
|
|
694
|
+
page_title = None
|
|
695
|
+
if cfg.confluence:
|
|
696
|
+
try:
|
|
697
|
+
page_title = _push_doc_page(doc, md_path, feature_name)
|
|
698
|
+
except Exception as e:
|
|
699
|
+
console.print(f" [yellow]! Confluence push failed: {e}[/yellow]")
|
|
700
|
+
|
|
701
|
+
# ── Ensure a Feature/Epic exists (same as review_submit) ──────────────────
|
|
702
|
+
epic_key = _ensure_epic(jira_client, cfg.jira, feature_name)
|
|
703
|
+
|
|
704
|
+
# ── Create / update the SAME ticket review_submit will later find ─────────
|
|
705
|
+
# Same idempotency_label as review_submit uses for --doc {doc} -- this
|
|
706
|
+
# is what makes the ticket "evolve in place" later, with zero extra
|
|
707
|
+
# bookkeeping: review_submit's own find-by-label lookup will discover
|
|
708
|
+
# this ticket and update its fields, rather than creating a second one.
|
|
709
|
+
idempotency_label = f"sdd-doc:{feature_name}:{doc}"
|
|
710
|
+
review_project_key = cfg.jira.key_for("review")
|
|
711
|
+
existing = jira_client.find_by_label(review_project_key, idempotency_label)
|
|
712
|
+
|
|
713
|
+
table_lines = "\n".join(f"{it['id']}: {it['question']}" for it in items)
|
|
714
|
+
desc_text = (
|
|
715
|
+
f"{doc.upper()} is blocked on {len(items)} open question(s) before it can "
|
|
716
|
+
f"go to full review.\n\n"
|
|
717
|
+
f"Answer each item as a comment on THIS ticket, one line per item, "
|
|
718
|
+
f"starting with its ID:\n\n{table_lines}\n\n"
|
|
719
|
+
f"Example: \"{items[0]['id']}: <your answer>\"\n\n"
|
|
720
|
+
f"Once every item is answered, re-run /validate — it pulls the answers "
|
|
721
|
+
f"automatically, updates the spec, and re-checks."
|
|
722
|
+
)
|
|
723
|
+
fields: dict = {
|
|
724
|
+
"project": {"key": review_project_key},
|
|
725
|
+
"issuetype": {"name": cfg.jira.issue_hierarchy.get("story", "Story")},
|
|
726
|
+
"summary": f"Open Questions: {project_name} — {doc.upper()}",
|
|
727
|
+
"labels": cfg.jira.labels + ["sdd-review", "sdd-open-questions", idempotency_label],
|
|
728
|
+
"description": {
|
|
729
|
+
"type": "doc", "version": 1,
|
|
730
|
+
"content": [{"type": "paragraph", "content": [
|
|
731
|
+
{"type": "text", "text": desc_text}
|
|
732
|
+
]}],
|
|
733
|
+
},
|
|
734
|
+
}
|
|
735
|
+
if doc_cfg.reviewer_jira_user:
|
|
736
|
+
fields["assignee"] = {"accountId": doc_cfg.reviewer_jira_user}
|
|
737
|
+
from sdd.commands.jira import _apply_team_field
|
|
738
|
+
_apply_team_field(fields, cfg.jira, "review")
|
|
739
|
+
|
|
740
|
+
if existing:
|
|
741
|
+
jira_client.update_issue(existing["key"], fields)
|
|
742
|
+
issue_key = existing["key"]
|
|
743
|
+
console.print(f" [dim]·[/dim] Jira ticket updated: [cyan]{issue_key}[/cyan]")
|
|
744
|
+
else:
|
|
745
|
+
result = jira_client.create_issue(fields)
|
|
746
|
+
issue_key = result["key"]
|
|
747
|
+
console.print(f" [green]✓[/green] Jira ticket created: [cyan]{issue_key}[/cyan]")
|
|
748
|
+
|
|
749
|
+
_record_review_link(doc, issue_key)
|
|
750
|
+
if epic_key:
|
|
751
|
+
_link_review_story_to_epic(jira_client, issue_key, epic_key, cfg.jira)
|
|
752
|
+
|
|
753
|
+
issue_url = f"{prof.base_url}/browse/{issue_key}"
|
|
754
|
+
console.print(f" {issue_url}")
|
|
755
|
+
if page_title:
|
|
756
|
+
console.print(f" Also on Confluence: [cyan]{page_title}[/cyan]")
|
|
757
|
+
console.print(
|
|
758
|
+
f" Assigned to: [cyan]{doc_cfg.reviewer_role}[/cyan]"
|
|
759
|
+
f" [dim]({doc_cfg.reviewer_jira_user})[/dim]"
|
|
760
|
+
)
|
|
761
|
+
console.print()
|
|
762
|
+
console.print(f" [bold]{len(items)} open question(s)[/bold] pushed. Reviewer replies as a comment")
|
|
763
|
+
console.print(f" starting with the item's ID, e.g. \"{items[0]['id']}: <answer>\".")
|
|
764
|
+
console.print(f" Run [cyan]sdd review pull-answers --doc {doc}[/cyan] (or just re-run /validate) once answered.")
|
|
765
|
+
console.print()
|
|
766
|
+
|
|
767
|
+
|
|
768
|
+
# ── sdd review pull-answers ──────────────────────────────────────────────────────
|
|
769
|
+
|
|
770
|
+
@review_command.command("pull-answers")
|
|
771
|
+
@click.option("--doc", required=True)
|
|
772
|
+
@click.option("--profile", default=None)
|
|
773
|
+
@click.option("--feature", default=None)
|
|
774
|
+
def review_pull_answers(doc, profile, feature):
|
|
775
|
+
"""Pull Jira comments answering a blocked document's open
|
|
776
|
+
[NEEDS CLARIFICATION-NNN] questions and patch them directly into the
|
|
777
|
+
source docs (e.g. brd.md/use-cases.md/srd.md for --doc validate).
|
|
778
|
+
Safe to call unconditionally before re-scanning -- exits 0 quietly
|
|
779
|
+
whenever there's nothing to do (not configured, no ticket yet, no new
|
|
780
|
+
answers)."""
|
|
781
|
+
console.print()
|
|
782
|
+
|
|
783
|
+
try:
|
|
784
|
+
cfg = load_integrations()
|
|
785
|
+
except FileNotFoundError:
|
|
786
|
+
raise SystemExit(0)
|
|
787
|
+
|
|
788
|
+
if doc not in cfg.document_reviews or not cfg.jira:
|
|
789
|
+
raise SystemExit(0)
|
|
790
|
+
|
|
791
|
+
manifest = read_manifest() or {}
|
|
792
|
+
proj = manifest.get("project") or {}
|
|
793
|
+
feature_name = feature or proj.get("feature", "")
|
|
794
|
+
|
|
795
|
+
try:
|
|
796
|
+
md_path = resolve_doc_path(doc, feature_name)
|
|
797
|
+
except ValueError:
|
|
798
|
+
raise SystemExit(0)
|
|
799
|
+
if not md_path.exists():
|
|
800
|
+
raise SystemExit(0)
|
|
801
|
+
|
|
802
|
+
items = _parse_open_questions(md_path.read_text())
|
|
803
|
+
if not items:
|
|
804
|
+
raise SystemExit(0)
|
|
805
|
+
|
|
806
|
+
links = _load_review_links()
|
|
807
|
+
issue_key = (links.get(doc) or {}).get("key")
|
|
808
|
+
if not issue_key:
|
|
809
|
+
console.print(
|
|
810
|
+
f" [dim]· No Jira ticket recorded for {doc} yet — "
|
|
811
|
+
f"run `sdd review push-questions --doc {doc}` first.[/dim]"
|
|
812
|
+
)
|
|
813
|
+
raise SystemExit(0)
|
|
814
|
+
|
|
815
|
+
try:
|
|
816
|
+
prof = load_profile(profile or cfg.profile)
|
|
817
|
+
session = build_session(prof)
|
|
818
|
+
except Exception:
|
|
819
|
+
raise SystemExit(0)
|
|
820
|
+
|
|
821
|
+
jira_client = JiraClient(session, prof.base_url)
|
|
822
|
+
try:
|
|
823
|
+
comments = jira_client.get_comments(issue_key)
|
|
824
|
+
except Exception as e:
|
|
825
|
+
console.print(f" [yellow]! Could not fetch comments from {issue_key}: {e}[/yellow]")
|
|
826
|
+
raise SystemExit(0)
|
|
827
|
+
|
|
828
|
+
answers = _parse_answers(comments)
|
|
829
|
+
if not answers:
|
|
830
|
+
raise SystemExit(0)
|
|
831
|
+
|
|
832
|
+
patched_docs: dict[str, int] = {}
|
|
833
|
+
for item in items:
|
|
834
|
+
# The reviewer only ever cites the row's primary ID (item["id"]) --
|
|
835
|
+
# that single answer must propagate to every location listed for
|
|
836
|
+
# this question, not just the one the reviewer happened to name
|
|
837
|
+
# (a multi-location row exists specifically so one answer can
|
|
838
|
+
# resolve a question duplicated across several docs at once).
|
|
839
|
+
if item["id"] not in answers:
|
|
840
|
+
continue
|
|
841
|
+
answer_text = answers[item["id"]]
|
|
842
|
+
for loc_id in item["locations"]:
|
|
843
|
+
doc_key, nnn = loc_id.split(":NC-")
|
|
844
|
+
try:
|
|
845
|
+
loc_path = resolve_doc_path(doc_key, feature_name)
|
|
846
|
+
except ValueError:
|
|
847
|
+
continue
|
|
848
|
+
if _patch_marker(loc_path, nnn, answer_text):
|
|
849
|
+
patched_docs[doc_key] = patched_docs.get(doc_key, 0) + 1
|
|
850
|
+
console.print(f" [green]✓[/green] {loc_id} resolved in {loc_path.name}")
|
|
851
|
+
|
|
852
|
+
if patched_docs:
|
|
853
|
+
total = sum(patched_docs.values())
|
|
854
|
+
console.print(
|
|
855
|
+
f" [bold]{total} item(s) resolved[/bold] across "
|
|
856
|
+
f"{len(patched_docs)} document(s): {', '.join(patched_docs)}"
|
|
857
|
+
)
|
|
858
|
+
console.print()
|
|
859
|
+
|
|
860
|
+
|
|
514
861
|
# ── sdd review check ───────────────────────────────────────────────────────────
|
|
515
862
|
|
|
516
863
|
@review_command.command("check")
|
|
@@ -2064,6 +2064,59 @@ MIGRATIONS = [
|
|
|
2064
2064
|
],
|
|
2065
2065
|
"migrate": lambda m: {**m, "sdd_version": "2.7.52"},
|
|
2066
2066
|
},
|
|
2067
|
+
{
|
|
2068
|
+
"from": "2.7.52",
|
|
2069
|
+
"to": "2.7.53",
|
|
2070
|
+
"description": "Feature: blocked documents (e.g. validate.md, on unresolved [NEEDS CLARIFICATION-NNN] markers) can now collect reviewer answers via Jira/Confluence instead of only direct chat/doc edits -- no manifest schema changes",
|
|
2071
|
+
"notes": [
|
|
2072
|
+
"User-requested: a document like validate.md can be blocked "
|
|
2073
|
+
"before it's ever submitted for formal review (brd.md/"
|
|
2074
|
+
"use-cases.md/srd.md still have unresolved [NEEDS "
|
|
2075
|
+
"CLARIFICATION] markers) -- previously there was no way to "
|
|
2076
|
+
"route those specific open questions through Jira/Confluence "
|
|
2077
|
+
"the way an already-submitted document's reviewer comments "
|
|
2078
|
+
"already could",
|
|
2079
|
+
"[NEEDS CLARIFICATION] markers are now numbered locally per "
|
|
2080
|
+
"document -- [NEEDS CLARIFICATION-NNN: {question}] -- "
|
|
2081
|
+
"matching the [ASSUMPTION-NNN] convention already in use. "
|
|
2082
|
+
"This gives every marker a stable, doc-qualified ID "
|
|
2083
|
+
"({doc}:NC-{NNN}, e.g. brd:NC-002) that a reviewer's answer "
|
|
2084
|
+
"can cite exactly, instead of matching by paraphrased "
|
|
2085
|
+
"question text",
|
|
2086
|
+
"New sdd review push-questions --doc {doc}: parses a blocked "
|
|
2087
|
+
"document's | ID | Locations | Question | table (see "
|
|
2088
|
+
"validate.prompt.md's §3a-BLOCKING) and creates/updates one "
|
|
2089
|
+
"Jira ticket + Confluence page. Uses the SAME idempotency "
|
|
2090
|
+
"label sdd review submit looks for, so once every question "
|
|
2091
|
+
"is answered and the document unblocks, sdd review submit "
|
|
2092
|
+
"finds and evolves this same ticket in place (posting a "
|
|
2093
|
+
"transition comment) instead of creating a second one",
|
|
2094
|
+
"New sdd review pull-answers --doc {doc}: fetches comments "
|
|
2095
|
+
"from that ticket, matches lines like 'brd:NC-002: <answer>' "
|
|
2096
|
+
"against the open items, and patches each answered "
|
|
2097
|
+
"[NEEDS CLARIFICATION-NNN] marker directly into its source "
|
|
2098
|
+
"document -- bumping that document's Version header and "
|
|
2099
|
+
"appending a Version History row. A question asked in more "
|
|
2100
|
+
"than one document (a Locations column listing more than one "
|
|
2101
|
+
"ID) gets the same answer applied to every one of them from "
|
|
2102
|
+
"a single reviewer reply",
|
|
2103
|
+
"validate.prompt.md (all 5 packs, not a shared file) updated: "
|
|
2104
|
+
"§3a-BLOCKING now calls pull-answers before re-scanning and "
|
|
2105
|
+
"push-questions after detecting a block, and its table cites "
|
|
2106
|
+
"doc-qualified marker IDs instead of an ad-hoc Q1..Q7 scheme",
|
|
2107
|
+
"specify-brd/specify-uc/specify-srd/specify-doc.prompt.md "
|
|
2108
|
+
"(shared) and the submit-for-review-step block updated for "
|
|
2109
|
+
"the new marker numbering and ID-based comment matching",
|
|
2110
|
+
"23 new tests in test_review_helpers.py: table/answer "
|
|
2111
|
+
"parsing, marker patching (version bump + Version History, "
|
|
2112
|
+
"multi-location propagation, legacy/missing-marker "
|
|
2113
|
+
"tolerance), and the push-questions -> submit same-ticket "
|
|
2114
|
+
"transition end-to-end",
|
|
2115
|
+
"This migration only bumps sdd_version -- no manifest.yml "
|
|
2116
|
+
"field changes for any pack",
|
|
2117
|
+
],
|
|
2118
|
+
"migrate": lambda m: {**m, "sdd_version": "2.7.53"},
|
|
2119
|
+
},
|
|
2067
2120
|
]
|
|
2068
2121
|
|
|
2069
2122
|
|
|
@@ -34,7 +34,11 @@ Generate `brd.md` for the current feature:
|
|
|
34
34
|
- Every non-functional requirement: **NFR-NNN** — must include a measurable target (e.g. "< 200ms p99", "99.9% uptime")
|
|
35
35
|
- Marker discipline:
|
|
36
36
|
- `[ASSUMPTION-NNN: {what}]` — safe default applied; needs sign-off
|
|
37
|
-
- `[NEEDS CLARIFICATION: {question}]` — no safe default; human decision
|
|
37
|
+
- `[NEEDS CLARIFICATION-NNN: {question}]` — no safe default; human decision
|
|
38
|
+
required before /validate. NNN is numbered locally within this document
|
|
39
|
+
(NC-001, NC-002, ... — continue the count on a later re-run/amendment,
|
|
40
|
+
never reuse a resolved ID) so a reviewer's answer (in Jira, Confluence,
|
|
41
|
+
or chat) can cite the exact marker unambiguously, e.g. "NC-002: 90 days".
|
|
38
42
|
- Never leave a gap silently — always use one of the two markers
|
|
39
43
|
- Save to: `.specify/features/{manifest.project.feature}/brd.md`
|
|
40
44
|
- Write `.specify/features/{manifest.project.feature}/brd.summary.md` (max SUMMARY_MAX_LINES lines)
|
|
@@ -93,8 +97,11 @@ sdd confluence draft --doc {doc_key}
|
|
|
93
97
|
|
|
94
98
|
When the user says **"done"**: run `sdd confluence pull --doc {doc_key}`
|
|
95
99
|
automatically. If the pulled file contains a `## Confluence Comments`
|
|
96
|
-
section,
|
|
97
|
-
|
|
100
|
+
section, match each comment against the marker ID it cites (e.g. a comment
|
|
101
|
+
starting "NC-002: ..." answers `[NEEDS CLARIFICATION-002: ...]`; older
|
|
102
|
+
comments with no cited ID fall back to matching by nearest question text),
|
|
103
|
+
resolve the corresponding `[NEEDS CLARIFICATION-NNN]`/`[ASSUMPTION-NNN]`
|
|
104
|
+
marker, update the document, remove the comments section, and re-save
|
|
98
105
|
the document and its `.summary.md`. Then present it and ask for
|
|
99
106
|
**'approved'**.
|
|
100
107
|
|
|
@@ -49,7 +49,8 @@ Generate `{doc}.md`:
|
|
|
49
49
|
- Use `.specify/templates/{doc}-template.md`
|
|
50
50
|
- Derive all content from `brd.summary.md` + `srd.summary.md` + `constitution.md`
|
|
51
51
|
- Be consistent with every decision already made in BRD and SRD — flag any contradiction rather than silently resolving it
|
|
52
|
-
- Marker discipline (same as BRD/SRD — `[ASSUMPTION-NNN]` / `[NEEDS CLARIFICATION]
|
|
52
|
+
- Marker discipline (same as BRD/SRD — `[ASSUMPTION-NNN]` / `[NEEDS CLARIFICATION-NNN]`,
|
|
53
|
+
NNN numbered locally within this document)
|
|
53
54
|
|
|
54
55
|
**`data-model` and `security` / `security-design` are living, service-level
|
|
55
56
|
documents — not per-feature.** They describe the one schema and the one
|
|
@@ -230,8 +231,11 @@ sdd confluence draft --doc {doc_key}
|
|
|
230
231
|
|
|
231
232
|
When the user says **"done"**: run `sdd confluence pull --doc {doc_key}`
|
|
232
233
|
automatically. If the pulled file contains a `## Confluence Comments`
|
|
233
|
-
section,
|
|
234
|
-
|
|
234
|
+
section, match each comment against the marker ID it cites (e.g. a comment
|
|
235
|
+
starting "NC-002: ..." answers `[NEEDS CLARIFICATION-002: ...]`; older
|
|
236
|
+
comments with no cited ID fall back to matching by nearest question text),
|
|
237
|
+
resolve the corresponding `[NEEDS CLARIFICATION-NNN]`/`[ASSUMPTION-NNN]`
|
|
238
|
+
marker, update the document, remove the comments section, and re-save
|
|
235
239
|
the document and its `.summary.md`. Then present it and ask for
|
|
236
240
|
**'approved'**.
|
|
237
241
|
|
|
@@ -63,7 +63,8 @@ categories).
|
|
|
63
63
|
that's a Constitution Amendment — flag it and follow the amendment flow
|
|
64
64
|
in `specify.prompt.md`, don't silently overwrite the row.
|
|
65
65
|
|
|
66
|
-
- Marker discipline (same as BRD — `[ASSUMPTION-NNN]` / `[NEEDS CLARIFICATION]
|
|
66
|
+
- Marker discipline (same as BRD — `[ASSUMPTION-NNN]` / `[NEEDS CLARIFICATION-NNN]`,
|
|
67
|
+
NNN numbered locally within this document)
|
|
67
68
|
- Save to: `.specify/features/{manifest.project.feature}/srd.md`
|
|
68
69
|
- Write `.specify/features/{manifest.project.feature}/srd.summary.md` (max SUMMARY_MAX_LINES lines)
|
|
69
70
|
|
|
@@ -130,8 +131,11 @@ sdd confluence draft --doc {doc_key}
|
|
|
130
131
|
|
|
131
132
|
When the user says **"done"**: run `sdd confluence pull --doc {doc_key}`
|
|
132
133
|
automatically. If the pulled file contains a `## Confluence Comments`
|
|
133
|
-
section,
|
|
134
|
-
|
|
134
|
+
section, match each comment against the marker ID it cites (e.g. a comment
|
|
135
|
+
starting "NC-002: ..." answers `[NEEDS CLARIFICATION-002: ...]`; older
|
|
136
|
+
comments with no cited ID fall back to matching by nearest question text),
|
|
137
|
+
resolve the corresponding `[NEEDS CLARIFICATION-NNN]`/`[ASSUMPTION-NNN]`
|
|
138
|
+
marker, update the document, remove the comments section, and re-save
|
|
135
139
|
the document and its `.summary.md`. Then present it and ask for
|
|
136
140
|
**'approved'**.
|
|
137
141
|
|
|
@@ -70,7 +70,9 @@ Generate `use-cases.md` for the current feature:
|
|
|
70
70
|
UC-NNN, plus a relationship table with trigger/condition for each link; if no
|
|
71
71
|
relationships exist, state "No relationships — all use cases are independent."
|
|
72
72
|
- §5 Traceability Matrix — UC-NNN → BR-NNN (from BRD)
|
|
73
|
-
- Marker discipline: `[ASSUMPTION-NNN]` for assumptions, `[NEEDS CLARIFICATION: {question}]`
|
|
73
|
+
- Marker discipline: `[ASSUMPTION-NNN]` for assumptions, `[NEEDS CLARIFICATION-NNN: {question}]`
|
|
74
|
+
for gaps (NNN numbered locally within this document — see specify-brd.prompt.md's
|
|
75
|
+
marker discipline note for the full rule)
|
|
74
76
|
|
|
75
77
|
Save to: `.specify/features/{manifest.project.feature}/use-cases.md`
|
|
76
78
|
Write `.specify/features/{manifest.project.feature}/use-cases.summary.md` (max SUMMARY_MAX_LINES lines)
|
|
@@ -147,8 +149,11 @@ sdd confluence draft --doc {doc_key}
|
|
|
147
149
|
|
|
148
150
|
When the user says **"done"**: run `sdd confluence pull --doc {doc_key}`
|
|
149
151
|
automatically. If the pulled file contains a `## Confluence Comments`
|
|
150
|
-
section,
|
|
151
|
-
|
|
152
|
+
section, match each comment against the marker ID it cites (e.g. a comment
|
|
153
|
+
starting "NC-002: ..." answers `[NEEDS CLARIFICATION-002: ...]`; older
|
|
154
|
+
comments with no cited ID fall back to matching by nearest question text),
|
|
155
|
+
resolve the corresponding `[NEEDS CLARIFICATION-NNN]`/`[ASSUMPTION-NNN]`
|
|
156
|
+
marker, update the document, remove the comments section, and re-save
|
|
152
157
|
the document and its `.summary.md`. Then present it and ask for
|
|
153
158
|
**'approved'**.
|
|
154
159
|
|