create-yss-spec 3.1.3 → 3.3.0
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 +5 -1
- package/package.json +1 -1
- package/template/.agents/skills/.strategic-design-skills-manifest.json +1 -1
- package/template/.agents/skills/code-review/SKILL.md +4 -0
- package/template/.agents/skills/code-review/agents/openai.yaml +1 -1
- package/template/.agents/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.agents/skills/yss-domain/SKILL.md +3 -3
- package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.agents/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.agents/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.agents/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.agents/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.agents/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.agents/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.agents/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.agents/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.agents/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.agents/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.agents/skills/yss-repository/SKILL.md +28 -70
- package/template/.agents/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.agents/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.agents/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.agents/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.agents/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.agents/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.agents/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.agents/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.agents/skills/yss-tactical-design/references/output-template.md +2 -0
- package/template/.agents/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.agents/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +3 -2
- package/template/.agents/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.agents/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.agents/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.agents/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.agents/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.agents/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.agents/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.agents/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.agents/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/.claude/skills/code-review/SKILL.md +4 -0
- package/template/.claude/skills/code-review/agents/openai.yaml +1 -1
- package/template/.claude/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.claude/skills/yss-domain/SKILL.md +3 -3
- package/template/.claude/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.claude/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.claude/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.claude/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.claude/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.claude/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.claude/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.claude/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.claude/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.claude/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.claude/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.claude/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.claude/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.claude/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.claude/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.claude/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.claude/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.claude/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.claude/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.claude/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.claude/skills/yss-repository/SKILL.md +28 -70
- package/template/.claude/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.claude/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.claude/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.claude/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.claude/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.claude/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.claude/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.claude/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.claude/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.claude/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.claude/skills/yss-tactical-design/references/output-template.md +2 -0
- package/template/.claude/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.claude/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +3 -2
- package/template/.claude/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.claude/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.claude/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.claude/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.claude/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.claude/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.claude/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.claude/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.claude/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/.codex/skills/code-review/SKILL.md +4 -0
- package/template/.codex/skills/code-review/agents/openai.yaml +1 -1
- package/template/.codex/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.codex/skills/yss-domain/SKILL.md +3 -3
- package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.codex/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.codex/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.codex/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.codex/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.codex/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.codex/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.codex/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.codex/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.codex/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.codex/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.codex/skills/yss-repository/SKILL.md +28 -70
- package/template/.codex/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.codex/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.codex/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.codex/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.codex/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.codex/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.codex/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.codex/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.codex/skills/yss-tactical-design/references/output-template.md +2 -0
- package/template/.codex/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.codex/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +3 -2
- package/template/.codex/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.codex/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.codex/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.codex/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.codex/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.codex/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.codex/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.codex/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.codex/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/.cursor/skills/code-review/SKILL.md +4 -0
- package/template/.cursor/skills/code-review/agents/openai.yaml +1 -1
- package/template/.cursor/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.cursor/skills/yss-domain/SKILL.md +3 -3
- package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.cursor/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.cursor/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.cursor/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.cursor/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.cursor/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.cursor/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.cursor/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.cursor/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.cursor/skills/yss-repository/SKILL.md +28 -70
- package/template/.cursor/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.cursor/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.cursor/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.cursor/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.cursor/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.cursor/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.cursor/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.cursor/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.cursor/skills/yss-tactical-design/references/output-template.md +2 -0
- package/template/.cursor/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.cursor/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +3 -2
- package/template/.cursor/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.cursor/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.cursor/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.cursor/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.cursor/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.cursor/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.cursor/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.cursor/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.cursor/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/.pi/skills/code-review/SKILL.md +4 -0
- package/template/.pi/skills/code-review/agents/openai.yaml +1 -1
- package/template/.pi/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.pi/skills/yss-domain/SKILL.md +3 -3
- package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.pi/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.pi/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.pi/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.pi/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.pi/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.pi/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.pi/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.pi/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.pi/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.pi/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.pi/skills/yss-repository/SKILL.md +28 -70
- package/template/.pi/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.pi/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.pi/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.pi/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.pi/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.pi/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.pi/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.pi/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.pi/skills/yss-tactical-design/references/output-template.md +2 -0
- package/template/.pi/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.pi/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +3 -2
- package/template/.pi/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.pi/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.pi/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.pi/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.pi/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.pi/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.pi/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.pi/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.pi/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/.qoder/skills/code-review/SKILL.md +4 -0
- package/template/.qoder/skills/code-review/agents/openai.yaml +1 -1
- package/template/.qoder/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.qoder/skills/yss-domain/SKILL.md +3 -3
- package/template/.qoder/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.qoder/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.qoder/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.qoder/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.qoder/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.qoder/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.qoder/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.qoder/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.qoder/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.qoder/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.qoder/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.qoder/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.qoder/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.qoder/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.qoder/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.qoder/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.qoder/skills/yss-repository/SKILL.md +28 -70
- package/template/.qoder/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.qoder/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.qoder/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.qoder/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.qoder/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.qoder/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.qoder/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.qoder/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.qoder/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.qoder/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.qoder/skills/yss-tactical-design/references/output-template.md +2 -0
- package/template/.qoder/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.qoder/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +3 -2
- package/template/.qoder/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.qoder/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.qoder/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.qoder/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.qoder/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.qoder/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.qoder/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.qoder/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.qoder/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/.trae/skills/code-review/SKILL.md +4 -0
- package/template/.trae/skills/code-review/agents/openai.yaml +1 -1
- package/template/.trae/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.trae/skills/yss-domain/SKILL.md +3 -3
- package/template/.trae/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.trae/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.trae/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.trae/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.trae/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.trae/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.trae/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.trae/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.trae/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.trae/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.trae/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.trae/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.trae/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.trae/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.trae/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.trae/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.trae/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.trae/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.trae/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.trae/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.trae/skills/yss-repository/SKILL.md +28 -70
- package/template/.trae/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.trae/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.trae/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.trae/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.trae/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.trae/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.trae/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.trae/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.trae/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.trae/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.trae/skills/yss-tactical-design/references/output-template.md +2 -0
- package/template/.trae/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.trae/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +3 -2
- package/template/.trae/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.trae/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.trae/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.trae/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.trae/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.trae/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.trae/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.trae/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.trae/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/CONTEXT.md +2 -1
- package/template/docs/agents/digital-human-roles.yaml +4 -2
- package/template/docs/agents/yss-skill-registry.yaml +25 -1
- package/template/docs/architecture/templates/architecture-review-checklist.md +1 -1
- package/template/docs/architecture/templates/system-overview-design-template.md +15 -4
- package/template/docs/process/lifecycle-artifact-map.md +6 -0
- package/template/docs/process/lifecycle-registry-baseline.json +8 -1
- package/template/docs/process/lifecycle-registry.yaml +32 -2
- package/template/docs/process/schemas/implementation-repository-preparation-result.schema.json +38 -0
- package/template/docs/process/schemas/project-scaffold-contract.schema.json +113 -0
- package/template/docs/process/schemas/strategic-design-handoff.schema.json +77 -4
- package/template/docs/process/strategic-handoff-package.md +4 -2
- package/template/docs/process/template-verification-profiles.yaml +37 -0
- package/template/docs/templates/implementation-repo-registry-template.md +8 -0
- package/template/docs/templates/review-report-template.md +7 -3
- package/template/docs/user-guide//346/210/230/346/234/257/350/256/276/350/256/241/345/255/220/351/241/271/347/233/256/347/224/250/346/210/267/346/211/213/345/206/214.md +7 -6
- package/template/scripts/fixtures/strategic-handoff/fixture.mjs +3 -2
- package/template/scripts/lib/implementation-contract-compiler.mjs +8 -1
- package/template/scripts/lib/lifecycle-context-query.mjs +137 -0
- package/template/scripts/lib/lifecycle-transition.mjs +109 -3
- package/template/scripts/lib/scenario-checks.mjs +29 -26
- package/template/scripts/lib/skill-registry.mjs +9 -0
- package/template/scripts/lib/strategic-handoff-consumption.mjs +4 -4
- package/template/scripts/lib/strategic-handoff-design-targets.mjs +15 -0
- package/template/scripts/lib/technical-design-boundary.mjs +23 -0
- package/template/scripts/query-lifecycle-context +25 -0
- package/template/scripts/sync-strategic-handoff-tools +3 -2
- package/template/scripts/verify-business-language-scenarios +0 -7
- package/template/scripts/verify-frontend-scaffold-generator-scenarios +2 -0
- package/template/scripts/verify-lifecycle-context-query-scenarios +68 -0
- package/template/scripts/verify-lifecycle-transition-scenarios +44 -4
- package/template/scripts/verify-strategic-handoff-package-scenarios +7 -1
- package/template/skills-lock.json +48 -18
- package/template.snapshot.json +4 -4
- package/template/.agents/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.agents/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.agents/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.agents/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.agents/skills/yss-mybatis/references/README.md +0 -57
- package/template/.agents/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
- package/template/.claude/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.claude/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.claude/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.claude/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.claude/skills/yss-mybatis/references/README.md +0 -57
- package/template/.claude/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
- package/template/.codex/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.codex/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.codex/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.codex/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.codex/skills/yss-mybatis/references/README.md +0 -57
- package/template/.codex/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
- package/template/.cursor/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.cursor/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.cursor/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.cursor/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.cursor/skills/yss-mybatis/references/README.md +0 -57
- package/template/.cursor/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
- package/template/.pi/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.pi/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.pi/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.pi/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.pi/skills/yss-mybatis/references/README.md +0 -57
- package/template/.pi/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
- package/template/.qoder/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.qoder/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.qoder/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.qoder/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.qoder/skills/yss-mybatis/references/README.md +0 -57
- package/template/.qoder/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
- package/template/.trae/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.trae/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.trae/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.trae/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.trae/skills/yss-mybatis/references/README.md +0 -57
- package/template/.trae/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
const load = ref => JSON.parse(readFileSync(new URL(ref, import.meta.url), 'utf8'));
|
|
5
|
+
const schema = load('../references/technical-design-common.schema.json');
|
|
6
|
+
const branches = [
|
|
7
|
+
['domain-driven', '../../yss-tactical-design/references/tactical-design.schema.json'],
|
|
8
|
+
['layered-mvc', '../../yss-mvc-design/references/mvc-design.schema.json']
|
|
9
|
+
];
|
|
10
|
+
schema.$comment = 'Generated by scripts/generate-schema.mjs from common and specialist schemas. Do not hand-edit.';
|
|
11
|
+
schema.allOf = branches.map(([family, ref]) => {
|
|
12
|
+
const branch = load(ref); delete branch.$id; delete branch.$schema;
|
|
13
|
+
return { if: { properties: { architecture: { properties: { family: { const: family } } } } }, then: { properties: { design: branch } } };
|
|
14
|
+
});
|
|
15
|
+
const output = fileURLToPath(new URL('../references/technical-design.schema.json', import.meta.url));
|
|
16
|
+
const bytes = `${JSON.stringify(schema, null, 2)}\n`;
|
|
17
|
+
if (process.argv.includes('--check')) {
|
|
18
|
+
if (readFileSync(output, 'utf8') !== bytes) throw new Error('技术设计 Schema 投影漂移,请运行 generate-schema.mjs');
|
|
19
|
+
} else writeFileSync(output, bytes);
|
|
20
|
+
process.stdout.write('技术设计分支 Schema 已同步\n');
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
5
|
+
import { parseArgs } from 'node:util';
|
|
6
|
+
import { assertScaffoldUserDecision } from '../../../../scripts/lib/user-decision.mjs';
|
|
7
|
+
import { validateJsonSchema } from '../../../../scripts/lib/json-schema.mjs';
|
|
8
|
+
import { read, safe, hash, digest, ensure } from '../../../../scripts/lib/strategic-handoff-io.mjs';
|
|
9
|
+
import { validate as validateDdd } from '../../yss-tactical-design/scripts/validate-tactical-design.mjs';
|
|
10
|
+
import { designTargets } from '../../../../scripts/lib/strategic-handoff-design-targets.mjs';
|
|
11
|
+
import { verifyConsumption } from '../../../../scripts/lib/strategic-handoff-consumption.mjs';
|
|
12
|
+
|
|
13
|
+
const schema = fileURLToPath(new URL('../references/technical-design.schema.json', import.meta.url));
|
|
14
|
+
const text = x => typeof x === 'string' && x.trim().length > 0;
|
|
15
|
+
const nonempty = xs => Array.isArray(xs) && xs.length > 0 && xs.every(text);
|
|
16
|
+
export const technicalDigest = data => digest(Object.fromEntries(Object.entries(data).filter(([key]) => key !== 'digest')));
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
function validateMvc(design) {
|
|
20
|
+
const modules = new Map(design.module_catalog.map(item => [item.module_id, item]));
|
|
21
|
+
const cases = new Map(design.use_case_catalog.map(item => [item.use_case_id, item]));
|
|
22
|
+
const rules = new Set(design.rule_catalog.map(item => item.rule_id));
|
|
23
|
+
const permitted = {
|
|
24
|
+
server: ['service','core','client'], service: ['repository','adapter'], core: ['repository','adapter'],
|
|
25
|
+
repository: [], adapter: ['client','feign-client'], client: [], 'feign-client': ['client']
|
|
26
|
+
};
|
|
27
|
+
for (const module of modules.values()) for (const ref of module.depends_on) {
|
|
28
|
+
ensure(modules.has(ref) && permitted[module.layer].includes(modules.get(ref).layer), `模块依赖越界: ${module.module_id} -> ${ref}`);
|
|
29
|
+
}
|
|
30
|
+
for (const item of cases.values()) {
|
|
31
|
+
ensure(['service','core'].includes(modules.get(item.module_ref)?.layer), `用例必须属于 service/core: ${item.use_case_id}`);
|
|
32
|
+
ensure(item.rule_refs.every(ref => rules.has(ref)), `用例引用未声明规则: ${item.use_case_id}`);
|
|
33
|
+
}
|
|
34
|
+
for (const rule of design.rule_catalog) ensure(rule.use_case_refs.every(ref => cases.has(ref) && cases.get(ref).rule_refs.includes(rule.rule_id)), `规则与用例未双向关联: ${rule.rule_id}`);
|
|
35
|
+
for (const item of design.state_transition_catalog) ensure(cases.has(item.use_case_ref), '状态转换引用未声明用例');
|
|
36
|
+
if (!design.state_transition_catalog.length) ensure(text(design.state_not_applicable_reason), '无状态转换必须说明原因');
|
|
37
|
+
for (const item of design.persistence_mapping) ensure(cases.has(item.use_case_ref) && modules.get(item.repository_ref)?.layer === 'repository', '持久化映射的用例或 Repository 引用无效');
|
|
38
|
+
for (const item of design.integration_catalog) ensure(modules.get(item.adapter_ref)?.layer === 'adapter', '外部集成必须关联 Adapter');
|
|
39
|
+
if (!design.integration_catalog.length) ensure(text(design.integration_not_applicable_reason), '无外部集成必须说明原因');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function verifyArchitecture(data, root) {
|
|
43
|
+
const binding = data.architecture;
|
|
44
|
+
const file = safe(root, binding.decision_ref);
|
|
45
|
+
ensure(hash(readFileSync(file)) === binding.decision_digest, '架构来源摘要漂移');
|
|
46
|
+
const record = read(file);
|
|
47
|
+
if (binding.source_kind === 'scaffold-decision') {
|
|
48
|
+
const decision = record.decisions?.find(item => item.project_id === binding.project_id);
|
|
49
|
+
ensure(record.status === 'current' && record.template === false, '架构选择记录必须为当前正式记录');
|
|
50
|
+
ensure(decision && ['user-confirmed','lifecycle-approved','consumed'].includes(decision.status), '分支设计前必须确认项目架构');
|
|
51
|
+
ensure(decision.confirmed_architecture === binding.family, '技术设计与确认架构不匹配');
|
|
52
|
+
ensure(text(decision.user_confirmation?.confirmation_ref) && text(decision.user_confirmation?.confirmed_by), '缺少真实架构确认引用');
|
|
53
|
+
assertScaffoldUserDecision(decision, { root });
|
|
54
|
+
} else {
|
|
55
|
+
// Registration formats differ by repository; bind the actual registered identity,
|
|
56
|
+
// never infer architecture from a directory or a design's self-declaration.
|
|
57
|
+
const entry = record.repositories?.find(item => item.project_id === binding.project_id) ?? record;
|
|
58
|
+
ensure(entry.project_id === binding.project_id && entry.architecture_identity?.architecture_family === binding.family, '技术设计与既有工程登记架构不匹配');
|
|
59
|
+
ensure(!['stale','blocked'].includes(record.status) && !['stale','blocked'].includes(entry.status), '工程登记已失效');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function validateLocalTraceability(data, root, sliceRef) {
|
|
64
|
+
const { ids, seams } = designTargets(data);
|
|
65
|
+
const sources = new Map(data.source_items.map(item => [item.source_id, item]));
|
|
66
|
+
ensure(sources.size === data.source_items.length, '源规则或场景 ID 重复');
|
|
67
|
+
const rows = new Map(data.traceability.map(item => [item.source_id, item]));
|
|
68
|
+
ensure(rows.size === data.traceability.length, '承接记录重复');
|
|
69
|
+
ensure(data.strategic_handoff || sources.size > 0, '无战略包时必须列出需求规则与场景');
|
|
70
|
+
for (const source of sources.values()) ensure(data.inputs.some(item => item.ref === source.source_ref), '源规则或场景未绑定当前输入');
|
|
71
|
+
for (const id of rows.keys()) ensure(sources.has(id), `未知承接来源: ${id}`);
|
|
72
|
+
for (const [id, source] of sources) {
|
|
73
|
+
const row = rows.get(id);
|
|
74
|
+
ensure(row, `缺少规则或场景承接: ${id}`);
|
|
75
|
+
if (row.disposition === 'implemented') {
|
|
76
|
+
ensure(nonempty(row.tactical_refs) && row.tactical_refs.every(ref => ids.has(ref)), `设计落点悬空: ${id}`);
|
|
77
|
+
ensure(nonempty(row.test_seam_refs) && row.test_seam_refs.every(ref => seams.has(ref) && row.tactical_refs.includes(seams.get(ref).subject_ref)), `测试 seam 未关联设计落点: ${id}`);
|
|
78
|
+
if (source.kind === 'scenario' && source.critical) ensure(['success','failure'].every(outcome => row.scenario_tests?.some(test => test.outcome === outcome && row.test_seam_refs.includes(test.seam_ref))), `关键场景缺少成功/失败测试: ${id}`);
|
|
79
|
+
ensure(nonempty(row.evidence_refs), `缺少承接证据: ${id}`);
|
|
80
|
+
} else if (row.disposition === 'not-applicable') {
|
|
81
|
+
ensure(text(row.reason) && nonempty(row.evidence_refs), `不适用缺少依据: ${id}`);
|
|
82
|
+
} else {
|
|
83
|
+
if (row.disposition === 'deferred') for (const key of ['reason','risk','owner','followup_ticket_ref','verification_plan','target_version']) ensure(text(row[key]), `延期缺少 ${key}: ${id}`);
|
|
84
|
+
ensure(sliceRef && row.dependency_status === 'known' && nonempty(row.dependent_slice_refs) && !row.dependent_slice_refs.includes(sliceRef), `未闭合承接阻断当前范围: ${id}`);
|
|
85
|
+
}
|
|
86
|
+
for (const ref of row.evidence_refs || []) safe(root, ref);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export async function validateTechnicalDesign(data, { root = process.cwd(), sliceRef, legacyDdd = false } = {}) {
|
|
91
|
+
if (data?.schema_version === 1) {
|
|
92
|
+
ensure(legacyDdd, '旧 v1 合同需要显式 --legacy-ddd,仅按 DDD 兼容读取');
|
|
93
|
+
const errors = validateDdd(data);
|
|
94
|
+
ensure(!errors.length, errors.join('; '));
|
|
95
|
+
if (sliceRef) ensure(data.status === 'approved', '切片只能消费 approved 设计');
|
|
96
|
+
if (data.strategic_handoff || data.strategic_context_import_ref || data.upstream_impact?.source_kind === 'strategic-handoff') {
|
|
97
|
+
const result = await verifyConsumption(data, { root, sliceRef });
|
|
98
|
+
ensure(result.result === 'verified', JSON.stringify(result));
|
|
99
|
+
}
|
|
100
|
+
return { result: 'legacy-ddd-read-only', architecture_family: 'domain-driven', status: data.status };
|
|
101
|
+
}
|
|
102
|
+
validateJsonSchema(data, schema, { label: '技术设计合同' });
|
|
103
|
+
ensure(data.digest === technicalDigest(data), '技术设计合同摘要不匹配');
|
|
104
|
+
ensure(!['stale','blocked','drift','new_impacts'].includes(data.status), '设计状态不可消费');
|
|
105
|
+
if (sliceRef) ensure(data.status === 'approved', '切片只能消费 approved 设计');
|
|
106
|
+
verifyArchitecture(data, root);
|
|
107
|
+
ensure(data.inputs.some(item => item.kind === 'context' && item.ref === 'CONTEXT.md') && data.inputs.some(item => item.kind === 'spec'), '共同输入缺少根 CONTEXT.md 或 Spec');
|
|
108
|
+
for (const input of data.inputs) ensure(hash(readFileSync(safe(root, input.ref))) === input.digest, `输入摘要漂移: ${input.ref}`);
|
|
109
|
+
for (const ref of data.evidence_refs) safe(root, ref);
|
|
110
|
+
if (data.status === 'approved') ensure(data.evidence_refs.length > 0, '已批准设计缺少评审证据');
|
|
111
|
+
if (data.architecture.family === 'domain-driven') {
|
|
112
|
+
const errors = validateDdd(data.design);
|
|
113
|
+
ensure(!errors.length, errors.join('; '));
|
|
114
|
+
ensure(data.design.status === data.status, 'DDD 分支状态与共同合同不一致');
|
|
115
|
+
ensure(data.inputs.some(item => item.kind === 'strategic'), 'DDD 分支缺少战略领域输入');
|
|
116
|
+
ensure(!data.design.strategic_handoff && !data.design.strategic_context_import_ref, '战略绑定只允许在共同合同中维护');
|
|
117
|
+
} else validateMvc(data.design);
|
|
118
|
+
const { ids, seams } = designTargets(data);
|
|
119
|
+
for (const seam of seams.values()) ensure(ids.has(seam.subject_ref), `测试 seam 设计对象悬空: ${seam.seam_id}`);
|
|
120
|
+
validateLocalTraceability(data, root, sliceRef);
|
|
121
|
+
if (data.strategic_handoff) {
|
|
122
|
+
const result = await verifyConsumption(data, { root, sliceRef });
|
|
123
|
+
ensure(result.result === 'verified', JSON.stringify(result));
|
|
124
|
+
}
|
|
125
|
+
return { result: 'ready-for-lifecycle-review', technical_design_id: data.technical_design_id, architecture_family: data.architecture.family, status: data.status, digest: data.digest };
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
async function main() {
|
|
129
|
+
const { values, positionals } = parseArgs({ allowPositionals: true, options: { root: { type: 'string', default: process.cwd() }, slice: { type: 'string' }, 'legacy-ddd': { type: 'boolean', default: false } } });
|
|
130
|
+
ensure(positionals.length === 1, '用法: validate-technical-design.mjs <合同> --root <项目根> [--slice <ID>] [--legacy-ddd]');
|
|
131
|
+
const result = await validateTechnicalDesign(read(path.resolve(positionals[0])), { root: values.root, sliceRef: values.slice, legacyDdd: values['legacy-ddd'] });
|
|
132
|
+
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
133
|
+
}
|
|
134
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) main().catch(error => { process.stderr.write(`${JSON.stringify({ result: 'blocked', errors: [error.message] })}\n`); process.exitCode = 1; });
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { writeFileSync, readFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { hash } from '../../../../scripts/lib/strategic-handoff-io.mjs';
|
|
4
|
+
import { technicalDigest } from '../scripts/validate-technical-design.mjs';
|
|
5
|
+
export function mvcFixture(root) {
|
|
6
|
+
const files = {
|
|
7
|
+
'CONTEXT.md': '# 业务上下文\n',
|
|
8
|
+
'spec.md': '# 需求\nrule.valid: 必填材料完整。scenario.submit: 提交成功或校验失败。\n',
|
|
9
|
+
'registration.json': JSON.stringify({ project_id: 'example', status: 'current', architecture_identity: { architecture_family: 'layered-mvc' } }),
|
|
10
|
+
'review.md': '设计评审测试证据;不构成真实批准。\n'
|
|
11
|
+
};
|
|
12
|
+
for (const [ref, bytes] of Object.entries(files)) writeFileSync(path.join(root, ref), bytes);
|
|
13
|
+
const data = {
|
|
14
|
+
schema_version: 2, technical_design_id: 'technical-design.example', version: 'v1', status: 'ready-for-human', context_ref: 'CONTEXT.md',
|
|
15
|
+
architecture: { family: 'layered-mvc', project_id: 'example', source_kind: 'existing-registration', decision_ref: 'registration.json', decision_digest: hash(readFileSync(path.join(root, 'registration.json'))) },
|
|
16
|
+
inputs: ['CONTEXT.md','spec.md'].map((ref,index) => ({ kind: index ? 'spec' : 'context', ref, version: 'v1', digest: hash(readFileSync(path.join(root,ref))) })),
|
|
17
|
+
source_items: [{ source_id: 'rule.valid', kind: 'rule', critical: false, source_ref: 'spec.md' }, { source_id: 'scenario.submit', kind: 'scenario', critical: true, source_ref: 'spec.md' }],
|
|
18
|
+
traceability: ['rule.valid','scenario.submit'].map(source_id => ({ source_id, disposition: 'implemented', tactical_refs: ['use-case.submit'], test_seam_refs: ['test-seam.success','test-seam.failure'], evidence_refs: ['spec.md'], dependency_status: 'known', dependent_slice_refs: ['slice.submit'], scenario_tests: [{ outcome: 'success', seam_ref: 'test-seam.success' }, { outcome: 'failure', seam_ref: 'test-seam.failure' }] })),
|
|
19
|
+
design: {
|
|
20
|
+
module_catalog: [{ module_id: 'module.server', layer: 'server', responsibility: 'HTTP 适配', depends_on: ['module.service'] }, { module_id: 'module.service', layer: 'service', responsibility: '提交用例和事务', depends_on: ['module.repository'] }, { module_id: 'module.repository', layer: 'repository', responsibility: '数据持久化', depends_on: [] }],
|
|
21
|
+
use_case_catalog: [{ use_case_id: 'use-case.submit', module_ref: 'module.service', flow: ['校验材料','保存申请'], rule_refs: ['rule.valid'], failure_handling: '材料不完整拒绝提交,写入失败回滚' }],
|
|
22
|
+
rule_catalog: [{ rule_id: 'rule.valid', statement: '材料必须完整', use_case_refs: ['use-case.submit'] }],
|
|
23
|
+
state_transition_catalog: [], state_not_applicable_reason: '本范围只登记申请,无状态流转',
|
|
24
|
+
consistency_policy: { transaction_boundary: '一次提交同一事务', rollback: '写入失败整体回滚', concurrency: '唯一约束拒绝竞争提交', idempotency: '请求键唯一' },
|
|
25
|
+
persistence_mapping: [{ mapping_id: 'mapping.application', use_case_ref: 'use-case.submit', repository_ref: 'module.repository', storage_model: 'application', notes: '请求键唯一' }],
|
|
26
|
+
integration_catalog: [], integration_not_applicable_reason: '无外部集成',
|
|
27
|
+
test_seams: [{ seam_id: 'test-seam.success', kind: 'service', subject_ref: 'use-case.submit', assertion: '完整材料保存成功' }, { seam_id: 'test-seam.failure', kind: 'service', subject_ref: 'use-case.submit', assertion: '缺材料时不写入' }]
|
|
28
|
+
}, evidence_refs: ['review.md']
|
|
29
|
+
};
|
|
30
|
+
data.digest = technicalDigest(data);
|
|
31
|
+
return data;
|
|
32
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { mkdtempSync, readFileSync, writeFileSync, rmSync } from 'node:fs';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { attachScaffoldDecisionFixture } from '../../../../scripts/fixtures/user-decision/build-fixture.mjs';
|
|
8
|
+
import { mvcFixture } from './fixtures.mjs';
|
|
9
|
+
import { technicalDigest, validateTechnicalDesign } from '../scripts/validate-technical-design.mjs';
|
|
10
|
+
import { hash, read } from '../../../../scripts/lib/strategic-handoff-io.mjs';
|
|
11
|
+
import { enforceTechnicalDesign } from '../../../../scripts/lib/technical-design-boundary.mjs';
|
|
12
|
+
import { compileDefaultImplementationContract, evaluateContractFreshness, loadCompilerContract } from '../../../../scripts/lib/implementation-contract-compiler.mjs';
|
|
13
|
+
import { loadSkillRegistry } from '../../../../scripts/lib/skill-registry.mjs';
|
|
14
|
+
const root = mkdtempSync(path.join(tmpdir(), 'yss-technical-design-'));
|
|
15
|
+
let checks = 0;
|
|
16
|
+
try {
|
|
17
|
+
const mvc = mvcFixture(root);
|
|
18
|
+
const validate = data => validateTechnicalDesign(data, { root });
|
|
19
|
+
assert.equal((await validate(mvc)).architecture_family, 'layered-mvc'); checks++;
|
|
20
|
+
async function rejected(change, pattern) {
|
|
21
|
+
const data = structuredClone(mvc); change(data); data.digest = technicalDigest(data);
|
|
22
|
+
await assert.rejects(() => validate(data), pattern); checks++;
|
|
23
|
+
}
|
|
24
|
+
await rejected(d => { d.architecture.family = 'mixed'; }, /not one of/);
|
|
25
|
+
await rejected(d => { d.architecture.project_id = 'wrong'; }, /登记架构不匹配/);
|
|
26
|
+
await rejected(d => { d.architecture.decision_digest = `sha256:${'0'.repeat(64)}`; }, /来源摘要漂移/);
|
|
27
|
+
await rejected(d => { d.traceability.pop(); }, /缺少规则或场景承接/);
|
|
28
|
+
await rejected(d => { d.traceability[1].scenario_tests.pop(); }, /成功\/失败测试/);
|
|
29
|
+
await rejected(d => { d.traceability[0].tactical_refs = ['aggregate.fake']; }, /设计落点悬空/);
|
|
30
|
+
await rejected(d => { d.design.module_catalog[0].depends_on = ['module.repository']; }, /模块依赖越界/);
|
|
31
|
+
await rejected(d => { d.design.consistency_policy.transaction_boundary = ''; }, /non-empty/);
|
|
32
|
+
await rejected(d => { d.design.aggregate_catalog = []; }, /Additional properties/);
|
|
33
|
+
await rejected(d => { d.design.test_seams[0].subject_ref = 'missing'; }, /设计对象悬空/);
|
|
34
|
+
await rejected(d => { d.status = 'stale'; }, /状态不可消费/);
|
|
35
|
+
await rejected(d => { d.traceability[0].disposition = 'conflict'; }, /未闭合承接/);
|
|
36
|
+
const deferred = structuredClone(mvc); deferred.status = 'approved';
|
|
37
|
+
Object.assign(deferred.traceability[0], { disposition: 'deferred', reason: '下一版', risk: '提交不可用', owner: '维护者', followup_ticket_ref: 'ticket.next', verification_plan: '回归提交', target_version: 'v2' });
|
|
38
|
+
deferred.digest = technicalDigest(deferred);
|
|
39
|
+
await assert.rejects(() => validateTechnicalDesign(deferred, { root, sliceRef: 'slice.submit' }), /未闭合承接/); checks++;
|
|
40
|
+
assert.equal((await validateTechnicalDesign(deferred, { root, sliceRef: 'slice.other' })).architecture_family, 'layered-mvc'); checks++;
|
|
41
|
+
deferred.traceability[0].dependency_status = 'unknown'; deferred.digest = technicalDigest(deferred);
|
|
42
|
+
await assert.rejects(() => validateTechnicalDesign(deferred, { root, sliceRef: 'slice.other' }), /未闭合承接/); checks++;
|
|
43
|
+
writeFileSync(path.join(root, 'spec.md'), 'changed');
|
|
44
|
+
await assert.rejects(() => validate(mvc), /输入摘要漂移/); checks++;
|
|
45
|
+
mvcFixture(root);
|
|
46
|
+
const old = read(fileURLToPath(new URL('../../yss-tactical-design/tests/fixtures/valid-tactical-design.yaml', import.meta.url)));
|
|
47
|
+
await assert.rejects(() => validate(old), /显式 --legacy-ddd/); checks++;
|
|
48
|
+
assert.equal((await validateTechnicalDesign(old, { root, legacyDdd: true })).result, 'legacy-ddd-read-only'); checks++;
|
|
49
|
+
const ddd = structuredClone(mvc); ddd.architecture.family = 'domain-driven';
|
|
50
|
+
writeFileSync(path.join(root, 'registration.json'), JSON.stringify({ project_id: 'example', status: 'current', architecture_identity: { architecture_family: 'domain-driven' } }));
|
|
51
|
+
ddd.architecture.decision_digest = hash(readFileSync(path.join(root, 'registration.json'))); ddd.design = old;
|
|
52
|
+
ddd.inputs.push({ kind: 'strategic', ref: 'spec.md', version: 'v1', digest: hash(readFileSync(path.join(root, 'spec.md'))) });
|
|
53
|
+
for (const row of ddd.traceability) Object.assign(row, { tactical_refs: [old.test_seams[0].subject_ref], test_seam_refs: [old.test_seams[0].seam_id], scenario_tests: ['success','failure'].map(outcome => ({ outcome, seam_ref: old.test_seams[0].seam_id })) });
|
|
54
|
+
ddd.digest = technicalDigest(ddd);
|
|
55
|
+
assert.equal((await validate(ddd)).architecture_family, 'domain-driven'); checks++;
|
|
56
|
+
ddd.design.aggregate_catalog[0].api_exposure = 'public'; ddd.digest = technicalDigest(ddd);
|
|
57
|
+
await assert.rejects(() => validate(ddd), /internal-only/); checks++;
|
|
58
|
+
const scaffold = mvcFixture(root);
|
|
59
|
+
const decision = attachScaffoldDecisionFixture(path.join(root, 'decision-evidence'), { project_id: 'example', status: 'user-confirmed', confirmed_architecture: 'layered-mvc', decision_inputs_digest: `sha256:${'1'.repeat(64)}`, user_confirmation: { confirmation_ref: 'user-message', confirmed_by: 'user' } });
|
|
60
|
+
const record = { status: 'current', template: false, decisions: [decision] };
|
|
61
|
+
const recordFile = path.join(root, 'decision.json');
|
|
62
|
+
writeFileSync(recordFile, JSON.stringify(record));
|
|
63
|
+
scaffold.architecture = { ...scaffold.architecture, source_kind: 'scaffold-decision', decision_ref: 'decision.json', decision_digest: hash(readFileSync(recordFile)) }; scaffold.digest = technicalDigest(scaffold);
|
|
64
|
+
assert.equal((await validate(scaffold)).architecture_family, 'layered-mvc'); checks++;
|
|
65
|
+
record.decisions[0].status = 'awaiting-user-decision'; writeFileSync(recordFile, JSON.stringify(record)); scaffold.architecture.decision_digest = hash(readFileSync(recordFile)); scaffold.digest = technicalDigest(scaffold);
|
|
66
|
+
await assert.rejects(() => validate(scaffold), /分支设计前必须确认/); checks++;
|
|
67
|
+
record.decisions[0].status = 'user-confirmed'; record.decisions[0].user_confirmation.user_decision_ref = 'missing-user-decision.json'; writeFileSync(recordFile, JSON.stringify(record)); scaffold.architecture.decision_digest = hash(readFileSync(recordFile)); scaffold.digest = technicalDigest(scaffold);
|
|
68
|
+
await assert.rejects(() => validate(scaffold), /user-decision/); checks++;
|
|
69
|
+
const current = mvcFixture(root); current.status = 'approved'; current.digest = technicalDigest(current);
|
|
70
|
+
const file = path.join(root, 'design.json'); writeFileSync(file, JSON.stringify(current));
|
|
71
|
+
const technical_design = { ref: 'design.json', version: 'v1', digest: hash(readFileSync(file)) };
|
|
72
|
+
const identity = { architecture_family: 'layered-mvc', architecture_profile: 'layered-mvc-service', generator_skill: 'yss-layered-mvc-scaffold-generator', requested_capabilities: [], resolved_modules: ['server','service','repository'], verification_database: 'h2', production_database: 'not-bound', contract_digest: 'a'.repeat(64) };
|
|
73
|
+
const state = { technical_design, slice_id: 'slice.submit', architecture_identity: identity, conditions: ['backend-technical-design-impact'] };
|
|
74
|
+
enforceTechnicalDesign(state, { root }); checks++;
|
|
75
|
+
assert.throws(() => enforceTechnicalDesign({ ...state, technical_design: undefined }, { root }), /缺少已批准技术设计/); checks++;
|
|
76
|
+
assert.throws(() => enforceTechnicalDesign({ ...state, architecture_identity: { architecture_family: 'domain-driven' } }, { root }), /架构不匹配/); checks++;
|
|
77
|
+
const resolution = compileDefaultImplementationContract({ ...state, root, requiredCapabilities: ['contract.request-validation'], architecture_evidence: { engineering_baseline: identity, repository_registration: identity, manifest: identity } });
|
|
78
|
+
assert.deepEqual(resolution.technical_design, technical_design); assert(!resolution.required_skills.includes('yss-domain')); checks++;
|
|
79
|
+
writeFileSync(path.join(root, 'spec.md'), 'changed again');
|
|
80
|
+
assert.equal(evaluateContractFreshness({ schema_version: 2, resolution }, { registry: loadSkillRegistry(), compilerContract: loadCompilerContract(), root }).freshness, 'stale'); checks++;
|
|
81
|
+
} finally { rmSync(root, { recursive: true, force: true }); }
|
|
82
|
+
process.stdout.write(`技术设计场景通过:${checks} 项(MVC、DDD、兼容、架构、承接、切片与漂移)\n`);
|
package/template/CONTEXT.md
CHANGED
|
@@ -72,7 +72,8 @@ context_schema_version: 1
|
|
|
72
72
|
| 战略交接快照包 | 将批准的战略资产及证据冻结为可离线验证的完整目录或 ZIP,并提供规则和场景的派生索引。 | — | 源规则由战略方维护;包内快照与索引不成为目标仓词汇权威。 |
|
|
73
73
|
| 后端交付包 | 将后端当前切片的战略基线、冻结接口、批准合同及构建、部署和验证证据绑定为可独立接收的交付快照。 | — | 验包通过不代表真实服务当前可用,也不代表前端已获准实现。 |
|
|
74
74
|
| 前端联合接收 | 前端对战略交接快照与后端交付包进行版本、词汇、场景、接口和运行条件核验的过程。 | — | 输入就绪允许准备实现计划和合同;写代码仍需批准且当前的 Slice Implementation Contract。 |
|
|
75
|
-
|
|
|
75
|
+
| 技术设计合同 | 按已确认架构统一记录共同输入、规则与场景承接、对应设计及审查证据的合同。 | — | 技术设计由通用入口组织,领域建模与传统分层是可选分支,生命周期负责批准。 |
|
|
76
|
+
| 战术承接记录 | 将源规则和关键场景关联到所选架构的设计落点、测试 seam、处置结论及依赖切片的结构化记录。 | — | 延期登记不等于依赖切片可实现;冲突回交战略方,未知依赖扩大阻断。 |
|
|
76
77
|
| 流程模板资产 | 可被不同项目复用的文档模板、技能说明、校验脚本、流程规范和目录占位文件。 | — | 不包含某个具体产品的 Spec、设计、OpenAPI 或 Ticket。 |
|
|
77
78
|
| 模板维护流程 | 用于评估影响、修改权威资产、同步投影、执行压力验证并审查模板演进的工作流。 | — | 面向模板源仓库,不默认生成具体产品的 Spec、原型、OpenAPI 或垂直切片 Ticket。 |
|
|
78
79
|
| 模板发布门禁 | 模板源发布前必须通过的结构、技能同步、流程语义和压力场景验证集合。 | — | 不等同于只检查文件存在、Markdown 链接或 YAML 语法。 |
|
|
@@ -152,8 +152,8 @@ roles:
|
|
|
152
152
|
contract_version: 1
|
|
153
153
|
title: YSS 后端工程师
|
|
154
154
|
stages: [stage.system-data-engineering, stage.ticket-formalization, stage.vertical-slice-implementation, stage.verification-release-retrospective]
|
|
155
|
-
draft_artifact_ids: [artifact.openapi-draft, artifact.data-architecture]
|
|
156
|
-
core_skills: [yss-implementation-contract-compiler, yss-tactical-design, yss-domain, yss-application, yss-repository, yss-mybatis, yss-web-controller, yss-dto, mapstruct, lombok, alibaba-java-code-style, yss-exception, yss-validation, tdd, yss-ddd-scaffold-generator, yss-layered-mvc-scaffold-generator]
|
|
155
|
+
draft_artifact_ids: [artifact.openapi-draft, artifact.data-architecture, artifact.technical-design]
|
|
156
|
+
core_skills: [yss-implementation-contract-compiler, yss-technical-design, yss-tactical-design, yss-mvc-design, yss-domain, yss-application, yss-repository, yss-mybatis, yss-web-controller, yss-dto, mapstruct, lombok, alibaba-java-code-style, yss-exception, yss-validation, tdd, yss-ddd-scaffold-generator, yss-layered-mvc-scaffold-generator]
|
|
157
157
|
forbidden_skills: [yss-ui, yss-ui-business-page-generation, yss-formily, yss-frontend-scaffold-generator, yss-antd-design, yss-antdv-next-design, page-list-module, page-form-module]
|
|
158
158
|
description: >-
|
|
159
159
|
Own OpenAPI Draft, data-architecture contributions, and backend tests.
|
|
@@ -219,6 +219,7 @@ gate_policy:
|
|
|
219
219
|
- gate.repository-identity-valid
|
|
220
220
|
- gate.prototype-verified
|
|
221
221
|
orchestrator:
|
|
222
|
+
- gate.implementation-repositories-ready
|
|
222
223
|
- gate.slice-contract-approved
|
|
223
224
|
- gate.slice-ready-for-agent
|
|
224
225
|
digital_human_review:
|
|
@@ -275,6 +276,7 @@ user_decision_policy:
|
|
|
275
276
|
work_units:
|
|
276
277
|
work-unit.discovery-requirements: discovery-conclusion
|
|
277
278
|
work-unit.service-project-initialization: scaffold-choice
|
|
279
|
+
work-unit.implementation-repository-preparation: scaffold-choice
|
|
278
280
|
work-unit.slice-implementation: implementation-scope
|
|
279
281
|
work-unit.release-and-retrospective: gate.release-ready
|
|
280
282
|
work_unit_gates:
|
|
@@ -57,12 +57,14 @@ capability_contract:
|
|
|
57
57
|
preserve_all_reasons: true
|
|
58
58
|
deterministic_order: [recipe-declaration, dependency-topology, skill-id]
|
|
59
59
|
capabilities:
|
|
60
|
+
- { id: architecture.technical-design, primary_skill: yss-technical-design, task_modes: [guidance, integration, review-input] }
|
|
61
|
+
- { id: architecture.mvc-design, primary_skill: yss-mvc-design, architecture_family: layered-mvc, task_modes: [guidance, integration, review-input] }
|
|
60
62
|
- { id: layer.mvc-service, primary_skill: yss-application, architecture_family: layered-mvc, task_modes: [guidance, integration, slice-implementation, troubleshooting, review-input] }
|
|
61
63
|
- { id: layer.mvc-persistence, primary_skill: yss-repository, architecture_family: layered-mvc, task_modes: [guidance, integration, slice-implementation, troubleshooting, review-input] }
|
|
62
64
|
- { id: layer.mvc-web, primary_skill: yss-web-controller, architecture_family: layered-mvc, task_modes: [guidance, integration, slice-implementation, troubleshooting, review-input] }
|
|
63
65
|
- { id: governance.implementation-contract, primary_skill: yss-implementation-contract-compiler, task_modes: [contract-compilation, reroute, result-validation] }
|
|
64
66
|
- { id: maintenance.skill-source-index, primary_skill: yss-skill-source-index-refresh, task_modes: [component-maintenance, source-index-refresh] }
|
|
65
|
-
- { id: architecture.tactical-domain, primary_skill: yss-tactical-design, task_modes: [guidance, integration, slice-implementation, review-input] }
|
|
67
|
+
- { id: architecture.tactical-domain, primary_skill: yss-tactical-design, architecture_family: domain-driven, task_modes: [guidance, integration, slice-implementation, review-input] }
|
|
66
68
|
- { id: layer.domain, primary_skill: yss-domain, task_modes: [guidance, integration, slice-implementation, troubleshooting, review-input] }
|
|
67
69
|
- { id: layer.application, primary_skill: yss-application, task_modes: [guidance, integration, slice-implementation, troubleshooting, review-input] }
|
|
68
70
|
- { id: layer.persistence, primary_skill: yss-repository, task_modes: [guidance, integration, slice-implementation, troubleshooting, review-input] }
|
|
@@ -83,6 +85,7 @@ capabilities:
|
|
|
83
85
|
- { id: component.gateway-resilience, primary_skill: yss-resilience4j, task_modes: [guidance, integration, slice-implementation, troubleshooting, component-maintenance, review-input] }
|
|
84
86
|
- { id: scaffold.ddd, primary_skill: yss-ddd-scaffold-generator, task_modes: [integration, component-maintenance] }
|
|
85
87
|
- { id: scaffold.layered-mvc, primary_skill: yss-layered-mvc-scaffold-generator, task_modes: [integration, component-maintenance] }
|
|
88
|
+
- { id: scaffold.frontend-vue3, primary_skill: yss-frontend-scaffold-generator, task_modes: [integration, component-maintenance] }
|
|
86
89
|
- { id: project-init.mvc-data-analysis, primary_skill: yss-mvc-data-analysis-project-initializer, task_modes: [component-maintenance] }
|
|
87
90
|
- { id: migration.springboot3, primary_skill: yss-up-springboot3, task_modes: [guidance, integration, troubleshooting, component-maintenance, review-input] }
|
|
88
91
|
recipes:
|
|
@@ -104,8 +107,12 @@ recipes:
|
|
|
104
107
|
- { id: backend.distributed-id, capabilities: [component.distributed-id] }
|
|
105
108
|
- { id: backend.ddd-scaffold, capabilities: [scaffold.ddd, quality.java-code-style] }
|
|
106
109
|
- { id: backend.mvc-scaffold, capabilities: [scaffold.layered-mvc, quality.java-code-style] }
|
|
110
|
+
- { id: frontend.vue3-scaffold, capabilities: [scaffold.frontend-vue3] }
|
|
107
111
|
- { id: backend.springboot3-migration, capabilities: [migration.springboot3, quality.java-code-style] }
|
|
108
112
|
skill_dependencies:
|
|
113
|
+
code-review:
|
|
114
|
+
- { skill: yss-repository, type: context-conditional, when: backend-persistence-impact }
|
|
115
|
+
- { skill: yss-mybatis, type: context-conditional, when: backend-persistence-impact }
|
|
109
116
|
yss-prototype-stage:
|
|
110
117
|
- { skill: prototype-review, type: review-only }
|
|
111
118
|
- { skill: yss-design-system, type: coordination-only }
|
|
@@ -121,6 +128,11 @@ skill_dependencies:
|
|
|
121
128
|
- { skill: domain-modeling, type: coordination-only }
|
|
122
129
|
- { skill: yss-tactical-design, type: context-conditional, when: tactical-domain }
|
|
123
130
|
- { skill: lombok, type: context-conditional, when: pojo }
|
|
131
|
+
yss-technical-design:
|
|
132
|
+
- { skill: yss-tactical-design, type: coordination-only, when: domain-driven }
|
|
133
|
+
- { skill: yss-mvc-design, type: coordination-only, when: layered-mvc }
|
|
134
|
+
yss-mvc-design:
|
|
135
|
+
- { skill: yss-openapi-draft-review, type: review-only, when: api-impact }
|
|
124
136
|
yss-tactical-design:
|
|
125
137
|
- { skill: domain-modeling, type: coordination-only }
|
|
126
138
|
- { skill: yss-openapi-draft-review, type: review-only, when: api-impact }
|
|
@@ -479,6 +491,18 @@ skills:
|
|
|
479
491
|
instance_default_discoverable: false
|
|
480
492
|
aliases: []
|
|
481
493
|
impacts: [backend]
|
|
494
|
+
- id: yss-technical-design
|
|
495
|
+
layer: core
|
|
496
|
+
maturity: draft
|
|
497
|
+
instance_default_discoverable: true
|
|
498
|
+
aliases: []
|
|
499
|
+
impacts: [backend, lifecycle]
|
|
500
|
+
- id: yss-mvc-design
|
|
501
|
+
layer: specialist
|
|
502
|
+
maturity: draft
|
|
503
|
+
instance_default_discoverable: false
|
|
504
|
+
aliases: []
|
|
505
|
+
impacts: [backend, lifecycle]
|
|
482
506
|
- id: yss-tactical-design
|
|
483
507
|
layer: specialist
|
|
484
508
|
maturity: draft
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
- [ ] 若为小改动,已完成 DDD impact check,并确认不影响统一语言、上下文边界、聚合、API、数据或风险 / 回滚约束。
|
|
21
21
|
- [ ] Strategic DDD Check 已完成或明确不适用:统一语言、核心/支撑/通用子域、限界上下文、上下文映射和非目标范围清楚。
|
|
22
|
-
- [ ]
|
|
22
|
+
- [ ] 技术设计使用已确认的 DDD / MVC 架构,规则与关键场景承接完整,合同及输入摘要当前。DDD 审查聚合、不变量、一致性和 Gateway;MVC 审查分层、用例、业务规则、事务和持久化映射。两者均需成功/失败测试 seam;无相关影响须明确理由。
|
|
23
23
|
- [ ] OpenAPI 契约使用上下文的公开语言,不直接暴露内部聚合、Repository 或持久化表结构。
|
|
24
24
|
- [ ] 领域行为测试、Application 用例测试、契约测试和必要 E2E 已与 DDD 边界对齐。
|
|
25
25
|
|
|
@@ -64,10 +64,21 @@ owner: ai
|
|
|
64
64
|
|----------|-------------|-------------|-------------|------------------|
|
|
65
65
|
| | | | | 是 / 否 |
|
|
66
66
|
|
|
67
|
-
## 8.
|
|
67
|
+
## 8. 技术设计(按已确认架构)
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
引用 `artifact.technical-design` 的版本、digest 和 `evidence.technical-design-review`。`yss-technical-design` 先核对逐项目架构决定;新项目与脚手架共用确认来源,既有项目沿用登记。仅填写适用分支,未命中技术设计影响时记录原因。
|
|
70
|
+
|
|
71
|
+
### 8.1 传统 MVC
|
|
72
|
+
|
|
73
|
+
| 模块 / 层 | 用例与业务规则 | 状态转换 | 事务 / 并发 / 幂等 | 持久化 / 外部适配 | 测试 seam |
|
|
74
|
+
|---|---|---|---|---|---|
|
|
75
|
+
| | | | | | |
|
|
76
|
+
|
|
77
|
+
检查规则和关键场景逐条承接、成功/失败测试、分层依赖及事务回滚。MVC 不填写聚合、值对象或 DDD Gateway;详细规则消费 `yss-mvc-design`。
|
|
78
|
+
|
|
79
|
+
### 8.2 DDD Tactical Check
|
|
80
|
+
|
|
81
|
+
以下仅用于 domain-driven,由 `yss-tactical-design` 细化。复杂场景可附独立说明,结构化技术设计合同仍是事实源;旧 `artifact.tactical-design` 只读兼容。
|
|
71
82
|
|
|
72
83
|
| 限界上下文 | 聚合根 | 业务不变量 | Entity / Value Object | 一致性边界 | Gateway / Repository | 主要测试 seam |
|
|
73
84
|
|------------|--------|------------|-----------------------|------------|----------------------|----------------|
|
|
@@ -121,7 +132,7 @@ owner: ai
|
|
|
121
132
|
- [ ] API 影响记录 / 契约草案 / OpenAPI Draft 的路径、schema、错误结构、分页和契约测试已被架构反审,且可落地或已列出回改项。
|
|
122
133
|
- [ ] 状态流、失败路径、幂等、并发和回滚策略清楚。
|
|
123
134
|
- [ ] 数据架构需求已明确;涉及持久化、元模型、版本或血缘时已有数据架构。
|
|
124
|
-
- [ ]
|
|
135
|
+
- [ ] 技术设计合同的适用 DDD / MVC 分支已完成、架构确认与承接证据当前;无相关影响有明确理由。
|
|
125
136
|
- [ ] 已明确的认证、授权、租户隔离、敏感数据或合规行为已写入普通架构约束、契约与验证 seam;未触发时不额外登记。
|
|
126
137
|
- [ ] 风险与人工审查点已标记。
|
|
127
138
|
- [ ] 需要 ADR 的决策已列出。
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
| `gate.openapi-frozen` | OpenAPI Freeze | `stage.system-data-engineering` | API 进入实现。 | 无 | `evidence.approval-record` |
|
|
40
40
|
| `gate.engineering-baseline-accepted` | 工程基线 | `stage.system-data-engineering` | 后端、前端或高风险工程变化。 | 无 | `evidence.fresh-verification` |
|
|
41
41
|
| `gate.architecture-reviewed` | 架构审查 | `stage.system-data-engineering` | 高风险或跨边界变化。 | 无 | `evidence.design-review-result` |
|
|
42
|
+
| `gate.implementation-repositories-ready` | 实现仓库准备就绪 | `stage.system-data-engineering` | 后端或前端交付面进入 Ticket 正式化;未命中的交付面须记录带原因的 not-applicable。 | `gate.engineering-baseline-accepted` | `evidence.implementation-repository-preparation`、`evidence.fresh-verification` |
|
|
42
43
|
| `gate.slice-contract-approved` | Slice Implementation Contract 批准 | `stage.ticket-formalization` | Agent 进入实现;脚手架完成后每个后续生成代码工作单元。 | 无 | `evidence.contract-approval` |
|
|
43
44
|
| `gate.slice-ready-for-agent` | 垂直切片实现就绪 | `stage.ticket-formalization` | 垂直切片具备直接实现条件。 | 无 | `evidence.contract-approval`、`evidence.approval-record` |
|
|
44
45
|
| `gate.frontend-implementation-verified` | 前端实现还原验证 | `stage.verification-release-retrospective` | UI 影响切片完成实现并准备合并、发布或阶段完成。 | 无 | `evidence.frontend-implementation-verification` |
|
|
@@ -66,6 +67,9 @@
|
|
|
66
67
|
| `artifact.data-architecture` | 数据架构 | `stage.system-data-engineering` | 数据模型、存储或一致性变化。 |
|
|
67
68
|
| `artifact.engineering-baseline` | 工程基线记录 | `stage.system-data-engineering` | 后端、前端或高风险工程变化。 |
|
|
68
69
|
| `artifact.architecture-review` | 架构审查记录 | `stage.system-data-engineering` | 高风险或跨边界变化。 |
|
|
70
|
+
| `artifact.technical-design` | 技术设计合同 | `stage.system-data-engineering` | 后端技术设计需要按已确认 DDD 或 MVC 架构明确行为、分层、一致性或数据映射。 |
|
|
71
|
+
| `artifact.project-scaffold-contract` | Project Scaffold Contract | `stage.system-data-engineering` | 命中的前端或后端交付面选择初始化新工程。 |
|
|
72
|
+
| `artifact.implementation-repository-preparation-result` | 实现仓库准备结果 | `stage.system-data-engineering` | 后端或前端交付面进入 Ticket 正式化。 |
|
|
69
73
|
| `artifact.tactical-design` | DDD 战术设计 | `stage.system-data-engineering` | 聚合边界、状态机、一致性或持久化映射复杂到无法在系统概要设计的 Tactical DDD Check 中清楚表达。 |
|
|
70
74
|
| `artifact.spec-delta` | Spec Delta | `stage.spec-architecture` | 已有冻结 Spec 的高风险行为变化。 |
|
|
71
75
|
| `artifact.parent-ticket` | 功能父 Ticket | `stage.ticket-formalization` | 每个进入追踪的功能。 |
|
|
@@ -82,6 +86,7 @@
|
|
|
82
86
|
| `evidence.context-reconciliation` | Context Reconciliation 证据 | 工作单元在批准或流转前对根目录唯一 CONTEXT.md 的稳定术语回写、作用域解析和双摘要核对结果;不新增门禁。 |
|
|
83
87
|
| `evidence.impact-assessment` | 影响面分析记录 | 受影响仓库、资产、风险与最近可信阶段。 |
|
|
84
88
|
| `evidence.domain-strategy-review` | 业务边界与规则评审证据 | 业务板块、业务责任区、统一业务词汇、协作与交接关系、关键场景和不可违反规则的结构化评审结果。 |
|
|
89
|
+
| `evidence.technical-design-review` | 技术设计评审证据 | 按已确认 DDD 或 MVC 架构审查规则与场景承接、分层、行为、一致性和测试边界。 |
|
|
85
90
|
| `evidence.tactical-design-review` | DDD 战术设计评审证据 | 聚合、Entity、Value Object、不变量、状态机、一致性、Gateway 与 API 隔离的结构化评审结果。 |
|
|
86
91
|
| `evidence.stage-decision-package` | 阶段决策包验证证据 | 阶段决策包的 Schema、引用、语义一致性、影响传播和下游消费验证结果。 |
|
|
87
92
|
| `evidence.maintenance-intensity-checkpoint` | 模板维护强度 checkpoint | template-source 变更的 L1 / L2 / L3 分级、触发项、最低验证证据、review 模式和升级记录。 |
|
|
@@ -99,6 +104,7 @@
|
|
|
99
104
|
| `evidence.yss-skill-execution-result` | YSS Skill Execution Result | 专项 skill 的合同版本、写入、验证、延期 seam 与偏离证据。 |
|
|
100
105
|
| `evidence.frontend-implementation-verification` | 前端实现还原验证证据 | UI 实现相对冻结原型和 Spec 的桌面/窄屏视觉、状态、交互、控制台与 pnpm 验证记录。 |
|
|
101
106
|
| `evidence.fresh-verification` | Fresh Verification 记录 | 本轮实际执行的验证命令、结果和时间。 |
|
|
107
|
+
| `evidence.implementation-repository-preparation` | 实现仓库准备证据 | 按项目记录交付面、已有仓库接入或新脚手架合同、生成清单、实际验证结果、仓库位置、Git 边界和当前版本。 |
|
|
102
108
|
| `evidence.checkpoint-and-rollback` | Checkpoint 与回滚点 | 可追溯的变更边界、发布记录和恢复动作。 |
|
|
103
109
|
<!-- lifecycle-registry:structure:end -->
|
|
104
110
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": 1,
|
|
3
3
|
"registry_id": "yss.lifecycle",
|
|
4
|
-
"semantic_sha256": "
|
|
4
|
+
"semantic_sha256": "68c053060bb837fe4bc2b40d7a6ffcea1a53fc6b5e6b929eb0858824c657a15d",
|
|
5
5
|
"published_ids": [
|
|
6
6
|
"artifact.architecture-review",
|
|
7
7
|
"artifact.data-architecture",
|
|
@@ -13,12 +13,14 @@
|
|
|
13
13
|
"artifact.functional-architecture",
|
|
14
14
|
"artifact.high-fidelity-html-prototype",
|
|
15
15
|
"artifact.impact-assessment",
|
|
16
|
+
"artifact.implementation-repository-preparation-result",
|
|
16
17
|
"artifact.interaction-spec",
|
|
17
18
|
"artifact.low-fidelity-prototype",
|
|
18
19
|
"artifact.openapi-draft",
|
|
19
20
|
"artifact.openapi-freeze-record",
|
|
20
21
|
"artifact.parent-ticket",
|
|
21
22
|
"artifact.product-overview",
|
|
23
|
+
"artifact.project-scaffold-contract",
|
|
22
24
|
"artifact.prototype-confirmation",
|
|
23
25
|
"artifact.prototype-deliverable",
|
|
24
26
|
"artifact.prototype-review",
|
|
@@ -29,6 +31,7 @@
|
|
|
29
31
|
"artifact.stage-decision-package",
|
|
30
32
|
"artifact.state-matrix",
|
|
31
33
|
"artifact.tactical-design",
|
|
34
|
+
"artifact.technical-design",
|
|
32
35
|
"artifact.vertical-slice-ticket",
|
|
33
36
|
"evidence.antd-cli-validation",
|
|
34
37
|
"evidence.approval-record",
|
|
@@ -41,6 +44,7 @@
|
|
|
41
44
|
"evidence.fresh-verification",
|
|
42
45
|
"evidence.frontend-implementation-verification",
|
|
43
46
|
"evidence.impact-assessment",
|
|
47
|
+
"evidence.implementation-repository-preparation",
|
|
44
48
|
"evidence.maintenance-intensity-checkpoint",
|
|
45
49
|
"evidence.openapi-draft-review",
|
|
46
50
|
"evidence.prototype-confirmation",
|
|
@@ -50,6 +54,7 @@
|
|
|
50
54
|
"evidence.repository-identity-check",
|
|
51
55
|
"evidence.stage-decision-package",
|
|
52
56
|
"evidence.tactical-design-review",
|
|
57
|
+
"evidence.technical-design-review",
|
|
53
58
|
"evidence.yss-skill-execution-result",
|
|
54
59
|
"gate.architecture-reviewed",
|
|
55
60
|
"gate.design-reviewed",
|
|
@@ -57,6 +62,7 @@
|
|
|
57
62
|
"gate.engineering-baseline-accepted",
|
|
58
63
|
"gate.frontend-delivery-inputs-verified",
|
|
59
64
|
"gate.frontend-implementation-verified",
|
|
65
|
+
"gate.implementation-repositories-ready",
|
|
60
66
|
"gate.openapi-draft-reviewed",
|
|
61
67
|
"gate.openapi-frozen",
|
|
62
68
|
"gate.prototype-reviewed",
|
|
@@ -84,6 +90,7 @@
|
|
|
84
90
|
"work-unit.entry-triage",
|
|
85
91
|
"work-unit.fresh-verification",
|
|
86
92
|
"work-unit.frontend-implementation-verification",
|
|
93
|
+
"work-unit.implementation-repository-preparation",
|
|
87
94
|
"work-unit.independent-review",
|
|
88
95
|
"work-unit.intensity-aware-review",
|
|
89
96
|
"work-unit.intensity-aware-verification",
|
|
@@ -56,6 +56,9 @@ evidence:
|
|
|
56
56
|
description: 子域、限界上下文、统一语言、Context Map、场景和不变量的结构化评审结果。
|
|
57
57
|
public_name: 业务边界与规则评审证据
|
|
58
58
|
public_description: 业务板块、业务责任区、统一业务词汇、协作与交接关系、关键场景和不可违反规则的结构化评审结果。
|
|
59
|
+
- id: evidence.technical-design-review
|
|
60
|
+
name: 技术设计评审证据
|
|
61
|
+
description: 按已确认 DDD 或 MVC 架构审查规则与场景承接、分层、行为、一致性和测试边界。
|
|
59
62
|
- id: evidence.tactical-design-review
|
|
60
63
|
name: DDD 战术设计评审证据
|
|
61
64
|
description: 聚合、Entity、Value Object、不变量、状态机、一致性、Gateway 与 API 隔离的结构化评审结果。
|
|
@@ -107,6 +110,9 @@ evidence:
|
|
|
107
110
|
- id: evidence.fresh-verification
|
|
108
111
|
name: Fresh Verification 记录
|
|
109
112
|
description: 本轮实际执行的验证命令、结果和时间。
|
|
113
|
+
- id: evidence.implementation-repository-preparation
|
|
114
|
+
name: 实现仓库准备证据
|
|
115
|
+
description: 按项目记录交付面、已有仓库接入或新脚手架合同、生成清单、实际验证结果、仓库位置、Git 边界和当前版本。
|
|
110
116
|
- id: evidence.checkpoint-and-rollback
|
|
111
117
|
name: Checkpoint 与回滚点
|
|
112
118
|
description: 可追溯的变更边界、发布记录和恢复动作。
|
|
@@ -180,6 +186,12 @@ gates:
|
|
|
180
186
|
stage: stage.system-data-engineering
|
|
181
187
|
trigger: 高风险或跨边界变化。
|
|
182
188
|
evidence: [evidence.design-review-result]
|
|
189
|
+
- id: gate.implementation-repositories-ready
|
|
190
|
+
name: 实现仓库准备就绪
|
|
191
|
+
stage: stage.system-data-engineering
|
|
192
|
+
trigger: 后端或前端交付面进入 Ticket 正式化;未命中的交付面须记录带原因的 not-applicable。
|
|
193
|
+
evidence: [evidence.implementation-repository-preparation, evidence.fresh-verification]
|
|
194
|
+
requires_gates: [gate.engineering-baseline-accepted]
|
|
183
195
|
- id: gate.slice-contract-approved
|
|
184
196
|
name: Slice Implementation Contract 批准
|
|
185
197
|
stage: stage.ticket-formalization
|
|
@@ -278,6 +290,18 @@ artifacts:
|
|
|
278
290
|
name: 架构审查记录
|
|
279
291
|
stage: stage.system-data-engineering
|
|
280
292
|
trigger: 高风险或跨边界变化。
|
|
293
|
+
- id: artifact.technical-design
|
|
294
|
+
name: 技术设计合同
|
|
295
|
+
stage: stage.system-data-engineering
|
|
296
|
+
trigger: 后端技术设计需要按已确认 DDD 或 MVC 架构明确行为、分层、一致性或数据映射。
|
|
297
|
+
- id: artifact.project-scaffold-contract
|
|
298
|
+
name: Project Scaffold Contract
|
|
299
|
+
stage: stage.system-data-engineering
|
|
300
|
+
trigger: 命中的前端或后端交付面选择初始化新工程。
|
|
301
|
+
- id: artifact.implementation-repository-preparation-result
|
|
302
|
+
name: 实现仓库准备结果
|
|
303
|
+
stage: stage.system-data-engineering
|
|
304
|
+
trigger: 后端或前端交付面进入 Ticket 正式化。
|
|
281
305
|
- id: artifact.tactical-design
|
|
282
306
|
name: DDD 战术设计
|
|
283
307
|
stage: stage.system-data-engineering
|
|
@@ -406,8 +430,14 @@ work_units:
|
|
|
406
430
|
name: 技术分析与契约冻结
|
|
407
431
|
scope: project-instance
|
|
408
432
|
input: Spec、原型、API/数据/工程影响面。
|
|
409
|
-
output: OpenAPI
|
|
410
|
-
completion: 命中契约已冻结;无 API
|
|
433
|
+
output: OpenAPI、数据架构、按确认架构形成的 DDD / MVC 技术设计合同、工程基线、架构审查和 Slice 合同草案。
|
|
434
|
+
completion: 命中契约已冻结;无 API 影响有可读记录;命中技术设计影响时架构已确认、规则与场景承接无未解释冲突;工程基线通过。
|
|
435
|
+
- id: work-unit.implementation-repository-preparation
|
|
436
|
+
name: 实现仓库准备
|
|
437
|
+
scope: project-instance
|
|
438
|
+
input: 工程影响面、工程基线、逐项目用户决定、实现仓库位置;新建工程还需批准且当前的 Project Scaffold Contract。
|
|
439
|
+
output: 已有工程的 Repository Onboarding Result,或新工程的 Scaffold Manifest 与 Scaffold Verification;并汇总 Implementation Repository Preparation Result。
|
|
440
|
+
completion: 每个命中的交付面均为 existing-and-onboarded 或 initialized-and-verified,未命中的交付面有带原因的 not-applicable;聚合结果当前且证据可读。
|
|
411
441
|
- id: work-unit.service-project-initialization
|
|
412
442
|
name: 独立服务项目初始化
|
|
413
443
|
scope: project-instance
|