vstack 3.2.0__tar.gz → 3.3.0__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.
- {vstack-3.2.0 → vstack-3.3.0}/PKG-INFO +61 -2
- {vstack-3.2.0 → vstack-3.3.0}/README-pypi.md +60 -1
- {vstack-3.2.0 → vstack-3.3.0}/pyproject.toml +1 -1
- vstack-3.3.0/src/vstack/_templates/agents/_partials/agent-skill-boundary.md +7 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/architect/template.md +8 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/designer/template.md +8 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/planner/template.md +37 -12
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/product/template.md +8 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/release/template.md +8 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/tester/template.md +8 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/project/.vstack/config.yaml +12 -3
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/agents/generator.py +35 -9
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/interface.py +192 -5
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/constants.py +39 -2
- vstack-3.2.0/src/vstack/_templates/agents/_partials/agent-skill-boundary.md +0 -5
- {vstack-3.2.0 → vstack-3.3.0}/LICENSE +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/__init__.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/__main__.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_migrations/README.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_migrations/v2_to_v3.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/architect/artifacts/adr/NNN-template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/architect/artifacts/overview.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/architect/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/designer/artifacts/overview.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/designer/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/engineer/artifacts/issues/postmortem.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/engineer/artifacts/issues/rca.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/engineer/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/engineer/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/planner/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/product/artifacts/changes/change-request.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/product/artifacts/issues/issue.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/product/artifacts/requirements.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/product/artifacts/roadmap.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/product/artifacts/vision.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/product/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/release/artifacts/release-summary.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/release/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/tester/artifacts/performance-baseline.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/tester/artifacts/security-report.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/tester/artifacts/test-report.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/agents/tester/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/hooks/log-retention-cleanup/hook.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/hooks/post-commit-security-scan/hook.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/hooks/post-edit-format/hook.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/hooks/post-edit-markdown-quality/hook.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/hooks/pre-tool-safety-gate/hook.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/hooks/session-audit/hook.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/git/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/git/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/helm/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/helm/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/java/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/java/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/k8s/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/k8s/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/markdown/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/markdown/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/python/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/python/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/rancher/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/rancher/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/security/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/security/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/terraform/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/terraform/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/terragrunt/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/terragrunt/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/testing/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/testing/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/typescript/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/instructions/typescript/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/api-design-review/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/api-design-review/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/architecture-risk/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/architecture-risk/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/code-review/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/code-review/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/dependency-audit/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/dependency-audit/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/incident-timeline/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/incident-timeline/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/migration-safety/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/migration-safety/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/release-readiness/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/prompts/release-readiness/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/_partials/base-branch.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/_partials/observability-checklist.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/_partials/run-tests.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/_partials/skill-context.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/adr/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/adr/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/analyse/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/analyse/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/architecture/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/architecture/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/aws-cli/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/aws-cli/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/cicd/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/cicd/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/cloudformation/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/cloudformation/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/code-review/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/code-review/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/codeql/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/codeql/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/concise/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/concise/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/consult/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/consult/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/container/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/container/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/conventional-commit/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/conventional-commit/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/debug/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/debug/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/dependabot/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/dependabot/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/dependency/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/dependency/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/design/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/design/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/docs/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/docs/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/explore/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/explore/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/gdpr/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/gdpr/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/gh-issues/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/gh-issues/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/gh-release/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/gh-release/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/guardrails/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/guardrails/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/helm/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/helm/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/incident/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/incident/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/inspect/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/inspect/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/k8s/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/k8s/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/migrate/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/migrate/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/onboard/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/onboard/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/openapi/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/openapi/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/performance/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/performance/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/postmortem/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/postmortem/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/pr/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/pr/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/rancher/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/rancher/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/rca/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/rca/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/refactor/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/refactor/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/release-notes/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/release-notes/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/requirements/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/requirements/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/secret-scan/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/secret-scan/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/security/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/security/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/terraform/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/terraform/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/terragrunt/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/terragrunt/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/threat-model/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/threat-model/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/verify/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/verify/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/vision/config.yaml +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/_templates/skills/vision/template.md +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/agents/__init__.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/agents/config.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/agents/constants.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/artifacts/__init__.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/artifacts/config.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/artifacts/constants.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/artifacts/generator.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/artifacts/models.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/artifacts/protocol.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/__init__.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/base.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/catalog.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/constants.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/init.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/install.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/manifest.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/migrate.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/parser.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/report.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/service.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/status.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/uninstall.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/validate.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/cli/verify.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/frontmatter/__init__.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/frontmatter/parser.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/frontmatter/schema.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/frontmatter/serializer.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/hooks/__init__.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/hooks/config.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/hooks/constants.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/hooks/generator.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/instructions/__init__.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/instructions/config.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/instructions/constants.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/instructions/generator.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/main.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/manifest/__init__.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/manifest/store.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/models.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/prompts/__init__.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/prompts/config.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/prompts/constants.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/prompts/generator.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/skills/__init__.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/skills/config.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/skills/constants.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/skills/generator.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/skills/models.py +0 -0
- {vstack-3.2.0 → vstack-3.3.0}/src/vstack/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vstack
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.3.0
|
|
4
4
|
Summary: VS Code-native AI engineering workflow system for microservices, libraries, and backend systems.
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -261,7 +261,41 @@ Execution semantics:
|
|
|
261
261
|
|
|
262
262
|
- `workflow.stages` order is the canonical progression order.
|
|
263
263
|
- `agentic` is stage-sequential by default: planner advances one stage at a time in configured order.
|
|
264
|
-
-
|
|
264
|
+
- Set `depends_on` to unlock a DAG topology and let planner run independent branches in parallel.
|
|
265
|
+
|
|
266
|
+
**Parallel stages with `depends_on`:** By default each stage implicitly depends on the previous one. Add `depends_on` to declare explicit predecessors. The canonical vstack DAG (seeded automatically by `vstack install`):
|
|
267
|
+
|
|
268
|
+
```yaml
|
|
269
|
+
workflow:
|
|
270
|
+
mode: agentic
|
|
271
|
+
version: 1
|
|
272
|
+
stages:
|
|
273
|
+
- role: product
|
|
274
|
+
gate: required
|
|
275
|
+
hitl: always
|
|
276
|
+
- role: architect
|
|
277
|
+
gate: required
|
|
278
|
+
hitl: always
|
|
279
|
+
depends_on: [product]
|
|
280
|
+
- role: designer
|
|
281
|
+
gate: optional
|
|
282
|
+
hitl: on-change
|
|
283
|
+
depends_on: [product] # runs in parallel with architect
|
|
284
|
+
- role: engineer
|
|
285
|
+
gate: required
|
|
286
|
+
hitl: always
|
|
287
|
+
depends_on: [architect, designer] # waits for both
|
|
288
|
+
- role: tester
|
|
289
|
+
gate: required
|
|
290
|
+
hitl: always
|
|
291
|
+
depends_on: [engineer]
|
|
292
|
+
- role: release
|
|
293
|
+
gate: required
|
|
294
|
+
hitl: always
|
|
295
|
+
depends_on: [tester]
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
`depends_on: []` marks a root stage. Absent `depends_on` falls back to sequential. Circular dependencies are caught at install/init time.
|
|
265
299
|
|
|
266
300
|
Handoff target semantics:
|
|
267
301
|
|
|
@@ -272,12 +306,37 @@ Handoff target semantics:
|
|
|
272
306
|
|
|
273
307
|
Mode quickstart in Copilot Agent Mode:
|
|
274
308
|
|
|
309
|
+
In `agentic` mode, `@planner` is the primary entry point. Start every session with `@planner` and let it drive all stage transitions automatically.
|
|
310
|
+
|
|
275
311
|
| Mode | Start here | First prompt example |
|
|
276
312
|
| --------- | ------------------------ | ------------------------------------------------------- |
|
|
277
313
|
| `agentic` | `@planner` | `@planner Run the workflow for this repository change.` |
|
|
278
314
|
| `manual` | `@product` | `@product Define requirements for this change.` |
|
|
279
315
|
| `hybrid` | `@planner` or `@product` | `@planner Run the workflow for this repository change.` |
|
|
280
316
|
|
|
317
|
+
What planner does: reads `workflow.stages` and `depends_on`, invokes each role agent as a subagent at the right time, runs independent branches in parallel when `depends_on` permits, pauses at each gate for human approval, and reports a structured stage outcome after each step. Valid role names: `product`, `architect`, `designer`, `engineer`, `tester`, `release`.
|
|
318
|
+
|
|
319
|
+
Agentic runbook (copy/paste):
|
|
320
|
+
|
|
321
|
+
```text
|
|
322
|
+
@planner Run the workflow for this repository change.
|
|
323
|
+
@planner Show current stage status, ready stages, blocked stages, and next action.
|
|
324
|
+
@planner Continue with all ready stages in parallel where workflow.depends_on allows it.
|
|
325
|
+
@planner Pause at required HITL gates and ask for approval before advancing.
|
|
326
|
+
@planner Finalize with a release-readiness summary and list changed artifacts.
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Troubleshooting: why planner is not running stages in parallel
|
|
330
|
+
|
|
331
|
+
- Check `workflow.mode` in `.vstack/config.yaml`: parallel orchestration requires `agentic` (or planner-led `hybrid`).
|
|
332
|
+
- Validate stage dependencies: run `vstack validate` to catch invalid roles, self-dependencies, and cycles.
|
|
333
|
+
- Inspect `depends_on` shape: a stage runs only when all listed predecessors are `ready` or `skipped`.
|
|
334
|
+
- Check implicit sequential fallback: if `depends_on` is omitted, the stage depends on the previous stage.
|
|
335
|
+
- Check optional stage behavior: `gate: optional` can be skipped when unaffected, reducing apparent parallel fan-out.
|
|
336
|
+
- Check blockers in stage report: any `blocked` predecessor prevents dependent stages from becoming ready.
|
|
337
|
+
- Check mixed execution path: in `hybrid`, mixing manual handoffs and planner in one session can mask parallel readiness.
|
|
338
|
+
- Confirm you started with planner: in `agentic`, begin with `@planner`, not a worker role agent.
|
|
339
|
+
|
|
281
340
|
Usage guidance:
|
|
282
341
|
|
|
283
342
|
- Use `agentic` when you want one deterministic orchestration path.
|
|
@@ -230,7 +230,41 @@ Execution semantics:
|
|
|
230
230
|
|
|
231
231
|
- `workflow.stages` order is the canonical progression order.
|
|
232
232
|
- `agentic` is stage-sequential by default: planner advances one stage at a time in configured order.
|
|
233
|
-
-
|
|
233
|
+
- Set `depends_on` to unlock a DAG topology and let planner run independent branches in parallel.
|
|
234
|
+
|
|
235
|
+
**Parallel stages with `depends_on`:** By default each stage implicitly depends on the previous one. Add `depends_on` to declare explicit predecessors. The canonical vstack DAG (seeded automatically by `vstack install`):
|
|
236
|
+
|
|
237
|
+
```yaml
|
|
238
|
+
workflow:
|
|
239
|
+
mode: agentic
|
|
240
|
+
version: 1
|
|
241
|
+
stages:
|
|
242
|
+
- role: product
|
|
243
|
+
gate: required
|
|
244
|
+
hitl: always
|
|
245
|
+
- role: architect
|
|
246
|
+
gate: required
|
|
247
|
+
hitl: always
|
|
248
|
+
depends_on: [product]
|
|
249
|
+
- role: designer
|
|
250
|
+
gate: optional
|
|
251
|
+
hitl: on-change
|
|
252
|
+
depends_on: [product] # runs in parallel with architect
|
|
253
|
+
- role: engineer
|
|
254
|
+
gate: required
|
|
255
|
+
hitl: always
|
|
256
|
+
depends_on: [architect, designer] # waits for both
|
|
257
|
+
- role: tester
|
|
258
|
+
gate: required
|
|
259
|
+
hitl: always
|
|
260
|
+
depends_on: [engineer]
|
|
261
|
+
- role: release
|
|
262
|
+
gate: required
|
|
263
|
+
hitl: always
|
|
264
|
+
depends_on: [tester]
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
`depends_on: []` marks a root stage. Absent `depends_on` falls back to sequential. Circular dependencies are caught at install/init time.
|
|
234
268
|
|
|
235
269
|
Handoff target semantics:
|
|
236
270
|
|
|
@@ -241,12 +275,37 @@ Handoff target semantics:
|
|
|
241
275
|
|
|
242
276
|
Mode quickstart in Copilot Agent Mode:
|
|
243
277
|
|
|
278
|
+
In `agentic` mode, `@planner` is the primary entry point. Start every session with `@planner` and let it drive all stage transitions automatically.
|
|
279
|
+
|
|
244
280
|
| Mode | Start here | First prompt example |
|
|
245
281
|
| --------- | ------------------------ | ------------------------------------------------------- |
|
|
246
282
|
| `agentic` | `@planner` | `@planner Run the workflow for this repository change.` |
|
|
247
283
|
| `manual` | `@product` | `@product Define requirements for this change.` |
|
|
248
284
|
| `hybrid` | `@planner` or `@product` | `@planner Run the workflow for this repository change.` |
|
|
249
285
|
|
|
286
|
+
What planner does: reads `workflow.stages` and `depends_on`, invokes each role agent as a subagent at the right time, runs independent branches in parallel when `depends_on` permits, pauses at each gate for human approval, and reports a structured stage outcome after each step. Valid role names: `product`, `architect`, `designer`, `engineer`, `tester`, `release`.
|
|
287
|
+
|
|
288
|
+
Agentic runbook (copy/paste):
|
|
289
|
+
|
|
290
|
+
```text
|
|
291
|
+
@planner Run the workflow for this repository change.
|
|
292
|
+
@planner Show current stage status, ready stages, blocked stages, and next action.
|
|
293
|
+
@planner Continue with all ready stages in parallel where workflow.depends_on allows it.
|
|
294
|
+
@planner Pause at required HITL gates and ask for approval before advancing.
|
|
295
|
+
@planner Finalize with a release-readiness summary and list changed artifacts.
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
Troubleshooting: why planner is not running stages in parallel
|
|
299
|
+
|
|
300
|
+
- Check `workflow.mode` in `.vstack/config.yaml`: parallel orchestration requires `agentic` (or planner-led `hybrid`).
|
|
301
|
+
- Validate stage dependencies: run `vstack validate` to catch invalid roles, self-dependencies, and cycles.
|
|
302
|
+
- Inspect `depends_on` shape: a stage runs only when all listed predecessors are `ready` or `skipped`.
|
|
303
|
+
- Check implicit sequential fallback: if `depends_on` is omitted, the stage depends on the previous stage.
|
|
304
|
+
- Check optional stage behavior: `gate: optional` can be skipped when unaffected, reducing apparent parallel fan-out.
|
|
305
|
+
- Check blockers in stage report: any `blocked` predecessor prevents dependent stages from becoming ready.
|
|
306
|
+
- Check mixed execution path: in `hybrid`, mixing manual handoffs and planner in one session can mask parallel readiness.
|
|
307
|
+
- Confirm you started with planner: in `agentic`, begin with `@planner`, not a worker role agent.
|
|
308
|
+
|
|
250
309
|
Usage guidance:
|
|
251
310
|
|
|
252
311
|
- Use `agentic` when you want one deterministic orchestration path.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
## agent-skill boundary
|
|
2
|
+
|
|
3
|
+
- **You (agent) = who/what/when** — decisions, scope, escalation, and handoffs within your role.
|
|
4
|
+
- **Skills = how** — detailed procedures, checklists, and execution playbooks.
|
|
5
|
+
- Invoke the relevant skill for deep procedural work; summarize decisions and outcomes in role output.
|
|
6
|
+
- **Subagents = scoped parallel work** — you may delegate to subagents or same-role variants only when the task can be split into independent workstreams with a clear merge point and your role prompt permits it.
|
|
7
|
+
- Do not split work that overlaps heavily, lacks an obvious merge point, or is too small to justify the coordination overhead.
|
|
@@ -37,6 +37,14 @@ You are a **senior software architect** acting as the **architect role**. You de
|
|
|
37
37
|
- Capture significant structural choices in ADRs.
|
|
38
38
|
- Block progression when architecture/design contract alignment is unclear.
|
|
39
39
|
|
|
40
|
+
## parallel delegation
|
|
41
|
+
|
|
42
|
+
- If the scope naturally decomposes into independent architecture questions, you may split work across subagents or same-role variants.
|
|
43
|
+
- Good split candidates include separate ADRs, distinct failure-mode analyses, boundary decisions, and architecture overview updates when they do not depend on one another.
|
|
44
|
+
- Only split when each workstream has a clear merge point and the architectural conclusions are not mutually dependent.
|
|
45
|
+
- Do not split tightly coupled blueprint decisions that require one consistent system view.
|
|
46
|
+
- Make each delegated context explicit in the output so the resulting architecture baseline remains auditable.
|
|
47
|
+
|
|
40
48
|
## communication style
|
|
41
49
|
|
|
42
50
|
- Structured, opinionated, and evidence-based.
|
|
@@ -37,6 +37,14 @@ You are a **senior interaction designer** acting as the **designer role**. You t
|
|
|
37
37
|
- Escalate structural implications before finalizing design items.
|
|
38
38
|
- Keep interface changes backward-aware when existing clients may be affected.
|
|
39
39
|
|
|
40
|
+
## parallel delegation
|
|
41
|
+
|
|
42
|
+
- If the design surface decomposes cleanly, you may split work across subagents or same-role variants.
|
|
43
|
+
- Good split candidates include API contracts, event schemas, state models, UX flows, and module boundaries when they do not share a mandatory merge decision.
|
|
44
|
+
- Only split when each design stream can be validated independently and recombined without ambiguity.
|
|
45
|
+
- Do not split tightly coupled interface decisions that require one coherent contract set.
|
|
46
|
+
- Make the merge point explicit so downstream implementation work sees one actionable design baseline.
|
|
47
|
+
|
|
40
48
|
## communication style
|
|
41
49
|
|
|
42
50
|
- Concrete and specification-oriented.
|
|
@@ -7,11 +7,20 @@ invoking role agents as subagents and enforcing explicit gate progression.
|
|
|
7
7
|
|
|
8
8
|
## responsibilities
|
|
9
9
|
|
|
10
|
-
- Read the configured workflow stages and
|
|
11
|
-
- Invoke the correct role agent for each stage.
|
|
10
|
+
- Read the configured workflow stages and evaluate `depends_on` to determine execution order.
|
|
11
|
+
- Invoke the correct role agent for each stage when all its predecessors are complete.
|
|
12
|
+
- Run independent branches in parallel when their `depends_on` sets do not overlap.
|
|
12
13
|
- Apply gate and human-in-the-loop policy at each transition.
|
|
13
14
|
- Keep a concise execution log: completed, skipped, blocked, and pending stages.
|
|
14
15
|
|
|
16
|
+
## parallel and variant delegation
|
|
17
|
+
|
|
18
|
+
- When workflow branches are independent, the planner may fan out to multiple subagents in parallel and merge their results before the next gate.
|
|
19
|
+
- When a role prompt explicitly allows self-decomposition, the planner may invoke that same role more than once with different scoped contexts (for example, tester/security and tester/performance).
|
|
20
|
+
- Only do this when the contexts are independent enough to avoid duplicated effort or conflicting conclusions.
|
|
21
|
+
- Keep each delegated context explicit in the execution log so the merge point remains auditable.
|
|
22
|
+
- Do not invent duplicate stage identities that are not represented in workflow config.
|
|
23
|
+
|
|
15
24
|
## scope and boundaries
|
|
16
25
|
|
|
17
26
|
- Planner owns orchestration and progression logic.
|
|
@@ -27,7 +36,11 @@ invoking role agents as subagents and enforcing explicit gate progression.
|
|
|
27
36
|
## working principles
|
|
28
37
|
|
|
29
38
|
- Use the configured workflow contract as source of truth.
|
|
30
|
-
-
|
|
39
|
+
- Evaluate `depends_on` before each stage: a stage is **ready** when all its listed predecessors
|
|
40
|
+
have status `ready` or `skipped`. A stage without `depends_on` implicitly depends on the
|
|
41
|
+
previous stage in declaration order.
|
|
42
|
+
- Run all ready stages before advancing past a gate boundary. When multiple stages are ready
|
|
43
|
+
simultaneously, invoke them in parallel.
|
|
31
44
|
- Prefer explicit user confirmation at gate boundaries.
|
|
32
45
|
- Keep summaries short, factual, and stage-oriented.
|
|
33
46
|
|
|
@@ -49,15 +62,23 @@ invoking role agents as subagents and enforcing explicit gate progression.
|
|
|
49
62
|
|
|
50
63
|
Execution model:
|
|
51
64
|
|
|
52
|
-
1. Load workflow stages from
|
|
65
|
+
1. Load workflow stages and build the dependency graph from `depends_on` fields.
|
|
66
|
+
- A stage without `depends_on` implicitly depends on the previous stage in declaration order.
|
|
67
|
+
- `depends_on: []` marks a stage as a root with no predecessors.
|
|
53
68
|
1. Read `workflow.mode` and apply mode behavior:
|
|
54
|
-
- `manual`: do not orchestrate automatically; tell the user to continue via direct agent
|
|
55
|
-
|
|
69
|
+
- `manual`: do not orchestrate automatically; tell the user to continue via direct agent
|
|
70
|
+
invocation/handoffs or switch to `agentic` mode.
|
|
71
|
+
- `agentic`: orchestrate stage progression using the dependency graph; planner is the sole
|
|
72
|
+
progression controller.
|
|
56
73
|
- `hybrid`: orchestrate when explicitly requested; otherwise allow manual flow.
|
|
57
|
-
1.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
74
|
+
1. Repeat until the graph is fully resolved or a blocker stops progression:
|
|
75
|
+
a. Identify all stages whose `depends_on` predecessors are all `ready` or `skipped`.
|
|
76
|
+
These are the **ready set**.
|
|
77
|
+
b. Invoke all stages in the ready set. Stages with no unresolved predecessors may run
|
|
78
|
+
in parallel.
|
|
79
|
+
c. Collect stage reports and mark each stage `ready`, `skipped`, or `blocked`.
|
|
80
|
+
d. Evaluate gate and hitl policy. Pause for user approval where required before continuing.
|
|
81
|
+
1. Continue until the release stage completes or a blocker stops progression.
|
|
61
82
|
|
|
62
83
|
When invoking a worker stage, require this structured stage report at the end:
|
|
63
84
|
|
|
@@ -69,7 +90,9 @@ When invoking a worker stage, require this structured stage report at the end:
|
|
|
69
90
|
|
|
70
91
|
## success criteria
|
|
71
92
|
|
|
72
|
-
-
|
|
93
|
+
- Dependency graph was evaluated before each stage transition.
|
|
94
|
+
- All ready stages ran before each gate boundary advanced.
|
|
95
|
+
- Independent branches ran in parallel where `depends_on` permitted.
|
|
73
96
|
- Gate progression decisions are explicit and auditable.
|
|
74
97
|
- User always understands current stage and next action.
|
|
75
98
|
|
|
@@ -92,7 +115,9 @@ that requires changes to upstream items, flag it and trigger a reverse handoff.
|
|
|
92
115
|
|
|
93
116
|
## completion checklist
|
|
94
117
|
|
|
95
|
-
-
|
|
118
|
+
- Dependency graph was evaluated; stages ran only after all predecessors were complete.
|
|
119
|
+
- All ready stages were identified before advancing past each gate.
|
|
120
|
+
- Independent branches ran in parallel where `depends_on` permitted.
|
|
96
121
|
- Each stage has a clear outcome (`ready`, `blocked`, or `skipped`).
|
|
97
122
|
- User approval points were respected.
|
|
98
123
|
- Final summary includes completed work and pending actions.
|
|
@@ -37,6 +37,14 @@ You are a **senior product manager** acting as the **product role**. You define
|
|
|
37
37
|
- Prefer small, reviewable scope slices over broad ambiguous deliveries.
|
|
38
38
|
- Escalate unresolved cross-role conflicts before approving the next gate.
|
|
39
39
|
|
|
40
|
+
## parallel delegation
|
|
41
|
+
|
|
42
|
+
- If discovery naturally separates into independent tracks, you may split work across subagents or same-role variants.
|
|
43
|
+
- Good split candidates include vision, requirements, roadmap shaping, and release-scope analysis when they can be merged back into one acceptance story.
|
|
44
|
+
- Only split when the tracks are independent enough to avoid contradictory scope decisions.
|
|
45
|
+
- Do not split the final acceptance decision or any scope slice that requires a single integrated product judgment.
|
|
46
|
+
- Keep the merge point explicit so downstream roles receive one coherent baseline.
|
|
47
|
+
|
|
40
48
|
## communication style
|
|
41
49
|
|
|
42
50
|
- Be concise, explicit, and decision-oriented.
|
|
@@ -37,6 +37,14 @@ You are a **senior platform and release engineer** acting as the **release role*
|
|
|
37
37
|
- Treat contradictory evidence as a blocker until reconciled.
|
|
38
38
|
- Prioritize auditability and deterministic release records.
|
|
39
39
|
|
|
40
|
+
## parallel delegation
|
|
41
|
+
|
|
42
|
+
- If evidence gathering or sign-off collection can be separated safely, you may split it across subagents or same-role variants.
|
|
43
|
+
- Good split candidates include independent baseline checks, artifact validation, and role-perspective review collection when the findings can be merged before the final release decision.
|
|
44
|
+
- Only split when the outputs are independent and the final release gate still remains a single coherent decision.
|
|
45
|
+
- Do not split the release verdict itself or any activity that would create conflicting acceptance signals.
|
|
46
|
+
- Record the merge point explicitly so the release record stays deterministic and auditable.
|
|
47
|
+
|
|
40
48
|
## communication style
|
|
41
49
|
|
|
42
50
|
- Gate-oriented and explicit about pass/fail state.
|
|
@@ -38,6 +38,14 @@ You are a **senior QA, security, and reliability engineer** acting as the **test
|
|
|
38
38
|
- Escalate immediately when required evidence cannot be produced.
|
|
39
39
|
- Use explicit go/no-go language for release readiness.
|
|
40
40
|
|
|
41
|
+
## parallel delegation
|
|
42
|
+
|
|
43
|
+
- If the verification scope spans independent dimensions, you may split the work into specialized subagents and run them in parallel.
|
|
44
|
+
- Good split candidates include security, performance, functional correctness, compatibility, and regression checks when those areas do not share critical setup or state.
|
|
45
|
+
- Only split when each subagent has a clearly bounded context and the results can be merged into one verdict.
|
|
46
|
+
- Do not split narrow or tightly coupled test scopes; the coordination overhead will outweigh the benefit.
|
|
47
|
+
- Make the subagent context explicit in the report so the merge step is reproducible.
|
|
48
|
+
|
|
41
49
|
## communication style
|
|
42
50
|
|
|
43
51
|
- Clear verdicts with severity and reproduction steps.
|
|
@@ -135,9 +135,12 @@
|
|
|
135
135
|
#
|
|
136
136
|
# Execution order:
|
|
137
137
|
# - Stage order in workflow.stages is the canonical progression order.
|
|
138
|
-
# -
|
|
139
|
-
# -
|
|
140
|
-
#
|
|
138
|
+
# - Without depends_on, each stage implicitly depends on the previous stage
|
|
139
|
+
# (fully sequential, backward-compatible behavior).
|
|
140
|
+
# - Set depends_on explicitly to enable DAG orchestration and parallel branches.
|
|
141
|
+
# Example: architect and designer can both depend on product.
|
|
142
|
+
# - Use depends_on: [] to make a stage an independent root.
|
|
143
|
+
# - In agentic mode planner can evaluate ready stages from dependency completion.
|
|
141
144
|
#
|
|
142
145
|
# Handoffs:
|
|
143
146
|
# - handoffs.prompt is the message used when transitioning to the next stage.
|
|
@@ -156,6 +159,7 @@
|
|
|
156
159
|
# gate: required — stage always runs
|
|
157
160
|
# gate: optional — stage may be skipped when its domain is unaffected
|
|
158
161
|
# gate: skip — stage is never executed (explicit opt-out)
|
|
162
|
+
# depends_on: [] — optional list of prerequisite stage roles
|
|
159
163
|
#
|
|
160
164
|
# hitl: always — pipeline pauses for human approval before handoff (default for required)
|
|
161
165
|
# hitl: on-change — pipeline pauses only when the stage made changes (default for optional)
|
|
@@ -188,15 +192,20 @@ workflow:
|
|
|
188
192
|
- role: architect
|
|
189
193
|
gate: required
|
|
190
194
|
hitl: always
|
|
195
|
+
depends_on: [product]
|
|
191
196
|
- role: designer
|
|
192
197
|
gate: optional
|
|
193
198
|
hitl: on-change
|
|
199
|
+
depends_on: [product]
|
|
194
200
|
- role: engineer
|
|
195
201
|
gate: required
|
|
196
202
|
hitl: always
|
|
203
|
+
depends_on: [architect, designer]
|
|
197
204
|
- role: tester
|
|
198
205
|
gate: required
|
|
199
206
|
hitl: always
|
|
207
|
+
depends_on: [engineer]
|
|
200
208
|
- role: release
|
|
201
209
|
gate: required
|
|
202
210
|
hitl: always
|
|
211
|
+
depends_on: [tester]
|
|
@@ -260,16 +260,37 @@ class AgentGenerator(GenericArtifactGenerator):
|
|
|
260
260
|
}
|
|
261
261
|
]
|
|
262
262
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
return []
|
|
268
|
-
if idx >= len(roles) - 1:
|
|
263
|
+
stage_by_role = {
|
|
264
|
+
str(stage.get("role", "")).strip(): stage for stage in self.workflow_stages
|
|
265
|
+
}
|
|
266
|
+
if agent_role not in stage_by_role:
|
|
269
267
|
return []
|
|
270
|
-
next_role = roles[idx + 1]
|
|
271
268
|
|
|
272
|
-
|
|
269
|
+
dependencies_by_role: dict[str, list[str]] = {}
|
|
270
|
+
ordered_roles = [str(stage.get("role", "")).strip() for stage in self.workflow_stages]
|
|
271
|
+
role_set = set(ordered_roles)
|
|
272
|
+
for index, role in enumerate(ordered_roles):
|
|
273
|
+
stage = stage_by_role.get(role, {})
|
|
274
|
+
if "depends_on" in stage:
|
|
275
|
+
raw_depends_on = stage.get("depends_on", [])
|
|
276
|
+
depends_on = raw_depends_on if isinstance(raw_depends_on, list) else []
|
|
277
|
+
normalized = []
|
|
278
|
+
for dep in depends_on:
|
|
279
|
+
dep_role = str(dep).strip()
|
|
280
|
+
if dep_role and dep_role in role_set and dep_role not in normalized:
|
|
281
|
+
normalized.append(dep_role)
|
|
282
|
+
dependencies_by_role[role] = normalized
|
|
283
|
+
elif index > 0:
|
|
284
|
+
dependencies_by_role[role] = [ordered_roles[index - 1]]
|
|
285
|
+
else:
|
|
286
|
+
dependencies_by_role[role] = []
|
|
287
|
+
|
|
288
|
+
next_roles = [
|
|
289
|
+
role for role in ordered_roles if agent_role in dependencies_by_role.get(role, [])
|
|
290
|
+
]
|
|
291
|
+
primary_next_role = next_roles[0] if next_roles else ""
|
|
292
|
+
|
|
293
|
+
stage_handoffs: list[dict[str, str]] = stage_by_role[agent_role].get("handoffs", [])
|
|
273
294
|
if not isinstance(stage_handoffs, list):
|
|
274
295
|
stage_handoffs = []
|
|
275
296
|
|
|
@@ -278,12 +299,15 @@ class AgentGenerator(GenericArtifactGenerator):
|
|
|
278
299
|
if not stage_handoffs:
|
|
279
300
|
if not handoff_prompt.strip():
|
|
280
301
|
return []
|
|
302
|
+
if not next_roles:
|
|
303
|
+
return []
|
|
281
304
|
return [
|
|
282
305
|
{
|
|
283
306
|
"label": f"Go to next stage: {next_role.capitalize()}",
|
|
284
307
|
"agent": next_role,
|
|
285
308
|
"prompt": handoff_prompt.strip(),
|
|
286
309
|
}
|
|
310
|
+
for next_role in next_roles
|
|
287
311
|
]
|
|
288
312
|
|
|
289
313
|
result: list[dict[str, str]] = []
|
|
@@ -293,7 +317,9 @@ class AgentGenerator(GenericArtifactGenerator):
|
|
|
293
317
|
if not isinstance(h, dict):
|
|
294
318
|
continue
|
|
295
319
|
h_agent = str(h.get("agent", "") or "").strip()
|
|
296
|
-
target_agent = h_agent or
|
|
320
|
+
target_agent = h_agent or primary_next_role
|
|
321
|
+
if not target_agent:
|
|
322
|
+
continue
|
|
297
323
|
|
|
298
324
|
# Apply per-agent handoff_prompt override to the first handoff that
|
|
299
325
|
# targets the natural next stage (no explicit agent override).
|