create-yss-spec 3.0.1 → 3.1.3
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 +117 -91
- package/bin/create-yss-spec.js +11 -3
- package/package.json +9 -2
- package/src/api/_sync-service.js +191 -0
- package/src/api/index.js +22 -0
- package/src/api/project-diff.js +9 -0
- package/src/api/project-doctor.js +10 -0
- package/src/api/template-apply.js +10 -0
- package/src/api/template-plan.js +9 -0
- package/src/cli/args.js +60 -0
- package/src/cli/error-output.js +52 -0
- package/src/cli/flags.js +9 -0
- package/src/cli/help.js +95 -0
- package/src/cli/index.js +82 -0
- package/src/cli/plan-output.js +61 -0
- package/src/cli/prompts.js +91 -0
- package/src/cli/router.js +41 -0
- package/src/cli.js +5 -2253
- package/src/commands/attach.js +280 -0
- package/src/commands/diff.js +23 -0
- package/src/commands/doctor.js +417 -0
- package/src/commands/init.js +193 -0
- package/src/commands/sync.js +146 -0
- package/src/commands/update.js +14 -0
- package/src/contracts/apply-result-v1.json +45 -0
- package/src/contracts/customization-policy-v1.json +28 -0
- package/src/contracts/doctor-report-v1.json +29 -0
- package/src/contracts/error-envelope-v1.json +24 -0
- package/src/contracts/generator-policy-v1.json +24 -0
- package/src/contracts/ownership-policy-v1.json +40 -0
- package/src/contracts/plan-schema-v1.json +115 -0
- package/src/family-identity.js +365 -0
- package/src/family-runtime.js +23 -0
- package/src/filesystem/apply-plan.js +44 -0
- package/src/filesystem/copy-path.js +28 -0
- package/src/filesystem/path-utils.js +67 -0
- package/src/filesystem/transaction-runner.js +41 -0
- package/src/filesystem/transaction.js +153 -0
- package/src/git/submodule.js +115 -0
- package/src/git/worktree.js +69 -0
- package/src/template/attach-planner-runtime.js +51 -0
- package/src/template/attach-planner.js +160 -0
- package/src/template/instance-runtime.js +463 -0
- package/src/template/lifecycle-metadata.js +99 -0
- package/src/template/lifecycle-policy.js +129 -0
- package/src/template/lifecycle-runtime.js +90 -0
- package/src/template/migration-planner.js +95 -0
- package/src/template/migration-runtime.js +247 -0
- package/src/template/ownership-metadata.js +79 -0
- package/src/template/ownership-policy.js +149 -0
- package/src/template/ownership-runtime.js +109 -0
- package/src/template/plan-schema.js +36 -0
- package/src/template/sync-planner-runtime.js +57 -0
- package/src/template/sync-planner.js +206 -0
- package/src/template/verification-runtime.js +154 -0
- package/src/validation/identity.js +41 -0
- package/src/validation/metadata.js +105 -0
- package/src/validation/security.js +67 -0
- package/src/validation/snapshot.js +47 -0
- package/template/.agents/rules/yss-ai-skills.md +3 -55
- package/template/.agents/skills/.strategic-design-skills-manifest.json +11 -6
- package/template/.agents/skills/.yss-skills-manifest.json +1 -3
- package/template/.agents/skills/alibaba-java-code-style/SKILL.md +1 -0
- package/template/.agents/skills/code-review/references/yss-review-standards.md +1 -1
- package/template/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +37 -42
- package/template/.agents/skills/domain-modeling/SKILL.md +10 -26
- package/template/.agents/skills/grill-with-docs/SKILL.md +6 -5
- package/template/.agents/skills/lombok/SKILL.md +2 -1
- package/template/.agents/skills/mapstruct/SKILL.md +3 -2
- package/template/.agents/skills/setup-matt-pocock-skills/SKILL.md +5 -6
- package/template/.agents/skills/setup-matt-pocock-skills/domain.md +6 -20
- package/template/.agents/skills/wait-what/SKILL.md +1 -1
- package/template/.agents/skills/yss-antdv-next-design/SKILL.md +48 -0
- package/template/.agents/skills/yss-antdv-next-design/references/boundaries.md +25 -0
- package/template/.agents/skills/yss-antdv-next-design/references/cli-matrix.md +34 -0
- package/template/.agents/skills/yss-antdv-next-design/references/fact-pack.md +38 -0
- package/template/.agents/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +213 -0
- package/template/.agents/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +168 -0
- package/template/.agents/skills/yss-antdv-next-design/tests/run-scenarios.mjs +139 -0
- package/template/.agents/skills/yss-application/SKILL.md +6 -0
- package/template/.agents/skills/yss-application/references/profiles/layered-mvc-service.md +3 -0
- package/template/.agents/skills/yss-application/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.agents/skills/yss-application/references/profiles/target-domain-model.md +3 -0
- package/template/.agents/skills/yss-components/SKILL.md +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +3 -4
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +0 -13
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +13 -0
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +13 -4
- 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 +21 -7
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +37 -15
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +22 -10
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +14 -2
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +41 -12
- package/template/.agents/skills/yss-design-system/SKILL.md +25 -22
- package/template/.agents/skills/yss-design-system/references/design-qa-theme.md +22 -24
- package/template/.agents/skills/yss-design-system/references/design-system.md +39 -56
- package/template/.agents/skills/yss-domain/SKILL.md +1 -1
- package/template/.agents/skills/yss-dto/SKILL.md +1 -0
- package/template/.agents/skills/yss-exception/SKILL.md +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +3 -1
- package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +10 -2
- package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +16 -8
- package/template/.agents/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +78 -19
- package/template/.agents/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +7 -1
- package/template/.agents/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +2 -0
- package/template/.agents/skills/yss-implementation-contract-compiler/tests/backend-profiles.test.mjs +45 -0
- package/template/.agents/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +8 -6
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md +64 -0
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +4 -0
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/references/architecture.md +29 -0
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +61 -0
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +315 -0
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +30 -0
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +159 -0
- package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +22 -0
- package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +77 -0
- package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +9 -0
- package/template/.agents/skills/yss-mvc-scaffold-generator/SKILL.md +3 -82
- package/template/.agents/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +137 -0
- package/template/.agents/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +341 -0
- package/template/.agents/skills/yss-mvc-scaffold-generator/references/history/skill.md +87 -0
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +2 -135
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +4 -332
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +11 -3
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +36 -0
- package/template/.agents/skills/yss-mybatis/SKILL.md +2 -2
- package/template/.agents/skills/yss-product-lifecycle/SKILL.md +33 -7
- package/template/.agents/skills/yss-product-lifecycle/references/artifact-dependencies.md +3 -0
- package/template/.agents/skills/yss-product-lifecycle/references/matt-yss-adapter.md +4 -6
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +119 -46
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +9 -3
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.agents/skills/yss-product-lifecycle/references/user-decisions.md +56 -0
- package/template/.agents/skills/yss-prototype-stage/SKILL.md +9 -8
- package/template/.agents/skills/yss-prototype-stage/references/product-design-adapter.md +33 -10
- package/template/.agents/skills/yss-prototype-stage/references/prototype-profile-routing.md +10 -8
- package/template/.agents/skills/yss-prototype-stage/scripts/prototype-contract.mjs +129 -22
- package/template/.agents/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs +314 -0
- package/template/.agents/skills/yss-prototype-stage/tests/run-scenarios.mjs +96 -17
- package/template/.agents/skills/yss-repository/SKILL.md +6 -0
- package/template/.agents/skills/yss-repository/references/profiles/layered-mvc-service.md +3 -0
- package/template/.agents/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.agents/skills/yss-repository/references/profiles/target-domain-model.md +3 -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 +1 -1
- package/template/.agents/skills/yss-stage-decision/SKILL.md +16 -12
- package/template/.agents/skills/yss-stage-decision/references/domain-strategy-contract.md +16 -10
- package/template/.agents/skills/yss-stage-decision/references/domain-strategy.schema.json +23 -5
- package/template/.agents/skills/yss-stage-decision/references/stage-decision-package-contract.md +5 -2
- package/template/.agents/skills/yss-stage-decision/references/stage-decision-package.schema.json +16 -4
- package/template/.agents/skills/yss-stage-decision/references/validation-rules.md +1 -1
- package/template/.agents/skills/yss-stage-decision/scripts/migrate-context-references.mjs +62 -0
- package/template/.agents/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +18 -7
- package/template/.agents/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +20 -9
- package/template/.agents/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +1 -1
- package/template/.agents/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +1 -1
- package/template/.agents/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +12 -7
- package/template/.agents/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +9 -4
- package/template/.agents/skills/yss-stage-decision/tests/run-scenarios.mjs +134 -56
- package/template/.agents/skills/yss-tactical-design/SKILL.md +8 -2
- package/template/.agents/skills/yss-tactical-design/references/output-template.md +3 -0
- package/template/.agents/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.agents/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +10 -2
- package/template/.agents/skills/yss-ui/SKILL.md +3 -2
- package/template/.agents/skills/yss-ui-business-page-generation/SKILL.md +3 -3
- package/template/.agents/skills/yss-validation/SKILL.md +1 -0
- package/template/.agents/skills/yss-web-controller/SKILL.md +6 -0
- package/template/.agents/skills/yss-web-controller/references/profiles/layered-mvc-service.md +3 -0
- package/template/.agents/skills/yss-web-controller/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.agents/skills/yss-web-controller/references/profiles/target-domain-model.md +3 -0
- package/template/.agents/skills/yss-web-controller/references/web-generation-contract.schema.json +3 -2
- package/template/.agents/skills/yss-web-controller/scripts/generate_controller.mjs +27 -10
- package/template/.agents/skills/yss-web-controller/scripts/generate_controller.test.mjs +29 -1
- package/template/.claude/skills/alibaba-java-code-style/SKILL.md +1 -0
- package/template/.claude/skills/code-review/references/yss-review-standards.md +1 -1
- package/template/.claude/skills/domain-modeling/CONTEXT-FORMAT.md +37 -42
- package/template/.claude/skills/domain-modeling/SKILL.md +10 -26
- package/template/.claude/skills/grill-with-docs/SKILL.md +6 -5
- package/template/.claude/skills/lombok/SKILL.md +2 -1
- package/template/.claude/skills/mapstruct/SKILL.md +3 -2
- package/template/.claude/skills/setup-matt-pocock-skills/SKILL.md +5 -6
- package/template/.claude/skills/setup-matt-pocock-skills/domain.md +6 -20
- package/template/.claude/skills/wait-what/SKILL.md +1 -1
- package/template/.claude/skills/yss-antdv-next-design/SKILL.md +48 -0
- package/template/.claude/skills/yss-antdv-next-design/references/boundaries.md +25 -0
- package/template/.claude/skills/yss-antdv-next-design/references/cli-matrix.md +34 -0
- package/template/.claude/skills/yss-antdv-next-design/references/fact-pack.md +38 -0
- package/template/.claude/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +213 -0
- package/template/.claude/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +168 -0
- package/template/.claude/skills/yss-antdv-next-design/tests/run-scenarios.mjs +139 -0
- package/template/.claude/skills/yss-application/SKILL.md +6 -0
- package/template/.claude/skills/yss-application/references/profiles/layered-mvc-service.md +3 -0
- package/template/.claude/skills/yss-application/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.claude/skills/yss-application/references/profiles/target-domain-model.md +3 -0
- package/template/.claude/skills/yss-components/SKILL.md +1 -1
- package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +3 -4
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +0 -13
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +13 -0
- package/template/.claude/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +13 -4
- package/template/.claude/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +21 -7
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +37 -15
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +22 -10
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +14 -2
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +41 -12
- package/template/.claude/skills/yss-design-system/SKILL.md +25 -22
- package/template/.claude/skills/yss-design-system/references/design-qa-theme.md +22 -24
- package/template/.claude/skills/yss-design-system/references/design-system.md +39 -56
- package/template/.claude/skills/yss-domain/SKILL.md +1 -1
- package/template/.claude/skills/yss-dto/SKILL.md +1 -0
- package/template/.claude/skills/yss-exception/SKILL.md +1 -0
- package/template/.claude/skills/yss-frontend-scaffold-generator/SKILL.md +3 -1
- package/template/.claude/skills/yss-implementation-contract-compiler/SKILL.md +10 -2
- package/template/.claude/skills/yss-implementation-contract-compiler/references/boundaries.md +16 -8
- package/template/.claude/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +78 -19
- package/template/.claude/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +7 -1
- package/template/.claude/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +2 -0
- package/template/.claude/skills/yss-implementation-contract-compiler/tests/backend-profiles.test.mjs +45 -0
- package/template/.claude/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +8 -6
- package/template/.claude/skills/yss-layered-mvc-scaffold-generator/SKILL.md +64 -0
- package/template/.claude/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +4 -0
- package/template/.claude/skills/yss-layered-mvc-scaffold-generator/references/architecture.md +29 -0
- package/template/.claude/skills/yss-layered-mvc-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +61 -0
- package/template/.claude/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +315 -0
- package/template/.claude/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +30 -0
- package/template/.claude/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +159 -0
- package/template/.claude/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +22 -0
- package/template/.claude/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +77 -0
- package/template/.claude/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +9 -0
- package/template/.claude/skills/yss-mvc-scaffold-generator/SKILL.md +3 -82
- package/template/.claude/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +137 -0
- package/template/.claude/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +341 -0
- package/template/.claude/skills/yss-mvc-scaffold-generator/references/history/skill.md +87 -0
- package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +2 -135
- package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +4 -332
- package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +11 -3
- package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +36 -0
- package/template/.claude/skills/yss-mybatis/SKILL.md +2 -2
- package/template/.claude/skills/yss-product-lifecycle/SKILL.md +33 -7
- package/template/.claude/skills/yss-product-lifecycle/references/artifact-dependencies.md +3 -0
- package/template/.claude/skills/yss-product-lifecycle/references/matt-yss-adapter.md +4 -6
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +119 -46
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +9 -3
- package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.claude/skills/yss-product-lifecycle/references/user-decisions.md +56 -0
- package/template/.claude/skills/yss-prototype-stage/SKILL.md +9 -8
- package/template/.claude/skills/yss-prototype-stage/references/product-design-adapter.md +33 -10
- package/template/.claude/skills/yss-prototype-stage/references/prototype-profile-routing.md +10 -8
- package/template/.claude/skills/yss-prototype-stage/scripts/prototype-contract.mjs +129 -22
- package/template/.claude/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs +314 -0
- package/template/.claude/skills/yss-prototype-stage/tests/run-scenarios.mjs +96 -17
- package/template/.claude/skills/yss-repository/SKILL.md +6 -0
- package/template/.claude/skills/yss-repository/references/profiles/layered-mvc-service.md +3 -0
- package/template/.claude/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.claude/skills/yss-repository/references/profiles/target-domain-model.md +3 -0
- package/template/.claude/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
- package/template/.claude/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +1 -1
- package/template/.claude/skills/yss-stage-decision/SKILL.md +16 -12
- package/template/.claude/skills/yss-stage-decision/references/domain-strategy-contract.md +16 -10
- package/template/.claude/skills/yss-stage-decision/references/domain-strategy.schema.json +23 -5
- package/template/.claude/skills/yss-stage-decision/references/stage-decision-package-contract.md +5 -2
- package/template/.claude/skills/yss-stage-decision/references/stage-decision-package.schema.json +16 -4
- package/template/.claude/skills/yss-stage-decision/references/validation-rules.md +1 -1
- package/template/.claude/skills/yss-stage-decision/scripts/migrate-context-references.mjs +62 -0
- package/template/.claude/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +18 -7
- package/template/.claude/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +20 -9
- package/template/.claude/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +1 -1
- package/template/.claude/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +1 -1
- package/template/.claude/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +12 -7
- package/template/.claude/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +9 -4
- package/template/.claude/skills/yss-stage-decision/tests/run-scenarios.mjs +134 -56
- package/template/.claude/skills/yss-tactical-design/SKILL.md +8 -2
- package/template/.claude/skills/yss-tactical-design/references/output-template.md +3 -0
- package/template/.claude/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.claude/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +10 -2
- package/template/.claude/skills/yss-ui/SKILL.md +3 -2
- package/template/.claude/skills/yss-ui-business-page-generation/SKILL.md +3 -3
- package/template/.claude/skills/yss-validation/SKILL.md +1 -0
- package/template/.claude/skills/yss-web-controller/SKILL.md +6 -0
- package/template/.claude/skills/yss-web-controller/references/profiles/layered-mvc-service.md +3 -0
- package/template/.claude/skills/yss-web-controller/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.claude/skills/yss-web-controller/references/profiles/target-domain-model.md +3 -0
- package/template/.claude/skills/yss-web-controller/references/web-generation-contract.schema.json +3 -2
- package/template/.claude/skills/yss-web-controller/scripts/generate_controller.mjs +27 -10
- package/template/.claude/skills/yss-web-controller/scripts/generate_controller.test.mjs +29 -1
- package/template/.codex/skills/alibaba-java-code-style/SKILL.md +1 -0
- package/template/.codex/skills/code-review/references/yss-review-standards.md +1 -1
- package/template/.codex/skills/domain-modeling/CONTEXT-FORMAT.md +37 -42
- package/template/.codex/skills/domain-modeling/SKILL.md +10 -26
- package/template/.codex/skills/grill-with-docs/SKILL.md +6 -5
- package/template/.codex/skills/lombok/SKILL.md +2 -1
- package/template/.codex/skills/mapstruct/SKILL.md +3 -2
- package/template/.codex/skills/setup-matt-pocock-skills/SKILL.md +5 -6
- package/template/.codex/skills/setup-matt-pocock-skills/domain.md +6 -20
- package/template/.codex/skills/wait-what/SKILL.md +1 -1
- package/template/.codex/skills/yss-antdv-next-design/SKILL.md +48 -0
- package/template/.codex/skills/yss-antdv-next-design/references/boundaries.md +25 -0
- package/template/.codex/skills/yss-antdv-next-design/references/cli-matrix.md +34 -0
- package/template/.codex/skills/yss-antdv-next-design/references/fact-pack.md +38 -0
- package/template/.codex/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +213 -0
- package/template/.codex/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +168 -0
- package/template/.codex/skills/yss-antdv-next-design/tests/run-scenarios.mjs +139 -0
- package/template/.codex/skills/yss-application/SKILL.md +6 -0
- package/template/.codex/skills/yss-application/references/profiles/layered-mvc-service.md +3 -0
- package/template/.codex/skills/yss-application/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.codex/skills/yss-application/references/profiles/target-domain-model.md +3 -0
- package/template/.codex/skills/yss-components/SKILL.md +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +3 -4
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +0 -13
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +13 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +13 -4
- 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 +21 -7
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +37 -15
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +22 -10
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +14 -2
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +41 -12
- package/template/.codex/skills/yss-design-system/SKILL.md +25 -22
- package/template/.codex/skills/yss-design-system/references/design-qa-theme.md +22 -24
- package/template/.codex/skills/yss-design-system/references/design-system.md +39 -56
- package/template/.codex/skills/yss-domain/SKILL.md +1 -1
- package/template/.codex/skills/yss-dto/SKILL.md +1 -0
- package/template/.codex/skills/yss-exception/SKILL.md +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +3 -1
- package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +10 -2
- package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +16 -8
- package/template/.codex/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +78 -19
- package/template/.codex/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +7 -1
- package/template/.codex/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +2 -0
- package/template/.codex/skills/yss-implementation-contract-compiler/tests/backend-profiles.test.mjs +45 -0
- package/template/.codex/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +8 -6
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/SKILL.md +64 -0
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +4 -0
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/references/architecture.md +29 -0
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +61 -0
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +315 -0
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +30 -0
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +159 -0
- package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +22 -0
- package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +77 -0
- package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +9 -0
- package/template/.codex/skills/yss-mvc-scaffold-generator/SKILL.md +3 -82
- package/template/.codex/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +137 -0
- package/template/.codex/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +341 -0
- package/template/.codex/skills/yss-mvc-scaffold-generator/references/history/skill.md +87 -0
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +2 -135
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +4 -332
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +11 -3
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +36 -0
- package/template/.codex/skills/yss-mybatis/SKILL.md +2 -2
- package/template/.codex/skills/yss-product-lifecycle/SKILL.md +33 -7
- package/template/.codex/skills/yss-product-lifecycle/references/artifact-dependencies.md +3 -0
- package/template/.codex/skills/yss-product-lifecycle/references/matt-yss-adapter.md +4 -6
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +119 -46
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +9 -3
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.codex/skills/yss-product-lifecycle/references/user-decisions.md +56 -0
- package/template/.codex/skills/yss-prototype-stage/SKILL.md +9 -8
- package/template/.codex/skills/yss-prototype-stage/references/product-design-adapter.md +33 -10
- package/template/.codex/skills/yss-prototype-stage/references/prototype-profile-routing.md +10 -8
- package/template/.codex/skills/yss-prototype-stage/scripts/prototype-contract.mjs +129 -22
- package/template/.codex/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs +314 -0
- package/template/.codex/skills/yss-prototype-stage/tests/run-scenarios.mjs +96 -17
- package/template/.codex/skills/yss-repository/SKILL.md +6 -0
- package/template/.codex/skills/yss-repository/references/profiles/layered-mvc-service.md +3 -0
- package/template/.codex/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.codex/skills/yss-repository/references/profiles/target-domain-model.md +3 -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 +1 -1
- package/template/.codex/skills/yss-stage-decision/SKILL.md +16 -12
- package/template/.codex/skills/yss-stage-decision/references/domain-strategy-contract.md +16 -10
- package/template/.codex/skills/yss-stage-decision/references/domain-strategy.schema.json +23 -5
- package/template/.codex/skills/yss-stage-decision/references/stage-decision-package-contract.md +5 -2
- package/template/.codex/skills/yss-stage-decision/references/stage-decision-package.schema.json +16 -4
- package/template/.codex/skills/yss-stage-decision/references/validation-rules.md +1 -1
- package/template/.codex/skills/yss-stage-decision/scripts/migrate-context-references.mjs +62 -0
- package/template/.codex/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +18 -7
- package/template/.codex/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +20 -9
- package/template/.codex/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +1 -1
- package/template/.codex/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +1 -1
- package/template/.codex/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +12 -7
- package/template/.codex/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +9 -4
- package/template/.codex/skills/yss-stage-decision/tests/run-scenarios.mjs +134 -56
- package/template/.codex/skills/yss-tactical-design/SKILL.md +8 -2
- package/template/.codex/skills/yss-tactical-design/references/output-template.md +3 -0
- package/template/.codex/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.codex/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +10 -2
- package/template/.codex/skills/yss-ui/SKILL.md +3 -2
- package/template/.codex/skills/yss-ui-business-page-generation/SKILL.md +3 -3
- package/template/.codex/skills/yss-validation/SKILL.md +1 -0
- package/template/.codex/skills/yss-web-controller/SKILL.md +6 -0
- package/template/.codex/skills/yss-web-controller/references/profiles/layered-mvc-service.md +3 -0
- package/template/.codex/skills/yss-web-controller/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.codex/skills/yss-web-controller/references/profiles/target-domain-model.md +3 -0
- package/template/.codex/skills/yss-web-controller/references/web-generation-contract.schema.json +3 -2
- package/template/.codex/skills/yss-web-controller/scripts/generate_controller.mjs +27 -10
- package/template/.codex/skills/yss-web-controller/scripts/generate_controller.test.mjs +29 -1
- package/template/.cursor/skills/alibaba-java-code-style/SKILL.md +1 -0
- package/template/.cursor/skills/code-review/references/yss-review-standards.md +1 -1
- package/template/.cursor/skills/domain-modeling/CONTEXT-FORMAT.md +37 -42
- package/template/.cursor/skills/domain-modeling/SKILL.md +10 -26
- package/template/.cursor/skills/grill-with-docs/SKILL.md +6 -5
- package/template/.cursor/skills/lombok/SKILL.md +2 -1
- package/template/.cursor/skills/mapstruct/SKILL.md +3 -2
- package/template/.cursor/skills/setup-matt-pocock-skills/SKILL.md +5 -6
- package/template/.cursor/skills/setup-matt-pocock-skills/domain.md +6 -20
- package/template/.cursor/skills/wait-what/SKILL.md +1 -1
- package/template/.cursor/skills/yss-antdv-next-design/SKILL.md +48 -0
- package/template/.cursor/skills/yss-antdv-next-design/references/boundaries.md +25 -0
- package/template/.cursor/skills/yss-antdv-next-design/references/cli-matrix.md +34 -0
- package/template/.cursor/skills/yss-antdv-next-design/references/fact-pack.md +38 -0
- package/template/.cursor/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +213 -0
- package/template/.cursor/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +168 -0
- package/template/.cursor/skills/yss-antdv-next-design/tests/run-scenarios.mjs +139 -0
- package/template/.cursor/skills/yss-application/SKILL.md +6 -0
- package/template/.cursor/skills/yss-application/references/profiles/layered-mvc-service.md +3 -0
- package/template/.cursor/skills/yss-application/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.cursor/skills/yss-application/references/profiles/target-domain-model.md +3 -0
- package/template/.cursor/skills/yss-components/SKILL.md +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +3 -4
- package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +0 -13
- package/template/.cursor/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +13 -0
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +13 -4
- 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 +21 -7
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +37 -15
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +22 -10
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +14 -2
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +41 -12
- package/template/.cursor/skills/yss-design-system/SKILL.md +25 -22
- package/template/.cursor/skills/yss-design-system/references/design-qa-theme.md +22 -24
- package/template/.cursor/skills/yss-design-system/references/design-system.md +39 -56
- package/template/.cursor/skills/yss-domain/SKILL.md +1 -1
- package/template/.cursor/skills/yss-dto/SKILL.md +1 -0
- package/template/.cursor/skills/yss-exception/SKILL.md +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +3 -1
- package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +10 -2
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +16 -8
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +78 -19
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +7 -1
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +2 -0
- package/template/.cursor/skills/yss-implementation-contract-compiler/tests/backend-profiles.test.mjs +45 -0
- package/template/.cursor/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +8 -6
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/SKILL.md +64 -0
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +4 -0
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/references/architecture.md +29 -0
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +61 -0
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +315 -0
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +30 -0
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +159 -0
- package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +22 -0
- package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +77 -0
- package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +9 -0
- package/template/.cursor/skills/yss-mvc-scaffold-generator/SKILL.md +3 -82
- package/template/.cursor/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +137 -0
- package/template/.cursor/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +341 -0
- package/template/.cursor/skills/yss-mvc-scaffold-generator/references/history/skill.md +87 -0
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +2 -135
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +4 -332
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +11 -3
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +36 -0
- package/template/.cursor/skills/yss-mybatis/SKILL.md +2 -2
- package/template/.cursor/skills/yss-product-lifecycle/SKILL.md +33 -7
- package/template/.cursor/skills/yss-product-lifecycle/references/artifact-dependencies.md +3 -0
- package/template/.cursor/skills/yss-product-lifecycle/references/matt-yss-adapter.md +4 -6
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +119 -46
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +9 -3
- package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.cursor/skills/yss-product-lifecycle/references/user-decisions.md +56 -0
- package/template/.cursor/skills/yss-prototype-stage/SKILL.md +9 -8
- package/template/.cursor/skills/yss-prototype-stage/references/product-design-adapter.md +33 -10
- package/template/.cursor/skills/yss-prototype-stage/references/prototype-profile-routing.md +10 -8
- package/template/.cursor/skills/yss-prototype-stage/scripts/prototype-contract.mjs +129 -22
- package/template/.cursor/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs +314 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/run-scenarios.mjs +96 -17
- package/template/.cursor/skills/yss-repository/SKILL.md +6 -0
- package/template/.cursor/skills/yss-repository/references/profiles/layered-mvc-service.md +3 -0
- package/template/.cursor/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.cursor/skills/yss-repository/references/profiles/target-domain-model.md +3 -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 +1 -1
- package/template/.cursor/skills/yss-stage-decision/SKILL.md +16 -12
- package/template/.cursor/skills/yss-stage-decision/references/domain-strategy-contract.md +16 -10
- package/template/.cursor/skills/yss-stage-decision/references/domain-strategy.schema.json +23 -5
- package/template/.cursor/skills/yss-stage-decision/references/stage-decision-package-contract.md +5 -2
- package/template/.cursor/skills/yss-stage-decision/references/stage-decision-package.schema.json +16 -4
- package/template/.cursor/skills/yss-stage-decision/references/validation-rules.md +1 -1
- package/template/.cursor/skills/yss-stage-decision/scripts/migrate-context-references.mjs +62 -0
- package/template/.cursor/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +18 -7
- package/template/.cursor/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +20 -9
- package/template/.cursor/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +1 -1
- package/template/.cursor/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +1 -1
- package/template/.cursor/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +12 -7
- package/template/.cursor/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +9 -4
- package/template/.cursor/skills/yss-stage-decision/tests/run-scenarios.mjs +134 -56
- package/template/.cursor/skills/yss-tactical-design/SKILL.md +8 -2
- package/template/.cursor/skills/yss-tactical-design/references/output-template.md +3 -0
- package/template/.cursor/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.cursor/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +10 -2
- package/template/.cursor/skills/yss-ui/SKILL.md +3 -2
- package/template/.cursor/skills/yss-ui-business-page-generation/SKILL.md +3 -3
- package/template/.cursor/skills/yss-validation/SKILL.md +1 -0
- package/template/.cursor/skills/yss-web-controller/SKILL.md +6 -0
- package/template/.cursor/skills/yss-web-controller/references/profiles/layered-mvc-service.md +3 -0
- package/template/.cursor/skills/yss-web-controller/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.cursor/skills/yss-web-controller/references/profiles/target-domain-model.md +3 -0
- package/template/.cursor/skills/yss-web-controller/references/web-generation-contract.schema.json +3 -2
- package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.mjs +27 -10
- package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.test.mjs +29 -1
- package/template/.cursorrules +6 -34
- package/template/.pi/skills/alibaba-java-code-style/SKILL.md +1 -0
- package/template/.pi/skills/code-review/references/yss-review-standards.md +1 -1
- package/template/.pi/skills/domain-modeling/CONTEXT-FORMAT.md +37 -42
- package/template/.pi/skills/domain-modeling/SKILL.md +10 -26
- package/template/.pi/skills/grill-with-docs/SKILL.md +6 -5
- package/template/.pi/skills/lombok/SKILL.md +2 -1
- package/template/.pi/skills/mapstruct/SKILL.md +3 -2
- package/template/.pi/skills/setup-matt-pocock-skills/SKILL.md +5 -6
- package/template/.pi/skills/setup-matt-pocock-skills/domain.md +6 -20
- package/template/.pi/skills/wait-what/SKILL.md +1 -1
- package/template/.pi/skills/yss-antdv-next-design/SKILL.md +48 -0
- package/template/.pi/skills/yss-antdv-next-design/references/boundaries.md +25 -0
- package/template/.pi/skills/yss-antdv-next-design/references/cli-matrix.md +34 -0
- package/template/.pi/skills/yss-antdv-next-design/references/fact-pack.md +38 -0
- package/template/.pi/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +213 -0
- package/template/.pi/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +168 -0
- package/template/.pi/skills/yss-antdv-next-design/tests/run-scenarios.mjs +139 -0
- package/template/.pi/skills/yss-application/SKILL.md +6 -0
- package/template/.pi/skills/yss-application/references/profiles/layered-mvc-service.md +3 -0
- package/template/.pi/skills/yss-application/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.pi/skills/yss-application/references/profiles/target-domain-model.md +3 -0
- package/template/.pi/skills/yss-components/SKILL.md +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +3 -4
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +0 -13
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +13 -0
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +13 -4
- 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 +21 -7
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +37 -15
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +22 -10
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +14 -2
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +41 -12
- package/template/.pi/skills/yss-design-system/SKILL.md +25 -22
- package/template/.pi/skills/yss-design-system/references/design-qa-theme.md +22 -24
- package/template/.pi/skills/yss-design-system/references/design-system.md +39 -56
- package/template/.pi/skills/yss-domain/SKILL.md +1 -1
- package/template/.pi/skills/yss-dto/SKILL.md +1 -0
- package/template/.pi/skills/yss-exception/SKILL.md +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +3 -1
- package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +10 -2
- package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +16 -8
- package/template/.pi/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +78 -19
- package/template/.pi/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +7 -1
- package/template/.pi/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +2 -0
- package/template/.pi/skills/yss-implementation-contract-compiler/tests/backend-profiles.test.mjs +45 -0
- package/template/.pi/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +8 -6
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/SKILL.md +64 -0
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +4 -0
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/references/architecture.md +29 -0
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +61 -0
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +315 -0
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +30 -0
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +159 -0
- package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +22 -0
- package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +77 -0
- package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +9 -0
- package/template/.pi/skills/yss-mvc-scaffold-generator/SKILL.md +3 -82
- package/template/.pi/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +137 -0
- package/template/.pi/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +341 -0
- package/template/.pi/skills/yss-mvc-scaffold-generator/references/history/skill.md +87 -0
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +2 -135
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +4 -332
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +11 -3
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +36 -0
- package/template/.pi/skills/yss-mybatis/SKILL.md +2 -2
- package/template/.pi/skills/yss-product-lifecycle/SKILL.md +33 -7
- package/template/.pi/skills/yss-product-lifecycle/references/artifact-dependencies.md +3 -0
- package/template/.pi/skills/yss-product-lifecycle/references/matt-yss-adapter.md +4 -6
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +119 -46
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +9 -3
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.pi/skills/yss-product-lifecycle/references/user-decisions.md +56 -0
- package/template/.pi/skills/yss-prototype-stage/SKILL.md +9 -8
- package/template/.pi/skills/yss-prototype-stage/references/product-design-adapter.md +33 -10
- package/template/.pi/skills/yss-prototype-stage/references/prototype-profile-routing.md +10 -8
- package/template/.pi/skills/yss-prototype-stage/scripts/prototype-contract.mjs +129 -22
- package/template/.pi/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs +314 -0
- package/template/.pi/skills/yss-prototype-stage/tests/run-scenarios.mjs +96 -17
- package/template/.pi/skills/yss-repository/SKILL.md +6 -0
- package/template/.pi/skills/yss-repository/references/profiles/layered-mvc-service.md +3 -0
- package/template/.pi/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.pi/skills/yss-repository/references/profiles/target-domain-model.md +3 -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 +1 -1
- package/template/.pi/skills/yss-stage-decision/SKILL.md +16 -12
- package/template/.pi/skills/yss-stage-decision/references/domain-strategy-contract.md +16 -10
- package/template/.pi/skills/yss-stage-decision/references/domain-strategy.schema.json +23 -5
- package/template/.pi/skills/yss-stage-decision/references/stage-decision-package-contract.md +5 -2
- package/template/.pi/skills/yss-stage-decision/references/stage-decision-package.schema.json +16 -4
- package/template/.pi/skills/yss-stage-decision/references/validation-rules.md +1 -1
- package/template/.pi/skills/yss-stage-decision/scripts/migrate-context-references.mjs +62 -0
- package/template/.pi/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +18 -7
- package/template/.pi/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +20 -9
- package/template/.pi/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +1 -1
- package/template/.pi/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +1 -1
- package/template/.pi/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +12 -7
- package/template/.pi/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +9 -4
- package/template/.pi/skills/yss-stage-decision/tests/run-scenarios.mjs +134 -56
- package/template/.pi/skills/yss-tactical-design/SKILL.md +8 -2
- package/template/.pi/skills/yss-tactical-design/references/output-template.md +3 -0
- package/template/.pi/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.pi/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +10 -2
- package/template/.pi/skills/yss-ui/SKILL.md +3 -2
- package/template/.pi/skills/yss-ui-business-page-generation/SKILL.md +3 -3
- package/template/.pi/skills/yss-validation/SKILL.md +1 -0
- package/template/.pi/skills/yss-web-controller/SKILL.md +6 -0
- package/template/.pi/skills/yss-web-controller/references/profiles/layered-mvc-service.md +3 -0
- package/template/.pi/skills/yss-web-controller/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.pi/skills/yss-web-controller/references/profiles/target-domain-model.md +3 -0
- package/template/.pi/skills/yss-web-controller/references/web-generation-contract.schema.json +3 -2
- package/template/.pi/skills/yss-web-controller/scripts/generate_controller.mjs +27 -10
- package/template/.pi/skills/yss-web-controller/scripts/generate_controller.test.mjs +29 -1
- package/template/.qoder/skills/alibaba-java-code-style/SKILL.md +1 -0
- package/template/.qoder/skills/code-review/references/yss-review-standards.md +1 -1
- package/template/.qoder/skills/domain-modeling/CONTEXT-FORMAT.md +37 -42
- package/template/.qoder/skills/domain-modeling/SKILL.md +10 -26
- package/template/.qoder/skills/grill-with-docs/SKILL.md +6 -5
- package/template/.qoder/skills/lombok/SKILL.md +2 -1
- package/template/.qoder/skills/mapstruct/SKILL.md +3 -2
- package/template/.qoder/skills/setup-matt-pocock-skills/SKILL.md +5 -6
- package/template/.qoder/skills/setup-matt-pocock-skills/domain.md +6 -20
- package/template/.qoder/skills/wait-what/SKILL.md +1 -1
- package/template/.qoder/skills/yss-antdv-next-design/SKILL.md +48 -0
- package/template/.qoder/skills/yss-antdv-next-design/references/boundaries.md +25 -0
- package/template/.qoder/skills/yss-antdv-next-design/references/cli-matrix.md +34 -0
- package/template/.qoder/skills/yss-antdv-next-design/references/fact-pack.md +38 -0
- package/template/.qoder/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +213 -0
- package/template/.qoder/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +168 -0
- package/template/.qoder/skills/yss-antdv-next-design/tests/run-scenarios.mjs +139 -0
- package/template/.qoder/skills/yss-application/SKILL.md +6 -0
- package/template/.qoder/skills/yss-application/references/profiles/layered-mvc-service.md +3 -0
- package/template/.qoder/skills/yss-application/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.qoder/skills/yss-application/references/profiles/target-domain-model.md +3 -0
- package/template/.qoder/skills/yss-components/SKILL.md +1 -1
- package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +3 -4
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +0 -13
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +13 -0
- package/template/.qoder/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +13 -4
- package/template/.qoder/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +21 -7
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +37 -15
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +22 -10
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +14 -2
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +41 -12
- package/template/.qoder/skills/yss-design-system/SKILL.md +25 -22
- package/template/.qoder/skills/yss-design-system/references/design-qa-theme.md +22 -24
- package/template/.qoder/skills/yss-design-system/references/design-system.md +39 -56
- package/template/.qoder/skills/yss-domain/SKILL.md +1 -1
- package/template/.qoder/skills/yss-dto/SKILL.md +1 -0
- package/template/.qoder/skills/yss-exception/SKILL.md +1 -0
- package/template/.qoder/skills/yss-frontend-scaffold-generator/SKILL.md +3 -1
- package/template/.qoder/skills/yss-implementation-contract-compiler/SKILL.md +10 -2
- package/template/.qoder/skills/yss-implementation-contract-compiler/references/boundaries.md +16 -8
- package/template/.qoder/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +78 -19
- package/template/.qoder/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +7 -1
- package/template/.qoder/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +2 -0
- package/template/.qoder/skills/yss-implementation-contract-compiler/tests/backend-profiles.test.mjs +45 -0
- package/template/.qoder/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +8 -6
- package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/SKILL.md +64 -0
- package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +4 -0
- package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/references/architecture.md +29 -0
- package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +61 -0
- package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +315 -0
- package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +30 -0
- package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +159 -0
- package/template/.qoder/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +22 -0
- package/template/.qoder/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +77 -0
- package/template/.qoder/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +9 -0
- package/template/.qoder/skills/yss-mvc-scaffold-generator/SKILL.md +3 -82
- package/template/.qoder/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +137 -0
- package/template/.qoder/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +341 -0
- package/template/.qoder/skills/yss-mvc-scaffold-generator/references/history/skill.md +87 -0
- package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +2 -135
- package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +4 -332
- package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +11 -3
- package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +36 -0
- package/template/.qoder/skills/yss-mybatis/SKILL.md +2 -2
- package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +33 -7
- package/template/.qoder/skills/yss-product-lifecycle/references/artifact-dependencies.md +3 -0
- package/template/.qoder/skills/yss-product-lifecycle/references/matt-yss-adapter.md +4 -6
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +119 -46
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +9 -3
- package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.qoder/skills/yss-product-lifecycle/references/user-decisions.md +56 -0
- package/template/.qoder/skills/yss-prototype-stage/SKILL.md +9 -8
- package/template/.qoder/skills/yss-prototype-stage/references/product-design-adapter.md +33 -10
- package/template/.qoder/skills/yss-prototype-stage/references/prototype-profile-routing.md +10 -8
- package/template/.qoder/skills/yss-prototype-stage/scripts/prototype-contract.mjs +129 -22
- package/template/.qoder/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs +314 -0
- package/template/.qoder/skills/yss-prototype-stage/tests/run-scenarios.mjs +96 -17
- package/template/.qoder/skills/yss-repository/SKILL.md +6 -0
- package/template/.qoder/skills/yss-repository/references/profiles/layered-mvc-service.md +3 -0
- package/template/.qoder/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.qoder/skills/yss-repository/references/profiles/target-domain-model.md +3 -0
- package/template/.qoder/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
- package/template/.qoder/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +1 -1
- package/template/.qoder/skills/yss-stage-decision/SKILL.md +16 -12
- package/template/.qoder/skills/yss-stage-decision/references/domain-strategy-contract.md +16 -10
- package/template/.qoder/skills/yss-stage-decision/references/domain-strategy.schema.json +23 -5
- package/template/.qoder/skills/yss-stage-decision/references/stage-decision-package-contract.md +5 -2
- package/template/.qoder/skills/yss-stage-decision/references/stage-decision-package.schema.json +16 -4
- package/template/.qoder/skills/yss-stage-decision/references/validation-rules.md +1 -1
- package/template/.qoder/skills/yss-stage-decision/scripts/migrate-context-references.mjs +62 -0
- package/template/.qoder/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +18 -7
- package/template/.qoder/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +20 -9
- package/template/.qoder/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +1 -1
- package/template/.qoder/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +1 -1
- package/template/.qoder/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +12 -7
- package/template/.qoder/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +9 -4
- package/template/.qoder/skills/yss-stage-decision/tests/run-scenarios.mjs +134 -56
- package/template/.qoder/skills/yss-tactical-design/SKILL.md +8 -2
- package/template/.qoder/skills/yss-tactical-design/references/output-template.md +3 -0
- package/template/.qoder/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.qoder/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +10 -2
- package/template/.qoder/skills/yss-ui/SKILL.md +3 -2
- package/template/.qoder/skills/yss-ui-business-page-generation/SKILL.md +3 -3
- package/template/.qoder/skills/yss-validation/SKILL.md +1 -0
- package/template/.qoder/skills/yss-web-controller/SKILL.md +6 -0
- package/template/.qoder/skills/yss-web-controller/references/profiles/layered-mvc-service.md +3 -0
- package/template/.qoder/skills/yss-web-controller/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.qoder/skills/yss-web-controller/references/profiles/target-domain-model.md +3 -0
- package/template/.qoder/skills/yss-web-controller/references/web-generation-contract.schema.json +3 -2
- package/template/.qoder/skills/yss-web-controller/scripts/generate_controller.mjs +27 -10
- package/template/.qoder/skills/yss-web-controller/scripts/generate_controller.test.mjs +29 -1
- package/template/.trae/skills/alibaba-java-code-style/SKILL.md +1 -0
- package/template/.trae/skills/code-review/references/yss-review-standards.md +1 -1
- package/template/.trae/skills/domain-modeling/CONTEXT-FORMAT.md +37 -42
- package/template/.trae/skills/domain-modeling/SKILL.md +10 -26
- package/template/.trae/skills/grill-with-docs/SKILL.md +6 -5
- package/template/.trae/skills/lombok/SKILL.md +2 -1
- package/template/.trae/skills/mapstruct/SKILL.md +3 -2
- package/template/.trae/skills/setup-matt-pocock-skills/SKILL.md +5 -6
- package/template/.trae/skills/setup-matt-pocock-skills/domain.md +6 -20
- package/template/.trae/skills/wait-what/SKILL.md +1 -1
- package/template/.trae/skills/yss-antdv-next-design/SKILL.md +48 -0
- package/template/.trae/skills/yss-antdv-next-design/references/boundaries.md +25 -0
- package/template/.trae/skills/yss-antdv-next-design/references/cli-matrix.md +34 -0
- package/template/.trae/skills/yss-antdv-next-design/references/fact-pack.md +38 -0
- package/template/.trae/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +213 -0
- package/template/.trae/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +168 -0
- package/template/.trae/skills/yss-antdv-next-design/tests/run-scenarios.mjs +139 -0
- package/template/.trae/skills/yss-application/SKILL.md +6 -0
- package/template/.trae/skills/yss-application/references/profiles/layered-mvc-service.md +3 -0
- package/template/.trae/skills/yss-application/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.trae/skills/yss-application/references/profiles/target-domain-model.md +3 -0
- package/template/.trae/skills/yss-components/SKILL.md +1 -1
- package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +3 -4
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +0 -13
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +13 -0
- package/template/.trae/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +13 -4
- package/template/.trae/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +21 -7
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +37 -15
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +22 -10
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +14 -2
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +41 -12
- package/template/.trae/skills/yss-design-system/SKILL.md +25 -22
- package/template/.trae/skills/yss-design-system/references/design-qa-theme.md +22 -24
- package/template/.trae/skills/yss-design-system/references/design-system.md +39 -56
- package/template/.trae/skills/yss-domain/SKILL.md +1 -1
- package/template/.trae/skills/yss-dto/SKILL.md +1 -0
- package/template/.trae/skills/yss-exception/SKILL.md +1 -0
- package/template/.trae/skills/yss-frontend-scaffold-generator/SKILL.md +3 -1
- package/template/.trae/skills/yss-implementation-contract-compiler/SKILL.md +10 -2
- package/template/.trae/skills/yss-implementation-contract-compiler/references/boundaries.md +16 -8
- package/template/.trae/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +78 -19
- package/template/.trae/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +7 -1
- package/template/.trae/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +2 -0
- package/template/.trae/skills/yss-implementation-contract-compiler/tests/backend-profiles.test.mjs +45 -0
- package/template/.trae/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +8 -6
- package/template/.trae/skills/yss-layered-mvc-scaffold-generator/SKILL.md +64 -0
- package/template/.trae/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +4 -0
- package/template/.trae/skills/yss-layered-mvc-scaffold-generator/references/architecture.md +29 -0
- package/template/.trae/skills/yss-layered-mvc-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +61 -0
- package/template/.trae/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +315 -0
- package/template/.trae/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +30 -0
- package/template/.trae/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +159 -0
- package/template/.trae/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +22 -0
- package/template/.trae/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +77 -0
- package/template/.trae/skills/yss-mvc-data-analysis-project-initializer/scripts/run_scaffold_verification.mjs +9 -0
- package/template/.trae/skills/yss-mvc-scaffold-generator/SKILL.md +3 -82
- package/template/.trae/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +137 -0
- package/template/.trae/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +341 -0
- package/template/.trae/skills/yss-mvc-scaffold-generator/references/history/skill.md +87 -0
- package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +2 -135
- package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +4 -332
- package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +11 -3
- package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +36 -0
- package/template/.trae/skills/yss-mybatis/SKILL.md +2 -2
- package/template/.trae/skills/yss-product-lifecycle/SKILL.md +33 -7
- package/template/.trae/skills/yss-product-lifecycle/references/artifact-dependencies.md +3 -0
- package/template/.trae/skills/yss-product-lifecycle/references/matt-yss-adapter.md +4 -6
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +119 -46
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +9 -3
- package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +7 -2
- package/template/.trae/skills/yss-product-lifecycle/references/user-decisions.md +56 -0
- package/template/.trae/skills/yss-prototype-stage/SKILL.md +9 -8
- package/template/.trae/skills/yss-prototype-stage/references/product-design-adapter.md +33 -10
- package/template/.trae/skills/yss-prototype-stage/references/prototype-profile-routing.md +10 -8
- package/template/.trae/skills/yss-prototype-stage/scripts/prototype-contract.mjs +129 -22
- package/template/.trae/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs +314 -0
- package/template/.trae/skills/yss-prototype-stage/tests/run-scenarios.mjs +96 -17
- package/template/.trae/skills/yss-repository/SKILL.md +6 -0
- package/template/.trae/skills/yss-repository/references/profiles/layered-mvc-service.md +3 -0
- package/template/.trae/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.trae/skills/yss-repository/references/profiles/target-domain-model.md +3 -0
- package/template/.trae/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
- package/template/.trae/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +1 -1
- package/template/.trae/skills/yss-stage-decision/SKILL.md +16 -12
- package/template/.trae/skills/yss-stage-decision/references/domain-strategy-contract.md +16 -10
- package/template/.trae/skills/yss-stage-decision/references/domain-strategy.schema.json +23 -5
- package/template/.trae/skills/yss-stage-decision/references/stage-decision-package-contract.md +5 -2
- package/template/.trae/skills/yss-stage-decision/references/stage-decision-package.schema.json +16 -4
- package/template/.trae/skills/yss-stage-decision/references/validation-rules.md +1 -1
- package/template/.trae/skills/yss-stage-decision/scripts/migrate-context-references.mjs +62 -0
- package/template/.trae/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +18 -7
- package/template/.trae/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +20 -9
- package/template/.trae/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +1 -1
- package/template/.trae/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +1 -1
- package/template/.trae/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +12 -7
- package/template/.trae/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +9 -4
- package/template/.trae/skills/yss-stage-decision/tests/run-scenarios.mjs +134 -56
- package/template/.trae/skills/yss-tactical-design/SKILL.md +8 -2
- package/template/.trae/skills/yss-tactical-design/references/output-template.md +3 -0
- package/template/.trae/skills/yss-tactical-design/references/tactical-design-contract.md +3 -1
- package/template/.trae/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +10 -2
- package/template/.trae/skills/yss-ui/SKILL.md +3 -2
- package/template/.trae/skills/yss-ui-business-page-generation/SKILL.md +3 -3
- package/template/.trae/skills/yss-validation/SKILL.md +1 -0
- package/template/.trae/skills/yss-web-controller/SKILL.md +6 -0
- package/template/.trae/skills/yss-web-controller/references/profiles/layered-mvc-service.md +3 -0
- package/template/.trae/skills/yss-web-controller/references/profiles/mvc-data-analysis-v1.md +3 -0
- package/template/.trae/skills/yss-web-controller/references/profiles/target-domain-model.md +3 -0
- package/template/.trae/skills/yss-web-controller/references/web-generation-contract.schema.json +3 -2
- package/template/.trae/skills/yss-web-controller/scripts/generate_controller.mjs +27 -10
- package/template/.trae/skills/yss-web-controller/scripts/generate_controller.test.mjs +29 -1
- package/template/AGENTS.md +52 -91
- package/template/CONTEXT.md +17 -5
- package/template/DESIGN.md +85 -41
- package/template/README.md +4 -0
- package/template/__yss_dotfile__.gitignore +1 -0
- package/template/docs/agents/backend-architecture-profiles.md +25 -0
- package/template/docs/agents/digital-human-roles.md +3 -3
- package/template/docs/agents/digital-human-roles.yaml +47 -13
- package/template/docs/agents/domain.md +7 -6
- package/template/docs/agents/skill-migrations.md +20 -2
- package/template/docs/agents/skills-maintenance.md +3 -3
- package/template/docs/agents/strategic-design-skills-integration.md +6 -1
- package/template/docs/agents/yss-skill-registry.yaml +78 -94
- package/template/docs/agents/yss-ui-skills-integration.md +3 -3
- package/template/docs/api/templates/openapi-draft-review-checklist.md +2 -2
- package/template/docs/architecture/templates/engineering-baseline-review-template.md +18 -6
- package/template/docs/design/README.md +9 -6
- package/template/docs/design/design-system-sync.yaml +1 -1
- package/template/docs/design/design.md +86 -118
- package/template/docs/design/facts/antdv-next/1.5.2/cli-help.txt +38 -0
- package/template/docs/design/facts/antdv-next/1.5.2/component-list.json +434 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Alert/demo-basic.json +7 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Alert/info.json +246 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Alert/semantic.json +40 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Alert/token.json +32 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Button/demo-basic.json +7 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Button/info.json +190 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Button/semantic.json +20 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Button/token.json +256 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Input/demo-basic.json +7 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Input/info.json +460 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Input/semantic.json +70 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Input/token.json +123 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Modal/demo-basic.json +7 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Modal/info.json +646 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Modal/semantic.json +50 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Modal/token.json +130 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Select/demo-basic.json +7 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Select/info.json +640 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Select/semantic.json +70 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Select/token.json +172 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Table/demo-basic.json +7 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Table/info.json +1010 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Table/semantic.json +70 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Table/token.json +263 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Tag/demo-basic.json +7 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Tag/info.json +321 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Tag/semantic.json +25 -0
- package/template/docs/design/facts/antdv-next/1.5.2/components/Tag/token.json +25 -0
- package/template/docs/design/facts/antdv-next/1.5.2/design-md.json +3 -0
- package/template/docs/design/facts/antdv-next/1.5.2/manifest.json +215 -0
- package/template/docs/design/facts/antdv-next/1.5.2/resolution-probe.json +5 -0
- package/template/docs/design/preview-dark.html +170 -7
- package/template/docs/design/preview.css +730 -0
- package/template/docs/design/preview.html +168 -10
- package/template/docs/design/preview.js +71 -0
- package/template/docs/design/schemas/visual-baseline.schema.json +66 -0
- package/template/docs/design/templates/interaction-spec-template.md +1 -1
- package/template/docs/design/templates/product-overview-design-template.md +6 -6
- package/template/docs/design/templates/prototype-evidence-template.yaml +21 -8
- package/template/docs/design/templates/prototype-review-checklist.md +1 -1
- package/template/docs/design/templates/visual-baseline-template.yaml +70 -0
- package/template/docs/design/tokens/.design-md-projection.json +3 -3
- package/template/docs/design/tokens/theme.json +2 -2
- package/template/docs/design/tokens/variables.css +5 -0
- package/template/docs/process/frontend-backend-delivery.md +72 -0
- package/template/docs/process/harness-executive-blueprint.md +1 -1
- package/template/docs/process/harness-process-tailoring.md +1 -0
- package/template/docs/process/implementation-repo-integration.md +2 -0
- package/template/docs/process/lifecycle-artifact-map.md +6 -4
- package/template/docs/process/lifecycle-registry-baseline.json +8 -5
- package/template/docs/process/lifecycle-registry.yaml +27 -0
- package/template/docs/process/schemas/backend-architecture-identity.schema.json +19 -0
- package/template/docs/process/schemas/backend-delivery-verification.schema.json +113 -0
- package/template/docs/process/schemas/backend-delivery.schema.json +301 -0
- package/template/docs/process/schemas/context-reconciliation.schema.json +57 -0
- package/template/docs/process/schemas/digital-human-task-package.schema.json +18 -0
- package/template/docs/process/schemas/frontend-delivery-acceptance.schema.json +200 -0
- package/template/docs/process/schemas/frontend-implementation-evidence.schema.json +65 -29
- package/template/docs/process/schemas/lifecycle-checkpoint.schema.json +16 -2
- package/template/docs/process/schemas/lifecycle-registry.schema.json +4 -4
- package/template/docs/process/schemas/scaffold-architecture-decisions.schema.json +68 -0
- package/template/docs/process/schemas/strategic-design-handoff.schema.json +670 -0
- package/template/docs/process/schemas/strategic-handoff-domain-strategy.schema.json +146 -0
- package/template/docs/process/schemas/strategic-handoff-export.schema.json +295 -0
- package/template/docs/process/schemas/strategic-handoff-package.schema.json +97 -0
- package/template/docs/process/schemas/strategic-handoff-stage-decision-package.schema.json +98 -0
- package/template/docs/process/schemas/user-decision.schema.json +357 -0
- package/template/docs/process/strategic-handoff-package.md +56 -0
- package/template/docs/process/template-verification-profiles.yaml +66 -1
- package/template/docs/process/templates/context-reconciliation-template.yaml +18 -0
- package/template/docs/process/templates/frontend-implementation-plan-template.yaml +11 -5
- package/template/docs/process/templates/frontend-implementation-verification-template.yaml +25 -5
- package/template/docs/process/templates/lifecycle-checkpoint-template.yaml +9 -0
- package/template/docs/process/templates/scaffold-architecture-decisions-template.yaml +32 -0
- package/template/docs/process/templates/stage-checkpoint-template.md +5 -0
- package/template/docs/process/templates/user-decision-template.yaml +30 -0
- package/template/docs/templates/approval-record-template.yaml +4 -0
- package/template/docs/templates/build-architecture-checklist-template.md +3 -3
- package/template/docs/templates/implementation-repo-registry-template.md +3 -1
- package/template/docs/templates/implementation-routing-template.md +8 -6
- package/template/docs/templates/requirement-freeze-template.md +1 -1
- package/template/docs/templates/review-report-template.md +1 -1
- package/template/docs/templates/spec-template.md +5 -5
- package/template/docs/user-guide//346/210/230/346/234/257/350/256/276/350/256/241/345/255/220/351/241/271/347/233/256/347/224/250/346/210/267/346/211/213/345/206/214.md +20 -204
- package/template/docs/user-guide//347/224/250/346/210/267/346/211/213/345/206/214.md +63 -963
- package/template/docs/user-guide//347/224/250/346/210/267/346/211/213/345/206/214/347/264/242/345/274/225.md +11 -14
- 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 +127 -0
- package/template/scripts/backend-delivery +14 -0
- package/template/scripts/fixtures/backend-delivery/revision-server.mjs +11 -0
- package/template/scripts/fixtures/strategic-handoff/base-stage.json +91 -0
- package/template/scripts/fixtures/strategic-handoff/base-strategy.json +205 -0
- package/template/scripts/fixtures/strategic-handoff/fixture.mjs +57 -0
- package/template/scripts/fixtures/strategic-handoff/source-roles.json +528 -0
- package/template/scripts/fixtures/user-decision/build-fixture.mjs +61 -0
- package/template/scripts/instantiate-harness +69 -0
- package/template/scripts/lib/approval-record.mjs +32 -1
- package/template/scripts/lib/backend-architecture.mjs +43 -0
- package/template/scripts/lib/backend-delivery.mjs +164 -0
- package/template/scripts/lib/context-contract.mjs +203 -0
- package/template/scripts/lib/digital-human-roles.mjs +21 -3
- package/template/scripts/lib/first-slice-architecture.mjs +23 -0
- package/template/scripts/lib/frontend-delivery-boundary.mjs +49 -0
- package/template/scripts/lib/frontend-delivery.mjs +73 -0
- package/template/scripts/lib/harness-execution-scope.mjs +52 -0
- package/template/scripts/lib/implementation-contract-compiler.mjs +45 -2
- package/template/scripts/lib/lifecycle-registry.mjs +14 -6
- package/template/scripts/lib/lifecycle-transition.mjs +26 -4
- package/template/scripts/lib/scaffold-local-database.mjs +26 -0
- package/template/scripts/lib/scenario-checks.mjs +25 -12
- package/template/scripts/lib/skill-governance.mjs +25 -10
- package/template/scripts/lib/skill-registry.mjs +1 -1
- package/template/scripts/lib/skill-supply-chain.mjs +1 -1
- package/template/scripts/lib/strategic-handoff-consumption.mjs +83 -0
- package/template/scripts/lib/strategic-handoff-io.mjs +75 -0
- package/template/scripts/lib/strategic-handoff-rules.mjs +37 -0
- package/template/scripts/lib/strategic-handoff-zip.py +52 -0
- package/template/scripts/lib/strategic-handoff.mjs +259 -0
- package/template/scripts/lib/task-package.mjs +17 -2
- package/template/scripts/lib/user-decision.mjs +210 -0
- package/template/scripts/strategic-handoff +14 -0
- package/template/scripts/sync-strategic-handoff-tools +20 -0
- package/template/scripts/verify-approval-record +5 -4
- package/template/scripts/verify-business-language-scenarios +59 -0
- package/template/scripts/verify-context-contract +15 -0
- package/template/scripts/verify-context-contract-scenarios +105 -0
- package/template/scripts/verify-context-reconciliation +58 -0
- package/template/scripts/verify-context-reconciliation-scenarios +69 -0
- package/template/scripts/verify-digital-human-roles-scenarios +1 -1
- package/template/scripts/verify-frontend-delivery +9 -0
- package/template/scripts/verify-frontend-delivery-scenarios +131 -0
- package/template/scripts/verify-frontend-implementation-evidence +33 -8
- package/template/scripts/verify-frontend-implementation-evidence-scenarios +56 -0
- package/template/scripts/verify-grill-with-docs-context-scenarios +15 -0
- package/template/scripts/verify-lifecycle-checkpoint +9 -1
- package/template/scripts/verify-lifecycle-transition-scenarios +13 -3
- package/template/scripts/verify-retired-skill-ids +30 -4
- package/template/scripts/verify-scaffold-architecture-decision-scenarios +30 -0
- package/template/scripts/verify-scaffold-architecture-decisions +61 -0
- package/template/scripts/verify-scaffold-generator-scenarios +74 -3
- package/template/scripts/verify-strategic-context-import +65 -0
- package/template/scripts/verify-strategic-context-import-scenarios +50 -0
- package/template/scripts/verify-strategic-handoff-consumption +10 -0
- package/template/scripts/verify-strategic-handoff-package-scenarios +102 -0
- package/template/scripts/verify-subagent-task-package-scenarios +17 -3
- package/template/scripts/verify-template-verification-scenarios +6 -1
- package/template/scripts/verify-user-decision +17 -0
- package/template/scripts/verify-user-decision-scenarios +103 -0
- package/template/skills-lock.json +77 -270
- package/template/yss-public-skills.json +4 -4
- package/template.manifest.json +43 -1
- package/template.snapshot.json +5 -5
- package/template/.agents/skills/ask-matt/PHASE-BOUNDARIES.md +0 -55
- package/template/.agents/skills/ask-matt/SKILL.md +0 -95
- package/template/.agents/skills/ask-matt/agents/openai.yaml +0 -5
- package/template/.agents/skills/dispatching-parallel-agents/SKILL.md +0 -185
- package/template/.agents/skills/loop-me/SKILL.md +0 -32
- package/template/.agents/skills/loop-me/agents/openai.yaml +0 -5
- package/template/.agents/skills/migrate-to-shoehorn/SKILL.md +0 -118
- package/template/.agents/skills/migrate-to-shoehorn/agents/openai.yaml +0 -3
- package/template/.agents/skills/prototype-page-acceptance/SKILL.md +0 -62
- package/template/.agents/skills/scaffold-exercises/SKILL.md +0 -106
- package/template/.agents/skills/scaffold-exercises/agents/openai.yaml +0 -3
- package/template/.agents/skills/setup-pre-commit/SKILL.md +0 -91
- package/template/.agents/skills/setup-pre-commit/agents/openai.yaml +0 -3
- package/template/.agents/skills/setup-ts-deep-modules/SKILL.md +0 -102
- package/template/.agents/skills/setup-ts-deep-modules/agents/openai.yaml +0 -5
- package/template/.agents/skills/setup-ts-deep-modules/dependency-cruiser.config.cjs +0 -95
- package/template/.agents/skills/teach/GLOSSARY-FORMAT.md +0 -35
- package/template/.agents/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
- package/template/.agents/skills/teach/MISSION-FORMAT.md +0 -31
- package/template/.agents/skills/teach/RESOURCES-FORMAT.md +0 -32
- package/template/.agents/skills/teach/SKILL.md +0 -140
- package/template/.agents/skills/teach/agents/openai.yaml +0 -5
- package/template/.agents/skills/writing-beats/SKILL.md +0 -67
- package/template/.agents/skills/writing-beats/agents/openai.yaml +0 -5
- package/template/.agents/skills/writing-fragments/SKILL.md +0 -79
- package/template/.agents/skills/writing-fragments/agents/openai.yaml +0 -5
- package/template/.agents/skills/writing-shape/SKILL.md +0 -79
- package/template/.agents/skills/writing-shape/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-microapp-commit/SKILL.md +0 -201
- package/template/.agents/skills/yss-microapp-commit/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-microapp-commit/references/scope-mapping.md +0 -204
- package/template/.agents/skills/yss-page-module-development/SKILL.md +0 -165
- package/template/.agents/skills/yss-page-module-development/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-page-module-development/examples/AdvancedFormPage/constant.ts +0 -32
- package/template/.agents/skills/yss-page-module-development/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -158
- package/template/.agents/skills/yss-page-module-development/examples/AdvancedFormPage/index.vue +0 -188
- package/template/.agents/skills/yss-page-module-development/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.agents/skills/yss-page-module-development/examples/AdvancedFormPage/style.less +0 -76
- package/template/.agents/skills/yss-page-module-development/examples/StandardListPage/constant.ts +0 -128
- package/template/.agents/skills/yss-page-module-development/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -144
- package/template/.agents/skills/yss-page-module-development/examples/StandardListPage/hooks/useRuleActions.ts +0 -141
- package/template/.agents/skills/yss-page-module-development/examples/StandardListPage/index.vue +0 -175
- package/template/.agents/skills/yss-page-module-development/examples/StandardListPage/style.less +0 -83
- package/template/.agents/skills/yss-page-module-development/references/component-map.md +0 -34
- package/template/.agents/skills/yss-page-module-development/references/frontend-docs.md +0 -11
- package/template/.agents/skills/yss-page-module-development/references/hooks-map.md +0 -11
- package/template/.agents/skills/yss-page-module-development/references/utils-map.md +0 -14
- package/template/.claude/skills/ask-matt/PHASE-BOUNDARIES.md +0 -55
- package/template/.claude/skills/ask-matt/SKILL.md +0 -95
- package/template/.claude/skills/ask-matt/agents/openai.yaml +0 -5
- package/template/.claude/skills/dispatching-parallel-agents/SKILL.md +0 -185
- package/template/.claude/skills/loop-me/SKILL.md +0 -32
- package/template/.claude/skills/loop-me/agents/openai.yaml +0 -5
- package/template/.claude/skills/migrate-to-shoehorn/SKILL.md +0 -118
- package/template/.claude/skills/migrate-to-shoehorn/agents/openai.yaml +0 -3
- package/template/.claude/skills/prototype-page-acceptance/SKILL.md +0 -62
- package/template/.claude/skills/scaffold-exercises/SKILL.md +0 -106
- package/template/.claude/skills/scaffold-exercises/agents/openai.yaml +0 -3
- package/template/.claude/skills/setup-pre-commit/SKILL.md +0 -91
- package/template/.claude/skills/setup-pre-commit/agents/openai.yaml +0 -3
- package/template/.claude/skills/setup-ts-deep-modules/SKILL.md +0 -102
- package/template/.claude/skills/setup-ts-deep-modules/agents/openai.yaml +0 -5
- package/template/.claude/skills/setup-ts-deep-modules/dependency-cruiser.config.cjs +0 -95
- package/template/.claude/skills/teach/GLOSSARY-FORMAT.md +0 -35
- package/template/.claude/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
- package/template/.claude/skills/teach/MISSION-FORMAT.md +0 -31
- package/template/.claude/skills/teach/RESOURCES-FORMAT.md +0 -32
- package/template/.claude/skills/teach/SKILL.md +0 -140
- package/template/.claude/skills/teach/agents/openai.yaml +0 -5
- package/template/.claude/skills/writing-beats/SKILL.md +0 -67
- package/template/.claude/skills/writing-beats/agents/openai.yaml +0 -5
- package/template/.claude/skills/writing-fragments/SKILL.md +0 -79
- package/template/.claude/skills/writing-fragments/agents/openai.yaml +0 -5
- package/template/.claude/skills/writing-shape/SKILL.md +0 -79
- package/template/.claude/skills/writing-shape/agents/openai.yaml +0 -5
- package/template/.claude/skills/yss-microapp-commit/SKILL.md +0 -201
- package/template/.claude/skills/yss-microapp-commit/agents/openai.yaml +0 -5
- package/template/.claude/skills/yss-microapp-commit/references/scope-mapping.md +0 -204
- package/template/.claude/skills/yss-page-module-development/SKILL.md +0 -165
- package/template/.claude/skills/yss-page-module-development/agents/openai.yaml +0 -5
- package/template/.claude/skills/yss-page-module-development/examples/AdvancedFormPage/constant.ts +0 -32
- package/template/.claude/skills/yss-page-module-development/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -158
- package/template/.claude/skills/yss-page-module-development/examples/AdvancedFormPage/index.vue +0 -188
- package/template/.claude/skills/yss-page-module-development/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.claude/skills/yss-page-module-development/examples/AdvancedFormPage/style.less +0 -76
- package/template/.claude/skills/yss-page-module-development/examples/StandardListPage/constant.ts +0 -128
- package/template/.claude/skills/yss-page-module-development/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -144
- package/template/.claude/skills/yss-page-module-development/examples/StandardListPage/hooks/useRuleActions.ts +0 -141
- package/template/.claude/skills/yss-page-module-development/examples/StandardListPage/index.vue +0 -175
- package/template/.claude/skills/yss-page-module-development/examples/StandardListPage/style.less +0 -83
- package/template/.claude/skills/yss-page-module-development/references/component-map.md +0 -34
- package/template/.claude/skills/yss-page-module-development/references/frontend-docs.md +0 -11
- package/template/.claude/skills/yss-page-module-development/references/hooks-map.md +0 -11
- package/template/.claude/skills/yss-page-module-development/references/utils-map.md +0 -14
- package/template/.codex/skills/ask-matt/PHASE-BOUNDARIES.md +0 -55
- package/template/.codex/skills/ask-matt/SKILL.md +0 -95
- package/template/.codex/skills/ask-matt/agents/openai.yaml +0 -5
- package/template/.codex/skills/dispatching-parallel-agents/SKILL.md +0 -185
- package/template/.codex/skills/loop-me/SKILL.md +0 -32
- package/template/.codex/skills/loop-me/agents/openai.yaml +0 -5
- package/template/.codex/skills/migrate-to-shoehorn/SKILL.md +0 -118
- package/template/.codex/skills/migrate-to-shoehorn/agents/openai.yaml +0 -3
- package/template/.codex/skills/prototype-page-acceptance/SKILL.md +0 -62
- package/template/.codex/skills/scaffold-exercises/SKILL.md +0 -106
- package/template/.codex/skills/scaffold-exercises/agents/openai.yaml +0 -3
- package/template/.codex/skills/setup-pre-commit/SKILL.md +0 -91
- package/template/.codex/skills/setup-pre-commit/agents/openai.yaml +0 -3
- package/template/.codex/skills/setup-ts-deep-modules/SKILL.md +0 -102
- package/template/.codex/skills/setup-ts-deep-modules/agents/openai.yaml +0 -5
- package/template/.codex/skills/setup-ts-deep-modules/dependency-cruiser.config.cjs +0 -95
- package/template/.codex/skills/teach/GLOSSARY-FORMAT.md +0 -35
- package/template/.codex/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
- package/template/.codex/skills/teach/MISSION-FORMAT.md +0 -31
- package/template/.codex/skills/teach/RESOURCES-FORMAT.md +0 -32
- package/template/.codex/skills/teach/SKILL.md +0 -140
- package/template/.codex/skills/teach/agents/openai.yaml +0 -5
- package/template/.codex/skills/writing-beats/SKILL.md +0 -67
- package/template/.codex/skills/writing-beats/agents/openai.yaml +0 -5
- package/template/.codex/skills/writing-fragments/SKILL.md +0 -79
- package/template/.codex/skills/writing-fragments/agents/openai.yaml +0 -5
- package/template/.codex/skills/writing-shape/SKILL.md +0 -79
- package/template/.codex/skills/writing-shape/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-microapp-commit/SKILL.md +0 -201
- package/template/.codex/skills/yss-microapp-commit/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-microapp-commit/references/scope-mapping.md +0 -204
- package/template/.codex/skills/yss-page-module-development/SKILL.md +0 -165
- package/template/.codex/skills/yss-page-module-development/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-page-module-development/examples/AdvancedFormPage/constant.ts +0 -32
- package/template/.codex/skills/yss-page-module-development/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -158
- package/template/.codex/skills/yss-page-module-development/examples/AdvancedFormPage/index.vue +0 -188
- package/template/.codex/skills/yss-page-module-development/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.codex/skills/yss-page-module-development/examples/AdvancedFormPage/style.less +0 -76
- package/template/.codex/skills/yss-page-module-development/examples/StandardListPage/constant.ts +0 -128
- package/template/.codex/skills/yss-page-module-development/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -144
- package/template/.codex/skills/yss-page-module-development/examples/StandardListPage/hooks/useRuleActions.ts +0 -141
- package/template/.codex/skills/yss-page-module-development/examples/StandardListPage/index.vue +0 -175
- package/template/.codex/skills/yss-page-module-development/examples/StandardListPage/style.less +0 -83
- package/template/.codex/skills/yss-page-module-development/references/component-map.md +0 -34
- package/template/.codex/skills/yss-page-module-development/references/frontend-docs.md +0 -11
- package/template/.codex/skills/yss-page-module-development/references/hooks-map.md +0 -11
- package/template/.codex/skills/yss-page-module-development/references/utils-map.md +0 -14
- package/template/.cursor/skills/ask-matt/PHASE-BOUNDARIES.md +0 -55
- package/template/.cursor/skills/ask-matt/SKILL.md +0 -95
- package/template/.cursor/skills/ask-matt/agents/openai.yaml +0 -5
- package/template/.cursor/skills/dispatching-parallel-agents/SKILL.md +0 -185
- package/template/.cursor/skills/loop-me/SKILL.md +0 -32
- package/template/.cursor/skills/loop-me/agents/openai.yaml +0 -5
- package/template/.cursor/skills/migrate-to-shoehorn/SKILL.md +0 -118
- package/template/.cursor/skills/migrate-to-shoehorn/agents/openai.yaml +0 -3
- package/template/.cursor/skills/prototype-page-acceptance/SKILL.md +0 -62
- package/template/.cursor/skills/scaffold-exercises/SKILL.md +0 -106
- package/template/.cursor/skills/scaffold-exercises/agents/openai.yaml +0 -3
- package/template/.cursor/skills/setup-pre-commit/SKILL.md +0 -91
- package/template/.cursor/skills/setup-pre-commit/agents/openai.yaml +0 -3
- package/template/.cursor/skills/setup-ts-deep-modules/SKILL.md +0 -102
- package/template/.cursor/skills/setup-ts-deep-modules/agents/openai.yaml +0 -5
- package/template/.cursor/skills/setup-ts-deep-modules/dependency-cruiser.config.cjs +0 -95
- package/template/.cursor/skills/teach/GLOSSARY-FORMAT.md +0 -35
- package/template/.cursor/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
- package/template/.cursor/skills/teach/MISSION-FORMAT.md +0 -31
- package/template/.cursor/skills/teach/RESOURCES-FORMAT.md +0 -32
- package/template/.cursor/skills/teach/SKILL.md +0 -140
- package/template/.cursor/skills/teach/agents/openai.yaml +0 -5
- package/template/.cursor/skills/writing-beats/SKILL.md +0 -67
- package/template/.cursor/skills/writing-beats/agents/openai.yaml +0 -5
- package/template/.cursor/skills/writing-fragments/SKILL.md +0 -79
- package/template/.cursor/skills/writing-fragments/agents/openai.yaml +0 -5
- package/template/.cursor/skills/writing-shape/SKILL.md +0 -79
- package/template/.cursor/skills/writing-shape/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-microapp-commit/SKILL.md +0 -201
- package/template/.cursor/skills/yss-microapp-commit/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-microapp-commit/references/scope-mapping.md +0 -204
- package/template/.cursor/skills/yss-page-module-development/SKILL.md +0 -165
- package/template/.cursor/skills/yss-page-module-development/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-page-module-development/examples/AdvancedFormPage/constant.ts +0 -32
- package/template/.cursor/skills/yss-page-module-development/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -158
- package/template/.cursor/skills/yss-page-module-development/examples/AdvancedFormPage/index.vue +0 -188
- package/template/.cursor/skills/yss-page-module-development/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.cursor/skills/yss-page-module-development/examples/AdvancedFormPage/style.less +0 -76
- package/template/.cursor/skills/yss-page-module-development/examples/StandardListPage/constant.ts +0 -128
- package/template/.cursor/skills/yss-page-module-development/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -144
- package/template/.cursor/skills/yss-page-module-development/examples/StandardListPage/hooks/useRuleActions.ts +0 -141
- package/template/.cursor/skills/yss-page-module-development/examples/StandardListPage/index.vue +0 -175
- package/template/.cursor/skills/yss-page-module-development/examples/StandardListPage/style.less +0 -83
- package/template/.cursor/skills/yss-page-module-development/references/component-map.md +0 -34
- package/template/.cursor/skills/yss-page-module-development/references/frontend-docs.md +0 -11
- package/template/.cursor/skills/yss-page-module-development/references/hooks-map.md +0 -11
- package/template/.cursor/skills/yss-page-module-development/references/utils-map.md +0 -14
- package/template/.pi/skills/ask-matt/PHASE-BOUNDARIES.md +0 -55
- package/template/.pi/skills/ask-matt/SKILL.md +0 -95
- package/template/.pi/skills/ask-matt/agents/openai.yaml +0 -5
- package/template/.pi/skills/dispatching-parallel-agents/SKILL.md +0 -185
- package/template/.pi/skills/loop-me/SKILL.md +0 -32
- package/template/.pi/skills/loop-me/agents/openai.yaml +0 -5
- package/template/.pi/skills/migrate-to-shoehorn/SKILL.md +0 -118
- package/template/.pi/skills/migrate-to-shoehorn/agents/openai.yaml +0 -3
- package/template/.pi/skills/prototype-page-acceptance/SKILL.md +0 -62
- package/template/.pi/skills/scaffold-exercises/SKILL.md +0 -106
- package/template/.pi/skills/scaffold-exercises/agents/openai.yaml +0 -3
- package/template/.pi/skills/setup-pre-commit/SKILL.md +0 -91
- package/template/.pi/skills/setup-pre-commit/agents/openai.yaml +0 -3
- package/template/.pi/skills/setup-ts-deep-modules/SKILL.md +0 -102
- package/template/.pi/skills/setup-ts-deep-modules/agents/openai.yaml +0 -5
- package/template/.pi/skills/setup-ts-deep-modules/dependency-cruiser.config.cjs +0 -95
- package/template/.pi/skills/teach/GLOSSARY-FORMAT.md +0 -35
- package/template/.pi/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
- package/template/.pi/skills/teach/MISSION-FORMAT.md +0 -31
- package/template/.pi/skills/teach/RESOURCES-FORMAT.md +0 -32
- package/template/.pi/skills/teach/SKILL.md +0 -140
- package/template/.pi/skills/teach/agents/openai.yaml +0 -5
- package/template/.pi/skills/writing-beats/SKILL.md +0 -67
- package/template/.pi/skills/writing-beats/agents/openai.yaml +0 -5
- package/template/.pi/skills/writing-fragments/SKILL.md +0 -79
- package/template/.pi/skills/writing-fragments/agents/openai.yaml +0 -5
- package/template/.pi/skills/writing-shape/SKILL.md +0 -79
- package/template/.pi/skills/writing-shape/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-microapp-commit/SKILL.md +0 -201
- package/template/.pi/skills/yss-microapp-commit/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-microapp-commit/references/scope-mapping.md +0 -204
- package/template/.pi/skills/yss-page-module-development/SKILL.md +0 -165
- package/template/.pi/skills/yss-page-module-development/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-page-module-development/examples/AdvancedFormPage/constant.ts +0 -32
- package/template/.pi/skills/yss-page-module-development/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -158
- package/template/.pi/skills/yss-page-module-development/examples/AdvancedFormPage/index.vue +0 -188
- package/template/.pi/skills/yss-page-module-development/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.pi/skills/yss-page-module-development/examples/AdvancedFormPage/style.less +0 -76
- package/template/.pi/skills/yss-page-module-development/examples/StandardListPage/constant.ts +0 -128
- package/template/.pi/skills/yss-page-module-development/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -144
- package/template/.pi/skills/yss-page-module-development/examples/StandardListPage/hooks/useRuleActions.ts +0 -141
- package/template/.pi/skills/yss-page-module-development/examples/StandardListPage/index.vue +0 -175
- package/template/.pi/skills/yss-page-module-development/examples/StandardListPage/style.less +0 -83
- package/template/.pi/skills/yss-page-module-development/references/component-map.md +0 -34
- package/template/.pi/skills/yss-page-module-development/references/frontend-docs.md +0 -11
- package/template/.pi/skills/yss-page-module-development/references/hooks-map.md +0 -11
- package/template/.pi/skills/yss-page-module-development/references/utils-map.md +0 -14
- package/template/.qoder/skills/ask-matt/PHASE-BOUNDARIES.md +0 -55
- package/template/.qoder/skills/ask-matt/SKILL.md +0 -95
- package/template/.qoder/skills/ask-matt/agents/openai.yaml +0 -5
- package/template/.qoder/skills/dispatching-parallel-agents/SKILL.md +0 -185
- package/template/.qoder/skills/loop-me/SKILL.md +0 -32
- package/template/.qoder/skills/loop-me/agents/openai.yaml +0 -5
- package/template/.qoder/skills/migrate-to-shoehorn/SKILL.md +0 -118
- package/template/.qoder/skills/migrate-to-shoehorn/agents/openai.yaml +0 -3
- package/template/.qoder/skills/prototype-page-acceptance/SKILL.md +0 -62
- package/template/.qoder/skills/scaffold-exercises/SKILL.md +0 -106
- package/template/.qoder/skills/scaffold-exercises/agents/openai.yaml +0 -3
- package/template/.qoder/skills/setup-pre-commit/SKILL.md +0 -91
- package/template/.qoder/skills/setup-pre-commit/agents/openai.yaml +0 -3
- package/template/.qoder/skills/setup-ts-deep-modules/SKILL.md +0 -102
- package/template/.qoder/skills/setup-ts-deep-modules/agents/openai.yaml +0 -5
- package/template/.qoder/skills/setup-ts-deep-modules/dependency-cruiser.config.cjs +0 -95
- package/template/.qoder/skills/teach/GLOSSARY-FORMAT.md +0 -35
- package/template/.qoder/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
- package/template/.qoder/skills/teach/MISSION-FORMAT.md +0 -31
- package/template/.qoder/skills/teach/RESOURCES-FORMAT.md +0 -32
- package/template/.qoder/skills/teach/SKILL.md +0 -140
- package/template/.qoder/skills/teach/agents/openai.yaml +0 -5
- package/template/.qoder/skills/writing-beats/SKILL.md +0 -67
- package/template/.qoder/skills/writing-beats/agents/openai.yaml +0 -5
- package/template/.qoder/skills/writing-fragments/SKILL.md +0 -79
- package/template/.qoder/skills/writing-fragments/agents/openai.yaml +0 -5
- package/template/.qoder/skills/writing-shape/SKILL.md +0 -79
- package/template/.qoder/skills/writing-shape/agents/openai.yaml +0 -5
- package/template/.qoder/skills/yss-microapp-commit/SKILL.md +0 -201
- package/template/.qoder/skills/yss-microapp-commit/agents/openai.yaml +0 -5
- package/template/.qoder/skills/yss-microapp-commit/references/scope-mapping.md +0 -204
- package/template/.qoder/skills/yss-page-module-development/SKILL.md +0 -165
- package/template/.qoder/skills/yss-page-module-development/agents/openai.yaml +0 -5
- package/template/.qoder/skills/yss-page-module-development/examples/AdvancedFormPage/constant.ts +0 -32
- package/template/.qoder/skills/yss-page-module-development/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -158
- package/template/.qoder/skills/yss-page-module-development/examples/AdvancedFormPage/index.vue +0 -188
- package/template/.qoder/skills/yss-page-module-development/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.qoder/skills/yss-page-module-development/examples/AdvancedFormPage/style.less +0 -76
- package/template/.qoder/skills/yss-page-module-development/examples/StandardListPage/constant.ts +0 -128
- package/template/.qoder/skills/yss-page-module-development/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -144
- package/template/.qoder/skills/yss-page-module-development/examples/StandardListPage/hooks/useRuleActions.ts +0 -141
- package/template/.qoder/skills/yss-page-module-development/examples/StandardListPage/index.vue +0 -175
- package/template/.qoder/skills/yss-page-module-development/examples/StandardListPage/style.less +0 -83
- package/template/.qoder/skills/yss-page-module-development/references/component-map.md +0 -34
- package/template/.qoder/skills/yss-page-module-development/references/frontend-docs.md +0 -11
- package/template/.qoder/skills/yss-page-module-development/references/hooks-map.md +0 -11
- package/template/.qoder/skills/yss-page-module-development/references/utils-map.md +0 -14
- package/template/.trae/skills/ask-matt/PHASE-BOUNDARIES.md +0 -55
- package/template/.trae/skills/ask-matt/SKILL.md +0 -95
- package/template/.trae/skills/ask-matt/agents/openai.yaml +0 -5
- package/template/.trae/skills/dispatching-parallel-agents/SKILL.md +0 -185
- package/template/.trae/skills/loop-me/SKILL.md +0 -32
- package/template/.trae/skills/loop-me/agents/openai.yaml +0 -5
- package/template/.trae/skills/migrate-to-shoehorn/SKILL.md +0 -118
- package/template/.trae/skills/migrate-to-shoehorn/agents/openai.yaml +0 -3
- package/template/.trae/skills/prototype-page-acceptance/SKILL.md +0 -62
- package/template/.trae/skills/scaffold-exercises/SKILL.md +0 -106
- package/template/.trae/skills/scaffold-exercises/agents/openai.yaml +0 -3
- package/template/.trae/skills/setup-pre-commit/SKILL.md +0 -91
- package/template/.trae/skills/setup-pre-commit/agents/openai.yaml +0 -3
- package/template/.trae/skills/setup-ts-deep-modules/SKILL.md +0 -102
- package/template/.trae/skills/setup-ts-deep-modules/agents/openai.yaml +0 -5
- package/template/.trae/skills/setup-ts-deep-modules/dependency-cruiser.config.cjs +0 -95
- package/template/.trae/skills/teach/GLOSSARY-FORMAT.md +0 -35
- package/template/.trae/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
- package/template/.trae/skills/teach/MISSION-FORMAT.md +0 -31
- package/template/.trae/skills/teach/RESOURCES-FORMAT.md +0 -32
- package/template/.trae/skills/teach/SKILL.md +0 -140
- package/template/.trae/skills/teach/agents/openai.yaml +0 -5
- package/template/.trae/skills/writing-beats/SKILL.md +0 -67
- package/template/.trae/skills/writing-beats/agents/openai.yaml +0 -5
- package/template/.trae/skills/writing-fragments/SKILL.md +0 -79
- package/template/.trae/skills/writing-fragments/agents/openai.yaml +0 -5
- package/template/.trae/skills/writing-shape/SKILL.md +0 -79
- package/template/.trae/skills/writing-shape/agents/openai.yaml +0 -5
- package/template/.trae/skills/yss-microapp-commit/SKILL.md +0 -201
- package/template/.trae/skills/yss-microapp-commit/agents/openai.yaml +0 -5
- package/template/.trae/skills/yss-microapp-commit/references/scope-mapping.md +0 -204
- package/template/.trae/skills/yss-page-module-development/SKILL.md +0 -165
- package/template/.trae/skills/yss-page-module-development/agents/openai.yaml +0 -5
- package/template/.trae/skills/yss-page-module-development/examples/AdvancedFormPage/constant.ts +0 -32
- package/template/.trae/skills/yss-page-module-development/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -158
- package/template/.trae/skills/yss-page-module-development/examples/AdvancedFormPage/index.vue +0 -188
- package/template/.trae/skills/yss-page-module-development/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
- package/template/.trae/skills/yss-page-module-development/examples/AdvancedFormPage/style.less +0 -76
- package/template/.trae/skills/yss-page-module-development/examples/StandardListPage/constant.ts +0 -128
- package/template/.trae/skills/yss-page-module-development/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -144
- package/template/.trae/skills/yss-page-module-development/examples/StandardListPage/hooks/useRuleActions.ts +0 -141
- package/template/.trae/skills/yss-page-module-development/examples/StandardListPage/index.vue +0 -175
- package/template/.trae/skills/yss-page-module-development/examples/StandardListPage/style.less +0 -83
- package/template/.trae/skills/yss-page-module-development/references/component-map.md +0 -34
- package/template/.trae/skills/yss-page-module-development/references/frontend-docs.md +0 -11
- package/template/.trae/skills/yss-page-module-development/references/hooks-map.md +0 -11
- package/template/.trae/skills/yss-page-module-development/references/utils-map.md +0 -14
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { test } from 'node:test';
|
|
3
|
+
import assert from 'node:assert/strict';
|
|
4
|
+
import { fork } from 'node:child_process';
|
|
5
|
+
import { once } from 'node:events';
|
|
6
|
+
import { mkdtempSync, mkdirSync, writeFileSync, readFileSync, rmSync, cpSync, existsSync } from 'node:fs';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { pathToFileURL } from 'node:url';
|
|
9
|
+
import { tmpdir } from 'node:os';
|
|
10
|
+
import { fixture, context } from './fixtures/strategic-handoff/fixture.mjs';
|
|
11
|
+
import { exportBundle } from './lib/strategic-handoff.mjs';
|
|
12
|
+
const backendTools=process.env.YSS_DELIVERY_TEST_BACKEND_ROOT;
|
|
13
|
+
const frontendTools=process.env.YSS_DELIVERY_TEST_FRONTEND_ROOT;
|
|
14
|
+
const { backendDeliveryBasis, exportBackendDelivery, openBackendDelivery, inspectBackendDelivery } = await import(backendTools?pathToFileURL(path.join(backendTools,'scripts/lib/backend-delivery.mjs')):'./lib/backend-delivery.mjs');
|
|
15
|
+
const {importBackendDelivery}=await import(frontendTools?pathToFileURL(path.join(frontendTools,'scripts/lib/backend-delivery.mjs')):'./lib/backend-delivery.mjs');
|
|
16
|
+
const { verifyFrontendDelivery } = await import(frontendTools?pathToFileURL(path.join(frontendTools,'scripts/lib/frontend-delivery.mjs')):'./lib/frontend-delivery.mjs');
|
|
17
|
+
const { enforceFrontendDelivery } = await import(frontendTools?pathToFileURL(path.join(frontendTools,'scripts/lib/frontend-delivery-boundary.mjs')):'./lib/frontend-delivery-boundary.mjs');
|
|
18
|
+
const { compileDefaultImplementationContract } = await import(frontendTools?pathToFileURL(path.join(frontendTools,'scripts/lib/implementation-contract-compiler.mjs')):'./lib/implementation-contract-compiler.mjs');
|
|
19
|
+
const { validateNextRoute, validateImplementationEntry } = await import(frontendTools?pathToFileURL(path.join(frontendTools,'scripts/lib/lifecycle-transition.mjs')):'./lib/lifecycle-transition.mjs');
|
|
20
|
+
import { read, hash, json, ROOT } from './lib/strategic-handoff-io.mjs';
|
|
21
|
+
const runtimeRegistry=read(path.join(frontendTools||ROOT,'docs/process/lifecycle-registry.yaml'));
|
|
22
|
+
const frontendStage=runtimeRegistry.stages.find(x=>x.id==='stage.frontend-engineering-design')?.id||runtimeRegistry.stages.find(x=>x.id==='stage.tactical-design')?.id||'stage.system-data-engineering';
|
|
23
|
+
const frontendWorkUnit=frontendStage==='stage.frontend-engineering-design'?'work-unit.frontend-engineering-design':frontendStage==='stage.tactical-design'?'work-unit.tactical-design':'work-unit.technical-analysis';
|
|
24
|
+
|
|
25
|
+
test('战略与后端交付联合接收:便携、真实服务、拒绝不完整/过期输入及执行入口绕过',async t=>{
|
|
26
|
+
const base=mkdtempSync(path.join(tmpdir(),'frontend-delivery-test-'));
|
|
27
|
+
const put=(root,ref,value)=>{mkdirSync(path.dirname(path.join(root,ref)),{recursive:true});writeFileSync(path.join(root,ref),typeof value==='string'?value:json(value));};
|
|
28
|
+
const source=path.join(base,'strategy'), backend=path.join(base,'backend'), frontend=path.join(base,'frontend');
|
|
29
|
+
[source,backend,frontend].forEach(root=>mkdirSync(root));
|
|
30
|
+
if(backendTools)cpSync(backendTools,backend,{recursive:true});
|
|
31
|
+
if(frontendTools)cpSync(frontendTools,frontend,{recursive:true});
|
|
32
|
+
const f=await fixture(source);
|
|
33
|
+
for(const root of [backend,frontend]) {put(root,'yss-project.yaml','schema_version: 1\nrepository_mode: project-instance\n');put(root,'CONTEXT.md',context);}
|
|
34
|
+
const strategic=await exportBundle({sourceRoot:source,handoffRef:'handoff.yaml',output:path.join(backend,'strategy-package')});
|
|
35
|
+
const roles=read(path.join(source,'docs/agents/digital-human-roles.yaml'));
|
|
36
|
+
for(const gate of ['gate.openapi-frozen','gate.slice-contract-approved']) {
|
|
37
|
+
roles.gate_policy.biological_human=(roles.gate_policy.biological_human||[]).filter(x=>x!==gate);
|
|
38
|
+
roles.gate_policy.digital_human_review=(roles.gate_policy.digital_human_review||[]).filter(x=>x.gate!==gate);
|
|
39
|
+
roles.gate_policy.digital_human_review.push({gate,countersigners:['role.product-manager']});
|
|
40
|
+
}
|
|
41
|
+
put(backend,'docs/agents/digital-human-roles.yaml',roles);
|
|
42
|
+
put(backend,'api.yaml',{openapi:'3.1.0',info:{title:'Synthetic supplier API',version:'1'},paths:{'/suppliers':{post:{operationId:'submitSupplier',responses:{'200':{description:'OK'}}}}}});
|
|
43
|
+
put(backend,'slice.json',{schema_version:2,contract_id:'contract.backend',contract_version:'v1',slice_id:'slice.submit',status:'approved'});
|
|
44
|
+
put(backend,'data.md','Synthetic data setup for maintenance tests, not product verification.');
|
|
45
|
+
put(backend,'verification.log','Synthetic test fixture: successful/failed submissions exercised.');
|
|
46
|
+
const file=ref=>({ref,digest:hash(readFileSync(path.join(backend,ref)))});
|
|
47
|
+
const approved=(ref,id,gate)=>{
|
|
48
|
+
const binding={...file(ref),id,version:'v1',approval_ref:`approvals/${id}.json`};
|
|
49
|
+
put(backend,binding.approval_ref,{schema_version:1,gate_id:gate,decision:'approved',actor_kind:'digital-human',role_id:'role.product-manager',runtime_id:'runtime.generic',principal_ref:'synthetic-maintenance-fixture',artifact_bindings:[{id,version:'v1',digest:binding.digest}]});return binding;
|
|
50
|
+
};
|
|
51
|
+
const serverState=path.join(base,'server.json');put(base,'server.json',{body:{}});
|
|
52
|
+
const server=fork(path.join(ROOT,'scripts/fixtures/backend-delivery/revision-server.mjs'),[serverState],{stdio:['ignore','ignore','inherit','ipc']});
|
|
53
|
+
t.after(()=>{server.kill();rmSync(base,{recursive:true,force:true});});
|
|
54
|
+
const [{port}]=await once(server,'message');
|
|
55
|
+
const delivery={schema_version:1,delivery_id:'backend-delivery.supplier',version:'v1',status:'verified',strategic_bundle_ref:'strategy-package',strategic_bundle_digest:strategic.bundle_digest,scope:{slice_id:'slice.submit',source_ids:['rule.complete','scenario.submit'],operation_ids:['submitSupplier']},openapi:approved('api.yaml','api.supplier','gate.openapi-frozen'),slice_contract:approved('slice.json','contract.backend','gate.slice-contract-approved'),build:{source_commit:'a'.repeat(40),artifact_digest:`sha256:${'b'.repeat(64)}`},environment:{id:'fixture-local',base_url:`http://127.0.0.1:${port}`,deployment_id:'fixture-v1',revision_path:'/version',revision_pointers:{deployment_id:'/deployment_id',source_commit:'/source_commit',openapi_digest:'/openapi_digest',artifact_digest:'/artifact_digest',test_data_digest:'/test_data_digest'},test_data:file('data.md')},verification:{},supporting_files:[]};
|
|
56
|
+
const record=kind=>({schema_version:1,kind,subject_digest:backendDeliveryBasis(delivery),results:[{command:'synthetic-maintenance-test',executed_at:new Date().toISOString(),exit_code:0,evidence:[file('verification.log')]}],operation_ids:['submitSupplier'],coverage:[{source_id:'scenario.submit',outcome:'success'},{source_id:'scenario.submit',outcome:'failure'}]});
|
|
57
|
+
put(backend,'contract-test.json',record('backend-contract'));put(backend,'deployment-test.json',record('backend-deployment'));
|
|
58
|
+
delivery.verification={contract:file('contract-test.json'),deployment:file('deployment-test.json')};put(backend,'delivery.json',delivery);
|
|
59
|
+
const body={deployment_id:'fixture-v1',source_commit:delivery.build.source_commit,openapi_digest:delivery.openapi.digest,artifact_digest:delivery.build.artifact_digest,test_data_digest:delivery.environment.test_data.digest};
|
|
60
|
+
put(base,'server.json',{body});
|
|
61
|
+
await t.test('导出拒绝缺失场景、篡改接口及错误批准',async()=>{
|
|
62
|
+
const bytes=readFileSync(path.join(backend,'api.yaml'));put(backend,'api.yaml','changed');
|
|
63
|
+
await assert.rejects(()=>inspectBackendDelivery(backend,'delivery.json'),/摘要不一致/);writeFileSync(path.join(backend,'api.yaml'),bytes);
|
|
64
|
+
const approval=read(path.join(backend,delivery.openapi.approval_ref));put(backend,delivery.openapi.approval_ref,{...approval,artifact_bindings:[]});
|
|
65
|
+
await assert.rejects(()=>inspectBackendDelivery(backend,'delivery.json'),/批准未绑定/);put(backend,delivery.openapi.approval_ref,approval);
|
|
66
|
+
const tests=record('backend-contract');tests.coverage.pop();put(backend,'contract-test.json',tests);
|
|
67
|
+
const broken=structuredClone(delivery);broken.verification.contract=file('contract-test.json');put(backend,'delivery.json',broken);
|
|
68
|
+
await assert.rejects(()=>inspectBackendDelivery(backend,'delivery.json'),/成功\/失败/);
|
|
69
|
+
put(backend,'contract-test.json',record('backend-contract'));delivery.verification.contract=file('contract-test.json');put(backend,'delivery.json',delivery);
|
|
70
|
+
});
|
|
71
|
+
const output=path.join(base,'package');await exportBackendDelivery({sourceRoot:backend,deliveryRef:'delivery.json',output,zip:true});
|
|
72
|
+
const imported=await importBackendDelivery({bundle:`${output}.zip`,targetRoot:frontend});
|
|
73
|
+
assert.equal((await importBackendDelivery({bundle:output,targetRoot:frontend})).result,'already-imported');
|
|
74
|
+
const acceptance=read(path.join(frontend,imported.acceptance_ref));
|
|
75
|
+
await t.test('草案/缺少两类产物不能进入前端任务',async()=>{
|
|
76
|
+
await assert.rejects(()=>verifyFrontendDelivery({root:frontend,acceptanceRef:imported.acceptance_ref,sliceRef:'slice.submit'}),/schema/);
|
|
77
|
+
const profileRef=path.join(frontend,'docs/process/harness-profile.yaml');
|
|
78
|
+
const profile=existsSync(profileRef)?read(profileRef):{schema_version:1,profile_id:'harness.frontend-delivery'};
|
|
79
|
+
put(frontend,'docs/process/harness-profile.yaml',{...profile,frontend_delivery:{required:true}});
|
|
80
|
+
assert.throws(()=>enforceFrontendDelivery({}, {root:frontend}),/frontend-delivery-required/);
|
|
81
|
+
assert.throws(()=>compileDefaultImplementationContract({root:frontend}),/frontend-delivery-required/);
|
|
82
|
+
assert.throws(()=>enforceFrontendDelivery({contract:{kind:'template-maintenance'}},{root:frontend}),/不得用模板维护/);
|
|
83
|
+
assert.equal(validateNextRoute(frontendWorkUnit==='work-unit.technical-analysis'?'work-unit.spec-synthesis':'work-unit.harness-entry',frontendWorkUnit,undefined,{root:frontend}).result,'blocked');
|
|
84
|
+
assert.equal(validateImplementationEntry({}, {root:frontend}).blocking_signals[0],'frontend-delivery-blocked');
|
|
85
|
+
});
|
|
86
|
+
put(frontend,'reconciliation.json',{schema_version:1,repository_mode:'project-instance',stage:frontendStage,work_unit:frontendWorkUnit,status:'reconciled',context_snapshot:f.snapshot,changes:{added:['Global/Supplier'],updated:[],deprecated:[]},unresolved_terms:[],evidence_refs:['CONTEXT.md']});
|
|
87
|
+
put(frontend,'cases.md','Synthetic planned UI cases: complete submission succeeds; incomplete submission fails.');
|
|
88
|
+
acceptance.status='accepted';acceptance.strategic_handoff.context_reconciliation_ref='reconciliation.json';
|
|
89
|
+
acceptance.frontend_cases=['success','failure'].map(outcome=>({case_id:`submit-${outcome}`,source_ids:['rule.complete','scenario.submit'],outcome,operation_ids:['submitSupplier'],visual_case_ids:['primary-desktop','primary-narrow'],evidence_ref:'cases.md',evidence_digest:hash(readFileSync(path.join(frontend,'cases.md')))}));
|
|
90
|
+
for(const row of acceptance.strategic_handoff.rows)Object.assign(row,{disposition:'mapped',frontend_case_refs:acceptance.frontend_cases.map(x=>x.case_id),dependency_status:'known',dependent_slice_refs:['slice.submit'],evidence_refs:['cases.md']});
|
|
91
|
+
put(frontend,imported.acceptance_ref,acceptance);
|
|
92
|
+
const check=()=>verifyFrontendDelivery({root:frontend,acceptanceRef:imported.acceptance_ref,sliceRef:'slice.submit'});
|
|
93
|
+
await t.test('源仓消失后可验 ZIP 并独立恢复;输入就绪不授予代码实施',async()=>{
|
|
94
|
+
rmSync(source,{recursive:true});rmSync(backend,{recursive:true});
|
|
95
|
+
assert.equal(await openBackendDelivery(`${output}.zip`,b=>b.delivery.scope.slice_id),'slice.submit');
|
|
96
|
+
const verified=await check();assert.equal(verified.result,'inputs-verified');assert.equal(verified.ready_for_agent,false);
|
|
97
|
+
assert.equal(verified.actual_verification.observed.deployment_id,'fixture-v1');
|
|
98
|
+
const draft=compileDefaultImplementationContract({root:frontend,slice_id:'slice.submit',frontend_delivery:{acceptance_ref:imported.acceptance_ref},requiredCapabilities:['governance.implementation-contract']});
|
|
99
|
+
assert.equal(draft.status,'draft');assert.equal(draft.slice_id,'slice.submit');assert.equal(draft.frontend_delivery.digest,verified.acceptance_digest);
|
|
100
|
+
assert.equal(enforceFrontendDelivery({slice_id:'slice.submit',frontend_delivery:{acceptance_ref:imported.acceptance_ref}}, {root:frontend}).result,'inputs-verified');
|
|
101
|
+
assert.throws(()=>enforceFrontendDelivery({slice_id:'slice.submit',frontend_delivery:{acceptance_ref:imported.acceptance_ref}}, {root:frontend,phase:'implementation'}),/approved Slice Contract/);
|
|
102
|
+
});
|
|
103
|
+
await t.test('实现边界读取持久化合同并冻结接收记录及用例字节',async()=>{
|
|
104
|
+
const binding={acceptance_ref:imported.acceptance_ref,digest:hash(readFileSync(path.join(frontend,imported.acceptance_ref)))};
|
|
105
|
+
put(frontend,'frontend-contract.json',{status:'approved',slice_id:'slice.submit',frontend:{delivery:binding}});
|
|
106
|
+
assert.equal(enforceFrontendDelivery({slice_contract_ref:'frontend-contract.json'},{root:frontend,phase:'implementation'}).result,'inputs-verified');
|
|
107
|
+
put(frontend,'cases.md','changed case');await assert.rejects(check,/摘要漂移/);
|
|
108
|
+
put(frontend,'cases.md','Synthetic planned UI cases: complete submission succeeds; incomplete submission fails.');
|
|
109
|
+
put(frontend,'frontend-contract.json',{status:'draft',slice_id:'slice.submit',frontend:{delivery:binding}});
|
|
110
|
+
assert.throws(()=>enforceFrontendDelivery({slice_contract_ref:'frontend-contract.json'},{root:frontend,phase:'implementation'}),/approved Slice Contract/);
|
|
111
|
+
});
|
|
112
|
+
await t.test('部署版本/数据失配与服务失败使旧接收记录失效',async()=>{
|
|
113
|
+
for(const field of ['deployment_id','source_commit','openapi_digest','artifact_digest','test_data_digest']) {
|
|
114
|
+
put(base,'server.json',{body:{...body,[field]:'wrong'}});await assert.rejects(check,/真实服务版本不匹配/);
|
|
115
|
+
}
|
|
116
|
+
put(base,'server.json',{status:503,body});await assert.rejects(check,/真实接口不可用/);put(base,'server.json',{body});
|
|
117
|
+
});
|
|
118
|
+
await t.test('范围、摘要和逐条承接缺口均拒绝',async()=>{
|
|
119
|
+
await assert.rejects(()=>verifyFrontendDelivery({root:frontend,acceptanceRef:imported.acceptance_ref,sliceRef:'slice.other'}),/切片不匹配/);
|
|
120
|
+
await assert.rejects(()=>verifyFrontendDelivery({root:frontend,acceptanceRef:imported.acceptance_ref,sliceRef:'slice.submit',expectedDigest:`sha256:${'0'.repeat(64)}`}),/摘要已变化/);
|
|
121
|
+
for(const mutate of [a=>a.frontend_cases.pop(),a=>a.strategic_handoff.rows[0].disposition='pending',a=>a.frontend_cases[0].operation_ids=['unknown'],a=>a.strategic_handoff.bundle_digest=`sha256:${'0'.repeat(64)}`]) {
|
|
122
|
+
const changed=structuredClone(acceptance);mutate(changed);put(frontend,imported.acceptance_ref,changed);await assert.rejects(check);
|
|
123
|
+
}
|
|
124
|
+
put(frontend,imported.acceptance_ref,acceptance);
|
|
125
|
+
});
|
|
126
|
+
await t.test('已导入更新版本阻断旧切片;包篡改拒绝',async()=>{
|
|
127
|
+
const receipt=read(path.join(frontend,imported.receipt_ref));const newer=path.posix.dirname(path.posix.dirname(imported.receipt_ref))+'/v2';
|
|
128
|
+
put(frontend,`${newer}/import-receipt.json`,{...receipt,version:'v2'});await assert.rejects(check,/旧前端接收记录 stale/);rmSync(path.join(frontend,newer),{recursive:true});
|
|
129
|
+
const changed=path.join(base,'tampered');cpSync(output,changed,{recursive:true});put(changed,'extra.txt','extra');await assert.rejects(()=>openBackendDelivery(changed,()=>null),/未登记文件/);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
@@ -5,9 +5,11 @@ import path from "node:path";
|
|
|
5
5
|
import { parseArgs } from "node:util";
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
7
|
import { parseDocument } from "./vendor/yaml.mjs";
|
|
8
|
+
import { validateVisualBaseline } from "../.agents/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs";
|
|
9
|
+
import { enforceFrontendDelivery } from "./lib/frontend-delivery-boundary.mjs";
|
|
8
10
|
|
|
9
|
-
const
|
|
10
|
-
const schemaPath = path.join(
|
|
11
|
+
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
12
|
+
const schemaPath = path.join(repoRoot, "docs/process/schemas/frontend-implementation-evidence.schema.json");
|
|
11
13
|
const validator = String.raw`
|
|
12
14
|
import json
|
|
13
15
|
import sys
|
|
@@ -22,27 +24,50 @@ sys.exit(1 if errors else 0)
|
|
|
22
24
|
`;
|
|
23
25
|
|
|
24
26
|
try {
|
|
25
|
-
const { values, positionals } = parseArgs({ options: { "allow-template": { type: "boolean" } }, allowPositionals: true, strict: true });
|
|
26
|
-
if (positionals.length !== 1) throw new TypeError("用法: scripts/verify-frontend-implementation-evidence [--allow-template] <file.yaml>");
|
|
27
|
+
const { values, positionals } = parseArgs({ options: { "allow-template": { type: "boolean" }, root: { type: "string", default: repoRoot } }, allowPositionals: true, strict: true });
|
|
28
|
+
if (positionals.length !== 1) throw new TypeError("用法: scripts/verify-frontend-implementation-evidence [--allow-template] [--root <repo>] <file.yaml>");
|
|
29
|
+
const root = path.resolve(values.root);
|
|
27
30
|
const document = parseDocument(readFileSync(path.resolve(positionals[0]), "utf8"), { maxAliasCount: 0, uniqueKeys: true });
|
|
28
31
|
if (document.errors.length) throw new TypeError(document.errors[0].message);
|
|
29
32
|
const value = document.toJS({ maxAliasCount: 0 });
|
|
30
|
-
|
|
33
|
+
if (!values["allow-template"]) enforceFrontendDelivery(value, { root, phase: value.kind === "verification" ? "implementation" : "inputs" });
|
|
34
|
+
if (value.schema_version === 1 && !values["allow-template"]) throw new TypeError("migration-required: frontend implementation evidence v1 是只读历史资产;在途 UI 工作必须升级 v2 并绑定 Visual Baseline case_id");
|
|
35
|
+
const result = spawnSync("python3", ["-c", validator, schemaPath], { cwd: repoRoot, encoding: "utf8", input: JSON.stringify(value) });
|
|
31
36
|
if (result.status !== 0) throw new TypeError(`${result.stdout}${result.stderr}`.trim());
|
|
32
37
|
if (!values["allow-template"] && value.template !== false) throw new TypeError("正式证据必须设置 template: false");
|
|
33
38
|
if (!values["allow-template"] && value.status !== "approved") throw new TypeError("正式证据必须达到 status: approved");
|
|
34
39
|
const serialized = JSON.stringify(value);
|
|
35
40
|
if (!values["allow-template"] && /REPLACE_ME|<[^>]+>|docs\/\.scratch\/example/.test(serialized)) throw new TypeError("正式证据不得保留模板占位值");
|
|
36
41
|
if (!values["allow-template"]) {
|
|
37
|
-
for (const field of ["prototype_ref", "spec_ref"]) {
|
|
38
|
-
const reference = value[field];
|
|
42
|
+
for (const field of ["prototype_ref", "spec_ref", "visual_baseline.manifest_ref"]) {
|
|
43
|
+
const reference = field === "visual_baseline.manifest_ref" ? value.visual_baseline.manifest_ref : value[field];
|
|
39
44
|
if (!/^https?:\/\//.test(reference) && !existsSync(path.resolve(root, reference))) throw new TypeError(`${field} 不可读取: ${reference}`);
|
|
40
45
|
}
|
|
46
|
+
const baselineDocument = parseDocument(readFileSync(path.resolve(root, value.visual_baseline.manifest_ref), "utf8"), { maxAliasCount: 0, uniqueKeys: true });
|
|
47
|
+
if (baselineDocument.errors.length) throw new TypeError(baselineDocument.errors[0].message);
|
|
48
|
+
const baseline = baselineDocument.toJS({ maxAliasCount: 0 });
|
|
49
|
+
const baselineValidation = await validateVisualBaseline(baseline, { bundleRoot: path.dirname(path.resolve(root, value.visual_baseline.manifest_ref)) });
|
|
50
|
+
if (baselineValidation.errors.length) throw new TypeError(`Visual Baseline Bundle 无效:\n${baselineValidation.errors.join("\n")}`);
|
|
51
|
+
if (baseline.baseline_id !== value.visual_baseline.baseline_id || baseline.version !== value.visual_baseline.version || baseline.bundle?.digest !== value.visual_baseline.digest || baseline.status !== "approved") throw new TypeError("Visual Baseline 身份、版本、digest 或状态不一致");
|
|
52
|
+
const manifestCaseIds = new Set((baseline.cases ?? []).map((item) => item.case_id));
|
|
53
|
+
const selectedCaseIds = value.visual_baseline.case_ids;
|
|
54
|
+
if (selectedCaseIds.some((id) => !manifestCaseIds.has(id))) throw new TypeError("前端证据引用了 Visual Baseline 中不存在的 case_id");
|
|
55
|
+
for (const item of value.route_and_page_inventory) if (item.case_ids.some((id) => !selectedCaseIds.includes(id))) throw new TypeError("route_and_page_inventory.case_ids 必须属于选定 Visual Baseline cases");
|
|
56
|
+
if (value.kind === "plan" && value.baseline_case_ids.some((id) => !selectedCaseIds.includes(id))) throw new TypeError("baseline_case_ids 必须属于选定 Visual Baseline cases");
|
|
41
57
|
}
|
|
42
58
|
if (!values["allow-template"] && value.kind === "verification") {
|
|
43
59
|
if (value.console_warning_check !== "pass") throw new TypeError("前端验证必须通过 console warning 检查");
|
|
44
|
-
if (value.uncovered_differences.length > 0
|
|
60
|
+
if (value.uncovered_differences.length > 0) throw new TypeError("存在未解释视觉差异,不能通过前端实现还原验证");
|
|
45
61
|
if (value.independent_review?.status !== "approved") throw new TypeError("前端验证必须通过独立 UI fidelity review");
|
|
62
|
+
const expected = [...value.visual_baseline.case_ids].sort();
|
|
63
|
+
const actual = value.case_results.map((item) => item.case_id).sort();
|
|
64
|
+
if (new Set(actual).size !== actual.length || JSON.stringify(actual) !== JSON.stringify(expected)) throw new TypeError("case_results 必须与选定 Visual Baseline case_ids 一一对应");
|
|
65
|
+
for (const item of value.case_results) {
|
|
66
|
+
if (item.result !== "pass" || item.uncovered_difference !== false) throw new TypeError(`${item.case_id} 存在未通过或未解释差异`);
|
|
67
|
+
for (const field of ["baseline_image_ref", "implementation_image_ref", "diff_ref"]) if (!existsSync(path.resolve(root, item[field]))) throw new TypeError(`${item.case_id}.${field} 不可读取`);
|
|
68
|
+
if (item.mask_ref !== "not-applicable" && !existsSync(path.resolve(root, item.mask_ref))) throw new TypeError(`${item.case_id}.mask_ref 不可读取`);
|
|
69
|
+
}
|
|
70
|
+
if (value.actual_verification.some((item) => item.exit_code !== 0)) throw new TypeError("pnpm fresh verification 存在非零退出码");
|
|
46
71
|
}
|
|
47
72
|
process.stdout.write(`前端实现还原 ${value.kind} 验证通过\n`);
|
|
48
73
|
} catch (error) {
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { mkdtempSync, mkdirSync, writeFileSync } from "node:fs";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { spawnSync } from "node:child_process";
|
|
6
|
+
import { sealVisualBaseline } from "../.agents/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs";
|
|
7
|
+
|
|
8
|
+
const repoRoot = path.resolve(import.meta.dirname, "..");
|
|
9
|
+
const root = mkdtempSync(path.join(os.tmpdir(), "yss-frontend-evidence-"));
|
|
10
|
+
const write = (relative, value = relative) => {
|
|
11
|
+
const file = path.join(root, relative); mkdirSync(path.dirname(file), { recursive: true }); writeFileSync(file, Buffer.isBuffer(value) || typeof value === "string" ? value : JSON.stringify(value, null, 2)); return relative;
|
|
12
|
+
};
|
|
13
|
+
write("docs/spec.md"); write("docs/prototype.html");
|
|
14
|
+
for (const file of ["verification/desktop.png", "verification/narrow.png", "verification/desktop-diff.png", "verification/narrow-diff.png", "verification/pnpm.txt", "verification/review.md"]) write(file);
|
|
15
|
+
const digest = `sha256:${"a".repeat(64)}`;
|
|
16
|
+
function pngHeader(width, height) { const value = Buffer.alloc(24); Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]).copy(value, 0); value.writeUInt32BE(13, 8); value.write("IHDR", 12, "ascii"); value.writeUInt32BE(width, 16); value.writeUInt32BE(height, 20); return value; }
|
|
17
|
+
write("baseline/images/primary-desktop.png", pngHeader(1440, 900)); write("baseline/images/primary-narrow.png", pngHeader(390, 844));
|
|
18
|
+
write("baseline/sources/prototype.html", "<main>demo</main>\n"); write("baseline/sources/interaction.md", "# Interaction\n"); write("baseline/sources/states.md", "# States\n");
|
|
19
|
+
write("baseline/capture/capture.mjs", "// capture\n"); write("baseline/capture/result.json", "{\"result\":\"passed\"}\n");
|
|
20
|
+
const baselineFile = write("baseline/visual-baseline.yaml", {
|
|
21
|
+
schema_version: 1, baseline_id: "visual-baseline.demo", feature: "demo", version: "v1", status: "approved",
|
|
22
|
+
bundle: { format: "portable-directory", root_ref: "baseline", digest, size_bytes: 0, max_image_bytes: 5242880, max_bundle_bytes: 104857600 },
|
|
23
|
+
source: { prototype_ref: "sources/prototype.html", prototype_digest: digest, interaction_spec_ref: "sources/interaction.md", interaction_spec_digest: digest, state_matrix_ref: "sources/states.md", state_matrix_digest: digest },
|
|
24
|
+
capture_environment: { browser: "chromium", browser_version: "140.0.0", operating_system: "linux", fonts_digest: digest, device_scale_factor: 1, color_space: "srgb", locale: "zh-CN", timezone: "Asia/Shanghai", animations_disabled: true, cursor_hidden: true, capture_script_ref: "capture/capture.mjs", capture_script_digest: digest, capture_result_ref: "capture/result.json", capture_result_digest: digest },
|
|
25
|
+
cases: [
|
|
26
|
+
{ case_id: "primary-desktop", route: "/demo", page: "DemoPage", state: "normal", viewport: { name: "desktop", width: 1440, height: 900, scroll_mode: "viewport", scroll_position: 0 }, theme: "compact-light", locale: "zh-CN", data_scenario: "primary", image_ref: "images/primary-desktop.png", image_digest: digest, image_size_bytes: 1, mask_ref: "not-applicable", mask_digest: "not-applicable", mask_size_bytes: 0, semantic_refs: ["sources/prototype.html", "sources/interaction.md"], allowed_differences: [], result: "passed" },
|
|
27
|
+
{ case_id: "primary-narrow", route: "/demo", page: "DemoPage", state: "normal", viewport: { name: "narrow", width: 390, height: 844, scroll_mode: "viewport", scroll_position: 0 }, theme: "compact-light", locale: "zh-CN", data_scenario: "primary", image_ref: "images/primary-narrow.png", image_digest: digest, image_size_bytes: 1, mask_ref: "not-applicable", mask_digest: "not-applicable", mask_size_bytes: 0, semantic_refs: ["sources/states.md"], allowed_differences: [], result: "passed" }
|
|
28
|
+
]
|
|
29
|
+
});
|
|
30
|
+
const sealedBaseline = await sealVisualBaseline(path.join(root, baselineFile), path.join(root, "baseline"));
|
|
31
|
+
const visual_baseline = { baseline_id: "visual-baseline.demo", version: "v1", digest: sealedBaseline.bundle.digest, manifest_ref: "baseline/visual-baseline.yaml", status: "approved", case_ids: ["primary-desktop", "primary-narrow"] };
|
|
32
|
+
const base = {
|
|
33
|
+
schema_version: 2, template: false, status: "approved", prototype_ref: "docs/prototype.html", spec_ref: "docs/spec.md", visual_baseline,
|
|
34
|
+
route_and_page_inventory: [{ route: "/demo", page: "DemoPage", case_ids: ["primary-desktop", "primary-narrow"] }], pnpm_commands: ["pnpm test"]
|
|
35
|
+
};
|
|
36
|
+
const plan = { ...base, kind: "plan", baseline_case_ids: ["primary-desktop", "primary-narrow"], desktop_viewport: "1440x900", narrow_viewport: "390x844", state_cases: ["normal"] };
|
|
37
|
+
const verification = {
|
|
38
|
+
...base, kind: "verification",
|
|
39
|
+
case_results: [
|
|
40
|
+
{ case_id: "primary-desktop", baseline_image_ref: "baseline/images/primary-desktop.png", implementation_image_ref: "verification/desktop.png", diff_ref: "verification/desktop-diff.png", mask_ref: "not-applicable", result: "pass", uncovered_difference: false, explanation: "无未解释差异" },
|
|
41
|
+
{ case_id: "primary-narrow", baseline_image_ref: "baseline/images/primary-narrow.png", implementation_image_ref: "verification/narrow.png", diff_ref: "verification/narrow-diff.png", mask_ref: "not-applicable", result: "pass", uncovered_difference: false, explanation: "无未解释差异" }
|
|
42
|
+
],
|
|
43
|
+
interaction_results: ["normal passed"], console_warning_check: "pass", actual_verification: [{ command: "pnpm test", exit_code: 0, executed_at: "2026-09-05T00:00:00Z", evidence_ref: "verification/pnpm.txt" }],
|
|
44
|
+
uncovered_differences: [], difference_owner: null, independent_review: { reviewer: "reviewer-1", candidate_digest: digest, status: "approved", findings_ref: "verification/review.md" }
|
|
45
|
+
};
|
|
46
|
+
const run = (name, value, expected, pattern) => {
|
|
47
|
+
const file = write(`${name}.json`, value);
|
|
48
|
+
const result = spawnSync("scripts/verify-frontend-implementation-evidence", ["--root", root, path.join(root, file)], { cwd: repoRoot, encoding: "utf8" });
|
|
49
|
+
if (result.status !== expected || (pattern && !pattern.test(`${result.stdout}${result.stderr}`))) throw new Error(`${name} unexpected\n${result.stdout}${result.stderr}`);
|
|
50
|
+
};
|
|
51
|
+
run("valid-plan", plan, 0);
|
|
52
|
+
run("valid-verification", verification, 0);
|
|
53
|
+
run("missing-case", { ...verification, case_results: verification.case_results.slice(0, 1) }, 1, /一一对应/);
|
|
54
|
+
run("unexplained", { ...verification, uncovered_differences: ["间距偏差"], difference_owner: "frontend" }, 1, /未解释视觉差异/);
|
|
55
|
+
run("nonzero", { ...verification, actual_verification: [{ ...verification.actual_verification[0], exit_code: 1 }] }, 1, /非零退出码/);
|
|
56
|
+
process.stdout.write("Frontend implementation evidence v2 scenarios passed\n");
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
|
|
6
|
+
const root = path.resolve(import.meta.dirname, "..");
|
|
7
|
+
const skill = readFileSync(path.join(root, ".agents/skills/grill-with-docs/SKILL.md"), "utf8");
|
|
8
|
+
for (const marker of ["scripts/verify-context-contract --root . --json", "domain-modeling/CONTEXT-FORMAT.md", "<ContextId>/<EnglishIdentifier>", "context_reconciliation", "referenced_terms_digest", "template-source", "not-applicable", "yss-product-lifecycle"]) {
|
|
9
|
+
if (!skill.includes(marker)) throw new Error(`grill-with-docs 缺少统一 Context Contract 标记: ${marker}`);
|
|
10
|
+
}
|
|
11
|
+
for (const script of ["scripts/verify-context-contract-scenarios", "scripts/verify-context-reconciliation-scenarios"]) {
|
|
12
|
+
const result = spawnSync(path.join(root, script), { cwd: root, encoding: "utf8" });
|
|
13
|
+
if (result.status !== 0) throw new Error(`${script} failed\n${result.stdout}${result.stderr}`);
|
|
14
|
+
}
|
|
15
|
+
process.stdout.write("grill-with-docs Context Contract scenarios passed\n");
|
|
@@ -5,7 +5,7 @@ import path from "node:path";
|
|
|
5
5
|
import { parseArgs } from "node:util";
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
7
|
import { parseDocument } from "./vendor/yaml.mjs";
|
|
8
|
-
import { assertCheckpointApprovals } from "./lib/approval-record.mjs";
|
|
8
|
+
import { assertCheckpointApprovals, assertCheckpointUserDecisions } from "./lib/approval-record.mjs";
|
|
9
9
|
|
|
10
10
|
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
11
11
|
const schemaPath = path.join(root, "docs/process/schemas/lifecycle-checkpoint.schema.json");
|
|
@@ -32,6 +32,14 @@ try {
|
|
|
32
32
|
const result = spawnSync("python3", ["-c", validator, schemaPath], { cwd: root, encoding: "utf8", input: JSON.stringify(value) });
|
|
33
33
|
if (result.status !== 0) throw new TypeError(`${result.stdout}${result.stderr}`.trim());
|
|
34
34
|
assertCheckpointApprovals(value, sourcePath);
|
|
35
|
+
assertCheckpointUserDecisions(value);
|
|
36
|
+
if (value.repository_mode === "project-instance" && ["paused-human-gate", "completed"].includes(value.status)) {
|
|
37
|
+
if (value.context_reconciliation?.status !== "reconciled" || !value.context_reconciliation?.ref) throw new TypeError("project-instance 在会签或完成前必须具有 reconciled context_reconciliation");
|
|
38
|
+
const reconciliation = path.resolve(root, value.context_reconciliation.ref);
|
|
39
|
+
const checked = spawnSync(path.join(root, "scripts/verify-context-reconciliation"), ["--root", root, reconciliation], { cwd: root, encoding: "utf8" });
|
|
40
|
+
if (checked.status !== 0) throw new TypeError(checked.stderr.trim() || "context_reconciliation 无效");
|
|
41
|
+
}
|
|
42
|
+
if (value.repository_mode === "template-source" && value.context_reconciliation?.status !== "not-applicable") throw new TypeError("template-source context_reconciliation 必须为 not-applicable");
|
|
35
43
|
process.stdout.write("生命周期 checkpoint 验证通过\n");
|
|
36
44
|
} catch (error) {
|
|
37
45
|
process.stderr.write(`生命周期 checkpoint 验证失败: ${error.message}\n`);
|
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import assert from "node:assert/strict";
|
|
3
|
+
import { mkdtempSync, rmSync, readFileSync, existsSync } from "node:fs";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { buildImplementationFixture } from "./fixtures/user-decision/build-fixture.mjs";
|
|
7
|
+
const temp = mkdtempSync(path.join(os.tmpdir(), "lifecycle-decision-test-"));
|
|
8
|
+
process.on("exit", () => rmSync(temp, { recursive: true, force: true }));
|
|
9
|
+
const approval = buildImplementationFixture(temp, "docs/.scratch/demo/issues/01-valid-slice.md");
|
|
3
10
|
import { validateImplementationEntry, validateNextRoute, validateTicketFormalization } from "./lib/lifecycle-transition.mjs";
|
|
4
11
|
|
|
5
12
|
const exists = (ref) => [
|
|
6
13
|
"docs/process/lifecycle-registry.yaml",
|
|
7
14
|
"docs/.scratch/demo/issues/01-valid-slice.md",
|
|
8
15
|
"docs/.scratch/demo/evidence/ticket-decomposition-result.yaml",
|
|
9
|
-
].includes(ref);
|
|
16
|
+
].includes(ref) || existsSync(ref);
|
|
10
17
|
const decompositionResult = `result_schema: workflow-execution-result-v1\nwork_unit: work-unit.ticket-decomposition\nresult: completed\nevidence_refs:\n - docs/.scratch/demo/evidence/ticket-decomposition-result.yaml\n`;
|
|
11
|
-
const read = (ref) => ref === "docs/.scratch/demo/evidence/ticket-decomposition-result.yaml" ? decompositionResult : "";
|
|
18
|
+
const read = (ref) => ref === "docs/.scratch/demo/evidence/ticket-decomposition-result.yaml" ? decompositionResult : readFileSync(ref, "utf8");
|
|
12
19
|
const options = { exists, read };
|
|
13
20
|
|
|
14
21
|
const validTicketState = {
|
|
22
|
+
...approval.state,
|
|
15
23
|
predecessor_work_unit: "work-unit.ticket-decomposition",
|
|
16
24
|
tracker_kind: "local-markdown",
|
|
17
25
|
ticket_decomposition_result_ref: "docs/.scratch/demo/evidence/ticket-decomposition-result.yaml",
|
|
@@ -92,14 +100,16 @@ const arbitraryReadable = validateTicketFormalization({
|
|
|
92
100
|
}, options);
|
|
93
101
|
assert.equal(arbitraryReadable.result, "blocked");
|
|
94
102
|
assert.ok(arbitraryReadable.blocking_signals.includes("ticket-decomposition-incomplete"));
|
|
103
|
+
const remoteApproval = buildImplementationFixture(path.join(temp, "remote"), "https://github.com/example/project/issues/1");
|
|
95
104
|
assert.equal(validateTicketFormalization({
|
|
96
105
|
...validTicketState,
|
|
106
|
+
...remoteApproval.state,
|
|
97
107
|
tracker_kind: "github",
|
|
98
108
|
ticket_decomposition_result_ref: "https://github.com/example/project/issues/1",
|
|
99
109
|
ticket_decomposition_result: { result: "completed", evidence_refs: ["https://github.com/example/project/issues/1"] },
|
|
100
110
|
vertical_slice_ticket_ref: "https://github.com/example/project/issues/1",
|
|
101
111
|
vertical_slice_ticket: { ref: "https://github.com/example/project/issues/1", kind: "vertical-slice-ticket", role: "ready-for-agent" },
|
|
102
112
|
slice_contract: { ...validTicketState.slice_contract, ticket_ref: "https://github.com/example/project/issues/1" },
|
|
103
|
-
}, { ...options, exists: (ref) => ref === "https://github.com/example/project/issues/1", read: (ref) => ref === "https://github.com/example/project/issues/1" ? decompositionResult.replace("docs/.scratch/demo/evidence/ticket-decomposition-result.yaml", "https://github.com/example/project/issues/1") : "" }).result, "allowed");
|
|
113
|
+
}, { ...options, exists: (ref) => ref === "https://github.com/example/project/issues/1", read: (ref) => ref === "https://github.com/example/project/issues/1" ? decompositionResult.replace("docs/.scratch/demo/evidence/ticket-decomposition-result.yaml", "https://github.com/example/project/issues/1") : readFileSync(ref, "utf8") }).result, "allowed");
|
|
104
114
|
|
|
105
115
|
process.stdout.write("生命周期转换压力场景验证通过\n");
|
|
@@ -4,18 +4,44 @@ import { existsSync } from "node:fs";
|
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { PROJECTION_ROOTS, ROOT } from "./lib/skill-supply-chain.mjs";
|
|
6
6
|
|
|
7
|
-
const retired = [
|
|
8
|
-
|
|
7
|
+
const retired = [
|
|
8
|
+
"ask-matt",
|
|
9
|
+
"dispatching-parallel-agents",
|
|
10
|
+
"loop-me",
|
|
11
|
+
"migrate-to-shoehorn",
|
|
12
|
+
"prototype-page-acceptance",
|
|
13
|
+
"scaffold-exercises",
|
|
14
|
+
"setup-pre-commit",
|
|
15
|
+
"setup-ts-deep-modules",
|
|
16
|
+
"teach",
|
|
17
|
+
"writing-beats",
|
|
18
|
+
"writing-fragments",
|
|
19
|
+
"writing-shape",
|
|
20
|
+
"yss-microapp-commit",
|
|
21
|
+
"yss-page-module-development",
|
|
22
|
+
"yss-router",
|
|
23
|
+
"yss-source-index",
|
|
24
|
+
];
|
|
25
|
+
const allowed = (relative, line) => relative === "docs/agents/skill-migrations.md"
|
|
9
26
|
|| relative.includes("/docs/agents/skill-migrations.md")
|
|
10
27
|
|| relative.endsWith(".template-source/wiki/raw/skill-migrations.md")
|
|
11
28
|
|| relative.startsWith(".template-source/evidence/")
|
|
12
29
|
|| relative.includes("/.template-source/evidence/")
|
|
13
30
|
|| relative.includes("/tests/")
|
|
31
|
+
|| relative.startsWith(".template-source/tooling/node/test/")
|
|
32
|
+
|| relative.endsWith("/skills/.yss-skills-manifest.json")
|
|
33
|
+
|| relative === "docs/agents/yss-ui-skills-integration.md"
|
|
34
|
+
|| relative === "scripts/lib/skill-governance.mjs"
|
|
35
|
+
|| (relative.endsWith("/skills/yss-product-lifecycle/references/orchestration-contract.yaml") && line.includes("retired_shared_skills:"))
|
|
14
36
|
|| relative.endsWith("scripts/verify-retired-skill-ids")
|
|
15
37
|
|| relative.endsWith("scripts/lib/skill-supply-chain.mjs")
|
|
16
38
|
|| relative.endsWith("scripts/lib/implementation-contract-compiler.mjs");
|
|
17
39
|
|
|
18
|
-
const
|
|
40
|
+
const escaped = retired.filter((id) => id !== "teach").map((id) => id.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
|
|
41
|
+
const exactSkillIdPattern = `(?<![a-z0-9-])(?:${escaped.join("|")})(?![a-z0-9-])`;
|
|
42
|
+
const teachSkillPattern = "(?:`teach`|/teach(?:/|\\b)|(?:^|[\\[,])\\s*[\"']?teach[\"']?\\s*(?=[,\\]])|\\b(?:id|name)\\s*:\\s*[\"']?teach[\"']?\\b)";
|
|
43
|
+
const retiredSkillPattern = `(?:${exactSkillIdPattern}|${teachSkillPattern})`;
|
|
44
|
+
const search = spawnSync("rg", ["-n", "--pcre2", "--hidden", "--glob", "!.git/**", "--glob", "!.codegraph/**", "--glob", "!submodules/**", retiredSkillPattern, "."], {
|
|
19
45
|
cwd: ROOT,
|
|
20
46
|
encoding: "utf8"
|
|
21
47
|
});
|
|
@@ -25,7 +51,7 @@ if (![0, 1].includes(search.status)) {
|
|
|
25
51
|
}
|
|
26
52
|
const violations = search.stdout.split(/\r?\n/).filter(Boolean).filter((line) => {
|
|
27
53
|
const match = line.match(/^\.\/(.*?):\d+:/);
|
|
28
|
-
return !match || !allowed(match[1]);
|
|
54
|
+
return !match || !allowed(match[1], line);
|
|
29
55
|
});
|
|
30
56
|
for (const name of retired) {
|
|
31
57
|
const roots = [".agents/skills", ...PROJECTION_ROOTS];
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import { attachScaffoldDecisionFixture } from "./fixtures/user-decision/build-fixture.mjs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import { parseDocument } from "./vendor/yaml.mjs";
|
|
9
|
+
|
|
10
|
+
const root = mkdtempSync(path.join(os.tmpdir(), "scaffold-decision-scenarios-"));
|
|
11
|
+
process.on("exit", () => rmSync(root, { recursive: true, force: true }));
|
|
12
|
+
const verifier = path.resolve("scripts/verify-scaffold-architecture-decisions");
|
|
13
|
+
const digest = `sha256:${"1".repeat(64)}`;
|
|
14
|
+
const confirmation = `\n user_confirmation:\n confirmed_by: user\n channel: codex\n confirmation_ref: turn://1\n confirmed_at: 2026-09-05T01:00:00+08:00\n normalized_text: 确认 MVC`;
|
|
15
|
+
function run(name, body) {
|
|
16
|
+
const file = path.join(root, `${name}.yaml`);
|
|
17
|
+
const value = parseDocument(body).toJS();
|
|
18
|
+
value.decisions = value.decisions.map((decision) => attachScaffoldDecisionFixture(path.join(root, name, decision.project_id), decision));
|
|
19
|
+
writeFileSync(file, JSON.stringify(value));
|
|
20
|
+
return spawnSync(verifier, [file], { encoding: "utf8" });
|
|
21
|
+
}
|
|
22
|
+
const base = `schema_version: 1\nkind: scaffold-architecture-decisions\ntemplate: false\nstatus: current\ndecisions:\n`;
|
|
23
|
+
const mvc = `${base} - decision_id: scaffold-decision.main\n project_id: main\n parent_project_id: null\n status: lifecycle-approved\n recommended_architecture: layered-mvc\n recommendation_reasons: [CRUD 与报表为主]\n confirmed_architecture: layered-mvc\n override_reason: null\n inheritance_mode: root-default\n inherited_from: null\n platform_profile: spring-boot-2.7-jdk8\n architecture_profile: layered-mvc-service\n verification_database: h2\n production_database: not-bound\n requested_capabilities: [feign-client]\n resolved_modules: [server, service, repository, client, feign-client]\n resolution_version: 1${confirmation}\n decision_inputs_digest: ${digest}\n`;
|
|
24
|
+
assert.equal(run("mvc", mvc).status, 0);
|
|
25
|
+
assert.notEqual(run("missing-confirmation", mvc.replace("confirmation_ref: turn://1", "confirmation_ref: null")).status, 0);
|
|
26
|
+
assert.notEqual(run("invalid-closure", mvc.replace("[server, service, repository, client, feign-client]", "[server, service, repository]")).status, 0);
|
|
27
|
+
const child = `${mvc} - decision_id: scaffold-decision.child\n project_id: child\n parent_project_id: main\n status: lifecycle-approved\n recommended_architecture: domain-driven\n recommendation_reasons: [存在复杂状态机]\n confirmed_architecture: layered-mvc\n override_reason: 继承本体的统一架构\n inheritance_mode: inherit\n inherited_from: main\n platform_profile: spring-boot-2.7-jdk8\n architecture_profile: layered-mvc-service\n verification_database: h2\n production_database: not-bound\n requested_capabilities: []\n resolved_modules: [server, service, repository]\n resolution_version: 1${confirmation}\n decision_inputs_digest: ${digest}\n`;
|
|
28
|
+
assert.equal(run("child", child).status, 0);
|
|
29
|
+
assert.notEqual(run("inherit-mismatch", child.replace("confirmed_architecture: layered-mvc\n override_reason: 继承本体的统一架构\n inheritance_mode: inherit", "confirmed_architecture: domain-driven\n override_reason: null\n inheritance_mode: inherit")).status, 0);
|
|
30
|
+
process.stdout.write("脚手架架构选择场景验证通过\n");
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { parseArgs } from "node:util";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { parseDocument } from "./vendor/yaml.mjs";
|
|
7
|
+
import { validateJsonSchema } from "./lib/json-schema.mjs";
|
|
8
|
+
import { loadSkillRegistry } from "./lib/skill-registry.mjs";
|
|
9
|
+
import { assertScaffoldUserDecision } from "./lib/user-decision.mjs";
|
|
10
|
+
import { validateArchitectureIdentity } from "./lib/backend-architecture.mjs";
|
|
11
|
+
|
|
12
|
+
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
13
|
+
const schemaPath = path.join(repoRoot, "docs/process/schemas/scaffold-architecture-decisions.schema.json");
|
|
14
|
+
const MVC_ORDER = ["server", "service", "repository", "adapter", "client", "feign-client"];
|
|
15
|
+
const DDD_MODULES = ["domain", "application", "infrastructure", "adapter", "bootstrap"];
|
|
16
|
+
const CAPABILITIES = { "external-integration": ["adapter"], "published-client": ["client"], "feign-client": ["client", "feign-client"] };
|
|
17
|
+
|
|
18
|
+
function mvcModules(capabilities) {
|
|
19
|
+
const result = new Set(["server", "service", "repository"]);
|
|
20
|
+
for (const capability of capabilities) for (const module of CAPABILITIES[capability] ?? []) result.add(module);
|
|
21
|
+
return MVC_ORDER.filter((module) => result.has(module));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
const { values, positionals } = parseArgs({ options: { "allow-template": { type: "boolean" } }, allowPositionals: true, strict: true });
|
|
26
|
+
if (positionals.length !== 1) throw new TypeError("用法: scripts/verify-scaffold-architecture-decisions [--allow-template] <file.yaml>");
|
|
27
|
+
const document = parseDocument(readFileSync(path.resolve(positionals[0]), "utf8"), { maxAliasCount: 0, uniqueKeys: true });
|
|
28
|
+
if (document.errors.length) throw new TypeError(document.errors[0].message);
|
|
29
|
+
const value = document.toJS({ maxAliasCount: 0 });
|
|
30
|
+
validateJsonSchema(value, schemaPath, { cwd: repoRoot, label: "scaffold architecture decision schema" });
|
|
31
|
+
if (!values["allow-template"] && value.template !== false) throw new TypeError("正式决策记录必须设置 template: false");
|
|
32
|
+
const ids = new Set();
|
|
33
|
+
const projects = new Map();
|
|
34
|
+
for (const decision of value.decisions) {
|
|
35
|
+
if (ids.has(decision.decision_id) || projects.has(decision.project_id)) throw new TypeError("decision_id 与 project_id 必须唯一");
|
|
36
|
+
ids.add(decision.decision_id);
|
|
37
|
+
projects.set(decision.project_id, decision);
|
|
38
|
+
const confirmed = ["user-confirmed", "lifecycle-approved", "consumed"].includes(decision.status);
|
|
39
|
+
const confirmation = decision.user_confirmation;
|
|
40
|
+
if (confirmed && (!decision.confirmed_architecture || Object.values(confirmation).some((item) => item === null || item === ""))) throw new TypeError(`${decision.project_id} 已确认状态必须提供完整用户确认引用`);
|
|
41
|
+
if (!confirmed && decision.status !== "stale" && decision.confirmed_architecture !== null) throw new TypeError(`${decision.project_id} 未确认状态不得预填 confirmed_architecture`);
|
|
42
|
+
if (decision.confirmed_architecture && decision.confirmed_architecture !== decision.recommended_architecture && !decision.override_reason) throw new TypeError(`${decision.project_id} 覆盖 Agent 推荐时必须说明 override_reason`);
|
|
43
|
+
if (decision.inheritance_mode === "root-default" && (decision.parent_project_id !== null || decision.inherited_from !== null)) throw new TypeError(`${decision.project_id} 根默认不得声明父项目`);
|
|
44
|
+
if (["inherit", "override"].includes(decision.inheritance_mode) && (!decision.parent_project_id || decision.inherited_from !== decision.parent_project_id)) throw new TypeError(`${decision.project_id} 子项目继承引用不完整`);
|
|
45
|
+
if (confirmed && value.template === false) {
|
|
46
|
+
assertScaffoldUserDecision(decision);
|
|
47
|
+
}
|
|
48
|
+
const registry = loadSkillRegistry();
|
|
49
|
+
validateArchitectureIdentity({ ...decision, architecture_family: decision.confirmed_architecture ?? decision.recommended_architecture, generator_skill: registry.architecture_profiles?.[decision.architecture_profile]?.generator_skill, contract_digest: decision.decision_inputs_digest }, registry);
|
|
50
|
+
}
|
|
51
|
+
for (const decision of value.decisions) {
|
|
52
|
+
if (!decision.parent_project_id) continue;
|
|
53
|
+
const parent = projects.get(decision.parent_project_id);
|
|
54
|
+
if (!parent) throw new TypeError(`${decision.project_id} 引用了不存在的父项目`);
|
|
55
|
+
if (decision.inheritance_mode === "inherit" && decision.confirmed_architecture && parent.confirmed_architecture && decision.confirmed_architecture !== parent.confirmed_architecture) throw new TypeError(`${decision.project_id} 继承值与父项目不一致;需要改为 override`);
|
|
56
|
+
}
|
|
57
|
+
process.stdout.write("脚手架架构选择记录验证通过\n");
|
|
58
|
+
} catch (error) {
|
|
59
|
+
process.stderr.write(`脚手架架构选择记录验证失败: ${error.message}\n`);
|
|
60
|
+
process.exitCode = 1;
|
|
61
|
+
}
|