create-yss-spec 2.2.3 → 2.2.4
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.
- package/README.md +17 -1
- package/package.json +1 -1
- package/src/cli.js +15 -1
- package/src/self-update.js +277 -0
- package/template/.agents/skills/yss-domain/SKILL.md +5 -4
- package/template/.agents/skills/yss-product-lifecycle/SKILL.md +5 -5
- package/template/.agents/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -0
- package/template/.agents/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +139 -4
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +6 -3
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.agents/skills/yss-router/SKILL.md +4 -2
- package/template/.agents/skills/yss-router/references/router-contract.yaml +18 -3
- package/template/.agents/skills/yss-router/references/slice-implementation-contract.md +58 -1
- package/template/.agents/skills/yss-stage-decision/SKILL.md +50 -0
- package/template/.agents/skills/yss-stage-decision/references/domain-strategy-contract.md +26 -0
- package/template/.agents/skills/yss-stage-decision/references/domain-strategy.schema.json +128 -0
- package/template/.agents/skills/yss-stage-decision/references/stage-decision-package-contract.md +19 -0
- package/template/.agents/skills/yss-stage-decision/references/stage-decision-package.schema.json +86 -0
- package/template/.agents/skills/yss-stage-decision/references/validation-rules.md +18 -0
- package/template/.agents/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +169 -0
- package/template/.agents/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +100 -0
- package/template/.agents/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +15 -0
- package/template/.agents/skills/yss-stage-decision/tests/fixtures/invalid-direction.yaml +58 -0
- package/template/.agents/skills/yss-stage-decision/tests/fixtures/invalid-stage-decision-blocker.yaml +44 -0
- package/template/.agents/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +15 -0
- package/template/.agents/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +49 -0
- package/template/.agents/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +108 -0
- package/template/.agents/skills/yss-stage-decision/tests/run-scenarios.mjs +68 -0
- package/template/.agents/skills/yss-tactical-design/SKILL.md +33 -0
- package/template/.agents/skills/yss-tactical-design/agents/openai.yaml +4 -0
- package/template/.agents/skills/yss-tactical-design/references/output-template.md +28 -0
- package/template/.agents/skills/yss-tactical-design/references/tactical-design-contract.md +41 -0
- package/template/.agents/skills/yss-tactical-design/references/tactical-design.schema.json +31 -0
- package/template/.agents/skills/yss-tactical-design/references/validation-rules.md +13 -0
- package/template/.agents/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +213 -0
- package/template/.agents/skills/yss-tactical-design/tests/fixtures/invalid-api-leaks-aggregate.yaml +21 -0
- package/template/.agents/skills/yss-tactical-design/tests/fixtures/invalid-missing-consistency-policy.yaml +21 -0
- package/template/.agents/skills/yss-tactical-design/tests/fixtures/invalid-missing-invariant.yaml +21 -0
- package/template/.agents/skills/yss-tactical-design/tests/fixtures/invalid-stale-upstream-ref.yaml +21 -0
- package/template/.agents/skills/yss-tactical-design/tests/fixtures/invalid-strategic-as-tactical.yaml +21 -0
- package/template/.agents/skills/yss-tactical-design/tests/fixtures/valid-tactical-design.yaml +80 -0
- package/template/.agents/skills/yss-tactical-design/tests/run-scenarios.mjs +47 -0
- package/template/.claude/skills/yss-domain/SKILL.md +5 -4
- package/template/.claude/skills/yss-product-lifecycle/SKILL.md +5 -5
- package/template/.claude/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -0
- package/template/.claude/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +139 -4
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +6 -3
- package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.claude/skills/yss-router/SKILL.md +4 -2
- package/template/.claude/skills/yss-router/references/router-contract.yaml +18 -3
- package/template/.claude/skills/yss-router/references/slice-implementation-contract.md +58 -1
- package/template/.claude/skills/yss-stage-decision/SKILL.md +50 -0
- package/template/.claude/skills/yss-stage-decision/references/domain-strategy-contract.md +26 -0
- package/template/.claude/skills/yss-stage-decision/references/domain-strategy.schema.json +128 -0
- package/template/.claude/skills/yss-stage-decision/references/stage-decision-package-contract.md +19 -0
- package/template/.claude/skills/yss-stage-decision/references/stage-decision-package.schema.json +86 -0
- package/template/.claude/skills/yss-stage-decision/references/validation-rules.md +18 -0
- package/template/.claude/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +169 -0
- package/template/.claude/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +100 -0
- package/template/.claude/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +15 -0
- package/template/.claude/skills/yss-stage-decision/tests/fixtures/invalid-direction.yaml +58 -0
- package/template/.claude/skills/yss-stage-decision/tests/fixtures/invalid-stage-decision-blocker.yaml +44 -0
- package/template/.claude/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +15 -0
- package/template/.claude/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +49 -0
- package/template/.claude/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +108 -0
- package/template/.claude/skills/yss-stage-decision/tests/run-scenarios.mjs +68 -0
- package/template/.claude/skills/yss-tactical-design/SKILL.md +33 -0
- package/template/.claude/skills/yss-tactical-design/agents/openai.yaml +4 -0
- package/template/.claude/skills/yss-tactical-design/references/output-template.md +28 -0
- package/template/.claude/skills/yss-tactical-design/references/tactical-design-contract.md +41 -0
- package/template/.claude/skills/yss-tactical-design/references/tactical-design.schema.json +31 -0
- package/template/.claude/skills/yss-tactical-design/references/validation-rules.md +13 -0
- package/template/.claude/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +213 -0
- package/template/.claude/skills/yss-tactical-design/tests/fixtures/invalid-api-leaks-aggregate.yaml +21 -0
- package/template/.claude/skills/yss-tactical-design/tests/fixtures/invalid-missing-consistency-policy.yaml +21 -0
- package/template/.claude/skills/yss-tactical-design/tests/fixtures/invalid-missing-invariant.yaml +21 -0
- package/template/.claude/skills/yss-tactical-design/tests/fixtures/invalid-stale-upstream-ref.yaml +21 -0
- package/template/.claude/skills/yss-tactical-design/tests/fixtures/invalid-strategic-as-tactical.yaml +21 -0
- package/template/.claude/skills/yss-tactical-design/tests/fixtures/valid-tactical-design.yaml +80 -0
- package/template/.claude/skills/yss-tactical-design/tests/run-scenarios.mjs +47 -0
- package/template/.codex/skills/yss-domain/SKILL.md +5 -4
- package/template/.codex/skills/yss-product-lifecycle/SKILL.md +5 -5
- package/template/.codex/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -0
- package/template/.codex/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +139 -4
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +6 -3
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.codex/skills/yss-router/SKILL.md +4 -2
- package/template/.codex/skills/yss-router/references/router-contract.yaml +18 -3
- package/template/.codex/skills/yss-router/references/slice-implementation-contract.md +58 -1
- package/template/.codex/skills/yss-stage-decision/SKILL.md +50 -0
- package/template/.codex/skills/yss-stage-decision/references/domain-strategy-contract.md +26 -0
- package/template/.codex/skills/yss-stage-decision/references/domain-strategy.schema.json +128 -0
- package/template/.codex/skills/yss-stage-decision/references/stage-decision-package-contract.md +19 -0
- package/template/.codex/skills/yss-stage-decision/references/stage-decision-package.schema.json +86 -0
- package/template/.codex/skills/yss-stage-decision/references/validation-rules.md +18 -0
- package/template/.codex/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +169 -0
- package/template/.codex/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +100 -0
- package/template/.codex/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +15 -0
- package/template/.codex/skills/yss-stage-decision/tests/fixtures/invalid-direction.yaml +58 -0
- package/template/.codex/skills/yss-stage-decision/tests/fixtures/invalid-stage-decision-blocker.yaml +44 -0
- package/template/.codex/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +15 -0
- package/template/.codex/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +49 -0
- package/template/.codex/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +108 -0
- package/template/.codex/skills/yss-stage-decision/tests/run-scenarios.mjs +68 -0
- package/template/.codex/skills/yss-tactical-design/SKILL.md +33 -0
- package/template/.codex/skills/yss-tactical-design/agents/openai.yaml +4 -0
- package/template/.codex/skills/yss-tactical-design/references/output-template.md +28 -0
- package/template/.codex/skills/yss-tactical-design/references/tactical-design-contract.md +41 -0
- package/template/.codex/skills/yss-tactical-design/references/tactical-design.schema.json +31 -0
- package/template/.codex/skills/yss-tactical-design/references/validation-rules.md +13 -0
- package/template/.codex/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +213 -0
- package/template/.codex/skills/yss-tactical-design/tests/fixtures/invalid-api-leaks-aggregate.yaml +21 -0
- package/template/.codex/skills/yss-tactical-design/tests/fixtures/invalid-missing-consistency-policy.yaml +21 -0
- package/template/.codex/skills/yss-tactical-design/tests/fixtures/invalid-missing-invariant.yaml +21 -0
- package/template/.codex/skills/yss-tactical-design/tests/fixtures/invalid-stale-upstream-ref.yaml +21 -0
- package/template/.codex/skills/yss-tactical-design/tests/fixtures/invalid-strategic-as-tactical.yaml +21 -0
- package/template/.codex/skills/yss-tactical-design/tests/fixtures/valid-tactical-design.yaml +80 -0
- package/template/.codex/skills/yss-tactical-design/tests/run-scenarios.mjs +47 -0
- package/template/.cursor/skills/yss-domain/SKILL.md +5 -4
- package/template/.cursor/skills/yss-product-lifecycle/SKILL.md +5 -5
- package/template/.cursor/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -0
- package/template/.cursor/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +139 -4
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +6 -3
- package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.cursor/skills/yss-router/SKILL.md +4 -2
- package/template/.cursor/skills/yss-router/references/router-contract.yaml +18 -3
- package/template/.cursor/skills/yss-router/references/slice-implementation-contract.md +58 -1
- package/template/.cursor/skills/yss-stage-decision/SKILL.md +50 -0
- package/template/.cursor/skills/yss-stage-decision/references/domain-strategy-contract.md +26 -0
- package/template/.cursor/skills/yss-stage-decision/references/domain-strategy.schema.json +128 -0
- package/template/.cursor/skills/yss-stage-decision/references/stage-decision-package-contract.md +19 -0
- package/template/.cursor/skills/yss-stage-decision/references/stage-decision-package.schema.json +86 -0
- package/template/.cursor/skills/yss-stage-decision/references/validation-rules.md +18 -0
- package/template/.cursor/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +169 -0
- package/template/.cursor/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +100 -0
- package/template/.cursor/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +15 -0
- package/template/.cursor/skills/yss-stage-decision/tests/fixtures/invalid-direction.yaml +58 -0
- package/template/.cursor/skills/yss-stage-decision/tests/fixtures/invalid-stage-decision-blocker.yaml +44 -0
- package/template/.cursor/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +15 -0
- package/template/.cursor/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +49 -0
- package/template/.cursor/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +108 -0
- package/template/.cursor/skills/yss-stage-decision/tests/run-scenarios.mjs +68 -0
- package/template/.cursor/skills/yss-tactical-design/SKILL.md +33 -0
- package/template/.cursor/skills/yss-tactical-design/agents/openai.yaml +4 -0
- package/template/.cursor/skills/yss-tactical-design/references/output-template.md +28 -0
- package/template/.cursor/skills/yss-tactical-design/references/tactical-design-contract.md +41 -0
- package/template/.cursor/skills/yss-tactical-design/references/tactical-design.schema.json +31 -0
- package/template/.cursor/skills/yss-tactical-design/references/validation-rules.md +13 -0
- package/template/.cursor/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +213 -0
- package/template/.cursor/skills/yss-tactical-design/tests/fixtures/invalid-api-leaks-aggregate.yaml +21 -0
- package/template/.cursor/skills/yss-tactical-design/tests/fixtures/invalid-missing-consistency-policy.yaml +21 -0
- package/template/.cursor/skills/yss-tactical-design/tests/fixtures/invalid-missing-invariant.yaml +21 -0
- package/template/.cursor/skills/yss-tactical-design/tests/fixtures/invalid-stale-upstream-ref.yaml +21 -0
- package/template/.cursor/skills/yss-tactical-design/tests/fixtures/invalid-strategic-as-tactical.yaml +21 -0
- package/template/.cursor/skills/yss-tactical-design/tests/fixtures/valid-tactical-design.yaml +80 -0
- package/template/.cursor/skills/yss-tactical-design/tests/run-scenarios.mjs +47 -0
- package/template/.hermes/skills/yss-domain/SKILL.md +5 -4
- package/template/.hermes/skills/yss-product-lifecycle/SKILL.md +5 -5
- package/template/.hermes/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -0
- package/template/.hermes/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
- package/template/.hermes/skills/yss-product-lifecycle/references/orchestration-contract.yaml +139 -4
- package/template/.hermes/skills/yss-product-lifecycle/references/orchestration.md +6 -3
- package/template/.hermes/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.hermes/skills/yss-router/SKILL.md +4 -2
- package/template/.hermes/skills/yss-router/references/router-contract.yaml +18 -3
- package/template/.hermes/skills/yss-router/references/slice-implementation-contract.md +58 -1
- package/template/.hermes/skills/yss-stage-decision/SKILL.md +50 -0
- package/template/.hermes/skills/yss-stage-decision/references/domain-strategy-contract.md +26 -0
- package/template/.hermes/skills/yss-stage-decision/references/domain-strategy.schema.json +128 -0
- package/template/.hermes/skills/yss-stage-decision/references/stage-decision-package-contract.md +19 -0
- package/template/.hermes/skills/yss-stage-decision/references/stage-decision-package.schema.json +86 -0
- package/template/.hermes/skills/yss-stage-decision/references/validation-rules.md +18 -0
- package/template/.hermes/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +169 -0
- package/template/.hermes/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +100 -0
- package/template/.hermes/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +15 -0
- package/template/.hermes/skills/yss-stage-decision/tests/fixtures/invalid-direction.yaml +58 -0
- package/template/.hermes/skills/yss-stage-decision/tests/fixtures/invalid-stage-decision-blocker.yaml +44 -0
- package/template/.hermes/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +15 -0
- package/template/.hermes/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +49 -0
- package/template/.hermes/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +108 -0
- package/template/.hermes/skills/yss-stage-decision/tests/run-scenarios.mjs +68 -0
- package/template/.hermes/skills/yss-tactical-design/SKILL.md +33 -0
- package/template/.hermes/skills/yss-tactical-design/agents/openai.yaml +4 -0
- package/template/.hermes/skills/yss-tactical-design/references/output-template.md +28 -0
- package/template/.hermes/skills/yss-tactical-design/references/tactical-design-contract.md +41 -0
- package/template/.hermes/skills/yss-tactical-design/references/tactical-design.schema.json +31 -0
- package/template/.hermes/skills/yss-tactical-design/references/validation-rules.md +13 -0
- package/template/.hermes/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +213 -0
- package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-api-leaks-aggregate.yaml +21 -0
- package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-missing-consistency-policy.yaml +21 -0
- package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-missing-invariant.yaml +21 -0
- package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-stale-upstream-ref.yaml +21 -0
- package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-strategic-as-tactical.yaml +21 -0
- package/template/.hermes/skills/yss-tactical-design/tests/fixtures/valid-tactical-design.yaml +80 -0
- package/template/.hermes/skills/yss-tactical-design/tests/run-scenarios.mjs +47 -0
- package/template/.pi/skills/yss-domain/SKILL.md +5 -4
- package/template/.pi/skills/yss-product-lifecycle/SKILL.md +5 -5
- package/template/.pi/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -0
- package/template/.pi/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +139 -4
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +6 -3
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.pi/skills/yss-router/SKILL.md +4 -2
- package/template/.pi/skills/yss-router/references/router-contract.yaml +18 -3
- package/template/.pi/skills/yss-router/references/slice-implementation-contract.md +58 -1
- package/template/.pi/skills/yss-stage-decision/SKILL.md +50 -0
- package/template/.pi/skills/yss-stage-decision/references/domain-strategy-contract.md +26 -0
- package/template/.pi/skills/yss-stage-decision/references/domain-strategy.schema.json +128 -0
- package/template/.pi/skills/yss-stage-decision/references/stage-decision-package-contract.md +19 -0
- package/template/.pi/skills/yss-stage-decision/references/stage-decision-package.schema.json +86 -0
- package/template/.pi/skills/yss-stage-decision/references/validation-rules.md +18 -0
- package/template/.pi/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +169 -0
- package/template/.pi/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +100 -0
- package/template/.pi/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +15 -0
- package/template/.pi/skills/yss-stage-decision/tests/fixtures/invalid-direction.yaml +58 -0
- package/template/.pi/skills/yss-stage-decision/tests/fixtures/invalid-stage-decision-blocker.yaml +44 -0
- package/template/.pi/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +15 -0
- package/template/.pi/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +49 -0
- package/template/.pi/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +108 -0
- package/template/.pi/skills/yss-stage-decision/tests/run-scenarios.mjs +68 -0
- package/template/.pi/skills/yss-tactical-design/SKILL.md +33 -0
- package/template/.pi/skills/yss-tactical-design/agents/openai.yaml +4 -0
- package/template/.pi/skills/yss-tactical-design/references/output-template.md +28 -0
- package/template/.pi/skills/yss-tactical-design/references/tactical-design-contract.md +41 -0
- package/template/.pi/skills/yss-tactical-design/references/tactical-design.schema.json +31 -0
- package/template/.pi/skills/yss-tactical-design/references/validation-rules.md +13 -0
- package/template/.pi/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +213 -0
- package/template/.pi/skills/yss-tactical-design/tests/fixtures/invalid-api-leaks-aggregate.yaml +21 -0
- package/template/.pi/skills/yss-tactical-design/tests/fixtures/invalid-missing-consistency-policy.yaml +21 -0
- package/template/.pi/skills/yss-tactical-design/tests/fixtures/invalid-missing-invariant.yaml +21 -0
- package/template/.pi/skills/yss-tactical-design/tests/fixtures/invalid-stale-upstream-ref.yaml +21 -0
- package/template/.pi/skills/yss-tactical-design/tests/fixtures/invalid-strategic-as-tactical.yaml +21 -0
- package/template/.pi/skills/yss-tactical-design/tests/fixtures/valid-tactical-design.yaml +80 -0
- package/template/.pi/skills/yss-tactical-design/tests/run-scenarios.mjs +47 -0
- package/template/.qoder/skills/yss-domain/SKILL.md +5 -4
- package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +5 -5
- package/template/.qoder/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -0
- package/template/.qoder/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +139 -4
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +6 -3
- package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.qoder/skills/yss-router/SKILL.md +4 -2
- package/template/.qoder/skills/yss-router/references/router-contract.yaml +18 -3
- package/template/.qoder/skills/yss-router/references/slice-implementation-contract.md +58 -1
- package/template/.qoder/skills/yss-stage-decision/SKILL.md +50 -0
- package/template/.qoder/skills/yss-stage-decision/references/domain-strategy-contract.md +26 -0
- package/template/.qoder/skills/yss-stage-decision/references/domain-strategy.schema.json +128 -0
- package/template/.qoder/skills/yss-stage-decision/references/stage-decision-package-contract.md +19 -0
- package/template/.qoder/skills/yss-stage-decision/references/stage-decision-package.schema.json +86 -0
- package/template/.qoder/skills/yss-stage-decision/references/validation-rules.md +18 -0
- package/template/.qoder/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +169 -0
- package/template/.qoder/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +100 -0
- package/template/.qoder/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +15 -0
- package/template/.qoder/skills/yss-stage-decision/tests/fixtures/invalid-direction.yaml +58 -0
- package/template/.qoder/skills/yss-stage-decision/tests/fixtures/invalid-stage-decision-blocker.yaml +44 -0
- package/template/.qoder/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +15 -0
- package/template/.qoder/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +49 -0
- package/template/.qoder/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +108 -0
- package/template/.qoder/skills/yss-stage-decision/tests/run-scenarios.mjs +68 -0
- package/template/.qoder/skills/yss-tactical-design/SKILL.md +33 -0
- package/template/.qoder/skills/yss-tactical-design/agents/openai.yaml +4 -0
- package/template/.qoder/skills/yss-tactical-design/references/output-template.md +28 -0
- package/template/.qoder/skills/yss-tactical-design/references/tactical-design-contract.md +41 -0
- package/template/.qoder/skills/yss-tactical-design/references/tactical-design.schema.json +31 -0
- package/template/.qoder/skills/yss-tactical-design/references/validation-rules.md +13 -0
- package/template/.qoder/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +213 -0
- package/template/.qoder/skills/yss-tactical-design/tests/fixtures/invalid-api-leaks-aggregate.yaml +21 -0
- package/template/.qoder/skills/yss-tactical-design/tests/fixtures/invalid-missing-consistency-policy.yaml +21 -0
- package/template/.qoder/skills/yss-tactical-design/tests/fixtures/invalid-missing-invariant.yaml +21 -0
- package/template/.qoder/skills/yss-tactical-design/tests/fixtures/invalid-stale-upstream-ref.yaml +21 -0
- package/template/.qoder/skills/yss-tactical-design/tests/fixtures/invalid-strategic-as-tactical.yaml +21 -0
- package/template/.qoder/skills/yss-tactical-design/tests/fixtures/valid-tactical-design.yaml +80 -0
- package/template/.qoder/skills/yss-tactical-design/tests/run-scenarios.mjs +47 -0
- package/template/.trae/skills/yss-domain/SKILL.md +5 -4
- package/template/.trae/skills/yss-product-lifecycle/SKILL.md +5 -5
- package/template/.trae/skills/yss-product-lifecycle/references/artifact-dependencies.md +4 -0
- package/template/.trae/skills/yss-product-lifecycle/references/matt-yss-adapter.md +2 -2
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +139 -4
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +6 -3
- package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.trae/skills/yss-router/SKILL.md +4 -2
- package/template/.trae/skills/yss-router/references/router-contract.yaml +18 -3
- package/template/.trae/skills/yss-router/references/slice-implementation-contract.md +58 -1
- package/template/.trae/skills/yss-stage-decision/SKILL.md +50 -0
- package/template/.trae/skills/yss-stage-decision/references/domain-strategy-contract.md +26 -0
- package/template/.trae/skills/yss-stage-decision/references/domain-strategy.schema.json +128 -0
- package/template/.trae/skills/yss-stage-decision/references/stage-decision-package-contract.md +19 -0
- package/template/.trae/skills/yss-stage-decision/references/stage-decision-package.schema.json +86 -0
- package/template/.trae/skills/yss-stage-decision/references/validation-rules.md +18 -0
- package/template/.trae/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +169 -0
- package/template/.trae/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +100 -0
- package/template/.trae/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +15 -0
- package/template/.trae/skills/yss-stage-decision/tests/fixtures/invalid-direction.yaml +58 -0
- package/template/.trae/skills/yss-stage-decision/tests/fixtures/invalid-stage-decision-blocker.yaml +44 -0
- package/template/.trae/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +15 -0
- package/template/.trae/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +49 -0
- package/template/.trae/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +108 -0
- package/template/.trae/skills/yss-stage-decision/tests/run-scenarios.mjs +68 -0
- package/template/.trae/skills/yss-tactical-design/SKILL.md +33 -0
- package/template/.trae/skills/yss-tactical-design/agents/openai.yaml +4 -0
- package/template/.trae/skills/yss-tactical-design/references/output-template.md +28 -0
- package/template/.trae/skills/yss-tactical-design/references/tactical-design-contract.md +41 -0
- package/template/.trae/skills/yss-tactical-design/references/tactical-design.schema.json +31 -0
- package/template/.trae/skills/yss-tactical-design/references/validation-rules.md +13 -0
- package/template/.trae/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +213 -0
- package/template/.trae/skills/yss-tactical-design/tests/fixtures/invalid-api-leaks-aggregate.yaml +21 -0
- package/template/.trae/skills/yss-tactical-design/tests/fixtures/invalid-missing-consistency-policy.yaml +21 -0
- package/template/.trae/skills/yss-tactical-design/tests/fixtures/invalid-missing-invariant.yaml +21 -0
- package/template/.trae/skills/yss-tactical-design/tests/fixtures/invalid-stale-upstream-ref.yaml +21 -0
- package/template/.trae/skills/yss-tactical-design/tests/fixtures/invalid-strategic-as-tactical.yaml +21 -0
- package/template/.trae/skills/yss-tactical-design/tests/fixtures/valid-tactical-design.yaml +80 -0
- package/template/.trae/skills/yss-tactical-design/tests/run-scenarios.mjs +47 -0
- package/template/AGENTS.md +2 -1
- package/template/docs/agents/digital-human-roles.md +2 -2
- package/template/docs/agents/digital-human-roles.yaml +7 -1
- package/template/docs/agents/yss-skill-registry.yaml +12 -0
- package/template/docs/architecture/templates/system-overview-design-template.md +1 -0
- package/template/docs/process/lifecycle-artifact-map.md +8 -0
- package/template/docs/process/lifecycle-registry-baseline.json +11 -1
- package/template/docs/process/lifecycle-registry.yaml +46 -2
- package/template/docs/process/schemas/digital-human-task-package.schema.json +107 -0
- package/template/docs/process/schemas/subagent-task-package.schema.json +6 -0
- package/template/docs/process/subagent-collaboration.md +2 -2
- package/template/docs/templates/subagent-task-package-template.md +39 -1
- package/template/scripts/lib/lifecycle-transition.mjs +259 -0
- package/template/scripts/lib/scenario-checks.mjs +96 -2
- package/template/scripts/lib/task-package.mjs +214 -0
- package/template/scripts/verify-digital-human-task-package +14 -0
- package/template/scripts/verify-digital-human-task-package-scenarios +8 -0
- package/template/scripts/verify-lifecycle-transition-scenarios +105 -0
- package/template/scripts/verify-subagent-task-package +8 -0
- package/template/scripts/verify-subagent-task-package-scenarios +196 -0
- package/template/scripts/verify-template +13 -2
- package/template/skills-lock.json +35 -3
- package/template.snapshot.json +4 -4
package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-stale-upstream-ref.yaml
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
tactical_design_id: tactical-design.invalid-stale
|
|
3
|
+
tactical_version: v1
|
|
4
|
+
status: ready-for-human
|
|
5
|
+
context_ref: context.example
|
|
6
|
+
aggregate_catalog: [{aggregate_id: aggregate.example, name: Example, context_ref: context.example, root_entity: entity.example-root, invariant_refs: [invariant.example], behavior_refs: [behavior.example], consistency_boundary: single, api_exposure: internal-only}]
|
|
7
|
+
entity_catalog: [{entity_id: entity.example-root, name: Root, aggregate_id: aggregate.example, identity: id, lifecycle: active}]
|
|
8
|
+
value_object_catalog: []
|
|
9
|
+
behavior_catalog: [{behavior_id: behavior.example, name: Do, aggregate_id: aggregate.example, command: do, preconditions: [ready], invariant_refs: [invariant.example], postconditions: [done], event_refs: []}]
|
|
10
|
+
invariant_catalog: [{invariant_id: invariant.example, aggregate_id: aggregate.example, statement: required}]
|
|
11
|
+
state_transition_catalog: [{transition_id: transition.example, aggregate_id: aggregate.example, from: draft, to: done, behavior_id: behavior.example}]
|
|
12
|
+
consistency_policy: {transaction_boundary: single, concurrency: optimistic, idempotency: guarded, cross_aggregate_strategy: none}
|
|
13
|
+
domain_event_catalog: []
|
|
14
|
+
gateway_catalog: [{gateway_id: gateway.example, name: Gateway, context_ref: context.example, layer: Domain, capabilities: [load]}]
|
|
15
|
+
persistence_mapping: [{aggregate_id: aggregate.example, storage_model: example, notes: mapping}]
|
|
16
|
+
test_seams: [{seam_id: test-seam.example, kind: domain, subject_ref: invariant.example, assertion: behavior}]
|
|
17
|
+
adr_candidates: []
|
|
18
|
+
upstream_impact: {spec_ref: spec@v1, strategic_ref: strategy@v1, api_ref: api@draft, data_ref: data@v1, upstream_current: false}
|
|
19
|
+
version: v1
|
|
20
|
+
digest: sha256:0000000000000000000000000000000000000000000000000000000000000000
|
|
21
|
+
evidence_refs: []
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
tactical_design_id: tactical-design.invalid-strategic
|
|
3
|
+
tactical_version: v1
|
|
4
|
+
status: ready-for-human
|
|
5
|
+
context_ref: context.example
|
|
6
|
+
aggregate_catalog: [{aggregate_id: aggregate.example, name: Example, context_ref: context.example, root_entity: entity.example-root, model_origin: strategic-concept, invariant_refs: [invariant.example], behavior_refs: [behavior.example], consistency_boundary: single, api_exposure: internal-only}]
|
|
7
|
+
entity_catalog: [{entity_id: entity.example-root, name: Root, aggregate_id: aggregate.example, identity: id, lifecycle: active}]
|
|
8
|
+
value_object_catalog: []
|
|
9
|
+
behavior_catalog: [{behavior_id: behavior.example, name: Do, aggregate_id: aggregate.example, command: do, preconditions: [ready], invariant_refs: [invariant.example], postconditions: [done], event_refs: []}]
|
|
10
|
+
invariant_catalog: [{invariant_id: invariant.example, aggregate_id: aggregate.example, statement: required}]
|
|
11
|
+
state_transition_catalog: [{transition_id: transition.example, aggregate_id: aggregate.example, from: draft, to: done, behavior_id: behavior.example}]
|
|
12
|
+
consistency_policy: {transaction_boundary: single, concurrency: optimistic, idempotency: guarded, cross_aggregate_strategy: none}
|
|
13
|
+
domain_event_catalog: []
|
|
14
|
+
gateway_catalog: [{gateway_id: gateway.example, name: Gateway, context_ref: context.example, layer: Domain, capabilities: [load]}]
|
|
15
|
+
persistence_mapping: [{aggregate_id: aggregate.example, storage_model: example, notes: mapping}]
|
|
16
|
+
test_seams: [{seam_id: test-seam.example, kind: domain, subject_ref: invariant.example, assertion: behavior}]
|
|
17
|
+
adr_candidates: []
|
|
18
|
+
upstream_impact: {spec_ref: spec@v1, strategic_ref: strategy@v1, api_ref: api@draft, data_ref: data@v1, upstream_current: true}
|
|
19
|
+
version: v1
|
|
20
|
+
digest: sha256:0000000000000000000000000000000000000000000000000000000000000000
|
|
21
|
+
evidence_refs: []
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
tactical_design_id: tactical-design.example-feature
|
|
3
|
+
tactical_version: v1
|
|
4
|
+
status: ready-for-human
|
|
5
|
+
context_ref: context.example
|
|
6
|
+
aggregate_catalog:
|
|
7
|
+
- aggregate_id: aggregate.example
|
|
8
|
+
name: ExampleAggregate
|
|
9
|
+
context_ref: context.example
|
|
10
|
+
root_entity: entity.example-root
|
|
11
|
+
invariant_refs: [invariant.example-required]
|
|
12
|
+
behavior_refs: [behavior.example-publish]
|
|
13
|
+
consistency_boundary: single-aggregate-transaction
|
|
14
|
+
api_exposure: internal-only
|
|
15
|
+
entity_catalog:
|
|
16
|
+
- entity_id: entity.example-root
|
|
17
|
+
name: ExampleRoot
|
|
18
|
+
aggregate_id: aggregate.example
|
|
19
|
+
identity: stable-id
|
|
20
|
+
lifecycle: draft-published
|
|
21
|
+
value_object_catalog:
|
|
22
|
+
- value_object_id: value-object.example-code
|
|
23
|
+
name: ExampleCode
|
|
24
|
+
aggregate_id: aggregate.example
|
|
25
|
+
immutable: true
|
|
26
|
+
behavior_catalog:
|
|
27
|
+
- behavior_id: behavior.example-publish
|
|
28
|
+
name: Publish
|
|
29
|
+
aggregate_id: aggregate.example
|
|
30
|
+
command: publish
|
|
31
|
+
preconditions: ["状态为 draft"]
|
|
32
|
+
invariant_refs: [invariant.example-required]
|
|
33
|
+
postconditions: ["状态变为 published"]
|
|
34
|
+
event_refs: [domain-event.example-published]
|
|
35
|
+
invariant_catalog:
|
|
36
|
+
- invariant_id: invariant.example-required
|
|
37
|
+
aggregate_id: aggregate.example
|
|
38
|
+
statement: "发布前必须满足业务前置条件"
|
|
39
|
+
state_transition_catalog:
|
|
40
|
+
- transition_id: transition.example-publish
|
|
41
|
+
aggregate_id: aggregate.example
|
|
42
|
+
from: draft
|
|
43
|
+
to: published
|
|
44
|
+
behavior_id: behavior.example-publish
|
|
45
|
+
consistency_policy:
|
|
46
|
+
transaction_boundary: single aggregate
|
|
47
|
+
concurrency: optimistic version check
|
|
48
|
+
idempotency: repeated publish is rejected by state guard
|
|
49
|
+
cross_aggregate_strategy: domain event with retry
|
|
50
|
+
domain_event_catalog:
|
|
51
|
+
- event_id: domain-event.example-published
|
|
52
|
+
name: ExamplePublished
|
|
53
|
+
aggregate_id: aggregate.example
|
|
54
|
+
consumers: [downstream-context]
|
|
55
|
+
delivery: outbox-at-least-once
|
|
56
|
+
gateway_catalog:
|
|
57
|
+
- gateway_id: gateway.example
|
|
58
|
+
name: ExampleGateway
|
|
59
|
+
context_ref: context.example
|
|
60
|
+
layer: Domain
|
|
61
|
+
capabilities: [save aggregate, load aggregate]
|
|
62
|
+
persistence_mapping:
|
|
63
|
+
- aggregate_id: aggregate.example
|
|
64
|
+
storage_model: example_aggregate_snapshot
|
|
65
|
+
notes: "持久化结构不泄漏到领域模型"
|
|
66
|
+
test_seams:
|
|
67
|
+
- seam_id: test-seam.example-invariant
|
|
68
|
+
kind: domain-behavior
|
|
69
|
+
subject_ref: invariant.example-required
|
|
70
|
+
assertion: "不满足前置条件时 publish 失败"
|
|
71
|
+
adr_candidates: []
|
|
72
|
+
upstream_impact:
|
|
73
|
+
spec_ref: docs/.scratch/example/spec.yaml@v1
|
|
74
|
+
strategic_ref: docs/.scratch/example/domain-strategy.yaml@v1
|
|
75
|
+
api_ref: docs/.scratch/example/openapi.yaml@draft
|
|
76
|
+
data_ref: docs/.scratch/example/data-architecture.md@v1
|
|
77
|
+
upstream_current: true
|
|
78
|
+
version: v1
|
|
79
|
+
digest: sha256:0000000000000000000000000000000000000000000000000000000000000000
|
|
80
|
+
evidence_refs: [docs/.scratch/example/tactical-review.yaml]
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { spawnSync } from "node:child_process";
|
|
6
|
+
import { tmpdir } from "node:os";
|
|
7
|
+
|
|
8
|
+
const root = dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
const validator = join(root, "..", "scripts", "validate-tactical-design.mjs");
|
|
10
|
+
const fixture = (name) => join(root, "fixtures", name);
|
|
11
|
+
const run = (file) => spawnSync(process.execPath, [validator, file], { encoding: "utf8" });
|
|
12
|
+
const pass = run(fixture("valid-tactical-design.yaml"));
|
|
13
|
+
if (pass.status !== 0) throw new Error(`valid tactical design should pass: ${pass.stderr}`);
|
|
14
|
+
|
|
15
|
+
const blockedCases = [
|
|
16
|
+
["invalid-missing-invariant.yaml", "invariant_refs 必须是至少 1 项的数组"],
|
|
17
|
+
["invalid-api-leaks-aggregate.yaml", "api_exposure 必须为 internal-only"],
|
|
18
|
+
["invalid-stale-upstream-ref.yaml", "status 必须为 stale"],
|
|
19
|
+
["invalid-strategic-as-tactical.yaml", "不得直接把战略概念当作 Aggregate"],
|
|
20
|
+
["invalid-missing-consistency-policy.yaml", "consistency_policy.transaction_boundary 缺失"]
|
|
21
|
+
];
|
|
22
|
+
for (const [name, message] of blockedCases) {
|
|
23
|
+
const result = run(fixture(name));
|
|
24
|
+
if (result.status === 0 || !result.stderr.includes(message)) throw new Error(`${name} should be blocked: ${result.stderr}`);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const temporaryRoot = await mkdtemp(join(tmpdir(), "yss-tactical-design-pressure-"));
|
|
28
|
+
try {
|
|
29
|
+
const source = await readFile(fixture("valid-tactical-design.yaml"), "utf8");
|
|
30
|
+
const escalated = join(temporaryRoot, "missing-standalone-ref.yaml");
|
|
31
|
+
await writeFile(escalated, `${source}\ncomplexity:\n escalate_to_standalone: true\n`);
|
|
32
|
+
const result = run(escalated);
|
|
33
|
+
if (result.status === 0 || !result.stderr.includes("standalone_ref")) throw new Error("complexity escalation without standalone_ref should be blocked");
|
|
34
|
+
|
|
35
|
+
const wrongGateway = join(temporaryRoot, "wrong-gateway-layer.yaml");
|
|
36
|
+
await writeFile(wrongGateway, source.replace("layer: Domain", "layer: Infrastructure"));
|
|
37
|
+
const gatewayResult = run(wrongGateway);
|
|
38
|
+
if (gatewayResult.status === 0 || !gatewayResult.stderr.includes("layer 必须为 Domain")) throw new Error("Infrastructure gateway should be blocked");
|
|
39
|
+
|
|
40
|
+
const crossAggregateRoot = join(temporaryRoot, "cross-aggregate-root.yaml");
|
|
41
|
+
await writeFile(crossAggregateRoot, source.replace("aggregate_id: aggregate.example\n identity", "aggregate_id: aggregate.other\n identity"));
|
|
42
|
+
const crossAggregateResult = run(crossAggregateRoot);
|
|
43
|
+
if (crossAggregateResult.status === 0 || !crossAggregateResult.stderr.includes("root_entity 的 aggregate_id 必须与当前 Aggregate 一致")) throw new Error("cross-aggregate root should be blocked");
|
|
44
|
+
} finally {
|
|
45
|
+
await rm(temporaryRoot, { recursive: true, force: true });
|
|
46
|
+
}
|
|
47
|
+
process.stdout.write("DDD tactical design scenarios passed\n");
|
|
@@ -5,7 +5,7 @@ description: 用于构建或重构 YSS 领域层代码。当用户要求设计
|
|
|
5
5
|
|
|
6
6
|
# yss-domain
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
这是一个领域实现 skill。核心目标是消费已批准的战术模型,将领域行为落实为代码;战术模型的设计与批准由 `yss-tactical-design` 和 `yss-product-lifecycle` 负责。
|
|
9
9
|
|
|
10
10
|
默认输出是新 DDD target profile;现有 YSS 组件仓库常见 `core/client/repository`、贫血对象和 VO 型 Gateway 只是 legacy profile,不得静默复制成新模块架构。
|
|
11
11
|
|
|
@@ -23,10 +23,10 @@ description: 用于构建或重构 YSS 领域层代码。当用户要求设计
|
|
|
23
23
|
|
|
24
24
|
## 工作方式
|
|
25
25
|
|
|
26
|
-
1.
|
|
26
|
+
1. 先读取批准且版本当前的 tactical-design contract 和 Slice Implementation Contract。
|
|
27
27
|
2. 数据库字段只做补充,不直接决定领域对象结构。
|
|
28
|
-
3.
|
|
29
|
-
4.
|
|
28
|
+
3. 按合同实现领域行为、状态机、不变量和 Gateway 边界。
|
|
29
|
+
4. 规则不清晰或模型需要扩展时,返回 `new_impacts` / `drift` 并停止,不要静默猜测。
|
|
30
30
|
|
|
31
31
|
## 产物范围
|
|
32
32
|
|
|
@@ -63,6 +63,7 @@ description: 用于构建或重构 YSS 领域层代码。当用户要求设计
|
|
|
63
63
|
## 阶段 7 合同
|
|
64
64
|
|
|
65
65
|
- 只消费生命周期已批准的 `Slice Implementation Contract` 和当前 `work_unit`;不得扩大 `allowed_write_paths`。
|
|
66
|
+
- `Slice Implementation Contract` 必须引用批准且版本当前的 `tactical_design_ref`;不得在实现阶段重新批准或替换聚合、不变量和一致性策略。
|
|
66
67
|
- 领域规则、状态机和不变量必须使用 `behavior-tdd`,先形成失败测试,再实现最小行为。
|
|
67
68
|
- 完成后按 `yss-router/references/yss-skill-execution-result.md` 返回统一 `YSS Skill Execution Result`:changed files、领域/测试证据、实际验证结果、偏离和新增影响。
|
|
68
69
|
- 发现新 API、权限、状态机、数据模型或架构影响时填入 `new_impacts` 并暂停,不得静默扩张切片。
|
|
@@ -27,12 +27,12 @@ Matt 的 `grill-with-docs`、`to-spec`、`to-tickets`、`implement` 等保留为
|
|
|
27
27
|
| 阶段 | 必需产物/门禁 | 工作单元与技能 | 通过条件 |
|
|
28
28
|
|---|---|---|---|
|
|
29
29
|
| 入口分诊 | 身份、影响面、最近可信阶段 | `yss-product-lifecycle` | `yss-project.yaml` 合法且影响面可解释 |
|
|
30
|
-
| 机会调研/需求分析 | Discovery、用户/MVP/非目标/成功标准、测试 seam | `work-unit.discovery-opportunity` + `work-unit.discovery-requirements`;市场/竞品事实用 `competitive-intelligence`,技术/标准事实用 `research`;`grill-with-docs` 为兼容入口 | 未决事实已 research 或 handoff
|
|
30
|
+
| 机会调研/需求分析 | Discovery、用户/MVP/非目标/成功标准、测试 seam;命中 DDD 影响时补充领域战略设计与阶段决策包 | `work-unit.discovery-opportunity` + `work-unit.discovery-requirements` + `work-unit.domain-strategy-design` + `work-unit.stage-decision`;市场/竞品事实用 `competitive-intelligence`,技术/标准事实用 `research`;领域建模用 `domain-modeling`;`grill-with-docs` 为兼容入口 | 未决事实已 research 或 handoff,领域边界和统一语言可审查,阶段决策包完成必要批准 |
|
|
31
31
|
| Spec/功能架构 | Spec、产品总体设计、功能架构;必要时 Spec Delta | 原生 `work-unit.spec-synthesis`;`to-spec` 为兼容入口 | 初稿先为 `ready-for-human`;只有 Spec baseline 会签批准后资产才为 `approved` 并进入下游 |
|
|
32
32
|
| 原型设计 | 交互说明、低保真、状态矩阵、高保真 HTML、评审记录 | `yss-design-system` → `yss-prototype-stage` → `yss-antd-design`(仅原型事实)→ Codex `product-design:index`(非 Codex 交付等价合同)。前端落地改用 `yss-ui` | `gate.prototype-reviewed`、`gate.prototype-verified`、`gate.user-confirmation` 均有证据 |
|
|
33
|
-
| 技术分析 | OpenAPI Draft/Freeze
|
|
33
|
+
| 技术分析 | OpenAPI Draft/Freeze、数据架构、工程基线、架构审查;按领域影响执行 Tactical DDD Check | `yss-openapi-governance` / `yss-openapi-draft-review`、`codebase-design`、`implementation-repo-onboarding`、`yss-tactical-design`、`yss-router` | API/架构契约冻结;无 API 影响有明确记录;战术模型无未解释冲突;脚手架策略满足 |
|
|
34
34
|
| Ticket 正式化 | 功能父 Ticket、垂直切片、Slice Implementation Contract | 原生 `work-unit.ticket-decomposition`;`to-tickets` 为兼容入口;生命周期复算 | 依赖、验收、测试 seam 可执行;合同已批准、持久化且为当前版本 |
|
|
35
|
-
| 技术实现 | 前端/后端代码、TDD 证据、YSS Skill Execution Result | 原生 `work-unit.slice-implementation`;`implement` 为兼容入口;前端按 `yss-ui` + `yss-page-module-development`,后端按 `yss-router` 最小闭包,业务行为统一 `tdd` |
|
|
35
|
+
| 技术实现 | 前端/后端代码、TDD 证据、YSS Skill Execution Result | 原生 `work-unit.slice-implementation`;`implement` 为兼容入口;前端按 `yss-ui` + `yss-page-module-development`,后端按 `yss-router` 最小闭包,业务行为统一 `tdd` | 仅接收已完成 Ticket 正式化、已绑定垂直切片且 `ready-for-agent` 公式通过的输入;只写允许路径;业务行为用 `behavior-tdd`;UI 影响必须有还原计划 |
|
|
36
36
|
| Review/验证 | 不可变候选快照、review 结论、fresh verification | `code-review`(独立于实现者);UI 影响追加 `yss-ui` + `yss-design-system` 的 UI fidelity 轴 | findings 已处理;同一候选快照通过全部审查轴与验证 |
|
|
37
37
|
| 发布/复盘 | 发布/回滚证据、复盘记录 | 生命周期自有工作单元 | fresh verification、独立审查和发布裁决齐全;`gate.release-ready` 仍须生物人 |
|
|
38
38
|
|
|
@@ -42,8 +42,8 @@ Matt 的 `grill-with-docs`、`to-spec`、`to-tickets`、`implement` 等保留为
|
|
|
42
42
|
|
|
43
43
|
## 结果与暂停
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
凡主控向数字人角色或独立运行时正式派发生命周期工作单元,都必须通过结构化任务包派发,并返回 `Workflow Execution Result`(workflow reference、skill、changed files、evidence refs、actual verification、deferred seams、drift/new impacts)。任务包使用 `docs/process/schemas/digital-human-task-package.schema.json`,由 `scripts/verify-digital-human-task-package` 校验;其中 `role_id`、`runtime_id`、`execution_state`、`contract.kind/id/version`、允许写路径、预期证据和汇合引用必须完整。`slice-implementation` 任务包额外绑定批准且当前版本的 Slice Implementation Contract;Discovery、Spec、原型、技术分析、Ticket、Review、发布和模板维护分别绑定各自的生命周期资产或维护 checkpoint,不得伪造 Slice Contract。缺少可读证据、`stale`、`violation`、`drift`、`new_impacts` 或阻塞信号时不得标记 completed。实现授权不包含 Git commit/push 授权;“做完提交”等自然语言意向不构成上述结构化 Git 授权。
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
输出固定包含:模式、当前阶段、影响面、资产/门禁状态、证据、Ticket 正式化状态、垂直切片引用、`ready-for-agent` 计算结果、阻塞项、本轮动作、下一工作单元、暂停/继续理由、Ticket 同步和 Git checkpoint 判断。原生路径未出现 `to-tickets` / `implement` 名称本身不构成异常;但没有完成 `work-unit.ticket-decomposition`、垂直切片仍为 `ready-for-human`、引用父 Ticket 或 `next_route` 越过 Ticket 正式化时必须返回 `blocked`。暂停会签时必须输出门禁 ID、指定 `role_id`、`runtime_id` 和会签文件路径(`docs/.scratch/<feature>/gates/<gate-id>-approval.yaml`)。恢复前运行 `scripts/verify-approval-record`;错误会签记为 `blocked`,不得把该门禁标为 `approved`。任务包的 `core_skills` / `forbidden_skills` 必须从 `docs/agents/digital-human-roles.yaml` 复制(`taskPackageDefaults`),禁止手写第二套。
|
|
48
48
|
|
|
49
49
|
详细执行循环、readiness、脚手架(包括 `controlled-generation`)、审查快照、状态传播和 Matt 边界见 [orchestration.md](references/orchestration.md)、[orchestration-contract.yaml](references/orchestration-contract.yaml)、[artifact-dependencies.md](references/artifact-dependencies.md) 和 [state-model.md](references/state-model.md)。
|
|
@@ -7,6 +7,8 @@ Discovery → Spec → Product Overview / Functional Architecture
|
|
|
7
7
|
Spec + Product Overview → Product Design / Requirement Freeze
|
|
8
8
|
Spec + Product Overview → API Impact / OpenAPI Draft
|
|
9
9
|
Spec + Product Overview → System / Data Architecture
|
|
10
|
+
System / Data Architecture + domain impact → Tactical DDD Check / tactical-design contract
|
|
11
|
+
Tactical DDD contract → Architecture Review / Engineering Baseline / Slice Implementation Contract
|
|
10
12
|
API impact = yes: Requirement Freeze + Design Review + Draft Review → OpenAPI Freeze
|
|
11
13
|
API impact = no: API Impact Assessment approved → No-API-Impact record;Draft/Freeze gates = not-applicable
|
|
12
14
|
Frozen Contract → Vertical Slice Tickets
|
|
@@ -30,3 +32,5 @@ Implementation → Independent Review → Fresh Verification → Release
|
|
|
30
32
|
明确写入需求的认证、授权、租户隔离、敏感数据或合规行为变化不使用独立影响类型;按它实际改变的 UI 状态、API schema、状态机、数据模型或服务边界传播。普通 action 注册、SQL / DDL / 迁移和上传 / 下载只使用既有技术影响类型,不增加安全 / 权限传播。
|
|
31
33
|
|
|
32
34
|
OpenAPI Freeze 后发生上游变化时,不得仅因父 Ticket 仍写阶段 6 就继续实现。先做影响分析,再精准更新相关资产和门禁。
|
|
35
|
+
|
|
36
|
+
战术设计合同上游引用发生版本变化时,先将 tactical-design 标记为 `stale`,再传播到 Slice Contract;发现新的聚合、状态、不变量、一致性或 Gateway 影响时标记 `drift` / `new_impacts` 并重新路由。
|
|
@@ -69,8 +69,8 @@ Router 状态映射为:`draft → completed`、`blocked → blocked`、`ready-
|
|
|
69
69
|
| Matt flow | 进入条件 | 生命周期结果 |
|
|
70
70
|
|---|---|---|
|
|
71
71
|
| `to-spec`(用户显式) | Discovery work unit 或 `grill-with-docs` 已满足退出条件,且不存在未回流 runnable blocker;用户问题、MVP/非目标、成功标准、测试 seam 和术语审查均有证据 | 生命周期只准备/验收;Spec 初稿为 `ready-for-human`,不等于批准 |
|
|
72
|
-
| `to-tickets`(用户显式) | OpenAPI Freeze 或 `no-api-impact` 记录、必要门禁、垂直切片范围和阻塞边均已明确 | 生命周期只准备/验收;只能生成垂直切片 Ticket,初始统一为 `ready-for-human` |
|
|
73
|
-
| `implement`(用户显式) | `ready-for-agent` 公式、Contract 已批准/持久化/版本一致、Build Architecture Checklist、实现仓库/分支/CI/验证命令/回滚点,以及后端 Contract(适用时)均满足 |
|
|
72
|
+
| `to-tickets`(用户显式) | OpenAPI Freeze 或 `no-api-impact` 记录、必要门禁、垂直切片范围和阻塞边均已明确 | 生命周期只准备/验收;只能生成垂直切片 Ticket,初始统一为 `ready-for-human`;必须留下 `ticket_decomposition_result_ref` 和 `vertical_slice_ticket_ref` |
|
|
73
|
+
| `implement`(用户显式) | `ready-for-agent` 公式、Ticket 正式化结果、垂直切片引用/类型/状态、Contract 已批准/持久化/版本一致、Build Architecture Checklist、实现仓库/分支/CI/验证命令/回滚点,以及后端 Contract(适用时)均满足 | 生命周期只准备/验收;单会话实现同样适用,不得绕过门禁;父 Ticket、`ready-for-human` 切片或跳过 Ticket 正式化的 `next_route` 必须 `blocked` |
|
|
74
74
|
|
|
75
75
|
`grill_exit` 不是“已经聊过”的自然语言声明。它必须同时证明 frontier 为空、事实已解决或分别路由到 `research` / prototype / external input、用户决策已确认、双方共同理解已确认,并且没有未回流的 runnable blocker。
|
|
76
76
|
|
|
@@ -100,6 +100,71 @@ workflow_execution_result:
|
|
|
100
100
|
workflow_reference:
|
|
101
101
|
required: [source, skill, invocation_mode]
|
|
102
102
|
allowed_sources: [yss-product-lifecycle, mattpocock/skills]
|
|
103
|
+
next_route:
|
|
104
|
+
validator: scripts/lib/lifecycle-transition.mjs
|
|
105
|
+
function: validateNextRoute
|
|
106
|
+
implementation_predecessor: work-unit.ticket-decomposition
|
|
107
|
+
null_allowed_when: [blocked, needs-human, failed, terminal_completed]
|
|
108
|
+
work_unit_requirements:
|
|
109
|
+
work-unit.ticket-decomposition:
|
|
110
|
+
completed_requires: [vertical_slice_ticket_ref, ticket_decomposition_result_ref]
|
|
111
|
+
work-unit.slice-implementation:
|
|
112
|
+
required: [predecessor_work_unit, ticket_decomposition_result_ref, ticket_decomposition_result_status, vertical_slice_ticket_ref, vertical_slice_ticket_role, vertical_slice_ticket_kind, slice_contract_ticket_ref, slice_contract_status]
|
|
113
|
+
boolean_required: [ready_for_agent, slice_contract_persisted, slice_contract_current_version]
|
|
114
|
+
validator: scripts/lib/lifecycle-transition.mjs
|
|
115
|
+
function: validateImplementationEntry
|
|
116
|
+
|
|
117
|
+
task_package:
|
|
118
|
+
schema_version: 1
|
|
119
|
+
applies_to: all-formal-digital-human-dispatches
|
|
120
|
+
schema_ref: docs/process/schemas/digital-human-task-package.schema.json
|
|
121
|
+
compatibility_schema_ref: docs/process/schemas/subagent-task-package.schema.json
|
|
122
|
+
validator: scripts/verify-digital-human-task-package
|
|
123
|
+
compatibility_validator: scripts/verify-subagent-task-package
|
|
124
|
+
persistence_layout: docs/.scratch/<feature>/task-packages/<task-id>.yaml
|
|
125
|
+
required: [schema_version, task_id, work_unit_id, actor_id, role_id, runtime_id, execution_state, workflow_status, skill_source, contract, inputs, objective, allowed_write_paths, forbidden_actions, expected_outputs, expected_evidence_files, verification_commands, verification_results, downstream_consumers, convergence]
|
|
126
|
+
execution_states: [Explorer, Drafter, Worker, Reviewer, Verifier]
|
|
127
|
+
workflow_statuses: [not-started, active, paused, resolved, failed]
|
|
128
|
+
skill_source:
|
|
129
|
+
registry_ref: docs/agents/digital-human-roles.yaml
|
|
130
|
+
defaults: taskPackageDefaults(role_id)
|
|
131
|
+
copy_required: [core_skills, forbidden_skills]
|
|
132
|
+
contract:
|
|
133
|
+
kinds: [lifecycle-work-unit, slice-implementation, template-maintenance]
|
|
134
|
+
required: [kind, contract_id, contract_version, status, contract_ref]
|
|
135
|
+
status_at_dispatch: issued
|
|
136
|
+
status_after_change: [stale, blocked]
|
|
137
|
+
lifecycle-work-unit:
|
|
138
|
+
required: [lifecycle_ref]
|
|
139
|
+
forbidden: [slice_contract_ref, maintenance_ref]
|
|
140
|
+
template_source_work_unit: forbidden
|
|
141
|
+
slice-implementation:
|
|
142
|
+
required: [slice_contract_ref]
|
|
143
|
+
must_match_current_slice_contract: true
|
|
144
|
+
version_mismatch: blocked
|
|
145
|
+
stage: stage.vertical-slice-implementation
|
|
146
|
+
parent_work_unit: work-unit.slice-implementation
|
|
147
|
+
work_unit_must_be_declared_in_slice_contract: true
|
|
148
|
+
template-maintenance:
|
|
149
|
+
required: [maintenance_ref]
|
|
150
|
+
forbidden: [slice_contract_ref, lifecycle_ref]
|
|
151
|
+
dispatch:
|
|
152
|
+
owner: role.lifecycle-orchestrator
|
|
153
|
+
mode: orchestrator-one-to-one
|
|
154
|
+
per_feature_instances: forbidden
|
|
155
|
+
write_isolation:
|
|
156
|
+
policy: task-package-policy
|
|
157
|
+
changed_files_must_be_within_allowed_paths: true
|
|
158
|
+
shared_workspace_is_not_security_boundary: true
|
|
159
|
+
downstream:
|
|
160
|
+
formal_channel: [task_package_ref, contract_ref, evidence_refs, workflow_execution_result]
|
|
161
|
+
direct_chat_is_not_formal_evidence: true
|
|
162
|
+
stale:
|
|
163
|
+
owner: yss-product-lifecycle
|
|
164
|
+
on_contract_change: [mark_downstream_stale, remove_ready-for-agent, reroute]
|
|
165
|
+
compatibility:
|
|
166
|
+
legacy_results: read-only-normalize
|
|
167
|
+
schema_version: 1
|
|
103
168
|
|
|
104
169
|
# Matt user-invoked skills remain explicit user entry points. Lifecycle work units
|
|
105
170
|
# may prepare, validate and accept their results, but cannot invoke them or create
|
|
@@ -146,6 +211,22 @@ work_unit_routes:
|
|
|
146
211
|
skills: [grilling, domain-modeling]
|
|
147
212
|
applies_when: requirements_or_domain_boundary_unclear
|
|
148
213
|
not_applicable_reason: requirements_already_confirmed
|
|
214
|
+
work-unit.domain-strategy-design:
|
|
215
|
+
native: {source: yss-product-lifecycle, skill: yss-stage-decision, invocation_mode: model-invoked}
|
|
216
|
+
primary_skill: yss-stage-decision
|
|
217
|
+
supporting_skills: [domain-modeling, research, grilling]
|
|
218
|
+
skills: [yss-stage-decision, domain-modeling, research, grilling]
|
|
219
|
+
human_gate: domain-strategy-approved
|
|
220
|
+
applies_when: domain_boundary_or_language_or_core_rule_impact
|
|
221
|
+
not_applicable_reason: no_domain_strategy_impact
|
|
222
|
+
work-unit.stage-decision:
|
|
223
|
+
native: {source: yss-product-lifecycle, skill: yss-stage-decision, invocation_mode: model-invoked}
|
|
224
|
+
primary_skill: yss-stage-decision
|
|
225
|
+
supporting_skills: [domain-modeling]
|
|
226
|
+
skills: [yss-stage-decision, domain-modeling]
|
|
227
|
+
human_gate: stage-decision-package-approved
|
|
228
|
+
applies_when: discovery_to_spec_requires_stable_decision_package
|
|
229
|
+
not_applicable_reason: existing_approved_stage_decision_current
|
|
149
230
|
work-unit.spec-synthesis:
|
|
150
231
|
native: {source: yss-product-lifecycle, skill: yss-product-lifecycle, invocation_mode: model-invoked}
|
|
151
232
|
primary_skill: yss-product-lifecycle
|
|
@@ -166,8 +247,17 @@ work_unit_routes:
|
|
|
166
247
|
work-unit.technical-analysis:
|
|
167
248
|
native: {source: yss-product-lifecycle, skill: yss-product-lifecycle, invocation_mode: model-invoked}
|
|
168
249
|
primary_skill: yss-router
|
|
169
|
-
supporting_skills: [yss-openapi-governance, yss-openapi-draft-review, codebase-design, implementation-repo-onboarding]
|
|
170
|
-
skills: [yss-openapi-governance, yss-openapi-draft-review, codebase-design, implementation-repo-onboarding, yss-router]
|
|
250
|
+
supporting_skills: [yss-openapi-governance, yss-openapi-draft-review, codebase-design, implementation-repo-onboarding, yss-tactical-design]
|
|
251
|
+
skills: [yss-openapi-governance, yss-openapi-draft-review, codebase-design, implementation-repo-onboarding, yss-tactical-design, yss-router]
|
|
252
|
+
tactical_ddd:
|
|
253
|
+
applies_when: [aggregate-impact, state-machine-impact, invariant-impact, consistency-impact, domain-event-impact, gateway-boundary-impact, persistence-mapping-impact]
|
|
254
|
+
not_applicable_reason: no_tactical_ddd_impact
|
|
255
|
+
default_artifact: system-overview-design.tactical-ddd-check
|
|
256
|
+
standalone_artifact: artifact.tactical-design
|
|
257
|
+
review_evidence: evidence.tactical-design-review
|
|
258
|
+
statuses: [draft, ready-for-human, approved, blocked, stale, drift, new_impacts, not-applicable]
|
|
259
|
+
approved_by: yss-product-lifecycle
|
|
260
|
+
forbidden: [self-approval, ready-for-agent, production-code-generation]
|
|
171
261
|
human_gate: openapi-freeze_if_api_impact
|
|
172
262
|
applies_when: technical_or_contract_impact
|
|
173
263
|
not_applicable_reason: no_technical_or_contract_impact
|
|
@@ -179,6 +269,7 @@ work_unit_routes:
|
|
|
179
269
|
skills: [yss-router]
|
|
180
270
|
applies_when: frozen_scope_ready_for_slicing
|
|
181
271
|
not_applicable_reason: contract_or_scope_not_frozen
|
|
272
|
+
must_complete_before: work-unit.slice-implementation
|
|
182
273
|
work-unit.slice-implementation:
|
|
183
274
|
native: {source: yss-product-lifecycle, skill: yss-product-lifecycle, invocation_mode: model-invoked}
|
|
184
275
|
primary_skill: yss-router
|
|
@@ -206,6 +297,7 @@ work_unit_routes:
|
|
|
206
297
|
theme_impact: no_theme_impact
|
|
207
298
|
applies_when: ready_for_agent
|
|
208
299
|
not_applicable_reason: slice_contract_not_approved
|
|
300
|
+
requires_completed_work_units: [work-unit.ticket-decomposition]
|
|
209
301
|
work-unit.frontend-implementation-verification:
|
|
210
302
|
native: {source: yss-product-lifecycle, skill: yss-product-lifecycle, invocation_mode: model-invoked}
|
|
211
303
|
primary_skill: yss-ui
|
|
@@ -239,9 +331,49 @@ compatibility_flow_preconditions:
|
|
|
239
331
|
output: vertical-slice-tickets
|
|
240
332
|
output_role: ready-for-human
|
|
241
333
|
implement:
|
|
242
|
-
required: [ready_for_agent, slice_contract_approved, slice_contract_persisted, slice_contract_current_version, build_architecture_checklist, implementation_repo, implementation_branch, ci, verification_commands, rollback_point, backend_slice_contract_if_applicable, backend_scaffold_policy_satisfied, frontend_implementation_plan_if_ui_impact]
|
|
334
|
+
required: [ready_for_agent, predecessor_work_unit, ticket_decomposition_result_ref, ticket_decomposition_result_status, vertical_slice_ticket_ref, vertical_slice_ticket_role, vertical_slice_ticket_kind, slice_contract_approved, slice_contract_persisted, slice_contract_current_version, build_architecture_checklist, implementation_repo, implementation_branch, ci, verification_commands, rollback_point, backend_slice_contract_if_applicable, backend_scaffold_policy_satisfied, frontend_implementation_plan_if_ui_impact]
|
|
243
335
|
applies_to_single_session: true
|
|
244
336
|
|
|
337
|
+
ticket_formalization:
|
|
338
|
+
implementation_predecessor: work-unit.ticket-decomposition
|
|
339
|
+
result_ref_required: true
|
|
340
|
+
result_must_be: completed
|
|
341
|
+
evidence_refs_required: true
|
|
342
|
+
vertical_slice_ticket:
|
|
343
|
+
kind: vertical-slice-ticket
|
|
344
|
+
role_before_promotion: ready-for-human
|
|
345
|
+
role_for_implementation: ready-for-agent
|
|
346
|
+
local_ref_pattern: '^docs/\\.scratch/[^/]+/issues/[^/]+\\.md$'
|
|
347
|
+
parent_ticket_ref_forbidden: true
|
|
348
|
+
slice_contract_binding:
|
|
349
|
+
ticket_ref_must_equal: vertical_slice_ticket_ref
|
|
350
|
+
status: approved
|
|
351
|
+
persisted: true
|
|
352
|
+
current_version: true
|
|
353
|
+
validator:
|
|
354
|
+
module: scripts/lib/lifecycle-transition.mjs
|
|
355
|
+
functions: [validateNextRoute, validateTicketFormalization, validateImplementationEntry]
|
|
356
|
+
|
|
357
|
+
transition_graph:
|
|
358
|
+
validator: scripts/lib/lifecycle-transition.mjs
|
|
359
|
+
implementation_requires_predecessor: work-unit.ticket-decomposition
|
|
360
|
+
routes:
|
|
361
|
+
work-unit.ssot-update: [work-unit.skill-projection-sync, work-unit.intensity-aware-verification]
|
|
362
|
+
work-unit.skill-projection-sync: [work-unit.template-snapshot-build, work-unit.intensity-aware-verification]
|
|
363
|
+
work-unit.template-snapshot-build: [work-unit.attach-sync-integration, work-unit.intensity-aware-verification]
|
|
364
|
+
work-unit.attach-sync-integration: [work-unit.intensity-aware-verification]
|
|
365
|
+
work-unit.intensity-aware-verification: [work-unit.intensity-aware-review]
|
|
366
|
+
work-unit.intensity-aware-review: [work-unit.release-and-rollback]
|
|
367
|
+
work-unit.release-and-rollback: []
|
|
368
|
+
work-unit.spec-synthesis: [work-unit.prototype-design, work-unit.technical-analysis, work-unit.ticket-decomposition]
|
|
369
|
+
work-unit.prototype-design: [work-unit.technical-analysis, work-unit.ticket-decomposition]
|
|
370
|
+
work-unit.technical-analysis: [work-unit.ticket-decomposition]
|
|
371
|
+
work-unit.ticket-decomposition: [work-unit.slice-implementation]
|
|
372
|
+
forbidden_shortcuts:
|
|
373
|
+
- {from: work-unit.spec-synthesis, to: work-unit.slice-implementation}
|
|
374
|
+
- {from: work-unit.prototype-design, to: work-unit.slice-implementation}
|
|
375
|
+
- {from: work-unit.technical-analysis, to: work-unit.slice-implementation}
|
|
376
|
+
|
|
245
377
|
grill_exit:
|
|
246
378
|
required: [frontier_empty, facts_resolved_or_routed, decisions_confirmed, shared_understanding_confirmed, no_unresolved_runnable_blocker]
|
|
247
379
|
facts_resolved_or_routed:
|
|
@@ -467,7 +599,10 @@ wayfinder_completion:
|
|
|
467
599
|
required: [no_open_children, no_open_blocked_or_claimed_children, no_fog, destination_clear]
|
|
468
600
|
|
|
469
601
|
ready_for_agent:
|
|
470
|
-
required: [gates_satisfied, no_stale_artifacts, blockers_closed, implementation_context_ready, implementation_repo, implementation_branch, ci, verification_commands, rollback_point, slice_contract_approved, slice_contract_persisted, slice_contract_current_version, build_architecture_checklist, backend_slice_contract_if_applicable, backend_scaffold_policy_satisfied, frontend_implementation_plan_if_ui_impact]
|
|
602
|
+
required: [gates_satisfied, no_stale_artifacts, blockers_closed, implementation_context_ready, implementation_repo, implementation_branch, ci, verification_commands, rollback_point, predecessor_work_unit, ticket_decomposition_result_ref, ticket_decomposition_result_status, vertical_slice_ticket_ref, vertical_slice_ticket_role, vertical_slice_ticket_kind, slice_contract_approved, slice_contract_persisted, slice_contract_current_version, build_architecture_checklist, backend_slice_contract_if_applicable, backend_scaffold_policy_satisfied, frontend_implementation_plan_if_ui_impact]
|
|
603
|
+
ticket_formalization_validator: scripts/lib/lifecycle-transition.mjs
|
|
604
|
+
requires_vertical_slice_ticket: true
|
|
605
|
+
parent_ticket_as_implementation_ref: forbidden
|
|
471
606
|
|
|
472
607
|
frontend_implementation_plan:
|
|
473
608
|
applies_when: [ui_impact]
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
1. 识别模式、仓库身份、任务规模和影响面。
|
|
6
6
|
2. `setup readiness`:每个任务只执行一次,核对 tracker、五态标签和领域文档布局,并在本轮缓存结果;仅在 tracker、主远端、真实标签或配置变化时重查。
|
|
7
7
|
3. 加载父 Ticket/checkpoint 与真实资产,计算最近可信阶段。
|
|
8
|
-
4. 评估资产、门禁和 `stale
|
|
9
|
-
5.
|
|
8
|
+
4. 评估资产、门禁和 `stale`,选择第一个未阻塞工作单元。进入 `work-unit.slice-implementation` 前,必须先通过 `scripts/lib/lifecycle-transition.mjs` 的 Ticket 正式化、垂直切片绑定和合法 `next_route` 校验;父 Ticket、缺少垂直切片或 `ready-for-human` 的切片一律 `blocked`。
|
|
9
|
+
5. 执行最小生命周期工作单元:主控先按 `docs/process/schemas/digital-human-task-package.schema.json` 编译并校验任务包,再只实际调用允许的 model-invoked skill;原生工作单元可直接持有正式资产,Matt 兼容 user-invoked skill 仅作为 workflow reference,仍由用户显式启动。将结果归一化为 `Workflow Execution Result`,验收输出并回写状态与证据。任务包的 `contract.kind` 按工作单元选择;只有实现子任务使用 `slice-implementation` 并消费 Slice Implementation Contract,其他阶段不伪造该合同。
|
|
10
10
|
6. 若仍在授权和自动推进边界内,回到第 3 步;否则暂停。
|
|
11
11
|
|
|
12
12
|
不要仅输出下一个提示词后结束 `orchestrate`/`resume`。不要因进入业务代码阶段而退出主控;应把实现交给专项 skill,并在返回后继续核验。
|
|
@@ -51,9 +51,12 @@ tracker 选择和冲突按 `docs/agents/issue-tracker.md` 裁决:已持久化
|
|
|
51
51
|
|
|
52
52
|
## Matt flow 进入条件
|
|
53
53
|
|
|
54
|
+
- `work-unit.technical-analysis` 命中聚合、状态机、不变量、一致性、Domain Event、Gateway 或持久化映射影响时,先调度 `yss-tactical-design` 完成 Tactical DDD Check;默认嵌入系统概要设计 / 数据架构,复杂场景才生成 `artifact.tactical-design`。无领域影响记录 `not-applicable`。该 skill 只返回设计合同和验证结果,批准仍由生命周期编排器维护,发现 `stale`、`drift` 或 `new_impacts` 时不得继续 Ticket 正式化。
|
|
55
|
+
|
|
54
56
|
- `work-unit.discovery-requirements` 实际调用 `grilling` 和 `domain-modeling`;`work-unit.discovery-opportunity` 按事实类型路由 `competitive-intelligence` 或 `research`。生命周期原生工作单元默认负责 Spec、Ticket 和实现资产;`to-spec`、`to-tickets`、`implement` 仅保留为显式兼容入口,结果必须回交生命周期验收。
|
|
55
|
-
- 原生 `work-unit.ticket-decomposition` 只能在 OpenAPI Freeze 或无 API 影响记录后创建垂直切片,初始 Ticket 状态统一为 `ready-for-human`;生命周期复算完整公式后才能提升 `ready-for-agent
|
|
57
|
+
- 原生 `work-unit.ticket-decomposition` 只能在 OpenAPI Freeze 或无 API 影响记录后创建垂直切片,初始 Ticket 状态统一为 `ready-for-human`;生命周期复算完整公式后才能提升 `ready-for-agent`。该工作单元必须返回 `ticket_decomposition_result_ref` 和垂直切片引用,并作为实现的必经前置证据。
|
|
56
58
|
- 原生 `work-unit.slice-implementation` 必须在生命周期批准并持久化 Slice Implementation Contract 和 Build Architecture Checklist 后执行;用户显式 `implement` 仍走兼容入口,不得绕过生命周期。
|
|
59
|
+
- `Workflow Execution Result.next_route` 必须通过生命周期转换校验;Spec、原型和技术分析不得直接跳转到 `work-unit.slice-implementation`,只能先进入 `work-unit.ticket-decomposition`。
|
|
57
60
|
- `implement` 遇到 backend `scaffold_status=required` 时,还必须满足原型确认后的脚手架策略:脚手架 Execution Result、`yss-backend-scaffold-parent` 基线、Wrapper 验证和 Router 合同重编译均已回写;否则停在工程基线,不得写业务代码。
|
|
58
61
|
- `Workflow Execution Result` 出现 `drift`、`new_impacts`、`stale_candidates`、`violation`、`missing_evidence`、空 `evidence_refs` 或缺少必需字段时暂停当前工作单元;旧结果只能先经只读兼容 adapter 归一化。
|
|
59
62
|
|
|
@@ -38,10 +38,15 @@ phase_boundary:
|
|
|
38
38
|
|
|
39
39
|
```text
|
|
40
40
|
required gates ∈ {approved, not-applicable}
|
|
41
|
-
AND related artifacts 不含 stale
|
|
41
|
+
AND related artifacts 不含 stale(若命中领域影响,`artifact.tactical-design` 或嵌入式 Tactical DDD Check 引用必须为当前版本)
|
|
42
42
|
AND blocking edges 全部关闭
|
|
43
43
|
AND implementation repo/branch/CI/test/rollback 已明确
|
|
44
|
+
AND `work-unit.ticket-decomposition` 已返回 `completed`,且其 `ticket_decomposition_result_ref` 证据可读取
|
|
45
|
+
AND `vertical_slice_ticket_ref` 指向 `docs/.scratch/<feature>/issues/` 下的垂直切片 Ticket
|
|
46
|
+
AND `vertical_slice_ticket_kind=vertical-slice-ticket` 且 `vertical_slice_ticket_role=ready-for-agent`
|
|
47
|
+
AND `vertical_slice_ticket_ref` 不得指向 `parent-ticket.md`
|
|
44
48
|
AND Slice Implementation Contract 已由生命周期编排器批准并持久化
|
|
49
|
+
AND Slice Implementation Contract 的 `ticket_ref` 与 `vertical_slice_ticket_ref` 完全一致
|
|
45
50
|
AND 当前工作单元消费的 contract_id/version 与最新批准版本一致
|
|
46
51
|
AND Backend Slice Implementation Contract(后端适用)和 Build Architecture Checklist 已完成
|
|
47
52
|
AND backend 影响且 scaffold_status=required 时,原型确认后的脚手架策略、`yss-backend-scaffold-parent` 基线、Wrapper 验证和 Router 重编译均已完成
|
|
@@ -53,7 +58,7 @@ AND UI 影响切片的前端实现还原计划已通过 schema 校验、`templat
|
|
|
53
58
|
|
|
54
59
|
发布前还必须满足所有已触发门禁均为 `approved` 或 `not-applicable`;UI 影响切片必须额外通过 `gate.frontend-implementation-verified`,不能只凭 fresh verification 和回滚点放行。
|
|
55
60
|
|
|
56
|
-
用户显式运行 `to-tickets` 后,垂直切片初始 Ticket 状态固定为 `ready-for-human
|
|
61
|
+
用户显式运行 `to-tickets` 后,垂直切片初始 Ticket 状态固定为 `ready-for-human`。原生路径执行 `work-unit.ticket-decomposition` 时同样必须产生等价的垂直切片和 `Workflow Execution Result` 证据。只有 `yss-product-lifecycle` 复算上述公式全部为真后,才能把它提升为 `ready-for-agent`;生命周期不会自动调用 `to-tickets`,但不得跳过 Ticket 正式化工作单元。其默认标签也不参与该裁决。
|
|
57
62
|
|
|
58
63
|
## Review 与 Git 授权状态
|
|
59
64
|
|
|
@@ -13,20 +13,21 @@ description: Use when a YSS vertical slice is entering implementation, spans mul
|
|
|
13
13
|
|
|
14
14
|
## 编译循环
|
|
15
15
|
|
|
16
|
-
1. 判断 frontend/backend/API/data/cross-repo 影响,并逐项填写 backend `component_impacts`。
|
|
16
|
+
1. 判断 frontend/backend/API/data/domain/cross-repo 影响,并逐项填写 backend `component_impacts`;命中聚合、状态机、不变量、一致性、Domain Event、Gateway 或持久化映射时加入 `yss-tactical-design`。
|
|
17
17
|
2. 检查工程存在性和核心/长尾 skill 可用性。
|
|
18
18
|
3. 选择主 skill,并按 [router-contract.yaml](references/router-contract.yaml) 计算强制依赖闭包。
|
|
19
19
|
4. 为切片生成基线合同;为当前行为生成工作单元增量路由。
|
|
20
20
|
5. 选择 `behavior-tdd` 或 `controlled-generation`。
|
|
21
21
|
6. 输出 `draft`、`blocked` 或 `ready-for-lifecycle-review`,交生命周期编排器核验和持久化。
|
|
22
22
|
|
|
23
|
-
合同结构见 [slice-implementation-contract.md](references/slice-implementation-contract.md),专项返回协议见 [yss-skill-execution-result.md](references/yss-skill-execution-result.md)
|
|
23
|
+
合同结构见 [slice-implementation-contract.md](references/slice-implementation-contract.md),专项返回协议见 [yss-skill-execution-result.md](references/yss-skill-execution-result.md)。前端、后端和测试子任务必须由生命周期主控从批准的 Slice Contract 编译任务包;任务包 schema 为 `docs/process/schemas/subagent-task-package.schema.json`,技能列表必须来自 `taskPackageDefaults`,不能由 Router 或执行 Agent 另行手写。
|
|
24
24
|
|
|
25
25
|
## 硬规则
|
|
26
26
|
|
|
27
27
|
- Router 不得输出 `approved`、`ready-for-agent` 或 `completed`。
|
|
28
28
|
- UI 影响缺少正式原型确认时,不得路由页面实现。
|
|
29
29
|
- Repository/数据模型影响缺少数据架构时,不得路由持久化实现。
|
|
30
|
+
- 领域影响缺少批准且版本当前的 tactical-design contract 时,不得路由 Domain 实现;无领域影响必须记录 `not-applicable`。
|
|
30
31
|
- API 变化必须回到生命周期 Draft/Review/Freeze;半成品 backend 不得冒充稳定 source of truth。
|
|
31
32
|
- 后端端到端切片必须包含 Application;对象/POJO 影响按契约自动补 `mapstruct`、`lombok`、`alibaba-java-code-style`。
|
|
32
33
|
- Harness 内实现路径必须落在 `apps/backend/<project>/` 或 `apps/frontend/<project>/` 的具体项目目录;`apps/backend/`、`apps/frontend/` 只能作为容器,`app/backend/`、`app/frontend/` 及其子路径一律阻断。外部实现仓库使用其登记的真实项目根路径。`git-submodule` 使用 `implementation_path_policy: git-submodule-harness-apps`,空 gitlink、detached HEAD 或 `--force` 覆盖挂载点不得脚手架;`inspectWorkingTreeScope.writable` 必须为显式布尔值。
|
|
@@ -36,6 +37,7 @@ description: Use when a YSS vertical slice is entering implementation, spans mul
|
|
|
36
37
|
- 脚手架合同在 Router 阶段只能是 `draft` / `ready-for-lifecycle-review` / `blocked`;只有生命周期编排器可以把已持久化脚手架合同标记为 `approved`。脚手架合同只覆盖业务代码前的工程骨架工作单元;生成、基线校验和 Router 重编译完成后,它不能替代脚手架后的 Slice Implementation Contract。
|
|
37
38
|
- 脚手架输出消费批准的脚手架合同;脚手架后的所有生成后端代码都必须绑定当前批准且版本当前的 Slice Implementation Contract、主 YSS skill、依赖闭包、允许写路径、预期证据和 YSS Skill Execution Result。打印命令、`./mvnw validate` 单项通过或脚手架成功不能替代合同批准;生成范围从机械内容变成业务行为时触发完整重路由。
|
|
38
39
|
- 专项结果中的越界路径、缺失证据、`drift`、`violation` 或 `new_impacts` 必须阻断或重路由。
|
|
40
|
+
- 前后端子任务必须使用同一 `contract_id/contract_version`,并在任务包中记录 `role_id`、`runtime_id`、`execution_state`、`allowed_write_paths`、`downstream_consumers` 和 `convergence_ref`;版本不一致或汇合引用缺失时输出 `blocked`。
|
|
39
41
|
- 长尾 skill 不可用时显式 `blocked`,不得用通用知识假装已应用 YSS 规范。
|
|
40
42
|
|
|
41
43
|
## 三级路由
|
|
@@ -66,11 +66,11 @@ exclusive_flags:
|
|
|
66
66
|
|
|
67
67
|
slice_contract_required:
|
|
68
68
|
root: [schema_version, contract_id, contract_version, slice_id, status, lifecycle_refs, readiness, common, frontend, backend, contract, cross_repo, work_units]
|
|
69
|
-
lifecycle_refs: [spec, ticket, requirement_freeze, low_fidelity_review, prototype_review, high_fidelity_html, prototype_verification, antd_cli_evidence, browser_verification_evidence, prototype_confirmation, openapi_freeze_or_no_impact, architecture_review, data_architecture, engineering_baseline, build_architecture_checklist, implementation_repository, frontend_repository, backend_repository, maven_wrapper]
|
|
69
|
+
lifecycle_refs: [spec, ticket, requirement_freeze, low_fidelity_review, prototype_review, high_fidelity_html, prototype_verification, antd_cli_evidence, browser_verification_evidence, prototype_confirmation, openapi_freeze_or_no_impact, architecture_review, data_architecture, tactical_design, engineering_baseline, build_architecture_checklist, implementation_repository, frontend_repository, backend_repository, maven_wrapper]
|
|
70
70
|
readiness: [blockers, stale_inputs, not_applicable]
|
|
71
71
|
common: [impacted_areas, implementation_path_policy, project_roots, required_skills, optional_skills, unavailable_skills, allowed_write_paths, forbidden_patterns, expected_evidence_files, verification_commands, human_review_points, full_reroute_triggers]
|
|
72
72
|
frontend: [status, required_skills, approved_prototype_ref, state_matrix_ref, allowed_write_paths, component_test_seams, e2e_paths]
|
|
73
|
-
backend: [status, affected_layers, component_impacts, required_skills, application_boundary, transaction_boundary, persistence_strategy, allowed_write_paths, forbidden_patterns, expected_evidence_files, seam_deferred, verification_commands]
|
|
73
|
+
backend: [status, affected_layers, component_impacts, required_skills, application_boundary, transaction_boundary, persistence_strategy, allowed_write_paths, forbidden_patterns, expected_evidence_files, seam_deferred, verification_commands, tactical_ddd]
|
|
74
74
|
contract: [api_impact, freeze_ref, no_api_impact_ref, generated_clients, contract_tests, regeneration_commands]
|
|
75
75
|
cross_repo: [repositories, delivery_order, integration_verification, rollback_order]
|
|
76
76
|
|
|
@@ -91,6 +91,7 @@ lifecycle_ref_by_readiness:
|
|
|
91
91
|
openapi_freeze: openapi_freeze_or_no_impact
|
|
92
92
|
no_api_impact_record: openapi_freeze_or_no_impact
|
|
93
93
|
data_architecture: data_architecture
|
|
94
|
+
tactical_design: tactical_design
|
|
94
95
|
engineering_baseline: engineering_baseline
|
|
95
96
|
backend_repository: backend_repository
|
|
96
97
|
maven_wrapper: maven_wrapper
|
|
@@ -135,6 +136,10 @@ applicable_subcontract_nonempty:
|
|
|
135
136
|
backend:
|
|
136
137
|
scalar: [application_boundary, transaction_boundary, persistence_strategy]
|
|
137
138
|
array: [affected_layers, required_skills, allowed_write_paths, forbidden_patterns, expected_evidence_files, verification_commands]
|
|
139
|
+
conditional_tactical_ddd:
|
|
140
|
+
when: [aggregate-impact, state-machine-impact, invariant-impact, consistency-impact, domain-event-impact, gateway-boundary-impact, persistence-mapping-impact]
|
|
141
|
+
scalar: [tactical_design_ref, tactical_design_version, gateway_boundary_ref]
|
|
142
|
+
array: [aggregate_refs, invariant_refs, state_behavior_refs, domain_test_seams, application_test_seams]
|
|
138
143
|
contract_api:
|
|
139
144
|
scalar: [freeze_ref]
|
|
140
145
|
array: [contract_tests]
|
|
@@ -148,8 +153,12 @@ dependency_closure:
|
|
|
148
153
|
always: [yss-backend-scaffold-parent, alibaba-java-code-style]
|
|
149
154
|
yss-domain:
|
|
150
155
|
always: [alibaba-java-code-style]
|
|
151
|
-
when_modeling: [domain-modeling]
|
|
156
|
+
when_modeling: [domain-modeling, yss-tactical-design]
|
|
152
157
|
when_pojo: [lombok]
|
|
158
|
+
yss-tactical-design:
|
|
159
|
+
always: [domain-modeling]
|
|
160
|
+
when_api_impact: [yss-openapi-draft-review]
|
|
161
|
+
when_data_impact: [yss-repository]
|
|
153
162
|
yss-application:
|
|
154
163
|
always: [alibaba-java-code-style]
|
|
155
164
|
when_conversion: [mapstruct, lombok]
|
|
@@ -218,6 +227,12 @@ full_reroute_triggers:
|
|
|
218
227
|
- data-model-impact
|
|
219
228
|
- new-write-path
|
|
220
229
|
- new-repository
|
|
230
|
+
- aggregate-impact
|
|
231
|
+
- invariant-impact
|
|
232
|
+
- consistency-impact
|
|
233
|
+
- domain-event-impact
|
|
234
|
+
- gateway-boundary-impact
|
|
235
|
+
- persistence-mapping-impact
|
|
221
236
|
- new-required-skill
|
|
222
237
|
- not-applicable-invalidated
|
|
223
238
|
- architecture-drift
|