create-yss-spec 3.3.8 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +1 -1
- package/template/.agents/skills/.strategic-design-skills-manifest.json +3 -13
- package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +3 -3
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/layer-skill-routing.md +18 -0
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +13 -4
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +9 -8
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +6 -4
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +108 -12
- package/template/.agents/skills/yss-design-system/SKILL.md +19 -19
- package/template/.agents/skills/yss-design-system/references/data-quality-theme.md +13 -0
- package/template/.agents/skills/yss-design-system/references/design-qa-theme.md +3 -1
- package/template/.agents/skills/yss-design-system/references/design-system.md +7 -9
- package/template/.agents/skills/yss-formily/SKILL.md +21 -258
- package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +17 -13
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.eslintrc.cjs +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.npmrc.example +2 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/DESIGN.md +264 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +13 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/__yss_dotfile__.gitignore +6 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/micro-config.json +5 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/orval.config.ts +2 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +30 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.development +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.example +5 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production.standalone +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/index.html +2 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/package.json +34 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/public/favicon.svg +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/App.vue +15 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/api/mutator.ts +7 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/components/ThemeScope.vue +11 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/config/theme.json +41 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/env.d.ts +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/main.ts +40 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/router/index.ts +8 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/store/theme.ts +37 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/styles/index.less +6 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/types/microAppBridge.ts +28 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/utils/microAppRouterBridge.ts +266 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/NotFound.vue +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/Welcome.vue +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/tsconfig.json +23 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/vite.config.ts +16 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +9026 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-workspace.yaml +7 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/references/data-quality-baseline.md +17 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +49 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +41 -13
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/refresh_baseline.mjs +29 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +5 -1
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +32 -0
- package/template/.agents/skills/yss-hook/SKILL.md +1 -1
- package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
- package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +5 -3
- package/template/.agents/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +13 -5
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +12 -8
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +97 -9
- package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +2 -2
- package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +1 -1
- package/template/.agents/skills/yss-openapi-governance/SKILL.md +2 -0
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +43 -15
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +2 -2
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +1 -1
- package/template/.agents/skills/yss-prototype-stage/SKILL.md +12 -8
- package/template/.agents/skills/yss-prototype-stage/assets/antd-authoring/package.json +16 -0
- package/template/.agents/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +1678 -0
- package/template/.agents/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/native-workbench/app.js +20 -0
- package/template/.agents/skills/yss-prototype-stage/assets/native-workbench/index.html +11 -0
- package/template/.agents/skills/yss-prototype-stage/assets/native-workbench/styles.css +28 -0
- package/template/.agents/skills/yss-prototype-stage/assets/offline-html/app.js +50 -0
- package/template/.agents/skills/yss-prototype-stage/assets/offline-html/index.html +38 -0
- package/template/.agents/skills/yss-prototype-stage/assets/offline-html/scenarios.js +7 -0
- package/template/.agents/skills/yss-prototype-stage/assets/offline-html/styles.css +20 -0
- package/template/.agents/skills/yss-prototype-stage/references/antd-component-catalog.json +736 -0
- package/template/.agents/skills/yss-prototype-stage/references/antd-integration.md +61 -0
- package/template/.agents/skills/yss-prototype-stage/references/html-prototype-practices.md +14 -0
- package/template/.agents/skills/yss-prototype-stage/references/product-design-adapter.md +28 -51
- package/template/.agents/skills/yss-prototype-stage/references/prototype-profile-routing.md +15 -4
- package/template/.agents/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +71 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +26 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/offline-html.mjs +121 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/prototype-contract.mjs +52 -143
- package/template/.agents/skills/yss-prototype-stage/tests/antd-reference.test.mjs +24 -0
- package/template/.agents/skills/yss-prototype-stage/tests/browser-smoke.mjs +77 -0
- package/template/.agents/skills/yss-prototype-stage/tests/run-scenarios.mjs +73 -26
- package/template/.agents/skills/yss-prototype-stage/tests/workbench-smoke.mjs +57 -0
- package/template/.agents/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
- package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +0 -1
- package/template/.agents/skills/yss-tactical-design/SKILL.md +1 -1
- package/template/.agents/skills/yss-ui/SKILL.md +3 -2
- package/template/.agents/skills/yss-ui/references/component-routing.md +11 -10
- package/template/.agents/skills/yss-ui/references/specialized-components.md +52 -0
- package/template/.agents/skills/yss-web-controller/scripts/generate_controller.mjs +4 -3
- package/template/.agents/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +3 -3
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/layer-skill-routing.md +18 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +13 -4
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +9 -8
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +6 -4
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +108 -12
- package/template/.codex/skills/yss-design-system/SKILL.md +19 -19
- package/template/.codex/skills/yss-design-system/references/data-quality-theme.md +13 -0
- package/template/.codex/skills/yss-design-system/references/design-qa-theme.md +3 -1
- package/template/.codex/skills/yss-design-system/references/design-system.md +7 -9
- package/template/.codex/skills/yss-formily/SKILL.md +21 -258
- package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +17 -13
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.eslintrc.cjs +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.npmrc.example +2 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/DESIGN.md +264 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +13 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/__yss_dotfile__.gitignore +6 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/micro-config.json +5 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/orval.config.ts +2 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +30 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.development +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.example +5 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production.standalone +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/index.html +2 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/package.json +34 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/public/favicon.svg +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/App.vue +15 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/api/mutator.ts +7 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/components/ThemeScope.vue +11 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/config/theme.json +41 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/env.d.ts +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/main.ts +40 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/router/index.ts +8 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/store/theme.ts +37 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/styles/index.less +6 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/types/microAppBridge.ts +28 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/utils/microAppRouterBridge.ts +266 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/NotFound.vue +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/Welcome.vue +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/tsconfig.json +23 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/vite.config.ts +16 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +9026 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-workspace.yaml +7 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/references/data-quality-baseline.md +17 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +49 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +41 -13
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/refresh_baseline.mjs +29 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +5 -1
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +32 -0
- package/template/.codex/skills/yss-hook/SKILL.md +1 -1
- package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
- package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +5 -3
- package/template/.codex/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +13 -5
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +12 -8
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +97 -9
- package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +2 -2
- package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +1 -1
- package/template/.codex/skills/yss-openapi-governance/SKILL.md +2 -0
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +43 -15
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +2 -2
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +1 -1
- package/template/.codex/skills/yss-prototype-stage/SKILL.md +12 -8
- package/template/.codex/skills/yss-prototype-stage/assets/antd-authoring/package.json +16 -0
- package/template/.codex/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +1678 -0
- package/template/.codex/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/native-workbench/app.js +20 -0
- package/template/.codex/skills/yss-prototype-stage/assets/native-workbench/index.html +11 -0
- package/template/.codex/skills/yss-prototype-stage/assets/native-workbench/styles.css +28 -0
- package/template/.codex/skills/yss-prototype-stage/assets/offline-html/app.js +50 -0
- package/template/.codex/skills/yss-prototype-stage/assets/offline-html/index.html +38 -0
- package/template/.codex/skills/yss-prototype-stage/assets/offline-html/scenarios.js +7 -0
- package/template/.codex/skills/yss-prototype-stage/assets/offline-html/styles.css +20 -0
- package/template/.codex/skills/yss-prototype-stage/references/antd-component-catalog.json +736 -0
- package/template/.codex/skills/yss-prototype-stage/references/antd-integration.md +61 -0
- package/template/.codex/skills/yss-prototype-stage/references/html-prototype-practices.md +14 -0
- package/template/.codex/skills/yss-prototype-stage/references/product-design-adapter.md +28 -51
- package/template/.codex/skills/yss-prototype-stage/references/prototype-profile-routing.md +15 -4
- package/template/.codex/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +71 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +26 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/offline-html.mjs +121 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/prototype-contract.mjs +52 -143
- package/template/.codex/skills/yss-prototype-stage/tests/antd-reference.test.mjs +24 -0
- package/template/.codex/skills/yss-prototype-stage/tests/browser-smoke.mjs +77 -0
- package/template/.codex/skills/yss-prototype-stage/tests/run-scenarios.mjs +73 -26
- package/template/.codex/skills/yss-prototype-stage/tests/workbench-smoke.mjs +57 -0
- package/template/.codex/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
- package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +0 -1
- package/template/.codex/skills/yss-tactical-design/SKILL.md +1 -1
- package/template/.codex/skills/yss-ui/SKILL.md +3 -2
- package/template/.codex/skills/yss-ui/references/component-routing.md +11 -10
- package/template/.codex/skills/yss-ui/references/specialized-components.md +52 -0
- package/template/.codex/skills/yss-web-controller/scripts/generate_controller.mjs +4 -3
- package/template/.codex/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +3 -3
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/layer-skill-routing.md +18 -0
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +13 -4
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +9 -8
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +6 -4
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +108 -12
- package/template/.cursor/skills/yss-design-system/SKILL.md +19 -19
- package/template/.cursor/skills/yss-design-system/references/data-quality-theme.md +13 -0
- package/template/.cursor/skills/yss-design-system/references/design-qa-theme.md +3 -1
- package/template/.cursor/skills/yss-design-system/references/design-system.md +7 -9
- package/template/.cursor/skills/yss-formily/SKILL.md +21 -258
- package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +17 -13
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.eslintrc.cjs +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.npmrc.example +2 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/DESIGN.md +264 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +13 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/__yss_dotfile__.gitignore +6 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/micro-config.json +5 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/orval.config.ts +2 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +30 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.development +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.example +5 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production.standalone +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/index.html +2 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/package.json +34 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/public/favicon.svg +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/App.vue +15 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/api/mutator.ts +7 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/components/ThemeScope.vue +11 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/config/theme.json +41 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/env.d.ts +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/main.ts +40 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/router/index.ts +8 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/store/theme.ts +37 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/styles/index.less +6 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/types/microAppBridge.ts +28 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/utils/microAppRouterBridge.ts +266 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/NotFound.vue +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/Welcome.vue +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/tsconfig.json +23 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/vite.config.ts +16 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +9026 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-workspace.yaml +7 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/references/data-quality-baseline.md +17 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +49 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +41 -13
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/refresh_baseline.mjs +29 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +5 -1
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +32 -0
- package/template/.cursor/skills/yss-hook/SKILL.md +1 -1
- package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +5 -3
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +13 -5
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +12 -8
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +97 -9
- package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +2 -2
- package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +1 -1
- package/template/.cursor/skills/yss-openapi-governance/SKILL.md +2 -0
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +43 -15
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +2 -2
- package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +1 -1
- package/template/.cursor/skills/yss-prototype-stage/SKILL.md +12 -8
- package/template/.cursor/skills/yss-prototype-stage/assets/antd-authoring/package.json +16 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +1678 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/native-workbench/app.js +20 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/native-workbench/index.html +11 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/native-workbench/styles.css +28 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/app.js +50 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/index.html +38 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/scenarios.js +7 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/styles.css +20 -0
- package/template/.cursor/skills/yss-prototype-stage/references/antd-component-catalog.json +736 -0
- package/template/.cursor/skills/yss-prototype-stage/references/antd-integration.md +61 -0
- package/template/.cursor/skills/yss-prototype-stage/references/html-prototype-practices.md +14 -0
- package/template/.cursor/skills/yss-prototype-stage/references/product-design-adapter.md +28 -51
- package/template/.cursor/skills/yss-prototype-stage/references/prototype-profile-routing.md +15 -4
- package/template/.cursor/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +71 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +26 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/offline-html.mjs +121 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/prototype-contract.mjs +52 -143
- package/template/.cursor/skills/yss-prototype-stage/tests/antd-reference.test.mjs +24 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/browser-smoke.mjs +77 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/run-scenarios.mjs +73 -26
- package/template/.cursor/skills/yss-prototype-stage/tests/workbench-smoke.mjs +57 -0
- package/template/.cursor/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
- package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +0 -1
- package/template/.cursor/skills/yss-tactical-design/SKILL.md +1 -1
- package/template/.cursor/skills/yss-ui/SKILL.md +3 -2
- package/template/.cursor/skills/yss-ui/references/component-routing.md +11 -10
- package/template/.cursor/skills/yss-ui/references/specialized-components.md +52 -0
- package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.mjs +4 -3
- package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +3 -3
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/layer-skill-routing.md +18 -0
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +13 -4
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +9 -8
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +6 -4
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +108 -12
- package/template/.pi/skills/yss-design-system/SKILL.md +19 -19
- package/template/.pi/skills/yss-design-system/references/data-quality-theme.md +13 -0
- package/template/.pi/skills/yss-design-system/references/design-qa-theme.md +3 -1
- package/template/.pi/skills/yss-design-system/references/design-system.md +7 -9
- package/template/.pi/skills/yss-formily/SKILL.md +21 -258
- package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +17 -13
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.eslintrc.cjs +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.npmrc.example +2 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/DESIGN.md +264 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +13 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/__yss_dotfile__.gitignore +6 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/micro-config.json +5 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/orval.config.ts +2 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +30 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.development +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.example +5 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production.standalone +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/index.html +2 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/package.json +34 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/public/favicon.svg +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/App.vue +15 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/api/mutator.ts +7 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/components/ThemeScope.vue +11 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/config/theme.json +41 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/env.d.ts +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/main.ts +40 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/router/index.ts +8 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/store/theme.ts +37 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/styles/index.less +6 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/types/microAppBridge.ts +28 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/utils/microAppRouterBridge.ts +266 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/NotFound.vue +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/Welcome.vue +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/tsconfig.json +23 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/vite.config.ts +16 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +9026 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-workspace.yaml +7 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/references/data-quality-baseline.md +17 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +49 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +41 -13
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/refresh_baseline.mjs +29 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +5 -1
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +32 -0
- package/template/.pi/skills/yss-hook/SKILL.md +1 -1
- package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +1 -1
- package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +5 -3
- package/template/.pi/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +13 -5
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +12 -8
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +97 -9
- package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +2 -2
- package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +1 -1
- package/template/.pi/skills/yss-openapi-governance/SKILL.md +2 -0
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +43 -15
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +2 -2
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +1 -1
- package/template/.pi/skills/yss-prototype-stage/SKILL.md +12 -8
- package/template/.pi/skills/yss-prototype-stage/assets/antd-authoring/package.json +16 -0
- package/template/.pi/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +1678 -0
- package/template/.pi/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/native-workbench/app.js +20 -0
- package/template/.pi/skills/yss-prototype-stage/assets/native-workbench/index.html +11 -0
- package/template/.pi/skills/yss-prototype-stage/assets/native-workbench/styles.css +28 -0
- package/template/.pi/skills/yss-prototype-stage/assets/offline-html/app.js +50 -0
- package/template/.pi/skills/yss-prototype-stage/assets/offline-html/index.html +38 -0
- package/template/.pi/skills/yss-prototype-stage/assets/offline-html/scenarios.js +7 -0
- package/template/.pi/skills/yss-prototype-stage/assets/offline-html/styles.css +20 -0
- package/template/.pi/skills/yss-prototype-stage/references/antd-component-catalog.json +736 -0
- package/template/.pi/skills/yss-prototype-stage/references/antd-integration.md +61 -0
- package/template/.pi/skills/yss-prototype-stage/references/html-prototype-practices.md +14 -0
- package/template/.pi/skills/yss-prototype-stage/references/product-design-adapter.md +28 -51
- package/template/.pi/skills/yss-prototype-stage/references/prototype-profile-routing.md +15 -4
- package/template/.pi/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +71 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +26 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/offline-html.mjs +121 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/prototype-contract.mjs +52 -143
- package/template/.pi/skills/yss-prototype-stage/tests/antd-reference.test.mjs +24 -0
- package/template/.pi/skills/yss-prototype-stage/tests/browser-smoke.mjs +77 -0
- package/template/.pi/skills/yss-prototype-stage/tests/run-scenarios.mjs +73 -26
- package/template/.pi/skills/yss-prototype-stage/tests/workbench-smoke.mjs +57 -0
- package/template/.pi/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
- package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +0 -1
- package/template/.pi/skills/yss-tactical-design/SKILL.md +1 -1
- package/template/.pi/skills/yss-ui/SKILL.md +3 -2
- package/template/.pi/skills/yss-ui/references/component-routing.md +11 -10
- package/template/.pi/skills/yss-ui/references/specialized-components.md +52 -0
- package/template/.pi/skills/yss-web-controller/scripts/generate_controller.mjs +4 -3
- package/template/.pi/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
- package/template/CONTEXT.md +1 -0
- package/template/DESIGN.md +31 -14
- package/template/__yss_dotfile__.gitignore +4 -0
- package/template/docs/agents/digital-human-roles.yaml +4 -4
- package/template/docs/agents/skill-migrations.md +15 -2
- package/template/docs/agents/yss-skill-registry.yaml +6 -40
- package/template/docs/design/README.md +4 -4
- package/template/docs/design/design-system-sync.yaml +2 -1
- package/template/docs/design/design.md +23 -31
- package/template/docs/design/preview-dark.html +3 -3
- package/template/docs/design/preview.css +1 -1
- package/template/docs/design/preview.html +2 -2
- package/template/docs/design/templates/interaction-spec-template.md +2 -2
- package/template/docs/design/templates/prototype-evidence-template.yaml +18 -22
- package/template/docs/design/templates/prototype-review-checklist.md +3 -1
- package/template/docs/design/templates/state-matrix-template.md +1 -1
- package/template/docs/design/templates/visual-baseline-template.yaml +3 -2
- package/template/docs/design/tokens/.design-md-projection.json +7 -7
- package/template/docs/design/tokens/theme.json +16 -10
- package/template/docs/design/tokens/tokens.compact.json +521 -237
- package/template/docs/design/tokens/tokens.dark.json +527 -240
- package/template/docs/design/tokens/tokens.default.json +513 -235
- package/template/docs/design/tokens/variables.css +67 -65
- package/template/docs/design/tokens/variables.dark.css +41 -41
- package/template/docs/process/delivery-preflight.md +1 -1
- package/template/docs/process/frontend-backend-delivery.md +2 -1
- package/template/docs/process/lifecycle-registry-baseline.json +1 -1
- package/template/docs/process/lifecycle-registry.yaml +5 -5
- package/template/docs/process/schemas/api-contract-decision.schema.json +74 -0
- package/template/docs/process/schemas/data-architecture-decision.schema.json +34 -0
- package/template/docs/process/schemas/implementation-repository-preparation-result.schema.json +80 -24
- package/template/docs/process/schemas/project-scaffold-contract.schema.json +85 -11
- package/template/docs/process/schemas/strategic-design-handoff.schema.json +296 -107
- package/template/docs/process/schemas/strategic-handoff-delivery-verification.schema.json +19 -0
- package/template/docs/process/schemas/strategic-handoff-delivery.schema.json +84 -0
- package/template/docs/process/schemas/strategic-handoff-import-receipt-v3.schema.json +42 -0
- package/template/docs/process/strategic-handoff-package.md +26 -9
- package/template/docs/user-guide//350/256/276/345/244/207/345/200/237/347/224/250/350/264/257/347/251/277/346/241/210/344/276/213.md +1 -1
- package/template/scripts/audit-legacy-backend-scaffold +29 -0
- package/template/scripts/lib/api-contract-decision.mjs +49 -0
- package/template/scripts/lib/api-contract-decision.test.mjs +69 -0
- package/template/scripts/lib/backend-scaffold-prerequisites.mjs +123 -0
- package/template/scripts/lib/legacy-backend-scaffold-audit.mjs +87 -0
- package/template/scripts/lib/legacy-backend-scaffold-audit.test.mjs +64 -0
- package/template/scripts/lib/lifecycle-transition.mjs +153 -5
- package/template/scripts/lib/openapi-draft-validation.mjs +111 -0
- package/template/scripts/lib/skill-registry.mjs +17 -3
- package/template/scripts/lib/skill-supply-chain.mjs +12 -1
- package/template/scripts/lib/strategic-feedback.mjs +2 -2
- package/template/scripts/lib/strategic-handoff-consumption.mjs +2 -2
- package/template/scripts/lib/strategic-handoff.mjs +77 -3
- package/template/scripts/strategic-handoff +6 -4
- package/template/scripts/verify-openapi-draft-validation-record +10 -129
- package/template/scripts/verify-strategic-context-import +12 -14
- package/template/skills-lock.json +22 -77
- package/template/yss-public-skills.json +0 -6
- package/template.snapshot.json +8 -4
- package/template/.agents/skills/yss-antd-design/SKILL.md +0 -35
- package/template/.agents/skills/yss-antd-design/references/boundaries.md +0 -30
- package/template/.agents/skills/yss-antd-design/references/cli-matrix.md +0 -38
- package/template/.agents/skills/yss-antd-design/references/evidence.md +0 -35
- package/template/.agents/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
- package/template/.agents/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
- package/template/.agents/skills/yss-antdv-next-design/SKILL.md +0 -48
- package/template/.agents/skills/yss-antdv-next-design/references/boundaries.md +0 -25
- package/template/.agents/skills/yss-antdv-next-design/references/cli-matrix.md +0 -34
- package/template/.agents/skills/yss-antdv-next-design/references/fact-pack.md +0 -38
- package/template/.agents/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +0 -213
- package/template/.agents/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +0 -168
- package/template/.agents/skills/yss-antdv-next-design/tests/run-scenarios.mjs +0 -139
- package/template/.agents/skills/yss-components/SKILL.md +0 -386
- package/template/.agents/skills/yss-components/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-components/references/frontend-docs.md +0 -9
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-mvc-scaffold-generator/SKILL.md +0 -8
- package/template/.agents/skills/yss-mvc-scaffold-generator/agents/openai.yaml +0 -4
- package/template/.agents/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +0 -50
- package/template/.agents/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +0 -42
- package/template/.agents/skills/yss-mvc-scaffold-generator/references/architecture.md +0 -28
- package/template/.agents/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +0 -137
- package/template/.agents/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +0 -341
- package/template/.agents/skills/yss-mvc-scaffold-generator/references/history/skill.md +0 -87
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +0 -3
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +0 -9
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +0 -74
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +0 -36
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +0 -114
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +0 -90
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +0 -54
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +0 -103
- package/template/.codex/skills/yss-antd-design/SKILL.md +0 -35
- package/template/.codex/skills/yss-antd-design/references/boundaries.md +0 -30
- package/template/.codex/skills/yss-antd-design/references/cli-matrix.md +0 -38
- package/template/.codex/skills/yss-antd-design/references/evidence.md +0 -35
- package/template/.codex/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
- package/template/.codex/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
- package/template/.codex/skills/yss-antdv-next-design/SKILL.md +0 -48
- package/template/.codex/skills/yss-antdv-next-design/references/boundaries.md +0 -25
- package/template/.codex/skills/yss-antdv-next-design/references/cli-matrix.md +0 -34
- package/template/.codex/skills/yss-antdv-next-design/references/fact-pack.md +0 -38
- package/template/.codex/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +0 -213
- package/template/.codex/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +0 -168
- package/template/.codex/skills/yss-antdv-next-design/tests/run-scenarios.mjs +0 -139
- package/template/.codex/skills/yss-components/SKILL.md +0 -386
- package/template/.codex/skills/yss-components/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-components/references/frontend-docs.md +0 -9
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-mvc-scaffold-generator/SKILL.md +0 -8
- package/template/.codex/skills/yss-mvc-scaffold-generator/agents/openai.yaml +0 -4
- package/template/.codex/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +0 -50
- package/template/.codex/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +0 -42
- package/template/.codex/skills/yss-mvc-scaffold-generator/references/architecture.md +0 -28
- package/template/.codex/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +0 -137
- package/template/.codex/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +0 -341
- package/template/.codex/skills/yss-mvc-scaffold-generator/references/history/skill.md +0 -87
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +0 -3
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +0 -9
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +0 -74
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +0 -36
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +0 -114
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +0 -90
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +0 -54
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +0 -103
- package/template/.cursor/skills/yss-antd-design/SKILL.md +0 -35
- package/template/.cursor/skills/yss-antd-design/references/boundaries.md +0 -30
- package/template/.cursor/skills/yss-antd-design/references/cli-matrix.md +0 -38
- package/template/.cursor/skills/yss-antd-design/references/evidence.md +0 -35
- package/template/.cursor/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
- package/template/.cursor/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
- package/template/.cursor/skills/yss-antdv-next-design/SKILL.md +0 -48
- package/template/.cursor/skills/yss-antdv-next-design/references/boundaries.md +0 -25
- package/template/.cursor/skills/yss-antdv-next-design/references/cli-matrix.md +0 -34
- package/template/.cursor/skills/yss-antdv-next-design/references/fact-pack.md +0 -38
- package/template/.cursor/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +0 -213
- package/template/.cursor/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +0 -168
- package/template/.cursor/skills/yss-antdv-next-design/tests/run-scenarios.mjs +0 -139
- package/template/.cursor/skills/yss-components/SKILL.md +0 -386
- package/template/.cursor/skills/yss-components/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-components/references/frontend-docs.md +0 -9
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-mvc-scaffold-generator/SKILL.md +0 -8
- package/template/.cursor/skills/yss-mvc-scaffold-generator/agents/openai.yaml +0 -4
- package/template/.cursor/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +0 -50
- package/template/.cursor/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +0 -42
- package/template/.cursor/skills/yss-mvc-scaffold-generator/references/architecture.md +0 -28
- package/template/.cursor/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +0 -137
- package/template/.cursor/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +0 -341
- package/template/.cursor/skills/yss-mvc-scaffold-generator/references/history/skill.md +0 -87
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +0 -3
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +0 -9
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +0 -74
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +0 -36
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +0 -114
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +0 -90
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +0 -54
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +0 -103
- package/template/.pi/skills/yss-antd-design/SKILL.md +0 -35
- package/template/.pi/skills/yss-antd-design/references/boundaries.md +0 -30
- package/template/.pi/skills/yss-antd-design/references/cli-matrix.md +0 -38
- package/template/.pi/skills/yss-antd-design/references/evidence.md +0 -35
- package/template/.pi/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
- package/template/.pi/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
- package/template/.pi/skills/yss-antdv-next-design/SKILL.md +0 -48
- package/template/.pi/skills/yss-antdv-next-design/references/boundaries.md +0 -25
- package/template/.pi/skills/yss-antdv-next-design/references/cli-matrix.md +0 -34
- package/template/.pi/skills/yss-antdv-next-design/references/fact-pack.md +0 -38
- package/template/.pi/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +0 -213
- package/template/.pi/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +0 -168
- package/template/.pi/skills/yss-antdv-next-design/tests/run-scenarios.mjs +0 -139
- package/template/.pi/skills/yss-components/SKILL.md +0 -386
- package/template/.pi/skills/yss-components/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-components/references/frontend-docs.md +0 -9
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-mvc-scaffold-generator/SKILL.md +0 -8
- package/template/.pi/skills/yss-mvc-scaffold-generator/agents/openai.yaml +0 -4
- package/template/.pi/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +0 -50
- package/template/.pi/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +0 -42
- package/template/.pi/skills/yss-mvc-scaffold-generator/references/architecture.md +0 -28
- package/template/.pi/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +0 -137
- package/template/.pi/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +0 -341
- package/template/.pi/skills/yss-mvc-scaffold-generator/references/history/skill.md +0 -87
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +0 -3
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +0 -9
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +0 -74
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +0 -36
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +0 -114
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +0 -90
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +0 -54
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +0 -103
package/template/.pi/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Historical source only; not an executable entrypoint.
|
|
3
|
-
/** YSS MVC 脚手架编排入口;参数、文件、模板和项目治理分别位于 scripts/lib。 */
|
|
4
|
-
import { cp, mkdir, mkdtemp, rename, rm, rmdir } from "node:fs/promises";
|
|
5
|
-
import path from "node:path";
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
MODULES,
|
|
9
|
-
SHARED_SKILLS_ROOT,
|
|
10
|
-
fail,
|
|
11
|
-
parseArgs,
|
|
12
|
-
assertGitAvailable,
|
|
13
|
-
resolveGitAuthor,
|
|
14
|
-
resolveMavenSettings,
|
|
15
|
-
initializeGit,
|
|
16
|
-
exists,
|
|
17
|
-
} from "./lib/runtime.mjs";
|
|
18
|
-
import { assertEmpty, ensureSkillUtils, put, renderAsset } from "./lib/storage.mjs";
|
|
19
|
-
import { writeProjectEnvelope } from "./lib/envelope.mjs";
|
|
20
|
-
import { modulePom, parentPom, writeJavaSources } from "./lib/templates.mjs";
|
|
21
|
-
|
|
22
|
-
const SKILL_ID = "yss-mvc-scaffold-generator";
|
|
23
|
-
let generatedJavadocAuthor;
|
|
24
|
-
|
|
25
|
-
function usage() {
|
|
26
|
-
console.log(`YSS MVC 脚手架生成器\n\n用法: node scripts/generate_project.mjs --project-name <name> --base-package <package> --target-dir <dir> [选项]\n\n选项: --database oracle|oceanbase-oracle --with-mock --maven-settings <path> --dry-run`);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async function writeGenerated(root, relative, content) {
|
|
30
|
-
await put(root, relative, content, generatedJavadocAuthor);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
async function copyWrapper(root) {
|
|
34
|
-
const source = path.join(SHARED_SKILLS_ROOT, "yss-ddd-scaffold-generator", "assets", "wrapper");
|
|
35
|
-
if (!await exists(source)) fail(`Maven Wrapper 资产不存在: ${source}`);
|
|
36
|
-
await cp(source, root, { recursive: true });
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function buildPlan(o, skillUtils, mavenSettings) {
|
|
40
|
-
const driver = o.database === "oceanbase-oracle" ? "com.oceanbase:oceanbase-client:2.4.3" : "com.oracle.database.jdbc:ojdbc8:19.8.0.0";
|
|
41
|
-
return {
|
|
42
|
-
project_name: o.projectName,
|
|
43
|
-
project_version: "2.0.0-SNAPSHOT",
|
|
44
|
-
base_package: o.basePackage,
|
|
45
|
-
target_dir: o.targetDir,
|
|
46
|
-
backend_root: ".",
|
|
47
|
-
skill_utils_dir: path.relative(o.targetDir, skillUtils.path).replaceAll(path.sep, "/"),
|
|
48
|
-
skill_utils_created: skillUtils.created,
|
|
49
|
-
skill_utils_refreshed: skillUtils.refreshed,
|
|
50
|
-
skill_utils_backup: skillUtils.backup,
|
|
51
|
-
repository_scope: "external-repository",
|
|
52
|
-
database: o.database,
|
|
53
|
-
database_driver: driver,
|
|
54
|
-
runtime_java: "8",
|
|
55
|
-
parent_pom: "com.yss.cloud:yss-cloud-microservice:2.0.0-SNAPSHOT",
|
|
56
|
-
components_bom: "com.yss.cloud:yss-components-bom:2.0.0-SNAPSHOT",
|
|
57
|
-
persistence_profile: "yss-mybatis-plus",
|
|
58
|
-
id_strategy: "ASSIGN_ID",
|
|
59
|
-
javadoc_author: o.gitAuthor,
|
|
60
|
-
maven_settings_mode: "external",
|
|
61
|
-
maven_settings_source: mavenSettings.source,
|
|
62
|
-
maven_settings_available: mavenSettings.available,
|
|
63
|
-
maven_settings_required: mavenSettings.available,
|
|
64
|
-
dependency_resolution: "deferred",
|
|
65
|
-
network_access_during_generation: "disabled",
|
|
66
|
-
features: ["audit", "distributed-id", "excel", "nacos", "redis", "openfeign", "smart-doc", "userinfo", "actuator"],
|
|
67
|
-
modules: MODULES,
|
|
68
|
-
mock_enabled: o.withMock,
|
|
69
|
-
project_instance: true,
|
|
70
|
-
git_initialized: true,
|
|
71
|
-
default_branch: "main",
|
|
72
|
-
endpoint: o.withMock ? "POST /api/analysis/query" : null
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
async function generate(o) {
|
|
77
|
-
await assertEmpty(o.targetDir);
|
|
78
|
-
const skillUtils = await ensureSkillUtils(o.targetDir, { apply: !o.dryRun });
|
|
79
|
-
assertGitAvailable();
|
|
80
|
-
o.gitAuthor = resolveGitAuthor();
|
|
81
|
-
generatedJavadocAuthor = o.gitAuthor;
|
|
82
|
-
const mavenSettings = await resolveMavenSettings(o);
|
|
83
|
-
const plan = buildPlan(o, skillUtils, mavenSettings);
|
|
84
|
-
if (o.dryRun) {
|
|
85
|
-
console.log(JSON.stringify({ mode: "dry-run", ...plan }, null, 2));
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
const targetParent = path.dirname(o.targetDir);
|
|
90
|
-
await mkdir(targetParent, { recursive: true });
|
|
91
|
-
const staging = await mkdtemp(path.join(targetParent, `.${path.basename(o.targetDir)}.staging-`));
|
|
92
|
-
const work = { ...o, targetDir: staging, modules: MODULES };
|
|
93
|
-
try {
|
|
94
|
-
for (const module of MODULES) {
|
|
95
|
-
await writeGenerated(work.targetDir, `${module}/pom.xml`, modulePom(work, module));
|
|
96
|
-
await mkdir(path.join(work.targetDir, module, "src/main/resources"), { recursive: true });
|
|
97
|
-
}
|
|
98
|
-
await writeGenerated(work.targetDir, "pom.xml", parentPom(work));
|
|
99
|
-
await writeJavaSources(work, writeGenerated);
|
|
100
|
-
const activeProfiles = `\${app.env:dev},datasource,nacos,${o.database === "oceanbase-oracle" ? "oceanbase-oracle" : "oracle"}${o.withMock ? ",mock" : ""}`;
|
|
101
|
-
await writeGenerated(work.targetDir, "server/src/main/resources/bootstrap.yml", `server:\n port: \${SERVER_PORT:8080}\nspring:\n application:\n name: \${APP_NAME:${o.projectName}}\n profiles:\n active: ${activeProfiles}\n main:\n allow-bean-definition-overriding: true\n servlet:\n multipart:\n max-file-size: \${MAX_FILE_SIZE:100MB}\n max-request-size: \${MAX_REQUEST_SIZE:100MB}`);
|
|
102
|
-
await writeGenerated(work.targetDir, "server/src/main/resources/bootstrap-nacos.yml", `spring:\n cloud:\n nacos:\n discovery:\n server-addr: \${nacosserver:192.168.165.58:8848}\n group: \${nacos_group:yss-dm}\n namespace: \${namespace:yss-datamiddle}\n enabled: true\n config:\n import-check:\n enabled: false\n server-addr: \${nacosserver:192.168.165.58:8848}\n namespace: \${namespace:yss-datamiddle}\n group: \${nacos_group:yss-dm}\n file-extension: yml\n enabled: true`);
|
|
103
|
-
if (o.withMock) await writeGenerated(work.targetDir, "server/src/main/resources/bootstrap-mock.yml", `spring:\n cloud:\n nacos:\n discovery:\n enabled: false\n config:\n enabled: false\n import-check:\n enabled: false`);
|
|
104
|
-
await writeGenerated(work.targetDir, "server/src/main/resources/application-mock.yml", `spring:\n autoconfigure:\n exclude:\n - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration\n - com.yss.cloud.mybatis.MybatisPlusConfiguration\n - com.yss.cloud.sankuai.config.LeafDataSourceConfiguration\n leaf:\n leafSegmentEnable: false\n leafSnowflakeEnable: false\nyss:\n audit:\n enabled: false`);
|
|
105
|
-
const driver = o.database === "oceanbase-oracle" ? "com.oceanbase.jdbc.Driver" : "oracle.jdbc.OracleDriver";
|
|
106
|
-
await writeGenerated(work.targetDir, `server/src/main/resources/application-${o.database}.yml`, `spring:\n datasource:\n driver-class-name: ${driver}\n url: \${DB_URL:}\n username: \${DB_USERNAME:}\n password: \${DB_PASSWORD:}\nyss:\n id:\n strategy: ASSIGN_ID`);
|
|
107
|
-
await writeGenerated(work.targetDir, "server/src/main/resources/logback-spring.xml", await renderAsset("logback-spring.xml.template", { PROJECT_NAME: o.projectName, BASE_PACKAGE: o.basePackage }));
|
|
108
|
-
await writeGenerated(work.targetDir, "server/src/main/resources/smart-doc.json", await renderAsset("smart-doc.json.template", { PROJECT_NAME: o.projectName, BASE_PACKAGE: o.basePackage, GENERATED_AT: new Date().toISOString() }));
|
|
109
|
-
await writeGenerated(staging, "README.md", `# ${o.projectName}\n\n项目根即 Maven 后端工程根,固定模块:${MODULES.join("、")}。\n\n## 依赖解析\n\n初始化阶段只生成文件和 Git 根,不执行 Maven,不下载依赖。未提供 settings 时仍会完整生成;后续验证时请使用 \`mvnw.cmd -s <settings.xml> validate\`(Windows)或 \`./mvnw -s <settings.xml> validate\`(Unix)。`);
|
|
110
|
-
await writeProjectEnvelope(work);
|
|
111
|
-
await copyWrapper(work.targetDir);
|
|
112
|
-
if (process.env.NODE_ENV === "test" && process.env.YSS_SCAFFOLD_TEST_FAIL_AFTER_STAGING === "1") fail("测试注入:staging 后失败");
|
|
113
|
-
initializeGit(staging);
|
|
114
|
-
await writeGenerated(staging, ".yss/scaffold-generation.json", JSON.stringify({ schema_version: 1, skill: SKILL_ID, generation_mode: "controlled-generation", generated_at: new Date().toISOString(), ...plan }, null, 2));
|
|
115
|
-
if (process.env.NODE_ENV === "test" && process.env.YSS_SCAFFOLD_TEST_WRITE_TARGET_DURING_STAGING === "1") await writeGenerated(o.targetDir, "keep.txt", "concurrent content");
|
|
116
|
-
if (await exists(o.targetDir)) await rmdir(o.targetDir);
|
|
117
|
-
await rename(staging, o.targetDir);
|
|
118
|
-
} catch (error) {
|
|
119
|
-
if (await exists(staging)) await rm(staging, { recursive: true, force: true });
|
|
120
|
-
throw error;
|
|
121
|
-
}
|
|
122
|
-
console.log(JSON.stringify({ mode: "generated", ...plan }, null, 2));
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
async function main() {
|
|
126
|
-
try {
|
|
127
|
-
const options = parseArgs(process.argv.slice(2));
|
|
128
|
-
if (options.help) { usage(); return 0; }
|
|
129
|
-
await generate(options);
|
|
130
|
-
return 0;
|
|
131
|
-
} catch (error) {
|
|
132
|
-
process.stderr.write(`\n❌ 生成失败: ${error.message}\n`);
|
|
133
|
-
return 1;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
process.exitCode = await main();
|
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
import test from "node:test";
|
|
2
|
-
// Historical Oracle/Mock fixtures; retained for migration audit only.
|
|
3
|
-
import assert from "node:assert/strict";
|
|
4
|
-
import { mkdtemp, readFile, readdir, rm, stat, writeFile, mkdir } from "node:fs/promises";
|
|
5
|
-
import { spawnSync } from "node:child_process";
|
|
6
|
-
import os from "node:os";
|
|
7
|
-
import path from "node:path";
|
|
8
|
-
import { fileURLToPath } from "node:url";
|
|
9
|
-
|
|
10
|
-
const script = path.join(path.dirname(fileURLToPath(import.meta.url)), "generate_project.mjs");
|
|
11
|
-
const verifyScript = path.join(path.dirname(fileURLToPath(import.meta.url)), "verify_project.mjs");
|
|
12
|
-
const harnessRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../../..");
|
|
13
|
-
const gitAuthorEnvironment = {
|
|
14
|
-
GIT_CONFIG_COUNT: "1",
|
|
15
|
-
GIT_CONFIG_KEY_0: "user.name",
|
|
16
|
-
GIT_CONFIG_VALUE_0: "Scaffold Tester"
|
|
17
|
-
};
|
|
18
|
-
function run(args, options = {}) {
|
|
19
|
-
return spawnSync(process.execPath, [script, ...args], {
|
|
20
|
-
encoding: "utf8",
|
|
21
|
-
...options,
|
|
22
|
-
env: { ...process.env, ...gitAuthorEnvironment, ...(options.env ?? {}) }
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
async function expectedDistributedLock() {
|
|
26
|
-
const lock = JSON.parse(await readFile(path.join(harnessRoot, "skills-lock.json"), "utf8"));
|
|
27
|
-
delete lock.skills?.shared?.["yss-mvc-scaffold-generator"];
|
|
28
|
-
for (const platform of Object.values(lock.skills?.platform ?? {})) delete platform?.["yss-mvc-scaffold-generator"];
|
|
29
|
-
return `${JSON.stringify(lock, null, 2)}\n`;
|
|
30
|
-
}
|
|
31
|
-
test("生成固定六模块和 mock endpoint", async (t) => {
|
|
32
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-scaffold-")); t.after(() => rm(base, { recursive: true, force: true }));
|
|
33
|
-
const target = path.join(base, "item1"); const result = run(["--project-name", "data-analysis-item1", "--base-package", "com.yss.dataanalysis.item1", "--target-dir", target, "--database", "oracle", "--with-mock"]);
|
|
34
|
-
assert.equal(result.status, 0, result.stderr); const backend = target; const pom = await readFile(path.join(backend, "pom.xml"), "utf8");
|
|
35
|
-
const skillUtils = path.join(base, "skillUtils");
|
|
36
|
-
for (const module of ["server", "core", "client", "repository", "adapter", "feign-client"]) assert.match(pom, new RegExp(`<module>${module}</module>`));
|
|
37
|
-
const controller = await readFile(path.join(backend, "server/src/main/java/com/yss/dataanalysis/item1/server/controller/AnalysisController.java"), "utf8"); assert.match(controller, /\/api\/analysis/); assert.doesNotMatch(controller, /;[ \t]+import /);
|
|
38
|
-
assert.match(controller, /\* \u6570\u636e\u5206\u6790\u67e5\u8be2\u63a5\u53e3\u3002/);
|
|
39
|
-
assert.match(controller, /@author Scaffold Tester/);
|
|
40
|
-
assert.match(controller, /@date \d{4}\/\d{2}\/\d{2} \d{2}:\d{2}/);
|
|
41
|
-
assert.match(controller, /\* \u5206\u9875\u67e5\u8be2\u6570\u636e\u5206\u6790\u7ed3\u679c\u3002[\s\S]*@param query[\s\S]*@return \u6570\u636e\u5206\u6790\u5206\u9875\u7ed3\u679c/);
|
|
42
|
-
const mock = await readFile(path.join(backend, "adapter/src/main/java/com/yss/dataanalysis/item1/adapter/mock/MockAnalysisQueryExecutor.java"), "utf8"); assert.match(mock, /source|"mock"/);
|
|
43
|
-
const configuration = await readFile(path.join(backend, "server/src/main/java/com/yss/dataanalysis/item1/server/configuration/AnalysisConfiguration.java"), "utf8"); assert.match(configuration, /Profile\("mock"\)/); assert.match(configuration, /Profile\("oracle & !mock"\)/);
|
|
44
|
-
await readFile(path.join(backend, "server/src/main/java/com/yss/dataanalysis/item1/Application.java"), "utf8");
|
|
45
|
-
const controllerTest = await readFile(path.join(backend, "server/src/test/java/com/yss/dataanalysis/item1/server/controller/AnalysisControllerTest.java"), "utf8");
|
|
46
|
-
assert.match(controllerTest, /pageNo/);
|
|
47
|
-
assert.match(await readFile(path.join(target, "yss-project.yaml"), "utf8"), /repository_mode: project-instance/);
|
|
48
|
-
const generatedAgents = await readFile(path.join(target, "AGENTS.md"), "utf8");
|
|
49
|
-
assert.match(generatedAgents, /当前仓库是 `project-instance`,模板维护只在上游 Harness 执行/);
|
|
50
|
-
assert.doesNotMatch(generatedAgents, /按“影响面 → 单一事实来源 → 投影 \/ 派生资产 → 分级证据”维护/);
|
|
51
|
-
assert.match(await readFile(path.join(target, "CONTEXT.md"), "utf8"), /AnalysisDataset/);
|
|
52
|
-
assert.match(await readFile(path.join(target, ".artifact-workspace.yaml"), "utf8"), /kind: service/);
|
|
53
|
-
assert.match(await readFile(path.join(target, "docs/service/module-map.md"), "utf8"), /feign-client/);
|
|
54
|
-
assert.match(await readFile(path.join(target, "docs/service/current-capabilities.md"), "utf8"), /普通功能开发不手工修改/);
|
|
55
|
-
assert.match(await readFile(path.join(target, "docs/process/implementation-repo-registry.yaml"), "utf8"), /repository_scope: external-repository/);
|
|
56
|
-
const analysisProject = await readFile(path.join(target, "docs/process/analysis-project.yaml"), "utf8"); assert.match(analysisProject, /project_name: data-analysis-item1/); assert.doesNotMatch(analysisProject, /galaxy-data-analysis|fegin-client/);
|
|
57
|
-
assert.match(await readFile(path.join(target, "docs/process/lifecycle-registry.yaml"), "utf8"), /schema_version:/);
|
|
58
|
-
assert.match(await readFile(path.join(target, "docs/templates/vertical-slice-ticket-template.md"), "utf8"), /status: ready-for-human/);
|
|
59
|
-
assert.match(await readFile(path.join(target, "docs/templates/local-parent-ticket-template.md"), "utf8"), /lifecycle_status \| routing \/ running \/ paused-human-gate \/ blocked \/ completed/);
|
|
60
|
-
const lifecycleContract = await readFile(path.join(skillUtils, ".agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml"), "utf8");
|
|
61
|
-
assert.match(lifecycleContract, /entry_routing:/);
|
|
62
|
-
assert.match(lifecycleContract, /workflow_execution_result:/);
|
|
63
|
-
assert.match(lifecycleContract, /work_unit_routes:/);
|
|
64
|
-
assert.match(await readFile(path.join(target, "docs/templates/approval-record-template.yaml"), "utf8"), /gate_id:/);
|
|
65
|
-
assert.match(await readFile(path.join(target, "docs/templates/implementation-routing-template.md"), "utf8"), /implementation/);
|
|
66
|
-
assert.match(await readFile(path.join(target, "docs/templates/verification-record-template.md"), "utf8"), /verification/i);
|
|
67
|
-
await readFile(path.join(skillUtils, ".agents/skills/yss-product-lifecycle/SKILL.md"), "utf8");
|
|
68
|
-
for (const projection of [".agents", ".claude", ".codex", ".cursor", ".pi", ".qoder", ".trae"]) {
|
|
69
|
-
await assert.rejects(stat(path.join(skillUtils, projection, "skills/yss-mvc-scaffold-generator")), { code: "ENOENT" });
|
|
70
|
-
}
|
|
71
|
-
assert.equal(path.resolve(spawnSync("git", ["-C", target, "rev-parse", "--show-toplevel"], { encoding: "utf8" }).stdout.trim()), path.resolve(target));
|
|
72
|
-
assert.equal(spawnSync("git", ["-C", target, "branch", "--show-current"], { encoding: "utf8" }).stdout.trim(), "main");
|
|
73
|
-
assert.equal(spawnSync("git", ["-C", target, "rev-list", "--all", "--count"], { encoding: "utf8" }).stdout.trim(), "0");
|
|
74
|
-
assert.equal(spawnSync("git", ["-C", target, "remote"], { encoding: "utf8" }).stdout.trim(), "");
|
|
75
|
-
const verification = spawnSync(process.execPath, [verifyScript, "--project-root", target], { encoding: "utf8" });
|
|
76
|
-
assert.equal(verification.status, 0, verification.stderr);
|
|
77
|
-
await assert.rejects(stat(path.join(skillUtils, ".agents/skills/data-analysis-java-implementation")), { code: "ENOENT" });
|
|
78
|
-
const implementationRegistry = await readFile(path.join(target, "docs/process/implementation-repo-registry.yaml"), "utf8");
|
|
79
|
-
assert.doesNotMatch(implementationRegistry, /data-analysis-java-implementation|verify_java_web_style\.mjs/);
|
|
80
|
-
assert.match(implementationRegistry, /fmt-maven-plugin:2\.9\.1:check/);
|
|
81
|
-
assert.doesNotMatch(implementationRegistry, /smart-doc-maven-plugin:[^\s]+:openapi/);
|
|
82
|
-
assert.doesNotMatch(implementationRegistry, /smart-doc-verification\.md/);
|
|
83
|
-
const projectInstanceDocs = await Promise.all([
|
|
84
|
-
"AGENTS.md",
|
|
85
|
-
"docs/agents/skills-maintenance.md",
|
|
86
|
-
"docs/agents/gitlab-workflow-skills.md",
|
|
87
|
-
"docs/agents/issue-tracker.md",
|
|
88
|
-
"docs/process/implementation-repo-integration.md",
|
|
89
|
-
"docs/process/harness-process-tailoring.md",
|
|
90
|
-
"docs/templates/build-architecture-checklist-template.md"
|
|
91
|
-
].map((relative) => readFile(path.join(target, relative), "utf8")));
|
|
92
|
-
const staleProjectCommands = /scripts\/(?:verify-template|sync-skills|update-skill-lock|export-yss-skills|verify-upstream-skill-source|verify-maintenance-checkpoint|verify-implementation-path-scenarios|gitworks)/;
|
|
93
|
-
for (const body of projectInstanceDocs) assert.doesNotMatch(body, staleProjectCommands);
|
|
94
|
-
const serverPom = await readFile(path.join(backend, "server/pom.xml"), "utf8");
|
|
95
|
-
assert.match(serverPom, /<profiles>[\s\S]*<id>nacos<\/id>[\s\S]*<activeByDefault>true<\/activeByDefault>/);
|
|
96
|
-
assert.match(serverPom, /<app\.env>dev<\/app\.env>[\s\S]*<app\.profiles>nacos<\/app\.profiles>/);
|
|
97
|
-
assert.match(serverPom, /spring-boot-maven-plugin/);
|
|
98
|
-
assert.match(serverPom, /<includes>[\s\S]*data-analysis-item1-client[\s\S]*data-analysis-item1-core[\s\S]*data-analysis-item1-repository[\s\S]*<\/includes>/);
|
|
99
|
-
const smartDocPlugin = serverPom.match(/<plugin>(?:(?!<\/plugin>)[\s\S])*?<artifactId>smart-doc-maven-plugin<\/artifactId>(?:(?!<\/plugin>)[\s\S])*?<\/plugin>/)?.[0];
|
|
100
|
-
assert.ok(smartDocPlugin);
|
|
101
|
-
assert.doesNotMatch(smartDocPlugin, /<executions>/);
|
|
102
|
-
const smartDoc = await readFile(path.join(backend, "server/src/main/resources/smart-doc.json"), "utf8");
|
|
103
|
-
assert.match(smartDoc, /"projectName": "data-analysis-item1"/);
|
|
104
|
-
assert.match(smartDoc, /"packageFilters": "com\.yss\.dataanalysis\.item1\.server\.controller\.\*"/);
|
|
105
|
-
assert.match(smartDoc, /"showAuthor": true/);
|
|
106
|
-
assert.match(smartDoc, /"appToken": ""/);
|
|
107
|
-
assert.doesNotMatch(smartDoc, /43fd1d4bc1c743c1b83bf4843e8167bf|192\.168\./);
|
|
108
|
-
const logback = await readFile(path.join(backend, "server/src/main/resources/logback-spring.xml"), "utf8");
|
|
109
|
-
assert.match(logback, /springProfile name="dev,mock"/);
|
|
110
|
-
assert.match(logback, /springProfile name="uat,pro,oracle,oceanbase-oracle"/);
|
|
111
|
-
assert.match(logback, /com\.yss\.dataanalysis\.item1/);
|
|
112
|
-
const bootstrap = await readFile(path.join(backend, "server/src/main/resources/bootstrap.yml"), "utf8");
|
|
113
|
-
assert.match(bootstrap, /active: \$\{app\.env:dev\},datasource,nacos,oracle,mock/);
|
|
114
|
-
assert.doesNotMatch(bootstrap, /mock,\s*$/m);
|
|
115
|
-
const bootstrapNacos = await readFile(path.join(backend, "server/src/main/resources/bootstrap-nacos.yml"), "utf8");
|
|
116
|
-
assert.match(bootstrapNacos, /server-addr: \$\{nacosserver:192\.168\.165\.58:8848\}/);
|
|
117
|
-
assert.match(bootstrapNacos, /group: \$\{nacos_group:yss-dm\}/);
|
|
118
|
-
assert.match(bootstrapNacos, /discovery:[\s\S]*enabled: true[\s\S]*config:[\s\S]*enabled: true/);
|
|
119
|
-
const bootstrapMock = await readFile(path.join(backend, "server/src/main/resources/bootstrap-mock.yml"), "utf8");
|
|
120
|
-
assert.match(bootstrapMock, /discovery:[\s\S]*enabled: false/);
|
|
121
|
-
assert.match(bootstrapMock, /config:[\s\S]*enabled: false[\s\S]*import-check:[\s\S]*enabled: false/);
|
|
122
|
-
const applicationMock = await readFile(path.join(backend, "server/src/main/resources/application-mock.yml"), "utf8");
|
|
123
|
-
assert.match(applicationMock, /leaf:[\s\S]*leafSegmentEnable: false[\s\S]*leafSnowflakeEnable: false/);
|
|
124
|
-
assert.match(applicationMock, /com\.yss\.cloud\.mybatis\.MybatisPlusConfiguration/);
|
|
125
|
-
assert.match(applicationMock, /com\.yss\.cloud\.sankuai\.config\.LeafDataSourceConfiguration/);
|
|
126
|
-
const application = await readFile(path.join(backend, "server/src/main/java/com/yss/dataanalysis/item1/Application.java"), "utf8");
|
|
127
|
-
assert.doesNotMatch(application, /@EnableDistributedId/);
|
|
128
|
-
const databaseInfrastructure = await readFile(path.join(backend, "server/src/main/java/com/yss/dataanalysis/item1/server/configuration/DatabaseInfrastructureConfiguration.java"), "utf8");
|
|
129
|
-
assert.match(databaseInfrastructure, /@Profile\("!mock"\)/);
|
|
130
|
-
assert.match(databaseInfrastructure, /@EnableDistributedId/);
|
|
131
|
-
assert.match(databaseInfrastructure, /@Import\(MapperConfiguration.class\)/);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
test("已有 skillUtils 落后时原子刷新并保留备份", async (t) => {
|
|
135
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-skill-refresh-"));
|
|
136
|
-
t.after(() => rm(base, { recursive: true, force: true }));
|
|
137
|
-
const skillUtils = path.join(base, "skillUtils");
|
|
138
|
-
await mkdir(skillUtils, { recursive: true });
|
|
139
|
-
await writeFile(path.join(skillUtils, "skill-utils.yaml"), "schema_version: 1\nkind: yss-skill-utils\n", "utf8");
|
|
140
|
-
await writeFile(path.join(skillUtils, "skills-lock.json"), "{\"version\":0}\n", "utf8");
|
|
141
|
-
await writeFile(path.join(skillUtils, "local-marker.txt"), "preserve old installation\n", "utf8");
|
|
142
|
-
const target = path.join(base, "item-refresh");
|
|
143
|
-
const result = run(["--project-name", "data-analysis-refresh", "--base-package", "com.yss.dataanalysis.refresh", "--target-dir", target]);
|
|
144
|
-
assert.equal(result.status, 0, result.stderr);
|
|
145
|
-
const output = JSON.parse(result.stdout);
|
|
146
|
-
assert.equal(output.skill_utils_created, false);
|
|
147
|
-
assert.equal(output.skill_utils_refreshed, true);
|
|
148
|
-
assert.ok(output.skill_utils_backup);
|
|
149
|
-
assert.equal(await readFile(path.join(output.skill_utils_backup, "local-marker.txt"), "utf8"), "preserve old installation\n");
|
|
150
|
-
assert.equal(await readFile(path.join(skillUtils, "skills-lock.json"), "utf8"), await expectedDistributedLock());
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
test("已有 skillUtils 与源锁一致时直接复用", async (t) => {
|
|
154
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-skill-reuse-"));
|
|
155
|
-
t.after(() => rm(base, { recursive: true, force: true }));
|
|
156
|
-
const first = run(["--project-name", "data-analysis-reuse-a", "--base-package", "com.yss.dataanalysis.reusea", "--target-dir", path.join(base, "item-a")]);
|
|
157
|
-
assert.equal(first.status, 0, first.stderr);
|
|
158
|
-
const second = run(["--project-name", "data-analysis-reuse-b", "--base-package", "com.yss.dataanalysis.reuseb", "--target-dir", path.join(base, "item-b")]);
|
|
159
|
-
assert.equal(second.status, 0, second.stderr);
|
|
160
|
-
const output = JSON.parse(second.stdout);
|
|
161
|
-
assert.equal(output.skill_utils_created, false);
|
|
162
|
-
assert.equal(output.skill_utils_refreshed, false);
|
|
163
|
-
assert.equal(output.skill_utils_backup, null);
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
test("dry-run 仅报告 skillUtils 将刷新且不修改旧目录", async (t) => {
|
|
167
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-skill-dry-refresh-"));
|
|
168
|
-
t.after(() => rm(base, { recursive: true, force: true }));
|
|
169
|
-
const skillUtils = path.join(base, "skillUtils");
|
|
170
|
-
await mkdir(skillUtils, { recursive: true });
|
|
171
|
-
await writeFile(path.join(skillUtils, "skill-utils.yaml"), "schema_version: 1\nkind: yss-skill-utils\n", "utf8");
|
|
172
|
-
await writeFile(path.join(skillUtils, "skills-lock.json"), "{\"version\":0}\n", "utf8");
|
|
173
|
-
const result = run(["--project-name", "data-analysis-dry-refresh", "--base-package", "com.yss.dataanalysis.dryrefresh", "--target-dir", path.join(base, "item"), "--dry-run"]);
|
|
174
|
-
assert.equal(result.status, 0, result.stderr);
|
|
175
|
-
const output = JSON.parse(result.stdout);
|
|
176
|
-
assert.equal(output.skill_utils_refreshed, true);
|
|
177
|
-
assert.equal(output.skill_utils_backup, null);
|
|
178
|
-
assert.equal(await readFile(path.join(skillUtils, "skills-lock.json"), "utf8"), "{\"version\":0}\n");
|
|
179
|
-
assert.deepEqual((await readdir(base)).sort(), ["skillUtils"]);
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
test("Git 当前用户写入 Javadoc 且缺失时拒绝生成", async (t) => {
|
|
183
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-author-")); t.after(() => rm(base, { recursive: true, force: true }));
|
|
184
|
-
const target = path.join(base, "author-project");
|
|
185
|
-
const generated = run(["--project-name", "author-project", "--base-package", "com.yss.author", "--target-dir", target], {
|
|
186
|
-
env: { GIT_CONFIG_VALUE_0: "张三" }
|
|
187
|
-
});
|
|
188
|
-
assert.equal(generated.status, 0, generated.stderr);
|
|
189
|
-
const controller = await readFile(path.join(target, "server/src/main/java/com/yss/author/server/controller/AnalysisController.java"), "utf8");
|
|
190
|
-
assert.match(controller, /@author 张三/);
|
|
191
|
-
assert.doesNotMatch(controller, /@author system/);
|
|
192
|
-
|
|
193
|
-
const missingTarget = path.join(base, "missing-author");
|
|
194
|
-
const missing = run(["--project-name", "missing-author", "--base-package", "com.yss.missing", "--target-dir", missingTarget], {
|
|
195
|
-
env: { GIT_CONFIG_COUNT: "0", GIT_CONFIG_NOSYSTEM: "1", GIT_CONFIG_GLOBAL: path.join(base, "not-found.gitconfig") }
|
|
196
|
-
});
|
|
197
|
-
assert.notEqual(missing.status, 0);
|
|
198
|
-
assert.match(missing.stderr, /Git user\.name/);
|
|
199
|
-
await assert.rejects(stat(missingTarget), { code: "ENOENT" });
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
test("不启用 Mock 时不生成 bootstrap-mock 且不激活 mock profile", async (t) => {
|
|
203
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-no-mock-profile-")); t.after(() => rm(base, { recursive: true, force: true }));
|
|
204
|
-
const target = path.join(base, "data-analysis-no-mock");
|
|
205
|
-
const result = run(["--project-name", "data-analysis-no-mock", "--base-package", "com.yss.dataanalysis.nomock", "--target-dir", target]);
|
|
206
|
-
assert.equal(result.status, 0, result.stderr);
|
|
207
|
-
const bootstrap = await readFile(path.join(target, "server/src/main/resources/bootstrap.yml"), "utf8");
|
|
208
|
-
assert.match(bootstrap, /active: \$\{app\.env:dev\},datasource,nacos,oracle/);
|
|
209
|
-
assert.doesNotMatch(bootstrap, /,mock/);
|
|
210
|
-
await assert.rejects(stat(path.join(target, "server/src/main/resources/bootstrap-mock.yml")), { code: "ENOENT" });
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
test("Maven settings \u4f5c\u4e3a外部验证输入且不写入项目", async (t) => {
|
|
214
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-settings-")); t.after(() => rm(base, { recursive: true, force: true }));
|
|
215
|
-
const settings = path.join(base, "settings.xml");
|
|
216
|
-
await writeFile(settings, "<settings/>\n");
|
|
217
|
-
const target = path.join(base, "data-analysis-item-settings");
|
|
218
|
-
const result = run(["--project-name", "data-analysis-item-settings", "--base-package", "com.yss.dataanalysis.settings", "--target-dir", target, "--maven-settings", settings]);
|
|
219
|
-
assert.equal(result.status, 0, result.stderr);
|
|
220
|
-
const manifest = await readFile(path.join(target, ".yss/scaffold-generation.json"), "utf8");
|
|
221
|
-
assert.match(manifest, /"maven_settings_mode": "external"/);
|
|
222
|
-
assert.match(manifest, /"maven_settings_required": true/);
|
|
223
|
-
assert.doesNotMatch(manifest, new RegExp(settings.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")));
|
|
224
|
-
assert.equal((await readdir(target)).includes("settings.xml"), false);
|
|
225
|
-
});
|
|
226
|
-
test("Maven settings 支持环境变量且显式参数优先", async (t) => {
|
|
227
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-settings-resolution-")); t.after(() => rm(base, { recursive: true, force: true }));
|
|
228
|
-
const environmentSettings = path.join(base, "environment-settings.xml");
|
|
229
|
-
const explicitSettings = path.join(base, "explicit-settings.xml");
|
|
230
|
-
await writeFile(environmentSettings, "<settings/>\n");
|
|
231
|
-
await writeFile(explicitSettings, "<settings/>\n");
|
|
232
|
-
const environmentTarget = path.join(base, "environment-project");
|
|
233
|
-
const fromEnvironment = run(["--project-name", "environment-project", "--base-package", "com.yss.environment", "--target-dir", environmentTarget, "--dry-run"], { env: { YSS_MAVEN_SETTINGS: environmentSettings } });
|
|
234
|
-
assert.equal(fromEnvironment.status, 0, fromEnvironment.stderr);
|
|
235
|
-
assert.match(fromEnvironment.stdout, /"maven_settings_source": "environment"/);
|
|
236
|
-
const explicitTarget = path.join(base, "explicit-project");
|
|
237
|
-
const fromExplicit = run(["--project-name", "explicit-project", "--base-package", "com.yss.explicit", "--target-dir", explicitTarget, "--maven-settings", explicitSettings, "--dry-run"], { env: { YSS_MAVEN_SETTINGS: environmentSettings } });
|
|
238
|
-
assert.equal(fromExplicit.status, 0, fromExplicit.stderr);
|
|
239
|
-
assert.match(fromExplicit.stdout, /"maven_settings_source": "explicit"/);
|
|
240
|
-
});
|
|
241
|
-
test("未指定 settings 时仍完整生成,并将依赖解析延后到验证阶段", async (t) => {
|
|
242
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "yss-mvc-no-settings-"));
|
|
243
|
-
t.after(() => rm(base, { recursive: true, force: true }));
|
|
244
|
-
const target = path.join(base, "no-settings-project");
|
|
245
|
-
const result = run(["--project-name", "no-settings-project", "--base-package", "com.yss.nosettings", "--target-dir", target], {
|
|
246
|
-
env: { YSS_MAVEN_SETTINGS: "", USERPROFILE: path.join(base, "missing-user"), HOME: path.join(base, "missing-home") }
|
|
247
|
-
});
|
|
248
|
-
assert.equal(result.status, 0, result.stderr);
|
|
249
|
-
const output = JSON.parse(result.stdout);
|
|
250
|
-
assert.equal(output.maven_settings_source, "maven-default");
|
|
251
|
-
assert.equal(output.maven_settings_available, false);
|
|
252
|
-
assert.equal(output.dependency_resolution, "deferred");
|
|
253
|
-
assert.equal(output.network_access_during_generation, "disabled");
|
|
254
|
-
for (const module of ["server", "core", "client", "repository", "adapter", "feign-client"]) {
|
|
255
|
-
await stat(path.join(target, module, "pom.xml"));
|
|
256
|
-
}
|
|
257
|
-
await stat(path.join(target, "mvnw"));
|
|
258
|
-
assert.equal((await readdir(target)).includes("settings.xml"), false);
|
|
259
|
-
});
|
|
260
|
-
test("拒绝非空目标目录", async (t) => {
|
|
261
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-scaffold-nonempty-")); t.after(() => rm(base, { recursive: true, force: true })); await mkdir(base, { recursive: true }); await writeFile(path.join(base, "keep.txt"), "keep");
|
|
262
|
-
const result = run(["--project-name", "data-analysis-item1", "--base-package", "com.yss.dataanalysis.item1", "--target-dir", base]); assert.notEqual(result.status, 0); assert.match(result.stderr, /目标目录非空/);
|
|
263
|
-
});
|
|
264
|
-
test("允许已存在的空目标目录", async (t) => {
|
|
265
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-empty-target-")); t.after(() => rm(base, { recursive: true, force: true }));
|
|
266
|
-
const target = path.join(base, "data-analysis-item-empty"); await mkdir(target);
|
|
267
|
-
const result = run(["--project-name", "data-analysis-item-empty", "--base-package", "com.yss.dataanalysis.empty", "--target-dir", target]);
|
|
268
|
-
assert.equal(result.status, 0, result.stderr);
|
|
269
|
-
assert.equal(path.resolve(spawnSync("git", ["-C", target, "rev-parse", "--show-toplevel"], { encoding: "utf8" }).stdout.trim()), path.resolve(target));
|
|
270
|
-
});
|
|
271
|
-
test("嵌套在父仓目录时仍初始化为独立 Git 根", async (t) => {
|
|
272
|
-
const parent = await mkdtemp(path.join(os.tmpdir(), "data-analysis-parent-repo-")); t.after(() => rm(parent, { recursive: true, force: true }));
|
|
273
|
-
assert.equal(spawnSync("git", ["init", "--initial-branch=parent-main", parent], { encoding: "utf8" }).status, 0);
|
|
274
|
-
const target = path.join(parent, "data-analysis-item2");
|
|
275
|
-
const result = run(["--project-name", "data-analysis-item2", "--base-package", "com.yss.dataanalysis.item2", "--target-dir", target]);
|
|
276
|
-
assert.equal(result.status, 0, result.stderr);
|
|
277
|
-
assert.equal(path.resolve(spawnSync("git", ["-C", target, "rev-parse", "--show-toplevel"], { encoding: "utf8" }).stdout.trim()), path.resolve(target));
|
|
278
|
-
assert.equal(spawnSync("git", ["-C", target, "branch", "--show-current"], { encoding: "utf8" }).stdout.trim(), "main");
|
|
279
|
-
});
|
|
280
|
-
test("dry-run 不创建目录或 Git 仓库", async (t) => {
|
|
281
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-dry-run-")); t.after(() => rm(base, { recursive: true, force: true }));
|
|
282
|
-
const target = path.join(base, "data-analysis-item3");
|
|
283
|
-
const result = run(["--project-name", "data-analysis-item3", "--base-package", "com.yss.dataanalysis.item3", "--target-dir", target, "--dry-run"]);
|
|
284
|
-
assert.equal(result.status, 0, result.stderr);
|
|
285
|
-
assert.match(result.stdout, /"mode": "dry-run"/);
|
|
286
|
-
assert.equal(spawnSync("git", ["-C", target, "rev-parse", "--show-toplevel"], { encoding: "utf8" }).status, 128);
|
|
287
|
-
});
|
|
288
|
-
test("Git 预检失败时不留下目标目录或 staging", async (t) => {
|
|
289
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-no-git-")); t.after(() => rm(base, { recursive: true, force: true }));
|
|
290
|
-
const target = path.join(base, "data-analysis-item4");
|
|
291
|
-
const result = run(["--project-name", "data-analysis-item4", "--base-package", "com.yss.dataanalysis.item4", "--target-dir", target], { env: { ...process.env, PATH: "" } });
|
|
292
|
-
assert.notEqual(result.status, 0); assert.match(result.stderr, /未检测到可用的 Git/);
|
|
293
|
-
await assert.rejects(stat(target), { code: "ENOENT" });
|
|
294
|
-
assert.deepEqual((await readdir(base)).filter((name) => name.includes(".staging-")), []);
|
|
295
|
-
});
|
|
296
|
-
test("staging 创建后中间步骤失败时只清理本轮 staging", async (t) => {
|
|
297
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-git-init-fail-")); t.after(() => rm(base, { recursive: true, force: true }));
|
|
298
|
-
const occupied = path.join(base, ".data-analysis-item5.staging-occupied"); await mkdir(occupied); await writeFile(path.join(occupied, "keep.txt"), "keep");
|
|
299
|
-
const target = path.join(base, "data-analysis-item5");
|
|
300
|
-
const result = run(["--project-name", "data-analysis-item5", "--base-package", "com.yss.dataanalysis.item5", "--target-dir", target], { env: { ...process.env, NODE_ENV: "test", YSS_SCAFFOLD_TEST_FAIL_AFTER_STAGING: "1" } });
|
|
301
|
-
assert.notEqual(result.status, 0); assert.match(result.stderr, /staging 后失败/);
|
|
302
|
-
await assert.rejects(stat(target), { code: "ENOENT" });
|
|
303
|
-
assert.equal(await readFile(path.join(occupied, "keep.txt"), "utf8"), "keep");
|
|
304
|
-
assert.deepEqual((await readdir(base)).filter((name) => name.startsWith(".data-analysis-item5.staging-") && name !== path.basename(occupied)), []);
|
|
305
|
-
});
|
|
306
|
-
test("生成期间空目标目录被写入时保留新内容并拒绝替换", async (t) => {
|
|
307
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-target-race-")); t.after(() => rm(base, { recursive: true, force: true }));
|
|
308
|
-
const target = path.join(base, "data-analysis-item6"); await mkdir(target);
|
|
309
|
-
const result = run(["--project-name", "data-analysis-item6", "--base-package", "com.yss.dataanalysis.item6", "--target-dir", target], { env: { ...process.env, NODE_ENV: "test", YSS_SCAFFOLD_TEST_WRITE_TARGET_DURING_STAGING: "1" } });
|
|
310
|
-
assert.notEqual(result.status, 0);
|
|
311
|
-
assert.equal(await readFile(path.join(target, "keep.txt"), "utf8"), "concurrent content\n");
|
|
312
|
-
assert.deepEqual((await readdir(base)).filter((name) => name.startsWith(".data-analysis-item6.staging-")), []);
|
|
313
|
-
});
|
|
314
|
-
test("结构验证器拒绝与生成清单不一致的实现仓登记", async (t) => {
|
|
315
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-registry-drift-")); t.after(() => rm(base, { recursive: true, force: true }));
|
|
316
|
-
const target = path.join(base, "data-analysis-item7");
|
|
317
|
-
const result = run(["--project-name", "data-analysis-item7", "--base-package", "com.yss.dataanalysis.item7", "--target-dir", target]);
|
|
318
|
-
assert.equal(result.status, 0, result.stderr);
|
|
319
|
-
const registryPath = path.join(target, "docs/process/implementation-repo-registry.yaml");
|
|
320
|
-
const registry = await readFile(registryPath, "utf8");
|
|
321
|
-
await writeFile(registryPath, registry.replace("repository_scope: external-repository", "repository_scope: harness-apps"));
|
|
322
|
-
const verification = spawnSync(process.execPath, [verifyScript, "--project-root", target], { encoding: "utf8" });
|
|
323
|
-
assert.notEqual(verification.status, 0);
|
|
324
|
-
assert.match(verification.stderr, /实现仓登记与生成清单不一致/);
|
|
325
|
-
});
|
|
326
|
-
test("OceanBase Oracle 仅生成指定驱动并保持 Java 8 基线", async (t) => {
|
|
327
|
-
const base = await mkdtemp(path.join(os.tmpdir(), "data-analysis-oceanbase-")); t.after(() => rm(base, { recursive: true, force: true }));
|
|
328
|
-
const target = path.join(base, "data-analysis-item8");
|
|
329
|
-
const result = run(["--project-name", "data-analysis-item8", "--base-package", "com.yss.dataanalysis.item8", "--target-dir", target, "--database", "oceanbase-oracle", "--with-mock"]);
|
|
330
|
-
assert.equal(result.status, 0, result.stderr);
|
|
331
|
-
const parentPom = await readFile(path.join(target, "pom.xml"), "utf8");
|
|
332
|
-
const repositoryPom = await readFile(path.join(target, "repository/pom.xml"), "utf8");
|
|
333
|
-
assert.match(parentPom, /<java.version>1.8<\/java.version>/);
|
|
334
|
-
assert.match(parentPom, /<version>2.0.0-SNAPSHOT<\/version>/);
|
|
335
|
-
assert.match(repositoryPom, /oceanbase-client/);
|
|
336
|
-
assert.doesNotMatch(repositoryPom, /ojdbc8/);
|
|
337
|
-
const querySource = await readFile(path.join(target, "client/src/main/java/com/yss/dataanalysis/item8/client/query/AnalysisQuery.java"), "utf8");
|
|
338
|
-
assert.doesNotMatch(querySource, /\brecord\b|List\.of|Map\.of|jakarta\./);
|
|
339
|
-
const verification = spawnSync(process.execPath, [verifyScript, "--project-root", target], { encoding: "utf8" });
|
|
340
|
-
assert.equal(verification.status, 0, verification.stderr);
|
|
341
|
-
});
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: yss-mvc-scaffold-generator
|
|
3
|
-
description: 从空目录初始化独立 Git 管理的 YSS Java 8 MVC 数据分析 project-instance,生成固定六模块、YSS 标准组件、Oracle/OceanBase Oracle 与 Mock HTTP API;不用于通用 DDD 服务。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# YSS MVC Scaffold Generator
|
|
7
|
-
|
|
8
|
-
本 Skill 是 YSS MVC 数据分析项目的确定性机械生成器。它生成独立 `project-instance`、独立 Git 仓库,并将项目根直接作为 Maven 工程根,包含 `server`、`core`、`client`、`repository`、`adapter`、`feign-client` 六模块;业务功能仍须回到 `yss-product-lifecycle` 与 `yss-implementation-contract-compiler` 按垂直切片实现。
|
|
9
|
-
|
|
10
|
-
生成器编排入口位于 `scripts/generate_project.mjs`,参数与环境解析、skillUtils 文件操作、项目治理封装和 Maven/Java 模板分别位于 `scripts/lib/`。初始化阶段只写入 staging 目录并在成功后原子重命名,不执行 Maven 或网络依赖下载。
|
|
11
|
-
|
|
12
|
-
用户以“初始化新项目”进入时,由 `product-service-artifacts` 调用本生成器并默认附加 `docs/service/` 服务级研发产物;不要要求用户在提示词中另行说明“初始化产物”。未提供职责时生成 `skeleton`,不阻断工程创建。
|
|
13
|
-
|
|
14
|
-
## 输入
|
|
15
|
-
|
|
16
|
-
- `project-name`:小写连字符项目名。
|
|
17
|
-
- `base-package`:合法 Java 包名。
|
|
18
|
-
- `target-dir`:最终项目根目录,必须显式给出。
|
|
19
|
-
- `database`:支持 `oracle`、`oceanbase-oracle`,默认 `oracle`。
|
|
20
|
-
- `with-mock`:生成 `mock` Profile、Mock 执行器及 HTTP 冒烟测试。
|
|
21
|
-
- `maven-settings`:可选的外部 Maven settings 绝对路径,仅用于后续验证;未显式提供时依次读取 `YSS_MAVEN_SETTINGS` 和用户目录 `.m2/settings.xml`。不复制进项目、不写入生成清单。
|
|
22
|
-
|
|
23
|
-
## 执行
|
|
24
|
-
|
|
25
|
-
先预演:
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
node scripts/generate_project.mjs --project-name mvc-analysis-item1 --base-package com.yss.dataanalysis.item1 --target-dir /path/to/mvc-analysis-item1 --database oracle --with-mock --maven-settings /path/to/settings.xml --dry-run
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
确认目标目录后去掉 `--dry-run`。生成后运行:
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
node scripts/verify_project.mjs --project-root /path/to/mvc-analysis-item1
|
|
35
|
-
cd /path/to/mvc-analysis-item1
|
|
36
|
-
./mvnw validate
|
|
37
|
-
./mvnw test
|
|
38
|
-
./mvnw package
|
|
39
|
-
./mvnw spring-boot:run -pl mvc-analysis-item1-server -Dspring-boot.run.profiles=mock
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Windows 使用 `mvnw.cmd`。指定外部 settings 时,Maven 命令必须加 `-s <settings.xml>`。启动后对 `POST /api/analysis/query` 执行 HTTP 冒烟测试。
|
|
43
|
-
|
|
44
|
-
生成项目进入 API/Controller 实现后,登记命令必须包含 Java Web/Javadoc 检查、`fmt:check`、测试和构建。Smart-doc 仅作为人工按需从 Controller 生成辅助文档的工具,不属于默认 AI Coding 验证链路;只有用户明确要求生成 Smart-doc 文档时才执行对应 goal。
|
|
45
|
-
|
|
46
|
-
生成结果包含根 `yss-project.yaml`、`AGENTS.md`、`CONTEXT.md`、生命周期事实源、共享 skills、本地 Ticket 入口、`external-repository` 实现仓库登记和 `.gitignore`。生成器执行 `git init --initial-branch=main`;旧版 Git自动回退到 `git init` 后重命名分支。只初始化仓库,不创建 commit 或 remote。
|
|
47
|
-
|
|
48
|
-
## 硬约束
|
|
49
|
-
|
|
50
|
-
- `target-dir` 是最终项目根,不在其下再次创建项目名目录。
|
|
51
|
-
- Windows 下优先使用纯 ASCII、长度可控且不属于其他项目 Git 根的父目录(例如 `C:\\projects`);旧 Maven 插件在非 ASCII 长路径上可能产生 reactor classpath 编码错误。
|
|
52
|
-
- 非空目标目录拒绝生成;本 Skill 不提供隐式覆盖或删除。
|
|
53
|
-
- 目标目录必须成为独立 Git 根;生成前必须能执行 `git --version`,生成后必须验证 Git 根等于 `target-dir`、分支为 `main`、commit 数为零且 remote 为空。
|
|
54
|
-
- 生成前必须从 `git config --get user.name` 读取非空作者名;作者名包含换行或 `*/` 时拒绝生成。生成的 Controller 类和公开接口方法以该值填写 `@author`,不得固定为 `system`。
|
|
55
|
-
- 项目根同时是 Maven 工程根和独立 Git 根,固定登记为 `repository_scope: external-repository`、`project_root: .`;六模块直接位于项目根目录。
|
|
56
|
-
- 生成内容先写入同父目录 staging,全部步骤成功后再原子重命名;失败时只清理本次 staging,不留下不可重试的半成品。Maven 依赖解析明确延后到验证阶段;settings 缺失只记录 `maven-default` / `maven_settings_available=false`,不会压缩或截断生成的文件结构。
|
|
57
|
-
- 每个项目持有自己的 `project-instance` 身份与业务资产;不得为了新项目改写模板工具仓库的项目名称或业务上下文。
|
|
58
|
-
- 模块名固定使用正确拼写 `feign-client`;旧项目中的 `fegin-client` 只作为迁移来源,不继续传播。
|
|
59
|
-
- Mock 与 Oracle 使用同一 Controller 和 DTO 契约,只替换 `AnalysisQueryExecutor` 实现。
|
|
60
|
-
- Mock 仅用于本地联调和契约验证,不得携带真实凭据或生产数据。
|
|
61
|
-
- 启用 Mock 时必须生成 `bootstrap-mock.yml`,并在 Spring Cloud Bootstrap 阶段同时禁用 Nacos Discovery、Nacos Config 和 Config import-check;不能只在 `application-mock.yml` 中禁用。
|
|
62
|
-
- `bootstrap.yml` 的默认顺序为 `${app.env:dev},datasource,nacos,<database-profile>,mock`,`mock` 必须最后以覆盖 Nacos Bootstrap 配置,且 profile 列表不得有尾随逗号。未启用 Mock 时不生成、不激活 `mock`。
|
|
63
|
-
- Mock 与数据库 profile 同时出现时,Mock 执行器优先;数据库执行器使用 `<database-profile> & !mock` 表达式,禁止两个 `AnalysisQueryExecutor` 同时注册。
|
|
64
|
-
- Mock 的 `application-mock.yml` 必须关闭 Leaf Segment/Snowflake,并在 `spring.autoconfigure.exclude` 中排除 `DataSourceAutoConfiguration`、`MybatisPlusConfiguration` 和 `LeafDataSourceConfiguration`;组件扫描同时排除 `com.yss.cloud.mybatis..*`、`com.yss.cloud.sankuai..*`,`@EnableDistributedId` 与 `MapperConfiguration` 只允许在 `!mock` 配置类中加载,确保无数据库时 Mock 测试和 HTTP 冒烟可运行。
|
|
65
|
-
- Oracle Adapter 只保留可编译 seam;连接信息通过环境变量注入,生成器不写真实账号密码。
|
|
66
|
-
- 工程版本、YSS 父 POM 和组件 BOM 固定为 `2.0.0-SNAPSHOT`,运行时固定 Java 8。
|
|
67
|
-
- 标准能力默认包含审计日志、分布式 ID、Excel、Nacos、Redis Cache、OpenFeign、Smart-doc、用户信息和 Actuator。
|
|
68
|
-
- server POM 必须保留 `spring-boot-maven-plugin`和默认激活的 `nacos` profile;Nacos 依赖只在该 profile 中声明。
|
|
69
|
-
- `bootstrap-nacos.yml` 默认使用 `${nacosserver:192.168.165.58:8848}`、`${nacos_group:yss-dm}` 和 `${namespace:yss-datamiddle}`,Discovery/Config 在 `nacos` profile 中开启,并由 `bootstrap-mock.yml` 在 Mock 模式覆盖关闭。
|
|
70
|
-
- Smart-doc 使用 `assets/smart-doc.json.template`的完整配置并动态生成项目名、Controller 包和修订时间;Torna Token 与内网地址不进入生成项目。Smart-doc 插件保留跨模块 `includes`,但不绑定 Maven `executions`,不进入默认 `validate` / `test` / `package` / CI / AI Coding 验证命令。
|
|
71
|
-
- Logback 使用 `assets/logback-spring.xml.template`;`dev,mock` 与 `uat,pro,oracle,oceanbase-oracle` 必须是并列 profile,项目名和基础包动态替换。
|
|
72
|
-
- Controller 类和公开接口方法必须按真实业务语义生成 Javadoc,`@author` 使用生成时读取的 Git 用户名,`@date` 使用 `yyyy/MM/dd HH:mm`,方法按签名完整生成 `@param`和 `@return`。
|
|
73
|
-
- API 实现不得交付单行 Javadoc block tag、Mapping 注解/方法同行或方法体单行压缩代码;相关规范由生成项目中的工程约定和实际验证命令约束。
|
|
74
|
-
- API 完成证据必须包含 `yss-skill-execution-result.yaml` 和 `fresh-verification.md`,并记录 Controller 路由、DTO、响应 Wrapper、错误响应及契约测试与冻结 OpenAPI 的一致性。Smart-doc 输出不是 OpenAPI Freeze、契约审查或功能完成证据。
|
|
75
|
-
- Maven settings 始终是项目外部的私密输入;不得复制到目标目录、写入 README/生成清单或提交 Git。
|
|
76
|
-
- 持久层固定使用 YSS MyBatis-Plus;标准 CRUD 使用 MP,复杂 SQL 写入 mapper.xml,主键策略为 `IdType.ASSIGN_ID`。
|
|
77
|
-
- 生成范围仅包含工程骨架、示例 Mock seam 和验证测试,不声称业务 Spec、OpenAPI Freeze 或 Slice Implementation Contract 已批准。
|
|
78
|
-
- 完成结论必须包含结构验证,以及实际执行的 Maven 命令;无法下载依赖时如实记录环境阻塞。
|
|
79
|
-
|
|
80
|
-
模块职责和依赖方向见 [references/architecture.md](references/architecture.md)。
|
|
81
|
-
|
|
82
|
-
## API 契约与人工文档边界
|
|
83
|
-
|
|
84
|
-
- 冻结的 OpenAPI 3.1 YAML 是接口契约的唯一事实来源;`yss-openapi-governance` 负责契约治理与 Freeze,`yss-openapi-draft-review` 负责冻结前审查,`yss-web-controller` 负责按冻结契约实现 Controller。
|
|
85
|
-
- Smart-doc 是人工可选的源码文档工具。其输出只用于查看当前 Controller 实现,不得反向定义、覆盖或批准冻结 OpenAPI。
|
|
86
|
-
- AI 默认不执行 `smart-doc:html`、`smart-doc:openapi` 或 `smart-doc:torna-rest`。`torna-rest` 涉及外部写入,执行前还必须获得对应授权。
|
|
87
|
-
- 本生成器只用于空目录初始化。生成项目使用已物化的 `project-instance` 资产和实现 skills 开发后续需求;其共享 `skillUtils` 不应再分发 `yss-mvc-scaffold-generator` 本身。
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import test from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { spawnSync } from "node:child_process";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
|
-
test("退役入口拒绝旧数据库和 Mock,不作静默别名", () => {
|
|
6
|
-
const result = spawnSync(process.execPath, [fileURLToPath(new URL("./generate_project.mjs", import.meta.url)), "--database", "oracle", "--with-mock"], { encoding: "utf8" });
|
|
7
|
-
assert.equal(result.status, 1);
|
|
8
|
-
assert.match(result.stderr, /deprecated.*yss-mvc-data-analysis-project-initializer/);
|
|
9
|
-
});
|