create-yss-spec 3.4.6 → 3.4.8
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/package.json +1 -1
- package/template/.agents/skills/.strategic-design-skills-manifest.json +1 -1
- package/template/.agents/skills/.yss-skills-manifest.json +1 -8
- package/template/.agents/skills/code-review/references/yss-review-standards.md +22 -0
- package/template/.agents/skills/formily-mode-slot-detail/SKILL.md +3 -4
- package/template/.agents/skills/lombok/SKILL.md +1 -1
- package/template/.agents/skills/mapstruct/SKILL.md +3 -1
- package/template/.agents/skills/yedit-table-usage/SKILL.md +2 -0
- package/template/.agents/skills/yss-application/references/application-layer-guide.md +7 -0
- package/template/.agents/skills/yss-backend-spec-review/SKILL.md +38 -0
- package/template/.agents/skills/yss-backend-spec-review/references/check-inputs.md +21 -0
- package/template/.agents/skills/yss-backend-spec-review/references/remediation-workflow.md +48 -0
- package/template/.agents/skills/yss-backend-spec-review/tests/routing.test.mjs +19 -0
- package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +6 -4
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +60 -23
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +6 -0
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +4 -2
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md +7 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +6 -10
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +12 -16
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +36 -88
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +4 -3
- package/template/.agents/skills/yss-design-system/SKILL.md +2 -2
- package/template/.agents/skills/yss-domain/references/domain-layer-guide.md +8 -1
- package/template/.agents/skills/yss-formily/SKILL.md +2 -2
- package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
- package/template/.agents/skills/yss-hook/SKILL.md +3 -2
- package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +6 -1
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/assets/templates/architecture-rules-test.java.template +66 -0
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +4 -2
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -7
- package/template/.agents/skills/yss-mybatis/SKILL.md +4 -0
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +1 -3
- package/template/.agents/skills/yss-repository/references/profiles/target-domain-model.md +10 -2
- package/template/.agents/skills/yss-skill-source-index-refresh/references/source-map-config.md +3 -2
- package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +3 -2
- package/template/.agents/skills/yss-technical-design/SKILL.md +1 -1
- package/template/.agents/skills/yss-technical-design/references/technical-design-contract.md +1 -1
- package/template/.agents/skills/yss-technical-design/tests/run-scenarios.mjs +1 -2
- package/template/.agents/skills/yss-ui/SKILL.md +9 -6
- package/template/.agents/skills/yss-ui/references/component-routing.md +11 -4
- package/template/.agents/skills/yss-ui-business-page-generation/SKILL.md +5 -1
- package/template/.agents/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
- package/template/.agents/skills/yss-web-controller/references/web-adapter-layer-guide.md +8 -0
- package/template/.agents/skills/ytable-usage/SKILL.md +14 -7
- package/template/.agents/skills/ytree-usage/SKILL.md +1 -0
- package/template/.codex/skills/code-review/references/yss-review-standards.md +22 -0
- package/template/.codex/skills/formily-mode-slot-detail/SKILL.md +3 -4
- package/template/.codex/skills/lombok/SKILL.md +1 -1
- package/template/.codex/skills/mapstruct/SKILL.md +3 -1
- package/template/.codex/skills/yedit-table-usage/SKILL.md +2 -0
- package/template/.codex/skills/yss-application/references/application-layer-guide.md +7 -0
- package/template/.codex/skills/yss-backend-spec-review/SKILL.md +38 -0
- package/template/.codex/skills/yss-backend-spec-review/references/check-inputs.md +21 -0
- package/template/.codex/skills/yss-backend-spec-review/references/remediation-workflow.md +48 -0
- package/template/.codex/skills/yss-backend-spec-review/tests/routing.test.mjs +19 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +6 -4
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +60 -23
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +6 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +4 -2
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md +7 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +6 -10
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +12 -16
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +36 -88
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +4 -3
- package/template/.codex/skills/yss-design-system/SKILL.md +2 -2
- package/template/.codex/skills/yss-domain/references/domain-layer-guide.md +8 -1
- package/template/.codex/skills/yss-formily/SKILL.md +2 -2
- package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
- package/template/.codex/skills/yss-hook/SKILL.md +3 -2
- package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +6 -1
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/assets/templates/architecture-rules-test.java.template +66 -0
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +4 -2
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -7
- package/template/.codex/skills/yss-mybatis/SKILL.md +4 -0
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +1 -3
- package/template/.codex/skills/yss-repository/references/profiles/target-domain-model.md +10 -2
- package/template/.codex/skills/yss-skill-source-index-refresh/references/source-map-config.md +3 -2
- package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +3 -2
- package/template/.codex/skills/yss-technical-design/SKILL.md +1 -1
- package/template/.codex/skills/yss-technical-design/references/technical-design-contract.md +1 -1
- package/template/.codex/skills/yss-technical-design/tests/run-scenarios.mjs +1 -2
- package/template/.codex/skills/yss-ui/SKILL.md +9 -6
- package/template/.codex/skills/yss-ui/references/component-routing.md +11 -4
- package/template/.codex/skills/yss-ui-business-page-generation/SKILL.md +5 -1
- package/template/.codex/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
- package/template/.codex/skills/yss-web-controller/references/web-adapter-layer-guide.md +8 -0
- package/template/.codex/skills/ytable-usage/SKILL.md +14 -7
- package/template/.codex/skills/ytree-usage/SKILL.md +1 -0
- package/template/.cursor/skills/code-review/references/yss-review-standards.md +22 -0
- package/template/.cursor/skills/formily-mode-slot-detail/SKILL.md +3 -4
- package/template/.cursor/skills/lombok/SKILL.md +1 -1
- package/template/.cursor/skills/mapstruct/SKILL.md +3 -1
- package/template/.cursor/skills/yedit-table-usage/SKILL.md +2 -0
- package/template/.cursor/skills/yss-application/references/application-layer-guide.md +7 -0
- package/template/.cursor/skills/yss-backend-spec-review/SKILL.md +38 -0
- package/template/.cursor/skills/yss-backend-spec-review/references/check-inputs.md +21 -0
- package/template/.cursor/skills/yss-backend-spec-review/references/remediation-workflow.md +48 -0
- package/template/.cursor/skills/yss-backend-spec-review/tests/routing.test.mjs +19 -0
- package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +6 -4
- package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +60 -23
- package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +6 -0
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +4 -2
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md +7 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +6 -10
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +12 -16
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +36 -88
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +4 -3
- package/template/.cursor/skills/yss-design-system/SKILL.md +2 -2
- package/template/.cursor/skills/yss-domain/references/domain-layer-guide.md +8 -1
- package/template/.cursor/skills/yss-formily/SKILL.md +2 -2
- package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
- package/template/.cursor/skills/yss-hook/SKILL.md +3 -2
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +6 -1
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/assets/templates/architecture-rules-test.java.template +66 -0
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +4 -2
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -7
- package/template/.cursor/skills/yss-mybatis/SKILL.md +4 -0
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +1 -3
- package/template/.cursor/skills/yss-repository/references/profiles/target-domain-model.md +10 -2
- package/template/.cursor/skills/yss-skill-source-index-refresh/references/source-map-config.md +3 -2
- package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +3 -2
- package/template/.cursor/skills/yss-technical-design/SKILL.md +1 -1
- package/template/.cursor/skills/yss-technical-design/references/technical-design-contract.md +1 -1
- package/template/.cursor/skills/yss-technical-design/tests/run-scenarios.mjs +1 -2
- package/template/.cursor/skills/yss-ui/SKILL.md +9 -6
- package/template/.cursor/skills/yss-ui/references/component-routing.md +11 -4
- package/template/.cursor/skills/yss-ui-business-page-generation/SKILL.md +5 -1
- package/template/.cursor/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
- package/template/.cursor/skills/yss-web-controller/references/web-adapter-layer-guide.md +8 -0
- package/template/.cursor/skills/ytable-usage/SKILL.md +14 -7
- package/template/.cursor/skills/ytree-usage/SKILL.md +1 -0
- package/template/.pi/skills/code-review/references/yss-review-standards.md +22 -0
- package/template/.pi/skills/formily-mode-slot-detail/SKILL.md +3 -4
- package/template/.pi/skills/lombok/SKILL.md +1 -1
- package/template/.pi/skills/mapstruct/SKILL.md +3 -1
- package/template/.pi/skills/yedit-table-usage/SKILL.md +2 -0
- package/template/.pi/skills/yss-application/references/application-layer-guide.md +7 -0
- package/template/.pi/skills/yss-backend-spec-review/SKILL.md +38 -0
- package/template/.pi/skills/yss-backend-spec-review/references/check-inputs.md +21 -0
- package/template/.pi/skills/yss-backend-spec-review/references/remediation-workflow.md +48 -0
- package/template/.pi/skills/yss-backend-spec-review/tests/routing.test.mjs +19 -0
- package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +6 -4
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +60 -23
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +6 -0
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +4 -2
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/engineering-baseline.md +7 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +6 -10
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +12 -16
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +36 -88
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +4 -3
- package/template/.pi/skills/yss-design-system/SKILL.md +2 -2
- package/template/.pi/skills/yss-domain/references/domain-layer-guide.md +8 -1
- package/template/.pi/skills/yss-formily/SKILL.md +2 -2
- package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +1 -1
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +2 -2
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +158 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +3 -3
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +5 -0
- package/template/.pi/skills/yss-hook/SKILL.md +3 -2
- package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +6 -1
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/SKILL.md +1 -1
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/assets/templates/architecture-rules-test.java.template +66 -0
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +4 -2
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -7
- package/template/.pi/skills/yss-mybatis/SKILL.md +4 -0
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +1 -3
- package/template/.pi/skills/yss-repository/references/profiles/target-domain-model.md +10 -2
- package/template/.pi/skills/yss-skill-source-index-refresh/references/source-map-config.md +3 -2
- package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +3 -2
- package/template/.pi/skills/yss-technical-design/SKILL.md +1 -1
- package/template/.pi/skills/yss-technical-design/references/technical-design-contract.md +1 -1
- package/template/.pi/skills/yss-technical-design/tests/run-scenarios.mjs +1 -2
- package/template/.pi/skills/yss-ui/SKILL.md +9 -6
- package/template/.pi/skills/yss-ui/references/component-routing.md +11 -4
- package/template/.pi/skills/yss-ui-business-page-generation/SKILL.md +5 -1
- package/template/.pi/skills/yss-ui-business-page-generation/references/hooks-map.md +3 -2
- package/template/.pi/skills/yss-web-controller/references/web-adapter-layer-guide.md +8 -0
- package/template/.pi/skills/ytable-usage/SKILL.md +14 -7
- package/template/.pi/skills/ytree-usage/SKILL.md +1 -0
- package/template/docs/agents/digital-human-roles.yaml +2 -2
- package/template/docs/agents/skill-migrations.md +23 -10
- package/template/docs/agents/yss-skill-registry.yaml +14 -73
- package/template/docs/engineering/backend-platforms.md +14 -0
- package/template/docs/process/schemas/digital-human-task-package.schema.json +657 -100
- package/template/docs/process/schemas/slice-implementation-contract-v3.schema.json +41 -0
- package/template/scripts/lib/backend-platform-provenance.mjs +1 -1
- package/template/scripts/lib/backend-platform-verification.mjs +2 -2
- package/template/scripts/lib/backend-platform.mjs +62 -0
- package/template/scripts/lib/backend-review.mjs +102 -0
- package/template/scripts/lib/first-slice-artifacts.mjs +47 -0
- package/template/scripts/lib/first-slice-tests.mjs +24 -0
- package/template/scripts/lib/lifecycle-transition.mjs +6 -0
- package/template/scripts/lib/maintenance-candidate.mjs +160 -0
- package/template/scripts/lib/skill-registry.mjs +5 -1
- package/template/scripts/lib/skill-supply-chain.mjs +1 -1
- package/template/scripts/lib/slice-execution-preflight.mjs +43 -0
- package/template/scripts/slice-contract +7 -3
- package/template/scripts/verify-backend-platform-matrix +8 -2
- package/template/skills-lock.json +42 -157
- package/template/yss-public-skills.json +5 -7
- package/template.manifest.json +0 -1
- package/template.snapshot.json +5 -5
- package/template/.agents/skills/component-selection-imports/SKILL.md +0 -64
- package/template/.agents/skills/page-form-module/SKILL.md +0 -168
- package/template/.agents/skills/page-list-module/SKILL.md +0 -137
- package/template/.agents/skills/page-skeleton/SKILL.md +0 -76
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
- package/template/.agents/skills/vue3-best-practices/SKILL.md +0 -68
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -12
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -12
- package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -18
- package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
- package/template/.agents/skills/yss-mvc-design/SKILL.md +0 -12
- package/template/.agents/skills/yss-mvc-design/agents/openai.yaml +0 -4
- package/template/.agents/skills/yss-mvc-design/references/mvc-design.schema.json +0 -315
- package/template/.agents/skills/yss-use-table-height/SKILL.md +0 -130
- package/template/.agents/skills/yss-use-table-height/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-use-table-height/references/frontend-docs.md +0 -9
- package/template/.agents/skills/yss-use-tree-height/SKILL.md +0 -98
- package/template/.agents/skills/yss-use-tree-height/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
- package/template/.codex/skills/component-selection-imports/SKILL.md +0 -64
- package/template/.codex/skills/page-form-module/SKILL.md +0 -168
- package/template/.codex/skills/page-list-module/SKILL.md +0 -137
- package/template/.codex/skills/page-skeleton/SKILL.md +0 -76
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
- package/template/.codex/skills/vue3-best-practices/SKILL.md +0 -68
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -12
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -12
- package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -18
- package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
- package/template/.codex/skills/yss-mvc-design/SKILL.md +0 -12
- package/template/.codex/skills/yss-mvc-design/agents/openai.yaml +0 -4
- package/template/.codex/skills/yss-mvc-design/references/mvc-design.schema.json +0 -315
- package/template/.codex/skills/yss-use-table-height/SKILL.md +0 -130
- package/template/.codex/skills/yss-use-table-height/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-use-table-height/references/frontend-docs.md +0 -9
- package/template/.codex/skills/yss-use-tree-height/SKILL.md +0 -98
- package/template/.codex/skills/yss-use-tree-height/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
- package/template/.cursor/skills/component-selection-imports/SKILL.md +0 -64
- package/template/.cursor/skills/page-form-module/SKILL.md +0 -168
- package/template/.cursor/skills/page-list-module/SKILL.md +0 -137
- package/template/.cursor/skills/page-skeleton/SKILL.md +0 -76
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
- package/template/.cursor/skills/vue3-best-practices/SKILL.md +0 -68
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -12
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -12
- package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -18
- package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
- package/template/.cursor/skills/yss-mvc-design/SKILL.md +0 -12
- package/template/.cursor/skills/yss-mvc-design/agents/openai.yaml +0 -4
- package/template/.cursor/skills/yss-mvc-design/references/mvc-design.schema.json +0 -315
- package/template/.cursor/skills/yss-use-table-height/SKILL.md +0 -130
- package/template/.cursor/skills/yss-use-table-height/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-use-table-height/references/frontend-docs.md +0 -9
- package/template/.cursor/skills/yss-use-tree-height/SKILL.md +0 -98
- package/template/.cursor/skills/yss-use-tree-height/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
- package/template/.pi/skills/component-selection-imports/SKILL.md +0 -64
- package/template/.pi/skills/page-form-module/SKILL.md +0 -168
- package/template/.pi/skills/page-list-module/SKILL.md +0 -137
- package/template/.pi/skills/page-skeleton/SKILL.md +0 -76
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
- package/template/.pi/skills/vue3-best-practices/SKILL.md +0 -68
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -12
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +0 -12
- package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +0 -18
- package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +0 -9
- package/template/.pi/skills/yss-mvc-design/SKILL.md +0 -12
- package/template/.pi/skills/yss-mvc-design/agents/openai.yaml +0 -4
- package/template/.pi/skills/yss-mvc-design/references/mvc-design.schema.json +0 -315
- package/template/.pi/skills/yss-use-table-height/SKILL.md +0 -130
- package/template/.pi/skills/yss-use-table-height/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-use-table-height/references/frontend-docs.md +0 -9
- package/template/.pi/skills/yss-use-tree-height/SKILL.md +0 -98
- package/template/.pi/skills/yss-use-tree-height/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
package {{base_package}}.architecture;
|
|
2
|
+
|
|
3
|
+
import com.tngtech.archunit.core.domain.JavaClass;
|
|
4
|
+
import com.tngtech.archunit.core.domain.JavaClasses;
|
|
5
|
+
import com.tngtech.archunit.core.domain.Dependency;
|
|
6
|
+
import com.tngtech.archunit.core.importer.ImportOption;
|
|
7
|
+
import com.tngtech.archunit.junit.AnalyzeClasses;
|
|
8
|
+
import com.tngtech.archunit.junit.ArchTest;
|
|
9
|
+
|
|
10
|
+
/** 空骨架可无业务类型;首切片由批准合同传入职责包和必须加载的实际类型。 */
|
|
11
|
+
@AnalyzeClasses(packages = "{{base_package}}", importOptions = ImportOption.DoNotIncludeTests.class)
|
|
12
|
+
class LayeredMvcArchitectureTest {
|
|
13
|
+
private static boolean inPackage(JavaClass type, String prefixes) {
|
|
14
|
+
for (String prefix : prefixes.split(",")) {
|
|
15
|
+
if (!prefix.isEmpty() && (type.getPackageName().equals(prefix)
|
|
16
|
+
|| type.getPackageName().startsWith(prefix + "."))) return true;
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
private static boolean role(JavaClass type, String name, String defaults) {
|
|
22
|
+
return inPackage(type, defaults) || inPackage(type, System.getProperty("yss.arch." + name, ""));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
private static boolean controller(JavaClass type) {
|
|
26
|
+
return type.isAnnotatedWith("org.springframework.web.bind.annotation.RestController")
|
|
27
|
+
|| type.isAnnotatedWith("org.springframework.stereotype.Controller")
|
|
28
|
+
|| type.isMetaAnnotatedWith("org.springframework.stereotype.Controller");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
private static void reject(boolean forbidden, Dependency dependency) {
|
|
32
|
+
if (forbidden) throw new AssertionError(dependency.getDescription());
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@ArchTest
|
|
36
|
+
static void boundaries(JavaClasses classes) {
|
|
37
|
+
for (JavaClass origin : classes) {
|
|
38
|
+
boolean application = role(origin, "application", "{{base_package}}.service,{{base_package}}.core");
|
|
39
|
+
boolean infrastructure = role(origin, "infrastructure", "{{base_package}}.repository");
|
|
40
|
+
for (Dependency dependency : origin.getDirectDependenciesFromSelf()) {
|
|
41
|
+
JavaClass target = dependency.getTargetClass();
|
|
42
|
+
boolean targetWeb = controller(target) || role(target, "web",
|
|
43
|
+
"{{base_package}}.server,{{base_package}}.rest,{{base_package}}.adapter.web");
|
|
44
|
+
boolean targetInfrastructure = role(target, "infrastructure", "{{base_package}}.repository");
|
|
45
|
+
reject(application && targetWeb, dependency);
|
|
46
|
+
reject(infrastructure && (targetWeb || role(target, "application",
|
|
47
|
+
"{{base_package}}.service,{{base_package}}.core")), dependency);
|
|
48
|
+
reject(controller(origin) && targetInfrastructure, dependency);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (Boolean.getBoolean("yss.firstSlice")) {
|
|
52
|
+
if (Boolean.getBoolean("yss.arch.requireController")) {
|
|
53
|
+
boolean foundController = false;
|
|
54
|
+
for (JavaClass type : classes) if (controller(type)) foundController = true;
|
|
55
|
+
if (!foundController) throw new AssertionError("Web slice did not load an actual Controller");
|
|
56
|
+
}
|
|
57
|
+
String required = System.getProperty("yss.arch.requiredTypes", "");
|
|
58
|
+
if (required.isEmpty()) throw new AssertionError("first slice requires contract-bound types");
|
|
59
|
+
for (String name : required.split(",")) {
|
|
60
|
+
boolean found = false;
|
|
61
|
+
for (JavaClass type : classes) if (type.getName().equals(name)) found = true;
|
|
62
|
+
if (!found) throw new AssertionError("architecture scope did not load " + name);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs
CHANGED
|
@@ -120,7 +120,7 @@ function parentPom(contract, modules, platform) {
|
|
|
120
120
|
<properties><java.version>${v.java_version}</java.version><spring-boot.version>${v.boot_version}</spring-boot.version><maven.compiler.source>${v.java_version}</maven.compiler.source><maven.compiler.target>${v.java_version}</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><yss-components.version>${xml(c.yss_components_version)}</yss-components.version></properties>
|
|
121
121
|
<modules>${modules.map((module) => `<module>${contract.project_name}-${module}</module>`).join("")}</modules>
|
|
122
122
|
<dependencyManagement><dependencies>${dependency("org.springframework.boot", "spring-boot-dependencies", v.boot_version, "import").replace("</dependency>", "<type>pom</type></dependency>")}${dependency("com.yss.cloud", "yss-components-bom", "${yss-components.version}", "import").replace("</dependency>", "<type>pom</type></dependency>")}</dependencies></dependencyManagement>
|
|
123
|
-
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-enforcer-plugin</artifactId><version>${v.enforcer_version}</version><executions><execution><id>enforce-platform</id><goals><goal>enforce</goal></goals><configuration><rules><requireJavaVersion><version>${v.java_range}</version></requireJavaVersion><requireMavenVersion><version>[3.6.3,)</version></requireMavenVersion><dependencyConvergence/></rules></configuration></execution></executions></plugin></plugins><pluginManagement><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${v.boot_version}</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>${v.surefire_version}</version></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${v.compiler_version}</version><configuration><source>${v.java_version}</source><target>${v.java_version}</target><parameters>true</parameters><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${v.lombok_version}</version></path><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>${v.mapstruct_version}</version></path><path><groupId>org.projectlombok</groupId><artifactId>lombok-mapstruct-binding</artifactId><version
|
|
123
|
+
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-enforcer-plugin</artifactId><version>${v.enforcer_version}</version><executions><execution><id>enforce-platform</id><goals><goal>enforce</goal></goals><configuration><rules><requireJavaVersion><version>${v.java_range}</version></requireJavaVersion><requireMavenVersion><version>[3.6.3,)</version></requireMavenVersion><dependencyConvergence/></rules></configuration></execution></executions></plugin></plugins><pluginManagement><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${v.boot_version}</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>${v.surefire_version}</version></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${v.compiler_version}</version><configuration><source>${v.java_version}</source><target>${v.java_version}</target><parameters>true</parameters><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${v.lombok_version}</version></path><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>${v.mapstruct_version}</version></path><path><groupId>org.projectlombok</groupId><artifactId>lombok-mapstruct-binding</artifactId><version>${v.lombok_mapstruct_binding_version}</version></path></annotationProcessorPaths></configuration></plugin></plugins></pluginManagement></build>
|
|
124
124
|
</project>`;
|
|
125
125
|
}
|
|
126
126
|
|
|
@@ -130,6 +130,7 @@ function modulePom(contract, module, modules, platform) {
|
|
|
130
130
|
const dependencies = [];
|
|
131
131
|
if (module === "server") {
|
|
132
132
|
dependencies.push(own(applicationModule), dependency("org.springframework.boot", platform.web_starter), dependency("org.springframework.boot", "spring-boot-starter-validation"), dependency("org.springframework.boot", "spring-boot-starter-test", null, "test"), dependency("com.tngtech.archunit", "archunit-junit5", platform.versions.archunit, "test"));
|
|
133
|
+
dependencies.push(dependency("org.projectlombok", "lombok", platform.versions.lombok, "test"));
|
|
133
134
|
if (platform.web_test_starter !== "spring-boot-starter-test") dependencies.push(dependency("org.springframework.boot", platform.web_test_starter, null, "test"));
|
|
134
135
|
if (modules.includes("client")) dependencies.push(own("client"));
|
|
135
136
|
dependencies.push(dependency("com.h2database", "h2", null, "test"), dependency("org.mapstruct", "mapstruct", platform.versions.mapstruct), dependency("com.yss.cloud", "yss-component-dto"));
|
|
@@ -263,7 +264,8 @@ export async function generate(options, { skillId = SKILL_ID, architectureProfil
|
|
|
263
264
|
await put(projectRoot, `${serverRoot}/src/main/resources/application-scaffold-local.yml`, localDatabaseConfiguration(options.projectName));
|
|
264
265
|
await put(projectRoot, `${serverRoot}/src/test/resources/application-scaffold-test.yml`, localDatabaseConfiguration(`${options.projectName}_test`));
|
|
265
266
|
await put(projectRoot, `${serverRoot}/src/test/java/${packagePath}/${applicationClass}Test.java`, `package ${options.basePackage};\n\nimport org.junit.jupiter.api.Test;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.ActiveProfiles;\n\n@SpringBootTest\n@ActiveProfiles("scaffold-test")\nclass ${applicationClass}Test {\n @Test\n void contextLoads() {\n }\n}`);
|
|
266
|
-
await
|
|
267
|
+
const architectureTemplate = await readFile(path.join(SKILL_ROOT, "assets/templates/architecture-rules-test.java.template"), "utf8");
|
|
268
|
+
await put(projectRoot, `${serverRoot}/src/test/java/${packagePath}/architecture/LayeredMvcArchitectureTest.java`, architectureTemplate.replaceAll("{{base_package}}", options.basePackage));
|
|
267
269
|
await put(projectRoot, `${serverRoot}/src/test/java/${packagePath}/PlatformIntegrationTest.java`, platformSmokeTest(options.basePackage, platform, contract.module_profile.requested_capabilities));
|
|
268
270
|
const wrapper = path.join(REPOSITORY_ROOT, ".agents/skills/yss-ddd-scaffold-generator/assets/wrapper");
|
|
269
271
|
await cp(wrapper, projectRoot, { recursive: true });
|
|
@@ -93,13 +93,6 @@ test("数据分析初始化生成 H2 六模块和独立治理信封", async (t)
|
|
|
93
93
|
assert.doesNotMatch(core, /demo-service-client|spring-web|ojdbc|mysql-connector/);
|
|
94
94
|
});
|
|
95
95
|
|
|
96
|
-
test("历史数据分析初始化入口只返回稳定退役错误", () => {
|
|
97
|
-
const initializer = path.resolve(path.dirname(script), "../../yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs");
|
|
98
|
-
const result = spawnSync(process.execPath, [initializer], { encoding: "utf8" });
|
|
99
|
-
assert.notEqual(result.status, 0);
|
|
100
|
-
assert.match(result.stderr, /^skill-deprecated:/);
|
|
101
|
-
});
|
|
102
|
-
|
|
103
96
|
test("数据分析 Profile 缺少 CONTEXT handoff 或独立 Git 合同时零写入阻断", async (t) => {
|
|
104
97
|
const profile = { capabilities: [], modules: ["server", "core", "client", "repository", "adapter", "feign-client"] };
|
|
105
98
|
const missingContext = await fixture(t, { architectureProfile: "mvc-data-analysis-v1", profile });
|
|
@@ -55,3 +55,7 @@ description: 用于 YSS MyBatis / MyBatis-Plus 组件能力核验、接入决策
|
|
|
55
55
|
## 平台与源码门禁
|
|
56
56
|
|
|
57
57
|
接入、修改、代码生成或给出精确类名/配置前,读取 [后端组件平台与源码门禁](../yss-skill-source-index-refresh/references/backend-component-platform-compatibility.md),从批准的 `platform_configuration.component_platform_line` 选择 `source-index.boot2-java8.md` 或 `source-index.boot3-java17.md`,并以 `--skill yss-mybatis --platform-line <line> --source-root <matching-root>` 运行统一 freshness 校验。平台线与源码根不匹配、组件 tree 不一致、组件子树 dirty、索引缺少平台信号,或 Manifest / 组件 GAV 缺少 verified 兼容证据时返回 `blocked`;不得回退另一代索引,也不在业务实现中升级、降级或替换 YSS 组件。既有工程只读分诊可继续,但不得据此宣称跨 Boot/JDK 兼容。
|
|
58
|
+
|
|
59
|
+
## 持久化选择记录
|
|
60
|
+
|
|
61
|
+
在已有数据合同 / persistence_strategy 中记录:实际 Mapper 基类、组件源码与平台绑定、分页唯一责任者、主键与审计填充,以及命中批量时的 SQL 入口、分批大小和方言证据。`BaseMapper` 与组件扩展基类按所需能力选择,不因命名不同判违规;依赖存在和循环 insert 均不证明批量能力。未命中的能力不强制生成。
|
|
@@ -299,7 +299,7 @@ skill_source_contract:
|
|
|
299
299
|
lock_version: 3
|
|
300
300
|
source_revisions_required: [mattpocock/skills, iloveZzz/yss-ui]
|
|
301
301
|
adaptation_ref_required_when_effective_diff: true
|
|
302
|
-
retired_shared_skills: [yss-antd-design, yss-antdv-next-design, ask-matt, batch-grill-me, dispatching-parallel-agents, loop-me, migrate-to-shoehorn, product-design-prototype, prototype-page-acceptance, scaffold-exercises, setup-pre-commit, setup-ts-deep-modules, teach, writing-beats, writing-fragments, writing-shape, yss-components, yss-dictionary, yss-jdbc, yss-log, yss-microapp-commit, yss-mvc-scaffold-generator, yss-page-module-development, yss-taskflow, yss-backend-scaffold-application, yss-backend-scaffold-domain, yss-backend-scaffold-infrastructure, yss-backend-scaffold-web, yss-backend-scaffold-adapter, yss-application-layer-reference, yss-domain-layer-reference, yss-infrastructure-layer-reference, yss-web-layer-reference]
|
|
302
|
+
retired_shared_skills: [yss-antd-design, yss-antdv-next-design, ask-matt, batch-grill-me, dispatching-parallel-agents, loop-me, migrate-to-shoehorn, product-design-prototype, prototype-page-acceptance, scaffold-exercises, setup-pre-commit, setup-ts-deep-modules, teach, writing-beats, writing-fragments, writing-shape, yss-components, yss-dictionary, yss-jdbc, yss-log, yss-microapp-commit, yss-mvc-scaffold-generator, yss-mvc-design, yss-mvc-data-analysis-project-initializer, yss-backend-scaffold-parent, yss-page-module-development, yss-taskflow, yss-backend-scaffold-application, yss-backend-scaffold-domain, yss-backend-scaffold-infrastructure, yss-backend-scaffold-web, yss-backend-scaffold-adapter, yss-application-layer-reference, yss-domain-layer-reference, yss-infrastructure-layer-reference, yss-web-layer-reference]
|
|
303
303
|
|
|
304
304
|
# 生命周期默认走原生工作单元;Matt user-invoked skill 仅保留为兼容入口。
|
|
305
305
|
lifecycle_native_entries:
|
|
@@ -462,7 +462,6 @@ work_unit_routes:
|
|
|
462
462
|
formily_impact: [yss-formily]
|
|
463
463
|
table_impact: [ytable-usage, yedit-table-usage]
|
|
464
464
|
tree_impact: [ytree-usage]
|
|
465
|
-
height_impact: [yss-use-table-height, yss-use-tree-height]
|
|
466
465
|
export_impact: [file-export-download]
|
|
467
466
|
theme_impact: [theme-token-usage]
|
|
468
467
|
not_applicable_reasons:
|
|
@@ -470,7 +469,6 @@ work_unit_routes:
|
|
|
470
469
|
formily_impact: no_formily_impact
|
|
471
470
|
table_impact: no_table_impact
|
|
472
471
|
tree_impact: no_tree_impact
|
|
473
|
-
height_impact: no_height_impact
|
|
474
472
|
export_impact: no_export_impact
|
|
475
473
|
theme_impact: no_theme_impact
|
|
476
474
|
applies_when: ready_for_agent
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
## 前置与所有权
|
|
6
6
|
|
|
7
|
-
- 写模型必须已有批准的 Domain Gateway
|
|
7
|
+
- 写模型必须已有批准的 Domain Gateway;展示读模型必须已有批准的 Application Query Port。缺失或需要改变签名时返回 `new_impacts`,由 `yss-domain` / `yss-application` 和实现合同编译器处理。
|
|
8
8
|
- Infrastructure 实现既有端口,拥有 PO、Repository/Mapper、XML、持久化 Convertor、GatewayImpl 和 QueryAdapter;不拥有领域规则、HTTP DTO 或业务事务。
|
|
9
|
-
- Domain Gateway 只交换 Aggregate、Domain Model
|
|
9
|
+
- Domain Gateway 只交换 Aggregate、Domain Model、领域值和标识;展示分页、列表和读模型走 Application Query Port,`PageQuery` 不进入 Domain。
|
|
10
10
|
|
|
11
11
|
## 结构决策
|
|
12
12
|
|
|
@@ -21,3 +21,11 @@
|
|
|
21
21
|
- 经 Domain Gateway 保存后可重新加载语义等价的 Aggregate。
|
|
22
22
|
- Query Port 覆盖分页 total、空结果、排序/过滤白名单和字段转换。
|
|
23
23
|
- Mapper/Repository 使用批准数据库 fixture;H2 不能证明生产方言。
|
|
24
|
+
|
|
25
|
+
## 持久化决策与映射
|
|
26
|
+
|
|
27
|
+
- 在既有 persistence_strategy / 数据合同中明确 Mapper 基类及源码依据、主键、逻辑删除、审计填充、并发版本、敏感字段、分页责任和命中时的批量策略。未命中分页或批量时写明理由,不创建空适配器。
|
|
28
|
+
- 多表聚合按同一 Application 事务保存,重载后比较身份、值对象、集合与业务状态;并发写入按批准策略验证冲突或幂等结果。
|
|
29
|
+
- 机械字段使用 Spring MapStruct Bean;聚合重建可通过显式工厂或自定义映射方法。业务状态校验由领域入口拥有,禁止为了映射而开放破坏不变量的 setter。
|
|
30
|
+
- 创建与更新的 null 语义、枚举未知值和审计字段保留必须有测试;转换器不得静默创造业务默认值或吞掉非法持久化状态。
|
|
31
|
+
- 包名与类型后缀来自批准工程基线;Mapper 与 Repository 的命名不能替代职责、运行时发现和行为验证。
|
package/template/.codex/skills/yss-skill-source-index-refresh/references/source-map-config.md
CHANGED
|
@@ -31,5 +31,6 @@ Frontend docs are written to these skills:
|
|
|
31
31
|
| --- | --- |
|
|
32
32
|
| `yss-ui` | components, hooks, skills docs |
|
|
33
33
|
| `yss-hook` | hooks docs |
|
|
34
|
-
| `
|
|
35
|
-
| `
|
|
34
|
+
| `ytable-usage` | hooks docs |
|
|
35
|
+
| `yedit-table-usage` | hooks docs |
|
|
36
|
+
| `ytree-usage` | hooks docs |
|
package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs
CHANGED
|
@@ -58,8 +58,9 @@ const FRONTEND = {
|
|
|
58
58
|
"yss-ui": ["components", "hooks", "skills"],
|
|
59
59
|
"yss-hook": ["hooks"],
|
|
60
60
|
"yss-ui-business-page-generation": ["components", "hooks", "skills"],
|
|
61
|
-
"
|
|
62
|
-
"
|
|
61
|
+
"ytable-usage": ["hooks"],
|
|
62
|
+
"yedit-table-usage": ["hooks"],
|
|
63
|
+
"ytree-usage": ["hooks"],
|
|
63
64
|
};
|
|
64
65
|
|
|
65
66
|
const URLS = {
|
|
@@ -30,7 +30,7 @@ description: 在 YSS 技术分析中统一承接需求与战略输入,按已
|
|
|
30
30
|
|
|
31
31
|
新产物使用 schema v2 Technical Design Contract:共同头记录架构来源、输入版本与摘要、规则/场景承接、评审证据和状态,`design` 保存架构专属内容。合同格式与兼容规则见 `references/technical-design-contract.md`,Schema 见 `references/technical-design.schema.json`。
|
|
32
32
|
|
|
33
|
-
MVC `design` 分支由 `references/mvc-design.schema.json` 约束。无状态流转或外部集成时记录有依据的不适用;业务规则和关键场景必须关联具体用例与成功/失败测试 seam。MVC 与 DDD 使用同一承接和审查要求,不能因采用分层 MVC
|
|
33
|
+
MVC `design` 分支由 `references/mvc-design.schema.json` 约束。无状态流转或外部集成时记录有依据的不适用;业务规则和关键场景必须关联具体用例与成功/失败测试 seam。MVC 与 DDD 使用同一承接和审查要求,不能因采用分层 MVC 省略规则、一致性或测试设计。旧 MVC 设计合同必须迁移到本入口并重新编译、批准。
|
|
34
34
|
|
|
35
35
|
运行 `node .agents/skills/yss-technical-design/scripts/validate-technical-design.mjs <合同> --root <项目根>`。整体存在延期或冲突即阻断整体;相关切片可带 `--slice <切片ID>` 按依赖核验,仍须合同已批准。校验成功只返回审查输入,不批准、不设置 `ready-for-agent`。
|
|
36
36
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Technical Design Contract v2
|
|
2
2
|
|
|
3
|
-
共同合同字段由 `technical-design-common.schema.json` 定义,完整 `technical-design.schema.json` 通过 `scripts/generate-schema.mjs` 合并专项 Schema 派生,使用 `--check` 检查同步,`design` 按 `architecture.family` 校验:`domain-driven` 沿用 DDD v1 内容结构,`layered-mvc` 使用本 skill 的 `references/mvc-design.schema.json`。DDD 内层的 schema/version/status 是分支内容版本,status
|
|
3
|
+
共同合同字段由 `technical-design-common.schema.json` 定义,完整 `technical-design.schema.json` 通过 `scripts/generate-schema.mjs` 合并专项 Schema 派生,使用 `--check` 检查同步,`design` 按 `architecture.family` 校验:`domain-driven` 沿用 DDD v1 内容结构,`layered-mvc` 使用本 skill 的 `references/mvc-design.schema.json`。DDD 内层的 schema/version/status 是分支内容版本,status 必须与共同头一致;战略交接绑定只写共同头,避免双重维护。
|
|
4
4
|
|
|
5
5
|
## 共同头
|
|
6
6
|
|
|
@@ -15,8 +15,7 @@ const root = mkdtempSync(path.join(tmpdir(), 'yss-technical-design-'));
|
|
|
15
15
|
let checks = 0;
|
|
16
16
|
try {
|
|
17
17
|
const activeMvcSchema = JSON.parse(readFileSync(fileURLToPath(new URL('../references/mvc-design.schema.json', import.meta.url)), 'utf8'));
|
|
18
|
-
|
|
19
|
-
assert.deepEqual(activeMvcSchema, deprecatedMvcSchema); checks++;
|
|
18
|
+
assert.equal(activeMvcSchema.title, 'YSS MVC 技术设计内容'); checks++;
|
|
20
19
|
const mvc = mvcFixture(root);
|
|
21
20
|
const validate = data => validateTechnicalDesign(data, { root });
|
|
22
21
|
assert.equal((await validate(mvc)).architecture_family, 'layered-mvc'); checks++;
|
|
@@ -5,7 +5,7 @@ description: "选择和核验 YSS Vue 生产页面组件及 Ant Design Vue 兼
|
|
|
5
5
|
|
|
6
6
|
# YSS UI 统一路由与交付门禁
|
|
7
7
|
|
|
8
|
-
本技能是 YSS Vue
|
|
8
|
+
本技能是 YSS Vue 生产页面的统一入口。它负责组件与导入来源路由、版本预检、跨组件约束和交付证据;具体页面、组件、请求和表单实现交给最小专项 skill,避免重复维护 API 细节。
|
|
9
9
|
|
|
10
10
|
## 1. 权威事实顺序
|
|
11
11
|
|
|
@@ -51,16 +51,19 @@ pnpm why vue @yss-ui/components @yss-ui/hooks ant-design-vue vxe-table
|
|
|
51
51
|
- `YFormily` 是新代码 canonical name;`YssFormily` 仅作为已确认导出的历史兼容 alias。
|
|
52
52
|
- `YSplitPane`、`YButton`、`YCard` 等已有封装优先使用 YSS。
|
|
53
53
|
|
|
54
|
+
导入来源必须可追溯:优先使用当前会话的 yss-ui MCP 查询真实组件、Hook、Utils 与导出包;不可用时再读取与安装版本匹配的本地文档、`llms-full.txt`、源码 `src/index.ts` 和已编译用法。已导出的能力分别从 `@yss-ui/components`、`@yss-ui/hooks`、`@yss-ui/utils` 导入;确认未封装的 `Modal`、`Drawer`、`Popconfirm`、`Input` 等才从 `ant-design-vue` 导入。禁止臆造 `YModal`、`YDrawer`、`YInput`、`YPopconfirm` 或直接导入 `@formily/antdv` 业务 UI。
|
|
55
|
+
|
|
54
56
|
## 4. 最小专项 skill 路由
|
|
55
57
|
|
|
56
58
|
| 任务 | 必须路由 |
|
|
57
59
|
|---|---|
|
|
58
60
|
| 新建或改造完整业务页面 | `yss-ui-business-page-generation` |
|
|
59
|
-
| 页面布局与无独立 Skill 的专项组件 | `page-
|
|
61
|
+
| 页面布局与无独立 Skill 的专项组件 | `yss-ui-business-page-generation`、`references/component-routing.md`、`references/specialized-components.md` |
|
|
60
62
|
| 请求、分页、参数、树数据映射 | `yss-hook` |
|
|
61
63
|
| Formily schema、联动、校验、详情态 | `yss-formily` |
|
|
62
|
-
|
|
|
63
|
-
|
|
|
64
|
+
| YTable 与表格高度 | `ytable-usage` |
|
|
65
|
+
| YEditTable 与表格高度 | `yedit-table-usage` |
|
|
66
|
+
| YTree 与树高度 | `ytree-usage` |
|
|
64
67
|
| Orval、API、useRequest 接入 | `yss-api-integration` |
|
|
65
68
|
| 视觉、token、响应式体验 | `yss-design-system` |
|
|
66
69
|
|
|
@@ -133,7 +136,7 @@ verification: pnpm type-check
|
|
|
133
136
|
3. 搭页面目录和布局。
|
|
134
137
|
4. 接 `YFormily`、`YTable`、`YTree` 等 YSS 主体组件。
|
|
135
138
|
5. 下沉请求、分页和映射到 `yss-hook`。
|
|
136
|
-
6.
|
|
139
|
+
6. 按组件专项接高度,再接主题、locale、浮层和无障碍约束。
|
|
137
140
|
7. 联调冻结 API、Mock、路由和权限。
|
|
138
141
|
8. 按 `references/verification.md` 完成分层验证。
|
|
139
142
|
|
|
@@ -142,7 +145,7 @@ verification: pnpm type-check
|
|
|
142
145
|
- [ ] 已记录 Vue、YSS UI、AntDV、VXE 实际版本。
|
|
143
146
|
- [ ] 组件选型符合 `component-routing.md`,回退有证据。
|
|
144
147
|
- [ ] 新代码使用 `YFormily` 和真实存在的 `yss-hook`。
|
|
145
|
-
- [ ] YTable/YTree/Formily
|
|
148
|
+
- [ ] YTable/YEditTable/YTree/Formily 及其高度 Hook 遵循对应组件专项 skill。
|
|
146
149
|
- [ ] 主题、locale、浮层容器和微应用隔离已检查。
|
|
147
150
|
- [ ] loading/empty/error/no-access/selected 状态按影响面覆盖。
|
|
148
151
|
- [ ] 键盘、焦点、标签和颜色对比度已检查。
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
|---|---|---|---|---|
|
|
7
7
|
| 普通按钮、权限按钮 | `YButton` | AntDV Button | required | 权限、主题和统一动作语义;不得直接导入 Button |
|
|
8
8
|
| 卡片 | `YCard` | AntDV Card | required | YSS 布局与间距扩展 |
|
|
9
|
-
| 数据表格 | `YTable` | VXE Table + AntDV Pagination | specialized | 使用 `ytable-usage
|
|
10
|
-
| 编辑表格 | `YEditTable` | VXE Table | specialized | 使用 `yedit-table-usage
|
|
11
|
-
| 树 | `YTree` | AntDV Tree | specialized | 使用 `ytree-usage
|
|
9
|
+
| 数据表格 | `YTable` | VXE Table + AntDV Pagination | specialized | 使用 `ytable-usage`;远程分页与高度均由该专项和 `yss-hook` 协作 |
|
|
10
|
+
| 编辑表格 | `YEditTable` | VXE Table | specialized | 使用 `yedit-table-usage`,包括添加按钮偏移与弹层高度;不要和展示表格混用 API |
|
|
11
|
+
| 树 | `YTree` | AntDV Tree | specialized | 使用 `ytree-usage`,包括搜索区偏移、隐藏容器重算和左树右表联动 |
|
|
12
12
|
| Schema 表单 | `YFormily` | Formily + AntDV | specialized | `YFormily` 为 canonical;`YssFormily` 仅为历史兼容名;加载 `yss-formily` |
|
|
13
|
-
| 分栏布局 | `YSplitPane` | YSS layout | required |
|
|
13
|
+
| 分栏布局 | `YSplitPane` | YSS layout | required | 页面编排使用 `yss-ui-business-page-generation`;组件边界见 `specialized-components.md` |
|
|
14
14
|
| 文件导入 | `YFileImport` | Upload/业务适配 | required | 两步导入边界见 `specialized-components.md` |
|
|
15
15
|
| 条件构建 | `YConditionBuilder` | YSS domain component | required | 标准模型与校验边界见 `specialized-components.md` |
|
|
16
16
|
| 月历 | `YMonthCalendar` | YSS domain component | required | 日期、月份、高度与事件边界见 `specialized-components.md` |
|
|
@@ -27,6 +27,13 @@
|
|
|
27
27
|
|
|
28
28
|
YSS `required` wrapper 缺少必要能力时,记录组件、能力缺口、依赖版本、替代方案、主题/locale/浮层影响和验证证据。没有记录不得回退。
|
|
29
29
|
|
|
30
|
+
## 导入来源判定
|
|
31
|
+
|
|
32
|
+
1. MCP 可用时,先用 `list_components` 校正名称,再用 `get_component_docs` 确认导出包、Props、Events 和 Slots;复杂场景再查 Demo。
|
|
33
|
+
2. MCP 不可用或结果与目标工程版本不一致时,以 lockfile、当前源码可编译导出、TypeScript 类型和已通过测试的用法为准。
|
|
34
|
+
3. 已封装组件从 `@yss-ui/components` 导入,公开 Hook 和 Utils 分别从 `@yss-ui/hooks`、`@yss-ui/utils` 导入;确认未封装后才回退 `ant-design-vue`。
|
|
35
|
+
4. 禁止仅凭名称猜测 `Y*` 导出,禁止因文档暂时不可达就把猜测实现当作已验证事实。
|
|
36
|
+
|
|
30
37
|
## 更新规则
|
|
31
38
|
|
|
32
39
|
新增或变更 YSS Wrapper 时同步:本表、组件 docs、至少一个已验证 demo、三个索引、兼容矩阵和验证脚本。
|
|
@@ -31,6 +31,7 @@ description: "生成或改造完整 YSS UI CRUD、列表、表单、详情或左
|
|
|
31
31
|
- 主题 Token 与换肤:`../theme-token-usage/SKILL.md`
|
|
32
32
|
- 文件导出下载:`../file-export-download/SKILL.md`
|
|
33
33
|
- Orval 接口与错误处理:`../yss-api-integration/SKILL.md`
|
|
34
|
+
- 请求、分页、参数与异步竞态:`../yss-hook/SKILL.md`
|
|
34
35
|
|
|
35
36
|
## 文档检索顺序
|
|
36
37
|
|
|
@@ -56,6 +57,9 @@ description: "生成或改造完整 YSS UI CRUD、列表、表单、详情或左
|
|
|
56
57
|
- 删除确认默认使用 `YTable actionConfig.buttons[].isConfirm` 按钮项或 AntDV `Popconfirm` 气泡确认,禁止默认使用居中 `Modal.confirm`。
|
|
57
58
|
- 样式抽离到 `style.less`,在 SFC 中使用 `<style scoped lang="less">@import './style.less';</style>`。
|
|
58
59
|
- `index.vue` 原则上不超过 150 行;状态、API、副作用和处理方法进入 `hooks/`,列定义和静态配置进入 `constant.ts`。
|
|
60
|
+
- 页面目录默认使用 `index.vue + constant.ts + style.less + hooks/`;只有存在多个私有视图或大量独立类型时才增加 `components/` 和 `type.ts`。`index.vue` 只做 Hook 组合、视图编排和事件转发。
|
|
61
|
+
- 列表查询只维护一份 `currentParams`;查询、重置、树节点切换均回到第一页,翻页保留筛选条件,批量操作成功后清空选中态。组件 API 服从 `ytable-usage` / `ytree-usage`,请求和竞态服从 `yss-hook`。
|
|
62
|
+
- Modal/Drawer 表单的 `open/mode/currentId/formModel/submitting`、回填、提交和关闭收敛在同一业务 Hook。新增/编辑数据在打开容器前准备,容器关闭时销毁并清理;默认依赖响应式 `mode`/model,不用动态 `:key` 强制重挂载。
|
|
59
63
|
- 所有导出函数、hooks、类型和静态配置必须使用中文 JSDoc。
|
|
60
64
|
- Orval 请求必须使用真实生成导出和 DTO;禁止 `if (res?.success)` 冗余包裹,也禁止在 `else`/`catch` 重复 `message.error`。
|
|
61
65
|
- 页面、公共组件、内联样式、TS 渲染配置和 SVG 必须遵循 `theme-token-usage`;禁止硬编码品牌色及 hover/active/selected/focus 色阶,主色透明态必须由真实动态 Token 派生。
|
|
@@ -83,7 +87,7 @@ src/views/{module-name}/
|
|
|
83
87
|
1. 读取本 skill 的三个 reference,并按上述文档检索顺序核对真实 API 与导出,禁止根据旧示例猜测。
|
|
84
88
|
2. 读取 `theme-token-usage`,检查项目真实主题变量与运行时同步链路。
|
|
85
89
|
3. 若有截图或旧项目路径,先读取已批准且 digest 当前的 Visual Baseline manifest 和 `frontend_implementation_plan`,按 `case_id` 提取布局、状态、交互、响应式与控件类型验收项;缺失或摘要漂移时返回 `blocked`,不得凭目录或截图猜测。
|
|
86
|
-
4. 按需求类型加载细分 skill:列表读 `
|
|
90
|
+
4. 按需求类型加载细分 skill:列表读 `ytable-usage` 与 `yss-hook`;表单读 `yss-formily`;编辑表格读 `yedit-table-usage`;树读 `ytree-usage`;导出下载读 `file-export-download`。
|
|
87
91
|
5. 先设计 `constant.ts`、`style.less` 和 hooks;独立类型或私有视图确有需要时再增加 `type.ts`/`components/`,最后写 `index.vue` 组合视图。
|
|
88
92
|
6. 对 API 请求使用 Orval 真实生成类型和导出,在 hooks 内封装 loading、分页映射和失败后状态;错误 Toast 由 mutator 统一处理。
|
|
89
93
|
7. 交付前检查导入来源、真实组件 API、分页字段、Formily schema 层级、主题 Token、查询按钮右下角布局、表格工具栏、样式作用域、删除确认和原型对照清单。
|
|
@@ -10,25 +10,26 @@ const { tableHeight, isReady, recalculateHeight } = useTableHeight(tableAreaRef,
|
|
|
10
10
|
withPagination: true,
|
|
11
11
|
withToolbar: true,
|
|
12
12
|
withAddButton: false,
|
|
13
|
-
extraOffset: 16,
|
|
14
13
|
});
|
|
15
14
|
```
|
|
16
15
|
|
|
17
16
|
- 必须传入表格父容器 `ref`。
|
|
18
17
|
- 返回值是 `recalculateHeight`,不要使用旧的错误返回名。
|
|
19
18
|
- 可选项:`boundaryRef`、`minHeight`、`defaultHeight`、`extraOffset`、`withPagination`、`withToolbar`、`withAddButton`、`paginationHeight`、`toolbarHeight`、`addButtonHeight`。
|
|
19
|
+
- 被观察区域若会被表格内容撑开,使用更外层稳定的 `boundaryRef`,避免尺寸反馈循环;`extraOffset` 只能对应可说明的实际布局占位。
|
|
20
20
|
|
|
21
21
|
## useTreeHeight
|
|
22
22
|
|
|
23
23
|
```ts
|
|
24
24
|
const treeAreaRef = ref<HTMLDivElement>();
|
|
25
25
|
const { treeHeight, recalculateHeight } = useTreeHeight(treeAreaRef, {
|
|
26
|
-
extraOffset: YTREE_SEARCH_HEIGHT
|
|
26
|
+
extraOffset: YTREE_SEARCH_HEIGHT,
|
|
27
27
|
});
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
- 必须传入树区域父容器 `ref`。
|
|
31
31
|
- 搜索树可引入 `YTREE_SEARCH_HEIGHT`。
|
|
32
|
+
- 内置搜索已由 `YTREE_SEARCH_HEIGHT` 扣除,不得再叠加无依据的 `+16`;Tab/Drawer 可见后按需 `nextTick(recalculateHeight)`。
|
|
32
33
|
|
|
33
34
|
## useLoading
|
|
34
35
|
|
|
@@ -84,3 +84,11 @@ public interface QualityRuleWebConvertor {
|
|
|
84
84
|
- Wire forbidden fields 无法绑定。
|
|
85
85
|
- OpenAPI 3 注解、YSS Result wrapper、Validation namespace 与平台 Profile 一致。
|
|
86
86
|
- 执行项目根 `./mvnw test/package`,并保留 HTTP/serialization/exception 证据。
|
|
87
|
+
|
|
88
|
+
## 非 CRUD 适配
|
|
89
|
+
|
|
90
|
+
认证、OAuth 回调、Cookie、流式响应及协议端点可以手工实现,不强行套 CRUD metadata;仍消费批准的 wire 合同、Application seam 和平台配置。Controller 不直连 Domain Gateway,也不自行编排登录、撤销或持久化。
|
|
91
|
+
|
|
92
|
+
协议转换、Cookie/Header 处理归 Web;业务决策归 Application/Domain。异常翻译器可以依赖领域错误类型,不能据此允许 Controller 调用领域端口。MapStruct 处理机械字段映射,协议编码及显式领域工厂适配使用有测试的自定义方法。
|
|
93
|
+
|
|
94
|
+
生成器推荐 rest 布局;已登记的 adapter.web 等布局通过合同绑定识别。审查按模块、实际 Controller 类型和依赖方向进行,包名偏离不能让检查空匹配通过。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ytable-usage
|
|
3
|
-
description: "配置或修复 YSS UI YTable
|
|
3
|
+
description: "配置或修复 YSS UI YTable 的列表查询、列、分页、行操作、筛选、拖拽、插槽与自适应高度。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# YTable 使用
|
|
@@ -19,7 +19,7 @@ description: "配置或修复 YSS UI YTable 的列、分页、行操作、筛选
|
|
|
19
19
|
|
|
20
20
|
1. 当前会话可用 yss-ui MCP 时,先用 `get_component_docs` 查询 `YTable` 的 Props、Events、Slots、Types 与实例方法;需要远程分页、筛选、操作列、拖拽或工具栏时,再用 `get_demo` 获取对应官方 Demo。
|
|
21
21
|
2. MCP 工具不可用、调用失败或用 `search_docs/list_components` 校正后仍无结果时,才读取最新 `llms-full.txt`;若文档与当前项目依赖版本不一致,用当前源码和导出核验。
|
|
22
|
-
3.
|
|
22
|
+
3. 把 `currentParams`、远程数据、`loading`、分页映射、选择态、API 调用和事件处理放入 Hook;把列定义和纯配置放入 `constant.ts`。
|
|
23
23
|
4. 在模板中组合 `data/columns/loading/pagination`,并根据真实开启的工具栏和分页配置高度 Hook。
|
|
24
24
|
5. 完成后核对删除确认、远程筛选、分页字段映射和 API 错误处理边界。
|
|
25
25
|
|
|
@@ -37,6 +37,9 @@ description: "配置或修复 YSS UI YTable 的列、分页、行操作、筛选
|
|
|
37
37
|
- 远程筛选必须提供稳定 `filters`,设置 `filterMethod: () => true` 禁用本地二次过滤,并监听 `filter-change`。
|
|
38
38
|
- 自适应滚动列表绑定 `:height="tableHeight"`;`pageable`、工具栏分别对应 `withPagination: true`、`withToolbar: true`。纯短表不强制引入高度 Hook。
|
|
39
39
|
- `mutator.ts` 已对网络错误和 `success === false` 统一 `message.error` 并 reject。API Hook 不再检查 `success === false`,不在 `else/catch` 重复 `message.error`;用 `finally` 恢复 loading,让异常继续中断流程。
|
|
40
|
+
- 远程列表只维护一份 `currentParams`。查询和重置回到第一页,翻页只更新页码与页大小并保留筛选条件;刷新、导出和编辑后重载复用同一参数源。批量操作成功后清空受控选中态和组件内部选中态。
|
|
41
|
+
- 使用真实签名 `useTableHeight(tableAreaRef, options)`,结果绑定 `:height="tableHeight"`。稳定布局采用可计算高度的 flex column,表格区设置 `flex: 1; min-height: 0; overflow: hidden`,不用固定大高度或魔法偏移。
|
|
42
|
+
- `pageable`、工具栏插槽、YEditTable 添加按钮分别对应 `withPagination`、`withToolbar`、`withAddButton`;只扣除实际开启的区域。shrink-wrap 容器使用更外层稳定 `boundaryRef`,弹层或隐藏布局仅在可见后按需 `nextTick(recalculateHeight)`。
|
|
40
43
|
|
|
41
44
|
## 标准代码骨架
|
|
42
45
|
|
|
@@ -105,16 +108,19 @@ export interface ItemListApi {
|
|
|
105
108
|
export const useItemList = (api: ItemListApi) => {
|
|
106
109
|
const dataList = ref<ItemRow[]>([]);
|
|
107
110
|
const loading = ref(false);
|
|
111
|
+
const currentParams = ref({ pageIndex: 1, pageSize: 20 });
|
|
108
112
|
const pagination = ref<YTablePagination>({ current: 1, pageSize: 20, total: 0, remote: true });
|
|
109
113
|
|
|
110
114
|
/** 查询当前页;错误提示由 mutator 统一处理。 */
|
|
111
115
|
const loadList = async () => {
|
|
112
116
|
loading.value = true;
|
|
113
117
|
try {
|
|
114
|
-
|
|
118
|
+
currentParams.value = {
|
|
119
|
+
...currentParams.value,
|
|
115
120
|
pageIndex: pagination.value.current,
|
|
116
121
|
pageSize: pagination.value.pageSize,
|
|
117
|
-
}
|
|
122
|
+
};
|
|
123
|
+
const result = await api.queryPage(currentParams.value);
|
|
118
124
|
dataList.value = result.list ?? [];
|
|
119
125
|
pagination.value = { ...pagination.value, total: result.totalCount ?? 0 };
|
|
120
126
|
} finally {
|
|
@@ -134,7 +140,7 @@ export const useItemList = (api: ItemListApi) => {
|
|
|
134
140
|
await loadList();
|
|
135
141
|
};
|
|
136
142
|
|
|
137
|
-
return { dataList, loading, pagination, loadList, handlePageChange, handleDelete };
|
|
143
|
+
return { currentParams, dataList, loading, pagination, loadList, handlePageChange, handleDelete };
|
|
138
144
|
};
|
|
139
145
|
```
|
|
140
146
|
|
|
@@ -196,7 +202,7 @@ onMounted(loadList);
|
|
|
196
202
|
```less
|
|
197
203
|
/* style.less */
|
|
198
204
|
.table-area {
|
|
199
|
-
|
|
205
|
+
flex: 1;
|
|
200
206
|
min-height: 0;
|
|
201
207
|
overflow: hidden;
|
|
202
208
|
}
|
|
@@ -241,6 +247,8 @@ onMounted(loadList);
|
|
|
241
247
|
- [ ] 批量操作成功后已重置 `selectedRowKeys` 并调用 `tableRef.clearSelection()`。
|
|
242
248
|
- [ ] 未使用虚构 `request/searchParams/row-key` Props,也未把 `refresh()` 当成远程请求。
|
|
243
249
|
- [ ] 工具栏、字典翻译、操作确认与高度偏移均与实际开关一致。
|
|
250
|
+
- [ ] 查询、重置、翻页、刷新和导出复用同一份 `currentParams`;查询/重置回到第一页,批量成功后清空选中态。
|
|
251
|
+
- [ ] 高度观察容器稳定;分页/工具栏偏移没有重复扣减,隐藏态仅在必要时补算。
|
|
244
252
|
- [ ] API Hook 没有 `success === false` 分支或重复 `message.error`。
|
|
245
253
|
|
|
246
254
|
## 失败兜底策略
|
|
@@ -248,4 +256,3 @@ onMounted(loadList);
|
|
|
248
256
|
- 分页字段混乱时,在 Hook 中分离 YTable 状态和后端参数,不直接把 `pageIndex/totalCount` 绑到组件。
|
|
249
257
|
- 操作过多时使用 `displayLimit` 和更多菜单;远程刷新失效时回到业务 `loadList()`,不把实例 `refresh()` 当成接口请求。
|
|
250
258
|
- API 失败后只在 `finally` 恢复本地 loading,让 mutator 的 reject 继续中断删除后刷新等后续流程。
|
|
251
|
-
|
|
@@ -32,6 +32,7 @@ description: "配置或修复 YSS UI YTree 的字段映射、搜索、选中与
|
|
|
32
32
|
- `danger: true` 只改变危险项视觉,不会弹出确认框。删除必须放在节点附近的 `#node-suffix` 或当前选中节点操作区,用 Ant Design Vue `Popconfirm` 的 `@confirm` 调用接口;不使用居中 `Modal.confirm`。
|
|
33
33
|
- 树区域需要滚动时绑定 `:height="treeHeight"`,不默认添加 `:virtual="true"`。只有展开后可见扁平节点数 `* itemHeight > height` 时才会实际裁剪 DOM。
|
|
34
34
|
- 使用 YTree 内置搜索时,高度 Hook 通过 `extraOffset: YTREE_SEARCH_HEIGHT` 扣除 48px;不再叠加无依据的魔法数。
|
|
35
|
+
- 最外层必须有可计算高度,树区域设置 `flex: 1; min-height: 0; overflow: hidden`;Hook 挂载时 `treeAreaRef` 必须存在。Tab/Drawer 优先保持外层容器挂载,隐藏态得到的最小高度不作为最终结果,可见后按需 `nextTick(recalculateHeight)`。
|
|
35
36
|
- 左树右表优先组合 `YSplitPane + YCard + YTree + YTable`;切换节点时同步查询条件并把右表分页重置为第 1 页。
|
|
36
37
|
- 节点删除 API 的错误由 `mutator.ts` 统一提示并 reject;不在 `else/catch` 重复 `message.error`。
|
|
37
38
|
|
|
@@ -59,3 +59,25 @@ YSS 页面模块约定(YTable、YFormily、页面骨架等)走 Standards,
|
|
|
59
59
|
| `drift`、`new_impacts`、`required_skills` 与真实影响不一致 | 合同标 `stale`,回 实现合同编译器 或更早生命周期阶段;禁止在旧合同上继续编码 |
|
|
60
60
|
|
|
61
61
|
`not-applicable` 仅当影响面未命中。命中后的 mandatory 不得豁免;只允许修复,或写完整 `seam-deferred`(风险、责任人、后续 Ticket、验证计划、目标版本或发布日期)。禁止为日常 Alibaba / YSS 新增生物人豁免门禁;安全 / 公共 API 仍走既有 `TODO-HUMAN-REVIEW` 与生物人门禁。
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
## 可执行后端审查结果
|
|
65
|
+
|
|
66
|
+
后端 `work-unit.code-review` 到交付的流转由 `scripts/lib/backend-review.mjs` 检查。
|
|
67
|
+
`decision_state.review_input` 绑定 `slice_contract_ref`、`approval_ref`、跨仓时的 `work_unit_id`、`project_root`、既有候选的 `review_mode`、
|
|
68
|
+
`candidate_snapshot_ref`、`implementation_candidate_ref`、`candidate_digest`、
|
|
69
|
+
`implementation_actor_id`、`implementation_instance_id` 和 `actual_skill_impacts`(无新增影响为 `[]`)。
|
|
70
|
+
`review_result_ref` 指向唯一 `code-review` 结果;记录 `result: completed`、合同原始字节的
|
|
71
|
+
`contract_digest`、候选摘要、`reviewer` / `implementer` 的 actor_id / runtime_id / instance_id,
|
|
72
|
+
并分别记录 `axes.Standards` 和 `axes.Spec`。自审不能用不同角色名替代不同执行实例。
|
|
73
|
+
|
|
74
|
+
复用 `constraint_results`,每个适用技能至少一项包含 `axis: Standards`、`skill`、`constraint`、
|
|
75
|
+
`status`、`rule_ref`、规则文件 SHA-256 `rule_digest`、`code_ref`、`evidence_ref`、证据 SHA-256
|
|
76
|
+
`evidence_digest`。按原文定位具体规则,禁止仅写“符合规范”。无持久化影响时 Repository/MyBatis
|
|
77
|
+
可写有原因的 not-applicable;合同必需技能不得豁免。`findings` 的阻断项必须关闭;建议可绑定
|
|
78
|
+
`follow_up_ref` 进入待办。修复后重新捕获候选,重验受影响规则及依赖,并显式重绑复用证据。
|
|
79
|
+
|
|
80
|
+
工作树候选复用现有 packed candidate 工具;审查证据可排除,业务文件不可排除。已提交候选绑定
|
|
81
|
+
不可变 tree ID,并核对当前清洁 checkout。读取结构化结果不会代替 Reviewer 的实际规则判断。
|
|
82
|
+
|
|
83
|
+
`verification_results` 必须包含实际 command、executed_at、exit_code=0、candidate_digest,以及日志 evidence_ref/evidence_digest。缺少本次机器检查或日志漂移不能完成审查。
|
|
@@ -29,7 +29,7 @@ description: 指导 YFormily 新增、编辑、查看三态与插槽渲染;当
|
|
|
29
29
|
- 描述列表配置使用 `:detail-options`。默认 `responsive=true`,此时 `columns` 被忽略;响应式列数使用 `maxColumns`、`minColumns`、`minWidth`,固定列数才组合 `responsive: false` 与 `columns`。
|
|
30
30
|
- 查看态插槽命名固定为 `#detail-<path>`,字段路径中的 `.` 替换为 `-`;作用域为 `{ value, item, values }`。
|
|
31
31
|
- 编辑态插槽使用 `x-component: 'Slot'` 与 `x-component-props.name`;`value/onChange` 默认提供,仅在需要 `field` 或整表数据时配置 `params`。
|
|
32
|
-
- 运行时切换 mode
|
|
32
|
+
- 运行时切换 mode 默认由响应式 `:mode` 与已准备好的 model 驱动,不加动态 `:key` 强制重挂载。只有目标工程当前源码或可复现测试证明 mode 热切换无法正确重建上下文时,才记录证据后局部使用 key;Modal/Drawer 闭环优先通过 `destroy-on-close + v-if="open"` 隔离实例。
|
|
33
33
|
- 查看态不会发送 `update:modelValue`;回填优先在渲染前准备好 `v-model`/`initial-values`,或通过已公开的 `setValues` 更新。
|
|
34
34
|
- 只使用公开实例方法:`getValues`、`setValues`、`submit`、`setFieldState`、`toggle/expand/collapse`;禁止编造 `validate/reset/clearValidate`。
|
|
35
35
|
- 加载详情的 Orval API 错误已由 `mutator.ts` 统一 `message.error` 并 reject,业务 `else`/`catch` 禁止重复提示。
|
|
@@ -97,7 +97,6 @@ const schema: ISchema = {
|
|
|
97
97
|
|
|
98
98
|
<template>
|
|
99
99
|
<YFormily
|
|
100
|
-
:key="mode"
|
|
101
100
|
:schema="schema"
|
|
102
101
|
:initial-values="initialValues"
|
|
103
102
|
:mode="mode"
|
|
@@ -120,7 +119,7 @@ const schema: ISchema = {
|
|
|
120
119
|
|
|
121
120
|
## 交付检查清单
|
|
122
121
|
|
|
123
|
-
- [ ] mode
|
|
122
|
+
- [ ] mode 语义和默认值正确,回填在打开前完成;未无条件使用动态 `:key` 强制重挂载。
|
|
124
123
|
- [ ] 未生成 `detail-as`、旧式详情开关或虚构实例方法。
|
|
125
124
|
- [ ] `detail-options` 已区分响应式 `maxColumns` 与固定列 `columns`。
|
|
126
125
|
- [ ] 查看态插槽路径映射正确,作用域只使用 `{ value, item, values }`。
|
|
@@ -133,5 +132,5 @@ const schema: ISchema = {
|
|
|
133
132
|
|
|
134
133
|
- 查看态插槽不生效时,先按详情收集后的数据路径核对 `detail-<path>`,不要把 `FormLayout/FormGrid` 容器名拼入路径。
|
|
135
134
|
- 编辑态插槽不生效时,核对 `x-component-props.name` 与模板名;需要整表值时再加入 `params: ['$values']`。
|
|
136
|
-
-
|
|
135
|
+
- 模式切换错乱时先检查回填数据是否在打开或模式切换前准备好,再核验当前版本对响应式 mode 的行为;只有可复现证据表明必须重建时才使用 key。
|
|
137
136
|
- API 调用 reject 时只恢复 loading 或保留原数据,不重复弹出错误提示。
|
|
@@ -6,7 +6,7 @@ description: "配置或排查 Lombok 注解、构造器、Builder 和注解处
|
|
|
6
6
|
|
|
7
7
|
## YSS 阶段 7 执行结果
|
|
8
8
|
|
|
9
|
-
- 消费工程 Java
|
|
9
|
+
- 消费工程 Java 与处理器基线;Java 语法、API、处理器与测试工具消费批准的精确平台配置。MapStruct binding 进入 annotationProcessorPaths,不作为业务依赖单独引入;示例不授权升级依赖。MVC PO 的身份/敏感字段风险与 DDD 相同,不能默认全量 @Data。
|
|
10
10
|
- 消费批准后的 Slice Contract/work unit,只在允许路径内调整 POJO 样板和注解处理器配置。
|
|
11
11
|
- 受控生成必须记录对象类型、选用/排除注解、实体关系和敏感字段风险、编译/测试实际结果。
|
|
12
12
|
- 按 `yss-implementation-contract-compiler` 的统一 Execution Result 返回 changed files、证据、偏离和新增影响;`@Data` 实体风险、处理器配置缺失或越界路径返回 `violation`。
|
|
@@ -6,7 +6,7 @@ description: "实现或排查 MapStruct DTO、PO、Domain 映射及 Lombok 集
|
|
|
6
6
|
|
|
7
7
|
## YSS 阶段 7 执行结果
|
|
8
8
|
|
|
9
|
-
- Java
|
|
9
|
+
- Java、依赖与处理器版本来自工程基线,不从下面通用示例推断。Java 语法、API、处理器与测试工具均消费批准的精确平台配置;MVC 的 wire/internal 转换在 server,core/service 不依赖 client,Repository 不依赖上层 DTO。采用 Spring Bean 和构造器注入,显式映射或忽略字段;禁止通过全局 IGNORE 掩盖合同字段遗漏。
|
|
10
10
|
- 消费批准后的 Slice Contract/work unit,只为合同中的 DTO/VO/PO/Domain 转换生成 Mapper/Convertor。
|
|
11
11
|
- 受控生成必须记录 source/target、忽略字段、更新语义、Lombok processor 配置和 mapper 行为测试。
|
|
12
12
|
- 按 `yss-implementation-contract-compiler` 的统一 Execution Result 返回生成/源文件、测试和实际验证;未映射字段、反射/BeanUtils 退化或越界路径返回 `violation`。
|
|
@@ -26,3 +26,5 @@ description: "实现或排查 MapStruct DTO、PO、Domain 映射及 Lombok 集
|
|
|
26
26
|
按变更验证字段覆盖、null、更新和边界值;处理器调整需实际编译。不要把所有参考示例当作必跑清单。
|
|
27
27
|
|
|
28
28
|
查第三方行为时使用 `yss-research`,来源为 [MapStruct 官方文档](https://mapstruct.org/documentation/stable/reference/html/);不假定某个 MCP 工具已安装。
|
|
29
|
+
|
|
30
|
+
聚合重建使用领域工厂或有测试的显式映射方法;MapStruct 只承担机械映射,不得为处理器增加破坏不变量的 setter。该方式不豁免字段覆盖、null 语义和往返一致性验证。
|
|
@@ -36,6 +36,7 @@ description: "配置或修复 YSS UI YEditTable 的行内编辑、候选联动
|
|
|
36
36
|
- 删除使用 `type: 'action' + actionConfig.buttons[].isConfirm`;不默认使用 `Modal.confirm`。
|
|
37
37
|
- `validate()` 真实返回 `Promise<{ valid: boolean; errorMsg: Map<string, string> }>`。组件 ref 未就绪时不得误判为校验成功。
|
|
38
38
|
- 弹窗/抽屉内使用添加按钮时,高度 Hook 配置 `withAddButton: true`;如果同时分页或开启工具栏,一并开启对应偏移。
|
|
39
|
+
- 自适应高度使用 `useTableHeight(tableAreaRef, options)` 并绑定 `:height="tableHeight"`;直接父容器必须可计算且设置 `min-height: 0`。若表格内容会反向撑开观察容器,改用稳定 `boundaryRef`;弹层展开后高度仍不准时才调用 `nextTick(recalculateHeight)`。
|
|
39
40
|
- API 失败由 `mutator.ts` 统一提示并 reject。Hook 中不写 `success === false` 分支,不在 `else/catch` 重复 `message.error`;清理状态放在 `finally`。
|
|
40
41
|
|
|
41
42
|
## 标准代码骨架
|
|
@@ -218,6 +219,7 @@ const textFilterColumn: YEditTableColumn = {
|
|
|
218
219
|
- [ ] 查看态同时禁用编辑、隐藏添加按钮和移除操作列。
|
|
219
220
|
- [ ] `validate()` 按 `{ valid, errorMsg }` 处理,组件 ref 未就绪时不提交。
|
|
220
221
|
- [ ] API Hook 没有重复 `message.error`,前端临时 key 不传给后端。
|
|
222
|
+
- [ ] `withAddButton/withPagination/withToolbar` 与实际开关一致,观察容器稳定且没有双滚动条。
|
|
221
223
|
|
|
222
224
|
## 失败兜底策略
|
|
223
225
|
|