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
package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs
CHANGED
|
@@ -8,33 +8,15 @@ import { fileURLToPath } from "node:url";
|
|
|
8
8
|
|
|
9
9
|
import { run as runScaffoldVerification } from "./run_scaffold_verification.mjs";
|
|
10
10
|
import { assertArchitectureAgreement } from "../../../../scripts/lib/backend-architecture.mjs";
|
|
11
|
-
import {
|
|
11
|
+
import { inspectSliceContract } from "../../../../scripts/lib/slice-execution-preflight.mjs";
|
|
12
|
+
import { selectSliceWorkUnit } from "../../../../scripts/lib/slice-contract.mjs";
|
|
13
|
+
import { verifyFirstSliceTests } from "../../../../scripts/lib/first-slice-tests.mjs";
|
|
14
|
+
import { inspectFirstSliceArtifacts } from "../../../../scripts/lib/first-slice-artifacts.mjs";
|
|
12
15
|
|
|
13
16
|
const SCRIPT_DIR = path.dirname(fileURLToPath(import.meta.url));
|
|
14
17
|
const REPOSITORY_ROOT = path.resolve(SCRIPT_DIR, "../../../..");
|
|
15
18
|
const REQUIRED_SKILLS = ["yss-domain", "yss-application", "yss-repository", "yss-mybatis", "yss-web-controller", "yss-dto", "yss-exception", "yss-validation", "mapstruct", "lombok", "alibaba-java-code-style"];
|
|
16
19
|
const REQUIRED_LAYERS = ["domain", "application", "infrastructure", "web"];
|
|
17
|
-
const ARTIFACT_CHECKS = [
|
|
18
|
-
["domain-model", /-domain\/src\/main\/java\/.+\/domain\/.+\/model\/.+\.java$/],
|
|
19
|
-
["domain-gateway", /-domain\/src\/main\/java\/.+\/domain\/.+\/gateway\/.+Gateway\.java$/],
|
|
20
|
-
["domain-behavior-test", /-domain\/src\/test\/java\/.+(?:Test|Tests)\.java$/],
|
|
21
|
-
["application-command-or-query", /-application\/src\/main\/java\/.+\/application\/(?:command|query)\/.+\.java$/],
|
|
22
|
-
["application-result", /-application\/src\/main\/java\/.+\/application\/result\/.+Result\.java$/],
|
|
23
|
-
["application-service", /-application\/src\/main\/java\/.+\/application\/service\/.+Service\.java$/],
|
|
24
|
-
["application-service-implementation", /-application\/src\/main\/java\/.+\/application\/service\/impl\/.+ServiceImpl\.java$/],
|
|
25
|
-
["application-behavior-test", /-application\/src\/test\/java\/.+(?:Test|Tests)\.java$/],
|
|
26
|
-
["infrastructure-po", /-infrastructure\/src\/main\/java\/.+\/infrastructure\/persistence\/po\/.+PO\.java$/],
|
|
27
|
-
["infrastructure-repository", /-infrastructure\/src\/main\/java\/.+\/infrastructure\/persistence\/repository\/.+Repository\.java$/],
|
|
28
|
-
["infrastructure-convertor", /-infrastructure\/src\/main\/java\/.+\/infrastructure\/persistence\/convertor\/.+Convertor\.java$/],
|
|
29
|
-
["infrastructure-gateway-implementation", /-infrastructure\/src\/main\/java\/.+\/infrastructure\/persistence\/gateway\/.+GatewayImpl\.java$/],
|
|
30
|
-
["infrastructure-query-adapter", /-infrastructure\/src\/main\/java\/.+\/infrastructure\/query\/adapter\/.+QueryAdapter\.java$/],
|
|
31
|
-
["infrastructure-integration-test", /-infrastructure\/src\/test\/java\/.+(?:Test|Tests)\.java$/],
|
|
32
|
-
["web-controller", /-adapter\/.+-web\/src\/main\/java\/.+\/rest\/.+Controller\.java$/],
|
|
33
|
-
["web-convertor", /-adapter\/.+-web\/src\/main\/java\/.+\/rest\/convertor\/.+WebConvertor\.java$/],
|
|
34
|
-
["web-request", /-adapter\/.+-web\/src\/main\/java\/.+\/rest\/dto\/request\/.+Request\.java$/],
|
|
35
|
-
["web-response", /-adapter\/.+-web\/src\/main\/java\/.+\/rest\/dto\/response\/.+Response\.java$/],
|
|
36
|
-
["web-contract-test", /-adapter\/.+-web\/src\/test\/java\/.+(?:Test|Tests)\.java$/]
|
|
37
|
-
];
|
|
38
20
|
|
|
39
21
|
const isoNow = () => new Date().toISOString();
|
|
40
22
|
const sha256 = (content) => createHash("sha256").update(content).digest("hex");
|
|
@@ -62,60 +44,7 @@ async function writeJsonAtomic(target, value) {
|
|
|
62
44
|
await writeFile(temporary, `${JSON.stringify(value, null, 2)}\n`, "utf8");
|
|
63
45
|
await rename(temporary, target);
|
|
64
46
|
}
|
|
65
|
-
function
|
|
66
|
-
const reasons = [];
|
|
67
|
-
if (contract.schema_version !== 2) reasons.push("slice-contract-schema");
|
|
68
|
-
if (contract.status !== "approved") reasons.push("slice-contract-not-approved");
|
|
69
|
-
for (const field of ["contract_id", "contract_version", "slice_id"]) if (contract[field] === undefined || contract[field] === null || contract[field] === "") reasons.push(`slice-contract-${field}-missing`);
|
|
70
|
-
if (contract.readiness?.blockers?.length) reasons.push("slice-contract-has-blockers");
|
|
71
|
-
if (contract.readiness?.stale_inputs?.length) reasons.push("slice-contract-has-stale-inputs");
|
|
72
|
-
const actualSkills = new Set([...(contract.common?.required_skills ?? []), ...(contract.backend?.required_skills ?? [])]);
|
|
73
|
-
for (const skill of requiredSkills) if (!actualSkills.has(skill)) reasons.push(`required-skill-missing:${skill}`);
|
|
74
|
-
const actualLayers = new Set(contract.backend?.affected_layers ?? []);
|
|
75
|
-
for (const layer of requiredLayers) if (!actualLayers.has(layer)) reasons.push(`required-layer-missing:${layer}`);
|
|
76
|
-
if (!Array.isArray(contract.work_units) || !contract.work_units.length) reasons.push("slice-contract-work-units-missing");
|
|
77
|
-
else for (const [index, unit] of contract.work_units.entries()) {
|
|
78
|
-
const id = unit.id || `index-${index}`;
|
|
79
|
-
if (unit.contract_id !== contract.contract_id) reasons.push(`work-unit-contract-id-mismatch:${id}`);
|
|
80
|
-
if (unit.contract_version !== contract.contract_version) reasons.push(`work-unit-contract-version-mismatch:${id}`);
|
|
81
|
-
if (!unit.work_unit?.primary_skill) reasons.push(`work-unit-primary-skill-missing:${id}`);
|
|
82
|
-
}
|
|
83
|
-
return reasons;
|
|
84
|
-
}
|
|
85
|
-
async function downstreamDrift(manifest, requiredSkills = REQUIRED_SKILLS) {
|
|
86
|
-
const drift = [];
|
|
87
|
-
const recordedSkills = manifest.readiness?.downstream_skills ?? {};
|
|
88
|
-
for (const skill of requiredSkills) {
|
|
89
|
-
const expected = recordedSkills[skill];
|
|
90
|
-
if (typeof expected !== "string" || !/^[a-f0-9]{64}$/.test(expected)) {
|
|
91
|
-
drift.push(`${skill}:digest-missing`);
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
const root = path.join(REPOSITORY_ROOT, ".agents", "skills", skill);
|
|
95
|
-
if (!await isFile(path.join(root, "SKILL.md"))) drift.push(`${skill}:unavailable`);
|
|
96
|
-
else if (await treeDigest(root) !== expected) drift.push(`${skill}:digest-mismatch`);
|
|
97
|
-
}
|
|
98
|
-
const contracts = manifest.readiness?.contracts ?? {};
|
|
99
|
-
const contractFiles = {
|
|
100
|
-
compiler_contract: path.join(REPOSITORY_ROOT, ".agents", "skills", "yss-implementation-contract-compiler", "references", "compiler-contract.yaml")
|
|
101
|
-
};
|
|
102
|
-
if (manifest.architecture_family === "layered-mvc") {
|
|
103
|
-
contractFiles.architecture_profiles = path.join(REPOSITORY_ROOT, "docs/agents/backend-architecture-profiles.md");
|
|
104
|
-
} else if (contracts.engineering_baseline) contractFiles.engineering_baseline = path.join(REPOSITORY_ROOT, ".agents", "skills", "yss-ddd-scaffold-generator", "references", "engineering-baseline.md");
|
|
105
|
-
else contractFiles.scaffold_parent = path.join(REPOSITORY_ROOT, ".agents", "skills", "yss-ddd-scaffold-generator", "references", "yss-backend-scaffold-parent", "SKILL.md");
|
|
106
|
-
for (const [name, target] of Object.entries(contractFiles)) {
|
|
107
|
-
const expected = contracts[name];
|
|
108
|
-
if (typeof expected !== "string" || !/^[a-f0-9]{64}$/.test(expected)) {
|
|
109
|
-
drift.push(`${name}:digest-missing`);
|
|
110
|
-
continue;
|
|
111
|
-
}
|
|
112
|
-
if (!await isFile(target)) drift.push(`${name}:unavailable`);
|
|
113
|
-
else if (sha256(await readFile(target)) !== expected) drift.push(`${name}:digest-mismatch`);
|
|
114
|
-
}
|
|
115
|
-
return drift;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
export async function runFirstSliceVerification(projectRoot, evidenceDir, sliceContractFile, environment = process.env) {
|
|
47
|
+
export async function runFirstSliceVerification(projectRoot, evidenceDir, sliceContractFile, environment = process.env, options = {}) {
|
|
119
48
|
projectRoot = path.resolve(projectRoot);
|
|
120
49
|
evidenceDir = path.resolve(evidenceDir);
|
|
121
50
|
sliceContractFile = path.resolve(sliceContractFile);
|
|
@@ -124,20 +53,33 @@ export async function runFirstSliceVerification(projectRoot, evidenceDir, sliceC
|
|
|
124
53
|
if (!await isFile(manifestPath)) throw new Error(`missing scaffold manifest: ${manifestPath}`);
|
|
125
54
|
if (!await isFile(sliceContractFile)) throw new Error(`missing Slice Implementation Contract: ${sliceContractFile}`);
|
|
126
55
|
const manifest = JSON.parse(await readFile(manifestPath, "utf8"));
|
|
127
|
-
const
|
|
56
|
+
const contractRoot = path.resolve(options.contractRoot || projectRoot);
|
|
57
|
+
let contract, preflight;
|
|
58
|
+
try {
|
|
59
|
+
const loaded = inspectSliceContract(path.relative(contractRoot, sliceContractFile), {
|
|
60
|
+
root: contractRoot, approval_ref: options.approvalRef, work_unit_id: options.workUnit
|
|
61
|
+
});
|
|
62
|
+
preflight = loaded.report;
|
|
63
|
+
contract = selectSliceWorkUnit(loaded.contract, options.workUnit);
|
|
64
|
+
} catch (error) {
|
|
65
|
+
preflight = { execution_allowed: false, blockers: [error.message] };
|
|
66
|
+
contract = {};
|
|
67
|
+
}
|
|
128
68
|
if (manifest.platform_verification === "candidate") throw new Error("backend-platform: candidate scaffold cannot become first-slice-verified");
|
|
129
|
-
const
|
|
130
|
-
|
|
69
|
+
const contractFailures = [...preflight.blockers];
|
|
70
|
+
if (!preflight.execution_allowed) contractFailures.push("slice-execution-not-authorized");
|
|
71
|
+
if (!(contract.common?.project_roots || []).some(ref => path.resolve(contractRoot, ref) === projectRoot)) contractFailures.push("slice-project-root-mismatch");
|
|
131
72
|
try {
|
|
132
73
|
const identity = contract.architecture_identity ?? contract.resolution?.architecture_identity;
|
|
133
|
-
assertArchitectureAgreement(identity, { manifest });
|
|
74
|
+
if (identity?.source_kind !== "existing-registration") assertArchitectureAgreement(identity, { manifest });
|
|
134
75
|
for (const unit of contract.work_units ?? []) assertArchitectureAgreement(identity, { work_unit: unit.architecture_identity });
|
|
135
76
|
} catch (error) { contractFailures.push(`architecture-identity:${error.message}`); }
|
|
136
77
|
if (![2, 3, 4].includes(manifest.schema_version) || manifest.completion_level !== "empty-scaffold-verified") contractFailures.push("scaffold-not-empty-scaffold-verified");
|
|
137
78
|
if (manifest.schema_version === 3 && manifest.legacy_reconciliation?.status !== "approved") contractFailures.push("legacy-scaffold-reconciliation-required");
|
|
138
|
-
const
|
|
139
|
-
const missingArtifacts =
|
|
140
|
-
|
|
79
|
+
const artifacts = inspectFirstSliceArtifacts(contract, projectRoot);
|
|
80
|
+
const missingArtifacts = artifacts.failures;
|
|
81
|
+
// Generation-time Skill hashes are provenance. Current authority was checked by execution preflight.
|
|
82
|
+
const skillDrift = [];
|
|
141
83
|
if (contractFailures.length || missingArtifacts.length || skillDrift.length) {
|
|
142
84
|
const report = { verification_mode: "first-slice", project_root: projectRoot, slice_contract_ref: sliceContractFile, scaffold_manifest_ref: manifestPath, generated_at: isoNow(), status: "failed", completion_level: manifest.completion_level, contract_failures: contractFailures, missing_artifacts: missingArtifacts, downstream_skill_drift: skillDrift, commands: [] };
|
|
143
85
|
await writeJsonAtomic(reportPath, report);
|
|
@@ -145,9 +87,15 @@ export async function runFirstSliceVerification(projectRoot, evidenceDir, sliceC
|
|
|
145
87
|
}
|
|
146
88
|
|
|
147
89
|
const mavenEvidence = path.join(evidenceDir, "maven");
|
|
148
|
-
const
|
|
149
|
-
const
|
|
150
|
-
const
|
|
90
|
+
const startedAt = Date.now();
|
|
91
|
+
const wrapper = await runScaffoldVerification(projectRoot, mavenEvidence, environment, { firstSlice: true, systemProperties: artifacts.properties });
|
|
92
|
+
const mvc = manifest.architecture_family === "layered-mvc";
|
|
93
|
+
const tests = wrapper.status === "passed" ? verifyFirstSliceTests(contract, projectRoot, startedAt, {
|
|
94
|
+
module: `${manifest.project_name}-${mvc ? "server" : "bootstrap"}`,
|
|
95
|
+
type: `${manifest.base_package}.${mvc ? "architecture.LayeredMvcArchitectureTest" : "ArchitectureRulesTest"}`
|
|
96
|
+
}) : { status: "not-executed", failures: [], evidence: [] };
|
|
97
|
+
const passed = wrapper.status === "passed" && tests.status === "passed";
|
|
98
|
+
const report = { verification_mode: "first-slice", project_root: projectRoot, slice_contract_ref: sliceContractFile, scaffold_manifest_ref: manifestPath, generated_at: isoNow(), status: passed ? "passed" : "failed", test_execution: tests, failure_category: wrapper.failure_category || (tests.status === "failed" ? "first-slice-tests" : null), completion_level: passed ? "first-slice-verified" : manifest.completion_level, contract_failures: [], missing_artifacts: [], downstream_skill_drift: [], commands: wrapper.commands };
|
|
151
99
|
await writeJsonAtomic(reportPath, report);
|
|
152
100
|
if (passed) {
|
|
153
101
|
manifest.completion_level = "first-slice-verified";
|
|
@@ -163,7 +111,7 @@ function parseArgs(argv) {
|
|
|
163
111
|
const result = {};
|
|
164
112
|
for (let index = 0; index < argv.length; index += 2) {
|
|
165
113
|
const flag = argv[index], value = argv[index + 1];
|
|
166
|
-
if (!["--project-root", "--evidence-dir", "--slice-contract-file"].includes(flag) || !value) throw new Error("usage: run_first_slice_verification.mjs --project-root DIR --evidence-dir DIR --slice-contract-file FILE");
|
|
114
|
+
if (!["--project-root", "--evidence-dir", "--slice-contract-file", "--contract-root", "--approval-ref", "--work-unit"].includes(flag) || !value) throw new Error("usage: run_first_slice_verification.mjs --project-root DIR --evidence-dir DIR --slice-contract-file FILE");
|
|
167
115
|
result[flag.slice(2).replaceAll(/-([a-z])/g, (_, letter) => letter.toUpperCase())] = value;
|
|
168
116
|
}
|
|
169
117
|
if (!result.projectRoot || !result.evidenceDir || !result.sliceContractFile) throw new Error("project root, evidence dir, and slice contract file are required");
|
|
@@ -173,7 +121,7 @@ function parseArgs(argv) {
|
|
|
173
121
|
async function main() {
|
|
174
122
|
try {
|
|
175
123
|
const args = parseArgs(process.argv.slice(2));
|
|
176
|
-
const report = await runFirstSliceVerification(args.projectRoot, args.evidenceDir, args.sliceContractFile);
|
|
124
|
+
const report = await runFirstSliceVerification(args.projectRoot, args.evidenceDir, args.sliceContractFile, process.env, args);
|
|
177
125
|
process.stdout.write(`${report.status}: ${path.join(path.resolve(args.evidenceDir), "first-slice-verification.json")}\n`);
|
|
178
126
|
return report.status === "passed" ? 0 : 1;
|
|
179
127
|
} catch (error) {
|
package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs
CHANGED
|
@@ -62,7 +62,7 @@ function validateManifest(manifest) {
|
|
|
62
62
|
if (manifest.schema_version === 4 ? manifest.current_version !== true : manifest.current_version !== manifest.contract_version) throw new Error("脚手架生成元数据清单不是当前合同版本");
|
|
63
63
|
if (JSON.stringify(manifest.verification_commands) !== JSON.stringify(COMMANDS)) throw new Error("脚手架生成元数据清单验证命令不符合固定合同");
|
|
64
64
|
}
|
|
65
|
-
export async function run(projectRoot, evidenceDir, environment = process.env, { timeoutMs = 0, signal, platformOptions = {}, firstSlice = false } = {}) {
|
|
65
|
+
export async function run(projectRoot, evidenceDir, environment = process.env, { timeoutMs = 0, signal, platformOptions = {}, firstSlice = false, systemProperties = {} } = {}) {
|
|
66
66
|
const wrapper = path.join(projectRoot, "mvnw"), manifestPath = path.join(projectRoot, ".yss", "scaffold-generation.json");
|
|
67
67
|
if (!await isFile(wrapper)) throw new Error(`项目根目录缺少 Maven wrapper: ${wrapper}`);
|
|
68
68
|
if (!await isFile(manifestPath)) throw new Error(`项目根目录缺少脚手架生成元数据清单: ${manifestPath}`);
|
|
@@ -114,13 +114,14 @@ export async function run(projectRoot, evidenceDir, environment = process.env, {
|
|
|
114
114
|
const stderrPath = path.join(evidenceDir, `mvnw-${phase}.stderr.log`);
|
|
115
115
|
const startedAt = isoNow();
|
|
116
116
|
const started = process.hrtime.bigint();
|
|
117
|
-
const
|
|
117
|
+
const args = [phase, ...Object.entries(systemProperties).map(([key, value]) => `-D${key}=${value}`)];
|
|
118
|
+
const execution = await runCommand(wrapper, args, { cwd: projectRoot, env: environment, timeoutMs, signal, stdoutFile: stdoutPath, stderrFile: stderrPath, secrets: [environment.MAVEN_REPO_USERNAME, environment.MAVEN_REPO_PASSWORD], progress: true });
|
|
118
119
|
const outcome = { ...execution, exitCode: execution.status };
|
|
119
120
|
const durationMs = Number(process.hrtime.bigint() - started) / 1e6;
|
|
120
121
|
await writeText(stdoutPath, redactSecrets(outcome.stdout, environment));
|
|
121
122
|
await writeText(stderrPath, redactSecrets(outcome.stderr, environment));
|
|
122
123
|
commands.push({
|
|
123
|
-
command: `./mvnw ${
|
|
124
|
+
command: `./mvnw ${args.join(" ")}`,
|
|
124
125
|
phase,
|
|
125
126
|
exit_code: outcome.exitCode,
|
|
126
127
|
failure_category: outcome.termination || classifyFailure(phase, outcome),
|
|
@@ -26,7 +26,7 @@ description: Use when YSS 产品设计系统与 Ant Design 企业级 UI 风格
|
|
|
26
26
|
2. 读取已有资产:先读根 `DESIGN.md`,再读 `docs/design/design.md` 和 Token 派生快照,最后按任务读取相关 Spec、交互说明、状态矩阵、OpenAPI Draft、现有页面代码。
|
|
27
27
|
3. 按设计系统基线约束输出或修改产物:颜色、排版、间距、圆角、动效、组件、状态、响应式。
|
|
28
28
|
4. 若是产品设计阶段,先使用 `yss-prototype-stage`;规范直出由 YSS HTML adapter 执行;存在已选视觉稿时条件使用 `product-design:index`,其他 Agent 交付等价证据。
|
|
29
|
-
5. 若是前端实现阶段,配合 `yss-ui`、`yss-ui-business-page-generation`、`
|
|
29
|
+
5. 若是前端实现阶段,配合 `yss-ui`、`yss-ui-business-page-generation`、`yss-formily` 及实际命中的组件专项,但本技能负责风格与体验一致性门禁。
|
|
30
30
|
6. 若发现视觉 Token 或组件变体不足,先更新根 `DESIGN.md` 并重新生成投影;只有治理、流程或验收说明不足时才更新 `docs/design/design.md`。
|
|
31
31
|
|
|
32
32
|
## 核心基线
|
|
@@ -89,7 +89,7 @@ description: Use when YSS 产品设计系统与 Ant Design 企业级 UI 风格
|
|
|
89
89
|
| 低保真线框或流程图 | 语义草图或 HTML;设计工具按需使用 |
|
|
90
90
|
| 前端页面实现 | `yss-ui` / `yss-ui-business-page-generation` |
|
|
91
91
|
| 表单 schema | `yss-formily` |
|
|
92
|
-
| YTable / YTree / 高度自适应 | `ytable-usage` / `
|
|
92
|
+
| YTable / YEditTable / YTree / 高度自适应 | `ytable-usage` / `yedit-table-usage` / `ytree-usage` |
|
|
93
93
|
| 原型交接前的六轴 QA | 规范直出由 YSS adapter 按 design-contract 验收;独立视觉稿才条件使用 design-qa 比对,项目 Token 优先 |
|
|
94
94
|
| 原型渲染适配 | `yss-prototype-stage/references/product-design-adapter.md`;H1/H2 统一 HTML 交付、分别验证视觉与可操作流程;不得调用 `yss-ui` |
|
|
95
95
|
| API 契约 / 接入 | `yss-openapi-governance` / `yss-api-integration` |
|
|
@@ -62,7 +62,7 @@ public interface QualityTemplateGateway {
|
|
|
62
62
|
- `*VO`、`PageResult`、Repository PO。
|
|
63
63
|
- MyBatis、Spring MVC、Jackson、Swagger 类型。
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
展示分页、列表和投影查询由 Application Query Port 定义,Infrastructure 实现。
|
|
66
66
|
|
|
67
67
|
## 5. Domain Error
|
|
68
68
|
|
|
@@ -99,3 +99,10 @@ Web Exception Translator 再将它映射为批准的状态码、错误码和消
|
|
|
99
99
|
- 返回 YSS Skill Execution Result,包含 Domain 文件、行为测试、ArchUnit 结果及实际 `./mvnw ...` 证据。
|
|
100
100
|
- 新聚合、不变量、状态机或跨上下文影响进入 `new_impacts` 并暂停。
|
|
101
101
|
- 检测到旧架构时返回 `unsupported`;如需现代化,退出 scaffold 工作流并单独立项评估。
|
|
102
|
+
|
|
103
|
+
## 聚合创建与重建
|
|
104
|
+
|
|
105
|
+
- 创建入口执行当前创建规则;持久化重建入口恢复已批准状态并校验结构不变量,不重复发送创建事件、生成身份或执行外部调用。两者不得通过公开任意 setter 混为一体。
|
|
106
|
+
- 值对象按值相等;聚合按稳定身份相等。集合对外只读,修改经业务方法;Java 8 使用普通类与防御性复制,不从示例推导 record 等高版本语法。
|
|
107
|
+
- 领域错误携带稳定标识与参数;公开消息和 HTTP 状态由 Web 翻译。测试通过公开行为覆盖非法状态、重复动作和重建后语义一致性。
|
|
108
|
+
- 为业务决策加载一个或一组聚合仍可使用 Domain Gateway;展示列表、分页、排序、统计和投影走 Application Query Port。返回 List 本身不是违规,须按调用目的判定。
|
|
@@ -18,10 +18,10 @@ description: 路由 YSS UI 业务页面中的 YFormily 场景;当查询、编
|
|
|
18
18
|
| 字段显隐、值联动、异步 effects、跨字段副作用 | `formily-linkage-effects` |
|
|
19
19
|
| 新增、编辑、查看模式,详情插槽或 disabled 规则 | `formily-mode-slot-detail` |
|
|
20
20
|
| 分步录入、跨步骤校验、步骤状态 | `formily-step-flow` |
|
|
21
|
-
| Modal / Drawer 的打开、回填、保存、关闭和回退 | `page-
|
|
21
|
+
| Modal / Drawer 的打开、回填、保存、关闭和回退 | `yss-ui-business-page-generation` 负责页面容器编排,并加载 `formily-foundation` 与实际命中的模式/联动专项 |
|
|
22
22
|
| 从自然语言、截图或 Figma 生成 schema | `yss-formily-schema-generator` |
|
|
23
23
|
|
|
24
|
-
一个任务可以同时加载多个专项 Skill
|
|
24
|
+
一个任务可以同时加载多个专项 Skill。页面容器生命周期不是本技能的固定依赖;仅当任务是完整业务页面或弹层闭环时加载 `yss-ui-business-page-generation`。
|
|
25
25
|
|
|
26
26
|
## 边界
|
|
27
27
|
|
|
@@ -71,7 +71,7 @@ packages/package.json
|
|
|
71
71
|
- 不携带 Data Quality 业务页面、默认管理员、生产接口、私网 Postman 同步、部署凭证或残缺 JSP 命令;当前支持 Qiankun 与 standalone,JSP 不在可用基线内。
|
|
72
72
|
- 不得把 `apps/frontend/` 容器根登记为项目根;Harness 内每个前端项目必须有独立的 `apps/frontend/<project>/` 路径。
|
|
73
73
|
- 不把模板示例页面当作业务功能交付。
|
|
74
|
-
- 生成后仍需使用 `yss-ui-business-page-generation`、`
|
|
74
|
+
- 生成后仍需使用 `yss-ui`、`yss-ui-business-page-generation`、`yss-api-integration` 以及实际命中的表格、树、Formily 等专项 skill 实现业务页面。
|
|
75
75
|
|
|
76
76
|
## Output
|
|
77
77
|
|
package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Data Quality v1 通用骨架:Vue 3 / Ant Design Vue 4 / YSS UI,默认浅色、14px 正文、32px 控件。`packages/` 是应用根。YSS 按需注册,新增页面再按实现合同引入表格或表单组件。骨架不含业务页面、用户权限、生产 API 地址或部署凭证。
|
|
4
4
|
|
|
5
|
-
使用 Node >=22.12、pnpm
|
|
5
|
+
使用 Node >=22.12、pnpm 12.4.2、TypeScript5.9.3;在用户级 npm 配置中设置企业 @yss-ui registry 和认证,然后运行 `pnpm install --frozen-lockfile`。检查使用 `pnpm lint:check`、`pnpm type-check`、`pnpm build` 和 `pnpm build:standalone`。
|
|
6
6
|
|
|
7
7
|
`pnpm dev` 独立预览;Qiankun 注册名为 `__MICROAPP_NAME__`、默认激活路由 `__BASE_ROUTE__`,门户传入 `container` / `routerBase` / `bridgeVersion: 1` / `themeConfig.mode`。资源部署路径由 `VITE_PUBLIC_BASE` 明确设置,不能从路由猜测。复制 `packages/.env.example` 到 `.env.local` 配置本地代理。
|
|
8
8
|
|
package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"name": "__APP_NAME__",
|
|
3
3
|
"private": true,
|
|
4
4
|
"type": "module",
|
|
5
|
-
"packageManager": "pnpm@
|
|
5
|
+
"packageManager": "pnpm@12.4.2",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=22.12.0",
|
|
8
|
-
"pnpm": ">=
|
|
8
|
+
"pnpm": ">=12.4.2 <13"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
11
|
"dev": "pnpm -C packages dev",
|
package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml
CHANGED
|
@@ -1,3 +1,161 @@
|
|
|
1
|
+
---
|
|
2
|
+
lockfileVersion: '9.0'
|
|
3
|
+
|
|
4
|
+
importers:
|
|
5
|
+
|
|
6
|
+
.:
|
|
7
|
+
configDependencies: {}
|
|
8
|
+
packageManagerDependencies:
|
|
9
|
+
pnpm:
|
|
10
|
+
specifier: 12.4.2
|
|
11
|
+
version: 12.4.2
|
|
12
|
+
|
|
13
|
+
packages:
|
|
14
|
+
|
|
15
|
+
'@pnpm/exe.android-arm64@12.4.2':
|
|
16
|
+
resolution: {integrity: sha512-E255MbcQ0V1577M2BV0ajWuP7KmTPYA0jqZnk3rK6Lq3kTvZWulMMb7iqRmnLsQbyWTkMEB2CfyM70loVDA8xg==}
|
|
17
|
+
cpu: [arm64]
|
|
18
|
+
os: [android]
|
|
19
|
+
|
|
20
|
+
'@pnpm/exe.android-x64@12.4.2':
|
|
21
|
+
resolution: {integrity: sha512-J1pSeCUwuKxMG70ZzpWn8JzElxiEa8NN/3N0SlZRtU2xbztChaJCKF3HaBNIj9yPfeofWzJo/lwNvDDjraQuZw==}
|
|
22
|
+
cpu: [x64]
|
|
23
|
+
os: [android]
|
|
24
|
+
|
|
25
|
+
'@pnpm/exe.darwin-arm64@12.4.2':
|
|
26
|
+
resolution: {integrity: sha512-A0WDo8iErfZBXgrLseQxw8i8Y9ctUpOEl/Uu+cubnTzpD8tT9ykIB548L8YTM2WD4OS+ZOHSxy8aGZcvKq8PaQ==}
|
|
27
|
+
cpu: [arm64]
|
|
28
|
+
os: [darwin]
|
|
29
|
+
|
|
30
|
+
'@pnpm/exe.darwin-x64@12.4.2':
|
|
31
|
+
resolution: {integrity: sha512-MSgJdovBWHcb5DEOvfPH9yNi/T5O1Xa4ess+E1ESGo/5yuty7S4JoiIjami+fsNXfnoQMlwsMUqYU4zAvBcNCw==}
|
|
32
|
+
cpu: [x64]
|
|
33
|
+
os: [darwin]
|
|
34
|
+
|
|
35
|
+
'@pnpm/exe.freebsd-x64@12.4.2':
|
|
36
|
+
resolution: {integrity: sha512-h2YumlQSNvgbRPv+RXwABohX65f9bOBZn+jMIt7bFDISZPCzQ+Nvpt6Awbp4ip5PwQgYxbu5iREJ1fHE39Fm8A==}
|
|
37
|
+
cpu: [x64]
|
|
38
|
+
os: [freebsd]
|
|
39
|
+
|
|
40
|
+
'@pnpm/exe.linux-arm64-musl@12.4.2':
|
|
41
|
+
resolution: {integrity: sha512-LwSEtSEDTv6S51YLs3YvSkPyun/QmfMic1UGICUkPWFu6ByP43RdMlkKvmVkfGhAYCpnxO057vrmyJqtfZrPCA==}
|
|
42
|
+
cpu: [arm64]
|
|
43
|
+
os: [linux]
|
|
44
|
+
libc: [musl]
|
|
45
|
+
|
|
46
|
+
'@pnpm/exe.linux-arm64@12.4.2':
|
|
47
|
+
resolution: {integrity: sha512-2dSiDXyhx+RTHsewxex8f/jVjqQXWJ2oow4kCVHEWdZKeBpgMxvZ6fHkTAUBJXgqhbKIDHvuNlZBP7gJfUWL5A==}
|
|
48
|
+
cpu: [arm64]
|
|
49
|
+
os: [linux]
|
|
50
|
+
libc: [glibc]
|
|
51
|
+
|
|
52
|
+
'@pnpm/exe.linux-ppc64@12.4.2':
|
|
53
|
+
resolution: {integrity: sha512-8Itc+jQk+MTz04LS9D1RcH+VctAWmzM4l1cJQ+Sx7pAJNo7EKHdRMbC0Tok1jyQ7eEHNJZD5EleYneZqWfZM+g==}
|
|
54
|
+
cpu: [ppc64]
|
|
55
|
+
os: [linux]
|
|
56
|
+
libc: [glibc]
|
|
57
|
+
|
|
58
|
+
'@pnpm/exe.linux-riscv64@12.4.2':
|
|
59
|
+
resolution: {integrity: sha512-hleOeqhTVpH+z9RVMGnxvU4ZnrkBUClWjCbHD9u6kwyqhGSpevoU1wTGish+CBRhmIgMAy9pAfFpqhbAKOKNfw==}
|
|
60
|
+
cpu: [riscv64]
|
|
61
|
+
os: [linux]
|
|
62
|
+
libc: [glibc]
|
|
63
|
+
|
|
64
|
+
'@pnpm/exe.linux-s390x@12.4.2':
|
|
65
|
+
resolution: {integrity: sha512-LAsQRRdP9aToENR6dtcIJ9l+e1zMYOX0tQcLGpRyLPVBQcYRLlvAPcmDshsiIHQjp05SDa9FI0czX1ZQ1a7a/A==}
|
|
66
|
+
cpu: [s390x]
|
|
67
|
+
os: [linux]
|
|
68
|
+
libc: [glibc]
|
|
69
|
+
|
|
70
|
+
'@pnpm/exe.linux-x64-musl@12.4.2':
|
|
71
|
+
resolution: {integrity: sha512-kzfzH2/0BWdTABK14Yj5a1xsdkTEQUp2eXEPNakaD9jKL025lq3hyaKHIz/gIZaPDMe/1bFFK/En4ztFlbBJxw==}
|
|
72
|
+
cpu: [x64]
|
|
73
|
+
os: [linux]
|
|
74
|
+
libc: [musl]
|
|
75
|
+
|
|
76
|
+
'@pnpm/exe.linux-x64@12.4.2':
|
|
77
|
+
resolution: {integrity: sha512-/pbt0UVTa8NMDhzOWLQRfZ6G9ROKXlJPZtx845BqyWfc7hCrWXhTLBd70yO2y8+E+IWN3oHM1s/JsIQNGk1yvg==}
|
|
78
|
+
cpu: [x64]
|
|
79
|
+
os: [linux]
|
|
80
|
+
libc: [glibc]
|
|
81
|
+
|
|
82
|
+
'@pnpm/exe.win32-arm64@12.4.2':
|
|
83
|
+
resolution: {integrity: sha512-PsW19e4dAUNpZ0cS9flaxFuAmpt2dKlH/Vvi8TZ4qyJjjQzue/CEsWm+6wKVP4CJ7IT8RdL4qh+soOPWIgF2Zw==}
|
|
84
|
+
cpu: [arm64]
|
|
85
|
+
os: [win32]
|
|
86
|
+
|
|
87
|
+
'@pnpm/exe.win32-x64@12.4.2':
|
|
88
|
+
resolution: {integrity: sha512-+xGoeE0g55ztWvl8i5QqdmNfW3nIrTVcoQrNshEOwxthm9Ag48oXton3uxOA3/SANyz5AXexEjj2KO20NnOrEw==}
|
|
89
|
+
cpu: [x64]
|
|
90
|
+
os: [win32]
|
|
91
|
+
|
|
92
|
+
pnpm@12.4.2:
|
|
93
|
+
resolution: {integrity: sha512-CK3GYTGAJ1x8ntraOdzwjJxhrU5+rzMKTzRh8QKw+QdCNFTRF/mOctR/7wYWBwZE17/8lzpqV/UJCm18NosHyQ==}
|
|
94
|
+
engines: {node: '>=18.*'}
|
|
95
|
+
hasBin: true
|
|
96
|
+
|
|
97
|
+
snapshots:
|
|
98
|
+
|
|
99
|
+
'@pnpm/exe.android-arm64@12.4.2':
|
|
100
|
+
optional: true
|
|
101
|
+
|
|
102
|
+
'@pnpm/exe.android-x64@12.4.2':
|
|
103
|
+
optional: true
|
|
104
|
+
|
|
105
|
+
'@pnpm/exe.darwin-arm64@12.4.2':
|
|
106
|
+
optional: true
|
|
107
|
+
|
|
108
|
+
'@pnpm/exe.darwin-x64@12.4.2':
|
|
109
|
+
optional: true
|
|
110
|
+
|
|
111
|
+
'@pnpm/exe.freebsd-x64@12.4.2':
|
|
112
|
+
optional: true
|
|
113
|
+
|
|
114
|
+
'@pnpm/exe.linux-arm64-musl@12.4.2':
|
|
115
|
+
optional: true
|
|
116
|
+
|
|
117
|
+
'@pnpm/exe.linux-arm64@12.4.2':
|
|
118
|
+
optional: true
|
|
119
|
+
|
|
120
|
+
'@pnpm/exe.linux-ppc64@12.4.2':
|
|
121
|
+
optional: true
|
|
122
|
+
|
|
123
|
+
'@pnpm/exe.linux-riscv64@12.4.2':
|
|
124
|
+
optional: true
|
|
125
|
+
|
|
126
|
+
'@pnpm/exe.linux-s390x@12.4.2':
|
|
127
|
+
optional: true
|
|
128
|
+
|
|
129
|
+
'@pnpm/exe.linux-x64-musl@12.4.2':
|
|
130
|
+
optional: true
|
|
131
|
+
|
|
132
|
+
'@pnpm/exe.linux-x64@12.4.2':
|
|
133
|
+
optional: true
|
|
134
|
+
|
|
135
|
+
'@pnpm/exe.win32-arm64@12.4.2':
|
|
136
|
+
optional: true
|
|
137
|
+
|
|
138
|
+
'@pnpm/exe.win32-x64@12.4.2':
|
|
139
|
+
optional: true
|
|
140
|
+
|
|
141
|
+
pnpm@12.4.2:
|
|
142
|
+
optionalDependencies:
|
|
143
|
+
'@pnpm/exe.android-arm64': 12.4.2
|
|
144
|
+
'@pnpm/exe.android-x64': 12.4.2
|
|
145
|
+
'@pnpm/exe.darwin-arm64': 12.4.2
|
|
146
|
+
'@pnpm/exe.darwin-x64': 12.4.2
|
|
147
|
+
'@pnpm/exe.freebsd-x64': 12.4.2
|
|
148
|
+
'@pnpm/exe.linux-arm64': 12.4.2
|
|
149
|
+
'@pnpm/exe.linux-arm64-musl': 12.4.2
|
|
150
|
+
'@pnpm/exe.linux-ppc64': 12.4.2
|
|
151
|
+
'@pnpm/exe.linux-riscv64': 12.4.2
|
|
152
|
+
'@pnpm/exe.linux-s390x': 12.4.2
|
|
153
|
+
'@pnpm/exe.linux-x64': 12.4.2
|
|
154
|
+
'@pnpm/exe.linux-x64-musl': 12.4.2
|
|
155
|
+
'@pnpm/exe.win32-arm64': 12.4.2
|
|
156
|
+
'@pnpm/exe.win32-x64': 12.4.2
|
|
157
|
+
|
|
158
|
+
---
|
|
1
159
|
lockfileVersion: '9.0'
|
|
2
160
|
|
|
3
161
|
settings:
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
".gitignore": "sha256:fb8288522033f645a728dfb53cef24a11824bdbec858b93279d4809924b4539d",
|
|
18
18
|
".npmrc.example": "sha256:cee4433295152854b58babea9072215a2d84b8de086d218b15ffb7e84f1fe9e1",
|
|
19
19
|
"DESIGN.md": "sha256:e84a6c175840efe9663a2d0aba37f5635c053f47452bb146d1025d65665b1bec",
|
|
20
|
-
"README.md": "sha256:
|
|
20
|
+
"README.md": "sha256:745bd31b3397876fc239bde12378bc265a1a8d1626159f188de76873951d471a",
|
|
21
21
|
"micro-config.json": "sha256:8266b0eb806696d6bb2023a0d1e72113cdffc355bb0fafd8b2095d727f827711",
|
|
22
22
|
"orval.config.ts": "sha256:d918458e4ee972ae94740899dd15701530bdc31fd758240fc00e96aba3ba9b3a",
|
|
23
|
-
"package.json": "sha256:
|
|
23
|
+
"package.json": "sha256:51a73185fac255062e4f3eaa415017f9c9886d5e3aac4ff483694c49ae810ba7",
|
|
24
24
|
"packages/.env.development": "sha256:e698b56d83ad282c221e2c8067bc4e3e90789c610fd31da2489bd3ac2d8efc5f",
|
|
25
25
|
"packages/.env.example": "sha256:b8cf60af269af3f4dc3c167df88045af949683b302bd9b77e50fb77fa1adf81f",
|
|
26
26
|
"packages/.env.production": "sha256:b0a96ab02559a99fc95c37b967f604675686c8de336731a1721d54f43b047249",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"packages/src/views/Welcome.vue": "sha256:0498edee6e25b45644a2d12c6fded1e3c0fda830c9196d4fc5389b94fb1a0e0d",
|
|
44
44
|
"packages/tsconfig.json": "sha256:40e27bb07cd4ae8c0c636b5d9581fe378d00e21acb28423cc2a08bfa1a67c11f",
|
|
45
45
|
"packages/vite.config.ts": "sha256:d3c1775bdca54e1b0f2b267a7dae992cc61836891588e93e02caa49184cb2ab2",
|
|
46
|
-
"pnpm-lock.yaml": "sha256:
|
|
46
|
+
"pnpm-lock.yaml": "sha256:ddab6b19cb74c769ba1cd3854d3eb0649843e8136811b7cbf2800c3084f73949",
|
|
47
47
|
"pnpm-workspace.yaml": "sha256:d5cdbd2e0a167297976d11695d1593a4e71694ed462120569e20e98fd9c63fbe"
|
|
48
48
|
}
|
|
49
49
|
}
|
package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs
CHANGED
|
@@ -66,6 +66,11 @@ const saveBundle = () => writeFileSync(contractFile, JSON.stringify(bundle));
|
|
|
66
66
|
saveBundle();
|
|
67
67
|
const bundled = generate({ contractFile, outputDir: bundle.target_output_dir });
|
|
68
68
|
assert.equal(bundled.template.checkout, undefined);
|
|
69
|
+
const bundledPackage = JSON.parse(readFileSync(path.join(bundle.target_output_dir, 'package.json')));
|
|
70
|
+
assert.equal(bundledPackage.packageManager, 'pnpm@12.4.2');
|
|
71
|
+
assert.equal(bundledPackage.engines.node, '>=22.12.0');
|
|
72
|
+
assert.equal(bundledPackage.engines.pnpm, '>=12.4.2 <13');
|
|
73
|
+
assert.match(readFileSync(path.join(bundle.target_output_dir, 'README.md'), 'utf8'), /pnpm 12\.4\.2/);
|
|
69
74
|
assert.equal(JSON.parse(readFileSync(path.join(bundle.target_output_dir, 'packages/package.json'))).dependencies['ant-design-vue'], '4.2.6');
|
|
70
75
|
assert.equal(JSON.parse(readFileSync(path.join(bundle.target_output_dir, 'packages/src/config/theme.json'))).algorithm, 'default');
|
|
71
76
|
for (const forbidden of ['.npmrc', 'node_modules', '.git', 'packages/src/views/datasource/index.vue', 'scripts/sync-openapi.js']) assert.equal(existsSync(path.join(bundle.target_output_dir, forbidden)), false, forbidden);
|
|
@@ -13,7 +13,7 @@ description: Use when YSS Vue 页面涉及 vue-hooks-plus/useRequest、分页、
|
|
|
13
13
|
- Vue Hooks Plus `useRequest`: `https://inhiblabcore.github.io/vue-hooks-plus/zh/hooks/useRequest/quick-start`
|
|
14
14
|
- Local reference index: `references/frontend-docs.md`
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
本技能负责请求执行、分页/筛选参数、选择状态、响应映射、异步竞态和页面级调度。接口导入与 Orval mutator 使用 `yss-api-integration`;页面布局和组件选型从 `yss-ui` 路由到 `yss-ui-business-page-generation` 及具体组件 Skill;表格和树高度分别服从 `ytable-usage`、`yedit-table-usage`、`ytree-usage`。
|
|
17
17
|
|
|
18
18
|
官方 `@yss-ui/hooks` 当前公开 `useFullscreen`、`useTreeHeight`、`useTableHeight`、`useLoading`、`usePollingTask` 与 `useUrlState`。`useRequest`、防抖、缓存或重试不属于这套公开 YSS Hooks 契约。仅当项目已批准 `vue-hooks-plus` 及其具体版本时,才可使用第 3 节的 `useRequest`;不得把它命名或包装成 YSS 官方 API。
|
|
19
19
|
|
|
@@ -34,6 +34,7 @@ description: Use when YSS Vue 页面涉及 vue-hooks-plus/useRequest、分页、
|
|
|
34
34
|
- 将请求执行、参数合并、响应映射与数据竞争处理放在 `hooks/useXxx.ts`;页面只保留布局、事件绑定和渲染。
|
|
35
35
|
- 以业务域划分 Hook,而不是为每个微小工具函数各建一个 Hook。
|
|
36
36
|
- 每个对外动作都必须有明确的 loading、成功、失败和数据陈旧策略;不要把这些分支留给模板或页面组件。
|
|
37
|
+
- 组件内不直接修改 `props`;双向绑定使用 `emit('update:xxx')`。模板不承载复杂业务表达式,优先下沉 `computed` 或业务 Hook;避免无边界的深层 `watch`,只观察明确依赖源。
|
|
37
38
|
|
|
38
39
|
## 2. 列表 / 分页 Hook
|
|
39
40
|
|
|
@@ -185,7 +186,7 @@ const polling = usePollingTask(async ({ isCurrent, signal }) => {
|
|
|
185
186
|
|
|
186
187
|
- `useUrlState()`:返回扁平字符串 `state`、`setState`、`clearKeys`、`clearState`。`setState` 合并状态,`undefined`、`null`、空字符串删除键。默认 `mode: 'replace'`、`strategy: 'history'`;需要路由守卫或导航语义时用 `strategy: 'router'`。
|
|
187
188
|
- `useFullscreen(target, options?)`:返回 `isFullscreen`、`enterFullscreen`、`exitFullscreen`、`toggleFullscreen`、`isEnabled`。浏览器真全屏需要用户手势;`pageFullscreen` 是 CSS 模拟全屏,可配置 `className`、`zIndex`,并可用 `escTip` 控制提示。
|
|
188
|
-
- `useTreeHeight` 与 `useTableHeight` 通过 `ResizeObserver` 计算可用高度。树的 `extraOffset` 仅用于 YTree 内置 `filterable` 搜索区;表格可配置 `boundaryRef` 避免尺寸反馈循环,并可扣除分页、工具栏或新增按钮高度。具体布局约束交由 `
|
|
189
|
+
- `useTreeHeight` 与 `useTableHeight` 通过 `ResizeObserver` 计算可用高度。树的 `extraOffset` 仅用于 YTree 内置 `filterable` 搜索区;表格可配置 `boundaryRef` 避免尺寸反馈循环,并可扣除分页、工具栏或新增按钮高度。具体布局约束交由 `ytree-usage` / `ytable-usage` / `yedit-table-usage`。
|
|
189
190
|
|
|
190
191
|
## 8. 返回契约与自检
|
|
191
192
|
|
package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
| Capability | Primary skill | Task modes |
|
|
20
20
|
| --- | --- | --- |
|
|
21
|
+
| `governance.backend-spec-conformance` | `yss-backend-spec-review` | `guidance`, `troubleshooting`, `review-input` |
|
|
21
22
|
| `writing.lifecycle-document` | `i-have-adhd` | `guidance` |
|
|
22
23
|
| `architecture.technical-design` | `yss-technical-design` | `guidance`, `integration`, `review-input` |
|
|
23
24
|
| `architecture.mvc-design` | `yss-technical-design` | `guidance`, `integration`, `review-input` |
|
|
@@ -57,6 +58,7 @@
|
|
|
57
58
|
|
|
58
59
|
| Recipe | Capabilities |
|
|
59
60
|
| --- | --- |
|
|
61
|
+
| `backend.spec-conformance` | `governance.backend-spec-conformance`, `quality.java-code-style` |
|
|
60
62
|
| `backend.ddd-domain-behavior` | `layer.domain`, `layer.application`, `quality.java-code-style` |
|
|
61
63
|
| `backend.ddd-persistence-mybatis` | `layer.persistence`, `framework.mybatis`, `codegen.mapstruct`, `codegen.lombok`, `quality.java-code-style` |
|
|
62
64
|
| `backend.ddd-http-api` | `layer.web-adapter`, `contract.dto-wire`, `contract.request-validation`, `contract.error-mapping`, `codegen.mapstruct`, `codegen.lombok`, `quality.java-code-style` |
|
|
@@ -106,6 +108,9 @@
|
|
|
106
108
|
|
|
107
109
|
| Skill | Dependency | Type | Condition |
|
|
108
110
|
| --- | --- | --- | --- |
|
|
111
|
+
| `yss-backend-spec-review` | `alibaba-java-code-style` | `context-required` | — |
|
|
112
|
+
| `yss-backend-spec-review` | `yss-implementation-contract-compiler` | `coordination-only` | — |
|
|
113
|
+
| `yss-backend-spec-review` | `code-review` | `review-only` | — |
|
|
109
114
|
| `prototype-review` | `i-have-adhd` | `context-conditional` | `lifecycle-document-output` |
|
|
110
115
|
| `yss-implementation-contract-compiler` | `i-have-adhd` | `context-conditional` | `lifecycle-document-output` |
|
|
111
116
|
| `yss-openapi-governance` | `i-have-adhd` | `context-conditional` | `lifecycle-document-output` |
|
|
@@ -150,7 +155,7 @@
|
|
|
150
155
|
| `yss-validation` | `yss-exception` | `component-dependency` | — |
|
|
151
156
|
| `yss-security-algorithm` | `yss-exception` | `component-dependency` | — |
|
|
152
157
|
| `yss-exception` | `yss-dto` | `context-required` | — |
|
|
153
|
-
| `yss-ui-business-page-generation` | `
|
|
158
|
+
| `yss-ui-business-page-generation` | `yss-ui` | `context-required` | — |
|
|
154
159
|
| `yss-ui-business-page-generation` | `yss-hook` | `context-conditional` | `hooks` |
|
|
155
160
|
| `yss-ui-business-page-generation` | `yss-formily` | `context-conditional` | `form` |
|
|
156
161
|
| `yss-ui-business-page-generation` | `yss-api-integration` | `context-conditional` | `api` |
|
|
@@ -70,7 +70,7 @@ node scripts/generate_and_verify_scaffold.mjs \
|
|
|
70
70
|
## 硬约束
|
|
71
71
|
|
|
72
72
|
- 新生成只接受包含 API Contract Decision 的统一 schema v4;缺 API 字段的预发布 v4 不得静默接受。验证器可只读检查历史 Manifest v3,恢复必须另行完成所有权审计、技术/数据/API 设计补齐与当前批准。历史 v2/v3 均不用于新生成。
|
|
73
|
-
- `architecture_family` 必须为 `layered-mvc`,`generator_skill` 必须为本 skill
|
|
73
|
+
- `architecture_family` 必须为 `layered-mvc`,`generator_skill` 必须为本 skill。旧数据分析初始化合同必须标记 `stale` 并按 `mvc-data-analysis-v1` Profile 重编译,不自动替换或继承批准。
|
|
74
74
|
- 目标存在、`--force`、旧项目迁移、模板升级均为 `unsupported`。
|
|
75
75
|
- Harness 内只允许以 `apps/backend/` 为输出父容器;外部实现仓库使用已登记真实路径。
|
|
76
76
|
- 不生成业务示例。健康检查、上下文加载测试和架构测试只能验证机械工程能力,不定义用户可见 API。
|