create-yss-spec 3.1.3 → 3.3.0
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 +5 -1
- package/package.json +1 -1
- package/template/.agents/skills/.strategic-design-skills-manifest.json +1 -1
- package/template/.agents/skills/code-review/SKILL.md +4 -0
- package/template/.agents/skills/code-review/agents/openai.yaml +1 -1
- package/template/.agents/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.agents/skills/yss-domain/SKILL.md +3 -3
- package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.agents/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.agents/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.agents/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.agents/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.agents/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.agents/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.agents/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.agents/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.agents/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.agents/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.agents/skills/yss-repository/SKILL.md +28 -70
- package/template/.agents/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.agents/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.agents/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.agents/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.agents/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.agents/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.agents/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.agents/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.agents/skills/yss-tactical-design/references/output-template.md +2 -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 +3 -2
- package/template/.agents/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.agents/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.agents/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.agents/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.agents/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.agents/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.agents/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.agents/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.agents/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/.claude/skills/code-review/SKILL.md +4 -0
- package/template/.claude/skills/code-review/agents/openai.yaml +1 -1
- package/template/.claude/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.claude/skills/yss-domain/SKILL.md +3 -3
- package/template/.claude/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.claude/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.claude/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.claude/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.claude/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.claude/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.claude/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.claude/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.claude/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.claude/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.claude/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.claude/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.claude/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.claude/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.claude/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.claude/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.claude/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.claude/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.claude/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.claude/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.claude/skills/yss-repository/SKILL.md +28 -70
- package/template/.claude/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.claude/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.claude/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.claude/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.claude/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.claude/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.claude/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.claude/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.claude/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.claude/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.claude/skills/yss-tactical-design/references/output-template.md +2 -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 +3 -2
- package/template/.claude/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.claude/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.claude/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.claude/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.claude/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.claude/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.claude/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.claude/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.claude/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/.codex/skills/code-review/SKILL.md +4 -0
- package/template/.codex/skills/code-review/agents/openai.yaml +1 -1
- package/template/.codex/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.codex/skills/yss-domain/SKILL.md +3 -3
- package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.codex/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.codex/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.codex/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.codex/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.codex/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.codex/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.codex/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.codex/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.codex/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.codex/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.codex/skills/yss-repository/SKILL.md +28 -70
- package/template/.codex/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.codex/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.codex/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.codex/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.codex/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.codex/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.codex/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.codex/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.codex/skills/yss-tactical-design/references/output-template.md +2 -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 +3 -2
- package/template/.codex/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.codex/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.codex/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.codex/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.codex/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.codex/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.codex/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.codex/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.codex/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/.cursor/skills/code-review/SKILL.md +4 -0
- package/template/.cursor/skills/code-review/agents/openai.yaml +1 -1
- package/template/.cursor/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.cursor/skills/yss-domain/SKILL.md +3 -3
- package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.cursor/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.cursor/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.cursor/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.cursor/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.cursor/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.cursor/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.cursor/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.cursor/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.cursor/skills/yss-repository/SKILL.md +28 -70
- package/template/.cursor/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.cursor/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.cursor/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.cursor/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.cursor/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.cursor/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.cursor/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.cursor/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.cursor/skills/yss-tactical-design/references/output-template.md +2 -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 +3 -2
- package/template/.cursor/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.cursor/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.cursor/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.cursor/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.cursor/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.cursor/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.cursor/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.cursor/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.cursor/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/.pi/skills/code-review/SKILL.md +4 -0
- package/template/.pi/skills/code-review/agents/openai.yaml +1 -1
- package/template/.pi/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.pi/skills/yss-domain/SKILL.md +3 -3
- package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.pi/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.pi/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.pi/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.pi/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.pi/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.pi/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.pi/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.pi/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.pi/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.pi/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.pi/skills/yss-repository/SKILL.md +28 -70
- package/template/.pi/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.pi/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.pi/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.pi/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.pi/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.pi/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.pi/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.pi/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.pi/skills/yss-tactical-design/references/output-template.md +2 -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 +3 -2
- package/template/.pi/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.pi/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.pi/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.pi/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.pi/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.pi/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.pi/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.pi/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.pi/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/.qoder/skills/code-review/SKILL.md +4 -0
- package/template/.qoder/skills/code-review/agents/openai.yaml +1 -1
- package/template/.qoder/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.qoder/skills/yss-domain/SKILL.md +3 -3
- package/template/.qoder/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.qoder/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.qoder/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.qoder/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.qoder/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.qoder/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.qoder/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.qoder/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.qoder/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.qoder/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.qoder/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.qoder/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.qoder/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.qoder/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.qoder/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.qoder/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.qoder/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.qoder/skills/yss-repository/SKILL.md +28 -70
- package/template/.qoder/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.qoder/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.qoder/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.qoder/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.qoder/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.qoder/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.qoder/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.qoder/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.qoder/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.qoder/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.qoder/skills/yss-tactical-design/references/output-template.md +2 -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 +3 -2
- package/template/.qoder/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.qoder/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.qoder/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.qoder/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.qoder/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.qoder/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.qoder/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.qoder/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.qoder/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/.trae/skills/code-review/SKILL.md +4 -0
- package/template/.trae/skills/code-review/agents/openai.yaml +1 -1
- package/template/.trae/skills/code-review/references/yss-review-standards.md +9 -2
- package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +1 -1
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +7 -3
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +9 -0
- package/template/.trae/skills/yss-domain/SKILL.md +3 -3
- package/template/.trae/skills/yss-frontend-scaffold-generator/SKILL.md +10 -7
- package/template/.trae/skills/yss-frontend-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +10 -0
- package/template/.trae/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +107 -0
- package/template/.trae/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +41 -0
- package/template/.trae/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +37 -0
- package/template/.trae/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.trae/skills/yss-implementation-contract-compiler/references/boundaries.md +9 -0
- package/template/.trae/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +35 -2
- package/template/.trae/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +8 -1
- package/template/.trae/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.trae/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +8 -5
- package/template/.trae/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +17 -2
- package/template/.trae/skills/yss-mvc-design/SKILL.md +16 -0
- package/template/.trae/skills/yss-mvc-design/agents/openai.yaml +4 -0
- package/template/.trae/skills/yss-mvc-design/references/mvc-design.schema.json +315 -0
- package/template/.trae/skills/yss-mybatis/SKILL.md +34 -58
- package/template/.trae/skills/yss-mybatis/agents/openai.yaml +2 -2
- package/template/.trae/skills/yss-mybatis/references/source-index.md +88 -68
- package/template/.trae/skills/yss-product-lifecycle/SKILL.md +48 -43
- package/template/.trae/skills/yss-product-lifecycle/references/artifact-dependencies.md +5 -3
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +81 -19
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +6 -2
- package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +6 -3
- package/template/.trae/skills/yss-repository/SKILL.md +28 -70
- package/template/.trae/skills/yss-repository/agents/openai.yaml +2 -2
- package/template/.trae/skills/yss-repository/references/profiles/layered-mvc-service.md +19 -1
- package/template/.trae/skills/yss-repository/references/profiles/mvc-data-analysis-v1.md +19 -1
- package/template/.trae/skills/yss-repository/references/profiles/target-domain-model.md +21 -1
- package/template/.trae/skills/yss-repository/tests/profile-routing.test.mjs +59 -0
- package/template/.trae/skills/yss-skill-source-index-refresh/SKILL.md +8 -5
- package/template/.trae/skills/yss-skill-source-index-refresh/references/source-location.md +2 -1
- package/template/.trae/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +388 -18
- package/template/.trae/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs +79 -1
- package/template/.trae/skills/yss-tactical-design/SKILL.md +2 -2
- package/template/.trae/skills/yss-tactical-design/references/output-template.md +2 -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 +3 -2
- package/template/.trae/skills/yss-technical-design/SKILL.md +31 -0
- package/template/.trae/skills/yss-technical-design/agents/openai.yaml +4 -0
- package/template/.trae/skills/yss-technical-design/references/technical-design-common.schema.json +290 -0
- package/template/.trae/skills/yss-technical-design/references/technical-design-contract.md +31 -0
- package/template/.trae/skills/yss-technical-design/references/technical-design.schema.json +759 -0
- package/template/.trae/skills/yss-technical-design/scripts/generate-schema.mjs +20 -0
- package/template/.trae/skills/yss-technical-design/scripts/validate-technical-design.mjs +134 -0
- package/template/.trae/skills/yss-technical-design/tests/fixtures.mjs +32 -0
- package/template/.trae/skills/yss-technical-design/tests/run-scenarios.mjs +82 -0
- package/template/CONTEXT.md +2 -1
- package/template/docs/agents/digital-human-roles.yaml +4 -2
- package/template/docs/agents/yss-skill-registry.yaml +25 -1
- package/template/docs/architecture/templates/architecture-review-checklist.md +1 -1
- package/template/docs/architecture/templates/system-overview-design-template.md +15 -4
- package/template/docs/process/lifecycle-artifact-map.md +6 -0
- package/template/docs/process/lifecycle-registry-baseline.json +8 -1
- package/template/docs/process/lifecycle-registry.yaml +32 -2
- package/template/docs/process/schemas/implementation-repository-preparation-result.schema.json +38 -0
- package/template/docs/process/schemas/project-scaffold-contract.schema.json +113 -0
- package/template/docs/process/schemas/strategic-design-handoff.schema.json +77 -4
- package/template/docs/process/strategic-handoff-package.md +4 -2
- package/template/docs/process/template-verification-profiles.yaml +37 -0
- package/template/docs/templates/implementation-repo-registry-template.md +8 -0
- package/template/docs/templates/review-report-template.md +7 -3
- 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 +7 -6
- package/template/scripts/fixtures/strategic-handoff/fixture.mjs +3 -2
- package/template/scripts/lib/implementation-contract-compiler.mjs +8 -1
- package/template/scripts/lib/lifecycle-context-query.mjs +137 -0
- package/template/scripts/lib/lifecycle-transition.mjs +109 -3
- package/template/scripts/lib/scenario-checks.mjs +29 -26
- package/template/scripts/lib/skill-registry.mjs +9 -0
- package/template/scripts/lib/strategic-handoff-consumption.mjs +4 -4
- package/template/scripts/lib/strategic-handoff-design-targets.mjs +15 -0
- package/template/scripts/lib/technical-design-boundary.mjs +23 -0
- package/template/scripts/query-lifecycle-context +25 -0
- package/template/scripts/sync-strategic-handoff-tools +3 -2
- package/template/scripts/verify-business-language-scenarios +0 -7
- package/template/scripts/verify-frontend-scaffold-generator-scenarios +2 -0
- package/template/scripts/verify-lifecycle-context-query-scenarios +68 -0
- package/template/scripts/verify-lifecycle-transition-scenarios +44 -4
- package/template/scripts/verify-strategic-handoff-package-scenarios +7 -1
- package/template/skills-lock.json +48 -18
- package/template.snapshot.json +4 -4
- package/template/.agents/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.agents/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.agents/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.agents/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.agents/skills/yss-mybatis/references/README.md +0 -57
- package/template/.agents/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
- package/template/.claude/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.claude/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.claude/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.claude/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.claude/skills/yss-mybatis/references/README.md +0 -57
- package/template/.claude/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
- package/template/.codex/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.codex/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.codex/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.codex/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.codex/skills/yss-mybatis/references/README.md +0 -57
- package/template/.codex/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
- package/template/.cursor/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.cursor/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.cursor/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.cursor/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.cursor/skills/yss-mybatis/references/README.md +0 -57
- package/template/.cursor/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
- package/template/.pi/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.pi/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.pi/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.pi/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.pi/skills/yss-mybatis/references/README.md +0 -57
- package/template/.pi/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
- package/template/.qoder/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.qoder/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.qoder/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.qoder/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.qoder/skills/yss-mybatis/references/README.md +0 -57
- package/template/.qoder/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
- package/template/.trae/skills/yss-mybatis/assets/BaseRepository.java +0 -112
- package/template/.trae/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
- package/template/.trae/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
- package/template/.trae/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
- package/template/.trae/skills/yss-mybatis/references/README.md +0 -57
- package/template/.trae/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs
CHANGED
|
@@ -1,24 +1,394 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
2
3
|
import { execFileSync } from "node:child_process";
|
|
3
|
-
import { access, mkdir, readdir, writeFile } from "node:fs/promises";
|
|
4
|
+
import { access, mkdir, readFile, readdir, writeFile } from "node:fs/promises";
|
|
4
5
|
import os from "node:os";
|
|
5
6
|
import path from "node:path";
|
|
6
7
|
import { fileURLToPath } from "node:url";
|
|
7
8
|
|
|
8
|
-
const BACKEND = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
9
|
+
const BACKEND = {
|
|
10
|
+
"yss-cache": ["yss-microservice-components/yss-component-cache-parent"],
|
|
11
|
+
"yss-mybatis": ["yss-microservice-components/yss-component-persistence"],
|
|
12
|
+
"yss-dto": ["yss-microservice-components/yss-component-dto"],
|
|
13
|
+
"yss-audit-log": ["yss-microservice-components/yss-component-audit-log"],
|
|
14
|
+
"yss-excel-mvc": [
|
|
15
|
+
"yss-microservice-components/yss-component-excel-mvc",
|
|
16
|
+
"yss-microservice-components/yss-component-excel-starter",
|
|
17
|
+
],
|
|
18
|
+
"yss-distributed-id": [
|
|
19
|
+
"yss-microservice-components/yss-component-distributed-id",
|
|
20
|
+
"yss-microservice-components/yss-component-leaf",
|
|
21
|
+
],
|
|
22
|
+
"yss-resilience4j": ["yss-microservice-components/yss-component-resilience4j-starter"],
|
|
23
|
+
"yss-validation": [
|
|
24
|
+
"yss-microservice-components/yss-component-validation-engine-parent",
|
|
25
|
+
"yss-microservice-components/yss-component-validation-jsr303",
|
|
26
|
+
],
|
|
27
|
+
"yss-security-algorithm": ["yss-microservice-components/yss-component-security-algorithm"],
|
|
28
|
+
"yss-userinfo": ["yss-microservice-components/yss-component-userinfo-starter"],
|
|
29
|
+
"yss-exception": ["yss-microservice-components/yss-component-exception"],
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const FRONTEND = {
|
|
33
|
+
"yss-ui": ["components", "hooks", "skills"],
|
|
34
|
+
"yss-components": ["components"],
|
|
35
|
+
"yss-hook": ["hooks"],
|
|
36
|
+
"yss-ui-business-page-generation": ["components", "hooks", "skills"],
|
|
37
|
+
"yss-use-table-height": ["hooks"],
|
|
38
|
+
"yss-use-tree-height": ["hooks"],
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const URLS = {
|
|
42
|
+
components: "http://192.168.164.27:3200/components",
|
|
43
|
+
hooks: "http://192.168.164.27:3200/hooks",
|
|
44
|
+
skills: "http://192.168.164.27:3200/skills",
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const KEYS = [
|
|
48
|
+
"Audit", "Cache", "Clear", "Command", "Configuration", "Controller", "DTO", "Data", "Enable", "Excel",
|
|
49
|
+
"Handler", "Interceptor", "Jdbc", "Mapper", "Mybatis", "Page", "Properties", "Query", "Repository", "Request",
|
|
50
|
+
"Response", "Result", "Update", "Aspect", "Leaf", "Id", "Dir", "Dic", "Dictionary", "File", "Upload", "Log",
|
|
51
|
+
"Message", "Mail", "Liquibase", "Circuit", "Breaker", "Sql", "Tpl", "Tag", "Task", "Flow", "Report",
|
|
52
|
+
"Validation", "Validator", "Security", "Crypto", "User", "Variable", "Quality", "Search", "Similarity",
|
|
53
|
+
"Scheduler", "Runner", "Duck", "Dynamic", "Factory", "Client", "Feign", "Gateway", "Convertor", "Adapter",
|
|
54
|
+
"Advice", "Bridge", "Route", "Uploader", "Sftp", "Minio", "Parser", "Express", "Rule", "Template", "Generator",
|
|
55
|
+
"Importer", "Engine", "Event", "Submitter", "Executor", "Context", "Status", "Type", "State",
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
const DOCS = new Set(["README.md", "readme.md", "HELP.md", "TECHNICAL_DESIGN.md"]);
|
|
59
|
+
const SKIPPED_DIRECTORIES = new Set([".git", "node_modules", "target", "build", "out", "${project.build.directory}"]);
|
|
60
|
+
|
|
61
|
+
const MYBATIS_CAPABILITIES = [
|
|
62
|
+
{
|
|
63
|
+
title: "Repository abstractions",
|
|
64
|
+
sources: [
|
|
65
|
+
{
|
|
66
|
+
suffix: "/support/BaseRepository.java",
|
|
67
|
+
patterns: [/public interface BaseRepository/, /int (insert|insertSelective|insertList|updateList|updateListSelective)\(/],
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
suffix: "/support/BasePlusRepository.java",
|
|
71
|
+
patterns: [/public interface BasePlusRepository/, /insertBatchSomeColumn/],
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
title: "Pagination and activation",
|
|
77
|
+
sources: [
|
|
78
|
+
{ suffix: "/aop/EntityQueryAspect.java", patterns: [/@Around\(/, /PageHelper\.offsetPage/] },
|
|
79
|
+
{ suffix: "/config/PageQueryEntityConfigration.java", patterns: [/@ConditionalOnProperty/] },
|
|
80
|
+
{
|
|
81
|
+
suffix: "/YssMybatisMapperProperties.java",
|
|
82
|
+
patterns: [
|
|
83
|
+
/@ConfigurationProperties/,
|
|
84
|
+
/private (String mapperLocation|String mapperScan|Integer batchSize|String dbType|PageHelper pageHelper|MybatisPlusPagination mybatisPlusPagination)/,
|
|
85
|
+
/public static class (PageHelper|MybatisPlusPagination)/,
|
|
86
|
+
/private Boolean enabled/,
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
suffix: "/config/MapperConfiguration.java",
|
|
91
|
+
patterns: [/new PageInterceptor\(/, /new PaginationInnerInterceptor\(/, /setBatchSize\(/, /setDbType\(/],
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
title: "SQL-level batch insertion",
|
|
97
|
+
sources: [
|
|
98
|
+
{ suffix: "/config/BatchInsertSettings.java", patterns: [/DEFAULT_BATCH_SIZE/, /configuredBatchSize/] },
|
|
99
|
+
{ suffix: "/config/BatchSqlInjector.java", patterns: [/public class BatchSqlInjector/, /insertBatchSomeColumnInternal/, /FieldFill\.UPDATE/] },
|
|
100
|
+
{ suffix: "/config/DialectInsertBatchSomeColumn.java", patterns: [/public class DialectInsertBatchSomeColumn/, /DbType\.(ORACLE|ORACLE_12C|DM)/] },
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
title: "Multi-data-source capability boundary",
|
|
105
|
+
sources: [
|
|
106
|
+
{
|
|
107
|
+
suffix: "/MultiDataSourceHolder.java",
|
|
108
|
+
patterns: [/public class MultiDataSourceHolder/, /Map<String, DataSource>/, /getMultiDataSource\(/],
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
|
|
114
|
+
const exists = async (target) => {
|
|
115
|
+
try {
|
|
116
|
+
await access(target);
|
|
117
|
+
return true;
|
|
118
|
+
} catch {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
async function walk(root) {
|
|
124
|
+
if (!await exists(root)) return [];
|
|
125
|
+
const output = [];
|
|
126
|
+
for (const item of await readdir(root, { withFileTypes: true })) {
|
|
127
|
+
const target = path.join(root, item.name);
|
|
128
|
+
if (item.isDirectory() && !SKIPPED_DIRECTORIES.has(item.name)) output.push(...await walk(target));
|
|
129
|
+
else if (item.isFile()) output.push(target);
|
|
130
|
+
}
|
|
131
|
+
return output;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function relative(root, target) {
|
|
135
|
+
const value = path.relative(root, target).replaceAll(path.sep, "/");
|
|
136
|
+
return value && !value.startsWith("..") ? value : target;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function runGit(root, args) {
|
|
140
|
+
return execFileSync("git", ["-C", root, ...args], {
|
|
141
|
+
encoding: "utf8",
|
|
142
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
143
|
+
}).trim();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export function sourceState(root, componentPaths) {
|
|
147
|
+
try {
|
|
148
|
+
const commit = runGit(root, ["rev-parse", "HEAD"]);
|
|
149
|
+
const componentWorktree = runGit(root, ["status", "--porcelain", "--", ...componentPaths]) ? "dirty" : "clean";
|
|
150
|
+
const componentTrees = componentPaths.map((componentPath) => {
|
|
151
|
+
let tree = "missing";
|
|
152
|
+
try {
|
|
153
|
+
tree = runGit(root, ["rev-parse", `HEAD:${componentPath}`]);
|
|
154
|
+
} catch {
|
|
155
|
+
// The path can be newly added or absent in the indexed commit.
|
|
156
|
+
}
|
|
157
|
+
return { path: componentPath, tree };
|
|
158
|
+
});
|
|
159
|
+
return { commit, componentWorktree, componentTrees };
|
|
160
|
+
} catch {
|
|
161
|
+
return {
|
|
162
|
+
commit: "unavailable",
|
|
163
|
+
componentWorktree: "unknown",
|
|
164
|
+
componentTrees: componentPaths.map((componentPath) => ({ path: componentPath, tree: "unavailable" })),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
async function sourceRoot() {
|
|
170
|
+
if (process.env.YSS_SOURCE_ROOT) {
|
|
171
|
+
const root = path.resolve(process.env.YSS_SOURCE_ROOT);
|
|
172
|
+
if (await exists(path.join(root, "yss-microservice-components"))) return root;
|
|
173
|
+
throw new Error(`YSS_SOURCE_ROOT must point to the repository root containing \`yss-microservice-components\`: ${root}`);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const home = os.homedir();
|
|
177
|
+
const candidates = [
|
|
178
|
+
process.cwd(),
|
|
179
|
+
...ancestors(process.cwd()),
|
|
180
|
+
path.join(home, "Documents/yss-project/yss-cloud-microservice"),
|
|
181
|
+
path.join(home, "Documents/yss-project"),
|
|
182
|
+
path.join(home, "Projects/yss-cloud-microservice"),
|
|
183
|
+
path.join(home, "Projects"),
|
|
184
|
+
];
|
|
185
|
+
for (const base of [path.join(home, "Projects"), path.join(home, "Documents"), path.join(home, "Documents/yss-project")]) {
|
|
186
|
+
if (!await exists(base)) continue;
|
|
187
|
+
for (const entry of await readdir(base, { withFileTypes: true })) {
|
|
188
|
+
if (entry.isDirectory()) candidates.push(path.join(base, entry.name));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
for (const root of candidates) {
|
|
192
|
+
if (await exists(path.join(root, "yss-microservice-components"))) return path.resolve(root);
|
|
193
|
+
}
|
|
194
|
+
throw new Error("Could not find a YSS source repository containing `yss-microservice-components`. Export YSS_SOURCE_ROOT=/absolute/path/to/yss-cloud-microservice and rerun.");
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function ancestors(start) {
|
|
198
|
+
const output = [];
|
|
199
|
+
let current = path.resolve(start);
|
|
200
|
+
while (path.dirname(current) !== current) {
|
|
201
|
+
current = path.dirname(current);
|
|
202
|
+
output.push(current);
|
|
203
|
+
}
|
|
204
|
+
return output;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
async function files(bases) {
|
|
208
|
+
const output = { docs: [], poms: [], java: [], metadata: [] };
|
|
209
|
+
for (const base of bases) {
|
|
210
|
+
for (const target of await walk(base)) {
|
|
211
|
+
if (DOCS.has(path.basename(target))) output.docs.push(target);
|
|
212
|
+
else if (path.basename(target) === "pom.xml") output.poms.push(target);
|
|
213
|
+
else if (target.endsWith(".java") && target.includes(`${path.sep}src${path.sep}main${path.sep}java${path.sep}`)) output.java.push(target);
|
|
214
|
+
else if (path.basename(target) === "spring.factories") output.metadata.push(target);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
for (const items of Object.values(output)) items.sort();
|
|
218
|
+
return output;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
async function sha256(target) {
|
|
222
|
+
return createHash("sha256").update(await readFile(target)).digest("hex");
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
function list(items, render, empty) {
|
|
226
|
+
return items.length ? items.map(render) : [empty];
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
async function genericJavaEntries(source, javaFiles) {
|
|
230
|
+
const selected = javaFiles
|
|
231
|
+
.filter((target) => KEYS.some((key) => path.basename(target, ".java").includes(key)))
|
|
232
|
+
.slice(0, 120);
|
|
233
|
+
const output = [];
|
|
234
|
+
for (const target of selected) {
|
|
235
|
+
output.push(`- \`${relative(source, target)}\` — \`sha256:${await sha256(target)}\``);
|
|
236
|
+
}
|
|
237
|
+
return output.length ? output : ["- No key Java entry points matched the configured name patterns."];
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
function matchingLines(contents, patterns) {
|
|
241
|
+
return contents
|
|
242
|
+
.split(/\r?\n/)
|
|
243
|
+
.map((line, index) => ({ line: index + 1, text: line.trim().replace(/\s+/g, " ") }))
|
|
244
|
+
.filter(({ text }) => text && patterns.some((pattern) => pattern.test(text)))
|
|
245
|
+
.slice(0, 14);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
async function mybatisCapabilityMatrix(source, javaFiles, metadataFiles) {
|
|
249
|
+
const output = ["## Capability Matrix", ""];
|
|
250
|
+
for (const capability of MYBATIS_CAPABILITIES) {
|
|
251
|
+
output.push(`### ${capability.title}`, "");
|
|
252
|
+
for (const expected of capability.sources) {
|
|
253
|
+
const target = javaFiles.find((candidate) => relative(source, candidate).endsWith(expected.suffix));
|
|
254
|
+
if (!target) {
|
|
255
|
+
output.push(`- \`${path.basename(expected.suffix)}\` — source not found.`);
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
const sourcePath = relative(source, target);
|
|
259
|
+
output.push(`- \`${sourcePath}\` — \`sha256:${await sha256(target)}\``);
|
|
260
|
+
const lines = matchingLines(await readFile(target, "utf8"), expected.patterns);
|
|
261
|
+
if (!lines.length) output.push(" - No configured public fact matched; refresh rules may need maintenance.");
|
|
262
|
+
else for (const fact of lines) output.push(` - \`${sourcePath}:${fact.line}\` — \`${fact.text.replaceAll("`", "'")}\``);
|
|
263
|
+
}
|
|
264
|
+
output.push("");
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
output.push("### Auto-configuration registration", "");
|
|
268
|
+
for (const target of metadataFiles) {
|
|
269
|
+
const sourcePath = relative(source, target);
|
|
270
|
+
output.push(`- \`${sourcePath}\` — \`sha256:${await sha256(target)}\``);
|
|
271
|
+
const registrations = (await readFile(target, "utf8"))
|
|
272
|
+
.split(/\r?\n/)
|
|
273
|
+
.map((line) => line.trim())
|
|
274
|
+
.filter((line) => line && !line.startsWith("#"));
|
|
275
|
+
for (const registration of registrations.slice(0, 12)) output.push(` - \`${registration.replaceAll("`", "'")}\``);
|
|
276
|
+
}
|
|
277
|
+
if (!metadataFiles.length) output.push("- No `spring.factories` registration found.");
|
|
278
|
+
output.push("");
|
|
279
|
+
return output;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
async function backendIndex({ skill, parts, source, found, now, stateResolver }) {
|
|
283
|
+
const currentState = stateResolver(source, parts);
|
|
284
|
+
const bases = parts.map((item) => path.join(source, item));
|
|
285
|
+
const baseHints = await Promise.all(bases.map(async (target) =>
|
|
286
|
+
`- \`${relative(source, target)}\` (${await exists(target) ? "existed" : "missing"} when indexed)`,
|
|
287
|
+
));
|
|
288
|
+
const treeLines = currentState.componentTrees.map(({ path: componentPath, tree }) =>
|
|
289
|
+
`Component tree \`${componentPath}\`: \`${tree}\``,
|
|
290
|
+
);
|
|
291
|
+
const lines = [
|
|
292
|
+
`# ${skill} Source Index`,
|
|
293
|
+
"",
|
|
294
|
+
`Generated: ${now}`,
|
|
295
|
+
`Source commit: \`${currentState.commit}\``,
|
|
296
|
+
`Component worktree: \`${currentState.componentWorktree}\``,
|
|
297
|
+
...treeLines,
|
|
298
|
+
"Indexed source root: resolved at refresh time; set `YSS_SOURCE_ROOT` to reproduce or refresh.",
|
|
299
|
+
"",
|
|
300
|
+
"This file is generated by `yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs`. Do not hand-edit generated sections.",
|
|
301
|
+
"",
|
|
302
|
+
"Paths are relocatable source hints. Exact guidance requires a matching component tree and a clean indexed component subtree; the repository commit is trace metadata and may differ when unrelated components change.",
|
|
303
|
+
"",
|
|
304
|
+
"## Component Path Hints",
|
|
305
|
+
"",
|
|
306
|
+
...baseHints,
|
|
307
|
+
"",
|
|
308
|
+
"## Documentation Files",
|
|
309
|
+
"",
|
|
310
|
+
...list(found.docs, (target) => `- \`${relative(source, target)}\``, "- No component documentation files found."),
|
|
311
|
+
"",
|
|
312
|
+
"Component documentation is a discovery aid. For API signatures, conditions and defaults, prefer the indexed source facts below when documentation differs.",
|
|
313
|
+
"",
|
|
314
|
+
"## Maven Modules",
|
|
315
|
+
"",
|
|
316
|
+
...list(found.poms, (target) => `- \`${relative(source, path.dirname(target))}\``, "- No Maven modules found."),
|
|
317
|
+
"",
|
|
318
|
+
];
|
|
319
|
+
|
|
320
|
+
if (skill === "yss-mybatis") lines.push(...await mybatisCapabilityMatrix(source, found.java, found.metadata));
|
|
321
|
+
else lines.push("## Key Java Entry Points", "", ...await genericJavaEntries(source, found.java), "");
|
|
322
|
+
|
|
323
|
+
lines.push(
|
|
324
|
+
"## Freshness and Use",
|
|
325
|
+
"",
|
|
326
|
+
"- Locate the current source root using `YSS_SOURCE_ROOT`, CodeGraph, Maven artifact names or repository search.",
|
|
327
|
+
"- Compare each indexed `Component tree` with `git rev-parse HEAD:<component-path>` and require the current component subtree to be clean before exact guidance.",
|
|
328
|
+
"- A repository commit difference alone is not stale when the component tree is unchanged; a component tree mismatch or component-local dirty state is stale.",
|
|
329
|
+
"- Read only the source entries needed for the current decision or troubleshooting path.",
|
|
330
|
+
"",
|
|
331
|
+
);
|
|
332
|
+
return lines.join("\n");
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
export async function refresh({
|
|
336
|
+
skillsRoot,
|
|
337
|
+
source,
|
|
338
|
+
now = new Date().toISOString(),
|
|
339
|
+
frontend = true,
|
|
340
|
+
backendSkills = Object.keys(BACKEND),
|
|
341
|
+
stateResolver = sourceState,
|
|
342
|
+
}) {
|
|
343
|
+
const unknownSkills = backendSkills.filter((skill) => !(skill in BACKEND));
|
|
344
|
+
if (unknownSkills.length) throw new Error(`Unknown backend source-index skill: ${unknownSkills.join(", ")}`);
|
|
345
|
+
for (const skill of backendSkills) {
|
|
346
|
+
const parts = BACKEND[skill];
|
|
347
|
+
const bases = parts.map((item) => path.join(source, item));
|
|
348
|
+
const found = await files(bases);
|
|
349
|
+
const target = path.join(skillsRoot, skill, "references", "source-index.md");
|
|
350
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
351
|
+
await writeFile(target, await backendIndex({ skill, parts, source, found, now, stateResolver }), "utf8");
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
if (frontend) {
|
|
355
|
+
for (const [skill, keys] of Object.entries(FRONTEND)) {
|
|
356
|
+
if (!await exists(path.join(skillsRoot, skill))) continue;
|
|
357
|
+
const target = path.join(skillsRoot, skill, "references", "frontend-docs.md");
|
|
358
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
359
|
+
await writeFile(target, [
|
|
360
|
+
`# ${skill} Frontend Documentation`,
|
|
361
|
+
"",
|
|
362
|
+
`Generated: ${now}`,
|
|
363
|
+
"",
|
|
364
|
+
"Use these YSS UI documentation entry points as authoritative references when local repo examples are insufficient.",
|
|
365
|
+
"",
|
|
366
|
+
...keys.map((key) => `- ${key}: ${URLS[key]}`),
|
|
367
|
+
"",
|
|
368
|
+
"When documentation and local code differ, inspect the current project code before editing and prefer established local usage.",
|
|
369
|
+
"",
|
|
370
|
+
].join("\n"), "utf8");
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return { backend: backendSkills.length, frontend: frontend ? Object.keys(FRONTEND).length : 0 };
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
async function main() {
|
|
377
|
+
try {
|
|
378
|
+
const script = path.dirname(fileURLToPath(import.meta.url));
|
|
379
|
+
const result = await refresh({
|
|
380
|
+
skillsRoot: path.resolve(process.env.YSS_SKILLS_ROOT || path.join(script, "../..")),
|
|
381
|
+
source: await sourceRoot(),
|
|
382
|
+
frontend: !["0", "false", "no"].includes((process.env.YSS_REFRESH_FRONTEND || "true").toLowerCase()),
|
|
383
|
+
backendSkills: process.env.YSS_REFRESH_BACKEND_SKILLS
|
|
384
|
+
? process.env.YSS_REFRESH_BACKEND_SKILLS.split(",").map((skill) => skill.trim()).filter(Boolean)
|
|
385
|
+
: Object.keys(BACKEND),
|
|
386
|
+
});
|
|
387
|
+
console.log(`Updated ${result.backend} backend indexes and ${result.frontend} frontend doc references.`);
|
|
388
|
+
} catch (error) {
|
|
389
|
+
console.error(error.message);
|
|
390
|
+
process.exitCode = 1;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) await main();
|
package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.test.mjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
|
+
import { execFileSync } from "node:child_process";
|
|
2
3
|
import { mkdir, mkdtemp, readFile, writeFile } from "node:fs/promises";
|
|
3
4
|
import { tmpdir } from "node:os";
|
|
4
5
|
import path from "node:path";
|
|
5
6
|
import test from "node:test";
|
|
6
|
-
import { refresh } from "./refresh-yss-skill-index.mjs";
|
|
7
|
+
import { refresh, sourceState } from "./refresh-yss-skill-index.mjs";
|
|
7
8
|
|
|
8
9
|
test("writes Node-labelled generated indexes", async () => {
|
|
9
10
|
const root=await mkdtemp(path.join(tmpdir(),"yss-index-")); const source=path.join(root,"source"); const skills=path.join(root,"skills");
|
|
@@ -13,3 +14,80 @@ test("writes Node-labelled generated indexes", async () => {
|
|
|
13
14
|
assert.match(await readFile(path.join(skills,"yss-cache/references/source-index.md"),"utf8"),/refresh-yss-skill-index\.mjs/);
|
|
14
15
|
assert.match(await readFile(path.join(skills,"yss-ui/references/frontend-docs.md"),"utf8"),/components/);
|
|
15
16
|
});
|
|
17
|
+
|
|
18
|
+
test("writes a source-backed MyBatis capability matrix without absolute paths", async () => {
|
|
19
|
+
const root = await mkdtemp(path.join(tmpdir(), "yss-mybatis-index-"));
|
|
20
|
+
const source = path.join(root, "source");
|
|
21
|
+
const skills = path.join(root, "skills");
|
|
22
|
+
const component = "yss-microservice-components/yss-component-persistence";
|
|
23
|
+
const plusJava = path.join(source, component, "yss-component-mybatis-plus-starter/src/main/java/com/yss/cloud/mybatis");
|
|
24
|
+
const baseJava = path.join(source, component, "yss-component-mybatis-starter/src/main/java/com/yss/cloud/mybatis");
|
|
25
|
+
const commonJava = path.join(source, component, "yss-component-persistence-common/src/main/java/com/yss/cloud/mybatis");
|
|
26
|
+
|
|
27
|
+
await mkdir(path.join(plusJava, "support"), { recursive: true });
|
|
28
|
+
await mkdir(path.join(baseJava, "config"), { recursive: true });
|
|
29
|
+
await mkdir(commonJava, { recursive: true });
|
|
30
|
+
await mkdir(path.join(skills, "yss-mybatis"), { recursive: true });
|
|
31
|
+
await writeFile(path.join(source, component, "pom.xml"), "<project/>");
|
|
32
|
+
await writeFile(path.join(plusJava, "support/BasePlusRepository.java"), [
|
|
33
|
+
"public interface BasePlusRepository<T> extends BaseMapper<T> {",
|
|
34
|
+
" default Integer insertBatchSomeColumn(List<T> entities) { return 0; }",
|
|
35
|
+
" Integer insertBatchSomeColumnInternal(List<T> entities);",
|
|
36
|
+
"}",
|
|
37
|
+
].join("\n"));
|
|
38
|
+
await writeFile(path.join(baseJava, "config/PageQueryEntityConfigration.java"), [
|
|
39
|
+
"public class PageQueryEntityConfigration {",
|
|
40
|
+
" @ConditionalOnProperty(name = \"yss.mybatis.page-helper.enabled\", havingValue = \"true\", matchIfMissing = true)",
|
|
41
|
+
"}",
|
|
42
|
+
].join("\n"));
|
|
43
|
+
await writeFile(path.join(commonJava, "MultiDataSourceHolder.java"), [
|
|
44
|
+
"public class MultiDataSourceHolder {",
|
|
45
|
+
" private Map<String, DataSource> multiDataSource;",
|
|
46
|
+
"}",
|
|
47
|
+
].join("\n"));
|
|
48
|
+
|
|
49
|
+
await refresh({
|
|
50
|
+
skillsRoot: skills,
|
|
51
|
+
source,
|
|
52
|
+
now: "2026-01-01T00:00:00Z",
|
|
53
|
+
frontend: false,
|
|
54
|
+
backendSkills: ["yss-mybatis"],
|
|
55
|
+
stateResolver: () => ({
|
|
56
|
+
commit: "a".repeat(40),
|
|
57
|
+
componentWorktree: "clean",
|
|
58
|
+
componentTrees: [{ path: component, tree: "b".repeat(40) }],
|
|
59
|
+
}),
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const index = await readFile(path.join(skills, "yss-mybatis/references/source-index.md"), "utf8");
|
|
63
|
+
assert.match(index, /## Capability Matrix/);
|
|
64
|
+
assert.match(index, /BasePlusRepository<T>/);
|
|
65
|
+
assert.match(index, /yss\.mybatis\.page-helper\.enabled/);
|
|
66
|
+
assert.match(index, /Map<String, DataSource>/);
|
|
67
|
+
assert.match(index, /Component worktree: `clean`/);
|
|
68
|
+
assert.match(index, /Component tree.*b{40}/);
|
|
69
|
+
assert.doesNotMatch(index, new RegExp(root.replaceAll("/", "\\/")));
|
|
70
|
+
assert.doesNotMatch(index, /## Key Java Entry Points/);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test("source freshness is scoped to the indexed component subtree", async () => {
|
|
74
|
+
const root = await mkdtemp(path.join(tmpdir(), "yss-component-state-"));
|
|
75
|
+
const component = "yss-microservice-components/yss-component-persistence";
|
|
76
|
+
const componentFile = path.join(root, component, "pom.xml");
|
|
77
|
+
const unrelatedFile = path.join(root, "yss-microservice-components/other/README.md");
|
|
78
|
+
await mkdir(path.dirname(componentFile), { recursive: true });
|
|
79
|
+
await mkdir(path.dirname(unrelatedFile), { recursive: true });
|
|
80
|
+
await writeFile(componentFile, "<project/>\n");
|
|
81
|
+
await writeFile(unrelatedFile, "clean\n");
|
|
82
|
+
execFileSync("git", ["init", "-q"], { cwd: root });
|
|
83
|
+
execFileSync("git", ["config", "user.email", "test@example.com"], { cwd: root });
|
|
84
|
+
execFileSync("git", ["config", "user.name", "Test"], { cwd: root });
|
|
85
|
+
execFileSync("git", ["add", "."], { cwd: root });
|
|
86
|
+
execFileSync("git", ["commit", "-qm", "fixture"], { cwd: root });
|
|
87
|
+
|
|
88
|
+
await writeFile(unrelatedFile, "dirty elsewhere\n");
|
|
89
|
+
assert.equal(sourceState(root, [component]).componentWorktree, "clean");
|
|
90
|
+
|
|
91
|
+
await writeFile(componentFile, "<project><dirty/></project>\n");
|
|
92
|
+
assert.equal(sourceState(root, [component]).componentWorktree, "dirty");
|
|
93
|
+
});
|
|
@@ -9,7 +9,7 @@ description: 在 YSS 技术分析阶段将批准的战略领域输入细化为
|
|
|
9
9
|
|
|
10
10
|
## 适用边界
|
|
11
11
|
|
|
12
|
-
- 由 `yss-
|
|
12
|
+
- 由 `yss-technical-design` 在已确认 `domain-driven` 的技术设计分支中调用;传统 MVC 使用 `yss-mvc-design`,不得按状态或一致性影响单独推断为 DDD。
|
|
13
13
|
- 输入必须是版本当前的 Spec、功能架构、战略 DDD、状态矩阵、OpenAPI Draft / Freeze、ADR 和工程约束。若输入来自 Strategic Design Handoff,必须先用 `scripts/verify-strategic-context-import` 验证 schema v3 `source_context_snapshot` / `context_delta` 已对账到目标仓根 `CONTEXT.md`,Visual Baseline Bundle 可读取且 digest 当前,并且目标侧 `context_reconciliation` 有效;未完成时不得开始战术建模。
|
|
14
14
|
- 默认将结果写入系统概要设计 / 数据架构中的 Tactical DDD Check;聚合、状态机、一致性或持久化映射复杂到无法清楚表达时,才升级为独立战术设计文档。
|
|
15
15
|
- 没有聚合、状态、不变量、一致性或领域边界影响时返回 `not-applicable` 及原因,不生成空设计。
|
|
@@ -22,7 +22,7 @@ description: 在 YSS 技术分析阶段将批准的战略领域输入细化为
|
|
|
22
22
|
|
|
23
23
|
## 输出与状态
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
新产物输出 Technical Design Contract schema v2 的 DDD `design` 分支(沿用 v1 DDD 内容结构);旧独立 tactical-design contract schema v1 仅显式兼容读取,不自动迁移或批准。输出验证结果、评审引用和影响标记;来自 Strategic Design Handoff 时保留 `strategic_context_import_ref` 与 `context_reconciliation_ref`。状态使用 `draft`、`ready-for-human`、`approved`、`blocked`、`stale`、`drift`、`new_impacts`。
|
|
26
26
|
|
|
27
27
|
当用户或当前技术分析 / 架构评审合同明确要求聚合关系、状态转换、调用链、数据流或 Before/After 图示时,追加使用 `archify`。图必须从当前 Spec、ADR、OpenAPI、Tactical Design Contract 和代码证据派生,保存成 `*.archify.json`、`*.html` 与 `*.receipt.json` 配对资产;它是审查证据,不是新的事实源或批准门禁。没有明确图示要求时,不把 `archify` 加入 `required_skills`。
|
|
28
28
|
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
## 输出
|
|
8
8
|
|
|
9
|
+
以下 v1 结构作为新 Technical Design Contract v2 的 DDD `design` 内容使用。旧独立 v1 文件保持显式只读兼容;新合同共同头与战略交接绑定由 `yss-technical-design` 持有,分支不重复保存。
|
|
10
|
+
|
|
9
11
|
```yaml
|
|
10
12
|
schema_version: 1
|
|
11
13
|
tactical_design_id: tactical-design.<feature>
|
|
@@ -40,4 +42,4 @@ evidence_refs: []
|
|
|
40
42
|
6. 复杂跨聚合一致性、并发、幂等、事件补偿或持久化错位必须写明策略,必要时升级独立文档。
|
|
41
43
|
7. 实现发现新影响时必须阻断并回到生命周期重新路由。
|
|
42
44
|
|
|
43
|
-
|
|
45
|
+
跨仓快照消费在 v2 共同头(旧独立 v1 则为根对象)绑定 `strategic_handoff`;字段与实际命令以 `docs/process/strategic-handoff-package.md` 为准。
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { readFile } from "node:fs/promises";
|
|
3
3
|
import process from "node:process";
|
|
4
|
+
import { pathToFileURL } from "node:url";
|
|
4
5
|
import { parseDocument } from "../../../../scripts/vendor/yaml.mjs";
|
|
5
6
|
|
|
6
7
|
import { parseArgs } from "node:util";
|
|
@@ -68,7 +69,7 @@ function refsExist(values, known, path, errors) {
|
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
71
|
|
|
71
|
-
function validate(data) {
|
|
72
|
+
export function validate(data) {
|
|
72
73
|
const errors = [];
|
|
73
74
|
if (!isObject(data)) return ["合同必须是对象"];
|
|
74
75
|
for (const field of required) requireField(data, field, "root", errors);
|
|
@@ -218,4 +219,4 @@ async function main() {
|
|
|
218
219
|
process.stdout.write(`${JSON.stringify({ result: "ready-for-lifecycle-review", tactical_design_id: document.get("tactical_design_id"), status: document.get("status") }, null, 2)}\n`);
|
|
219
220
|
}
|
|
220
221
|
|
|
221
|
-
main().catch((error) => { process.stderr.write(`${error.message}\n`); process.exitCode = 1; });
|
|
222
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) main().catch((error) => { process.stderr.write(`${error.message}\n`); process.exitCode = 1; });
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: yss-technical-design
|
|
3
|
+
description: 在 YSS 技术分析中统一承接需求与战略输入,按已确认的 DDD 或传统 MVC 架构组织设计合同。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# YSS 技术设计
|
|
7
|
+
|
|
8
|
+
由 `yss-product-lifecycle` 调度,负责 `work-unit.technical-analysis` 的技术设计,不另起生命周期、不生成生产代码。生命周期维护批准和状态;`yss-implementation-contract-compiler` 消费批准且当前的设计,起草实现合同。
|
|
9
|
+
|
|
10
|
+
## 输入与架构选择
|
|
11
|
+
|
|
12
|
+
先读根 `CONTEXT.md`、已批准且当前的 Spec、业务规则、关键场景、适用的 API 契约、ADR 和工程约束。没有 API 或其他专项影响时记录有依据的不适用,不生成占位设计。
|
|
13
|
+
|
|
14
|
+
按项目绑定架构选择的来源及摘要。新工程复用 `scaffold-architecture-decisions.yaml` 的用户确认决定,先确认再进入分支,后续脚手架消费同一决定;既有工程沿用已登记架构,架构转换另行立项。只有 `domain-driven` 和 `layered-mvc` 两种架构族,不能从目录推断或默认 DDD。具体 Profile 及模块边界消费技能注册表与 `docs/agents/backend-architecture-profiles.md`。
|
|
15
|
+
|
|
16
|
+
- `domain-driven`:调用 `yss-tactical-design`,补齐适用的战略领域输入。
|
|
17
|
+
- `layered-mvc`:调用 `yss-mvc-design`,不要求战略 DDD、聚合、值对象、Domain Event 或 DDD Gateway。
|
|
18
|
+
|
|
19
|
+
已有 Strategic Design Handoff 时,两种分支都必须先完成导入和目标词汇对账,再逐条承接规则与关键场景。没有战略交接包的项目直接消费批准需求,不能为 MVC 补造战略 DDD。
|
|
20
|
+
|
|
21
|
+
## 合同与验证
|
|
22
|
+
|
|
23
|
+
新产物使用 schema v2 Technical Design Contract:共同头记录架构来源、输入版本与摘要、规则/场景承接、评审证据和状态,`design` 保存架构专属内容。合同格式与兼容规则见 `references/technical-design-contract.md`,Schema 见 `references/technical-design.schema.json`。
|
|
24
|
+
|
|
25
|
+
运行 `node .agents/skills/yss-technical-design/scripts/validate-technical-design.mjs <合同> --root <项目根>`。整体存在延期或冲突即阻断整体;相关切片可带 `--slice <切片ID>` 按依赖核验,仍须合同已批准。校验成功只返回审查输入,不批准、不设置 `ready-for-agent`。
|
|
26
|
+
|
|
27
|
+
schema v1 战术合同只按 DDD 显式兼容读取;使用 `--legacy-ddd`,不能解释为 MVC。迁移不自动批准,输入或架构变化必须重新校验并按现有门禁审查。新合同使用 `artifact.technical-design` / `evidence.technical-design-review`;旧 DDD 稳定 ID 保留原含义。
|
|
28
|
+
|
|
29
|
+
## 交接
|
|
30
|
+
|
|
31
|
+
按现有架构审查门禁进行独立评审。批准且版本当前后交回生命周期,再交编译器;DDD 实现使用 `yss-domain`,MVC 实现按已登记 Profile 的能力与 Recipe 路由。发现 `stale`、`drift`、`new_impacts` 或路径越界时回交重路由。需要图示时按用户或合同要求调用 `archify`,图只作派生证据。
|