sddflow 2.7.58__tar.gz → 2.7.60__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.58 → sddflow-2.7.60}/PKG-INFO +1 -1
- {sddflow-2.7.58 → sddflow-2.7.60}/pyproject.toml +1 -1
- sddflow-2.7.60/sdd/__init__.py +1 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/commands/dashboard.py +1 -1
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/commands/review.py +271 -68
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/commands/upgrade.py +74 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/clarify.prompt.md +11 -0
- {sddflow-2.7.58/sdd/packs/sdd-frontend-spa → sddflow-2.7.60/sdd/packs/sdd-backend-service}/.specify/integrations.yml.example +7 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/manifest.yml +1 -1
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/CLAUDE.md +9 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/HOW-TO-USE.md +14 -0
- {sddflow-2.7.58/sdd/packs/sdd-fullstack → sddflow-2.7.60/sdd/packs/sdd-frontend-spa}/.github/prompts/clarify.prompt.md +11 -0
- {sddflow-2.7.58/sdd/packs/sdd-fullstack → sddflow-2.7.60/sdd/packs/sdd-frontend-spa}/.specify/integrations.yml.example +7 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/manifest.yml +1 -1
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/CLAUDE.md +9 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/HOW-TO-USE.md +14 -0
- {sddflow-2.7.58/sdd/packs/sdd-frontend-spa → sddflow-2.7.60/sdd/packs/sdd-fullstack}/.github/prompts/clarify.prompt.md +11 -0
- {sddflow-2.7.58/sdd/packs/sdd-backend-service → sddflow-2.7.60/sdd/packs/sdd-fullstack}/.specify/integrations.yml.example +7 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/manifest.yml +1 -1
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/CLAUDE.md +9 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/HOW-TO-USE.md +14 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/clarify.prompt.md +11 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/integrations.yml.example +7 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/manifest.yml +1 -1
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/CLAUDE.md +9 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/HOW-TO-USE.md +14 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/clarify.prompt.md +11 -0
- sddflow-2.7.60/sdd/packs/sdd-universal/.specify/integrations.yml.example +464 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/manifest.yml +1 -1
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/CLAUDE.md +9 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/HOW-TO-USE.md +14 -0
- sddflow-2.7.58/sdd/__init__.py +0 -1
- sddflow-2.7.58/sdd/packs/sdd-universal/.specify/integrations.yml.example +0 -457
- {sddflow-2.7.58 → sddflow-2.7.60}/.gitignore +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/README.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/__main__.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/commands/__init__.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/commands/config.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/commands/confluence.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/commands/cr.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/commands/init.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/commands/jira.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/commands/pr.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/ava.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/change.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/implement.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/kai.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/leo.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/maya.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/release.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/rex.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/riley.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/specify.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/start.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/task.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.claude/commands/validate.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/instructions/api.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/instructions/domain.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/instructions/java.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/instructions/tests.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/analyze.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/specify-brd.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/specify-doc.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/specify-srd.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/specify-uc.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/validate.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.gitignore +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.gitlab-ci.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/clarify-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/k8s-manifest-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/openapi-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.vscode/extensions.json +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.windsurfrules +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/CLAUDE.local.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/IMPROVEMENT-BACKLOG.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/PROMPT-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/QUICKSTART.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/README.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/WHY-SDD.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/azure-pipelines.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/setup.ps1 +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/setup.sh +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/ava.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/change.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/implement.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/kai.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/leo.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/maya.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/release.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/rex.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/riley.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/specify.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/start.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/task.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.claude/commands/validate.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/instructions/components.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/instructions/services.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/instructions/tests.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/analyze.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/specify-brd.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/specify-doc.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/specify-srd.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/specify-uc.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/prompts/validate.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.gitignore +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.gitlab-ci.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/clarify-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/component-library-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/component-spec-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/ux-flow-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.vscode/extensions.json +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/.windsurfrules +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/CLAUDE.local.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/IMPROVEMENT-BACKLOG.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/PROMPT-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/QUICKSTART.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/README.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/WHY-SDD.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/azure-pipelines.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/setup.ps1 +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-frontend-spa/setup.sh +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/ava.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/change.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/implement.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/kai.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/leo.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/maya.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/release.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/rex.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/riley.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/specify.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/start.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/task.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.claude/commands/validate.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/instructions/backend-tests.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/instructions/components.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/instructions/domain.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/instructions/frontend-services.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/instructions/java.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/analyze.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/specify-brd.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/specify-doc.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/specify-srd.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/specify-uc.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/prompts/validate.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.gitignore +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.gitlab-ci.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/clarify-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/component-library-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/component-spec-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/openapi-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/screen-spec-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/ux-flow-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.vscode/extensions.json +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/.windsurfrules +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/CLAUDE.local.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/PROMPT-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/QUICKSTART.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/README.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/WHY-SDD.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/azure-pipelines.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/setup.ps1 +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-fullstack/setup.sh +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.claude/commands/implement.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.claude/commands/specify.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.claude/commands/start.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.claude/commands/task.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.specify/manifest.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/.windsurfrules +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/CLAUDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/QUICKSTART.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/README.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/WHY-SDD.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/setup.ps1 +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-micro/setup.sh +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/ava.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/change.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/implement.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/kai.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/leo.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/maya.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/release.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/rex.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/riley.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/specify.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/start.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/task.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.claude/commands/validate.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/instructions/screens.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/instructions/services.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/instructions/tests.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/analyze.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/specify-brd.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/specify-doc.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/specify-srd.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/specify-uc.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/prompts/validate.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.gitignore +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.gitlab-ci.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/clarify-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/screen-spec-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/ux-flow-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.vscode/extensions.json +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/.windsurfrules +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/CLAUDE.local.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/IMPROVEMENT-BACKLOG.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/PROMPT-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/QUICKSTART.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/README.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/WHY-SDD.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/azure-pipelines.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/setup.ps1 +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-mobile/setup.sh +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/address-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/analyze.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/ava.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/bug-assess.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/bug-fix.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/change.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/check-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/checklist.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/clarify.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/create-context.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/implement.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/jira-push.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/kai.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/leo.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/maya.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/morgan.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/orchestrate.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/plan-adr.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/plan-arch.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/plan-design.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/plan-hld.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/plan-lld.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/pre-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/quinn.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/release.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/rex.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/riley.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/specify-brd.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/specify-doc.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/specify-srd.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/specify-uc.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/specify.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/start.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/submit-review.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/task.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/taskstoissues.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.claude/commands/validate.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.cursor/rules/sdd-framework.mdc +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/copilot-instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/instructions/domain.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/instructions/entrypoints.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/instructions/tests.instructions.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/address-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/analyze.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/ava.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/bug-assess.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/bug-fix.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/change.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/check-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/checklist.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/create-context.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/implement.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/jira-push.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/kai.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/leo.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/maya.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/morgan.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/orchestrate.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/plan-adr.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/plan-arch.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/plan-design.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/plan-hld.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/plan-lld.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/pre-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/quinn.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/release.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/rex.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/riley.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/specify-brd.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/specify-doc.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/specify-srd.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/specify-uc.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/specify.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/submit-review.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/task.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/taskstoissues.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/prompts/validate.prompt.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.github/workflows/quality-gate.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.gitignore +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.gitlab-ci.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/contexts/CONTEXT-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/memory/change-rules.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/memory/constitution.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/memory/roles.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/memory/summary-rules.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/memory/token-pricing.yml.example +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/adr-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/analyze-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/api-spec-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/arch-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/brd-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/changeset-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/checklist-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/clarify-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/constitution-amendment-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/context-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/data-model-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/design-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/docker-config-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/feature-story-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/hld-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/investigation-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/jira-export-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/k8s-manifest-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/lld-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/openapi-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/plan-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/qa-testcases-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/release-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/resilience-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/runbook-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/security-design-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/srd-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/tasks-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/token-usage-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/use-cases-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.specify/templates/validate-template.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.vscode/extensions.json +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/.windsurfrules +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/CHANGE-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/CLAUDE.local.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/FLOW-ROLES-GATES.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/IMPROVEMENT-BACKLOG.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/PROMPT-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/QUICKSTART.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/README.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/SDLC-COMPLETE-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/WHY-SDD.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/azure-pipelines.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/bitbucket-pipelines.yml +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/docs/SUMMARY-GUIDE.md +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/setup.ps1 +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-universal/setup.sh +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/__init__.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/atlassian_auth.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/cf_to_md.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/confluence_client.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/dashboard_comments.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/detect.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/git_host.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/integrations.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/jira_client.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/manifest.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/md_to_cf.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/mermaid_render.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/scaffold.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/sdd_parser.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/sdd/utils/status.py +0 -0
- {sddflow-2.7.58 → sddflow-2.7.60}/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.60
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.7.60"
|
|
@@ -682,7 +682,7 @@ def _fetch_review_links(feature: str) -> dict:
|
|
|
682
682
|
try:
|
|
683
683
|
issue = jira_client.find_by_label(cfg.jira.key_for("review"), f"sdd-doc:{feature}:{doc_key}")
|
|
684
684
|
if issue:
|
|
685
|
-
review_status, comments = _get_review_status(
|
|
685
|
+
review_status, comments, _ = _get_review_status(
|
|
686
686
|
doc_key, jira_client, cfg.jira.key_for("review"), cfg, feature,
|
|
687
687
|
)
|
|
688
688
|
entry["jira"] = {
|
|
@@ -115,13 +115,40 @@ def _mark_md_approved(md_path: Path) -> bool:
|
|
|
115
115
|
return True
|
|
116
116
|
|
|
117
117
|
|
|
118
|
-
def
|
|
119
|
-
"""
|
|
118
|
+
def _jira_status_banner(issue_key: str, issue_url: str, status: str, role: str) -> str:
|
|
119
|
+
"""Confluence storage-format panel summarizing the Jira review ticket's
|
|
120
|
+
link and current status, prepended to the page body on every push so a
|
|
121
|
+
reviewer can see review state without leaving Confluence."""
|
|
122
|
+
macro_type = {"APPROVED": "success", "NEEDS_REVISION": "warning"}.get(status, "info")
|
|
123
|
+
label = {
|
|
124
|
+
"APPROVED": "Approved",
|
|
125
|
+
"NEEDS_REVISION": "Needs Revision",
|
|
126
|
+
"PENDING": "Pending review",
|
|
127
|
+
}.get(status, status)
|
|
128
|
+
return (
|
|
129
|
+
f'<ac:structured-macro ac:name="{macro_type}">'
|
|
130
|
+
f'<ac:rich-text-body><p>'
|
|
131
|
+
f'<strong>Jira review:</strong> '
|
|
132
|
+
f'<a href="{issue_url}">{issue_key}</a> — <strong>{label}</strong>'
|
|
133
|
+
f' (assigned: {role})'
|
|
134
|
+
f'</p></ac:rich-text-body>'
|
|
135
|
+
f'</ac:structured-macro>'
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def _push_doc_page(doc: str, md_path: Path, feature_name: str) -> tuple[str, str] | None:
|
|
140
|
+
"""Upsert the document's Confluence page so it reflects the current .md.
|
|
120
141
|
|
|
121
|
-
Returns
|
|
122
|
-
configured. Raises on push errors — callers decide how fatal that
|
|
123
|
-
Page title resolution matches `sdd review submit`: document_reviews
|
|
124
|
-
first, then the confluence page_map, then a sensible default.
|
|
142
|
+
Returns (page_title, page_url) on success, or None when Confluence is
|
|
143
|
+
not configured. Raises on push errors — callers decide how fatal that
|
|
144
|
+
is. Page title resolution matches `sdd review submit`: document_reviews
|
|
145
|
+
entry first, then the confluence page_map, then a sensible default.
|
|
146
|
+
|
|
147
|
+
When a Jira review ticket already exists for this doc (jira: configured
|
|
148
|
+
and document_reviews has an entry for it), a status banner linking to
|
|
149
|
+
that ticket is prepended to the page body -- this is what lets a
|
|
150
|
+
reviewer see the Jira link + current status directly on Confluence
|
|
151
|
+
instead of having to check Jira separately."""
|
|
125
152
|
try:
|
|
126
153
|
cfg = load_integrations()
|
|
127
154
|
except FileNotFoundError:
|
|
@@ -147,16 +174,33 @@ def _push_doc_page(doc: str, md_path: Path, feature_name: str) -> str | None:
|
|
|
147
174
|
prof = load_profile(cfg.profile)
|
|
148
175
|
session = build_session(prof)
|
|
149
176
|
cf_client = ConfluenceClient(session, prof.base_url)
|
|
177
|
+
|
|
178
|
+
banner = ""
|
|
179
|
+
if cfg.jira and doc in cfg.document_reviews:
|
|
180
|
+
try:
|
|
181
|
+
jira_client = JiraClient(session, prof.base_url)
|
|
182
|
+
status, _, issue = _get_review_status(
|
|
183
|
+
doc, jira_client, cfg.jira.key_for("review"), cfg, feature_name,
|
|
184
|
+
)
|
|
185
|
+
if issue:
|
|
186
|
+
issue_url = f"{prof.base_url}/browse/{issue['key']}"
|
|
187
|
+
banner = _jira_status_banner(
|
|
188
|
+
issue["key"], issue_url, status, cfg.document_reviews[doc].reviewer_role,
|
|
189
|
+
)
|
|
190
|
+
except Exception:
|
|
191
|
+
pass # banner is a best-effort addition -- never blocks the page push itself
|
|
192
|
+
|
|
150
193
|
body_html, attachments, diagram_warnings = md_to_storage(md_path.read_text(), cfg.confluence.diagrams)
|
|
151
194
|
from sdd.commands.confluence import resolve_doc_parent_id, upload_diagram_attachments
|
|
152
195
|
parent_id = resolve_doc_parent_id(cf_client, cfg.confluence, project_name, feature_name, doc)
|
|
153
196
|
page, _created = cf_client.upsert_page(
|
|
154
|
-
cfg.confluence.space_key, title, body_html, parent_id,
|
|
197
|
+
cfg.confluence.space_key, title, banner + body_html, parent_id,
|
|
155
198
|
)
|
|
156
199
|
upload_diagram_attachments(cf_client, page["id"], attachments)
|
|
157
200
|
for w in diagram_warnings:
|
|
158
201
|
console.print(f" [yellow]! {w}[/yellow]")
|
|
159
|
-
|
|
202
|
+
page_url = f"{prof.base_url}/wiki{page.get('_links', {}).get('webui', '')}"
|
|
203
|
+
return title, page_url
|
|
160
204
|
|
|
161
205
|
|
|
162
206
|
# ── Text extraction ────────────────────────────────────────────────────────────
|
|
@@ -231,29 +275,32 @@ def _get_review_status(
|
|
|
231
275
|
project_key: str,
|
|
232
276
|
cfg: IntegrationsConfig,
|
|
233
277
|
feature_name: str,
|
|
234
|
-
) -> tuple[str, list[dict]]:
|
|
235
|
-
"""Return (status, comments).
|
|
278
|
+
) -> tuple[str, list[dict], dict | None]:
|
|
279
|
+
"""Return (status, comments, issue).
|
|
236
280
|
status: APPROVED | NEEDS_REVISION | PENDING | NOT_SUBMITTED
|
|
281
|
+
issue is the raw Jira issue dict (or None if never submitted) -- callers
|
|
282
|
+
that also need the issue key/link (e.g. the Confluence status banner)
|
|
283
|
+
reuse this instead of a second find_by_label lookup.
|
|
237
284
|
|
|
238
285
|
Label is feature-qualified — must match the label `review_submit` writes,
|
|
239
286
|
or a submitted review would never be found again.
|
|
240
287
|
"""
|
|
241
288
|
issue = client.find_by_label(project_key, f"sdd-doc:{feature_name}:{doc_key}")
|
|
242
289
|
if not issue:
|
|
243
|
-
return "NOT_SUBMITTED", []
|
|
290
|
+
return "NOT_SUBMITTED", [], None
|
|
244
291
|
|
|
245
292
|
jira_status = issue.get("fields", {}).get("status", {}).get("name", "")
|
|
246
293
|
comments = client.get_comments(issue["key"])
|
|
247
294
|
|
|
248
295
|
if jira_status in cfg.approved_statuses:
|
|
249
|
-
return "APPROVED", comments
|
|
296
|
+
return "APPROVED", comments, issue
|
|
250
297
|
|
|
251
298
|
for c in comments:
|
|
252
299
|
text = _extract_text(c.get("body", "")).lower()
|
|
253
300
|
if any(kw in text for kw in cfg.approved_keywords):
|
|
254
|
-
return "APPROVED", comments
|
|
301
|
+
return "APPROVED", comments, issue
|
|
255
302
|
|
|
256
|
-
return ("NEEDS_REVISION" if comments else "PENDING"), comments
|
|
303
|
+
return ("NEEDS_REVISION" if comments else "PENDING"), comments, issue
|
|
257
304
|
|
|
258
305
|
|
|
259
306
|
def _check_predecessor(
|
|
@@ -275,7 +322,7 @@ def _check_predecessor(
|
|
|
275
322
|
if not preds:
|
|
276
323
|
return True, None
|
|
277
324
|
pred_key = preds[0]
|
|
278
|
-
status, _ = _get_review_status(pred_key, client, cfg.jira.key_for("review"), cfg, feature_name)
|
|
325
|
+
status, _, _ = _get_review_status(pred_key, client, cfg.jira.key_for("review"), cfg, feature_name)
|
|
279
326
|
return (status == "APPROVED"), (None if status == "APPROVED" else pred_key)
|
|
280
327
|
|
|
281
328
|
|
|
@@ -426,6 +473,129 @@ def _patch_marker(md_path: Path, nnn: str, answer: str) -> bool:
|
|
|
426
473
|
return True
|
|
427
474
|
|
|
428
475
|
|
|
476
|
+
# ── clarify.md's own open items (AMB/GAP/CON/ASM/OQ/R) ─────────────────────────
|
|
477
|
+
# Unlike validate.md's [NEEDS CLARIFICATION-NNN] markers -- which cite OTHER
|
|
478
|
+
# documents (brd/srd/use-cases) via a `{doc}:NC-{NNN}` ID -- clarify.md's own
|
|
479
|
+
# ambiguities/gaps/conflicts/assumptions/open-questions/risks live entirely in
|
|
480
|
+
# clarify.md itself, tracked by its STATUS TABLE (see clarify-template.md)
|
|
481
|
+
# rather than an inline bracketed marker. push-questions/pull-answers only
|
|
482
|
+
# ever understood the NC-NNN scheme, so clarify.md could never be pushed to
|
|
483
|
+
# Jira for answers the way validate.md already could -- this second, parallel
|
|
484
|
+
# parse/patch pair gives it the same workflow.
|
|
485
|
+
|
|
486
|
+
_CLARIFY_ITEM_CODE = r'(?:AMB|GAP|CON|ASM|OQ|R)-\d+'
|
|
487
|
+
_CLARIFY_STATUS_ROW_RE = re.compile(
|
|
488
|
+
r'^\|\s*(' + _CLARIFY_ITEM_CODE + r')\s*\|\s*([^|]+?)\s*\|\s*([^|]+?)\s*\|\s*OPEN\s*\|\s*$',
|
|
489
|
+
re.MULTILINE | re.IGNORECASE,
|
|
490
|
+
)
|
|
491
|
+
_CLARIFY_ANSWER_LINE_RE = re.compile(
|
|
492
|
+
r'^\s*clarify:(' + _CLARIFY_ITEM_CODE + r')\s*:\s*(.+?)\s*$',
|
|
493
|
+
re.MULTILINE | re.IGNORECASE,
|
|
494
|
+
)
|
|
495
|
+
_CLARIFY_FILL_RE = re.compile(r'\{FILL[^}]*\}')
|
|
496
|
+
|
|
497
|
+
# Terminal STATUS TABLE value per item-type prefix, matching the mapping
|
|
498
|
+
# clarify.prompt.md's own Step 2 uses ("match the item type"). ASM is not
|
|
499
|
+
# listed here -- it's CONFIRMED or CORRECTED depending on the answer itself
|
|
500
|
+
# (the template's own "Correct? Yes / No" framing), handled in
|
|
501
|
+
# _patch_clarify_item rather than a fixed lookup.
|
|
502
|
+
_CLARIFY_TERMINAL_STATUS = {
|
|
503
|
+
"AMB": "RESOLVED",
|
|
504
|
+
"GAP": "RESOLVED",
|
|
505
|
+
"CON": "CORRECTED",
|
|
506
|
+
"OQ": "DECIDED",
|
|
507
|
+
"R": "RESOLVED",
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
|
|
511
|
+
def _clarify_item_block_text(doc_text: str, code: str) -> str | None:
|
|
512
|
+
"""Return the full body of a clarify.md item's own section (from its
|
|
513
|
+
`### {code}: {Topic}` heading up to the next section break -- either a
|
|
514
|
+
`---` divider between type-sections or the next `### ` item heading for
|
|
515
|
+
consecutive same-type items), for posting as the Jira question text.
|
|
516
|
+
Returns the whole block (Found in / Option A / Option B / etc, not just
|
|
517
|
+
one field) since the 5 item types each label their key line
|
|
518
|
+
differently and the reviewer needs full context regardless. None if no
|
|
519
|
+
such heading exists in doc_text."""
|
|
520
|
+
heading = re.search(r'^### ' + re.escape(code) + r':.*$', doc_text, re.MULTILINE)
|
|
521
|
+
if not heading:
|
|
522
|
+
return None
|
|
523
|
+
rest = doc_text[heading.end():]
|
|
524
|
+
end_match = re.search(r'\n---\s*\n|\n### ', rest)
|
|
525
|
+
body = rest[:end_match.start()] if end_match else rest
|
|
526
|
+
return (heading.group(0) + "\n" + body).strip()
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
def _parse_clarify_open_items(doc_text: str) -> list[dict]:
|
|
530
|
+
"""Parse clarify.md's STATUS TABLE for OPEN rows into the same
|
|
531
|
+
{id, locations, question} shape _parse_open_questions returns, so
|
|
532
|
+
push-questions/pull-answers can handle both marker schemes through the
|
|
533
|
+
same downstream Jira/Confluence code. Every clarify item lives in
|
|
534
|
+
clarify.md itself -- "locations" is always just the item's own ID,
|
|
535
|
+
prefixed "clarify:" to match the {doc}:NC-{NNN} convention every
|
|
536
|
+
answer-parsing/console-message call site already expects (e.g. the
|
|
537
|
+
reviewer replies "clarify:AMB-001: <answer>", not "brd:NC-001: ...")."""
|
|
538
|
+
items: list[dict] = []
|
|
539
|
+
for m in _CLARIFY_STATUS_ROW_RE.finditer(doc_text):
|
|
540
|
+
code = m.group(1).strip().upper()
|
|
541
|
+
full_id = f"clarify:{code}"
|
|
542
|
+
question = _clarify_item_block_text(doc_text, code) or f"{m.group(2).strip()}: {m.group(3).strip()}"
|
|
543
|
+
items.append({"id": full_id, "locations": [full_id], "question": question})
|
|
544
|
+
return items
|
|
545
|
+
|
|
546
|
+
|
|
547
|
+
def _parse_clarify_answers(comments: list[dict]) -> dict[str, str]:
|
|
548
|
+
"""Parse every Jira comment for lines like 'clarify:AMB-001: <answer>'.
|
|
549
|
+
A later comment's answer for the same ID overrides an earlier one."""
|
|
550
|
+
answers: dict[str, str] = {}
|
|
551
|
+
for c in comments:
|
|
552
|
+
text = _extract_text(c.get("body", ""))
|
|
553
|
+
for m in _CLARIFY_ANSWER_LINE_RE.finditer(text):
|
|
554
|
+
code, answer = m.group(1).upper(), m.group(2)
|
|
555
|
+
answers[f"clarify:{code}"] = answer
|
|
556
|
+
return answers
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
def _patch_clarify_item(md_path: Path, code: str, answer: str) -> bool:
|
|
560
|
+
"""Fill a clarify.md item's `{FILL...}` placeholder with the reviewer's
|
|
561
|
+
answer and flip its STATUS TABLE row from OPEN to the terminal status
|
|
562
|
+
for its type. Returns True if the item was found and patched, False
|
|
563
|
+
otherwise (already resolved, or code doesn't exist in this file)."""
|
|
564
|
+
if not md_path.exists():
|
|
565
|
+
return False
|
|
566
|
+
text = md_path.read_text()
|
|
567
|
+
|
|
568
|
+
heading = re.search(r'^### ' + re.escape(code) + r':.*$', text, re.MULTILINE)
|
|
569
|
+
if not heading:
|
|
570
|
+
return False
|
|
571
|
+
rest = text[heading.end():]
|
|
572
|
+
end_match = re.search(r'\n---\s*\n|\n### ', rest)
|
|
573
|
+
block_end = heading.end() + (end_match.start() if end_match else len(rest))
|
|
574
|
+
fill_match = _CLARIFY_FILL_RE.search(text, heading.end(), block_end)
|
|
575
|
+
if not fill_match:
|
|
576
|
+
return False # already answered
|
|
577
|
+
|
|
578
|
+
prefix = code.split("-")[0]
|
|
579
|
+
if prefix == "ASM":
|
|
580
|
+
status = "CONFIRMED" if answer.strip().lower().startswith("yes") else "CORRECTED"
|
|
581
|
+
else:
|
|
582
|
+
status = _CLARIFY_TERMINAL_STATUS.get(prefix, "RESOLVED")
|
|
583
|
+
|
|
584
|
+
new_text = text[:fill_match.start()] + answer + text[fill_match.end():]
|
|
585
|
+
|
|
586
|
+
status_row_re = re.compile(
|
|
587
|
+
r'(^\|\s*' + re.escape(code) + r'\s*\|[^|]*\|[^|]*\|)\s*OPEN\s*(\|\s*$)',
|
|
588
|
+
re.MULTILINE | re.IGNORECASE,
|
|
589
|
+
)
|
|
590
|
+
new_text, n = status_row_re.subn(r'\1 ' + status + r' \2', new_text, count=1)
|
|
591
|
+
if n == 0:
|
|
592
|
+
return False # STATUS TABLE row missing/already flipped -- don't half-patch
|
|
593
|
+
|
|
594
|
+
new_text = _bump_version_and_log(new_text, f"{code} resolved via Jira/Confluence comment")
|
|
595
|
+
md_path.write_text(new_text)
|
|
596
|
+
return True
|
|
597
|
+
|
|
598
|
+
|
|
429
599
|
_LEGACY_MARKER_RE = re.compile(r'\[NEEDS CLARIFICATION:\s*')
|
|
430
600
|
|
|
431
601
|
|
|
@@ -688,6 +858,16 @@ def review_submit(doc, profile, feature):
|
|
|
688
858
|
|
|
689
859
|
_record_review_link(doc, story_key)
|
|
690
860
|
|
|
861
|
+
# ── Re-push Confluence with the now-existing Jira link/status banner ──────
|
|
862
|
+
# The first push above (before the ticket existed) couldn't include this --
|
|
863
|
+
# _push_doc_page's own find-by-label lookup will now find the ticket just
|
|
864
|
+
# created/updated and prepend a banner showing its link + live status, so
|
|
865
|
+
# a reviewer sees Jira state without leaving Confluence.
|
|
866
|
+
try:
|
|
867
|
+
_push_doc_page(doc, md_path, feature_name)
|
|
868
|
+
except Exception as e:
|
|
869
|
+
console.print(f" [yellow]! Could not stamp Jira status onto Confluence: {e}[/yellow]")
|
|
870
|
+
|
|
691
871
|
if epic_key:
|
|
692
872
|
_link_review_story_to_epic(jira_client, story_key, epic_key, cfg.jira)
|
|
693
873
|
|
|
@@ -753,11 +933,14 @@ def review_push_questions(doc, profile, feature):
|
|
|
753
933
|
console.print(f" [red]✗ {md_path} not found[/red]")
|
|
754
934
|
raise SystemExit(1)
|
|
755
935
|
|
|
756
|
-
|
|
936
|
+
if doc == "clarify":
|
|
937
|
+
items = _parse_clarify_open_items(md_path.read_text())
|
|
938
|
+
not_found_msg = "No OPEN items found in clarify.md's STATUS TABLE — nothing to push."
|
|
939
|
+
else:
|
|
940
|
+
items = _parse_open_questions(md_path.read_text())
|
|
941
|
+
not_found_msg = f"No open [NEEDS CLARIFICATION-NNN] items found in {md_path.name} — nothing to push."
|
|
757
942
|
if not items:
|
|
758
|
-
console.print(
|
|
759
|
-
f" [dim]No open [NEEDS CLARIFICATION-NNN] items found in {md_path.name} — nothing to push.[/dim]"
|
|
760
|
-
)
|
|
943
|
+
console.print(f" [dim]{not_found_msg}[/dim]")
|
|
761
944
|
raise SystemExit(0)
|
|
762
945
|
|
|
763
946
|
try:
|
|
@@ -774,7 +957,9 @@ def review_push_questions(doc, profile, feature):
|
|
|
774
957
|
page_title = None
|
|
775
958
|
if cfg.confluence:
|
|
776
959
|
try:
|
|
777
|
-
|
|
960
|
+
pushed = _push_doc_page(doc, md_path, feature_name)
|
|
961
|
+
if pushed:
|
|
962
|
+
page_title, _page_url = pushed
|
|
778
963
|
except Exception as e:
|
|
779
964
|
console.print(f" [yellow]! Confluence push failed: {e}[/yellow]")
|
|
780
965
|
|
|
@@ -797,7 +982,7 @@ def review_push_questions(doc, profile, feature):
|
|
|
797
982
|
f"Answer each item as a comment on THIS ticket, one line per item, "
|
|
798
983
|
f"starting with its ID:\n\n{table_lines}\n\n"
|
|
799
984
|
f"Example: \"{items[0]['id']}: <your answer>\"\n\n"
|
|
800
|
-
f"Once every item is answered, re-run /
|
|
985
|
+
f"Once every item is answered, re-run /{doc} — it pulls the answers "
|
|
801
986
|
f"automatically, updates the spec, and re-checks."
|
|
802
987
|
)
|
|
803
988
|
fields: dict = {
|
|
@@ -841,7 +1026,7 @@ def review_push_questions(doc, profile, feature):
|
|
|
841
1026
|
console.print()
|
|
842
1027
|
console.print(f" [bold]{len(items)} open question(s)[/bold] pushed. Reviewer replies as a comment")
|
|
843
1028
|
console.print(f" starting with the item's ID, e.g. \"{items[0]['id']}: <answer>\".")
|
|
844
|
-
console.print(f" Run [cyan]sdd review pull-answers --doc {doc}[/cyan] (or just re-run /
|
|
1029
|
+
console.print(f" Run [cyan]sdd review pull-answers --doc {doc}[/cyan] (or just re-run /{doc}) once answered.")
|
|
845
1030
|
console.print()
|
|
846
1031
|
|
|
847
1032
|
|
|
@@ -879,31 +1064,38 @@ def review_pull_answers(doc, profile, feature):
|
|
|
879
1064
|
if not md_path.exists():
|
|
880
1065
|
raise SystemExit(0)
|
|
881
1066
|
|
|
882
|
-
|
|
1067
|
+
is_clarify = (doc == "clarify")
|
|
1068
|
+
if is_clarify:
|
|
1069
|
+
items = _parse_clarify_open_items(md_path.read_text())
|
|
1070
|
+
else:
|
|
1071
|
+
items = _parse_open_questions(md_path.read_text())
|
|
883
1072
|
if not items:
|
|
884
1073
|
raise SystemExit(0)
|
|
885
1074
|
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
1075
|
+
if not is_clarify:
|
|
1076
|
+
# Retrofit: a doc that predates NEEDS CLARIFICATION-NNN numbering
|
|
1077
|
+
# still has the old unnumbered [NEEDS CLARIFICATION: ...] form, even
|
|
1078
|
+
# though validate.md's table above already displays synthesized
|
|
1079
|
+
# brd:NC-001-style IDs for it (order-of-appearance, same rule) --
|
|
1080
|
+
# number the source file's markers to match before attempting any
|
|
1081
|
+
# patch, or the exact-ID search below would never find them.
|
|
1082
|
+
# clarify.md's own items have no such legacy/numbering concern --
|
|
1083
|
+
# they're tracked by a STATUS TABLE row, not a bracketed marker.
|
|
1084
|
+
referenced_docs = {
|
|
1085
|
+
_normalize_doc_key(loc_id.split(":NC-")[0])
|
|
1086
|
+
for item in items for loc_id in item["locations"]
|
|
1087
|
+
}
|
|
1088
|
+
for doc_key in referenced_docs:
|
|
1089
|
+
try:
|
|
1090
|
+
loc_path = resolve_doc_path(doc_key, feature_name)
|
|
1091
|
+
except ValueError:
|
|
1092
|
+
continue
|
|
1093
|
+
renumbered = _number_legacy_markers(loc_path)
|
|
1094
|
+
if renumbered:
|
|
1095
|
+
console.print(
|
|
1096
|
+
f" [dim]· Numbered {renumbered} legacy marker(s) in "
|
|
1097
|
+
f"{loc_path.name} to match validate.md's IDs[/dim]"
|
|
1098
|
+
)
|
|
907
1099
|
|
|
908
1100
|
links = _load_review_links()
|
|
909
1101
|
issue_key = (links.get(doc) or {}).get("key")
|
|
@@ -927,7 +1119,7 @@ def review_pull_answers(doc, profile, feature):
|
|
|
927
1119
|
console.print(f" [yellow]! Could not fetch comments from {issue_key}: {e}[/yellow]")
|
|
928
1120
|
raise SystemExit(0)
|
|
929
1121
|
|
|
930
|
-
answers = _parse_answers(comments)
|
|
1122
|
+
answers = _parse_clarify_answers(comments) if is_clarify else _parse_answers(comments)
|
|
931
1123
|
if not answers:
|
|
932
1124
|
raise SystemExit(0)
|
|
933
1125
|
|
|
@@ -942,6 +1134,13 @@ def review_pull_answers(doc, profile, feature):
|
|
|
942
1134
|
if item["id"] not in answers:
|
|
943
1135
|
continue
|
|
944
1136
|
answer_text = answers[item["id"]]
|
|
1137
|
+
if is_clarify:
|
|
1138
|
+
code = item["id"].split("clarify:", 1)[1]
|
|
1139
|
+
if _patch_clarify_item(md_path, code, answer_text):
|
|
1140
|
+
patched_docs["clarify"] = patched_docs.get("clarify", 0) + 1
|
|
1141
|
+
patched_paths["clarify"] = md_path
|
|
1142
|
+
console.print(f" [green]✓[/green] {item['id']} resolved in {md_path.name}")
|
|
1143
|
+
continue
|
|
945
1144
|
for loc_id in item["locations"]:
|
|
946
1145
|
doc_key, nnn = loc_id.split(":NC-")
|
|
947
1146
|
doc_key = _normalize_doc_key(doc_key)
|
|
@@ -973,8 +1172,9 @@ def review_pull_answers(doc, profile, feature):
|
|
|
973
1172
|
if cfg.confluence:
|
|
974
1173
|
for doc_key, loc_path in patched_paths.items():
|
|
975
1174
|
try:
|
|
976
|
-
|
|
977
|
-
if
|
|
1175
|
+
pushed = _push_doc_page(doc_key, loc_path, feature_name)
|
|
1176
|
+
if pushed:
|
|
1177
|
+
title, _page_url = pushed
|
|
978
1178
|
console.print(f" [green]✓[/green] Confluence page refreshed: [cyan]{title}[/cyan]")
|
|
979
1179
|
except Exception as e:
|
|
980
1180
|
console.print(f" [yellow]! Could not refresh Confluence page for {doc_key}: {e}[/yellow]")
|
|
@@ -1030,10 +1230,22 @@ def review_check(doc, profile, feature):
|
|
|
1030
1230
|
raise SystemExit(3)
|
|
1031
1231
|
|
|
1032
1232
|
client = JiraClient(session, prof.base_url)
|
|
1033
|
-
status, comments = _get_review_status(doc, client, cfg.jira.key_for("review"), cfg, feature_name)
|
|
1233
|
+
status, comments, _ = _get_review_status(doc, client, cfg.jira.key_for("review"), cfg, feature_name)
|
|
1034
1234
|
doc_cfg = cfg.document_reviews.get(doc)
|
|
1035
1235
|
role = doc_cfg.reviewer_role if doc_cfg else "reviewer"
|
|
1036
1236
|
|
|
1237
|
+
# ── Refresh the Confluence status banner to match what we just polled ─────
|
|
1238
|
+
# Best-effort: a reviewer who only looks at Confluence (never Jira
|
|
1239
|
+
# directly) should see the same status this command just printed, without
|
|
1240
|
+
# having to wait for the next `sdd review submit`/`apply`/`approve`.
|
|
1241
|
+
if cfg.confluence:
|
|
1242
|
+
try:
|
|
1243
|
+
md_path = resolve_doc_path(doc, feature_name)
|
|
1244
|
+
if md_path.exists():
|
|
1245
|
+
_push_doc_page(doc, md_path, feature_name)
|
|
1246
|
+
except Exception:
|
|
1247
|
+
pass
|
|
1248
|
+
|
|
1037
1249
|
if status == "APPROVED":
|
|
1038
1250
|
console.print(f" [green]✓ {doc.upper()} — APPROVED[/green]")
|
|
1039
1251
|
console.print()
|
|
@@ -1164,8 +1376,9 @@ def review_approve(doc, local, by, note, feature, no_confluence):
|
|
|
1164
1376
|
try:
|
|
1165
1377
|
manifest = read_manifest() or {}
|
|
1166
1378
|
feature_name = feature or (manifest.get("project") or {}).get("feature", "")
|
|
1167
|
-
|
|
1168
|
-
if
|
|
1379
|
+
pushed = _push_doc_page(doc, md_path, feature_name)
|
|
1380
|
+
if pushed:
|
|
1381
|
+
title, _page_url = pushed
|
|
1169
1382
|
console.print(f" [green]✓[/green] Confluence page updated: [cyan]{title}[/cyan]")
|
|
1170
1383
|
else:
|
|
1171
1384
|
console.print(" [dim]· Confluence not configured — page not updated[/dim]")
|
|
@@ -1234,31 +1447,21 @@ def review_apply(doc, profile, feature):
|
|
|
1234
1447
|
console.print(f" [red]✗ '{doc}' not found in document_reviews[/red]")
|
|
1235
1448
|
raise SystemExit(1)
|
|
1236
1449
|
|
|
1237
|
-
project_name = proj.get("name", "Project")
|
|
1238
|
-
|
|
1239
1450
|
jira_client = JiraClient(session, prof.base_url)
|
|
1240
|
-
cf_client = ConfluenceClient(session, prof.base_url)
|
|
1241
1451
|
|
|
1242
|
-
# Re-push updated doc
|
|
1452
|
+
# Re-push updated doc (picks up the Jira link/status banner automatically,
|
|
1453
|
+
# since the review ticket from the original `sdd review submit` already exists)
|
|
1243
1454
|
try:
|
|
1244
1455
|
md_path = resolve_doc_path(doc, feature_name)
|
|
1245
1456
|
except ValueError as e:
|
|
1246
1457
|
console.print(f" [red]✗ {e}[/red]")
|
|
1247
1458
|
raise SystemExit(1)
|
|
1248
|
-
page_url
|
|
1459
|
+
page_url = ""
|
|
1249
1460
|
if md_path.exists():
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
page, _ = cf_client.upsert_page(
|
|
1255
|
-
cfg.confluence.space_key, page_title, body_html, parent_id,
|
|
1256
|
-
)
|
|
1257
|
-
upload_diagram_attachments(cf_client, page["id"], attachments)
|
|
1258
|
-
page_url = f"{prof.base_url}/wiki{page.get('_links', {}).get('webui', '')}"
|
|
1259
|
-
console.print(f" [green]✓[/green] Confluence updated: [cyan]{page_title}[/cyan]")
|
|
1260
|
-
for w in diagram_warnings:
|
|
1261
|
-
console.print(f" [yellow]! {w}[/yellow]")
|
|
1461
|
+
pushed = _push_doc_page(doc, md_path, feature_name)
|
|
1462
|
+
if pushed:
|
|
1463
|
+
page_title, page_url = pushed
|
|
1464
|
+
console.print(f" [green]✓[/green] Confluence updated: [cyan]{page_title}[/cyan]")
|
|
1262
1465
|
else:
|
|
1263
1466
|
console.print(f" [dim]·[/dim] {md_path} not found — skipping Confluence update")
|
|
1264
1467
|
|
|
@@ -1338,7 +1541,7 @@ def review_status(profile, feature):
|
|
|
1338
1541
|
icon, label, style = "🔒", "Blocked", "dim"
|
|
1339
1542
|
all_statuses[key] = "BLOCKED"
|
|
1340
1543
|
else:
|
|
1341
|
-
st, _ = _get_review_status(key, client, cfg.jira.key_for("review"), cfg, feature_name)
|
|
1544
|
+
st, _, _ = _get_review_status(key, client, cfg.jira.key_for("review"), cfg, feature_name)
|
|
1342
1545
|
all_statuses[key] = st
|
|
1343
1546
|
if st == "APPROVED":
|
|
1344
1547
|
icon, label, style = "✓ ", "Approved", "green"
|
|
@@ -2306,6 +2306,80 @@ MIGRATIONS = [
|
|
|
2306
2306
|
],
|
|
2307
2307
|
"migrate": lambda m: {**m, "sdd_version": "2.7.58"},
|
|
2308
2308
|
},
|
|
2309
|
+
{
|
|
2310
|
+
"from": "2.7.58",
|
|
2311
|
+
"to": "2.7.59",
|
|
2312
|
+
"description": "Feature: Confluence pages for documents under Jira review now show a live Jira link + status banner, and page_map covers every generated doc type (qa-testcases, tasks, checklist, and the living/service docs) -- no manifest schema changes",
|
|
2313
|
+
"notes": [
|
|
2314
|
+
"User asked why a doc pushed to Jira for review didn't also "
|
|
2315
|
+
"get its Confluence page stamped with the ticket link/status "
|
|
2316
|
+
"so a reviewer could see it without leaving Confluence -- the "
|
|
2317
|
+
"page only ever mirrored the .md content, never the Jira "
|
|
2318
|
+
"state, since the two pushes happened in unrelated code paths",
|
|
2319
|
+
"sdd review submit/check/apply now prepend a small info/"
|
|
2320
|
+
"success/warning panel (via the new _push_doc_page banner) "
|
|
2321
|
+
"showing the ticket key, link, and live status (Pending/"
|
|
2322
|
+
"Needs Revision/Approved) -- refreshed every time the CLI "
|
|
2323
|
+
"touches that document's review state, so it never goes "
|
|
2324
|
+
"stale between submit and the reviewer's eventual decision",
|
|
2325
|
+
"Only applies to doc keys with a document_reviews entry (i.e. "
|
|
2326
|
+
"actually under Jira review) -- docs pushed via the page_map "
|
|
2327
|
+
"fallback alone (no Jira gate configured) get a plain page, "
|
|
2328
|
+
"same as before",
|
|
2329
|
+
"User also asked for a Confluence page for 'QA test case etc "
|
|
2330
|
+
"-- whatever there in local md file' -- page_map in "
|
|
2331
|
+
"integrations.yml.example now also covers qa-testcases, "
|
|
2332
|
+
"tasks, checklist, and the 4 living/service-level docs "
|
|
2333
|
+
"(data-model, security-design, api-spec, component-library), "
|
|
2334
|
+
"so `sdd confluence push --doc <key>` works for all of them, "
|
|
2335
|
+
"not just the phase-gated documents",
|
|
2336
|
+
"6 new tests: banner HTML per status, submit stamps a Pending "
|
|
2337
|
+
"banner once the ticket exists, check refreshes an existing "
|
|
2338
|
+
"page to Approved, and the page_map fallback path (no Jira "
|
|
2339
|
+
"gate) omits the banner entirely",
|
|
2340
|
+
"This migration only bumps sdd_version -- no manifest.yml "
|
|
2341
|
+
"field changes for any pack",
|
|
2342
|
+
],
|
|
2343
|
+
"migrate": lambda m: {**m, "sdd_version": "2.7.59"},
|
|
2344
|
+
},
|
|
2345
|
+
{
|
|
2346
|
+
"from": "2.7.59",
|
|
2347
|
+
"to": "2.7.60",
|
|
2348
|
+
"description": "Feature: clarify.md's own open items (AMB/GAP/CON/ASM/OQ/R) can now be pushed to Jira/Confluence for answers via sdd review push-questions/pull-answers, the same way validate.md's [NEEDS CLARIFICATION-NNN] markers already could -- no manifest schema changes",
|
|
2349
|
+
"notes": [
|
|
2350
|
+
"User pointed out that /validate's open questions could already "
|
|
2351
|
+
"be answered via Jira (push-questions/pull-answers), but /clarify's "
|
|
2352
|
+
"8-item report had no such path -- push-questions silently found "
|
|
2353
|
+
"nothing to push because it only ever recognized the "
|
|
2354
|
+
"'{doc}:NC-{NNN}' bracketed-marker scheme, not clarify.md's own "
|
|
2355
|
+
"STATUS TABLE (AMB/GAP/CON/ASM/OQ/R rows)",
|
|
2356
|
+
"Added a parallel parse/patch path scoped to --doc clarify: "
|
|
2357
|
+
"_parse_clarify_open_items reads OPEN STATUS TABLE rows (posting "
|
|
2358
|
+
"each item's full section as the Jira question text), "
|
|
2359
|
+
"_parse_clarify_answers reads 'clarify:AMB-001: <answer>'-style "
|
|
2360
|
+
"replies, and _patch_clarify_item fills the item's {FILL...} "
|
|
2361
|
+
"placeholder and flips its STATUS TABLE row to the terminal "
|
|
2362
|
+
"status for its type (RESOLVED for AMB/GAP/R, CORRECTED for CON, "
|
|
2363
|
+
"DECIDED for OQ, CONFIRMED/CORRECTED for ASM depending on "
|
|
2364
|
+
"whether the answer starts with 'yes')",
|
|
2365
|
+
"review_push_questions/review_pull_answers now branch on "
|
|
2366
|
+
"doc == 'clarify' for parsing/patching only -- the surrounding "
|
|
2367
|
+
"Jira ticket creation, idempotency-label reuse, and Confluence "
|
|
2368
|
+
"re-push logic is unchanged and fully shared with the existing "
|
|
2369
|
+
"NC-NNN path",
|
|
2370
|
+
"clarify.prompt.md (all 5 packs) documents this under 'Accepted "
|
|
2371
|
+
"reply forms'; review-gates.md's shared block gained a matching "
|
|
2372
|
+
"paragraph, synced into every pack's CLAUDE.md",
|
|
2373
|
+
"16 new tests: STATUS TABLE parsing (including skipping already-"
|
|
2374
|
+
"resolved rows), answer-line parsing, placeholder fill + "
|
|
2375
|
+
"per-type status flip (all 5 terminal statuses, including both "
|
|
2376
|
+
"ASM branches), and end-to-end push-questions/pull-answers CLI "
|
|
2377
|
+
"coverage including the Confluence re-push",
|
|
2378
|
+
"This migration only bumps sdd_version -- no manifest.yml "
|
|
2379
|
+
"field changes for any pack",
|
|
2380
|
+
],
|
|
2381
|
+
"migrate": lambda m: {**m, "sdd_version": "2.7.60"},
|
|
2382
|
+
},
|
|
2309
2383
|
]
|
|
2310
2384
|
|
|
2311
2385
|
|
{sddflow-2.7.58 → sddflow-2.7.60}/sdd/packs/sdd-backend-service/.github/prompts/clarify.prompt.md
RENAMED
|
@@ -43,6 +43,17 @@ Rules:
|
|
|
43
43
|
- User edits `clarify.md` directly, then says "done" in chat
|
|
44
44
|
- **"best guess"** / **"continue with best guess"** / **"continue"** — AI applies its best judgment for every unanswered item
|
|
45
45
|
|
|
46
|
+
**Items can also be answered via Jira/Confluence instead of chat (if `document_reviews.clarify` is configured in `.specify/integrations.yml`), the same way validate.md's `[NEEDS CLARIFICATION-NNN]` markers already can:**
|
|
47
|
+
```bash
|
|
48
|
+
sdd review push-questions --doc clarify # push all OPEN items to Jira + Confluence
|
|
49
|
+
# reviewer replies as a comment, one line per item:
|
|
50
|
+
# clarify:AMB-001: Intentional split — clearing_ref is the JSON field, clearingRef is the DB column
|
|
51
|
+
sdd review pull-answers --doc clarify # pull replies, fill {FILL...} placeholders,
|
|
52
|
+
# flip each STATUS TABLE row (Step 2's mapping),
|
|
53
|
+
# then continue at Step 3
|
|
54
|
+
```
|
|
55
|
+
Same idempotent-ticket behavior as validate.md: `push-questions` creates one Jira ticket reusing the label `sdd review submit` will later find, so it evolves in place at Step 6 instead of duplicating.
|
|
56
|
+
|
|
46
57
|
## After Human Fills Answers
|
|
47
58
|
|
|
48
59
|
### Step 1 — Read the FULL clarify.md
|
|
@@ -198,6 +198,13 @@ confluence:
|
|
|
198
198
|
validate: "{feature} — Validation Report"
|
|
199
199
|
analyze: "{feature} — Analysis Report"
|
|
200
200
|
clarify: "{feature} — Clarifications"
|
|
201
|
+
tasks: "{feature} — Tasks"
|
|
202
|
+
checklist: "{feature} — QA Checklist"
|
|
203
|
+
qa-testcases: "{feature} — QA Test Cases"
|
|
204
|
+
data-model: "Data Model" # living — no {feature}, nests under {project}
|
|
205
|
+
security-design: "Security Design" # living — no {feature}, nests under {project}
|
|
206
|
+
api-spec: "API Specification" # living — no {feature}, nests under {project}
|
|
207
|
+
component-library: "Component Library" # living — no {feature}, nests under {project}
|
|
201
208
|
# release: "{feature} — Release Notes"
|
|
202
209
|
|
|
203
210
|
# Diagram rendering: Confluence has NO native Mermaid or PlantUML
|