create-yss-spec 3.4.1 → 3.4.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 +1 -1
- package/package.json +2 -2
- package/template/.agents/skills/.strategic-design-skills-manifest.json +3 -3
- package/template/.agents/skills/archify/SKILL.md +1 -1
- package/template/.agents/skills/code-review/SKILL.md +12 -8
- package/template/.agents/skills/file-export-download/SKILL.md +1 -1
- package/template/.agents/skills/frontend-commit/SKILL.md +1 -1
- package/template/.agents/skills/java-backend-commit/SKILL.md +1 -1
- package/template/.agents/skills/llm-wiki/SKILL.md +1 -6
- package/template/.agents/skills/lombok/SKILL.md +10 -336
- package/template/.agents/skills/lombok/references/annotation-examples.md +307 -0
- package/template/.agents/skills/maintaining-skills/SKILL.md +2 -1
- package/template/.agents/skills/maintaining-skills/references/authoring.md +27 -0
- package/template/.agents/skills/mapstruct/SKILL.md +11 -318
- package/template/.agents/skills/mapstruct/references/annotation-examples.md +300 -0
- package/template/.agents/skills/page-form-module/SKILL.md +1 -1
- package/template/.agents/skills/page-skeleton/SKILL.md +1 -1
- package/template/.agents/skills/theme-token-usage/SKILL.md +1 -1
- package/template/.agents/skills/to-tickets/SKILL.md +1 -1
- package/template/.agents/skills/using-git-worktrees/SKILL.md +1 -1
- package/template/.agents/skills/wayfinder/SKILL.md +1 -1
- package/template/.agents/skills/yedit-table-usage/SKILL.md +1 -1
- package/template/.agents/skills/yss-api-integration/SKILL.md +1 -1
- package/template/.agents/skills/yss-audit-log/SKILL.md +1 -1
- package/template/.agents/skills/yss-cache/SKILL.md +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +16 -3
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +15 -10
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +3 -3
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +3 -3
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +5 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +5 -2
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +13 -10
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +35 -3
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +1 -1
- package/template/.agents/skills/yss-distributed-id/SKILL.md +1 -1
- package/template/.agents/skills/yss-dto/SKILL.md +5 -1
- package/template/.agents/skills/yss-excel-mvc/SKILL.md +1 -1
- package/template/.agents/skills/yss-exception/SKILL.md +5 -1
- package/template/.agents/skills/yss-formily-schema-generator/SKILL.md +1 -1
- package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +14 -6
- package/template/.agents/skills/yss-implementation-contract-compiler/agents/openai.yaml +1 -1
- package/template/.agents/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +16 -0
- package/template/.agents/skills/yss-implementation-contract-compiler/references/slice-implementation-contract-v2.md +214 -0
- package/template/.agents/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +66 -204
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md +15 -2
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +28 -19
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +10 -10
- package/template/.agents/skills/yss-mybatis/SKILL.md +4 -0
- package/template/.agents/skills/yss-openapi-draft-review/SKILL.md +1 -1
- package/template/.agents/skills/yss-openapi-governance/SKILL.md +1 -1
- package/template/.agents/skills/yss-product-lifecycle/SKILL.md +4 -4
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +29 -7
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +3 -1
- package/template/.agents/skills/yss-product-lifecycle/references/user-decisions.md +24 -4
- package/template/.agents/skills/yss-prototype-stage/SKILL.md +1 -1
- package/template/.agents/skills/yss-repository/SKILL.md +4 -0
- package/template/.agents/skills/yss-research/SKILL.md +1 -1
- package/template/.agents/skills/yss-resilience4j/SKILL.md +1 -1
- package/template/.agents/skills/yss-security-algorithm/SKILL.md +1 -1
- package/template/.agents/skills/yss-stage-decision/SKILL.md +1 -1
- package/template/.agents/skills/yss-stage-decision/references/domain-strategy-contract.md +2 -0
- package/template/.agents/skills/yss-stage-decision/references/stage-decision-package-contract.md +1 -1
- package/template/.agents/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +3 -3
- package/template/.agents/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +3 -3
- package/template/.agents/skills/yss-stage-decision/tests/run-scenarios.mjs +33 -0
- package/template/.agents/skills/yss-tactical-design/SKILL.md +5 -1
- package/template/.agents/skills/yss-technical-design/SKILL.md +5 -1
- package/template/.agents/skills/yss-technical-design/references/technical-design-contract.md +1 -1
- package/template/.agents/skills/yss-technical-design/scripts/validate-technical-design.mjs +2 -2
- package/template/.agents/skills/yss-technical-design/tests/run-scenarios.mjs +1 -1
- package/template/.agents/skills/yss-ui/SKILL.md +1 -1
- package/template/.agents/skills/yss-ui-business-page-generation/SKILL.md +1 -1
- package/template/.agents/skills/yss-up-springboot3/SKILL.md +1 -1
- package/template/.agents/skills/yss-use-table-height/SKILL.md +1 -1
- package/template/.agents/skills/yss-use-tree-height/SKILL.md +1 -1
- package/template/.agents/skills/yss-userinfo/SKILL.md +1 -1
- package/template/.agents/skills/yss-validation/SKILL.md +5 -1
- package/template/.agents/skills/yss-web-controller/SKILL.md +5 -1
- package/template/.agents/skills/yss-web-controller/scripts/generate_controller.mjs +5 -2
- package/template/.agents/skills/ytable-usage/SKILL.md +1 -1
- package/template/.agents/skills/ytree-usage/SKILL.md +1 -1
- package/template/.codex/skills/archify/SKILL.md +1 -1
- package/template/.codex/skills/code-review/SKILL.md +12 -8
- package/template/.codex/skills/data-analytics/skills/analyze-data-quality/SKILL.md +1 -1
- package/template/.codex/skills/data-analytics/skills/build-dashboard/SKILL.md +1 -1
- package/template/.codex/skills/data-analytics/skills/build-report/SKILL.md +1 -1
- package/template/.codex/skills/data-analytics/skills/design-kpis/SKILL.md +1 -1
- package/template/.codex/skills/data-analytics/skills/gather-business-context/SKILL.md +1 -1
- package/template/.codex/skills/data-analytics/skills/index/SKILL.md +1 -1
- package/template/.codex/skills/data-analytics/skills/jupyter-notebooks/SKILL.md +1 -1
- package/template/.codex/skills/data-analytics/skills/kpi-reporting/SKILL.md +1 -1
- package/template/.codex/skills/data-analytics/skills/market-sizing/SKILL.md +1 -1
- package/template/.codex/skills/data-analytics/skills/metric-diagnostics/SKILL.md +1 -1
- package/template/.codex/skills/data-analytics/skills/product-business-analysis/SKILL.md +1 -1
- package/template/.codex/skills/data-analytics/skills/spreadsheets/SKILL.md +1 -1
- package/template/.codex/skills/data-analytics/skills/validate-data/SKILL.md +1 -1
- package/template/.codex/skills/data-analytics/skills/visualize-data/SKILL.md +1 -1
- package/template/.codex/skills/file-export-download/SKILL.md +1 -1
- package/template/.codex/skills/frontend-commit/SKILL.md +1 -1
- package/template/.codex/skills/java-backend-commit/SKILL.md +1 -1
- package/template/.codex/skills/llm-wiki/SKILL.md +1 -6
- package/template/.codex/skills/lombok/SKILL.md +10 -336
- package/template/.codex/skills/lombok/references/annotation-examples.md +307 -0
- package/template/.codex/skills/maintaining-skills/SKILL.md +2 -1
- package/template/.codex/skills/maintaining-skills/references/authoring.md +27 -0
- package/template/.codex/skills/mapstruct/SKILL.md +11 -318
- package/template/.codex/skills/mapstruct/references/annotation-examples.md +300 -0
- package/template/.codex/skills/page-form-module/SKILL.md +1 -1
- package/template/.codex/skills/page-skeleton/SKILL.md +1 -1
- package/template/.codex/skills/product-design/skills/audit/SKILL.md +1 -1
- package/template/.codex/skills/product-design/skills/design-qa/SKILL.md +1 -1
- package/template/.codex/skills/product-design/skills/get-context/SKILL.md +1 -1
- package/template/.codex/skills/product-design/skills/ideate/SKILL.md +1 -1
- package/template/.codex/skills/product-design/skills/image-to-code/SKILL.md +1 -1
- package/template/.codex/skills/product-design/skills/index/SKILL.md +1 -1
- package/template/.codex/skills/product-design/skills/prototype/SKILL.md +1 -1
- package/template/.codex/skills/product-design/skills/research/SKILL.md +1 -1
- package/template/.codex/skills/product-design/skills/user-context/SKILL.md +1 -1
- package/template/.codex/skills/theme-token-usage/SKILL.md +1 -1
- package/template/.codex/skills/to-tickets/SKILL.md +1 -1
- package/template/.codex/skills/using-git-worktrees/SKILL.md +1 -1
- package/template/.codex/skills/wayfinder/SKILL.md +1 -1
- package/template/.codex/skills/yedit-table-usage/SKILL.md +1 -1
- package/template/.codex/skills/yss-api-integration/SKILL.md +1 -1
- package/template/.codex/skills/yss-audit-log/SKILL.md +1 -1
- package/template/.codex/skills/yss-cache/SKILL.md +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +16 -3
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +15 -10
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +3 -3
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +3 -3
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +5 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +5 -2
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +13 -10
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +35 -3
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +1 -1
- package/template/.codex/skills/yss-distributed-id/SKILL.md +1 -1
- package/template/.codex/skills/yss-dto/SKILL.md +5 -1
- package/template/.codex/skills/yss-excel-mvc/SKILL.md +1 -1
- package/template/.codex/skills/yss-exception/SKILL.md +5 -1
- package/template/.codex/skills/yss-formily-schema-generator/SKILL.md +1 -1
- package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +14 -6
- package/template/.codex/skills/yss-implementation-contract-compiler/agents/openai.yaml +1 -1
- package/template/.codex/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +16 -0
- package/template/.codex/skills/yss-implementation-contract-compiler/references/slice-implementation-contract-v2.md +214 -0
- package/template/.codex/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +66 -204
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/SKILL.md +15 -2
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +28 -19
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +10 -10
- package/template/.codex/skills/yss-mybatis/SKILL.md +4 -0
- package/template/.codex/skills/yss-openapi-draft-review/SKILL.md +1 -1
- package/template/.codex/skills/yss-openapi-governance/SKILL.md +1 -1
- package/template/.codex/skills/yss-product-lifecycle/SKILL.md +4 -4
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +29 -7
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +3 -1
- package/template/.codex/skills/yss-product-lifecycle/references/user-decisions.md +24 -4
- package/template/.codex/skills/yss-prototype-stage/SKILL.md +1 -1
- package/template/.codex/skills/yss-repository/SKILL.md +4 -0
- package/template/.codex/skills/yss-research/SKILL.md +1 -1
- package/template/.codex/skills/yss-resilience4j/SKILL.md +1 -1
- package/template/.codex/skills/yss-security-algorithm/SKILL.md +1 -1
- package/template/.codex/skills/yss-stage-decision/SKILL.md +1 -1
- package/template/.codex/skills/yss-stage-decision/references/domain-strategy-contract.md +2 -0
- package/template/.codex/skills/yss-stage-decision/references/stage-decision-package-contract.md +1 -1
- package/template/.codex/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +3 -3
- package/template/.codex/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +3 -3
- package/template/.codex/skills/yss-stage-decision/tests/run-scenarios.mjs +33 -0
- package/template/.codex/skills/yss-tactical-design/SKILL.md +5 -1
- package/template/.codex/skills/yss-technical-design/SKILL.md +5 -1
- package/template/.codex/skills/yss-technical-design/references/technical-design-contract.md +1 -1
- package/template/.codex/skills/yss-technical-design/scripts/validate-technical-design.mjs +2 -2
- package/template/.codex/skills/yss-technical-design/tests/run-scenarios.mjs +1 -1
- package/template/.codex/skills/yss-ui/SKILL.md +1 -1
- package/template/.codex/skills/yss-ui-business-page-generation/SKILL.md +1 -1
- package/template/.codex/skills/yss-up-springboot3/SKILL.md +1 -1
- package/template/.codex/skills/yss-use-table-height/SKILL.md +1 -1
- package/template/.codex/skills/yss-use-tree-height/SKILL.md +1 -1
- package/template/.codex/skills/yss-userinfo/SKILL.md +1 -1
- package/template/.codex/skills/yss-validation/SKILL.md +5 -1
- package/template/.codex/skills/yss-web-controller/SKILL.md +5 -1
- package/template/.codex/skills/yss-web-controller/scripts/generate_controller.mjs +5 -2
- package/template/.codex/skills/ytable-usage/SKILL.md +1 -1
- package/template/.codex/skills/ytree-usage/SKILL.md +1 -1
- package/template/.cursor/skills/archify/SKILL.md +1 -1
- package/template/.cursor/skills/code-review/SKILL.md +12 -8
- package/template/.cursor/skills/file-export-download/SKILL.md +1 -1
- package/template/.cursor/skills/frontend-commit/SKILL.md +1 -1
- package/template/.cursor/skills/java-backend-commit/SKILL.md +1 -1
- package/template/.cursor/skills/llm-wiki/SKILL.md +1 -6
- package/template/.cursor/skills/lombok/SKILL.md +10 -336
- package/template/.cursor/skills/lombok/references/annotation-examples.md +307 -0
- package/template/.cursor/skills/maintaining-skills/SKILL.md +2 -1
- package/template/.cursor/skills/maintaining-skills/references/authoring.md +27 -0
- package/template/.cursor/skills/mapstruct/SKILL.md +11 -318
- package/template/.cursor/skills/mapstruct/references/annotation-examples.md +300 -0
- package/template/.cursor/skills/page-form-module/SKILL.md +1 -1
- package/template/.cursor/skills/page-skeleton/SKILL.md +1 -1
- package/template/.cursor/skills/theme-token-usage/SKILL.md +1 -1
- package/template/.cursor/skills/to-tickets/SKILL.md +1 -1
- package/template/.cursor/skills/using-git-worktrees/SKILL.md +1 -1
- package/template/.cursor/skills/wayfinder/SKILL.md +1 -1
- package/template/.cursor/skills/yedit-table-usage/SKILL.md +1 -1
- package/template/.cursor/skills/yss-api-integration/SKILL.md +1 -1
- package/template/.cursor/skills/yss-audit-log/SKILL.md +1 -1
- package/template/.cursor/skills/yss-cache/SKILL.md +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +16 -3
- package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +15 -10
- package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +3 -3
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +3 -3
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +5 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +5 -2
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +13 -10
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +35 -3
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +1 -1
- package/template/.cursor/skills/yss-distributed-id/SKILL.md +1 -1
- package/template/.cursor/skills/yss-dto/SKILL.md +5 -1
- package/template/.cursor/skills/yss-excel-mvc/SKILL.md +1 -1
- package/template/.cursor/skills/yss-exception/SKILL.md +5 -1
- package/template/.cursor/skills/yss-formily-schema-generator/SKILL.md +1 -1
- package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +14 -6
- package/template/.cursor/skills/yss-implementation-contract-compiler/agents/openai.yaml +1 -1
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +16 -0
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/slice-implementation-contract-v2.md +214 -0
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +66 -204
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/SKILL.md +15 -2
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +28 -19
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +10 -10
- package/template/.cursor/skills/yss-mybatis/SKILL.md +4 -0
- package/template/.cursor/skills/yss-openapi-draft-review/SKILL.md +1 -1
- package/template/.cursor/skills/yss-openapi-governance/SKILL.md +1 -1
- package/template/.cursor/skills/yss-product-lifecycle/SKILL.md +4 -4
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +29 -7
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +3 -1
- package/template/.cursor/skills/yss-product-lifecycle/references/user-decisions.md +24 -4
- package/template/.cursor/skills/yss-prototype-stage/SKILL.md +1 -1
- package/template/.cursor/skills/yss-repository/SKILL.md +4 -0
- package/template/.cursor/skills/yss-research/SKILL.md +1 -1
- package/template/.cursor/skills/yss-resilience4j/SKILL.md +1 -1
- package/template/.cursor/skills/yss-security-algorithm/SKILL.md +1 -1
- package/template/.cursor/skills/yss-stage-decision/SKILL.md +1 -1
- package/template/.cursor/skills/yss-stage-decision/references/domain-strategy-contract.md +2 -0
- package/template/.cursor/skills/yss-stage-decision/references/stage-decision-package-contract.md +1 -1
- package/template/.cursor/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +3 -3
- package/template/.cursor/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +3 -3
- package/template/.cursor/skills/yss-stage-decision/tests/run-scenarios.mjs +33 -0
- package/template/.cursor/skills/yss-tactical-design/SKILL.md +5 -1
- package/template/.cursor/skills/yss-technical-design/SKILL.md +5 -1
- package/template/.cursor/skills/yss-technical-design/references/technical-design-contract.md +1 -1
- package/template/.cursor/skills/yss-technical-design/scripts/validate-technical-design.mjs +2 -2
- package/template/.cursor/skills/yss-technical-design/tests/run-scenarios.mjs +1 -1
- package/template/.cursor/skills/yss-ui/SKILL.md +1 -1
- package/template/.cursor/skills/yss-ui-business-page-generation/SKILL.md +1 -1
- package/template/.cursor/skills/yss-up-springboot3/SKILL.md +1 -1
- package/template/.cursor/skills/yss-use-table-height/SKILL.md +1 -1
- package/template/.cursor/skills/yss-use-tree-height/SKILL.md +1 -1
- package/template/.cursor/skills/yss-userinfo/SKILL.md +1 -1
- package/template/.cursor/skills/yss-validation/SKILL.md +5 -1
- package/template/.cursor/skills/yss-web-controller/SKILL.md +5 -1
- package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.mjs +5 -2
- package/template/.cursor/skills/ytable-usage/SKILL.md +1 -1
- package/template/.cursor/skills/ytree-usage/SKILL.md +1 -1
- package/template/.pi/skills/archify/SKILL.md +1 -1
- package/template/.pi/skills/code-review/SKILL.md +12 -8
- package/template/.pi/skills/file-export-download/SKILL.md +1 -1
- package/template/.pi/skills/frontend-commit/SKILL.md +1 -1
- package/template/.pi/skills/java-backend-commit/SKILL.md +1 -1
- package/template/.pi/skills/llm-wiki/SKILL.md +1 -6
- package/template/.pi/skills/lombok/SKILL.md +10 -336
- package/template/.pi/skills/lombok/references/annotation-examples.md +307 -0
- package/template/.pi/skills/maintaining-skills/SKILL.md +2 -1
- package/template/.pi/skills/maintaining-skills/references/authoring.md +27 -0
- package/template/.pi/skills/mapstruct/SKILL.md +11 -318
- package/template/.pi/skills/mapstruct/references/annotation-examples.md +300 -0
- package/template/.pi/skills/page-form-module/SKILL.md +1 -1
- package/template/.pi/skills/page-skeleton/SKILL.md +1 -1
- package/template/.pi/skills/theme-token-usage/SKILL.md +1 -1
- package/template/.pi/skills/to-tickets/SKILL.md +1 -1
- package/template/.pi/skills/using-git-worktrees/SKILL.md +1 -1
- package/template/.pi/skills/wayfinder/SKILL.md +1 -1
- package/template/.pi/skills/yedit-table-usage/SKILL.md +1 -1
- package/template/.pi/skills/yss-api-integration/SKILL.md +1 -1
- package/template/.pi/skills/yss-audit-log/SKILL.md +1 -1
- package/template/.pi/skills/yss-cache/SKILL.md +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +16 -3
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +15 -10
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +3 -3
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +3 -3
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +5 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +5 -2
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +13 -10
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +35 -3
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +1 -1
- package/template/.pi/skills/yss-distributed-id/SKILL.md +1 -1
- package/template/.pi/skills/yss-dto/SKILL.md +5 -1
- package/template/.pi/skills/yss-excel-mvc/SKILL.md +1 -1
- package/template/.pi/skills/yss-exception/SKILL.md +5 -1
- package/template/.pi/skills/yss-formily-schema-generator/SKILL.md +1 -1
- package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +14 -6
- package/template/.pi/skills/yss-implementation-contract-compiler/agents/openai.yaml +1 -1
- package/template/.pi/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +16 -0
- package/template/.pi/skills/yss-implementation-contract-compiler/references/slice-implementation-contract-v2.md +214 -0
- package/template/.pi/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +66 -204
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/SKILL.md +15 -2
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +28 -19
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +10 -10
- package/template/.pi/skills/yss-mybatis/SKILL.md +4 -0
- package/template/.pi/skills/yss-openapi-draft-review/SKILL.md +1 -1
- package/template/.pi/skills/yss-openapi-governance/SKILL.md +1 -1
- package/template/.pi/skills/yss-product-lifecycle/SKILL.md +4 -4
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +29 -7
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +3 -1
- package/template/.pi/skills/yss-product-lifecycle/references/user-decisions.md +24 -4
- package/template/.pi/skills/yss-prototype-stage/SKILL.md +1 -1
- package/template/.pi/skills/yss-repository/SKILL.md +4 -0
- package/template/.pi/skills/yss-research/SKILL.md +1 -1
- package/template/.pi/skills/yss-resilience4j/SKILL.md +1 -1
- package/template/.pi/skills/yss-security-algorithm/SKILL.md +1 -1
- package/template/.pi/skills/yss-stage-decision/SKILL.md +1 -1
- package/template/.pi/skills/yss-stage-decision/references/domain-strategy-contract.md +2 -0
- package/template/.pi/skills/yss-stage-decision/references/stage-decision-package-contract.md +1 -1
- package/template/.pi/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +3 -3
- package/template/.pi/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +3 -3
- package/template/.pi/skills/yss-stage-decision/tests/run-scenarios.mjs +33 -0
- package/template/.pi/skills/yss-tactical-design/SKILL.md +5 -1
- package/template/.pi/skills/yss-technical-design/SKILL.md +5 -1
- package/template/.pi/skills/yss-technical-design/references/technical-design-contract.md +1 -1
- package/template/.pi/skills/yss-technical-design/scripts/validate-technical-design.mjs +2 -2
- package/template/.pi/skills/yss-technical-design/tests/run-scenarios.mjs +1 -1
- package/template/.pi/skills/yss-ui/SKILL.md +1 -1
- package/template/.pi/skills/yss-ui-business-page-generation/SKILL.md +1 -1
- package/template/.pi/skills/yss-up-springboot3/SKILL.md +1 -1
- package/template/.pi/skills/yss-use-table-height/SKILL.md +1 -1
- package/template/.pi/skills/yss-use-tree-height/SKILL.md +1 -1
- package/template/.pi/skills/yss-userinfo/SKILL.md +1 -1
- package/template/.pi/skills/yss-validation/SKILL.md +5 -1
- package/template/.pi/skills/yss-web-controller/SKILL.md +5 -1
- package/template/.pi/skills/yss-web-controller/scripts/generate_controller.mjs +5 -2
- package/template/.pi/skills/ytable-usage/SKILL.md +1 -1
- package/template/.pi/skills/ytree-usage/SKILL.md +1 -1
- package/template/AGENTS.md +1 -0
- package/template/CONTEXT.md +2 -1
- package/template/docs/agents/backend-architecture-profiles.md +1 -1
- package/template/docs/agents/digital-human-roles.yaml +29 -1
- package/template/docs/agents/issue-tracker.md +2 -0
- package/template/docs/architecture/templates/engineering-baseline-review-template.md +6 -6
- package/template/docs/engineering/backend-platforms.json +174 -0
- package/template/docs/engineering/backend-platforms.md +77 -0
- package/template/docs/process/MATT-POCOCK-ENGINEERING-SKILLS.md +1 -0
- package/template/docs/process/existing-ui-baseline.md +1 -1
- package/template/docs/process/harness-process-tailoring.md +9 -1
- package/template/docs/process/lifecycle-artifact-map.md +6 -5
- package/template/docs/process/lifecycle-registry-baseline.json +2 -1
- package/template/docs/process/lifecycle-registry.yaml +17 -8
- package/template/docs/process/schemas/backend-architecture-identity.schema.json +91 -0
- package/template/docs/process/schemas/digital-human-task-package.schema.json +3 -1
- package/template/docs/process/schemas/lifecycle-checkpoint.schema.json +8 -0
- package/template/docs/process/schemas/project-scaffold-contract.schema.json +602 -83
- package/template/docs/process/schemas/review-bundle.schema.json +42 -0
- package/template/docs/process/schemas/scaffold-architecture-decisions.schema.json +323 -39
- package/template/docs/process/schemas/slice-implementation-contract-v3.schema.json +925 -0
- package/template/docs/process/strategic-handoff-package.md +5 -11
- package/template/docs/templates/approval-record-template.yaml +2 -0
- package/template/docs/templates/build-architecture-checklist-template.md +2 -2
- package/template/docs/templates/implementation-routing-template.md +4 -4
- package/template/docs/templates/review-bundle-template.yaml +26 -0
- package/template/docs/templates/vertical-slice-ticket-template.md +22 -31
- package/template/scripts/backend-platforms +14 -0
- package/template/scripts/lib/approval-record.mjs +52 -7
- package/template/scripts/lib/approved-execution-context.mjs +31 -8
- package/template/scripts/lib/backend-architecture.mjs +6 -0
- package/template/scripts/lib/backend-platform-provenance.mjs +67 -0
- package/template/scripts/lib/backend-platform-verification.mjs +210 -0
- package/template/scripts/lib/backend-platform.mjs +175 -0
- package/template/scripts/lib/backend-scaffold-prerequisites.mjs +1 -1
- package/template/scripts/lib/decision-continuation.mjs +79 -0
- package/template/scripts/lib/delivery-preflight.mjs +6 -5
- package/template/scripts/lib/digital-human-roles.mjs +10 -0
- package/template/scripts/lib/frontend-delivery-boundary.mjs +3 -0
- package/template/scripts/lib/implementation-contract-compiler.mjs +42 -9
- package/template/scripts/lib/lifecycle-controls.mjs +2 -2
- package/template/scripts/lib/lifecycle-transition.mjs +3 -1
- package/template/scripts/lib/plan-spec-entry.mjs +3 -3
- package/template/scripts/lib/scaffold-local-database.mjs +1 -0
- package/template/scripts/lib/slice-applicability.mjs +10 -0
- package/template/scripts/lib/slice-contract-preparation.mjs +257 -0
- package/template/scripts/lib/slice-contract-views.mjs +52 -0
- package/template/scripts/lib/slice-contract.mjs +211 -0
- package/template/scripts/lib/slice-repositories.mjs +49 -0
- package/template/scripts/lib/slice-task-package.mjs +66 -0
- package/template/scripts/lib/strategic-handoff-io.mjs +7 -0
- package/template/scripts/lib/strategic-handoff.mjs +33 -8
- package/template/scripts/lib/task-package.mjs +6 -2
- package/template/scripts/lib/technical-design-boundary.mjs +1 -0
- package/template/scripts/lib/user-decision-reuse.mjs +1 -0
- package/template/scripts/lib/user-decision.mjs +17 -3
- package/template/scripts/preflight-delivery +2 -2
- package/template/scripts/slice-contract +30 -0
- package/template/scripts/verify-backend-platform-matrix +69 -0
- package/template/scripts/verify-scaffold-architecture-decisions +5 -0
- package/template/scripts/verify-user-decision +7 -2
- package/template/skills-lock.json +62 -57
- package/template.snapshot.json +3 -3
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
# mapstruct 条件参考
|
|
2
|
+
|
|
3
|
+
仅在需要具体注解或配置示例时定位对应章节。示例业务名与版本不是工程基线;按批准合同替换,禁止直接复制成业务实现。
|
|
4
|
+
|
|
5
|
+
## Basic Mapper
|
|
6
|
+
|
|
7
|
+
```java
|
|
8
|
+
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.ERROR)
|
|
9
|
+
public interface UserMapper {
|
|
10
|
+
|
|
11
|
+
UserResponse toResponse(User user);
|
|
12
|
+
|
|
13
|
+
List<UserResponse> toResponseList(List<User> users);
|
|
14
|
+
|
|
15
|
+
@Mapping(target = "id", ignore = true)
|
|
16
|
+
@Mapping(target = "createdAt", ignore = true)
|
|
17
|
+
@Mapping(target = "updatedAt", ignore = true)
|
|
18
|
+
@Mapping(target = "password", ignore = true)
|
|
19
|
+
User toEntity(CreateUserRequest dto);
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Update Mapping
|
|
24
|
+
|
|
25
|
+
```java
|
|
26
|
+
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.ERROR)
|
|
27
|
+
public interface UserMapper {
|
|
28
|
+
|
|
29
|
+
// Partial update - ignores null values
|
|
30
|
+
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
|
|
31
|
+
void updateEntity(UpdateUserRequest dto, @MappingTarget User user);
|
|
32
|
+
|
|
33
|
+
// Full update - sets all fields including nulls
|
|
34
|
+
void updateEntityFull(UpdateUserRequest dto, @MappingTarget User user);
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Field Mapping
|
|
39
|
+
|
|
40
|
+
```java
|
|
41
|
+
@Mapper(componentModel = "spring")
|
|
42
|
+
public interface OrderMapper {
|
|
43
|
+
|
|
44
|
+
// Different field names
|
|
45
|
+
@Mapping(source = "customer.name", target = "customerName")
|
|
46
|
+
@Mapping(source = "customer.email", target = "customerEmail")
|
|
47
|
+
@Mapping(source = "items", target = "orderItems")
|
|
48
|
+
OrderResponse toResponse(Order order);
|
|
49
|
+
|
|
50
|
+
// Constant values
|
|
51
|
+
@Mapping(target = "status", constant = "PENDING")
|
|
52
|
+
@Mapping(target = "createdAt", expression = "java(java.time.LocalDateTime.now())")
|
|
53
|
+
Order toEntity(CreateOrderRequest dto);
|
|
54
|
+
|
|
55
|
+
// Expression
|
|
56
|
+
@Mapping(target = "fullName", expression = "java(user.getFirstName() + \" \" + user.getLastName())")
|
|
57
|
+
UserResponse toResponse(User user);
|
|
58
|
+
|
|
59
|
+
// Date formatting
|
|
60
|
+
@Mapping(source = "createdAt", target = "createdDate", dateFormat = "yyyy-MM-dd")
|
|
61
|
+
OrderResponse toResponse(Order order);
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Nested Objects
|
|
66
|
+
|
|
67
|
+
```java
|
|
68
|
+
@Mapper(componentModel = "spring", uses = {AddressMapper.class, ItemMapper.class})
|
|
69
|
+
public interface OrderMapper {
|
|
70
|
+
|
|
71
|
+
// Uses AddressMapper for address field
|
|
72
|
+
// Uses ItemMapper for items collection
|
|
73
|
+
OrderResponse toResponse(Order order);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@Mapper(componentModel = "spring")
|
|
77
|
+
public interface AddressMapper {
|
|
78
|
+
AddressResponse toResponse(Address address);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@Mapper(componentModel = "spring")
|
|
82
|
+
public interface ItemMapper {
|
|
83
|
+
ItemResponse toResponse(Item item);
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Enum Mapping
|
|
88
|
+
|
|
89
|
+
```java
|
|
90
|
+
@Mapper(componentModel = "spring")
|
|
91
|
+
public interface StatusMapper {
|
|
92
|
+
|
|
93
|
+
@ValueMappings({
|
|
94
|
+
@ValueMapping(source = "ACTIVE", target = "ENABLED"),
|
|
95
|
+
@ValueMapping(source = "INACTIVE", target = "DISABLED"),
|
|
96
|
+
@ValueMapping(source = MappingConstants.ANY_REMAINING, target = "UNKNOWN")
|
|
97
|
+
})
|
|
98
|
+
ExternalStatus toExternalStatus(InternalStatus status);
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Custom Methods
|
|
103
|
+
|
|
104
|
+
```java
|
|
105
|
+
@Mapper(componentModel = "spring")
|
|
106
|
+
public abstract class UserMapper {
|
|
107
|
+
|
|
108
|
+
@Autowired
|
|
109
|
+
protected RoleRepository roleRepository;
|
|
110
|
+
|
|
111
|
+
public abstract UserResponse toResponse(User user);
|
|
112
|
+
|
|
113
|
+
@Mapping(target = "roles", source = "roleIds")
|
|
114
|
+
public abstract User toEntity(CreateUserRequest dto);
|
|
115
|
+
|
|
116
|
+
// Custom mapping method
|
|
117
|
+
protected Set<Role> mapRoles(Set<Long> roleIds) {
|
|
118
|
+
if (roleIds == null) return new HashSet<>();
|
|
119
|
+
return roleIds.stream()
|
|
120
|
+
.map(id -> roleRepository.findById(id)
|
|
121
|
+
.orElseThrow(() -> new ResourceNotFoundException("Role", "id", id)))
|
|
122
|
+
.collect(Collectors.toSet());
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Collection Mapping
|
|
128
|
+
|
|
129
|
+
```java
|
|
130
|
+
@Mapper(componentModel = "spring")
|
|
131
|
+
public interface ProductMapper {
|
|
132
|
+
|
|
133
|
+
ProductResponse toResponse(Product product);
|
|
134
|
+
|
|
135
|
+
List<ProductResponse> toResponseList(List<Product> products);
|
|
136
|
+
|
|
137
|
+
Set<ProductResponse> toResponseSet(Set<Product> products);
|
|
138
|
+
|
|
139
|
+
// Page mapping
|
|
140
|
+
default Page<ProductResponse> toResponsePage(Page<Product> products) {
|
|
141
|
+
return products.map(this::toResponse);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## After/Before Mapping
|
|
147
|
+
|
|
148
|
+
```java
|
|
149
|
+
@Mapper(componentModel = "spring")
|
|
150
|
+
public abstract class UserMapper {
|
|
151
|
+
|
|
152
|
+
@AfterMapping
|
|
153
|
+
protected void afterMapping(@MappingTarget UserResponse response, User user) {
|
|
154
|
+
response.setDisplayName(user.getFirstName() + " " + user.getLastName().charAt(0) + ".");
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
@BeforeMapping
|
|
158
|
+
protected void beforeMapping(CreateUserRequest dto) {
|
|
159
|
+
if (dto.getEmail() != null) {
|
|
160
|
+
dto.setEmail(dto.getEmail().toLowerCase().trim());
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Conditional Mapping
|
|
167
|
+
|
|
168
|
+
```java
|
|
169
|
+
@Mapper(componentModel = "spring")
|
|
170
|
+
public abstract class UserMapper {
|
|
171
|
+
|
|
172
|
+
@Condition
|
|
173
|
+
public boolean isNotEmpty(String value) {
|
|
174
|
+
return value != null && !value.trim().isEmpty();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Only maps non-empty strings
|
|
178
|
+
UserResponse toResponse(User user);
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Maven Configuration
|
|
183
|
+
|
|
184
|
+
```xml
|
|
185
|
+
<properties>
|
|
186
|
+
<mapstruct.version>1.6.2</mapstruct.version>
|
|
187
|
+
<lombok.version>1.18.30</lombok.version>
|
|
188
|
+
</properties>
|
|
189
|
+
|
|
190
|
+
<dependencies>
|
|
191
|
+
<dependency>
|
|
192
|
+
<groupId>org.mapstruct</groupId>
|
|
193
|
+
<artifactId>mapstruct</artifactId>
|
|
194
|
+
<version>${mapstruct.version}</version>
|
|
195
|
+
</dependency>
|
|
196
|
+
|
|
197
|
+
<dependency>
|
|
198
|
+
<groupId>org.projectlombok</groupId>
|
|
199
|
+
<artifactId>lombok</artifactId>
|
|
200
|
+
<version>${lombok.version}</version>
|
|
201
|
+
<optional>true</optional>
|
|
202
|
+
</dependency>
|
|
203
|
+
</dependencies>
|
|
204
|
+
|
|
205
|
+
<build>
|
|
206
|
+
<plugins>
|
|
207
|
+
<plugin>
|
|
208
|
+
<groupId>org.apache.maven.plugins</groupId>
|
|
209
|
+
<artifactId>maven-compiler-plugin</artifactId>
|
|
210
|
+
<version>3.13.0</version>
|
|
211
|
+
<configuration>
|
|
212
|
+
<source>${maven.compiler.source}</source>
|
|
213
|
+
<target>${maven.compiler.target}</target>
|
|
214
|
+
<annotationProcessorPaths>
|
|
215
|
+
<!-- Use the approved processor configuration, including Lombok binding -->
|
|
216
|
+
<path>
|
|
217
|
+
<groupId>org.projectlombok</groupId>
|
|
218
|
+
<artifactId>lombok</artifactId>
|
|
219
|
+
<version>${lombok.version}</version>
|
|
220
|
+
</path>
|
|
221
|
+
<path>
|
|
222
|
+
<groupId>org.mapstruct</groupId>
|
|
223
|
+
<artifactId>mapstruct-processor</artifactId>
|
|
224
|
+
<version>${mapstruct.version}</version>
|
|
225
|
+
</path>
|
|
226
|
+
<path>
|
|
227
|
+
<groupId>org.projectlombok</groupId>
|
|
228
|
+
<artifactId>lombok-mapstruct-binding</artifactId>
|
|
229
|
+
<version>0.2.0</version>
|
|
230
|
+
</path>
|
|
231
|
+
</annotationProcessorPaths>
|
|
232
|
+
<compilerArgs>
|
|
233
|
+
<arg>-Amapstruct.defaultComponentModel=spring</arg>
|
|
234
|
+
</compilerArgs>
|
|
235
|
+
</configuration>
|
|
236
|
+
</plugin>
|
|
237
|
+
</plugins>
|
|
238
|
+
</build>
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Key Annotations
|
|
242
|
+
|
|
243
|
+
| Annotation | Purpose |
|
|
244
|
+
|------------|---------|
|
|
245
|
+
| `@Mapper` | Define mapper interface/abstract class |
|
|
246
|
+
| `@Mapping` | Field-level mapping configuration |
|
|
247
|
+
| `@MappingTarget` | Update existing object |
|
|
248
|
+
| `@BeanMapping` | Bean-level mapping settings |
|
|
249
|
+
| `@AfterMapping` | Post-processing method |
|
|
250
|
+
| `@BeforeMapping` | Pre-processing method |
|
|
251
|
+
| `@Condition` | Conditional mapping |
|
|
252
|
+
| `@ValueMapping` | Enum value mapping |
|
|
253
|
+
|
|
254
|
+
## Best Practices
|
|
255
|
+
|
|
256
|
+
1. Use `componentModel = "spring"` for Spring injection
|
|
257
|
+
2. Keep unmapped targets visible with `ReportingPolicy.ERROR`; explicitly ignore only fields excluded by the contract
|
|
258
|
+
3. Map or explicitly exclude identity and audit fields according to ownership in the contract
|
|
259
|
+
4. Use `@MappingTarget` for partial updates
|
|
260
|
+
5. Configure Lombok, MapStruct and the required binding processor from the engineering baseline
|
|
261
|
+
6. Use abstract classes instead of interfaces for custom logic
|
|
262
|
+
7. Use `@Condition` for conditional mapping logic
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
## Anti-Patterns
|
|
268
|
+
|
|
269
|
+
| Anti-Pattern | Why It's Bad | Correct Approach |
|
|
270
|
+
|--------------|--------------|------------------|
|
|
271
|
+
| Mapping entities to entities | Breaks change tracking | Map DTO to entity |
|
|
272
|
+
| Not using @MappingTarget | Inefficient updates | Use for partial updates |
|
|
273
|
+
| Complex logic in expressions | Hard to test | Use custom methods |
|
|
274
|
+
| Ignoring all unmapped | Misses fields silently | Use ERROR and explicit field mappings |
|
|
275
|
+
| Not excluding audit fields | Overwrites metadata | Exclude id, timestamps |
|
|
276
|
+
| Circular references | StackOverflowError | Break cycles with custom mapping |
|
|
277
|
+
| Using interfaces for custom logic | Can't inject dependencies | Use abstract classes |
|
|
278
|
+
| Not testing mappers | Runtime mapping errors | Write mapper tests |
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Quick Troubleshooting
|
|
283
|
+
|
|
284
|
+
| Issue | Cause | Solution |
|
|
285
|
+
|-------|-------|----------|
|
|
286
|
+
| "Cannot find implementation" | Annotation processing failed | Check processor configuration |
|
|
287
|
+
| Lombok fields not found | Missing processor or binding | Check annotationProcessorPaths and Lombok binding |
|
|
288
|
+
| Mapper not autowired | Wrong componentModel | Use componentModel = "spring" |
|
|
289
|
+
| Circular dependency | Mappers reference each other | Review mapper dependencies and remove cycles |
|
|
290
|
+
| UnmappedTargetProperty warning | Missing mapping | Add an explicit mapping or a contract-approved field ignore |
|
|
291
|
+
| NullPointerException in mapping | Null source | Add null checks or NullValuePropertyMappingStrategy |
|
|
292
|
+
| Custom method not called | Wrong signature | Match method parameters exactly |
|
|
293
|
+
| Generated code not updated | IDE cache | Clean and rebuild project |
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## Reference Documentation
|
|
298
|
+
- [MapStruct Reference](https://mapstruct.org/documentation/stable/reference/html/)
|
|
299
|
+
- [Spring Integration](https://mapstruct.org/documentation/stable/reference/html/#spring)
|
|
300
|
+
- [Lombok Integration](https://mapstruct.org/faq/#can-i-use-mapstruct-together-with-project-lombok)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: page-form-module
|
|
3
|
-
description:
|
|
3
|
+
description: "实现 YSS UI 新增、编辑、查看表单模块及弹窗闭环;排查回显丢失、重置、提交与列表刷新。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Page Form Module Skill
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: theme-token-usage
|
|
3
|
-
description:
|
|
3
|
+
description: "实现或修复 Vue3 YSS UI 主题、交互状态色与动态换肤;用于 token 映射和硬编码色值审查。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# YSS UI 主题 Token 使用 Skill
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: to-tickets
|
|
3
|
-
description:
|
|
3
|
+
description: "显式调用时,将已确认的 Plan 或 Spec 拆成带依赖的垂直切片 Ticket,并按配置的 tracker 持久化。"
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: using-git-worktrees
|
|
3
|
-
description:
|
|
3
|
+
description: "Set up Git worktree isolation when requested or when concurrent work needs a separate checkout."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Using Git Worktrees
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wayfinder
|
|
3
|
-
description:
|
|
3
|
+
description: "显式调用时,为跨多个会话的大型工作建立决策地图,逐项收敛后交回主流程。"
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yedit-table-usage
|
|
3
|
-
description:
|
|
3
|
+
description: "配置或修复 YSS UI YEditTable 的行内编辑、候选联动、增删行、校验与查看态。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# YEditTable 使用
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yss-api-integration
|
|
3
|
-
description:
|
|
3
|
+
description: "在 Vue3 YSS UI 中对接 Orval API;核验生成方法、mutator、错误反馈、loading 与长整型精度。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# API 集成 Skill
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yss-audit-log
|
|
3
|
-
description:
|
|
3
|
+
description: "接入或排查 YSS AuditLog 的 SpEL 摘要、异步发布、订阅注册与审计投递。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# yss-audit-log
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yss-cache
|
|
3
|
-
description:
|
|
3
|
+
description: "接入或排查 YSS QueryCache、UpdateCache、ClearCache、TTL、缓存后端与一致性问题。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# yss-cache
|
|
@@ -21,9 +21,22 @@ description: 用于生成完整的 YSS DDD 多模块后端脚手架。当用户
|
|
|
21
21
|
- 只补持久层时,优先 `yss-repository`。
|
|
22
22
|
- 只补 Web 层时,优先 `yss-web-controller`。
|
|
23
23
|
|
|
24
|
+
## Spring Boot / Java 平台选择
|
|
25
|
+
|
|
26
|
+
调用本技能前由生命周期编排器展示 `scripts/backend-platforms` 的精确版本清单及兼容状态,并通过 `gate.backend-architecture-platform-approved` 把架构、Spring Boot、Java 和 YSS 父 POM/BOM 合并展示、取得真实用户确认;生成器不提问、不猜版本、不使用 `x` 或 `latest`。已有批准且当前的选择展示摘要后复用;既有工程核验并复用登记值,不触发该门禁。
|
|
27
|
+
|
|
28
|
+
- 候选平台:Boot 2.7.18 / Java 8,Boot 3.5.16 / Java 17 或 21,Boot 4.1.1 / Java 17 或 21。新 Boot 默认推荐 Java 17;候选不等于可生成。
|
|
29
|
+
- 独立子项目可继承主项目组合或覆盖,必须逐项目确认(允许一次确认明确列出的项目);同一 Maven Reactor 使用一个平台。
|
|
30
|
+
- 只开放共享兼容清单中已有真实 YSS 构建、依赖和启动证据的组合。缺少兼容父 POM、BOM、starter 或相应能力证据即 `blocked`;不替换官方组件、不降级回退。
|
|
31
|
+
- 新生成合同必须有 `platform_configuration` v2,与架构决策、Maven 坐标及兼容条目摘要一致。Boot、Java、YSS 坐标或依赖配方变化时回生命周期重新确认并编译合同;仅追加同配置验证记录不重复确认,仍核验证据有效性。
|
|
32
|
+
- Spring MVC、Servlet、Validation、Jackson 和 starter 坐标消费共享平台清单;Boot 3.5 / 4.1 拒绝 Java 8/11。Jakarta 转换不包括 `javax.sql` 等 Java SE API。
|
|
33
|
+
- 平台候选维护验证产物标记 `platform_verification=candidate`,不能交给业务生成、升级完成等级或进入首切片验证。测试夹具不证明 YSS 兼容。
|
|
34
|
+
|
|
35
|
+
版本清单、合同字段、候选验证和支持晋级规则见 仓库共享合同 `docs/engineering/backend-platforms.md`。
|
|
36
|
+
|
|
24
37
|
## 优先流程
|
|
25
38
|
|
|
26
|
-
1. 确认服务级 `scaffold_request_id
|
|
39
|
+
1. 确认服务级 `scaffold_request_id`、已通过 `gate.backend-architecture-platform-approved` 的 `domain-driven` 架构与精确 Spring Boot 版本选择及 digest、项目名、基础包名、Maven 项目坐标、父 POM GAV、YSS Components BOM 版本、输出目录和批准 Profile。Java `base_package` 与 Maven `group_id` 是两个独立输入,不得相互推导;脚手架发生在 Ticket 正式化前,不使用 `slice_id` 伪造切片身份。
|
|
27
40
|
Harness 内输出目录必须是 `apps/backend/` 容器,生成器再以 `project_name` 创建 `apps/backend/<project>/`;禁止使用 `app/backend/`、`app/frontend/` 或把 `apps/backend/` 之外的容器根当作后端项目根。
|
|
28
41
|
2. 优先运行 `node scripts/generate_and_verify_scaffold.mjs`,在同一个受控工作流中生成骨架并执行真实 Maven 验证。`generate_scaffold.mjs` 只是底层生成原语,单独返回 0 不代表脚手架完成。
|
|
29
42
|
3. 检查生成的模块名、POM、机械启动入口、基础配置文件和包路径。
|
|
@@ -84,12 +97,12 @@ node scripts/run_first_slice_verification.mjs \
|
|
|
84
97
|
- 不要在 skill 里硬编码用户业务字段或真实连接信息。
|
|
85
98
|
- 生成后要检查依赖关系是否仍符合分层约束。
|
|
86
99
|
- 生成时的静态依赖由技能注册表与 实现合同编译器 共同约束为 `yss-backend-scaffold-parent`、`alibaba-java-code-style`。生成后必须回到 实现合同编译器,并按批准切片加载 `yss-domain`、`yss-application`、`yss-repository`、`yss-mybatis`、`yss-web-controller`、`yss-dto`、`yss-exception`、`yss-validation`、`mapstruct`、`lombok`、`alibaba-java-code-style` 等实际命中的行为 skill。
|
|
87
|
-
-
|
|
100
|
+
- 验证数据库固定 H2,生产数据库 `not-bound`;后续存储接入按批准的切片合同执行。
|
|
88
101
|
- 生成后的后端工程必须使用项目根目录 `./mvnw ...` 执行构建、测试、运行和 CI 验证;不得在 README、实施记录、Ticket、Review 或 Release 中默认写裸 `mvn ...`。既有仓库确实无法使用 wrapper 时,必须记录受控例外。
|
|
89
102
|
- 原型确认后,`scaffold_status=required` 才能进入本 skill;本 skill 的生成边界是工程结构、POM、配置、Wrapper 和机械模板,不是业务实现。
|
|
90
103
|
- 脚手架合同必须携带 `contract_id`、`contract_version`、实现合同编译器 draft 引用、生命周期批准引用、持久化引用、当前版本、允许写路径、预期证据文件和验证命令;字段缺失或版本过期时阻断。
|
|
91
104
|
- 新脚手架只接受统一 Project Scaffold Contract schema v4,并必须以原始字节摘要绑定批准且当前的 Technical Design、Data Architecture Decision v1、API Contract Decision v1 和真实工程合同批准记录。API `required` 必须闭包绑定同一 OpenAPI YAML 字节的 Validation、独立 Review、Freeze 与工程批准;`not-applicable` 必须绑定评估、明确原因和证据且禁止空占位资产。历史 schema v3/v2 仅用于 Manifest 只读验证和补齐 API 对账后的恢复审计,不用于新生成。
|
|
92
|
-
-
|
|
105
|
+
- DDD 固定 `target-domain-model`、`mybatis-plus`、H2 验证、`web` DTO、`yss-internal`;平台与 Validation 命名空间由共享清单约束。普通 MyBatis、独立 client module、client-in-domain 和其他旧架构仍为 `unsupported`。
|
|
93
106
|
- 运行生成器必须传入 `--contract-file`;生成器会校验合同 `status=approved`、`current_version`、`primary_skill`、`controlled-generation`、实际输出路径和固定三条验证命令,不接受仅凭任意字符串引用的放行。
|
|
94
107
|
- 生成项目必须写入 Manifest v4 `.yss/scaffold-generation.json`,记录技术、数据与 API 设计门禁、架构选择及 digest、生成器、合同 digest、Target Profile、模块闭包、模板 digest、下游完整 skill tree digest、generator-owned 文件 hash、严格 `generation_policy` 和完成等级;清单缺失或不一致时不得交给后续 实现合同编译器。
|
|
95
108
|
- `first-slice-verified` 只能由 `run_first_slice_verification.mjs` 写入。手工改 Manifest、只生成 Controller、只通过局部模块测试或仅有结构扫描都不能升级完成等级。
|
|
@@ -20,16 +20,18 @@
|
|
|
20
20
|
|
|
21
21
|
<properties>
|
|
22
22
|
<yss-components.version>{{yss_components_version}}</yss-components.version>
|
|
23
|
-
<
|
|
24
|
-
<
|
|
23
|
+
<java.version>{{java_version}}</java.version>
|
|
24
|
+
<spring-boot.version>{{boot_version}}</spring-boot.version>
|
|
25
|
+
<maven.compiler.source>{{java_version}}</maven.compiler.source>
|
|
26
|
+
<maven.compiler.target>{{java_version}}</maven.compiler.target>
|
|
25
27
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
26
|
-
<mapstruct.version>
|
|
27
|
-
<lombok.version>
|
|
28
|
-
<lombok-mapstruct-binding.version>
|
|
29
|
-
<swagger-annotations-v3.version>
|
|
30
|
-
<archunit.version>
|
|
31
|
-
<maven-compiler-plugin.version>
|
|
32
|
-
<maven-enforcer-plugin.version>
|
|
28
|
+
<mapstruct.version>{{mapstruct_version}}</mapstruct.version>
|
|
29
|
+
<lombok.version>{{lombok_version}}</lombok.version>
|
|
30
|
+
<lombok-mapstruct-binding.version>{{lombok_mapstruct_binding_version}}</lombok-mapstruct-binding.version>
|
|
31
|
+
<swagger-annotations-v3.version>{{swagger_version}}</swagger-annotations-v3.version>
|
|
32
|
+
<archunit.version>{{archunit_version}}</archunit.version>
|
|
33
|
+
<maven-compiler-plugin.version>{{compiler_version}}</maven-compiler-plugin.version>
|
|
34
|
+
<maven-enforcer-plugin.version>{{enforcer_version}}</maven-enforcer-plugin.version>
|
|
33
35
|
</properties>
|
|
34
36
|
|
|
35
37
|
<modules>
|
|
@@ -42,6 +44,7 @@
|
|
|
42
44
|
|
|
43
45
|
<dependencyManagement>
|
|
44
46
|
<dependencies>
|
|
47
|
+
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>{{boot_version}}</version><type>pom</type><scope>import</scope></dependency>
|
|
45
48
|
<dependency>
|
|
46
49
|
<groupId>com.yss.cloud</groupId>
|
|
47
50
|
<artifactId>yss-components-bom</artifactId>
|
|
@@ -94,6 +97,8 @@
|
|
|
94
97
|
|
|
95
98
|
<build>
|
|
96
99
|
<plugins>
|
|
100
|
+
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>{{boot_version}}</version></plugin>
|
|
101
|
+
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>{{surefire_version}}</version></plugin>
|
|
97
102
|
<plugin>
|
|
98
103
|
<groupId>org.apache.maven.plugins</groupId>
|
|
99
104
|
<artifactId>maven-compiler-plugin</artifactId>
|
|
@@ -129,7 +134,7 @@
|
|
|
129
134
|
<goals><goal>enforce</goal></goals>
|
|
130
135
|
<configuration>
|
|
131
136
|
<rules>
|
|
132
|
-
<requireJavaVersion><version>
|
|
137
|
+
<requireJavaVersion><version>{{java_range}}</version></requireJavaVersion>
|
|
133
138
|
<requireMavenVersion><version>[3.6.3,)</version></requireMavenVersion>
|
|
134
139
|
<reactorModuleConvergence/>
|
|
135
140
|
<dependencyConvergence/>
|
package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
</dependency>
|
|
20
20
|
<dependency>
|
|
21
21
|
<groupId>org.springframework.boot</groupId>
|
|
22
|
-
<artifactId>
|
|
22
|
+
<artifactId>{{web_starter}}</artifactId>
|
|
23
23
|
</dependency>
|
|
24
24
|
<dependency>
|
|
25
25
|
<groupId>org.springframework.boot</groupId>
|
|
@@ -45,13 +45,13 @@
|
|
|
45
45
|
</dependency>
|
|
46
46
|
<dependency>
|
|
47
47
|
<groupId>io.swagger.core.v3</groupId>
|
|
48
|
-
<artifactId>
|
|
48
|
+
<artifactId>{{swagger_artifact}}</artifactId>
|
|
49
49
|
<version>${swagger-annotations-v3.version}</version>
|
|
50
50
|
<scope>compile</scope>
|
|
51
51
|
</dependency>
|
|
52
52
|
<dependency>
|
|
53
53
|
<groupId>org.springframework.boot</groupId>
|
|
54
|
-
<artifactId>
|
|
54
|
+
<artifactId>{{web_test_starter}}</artifactId>
|
|
55
55
|
<scope>test</scope>
|
|
56
56
|
</dependency>
|
|
57
57
|
</dependencies>
|
|
@@ -11,9 +11,9 @@ description: YSS DDD scaffold Engineering Baseline entry for profile, module, de
|
|
|
11
11
|
|
|
12
12
|
- Architecture: `target-domain-model`
|
|
13
13
|
- Persistence: `mybatis-plus`
|
|
14
|
-
-
|
|
15
|
-
- Platform: `
|
|
16
|
-
- Validation namespace: `javax`
|
|
14
|
+
- Verification database: `h2`; production database: `not-bound`
|
|
15
|
+
- Platform: approved `platform_configuration` v2 from the shared backend platform catalog
|
|
16
|
+
- Validation namespace: derived from that platform (`javax` for Boot 2.7; `jakarta` for Boot 3.5/4.1)
|
|
17
17
|
- DTO placement: `web`
|
|
18
18
|
- Repository: `yss-internal`
|
|
19
19
|
|
|
@@ -80,13 +80,17 @@ async function prepareGoldenProject(t) {
|
|
|
80
80
|
attachDesignPrerequisites(root, contract);
|
|
81
81
|
await writeFile(contractFile, `${JSON.stringify(contract, null, 2)}\n`);
|
|
82
82
|
const args = ["--project-name", "golden-service", "--base-package", "com.yss.golden", "--output-dir", output, "--contract-id", "golden-scaffold-1", "--contract-version", "1", "--approval-ref", contract.lifecycle_approval_ref, "--compiler-draft-ref", "compiler-golden-1", "--persisted-ref", "persisted-golden-1", "--contract-file", contractFile, "--group-id", "com.yss.datamiddle", "--project-version", "1.0.0-SNAPSHOT", "--parent-group-id", "com.yss.datamiddle", "--parent-artifact-id", "yss-datamiddle-parent", "--parent-version", "2.0.0-SNAPSHOT", "--yss-components-version", "2.0.0-SNAPSHOT"];
|
|
83
|
-
const generated = await execute(process.execPath, [generator, ...args]);
|
|
83
|
+
const generated = await execute(process.execPath, [path.resolve(scripts, "../../../../scripts/fixtures/backend-scaffold/generate-candidate.mjs"), generator, ...args]);
|
|
84
84
|
assert.equal(generated.code, 0, generated.stderr);
|
|
85
85
|
const project = path.join(output, "golden-service");
|
|
86
86
|
const manifestPath = path.join(project, ".yss", "scaffold-generation.json");
|
|
87
87
|
const emptyVerificationPath = path.join(root, "empty-scaffold-verification.json");
|
|
88
88
|
await writeFile(emptyVerificationPath, JSON.stringify({ status: "passed", completion_level: "empty-scaffold-verified", commands: ["./mvnw validate", "./mvnw test", "./mvnw package"] }));
|
|
89
89
|
const manifest = JSON.parse(await readFile(manifestPath, "utf8"));
|
|
90
|
+
// Legacy Manifest compatibility fixture only; this does not qualify a new platform.
|
|
91
|
+
delete manifest.platform_configuration;
|
|
92
|
+
delete manifest.platform_verification;
|
|
93
|
+
delete manifest.architecture_identity.platform_configuration;
|
|
90
94
|
manifest.completion_level = "empty-scaffold-verified";
|
|
91
95
|
manifest.empty_scaffold_verification_ref = emptyVerificationPath;
|
|
92
96
|
await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
|
package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs
CHANGED
|
@@ -54,7 +54,9 @@ async function fixture({ omitGatewayImpl = false, omitReadiness = false } = {})
|
|
|
54
54
|
const manifestPath = path.join(project, ".yss", "scaffold-generation.json");
|
|
55
55
|
const contractPath = path.join(root, "slice-contract.json");
|
|
56
56
|
await mkdir(path.dirname(manifestPath), { recursive: true });
|
|
57
|
+
const architectureIdentity = { architecture_family: "domain-driven", architecture_profile: "target-domain-model", generator_skill: "yss-ddd-scaffold-generator", requested_capabilities: [], resolved_modules: ["domain", "application", "infrastructure", "adapter", "bootstrap"], contract_digest: "a".repeat(64), verification_database: "h2", production_database: "not-bound" };
|
|
57
58
|
await writeFile(manifestPath, JSON.stringify({
|
|
59
|
+
architecture_identity: architectureIdentity,
|
|
58
60
|
schema_version: 2,
|
|
59
61
|
contract_id: "scaffold-1",
|
|
60
62
|
contract_version: 1,
|
|
@@ -79,7 +81,8 @@ async function fixture({ omitGatewayImpl = false, omitReadiness = false } = {})
|
|
|
79
81
|
maven_coordinates_source: "approved-contract"
|
|
80
82
|
}));
|
|
81
83
|
await writeFile(contractPath, JSON.stringify({
|
|
82
|
-
|
|
84
|
+
architecture_identity: architectureIdentity,
|
|
85
|
+
schema_version: 2,
|
|
83
86
|
contract_id: "slice-1",
|
|
84
87
|
contract_version: 1,
|
|
85
88
|
slice_id: "quality-rule-first-slice",
|
|
@@ -87,7 +90,7 @@ async function fixture({ omitGatewayImpl = false, omitReadiness = false } = {})
|
|
|
87
90
|
readiness: { blockers: [], stale_inputs: [] },
|
|
88
91
|
common: { required_skills: requiredSkills },
|
|
89
92
|
backend: { status: "required", affected_layers: ["domain", "application", "infrastructure", "web"], required_skills: requiredSkills },
|
|
90
|
-
work_units: [{ id: "slice-backend", contract_id: "slice-1", contract_version: 1, work_unit: { primary_skill: "yss-domain" } }]
|
|
93
|
+
work_units: [{ architecture_identity: architectureIdentity, id: "slice-backend", contract_id: "slice-1", contract_version: 1, work_unit: { primary_skill: "yss-domain" } }]
|
|
91
94
|
}));
|
|
92
95
|
await write(project, "mvnw", "#!/bin/sh\nexit 0\n");
|
|
93
96
|
await chmod(path.join(project, "mvnw"), 0o755);
|