create-yss-spec 3.2.0 → 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 +2 -2
- package/package.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-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 +1 -1
- package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
- package/template/.agents/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
- 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-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 +4 -2
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +5 -1
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +5 -2
- 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/.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-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 +1 -1
- package/template/.claude/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
- package/template/.claude/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
- 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-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 +4 -2
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +5 -1
- package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +5 -2
- 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/.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-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 +1 -1
- package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
- package/template/.codex/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
- 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-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 +4 -2
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +5 -1
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +5 -2
- 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/.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-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 +1 -1
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
- 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-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 +4 -2
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +5 -1
- package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +5 -2
- 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/.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-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 +1 -1
- package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
- package/template/.pi/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
- 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-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 +4 -2
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +5 -1
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +5 -2
- 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/.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-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 +1 -1
- package/template/.qoder/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
- package/template/.qoder/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
- 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-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 +4 -2
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +5 -1
- package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +5 -2
- 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/.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-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 +1 -1
- package/template/.trae/skills/yss-implementation-contract-compiler/references/boundaries.md +4 -0
- package/template/.trae/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +25 -0
- 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-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 +4 -2
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +67 -10
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +5 -1
- package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +5 -2
- 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/docs/agents/digital-human-roles.yaml +2 -0
- package/template/docs/agents/yss-skill-registry.yaml +5 -0
- package/template/docs/process/lifecycle-artifact-map.md +4 -0
- package/template/docs/process/lifecycle-registry-baseline.json +6 -1
- package/template/docs/process/lifecycle-registry.yaml +23 -0
- 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/template-verification-profiles.yaml +23 -0
- package/template/docs/templates/implementation-repo-registry-template.md +8 -0
- package/template/docs/templates/review-report-template.md +7 -3
- 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/query-lifecycle-context +25 -0
- 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/skills-lock.json +9 -9
- 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/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml
CHANGED
|
@@ -294,6 +294,17 @@ work_unit_routes:
|
|
|
294
294
|
human_gate: openapi-freeze_if_api_impact
|
|
295
295
|
applies_when: technical_or_contract_impact
|
|
296
296
|
not_applicable_reason: no_technical_or_contract_impact
|
|
297
|
+
work-unit.implementation-repository-preparation:
|
|
298
|
+
native: {source: yss-product-lifecycle, skill: yss-product-lifecycle, invocation_mode: model-invoked}
|
|
299
|
+
primary_skill: implementation-repo-onboarding
|
|
300
|
+
supporting_skills: [yss-implementation-contract-compiler, yss-ddd-scaffold-generator, yss-layered-mvc-scaffold-generator, yss-frontend-scaffold-generator]
|
|
301
|
+
skills: [implementation-repo-onboarding, yss-implementation-contract-compiler, yss-ddd-scaffold-generator, yss-layered-mvc-scaffold-generator, yss-frontend-scaffold-generator]
|
|
302
|
+
applies_when: before_ticket_formalization
|
|
303
|
+
not_applicable_reason: no_frontend_or_backend_delivery_impact
|
|
304
|
+
decision_boundary: scaffold-choice
|
|
305
|
+
completion_states: [existing-and-onboarded, initialized-and-verified, not-applicable]
|
|
306
|
+
aggregate_gate: gate.implementation-repositories-ready
|
|
307
|
+
must_complete_before: work-unit.ticket-decomposition
|
|
297
308
|
work-unit.ticket-decomposition:
|
|
298
309
|
native: {source: yss-product-lifecycle, skill: yss-product-lifecycle, invocation_mode: model-invoked}
|
|
299
310
|
primary_skill: yss-product-lifecycle
|
|
@@ -342,8 +353,8 @@ work_unit_routes:
|
|
|
342
353
|
work-unit.code-review:
|
|
343
354
|
native: {source: yss-product-lifecycle, skill: code-review, invocation_mode: model-invoked}
|
|
344
355
|
primary_skill: code-review
|
|
345
|
-
supporting_skills: [alibaba-java-code-style, yss-ui, yss-design-system, yss-ui-business-page-generation, yss-domain, yss-application, yss-repository, yss-web-controller, yss-dto, mapstruct, lombok]
|
|
346
|
-
skills: [code-review, alibaba-java-code-style, yss-ui, yss-design-system, yss-ui-business-page-generation, yss-domain, yss-application, yss-repository, yss-web-controller, yss-dto, mapstruct, lombok]
|
|
356
|
+
supporting_skills: [alibaba-java-code-style, yss-ui, yss-design-system, yss-ui-business-page-generation, yss-domain, yss-application, yss-repository, yss-mybatis, yss-web-controller, yss-dto, mapstruct, lombok]
|
|
357
|
+
skills: [code-review, alibaba-java-code-style, yss-ui, yss-design-system, yss-ui-business-page-generation, yss-domain, yss-application, yss-repository, yss-mybatis, yss-web-controller, yss-dto, mapstruct, lombok]
|
|
347
358
|
review_standards_route:
|
|
348
359
|
unique_default_skill: code-review
|
|
349
360
|
second_generic_review_skill: forbidden
|
|
@@ -354,8 +365,13 @@ work_unit_routes:
|
|
|
354
365
|
run_if_present: true
|
|
355
366
|
missing_tooling: not-applicable-with-reason
|
|
356
367
|
checkable_rule_without_machine: not-a-pass
|
|
368
|
+
project_scope:
|
|
369
|
+
sources: [candidate-project-root, implementation-repository-registry, slice-project-roots, allowed-write-paths]
|
|
370
|
+
include: [project-itself, registered-backend-development-projects]
|
|
371
|
+
exclude: [frontend-projects, unrelated-submodules, vendor, unregistered-directories]
|
|
372
|
+
fixed_apps_backend_assumption: forbidden
|
|
357
373
|
conditional_skills:
|
|
358
|
-
backend_impact: [alibaba-java-code-style, yss-domain, yss-application, yss-repository, yss-web-controller, yss-dto, mapstruct, lombok]
|
|
374
|
+
backend_impact: [alibaba-java-code-style, yss-domain, yss-application, yss-repository, yss-mybatis, yss-web-controller, yss-dto, mapstruct, lombok]
|
|
359
375
|
ui_impact: [yss-ui, yss-design-system, yss-ui-business-page-generation]
|
|
360
376
|
not_applicable_reasons:
|
|
361
377
|
backend_impact: no_backend_impact
|
|
@@ -399,7 +415,7 @@ compatibility_flow_preconditions:
|
|
|
399
415
|
evidence: [user_problem, mvp_and_non_goals, success_criteria, test_seam, terminology_review]
|
|
400
416
|
output_role: ready-for-human
|
|
401
417
|
to-tickets:
|
|
402
|
-
required: [openapi_freeze_or_no_api_impact, required_gates_satisfied, vertical_slice_scope, blocking_edges]
|
|
418
|
+
required: [openapi_freeze_or_no_api_impact, required_gates_satisfied, implementation_repositories_ready, vertical_slice_scope, blocking_edges]
|
|
403
419
|
output: vertical-slice-tickets
|
|
404
420
|
output_role: ready-for-human
|
|
405
421
|
implement:
|
|
@@ -407,6 +423,7 @@ compatibility_flow_preconditions:
|
|
|
407
423
|
applies_to_single_session: true
|
|
408
424
|
|
|
409
425
|
ticket_formalization:
|
|
426
|
+
repository_predecessor: work-unit.implementation-repository-preparation
|
|
410
427
|
implementation_predecessor: work-unit.ticket-decomposition
|
|
411
428
|
result_ref_required: true
|
|
412
429
|
result_must_be: completed
|
|
@@ -424,7 +441,37 @@ ticket_formalization:
|
|
|
424
441
|
current_version: true
|
|
425
442
|
validator:
|
|
426
443
|
module: scripts/lib/lifecycle-transition.mjs
|
|
427
|
-
functions: [validateNextRoute, validateTicketFormalization, validateImplementationEntry]
|
|
444
|
+
functions: [validateNextRoute, validateImplementationRepositoriesReady, validateTicketFormalization, validateImplementationEntry]
|
|
445
|
+
|
|
446
|
+
implementation_repository_preparation:
|
|
447
|
+
stage: stage.system-data-engineering
|
|
448
|
+
work_unit: work-unit.implementation-repository-preparation
|
|
449
|
+
gate: gate.implementation-repositories-ready
|
|
450
|
+
applies_per_delivery_role: [backend, frontend]
|
|
451
|
+
affected_role_allowed_states: [existing-and-onboarded, initialized-and-verified]
|
|
452
|
+
unaffected_role_state: not-applicable
|
|
453
|
+
not_applicable_reason_required: true
|
|
454
|
+
existing_repository:
|
|
455
|
+
required: [repository_ref, project_root, repository_scope, onboarding_result]
|
|
456
|
+
onboarding_skill: implementation-repo-onboarding
|
|
457
|
+
architecture_migration: separate-initiative
|
|
458
|
+
new_repository:
|
|
459
|
+
default_scope: external-repository
|
|
460
|
+
allowed_scopes: [external-repository, harness-apps, git-submodule]
|
|
461
|
+
user_confirmation_required: [scope, project_root, init_git]
|
|
462
|
+
remote_repository_creation: explicit-authorization-only
|
|
463
|
+
approved_project_scaffold_contract_required: true
|
|
464
|
+
frontend_contract_minimum_schema_version: 4
|
|
465
|
+
backend_contract_compatibility_schema_versions: [3, 4]
|
|
466
|
+
target_policy: nonexistent-or-empty
|
|
467
|
+
force_overwrite: forbidden
|
|
468
|
+
completion_requires: [scaffold_manifest_ref, scaffold_verification]
|
|
469
|
+
aggregate_result:
|
|
470
|
+
required: [result, current_version, projects, evidence_refs]
|
|
471
|
+
result: completed
|
|
472
|
+
evidence_refs_readable: true
|
|
473
|
+
stale_action: return-to-work-unit.implementation-repository-preparation
|
|
474
|
+
blocking_signals: [implementation-repository-decision-required, implementation-repository-location-required, implementation-repository-onboarding-incomplete, scaffold-choice-required, scaffold-contract-unapproved, scaffold-generation-incomplete, scaffold-verification-failed, frontend-template-unavailable, implementation-repositories-stale]
|
|
428
475
|
|
|
429
476
|
transition_graph:
|
|
430
477
|
validator: scripts/lib/lifecycle-transition.mjs
|
|
@@ -437,14 +484,16 @@ transition_graph:
|
|
|
437
484
|
work-unit.intensity-aware-verification: [work-unit.intensity-aware-review]
|
|
438
485
|
work-unit.intensity-aware-review: [work-unit.release-and-rollback]
|
|
439
486
|
work-unit.release-and-rollback: []
|
|
440
|
-
work-unit.spec-synthesis: [work-unit.prototype-design, work-unit.technical-analysis, work-unit.
|
|
441
|
-
work-unit.prototype-design: [work-unit.technical-analysis, work-unit.
|
|
442
|
-
work-unit.technical-analysis: [work-unit.
|
|
487
|
+
work-unit.spec-synthesis: [work-unit.prototype-design, work-unit.technical-analysis, work-unit.implementation-repository-preparation]
|
|
488
|
+
work-unit.prototype-design: [work-unit.technical-analysis, work-unit.implementation-repository-preparation]
|
|
489
|
+
work-unit.technical-analysis: [work-unit.implementation-repository-preparation]
|
|
490
|
+
work-unit.implementation-repository-preparation: [work-unit.ticket-decomposition]
|
|
443
491
|
work-unit.ticket-decomposition: [work-unit.slice-implementation]
|
|
444
492
|
forbidden_shortcuts:
|
|
445
493
|
- {from: work-unit.spec-synthesis, to: work-unit.slice-implementation}
|
|
446
494
|
- {from: work-unit.prototype-design, to: work-unit.slice-implementation}
|
|
447
495
|
- {from: work-unit.technical-analysis, to: work-unit.slice-implementation}
|
|
496
|
+
- {from: work-unit.technical-analysis, to: work-unit.ticket-decomposition}
|
|
448
497
|
|
|
449
498
|
grill_exit:
|
|
450
499
|
required: [frontier_empty, facts_resolved_or_routed, decisions_confirmed, shared_understanding_confirmed, no_unresolved_runnable_blocker]
|
|
@@ -470,6 +519,10 @@ review_input:
|
|
|
470
519
|
second_generic_review_skill: forbidden
|
|
471
520
|
axes: [standards, spec, ui_fidelity_if_ui_impact]
|
|
472
521
|
standards_sources: [repo_coding_standards, slice_contract_required_skills, specialist_check_inputs, review_report_template]
|
|
522
|
+
scope_resolution:
|
|
523
|
+
sources: [candidate-project-root, implementation-repository-registry, slice-project-roots, allowed-write-paths]
|
|
524
|
+
backend_includes: [project-itself, registered-backend-development-projects]
|
|
525
|
+
excludes: [frontend-projects, unrelated-submodules, vendor, unregistered-directories]
|
|
473
526
|
completed_requires_specialist_coverage: true
|
|
474
527
|
finding_disposition_required: true
|
|
475
528
|
completed_requires_no_open_mandatory_violations: true
|
|
@@ -618,7 +671,11 @@ backend_scaffold:
|
|
|
618
671
|
layered-mvc: { recipe: backend.mvc-scaffold, generator_skill: yss-layered-mvc-scaffold-generator, baseline_skills: [] }
|
|
619
672
|
tdd_mode: controlled-generation
|
|
620
673
|
contract_schema:
|
|
621
|
-
schema_version:
|
|
674
|
+
schema_version: 4
|
|
675
|
+
current_schema_version: 4
|
|
676
|
+
schema_ref: docs/process/schemas/project-scaffold-contract.schema.json
|
|
677
|
+
compatible_backend_versions: [3, 4]
|
|
678
|
+
frontend_minimum_version: 4
|
|
622
679
|
identity: service-engineering-baseline
|
|
623
680
|
required: [contract_id, contract_version, scaffold_request_id, status, compiler_draft_ref, lifecycle_approval_ref, persisted_ref, current_version, implementation_repository, backend_repository, scaffold_status, project_name, target_output_dir, base_package, architecture_family, generator_skill, decision_ref, decision_id, decision_digest, maven_coordinates, profiles, module_profile, allowed_write_paths, expected_evidence_files, verification_commands, approval, work_unit, generation_policy]
|
|
624
681
|
status_by_owner:
|
|
@@ -796,7 +853,7 @@ quality_baseline_reuse:
|
|
|
796
853
|
redefinition: forbidden
|
|
797
854
|
|
|
798
855
|
ready_for_agent:
|
|
799
|
-
required: [gates_satisfied, no_stale_artifacts, blockers_closed, implementation_context_ready, context_plan, quality_baseline_ref, implementation_repo, implementation_branch, ci, verification_commands, rollback_point, predecessor_work_unit, ticket_decomposition_result_ref, ticket_decomposition_result_status, vertical_slice_ticket_ref, vertical_slice_ticket_role, vertical_slice_ticket_kind, slice_contract_approved, slice_contract_persisted, slice_contract_current_version, build_architecture_checklist, backend_slice_contract_if_applicable, backend_scaffold_policy_satisfied, frontend_implementation_plan_if_ui_impact]
|
|
856
|
+
required: [gates_satisfied, no_stale_artifacts, blockers_closed, implementation_context_ready, context_plan, quality_baseline_ref, implementation_repositories_ready, implementation_repository_preparation_ref, implementation_repo, implementation_branch, ci, verification_commands, rollback_point, predecessor_work_unit, ticket_decomposition_result_ref, ticket_decomposition_result_status, vertical_slice_ticket_ref, vertical_slice_ticket_role, vertical_slice_ticket_kind, slice_contract_approved, slice_contract_persisted, slice_contract_current_version, build_architecture_checklist, backend_slice_contract_if_applicable, backend_scaffold_policy_satisfied, frontend_implementation_plan_if_ui_impact]
|
|
800
857
|
ticket_formalization_validator: scripts/lib/lifecycle-transition.mjs
|
|
801
858
|
requires_vertical_slice_ticket: true
|
|
802
859
|
parent_ticket_as_implementation_ref: forbidden
|
|
@@ -27,6 +27,10 @@ Matt phase boundary 是工作阶段之间的上下文决策,不是新的生命
|
|
|
27
27
|
|
|
28
28
|
## 原型到后端脚手架的接力
|
|
29
29
|
|
|
30
|
+
阶段 5 在技术分析后固定进入 `work-unit.implementation-repository-preparation`。编排器按 backend / frontend 影响逐项目展示已有或新建工程、Agent 推荐、仓库 scope、目标路径、Git 初始化、验证命令和风险,取得真实用户确认后再执行。已有工程调用 `implementation-repo-onboarding`;新后端按已确认架构调用对应生成器;新前端调用 `yss-frontend-scaffold-generator`。默认 `external-repository`,`harness-apps` / `git-submodule`、`git init` 和远端仓库创建均须显式选择或授权。
|
|
31
|
+
|
|
32
|
+
所有命中项目必须达到 `existing-and-onboarded` 或 `initialized-and-verified`,未命中的交付面必须有带原因的 `not-applicable`。聚合结果、Manifest、验证和 onboarding 证据必须可读且当前;否则 `gate.implementation-repositories-ready` 阻断 Ticket 正式化。旧实例恢复时保留已有 Ticket,但将相关 Ticket / Slice Contract 标为 `blocked` / `stale` 并返回本工作单元。
|
|
33
|
+
|
|
30
34
|
`prototype_confirmation` 通过后,先判断实现仓库登记中的 backend `scaffold_status`。当状态为 `required` 时,在工程基线中先完成脚手架架构选择:Agent 按领域复杂度给出 `domain-driven` / `layered-mvc` 推荐和依据,本体选择作为子项目预填默认值,用户通过批量表确认全部项目或逐项覆盖。选择写入 `scaffold-architecture-decisions.yaml`;处于 `undecided`、`recommended`、`awaiting-user-decision` 或 `stale` 时必须阻断,不得默认 DDD,也不得在生成器内交互。
|
|
31
35
|
|
|
32
36
|
选择达到 `lifecycle-approved` 且 digest 当前后,由 `yss-implementation-contract-compiler` 编译脚手架 schema v3 `controlled-generation` 工作单元合同,生命周期批准并持久化后才能运行对应生成器。顺序为:工程基线与架构推荐 → 用户确认与选择持久化 → 实现合同编译器脚手架合同 draft → 生命周期批准/持久化 → `domain-driven` 使用 `yss-ddd-scaffold-generator` 或 `layered-mvc` 使用 `yss-layered-mvc-scaffold-generator` → 对应基线/Manifest v3 校验 → 实现合同编译器业务合同重编译。`existing` / `initialized` 不重复生成;架构转换必须单独立项。
|
|
@@ -58,7 +62,7 @@ tracker 选择和冲突按 `docs/agents/issue-tracker.md` 裁决:已持久化
|
|
|
58
62
|
- `work-unit.discovery-requirements` 实际调用 `grilling` 和 `domain-modeling`;`work-unit.discovery-opportunity` 按事实类型路由 `competitive-intelligence` 或 `yss-research`。`yss-research:quick` 只用于探索;外部证据进入领域战略、阶段决策或其他生命周期批准输入前必须升级为 `evidence-audited`。生命周期原生工作单元默认负责 Spec、Ticket 和实现资产;`to-spec`、`to-tickets`、`implement` 仅保留为显式兼容入口,结果必须回交生命周期验收。
|
|
59
63
|
- 原生 `work-unit.ticket-decomposition` 只能在 OpenAPI Freeze 或无 API 影响记录后创建垂直切片,初始 Ticket 状态统一为 `ready-for-human`;生命周期复算完整公式后才能提升 `ready-for-agent`。该工作单元必须返回 `ticket_decomposition_result_ref` 和垂直切片引用,并作为实现的必经前置证据。
|
|
60
64
|
- 原生 `work-unit.slice-implementation` 必须在生命周期批准并持久化 Slice Implementation Contract 和 Build Architecture Checklist 后执行;用户显式 `implement` 仍走兼容入口,不得绕过生命周期。
|
|
61
|
-
- `Workflow Execution Result.next_route` 必须通过生命周期转换校验;Spec、原型和技术分析不得直接跳转到 `work-unit.
|
|
65
|
+
- `Workflow Execution Result.next_route` 必须通过生命周期转换校验;Spec、原型和技术分析不得直接跳转到 Ticket 正式化或实现,必须先完成 `work-unit.implementation-repository-preparation`,再进入 `work-unit.ticket-decomposition`。
|
|
62
66
|
- `implement` 遇到 backend `scaffold_status=required` 时,还必须满足原型确认后的脚手架策略:脚手架 Execution Result、`yss-backend-scaffold-parent` 基线、Wrapper 验证和 实现合同编译器 合同重编译均已回写;否则停在工程基线,不得写业务代码。
|
|
63
67
|
- `Workflow Execution Result` 出现 `drift`、`new_impacts`、`stale_candidates`、`violation`、`missing_evidence`、空 `evidence_refs` 或缺少必需字段时暂停当前工作单元;旧结果只能先经只读兼容 adapter 归一化。
|
|
64
68
|
|
|
@@ -41,6 +41,8 @@ required gates ∈ {approved, not-applicable}
|
|
|
41
41
|
AND 关键决定及当前切片实施范围已有可追溯、当前且未撤回的真实用户批准
|
|
42
42
|
AND related artifacts 不含 stale(若命中技术设计影响,`artifact.technical-design` 必须已批准且版本当前、架构一致;旧 DDD 合同仅按显式兼容入口消费)
|
|
43
43
|
AND blocking edges 全部关闭
|
|
44
|
+
AND `gate.implementation-repositories-ready` 已通过,所有命中的前后端项目均为 `existing-and-onboarded` 或 `initialized-and-verified`,未命中的交付面有带原因的 `not-applicable`
|
|
45
|
+
AND `work-unit.implementation-repository-preparation` 已返回当前且证据可读的 `completed` 结果
|
|
44
46
|
AND implementation repo/branch/CI/test/rollback 已明确
|
|
45
47
|
AND `work-unit.ticket-decomposition` 已返回 `completed`,且其 `ticket_decomposition_result_ref` 证据可读取
|
|
46
48
|
AND `vertical_slice_ticket_ref` 指向 `docs/.scratch/<feature>/issues/` 下的垂直切片 Ticket
|
|
@@ -50,7 +52,8 @@ AND Slice Implementation Contract 已由生命周期编排器批准并持久化
|
|
|
50
52
|
AND Slice Implementation Contract 的 `ticket_ref` 与 `vertical_slice_ticket_ref` 完全一致
|
|
51
53
|
AND 当前工作单元消费的 contract_id/version 与最新批准版本一致
|
|
52
54
|
AND Backend Slice Implementation Contract(后端适用)和 Build Architecture Checklist 已完成
|
|
53
|
-
AND backend 影响且 scaffold_status=required 时,脚手架架构选择已由用户确认并达到 lifecycle-approved
|
|
55
|
+
AND backend 影响且 scaffold_status=required 时,脚手架架构选择已由用户确认并达到 lifecycle-approved、兼容 schema v3 或统一 schema v4 合同与 Manifest 当前、对应 DDD / Layered MVC 基线、Wrapper 验证和 实现合同编译器重编译均已完成
|
|
56
|
+
AND frontend 影响且无已有工程时,统一 schema v4 Project Scaffold Contract 已批准、持久化且当前,模板 commit 已锁定,`pnpm install --frozen-lockfile` 与工程基线要求的 lint/type-check/build 已实际通过
|
|
54
57
|
AND 所有后续生成代码均绑定主 YSS skill、依赖闭包、允许写路径、预期证据和 YSS Skill Execution Result
|
|
55
58
|
AND UI 影响切片的前端实现还原计划已通过 schema 校验、`template=false`、`status=approved`,且基线引用可读取
|
|
56
59
|
```
|
|
@@ -61,7 +64,7 @@ AND UI 影响切片的前端实现还原计划已通过 schema 校验、`templat
|
|
|
61
64
|
|
|
62
65
|
任何 `project-instance` 工作单元进入下一步、任何阶段会签暂停或阶段完成 checkpoint,还必须引用当前工作单元的 `context_reconciliation`。其中 `status=reconciled`、`context_ref=CONTEXT.md`、`document_digest` 与 `referenced_terms_digest` 必须和根目录唯一 `CONTEXT.md` 一致;该证据不改变门禁数量。`template-source` 仅允许以带原因的 `not-applicable` 表示它只校验模板合同,不产生产品业务术语。
|
|
63
66
|
|
|
64
|
-
用户显式运行 `to-tickets` 后,垂直切片初始 Ticket 状态固定为 `ready-for-human`。原生路径执行 `work-unit.ticket-decomposition` 时同样必须产生等价的垂直切片和 `Workflow Execution Result` 证据。只有 `yss-product-lifecycle` 复算上述公式全部为真后,才能把它提升为 `ready-for-agent`;生命周期不会自动调用 `to-tickets
|
|
67
|
+
用户显式运行 `to-tickets` 后,垂直切片初始 Ticket 状态固定为 `ready-for-human`。原生路径执行 `work-unit.ticket-decomposition` 时同样必须产生等价的垂直切片和 `Workflow Execution Result` 证据。只有 `yss-product-lifecycle` 复算上述公式全部为真后,才能把它提升为 `ready-for-agent`;生命周期不会自动调用 `to-tickets`,但不得跳过实现仓库准备和 Ticket 正式化工作单元。旧实例恢复时若缺少当前工程准备结果,保留既有 Ticket,将 Ticket 与 Slice Contract 标为 `blocked` / `stale` 并回到阶段 5。其默认标签也不参与该裁决。
|
|
65
68
|
|
|
66
69
|
## Review 与 Git 授权状态
|
|
67
70
|
|
|
@@ -1,86 +1,44 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yss-repository
|
|
3
|
-
description:
|
|
3
|
+
description: 用于按批准的 YSS 架构与持久化合同实现或重构 PO、Repository、Convertor、Domain Gateway/Query Adapter;负责结构路由、分层边界和验证,不内置可照抄的业务代码模板。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# yss-repository
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
本 Skill 消费批准合同,将持久化责任落到选定架构 Profile。它不是完整脚手架,也不从 DDL、表名或示例反向创造领域/API 合同。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
## 架构分流
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
1. 读取当前 Slice Implementation Contract 的 `architecture_identity`、`persistence_profile`、实现仓登记、数据合同、`allowed_write_paths` 和预期证据。
|
|
13
|
+
2. 将架构身份与工程基线、Manifest 和 `docs/agents/yss-skill-registry.yaml` 核对;成熟度以注册表为准,不能把 `draft` 称为已支持。
|
|
14
|
+
3. 根据 `architecture_profile` **且只**加载一个文件:
|
|
15
|
+
- [target-domain-model](references/profiles/target-domain-model.md)
|
|
16
|
+
- [layered-mvc-service](references/profiles/layered-mvc-service.md)
|
|
17
|
+
- [mvc-data-analysis-v1](references/profiles/mvc-data-analysis-v1.md)
|
|
18
|
+
4. Profile 缺失、身份冲突、Manifest 漂移或数据输入不完整时返回 `blocked` / `drift` / `new_impacts`,不得选择“最像”的分支继续。
|
|
13
19
|
|
|
14
|
-
|
|
20
|
+
## 共用规则
|
|
15
21
|
|
|
16
|
-
|
|
22
|
+
- 只实现批准合同已有的结构与 seam,不创建或改写 Domain Gateway、Application Query Port、service/core 接口或 Web/API DTO。
|
|
23
|
+
- 持久化 Profile 命中 MyBatis 时加载 `yss-mybatis`,以当前组件能力索引核验基类、分页、批量、扫描、XML 和数据源行为;本 Skill 不复制这些规则。
|
|
24
|
+
- POJO、转换和 Java 规范分别消费 Registry 编译出的 `lombok`、`mapstruct`、`alibaba-java-code-style`;不在此重复其注解和处理器规则。
|
|
25
|
+
- 数据合同必须显式覆盖主键、逻辑删除、审计字段、空值、枚举/值对象映射和敏感字段;动态排序、分组与过滤必须使用批准白名单和参数绑定。
|
|
26
|
+
- 事务归所选 Profile 的用例边界。Repository/Gateway Adapter 不临时新增业务事务,也不把数据库异常原文或凭据暴露给上层。
|
|
27
|
+
- 基础机械结构只有在合同标记 `controlled-generation`、metadata 完整且目标文件不存在时才可受控生成;查询语义、分页、并发、事务和迁移行为使用 `behavior-tdd`。
|
|
28
|
+
- 发现 SQL、DDL、索引、数据模型或 API schema 新影响时立即暂停并返回 `new_impacts`,不能以 TODO 代替合同重编译。
|
|
17
29
|
|
|
18
|
-
|
|
19
|
-
- 用户已有 Domain 模型,缺基础设施持久层落地。
|
|
20
|
-
- 用户要基于表结构、DDL、metadata 补齐持久层代码。
|
|
30
|
+
## 产物与证据
|
|
21
31
|
|
|
22
|
-
|
|
32
|
+
实际产物由所选 Profile 和合同共同决定,不以固定示例类名或固定包路径推断。完成前至少证明:
|
|
23
33
|
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
34
|
+
- 每个实现类对应已批准的端口或用例调用方;
|
|
35
|
+
- Mapper/Repository、XML、扫描和转换实现可编译且被运行时发现;
|
|
36
|
+
- 保存/重载、查询、分页、空结果、排序白名单和回滚等命中行为有测试;
|
|
37
|
+
- 所有写入位于 `allowed_write_paths`;
|
|
38
|
+
- 使用各后端项目根的 `./mvnw ...` 记录实际命令、退出码和时间。
|
|
27
39
|
|
|
28
|
-
|
|
40
|
+
按 [YSS Skill Execution Result v2](../yss-implementation-contract-compiler/references/yss-skill-execution-result.md) 返回实际文件、测试、约束结果、`seam_deferred`、`deviations`、`new_impacts`、`drift` 和 `violation`。
|
|
29
41
|
|
|
30
|
-
|
|
31
|
-
2. 确认持久化 Profile 为 `mybatis-plus` 与 `PO <-> Domain Model`;`Entity + BaseRepository + DTO/VO GatewayImpl` 等旧架构对新脚手架为 `unsupported`。
|
|
32
|
-
3. 如果 metadata 不完整,先补齐 metadata、数据库表结构或 DDL 输入。
|
|
33
|
-
4. 加载并遵守固定 Profile 的 `yss-mybatis`,不得在本 skill 内维护第二套 Mapper、分页或 SQL 安全规则。
|
|
34
|
-
5. 涉及 POJO 字段、getter/setter、constructor、builder 或日志时,必须加载并遵守 `lombok`。
|
|
35
|
-
6. 涉及持久化模型与 Domain/Application Result 转换时,必须加载并遵守 `mapstruct`;Infrastructure 不生成 Web VO/CMD 转换。
|
|
36
|
-
7. 生成代码时严格保持 Domain 与 Infrastructure 分层边界。
|
|
37
|
-
8. 默认先生成基础 CRUD 骨架,把复杂查询留给手工实现。
|
|
42
|
+
## Review 输入
|
|
38
43
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
- `infrastructure/persistence/po/*PO.java`
|
|
42
|
-
- `infrastructure/persistence/repository/*Repository.java`
|
|
43
|
-
- `infrastructure/persistence/convertor/*Convertor.java`
|
|
44
|
-
- `infrastructure/persistence/gateway/*GatewayImpl.java`
|
|
45
|
-
- `infrastructure/query/adapter/*QueryAdapter.java`(实现 Application Query Port)
|
|
46
|
-
- `infrastructure/query/convertor/*QueryConvertor.java`
|
|
47
|
-
|
|
48
|
-
## 约束
|
|
49
|
-
|
|
50
|
-
- Domain 不依赖 Infrastructure。
|
|
51
|
-
- Gateway 定义在 Domain,实现放在 Infrastructure。
|
|
52
|
-
- `yss-repository` 不创建或改写 Domain Gateway interface;缺少或需要改变 Gateway 时返回 `new_impacts`,由 实现合同编译器 回到 `yss-domain` / `yss-tactical-design`。
|
|
53
|
-
- Domain Gateway 只交换 Domain Model、领域值和标识;分页、列表和读模型走 Application Query Port,禁止返回 Web VO 或把 `PageQuery` 带入 Domain。
|
|
54
|
-
- PO / Domain Model 等 POJO 样板代码优先使用 Lombok;不要成片手写 getter/setter、constructor、builder 或 logger。
|
|
55
|
-
- Convertor 必须优先使用 `@Mapper(componentModel = "spring")` 和构造器注入;禁止静态 `INSTANCE`、`BeanUtils.copyProperties`、反射式通用拷贝和重复手写字段赋值,除非实现合同记录受控例外、测试和 review 证据。
|
|
56
|
-
- MapStruct 与 Lombok 同时使用时,必须确认注解处理器顺序和 `lombok-mapstruct-binding` 配置;构建命令使用项目根目录 `./mvnw ...`。
|
|
57
|
-
- 逻辑删除、审计字段、主键策略要显式处理,不要隐式略过。
|
|
58
|
-
- 事务放在批准的 Application 用例边界;检测到旧 GatewayImpl 事务布局时返回 `unsupported`,不在 scaffold 链路内迁移。
|
|
59
|
-
|
|
60
|
-
## 质量门禁
|
|
61
|
-
|
|
62
|
-
- 生成代码必须可编译。
|
|
63
|
-
- 命名、包路径、注解要与工程现有规范一致。
|
|
64
|
-
- Convertor 必须有 MapStruct 接口 / 抽象类、生成实现可编译,必要时补 mapper 单测或覆盖核心字段转换的行为测试。
|
|
65
|
-
- POJO 使用 Lombok 时不得引入 `@Data` 造成实体 equals / toString 风险;有关系字段、敏感字段或懒加载字段时按 `lombok` skill 排除。
|
|
66
|
-
- 遇到无法自动判断的字段、映射或查询规则时返回 `new_impacts` / `drift` 并暂停,不要把 TODO 当作已完成实现。
|
|
67
|
-
|
|
68
|
-
## 协同顺序
|
|
69
|
-
|
|
70
|
-
- metadata / DDL 输入准备:确认输入完整
|
|
71
|
-
- 领域建模:`yss-domain`
|
|
72
|
-
- 用例编排:`yss-application`
|
|
73
|
-
- POJO 样板代码:`lombok`
|
|
74
|
-
- 对象转换:`mapstruct`
|
|
75
|
-
- Web 补齐:`yss-web-controller`
|
|
76
|
-
|
|
77
|
-
## 分层开发规范
|
|
78
|
-
|
|
79
|
-
实现 PO / Repository / GatewayImpl 前,必须加载 `references/infrastructure-layer-guide.md`:其中定义持久化对象、Repository、Convertor 与 Gateway 实现的结构与示例。
|
|
80
|
-
|
|
81
|
-
## 阶段 7 合同
|
|
82
|
-
|
|
83
|
-
- 前置条件:数据架构、领域元数据、实现仓库和批准后的 `Slice Implementation Contract` 均可用;否则不执行本 skill,由 实现合同编译器 返回 `blocked`。
|
|
84
|
-
- PO/Repository/Convertor 骨架可使用 `controlled-generation`;复杂过滤、分页语义、并发、事务和迁移行为必须拆为 `behavior-tdd`。
|
|
85
|
-
- 写入仅限合同 `allowed_write_paths`,证据必须包含实际 PO、Repository、Convertor、GatewayImpl、测试和 `./mvnw ...` 结果。
|
|
86
|
-
- 按统一 `YSS Skill Execution Result` 返回 `seam_deferred/deviations/new_impacts`;发现数据模型、DDL、SQL、索引或 API schema 变化时暂停并重路由。
|
|
44
|
+
`code-review` 仅对本体项目及合同/实现仓登记的后端研发项目执行本 Skill。候选命中持久化结构或数据访问时,Standards 轴必须读取所选 Profile 并引用规则与代码证据;未命中时记录带原因的 `not-applicable`。Reviewer 只报告 finding,不写实现。
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
version: 1
|
|
2
2
|
interface:
|
|
3
3
|
display_name: "YSS Repository"
|
|
4
|
-
short_description: "
|
|
5
|
-
default_prompt: "Use $yss-repository to implement
|
|
4
|
+
short_description: "按架构 Profile 实现并验证 YSS 持久层结构"
|
|
5
|
+
default_prompt: "Use $yss-repository to route and implement persistence structures from an approved architecture profile and contract without inventing domain, service, or API contracts."
|
|
@@ -1,3 +1,21 @@
|
|
|
1
1
|
# layered-mvc-service
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
仅适用于注册表中 `architecture_family=layered-mvc`、用例层为 `service` 的当前合同。先读仓库 `docs/agents/backend-architecture-profiles.md`;Profile 的成熟度沿用注册表。
|
|
4
|
+
|
|
5
|
+
## 前置与所有权
|
|
6
|
+
|
|
7
|
+
- 已有批准的 service 用例接口、数据合同和查询/写入语义;不得从表结构反推 service 或 HTTP API。
|
|
8
|
+
- repository module 拥有 PO、Repository/Mapper、XML 和持久化 Convertor;不生成 DDD Domain Gateway、Application Query Port 或 Web DTO。
|
|
9
|
+
- repository 不反向依赖 service、server、client;事务、业务规则和幂等归 service 用例。
|
|
10
|
+
|
|
11
|
+
## 结构决策
|
|
12
|
+
|
|
13
|
+
- 包、module、Mapper 扫描和 XML 路径来自 `architecture_identity`、当前工程基线及合同,不使用 DDD Infrastructure 固定布局。
|
|
14
|
+
- MyBatis-Plus 基类、分页、批量和数据源能力由 `yss-mybatis` 当前能力矩阵决定。
|
|
15
|
+
- repository 输出 service 已批准的内部模型或结果,不泄漏 PO、原始 SQL、数据库异常原文或凭据。
|
|
16
|
+
|
|
17
|
+
## 必须验证
|
|
18
|
+
|
|
19
|
+
- service 是唯一业务事务边界,Controller 不直连 Repository。
|
|
20
|
+
- Repository/Mapper 覆盖查询、写入、分页、回滚、字段转换和批准数据库 fixture。
|
|
21
|
+
- H2 仅作为验证数据库;生产驱动和数据源必须由单独批准的存储工作单元接入。
|
|
@@ -1,3 +1,21 @@
|
|
|
1
1
|
# mvc-data-analysis-v1
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
仅适用于注册表中的数据分析 MVC Profile。先读仓库 `docs/agents/backend-architecture-profiles.md`;Profile 的成熟度沿用注册表。
|
|
4
|
+
|
|
5
|
+
## 前置与所有权
|
|
6
|
+
|
|
7
|
+
- 已有批准的数据合同、查询语义和 core 用例接口;不得从 DDL 或报表字段反推对外 API。
|
|
8
|
+
- repository module 拥有 PO、Repository/Mapper、XML 和持久化 Convertor;不生成 DDD Gateway,也不依赖 core、client、server。
|
|
9
|
+
- 事务、业务规则和查询编排归 core;repository 只实现批准的数据访问 seam。
|
|
10
|
+
|
|
11
|
+
## 数据分析约束
|
|
12
|
+
|
|
13
|
+
- 动态排序、分组、过滤、聚合字段和表来源必须来自批准白名单并使用参数绑定;客户端输入不得直接拼接 SQL 标识符或表达式。
|
|
14
|
+
- MyBatis-Plus 基类、分页、批量和数据源能力由 `yss-mybatis` 当前能力矩阵决定,不假设组件提供动态数据源路由。
|
|
15
|
+
- repository 不返回 HTTP DTO,不暴露原始 SQL、数据库错误原文或连接凭据。
|
|
16
|
+
|
|
17
|
+
## 必须验证
|
|
18
|
+
|
|
19
|
+
- 查询覆盖白名单边界、空值、空结果、分页 total、稳定排序和大数据量限制。
|
|
20
|
+
- 数据库 fixture 验证实际 Mapper/XML 与方言;H2 不能证明生产数据库的函数、排序或执行计划。
|
|
21
|
+
- core 是唯一业务事务边界,server 不直连 Repository。
|
|
@@ -1,3 +1,23 @@
|
|
|
1
1
|
# target-domain-model
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
仅适用于注册表中 `architecture_family=domain-driven` 的当前合同。Profile 的成熟度沿用注册表,不因加载本文件而升级。
|
|
4
|
+
|
|
5
|
+
## 前置与所有权
|
|
6
|
+
|
|
7
|
+
- 写模型必须已有批准的 Domain Gateway;读模型必须已有批准的 Application Query Port。缺失或需要改变签名时返回 `new_impacts`,由 `yss-domain` / `yss-application` 和实现合同编译器处理。
|
|
8
|
+
- Infrastructure 实现既有端口,拥有 PO、Repository/Mapper、XML、持久化 Convertor、GatewayImpl 和 QueryAdapter;不拥有领域规则、HTTP DTO 或业务事务。
|
|
9
|
+
- Domain Gateway 只交换 Aggregate、Domain Model、领域值和标识;分页、列表和读模型走 Application Query Port,`PageQuery` 不进入 Domain。
|
|
10
|
+
|
|
11
|
+
## 结构决策
|
|
12
|
+
|
|
13
|
+
- 包与 module 必须来自 `architecture_identity` 和现有工程基线;新脚手架的持久化责任位于 Infrastructure,既有工程不得因本 Skill 自动迁移目录。
|
|
14
|
+
- 写模型转换覆盖 `PO <-> Domain Model`;读模型转换只到 Application Result。Infrastructure 不生成或返回 Web VO/CMD。
|
|
15
|
+
- Repository 基类、Mapper/XML、分页与批量能力由 `yss-mybatis` 当前能力矩阵决定,不把组件版本方法名写成领域规则。
|
|
16
|
+
- 事务归 Application 用例。GatewayImpl/QueryAdapter 只执行端口语义,不新增业务编排。
|
|
17
|
+
|
|
18
|
+
## 必须验证
|
|
19
|
+
|
|
20
|
+
- Domain 不反向依赖 Infrastructure、Mapper、PO 或组件类型。
|
|
21
|
+
- 经 Domain Gateway 保存后可重新加载语义等价的 Aggregate。
|
|
22
|
+
- Query Port 覆盖分页 total、空结果、排序/过滤白名单和字段转换。
|
|
23
|
+
- Mapper/Repository 使用批准数据库 fixture;H2 不能证明生产方言。
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { access, readFile, readdir } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import test from "node:test";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
|
|
7
|
+
const repositorySkillRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
8
|
+
const skillsRoot = path.resolve(repositorySkillRoot, "..");
|
|
9
|
+
const projectRoot = path.resolve(skillsRoot, "../..");
|
|
10
|
+
|
|
11
|
+
async function text(target) {
|
|
12
|
+
return readFile(target, "utf8");
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
test("repository router exposes exactly the registered profile entry points", async () => {
|
|
16
|
+
const profilesRoot = path.join(repositorySkillRoot, "references/profiles");
|
|
17
|
+
const profiles = (await readdir(profilesRoot)).filter((name) => name.endsWith(".md")).sort();
|
|
18
|
+
assert.deepEqual(profiles, ["layered-mvc-service.md", "mvc-data-analysis-v1.md", "target-domain-model.md"]);
|
|
19
|
+
|
|
20
|
+
const skill = await text(path.join(repositorySkillRoot, "SKILL.md"));
|
|
21
|
+
for (const profile of profiles) assert.match(skill, new RegExp(`references/profiles/${profile.replace(".md", "")}`));
|
|
22
|
+
assert.match(skill, /且只.*加载一个文件/);
|
|
23
|
+
assert.doesNotMatch(skill, /infrastructure-layer-guide/);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test("normative persistence skills do not contain business-specific templates or production source mirrors", async () => {
|
|
27
|
+
const normativeFiles = [
|
|
28
|
+
path.join(repositorySkillRoot, "SKILL.md"),
|
|
29
|
+
...["layered-mvc-service.md", "mvc-data-analysis-v1.md", "target-domain-model.md"]
|
|
30
|
+
.map((name) => path.join(repositorySkillRoot, "references/profiles", name)),
|
|
31
|
+
];
|
|
32
|
+
for (const target of normativeFiles) {
|
|
33
|
+
const contents = await text(target);
|
|
34
|
+
assert.doesNotMatch(contents, /QualityTemplate|id\.value\(\)|insertOrUpdate\(/);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const mybatisAssets = path.join(skillsRoot, "yss-mybatis/assets");
|
|
38
|
+
try {
|
|
39
|
+
const javaMirrors = (await readdir(mybatisAssets)).filter((name) => name.endsWith(".java"));
|
|
40
|
+
assert.deepEqual(javaMirrors, []);
|
|
41
|
+
} catch (error) {
|
|
42
|
+
if (error.code !== "ENOENT") throw error;
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test("code review wires Repository and MyBatis with registered backend scope", async () => {
|
|
47
|
+
const standards = await text(path.join(skillsRoot, "code-review/references/yss-review-standards.md"));
|
|
48
|
+
const report = await text(path.join(projectRoot, "docs/templates/review-report-template.md"));
|
|
49
|
+
const lifecycle = await text(path.join(skillsRoot, "yss-product-lifecycle/references/orchestration-contract.yaml"));
|
|
50
|
+
|
|
51
|
+
for (const source of [standards, report, lifecycle]) {
|
|
52
|
+
assert.match(source, /yss-repository/);
|
|
53
|
+
assert.match(source, /yss-mybatis/);
|
|
54
|
+
}
|
|
55
|
+
assert.match(standards, /本体项目和已登记后端研发项目/);
|
|
56
|
+
assert.match(report, /<review-root\.\.\.>/);
|
|
57
|
+
assert.match(lifecycle, /registered-backend-development-projects/);
|
|
58
|
+
await access(path.join(skillsRoot, "yss-mybatis/references/source-index.md"));
|
|
59
|
+
});
|
|
@@ -28,10 +28,11 @@ node "$YSS_SKILLS_ROOT/yss-skill-source-index-refresh/scripts/refresh-yss-skill-
|
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
Backend-only refreshes may set `YSS_REFRESH_FRONTEND=false` to avoid unrelated frontend timestamp churn.
|
|
31
|
+
Use `YSS_REFRESH_BACKEND_SKILLS=yss-mybatis` (comma-separated) to refresh only selected backend indexes and avoid unrelated component churn.
|
|
31
32
|
|
|
32
33
|
The script updates `references/source-index.md` for backend component skills and `references/frontend-docs.md` for frontend YSS UI skills. Read `references/source-map-config.md` for the full skill-to-source mapping.
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
中文说明:脚本不会复制大段源码;通用组件生成可追踪的入口索引,持久化组件额外生成公开 API、配置开关和能力边界矩阵,方便 Agent 按需读取真实源码。
|
|
35
36
|
|
|
36
37
|
If `YSS_SOURCE_ROOT` is omitted, the script tries to find a repository containing `yss-microservice-components` from the current workspace and common local project folders. If it cannot find one, set `YSS_SOURCE_ROOT` explicitly.
|
|
37
38
|
|
|
@@ -39,18 +40,20 @@ If `YSS_SOURCE_ROOT` is omitted, the script tries to find a repository containin
|
|
|
39
40
|
|
|
40
41
|
Generated source indexes should contain:
|
|
41
42
|
|
|
42
|
-
-
|
|
43
|
-
-
|
|
43
|
+
- generated timestamp and trace-only source Git commit
|
|
44
|
+
- component-relative tree hashes and component-scoped worktree state
|
|
44
45
|
- component directories and documentation files
|
|
45
46
|
- Maven modules
|
|
46
|
-
-
|
|
47
|
+
- source file hashes and relocatable paths
|
|
48
|
+
- for capability-sensitive components, concise public signatures, configuration keys/defaults, conditional activation and capability boundaries extracted from source
|
|
49
|
+
- for other components, key Java classes matched by names such as annotations, auto configurations, properties, aspects, interceptors, handlers, repositories, DTOs, and result objects
|
|
47
50
|
- recommended next reads for Agent when performing implementation or troubleshooting
|
|
48
51
|
|
|
49
52
|
Do not paste full component source into `SKILL.md`. Keep `SKILL.md` short and let specialists read generated indexes or targeted assets only when needed.
|
|
50
53
|
|
|
51
54
|
## Freshness Gate
|
|
52
55
|
|
|
53
|
-
Before exact class/config/security guidance, compare
|
|
56
|
+
Before exact class/config/security guidance, compare each indexed `Component tree` with `git -C "$YSS_SOURCE_ROOT" rev-parse HEAD:<component-path>` and check `git status --porcelain -- <component-path>`. A tree mismatch or component-local dirty state means `stale`: refresh the index or return `blocked`; do not silently rely on the old snapshot. A repository commit difference alone is trace metadata and does not make the index stale when the component tree is unchanged. Historical path hints may still be used only to locate current source.
|
|
54
57
|
|
|
55
58
|
中文说明:`SKILL.md` 保持短小,细节放到 `references/`,这是为了降低每次触发技能时的上下文成本。
|
|
56
59
|
|
package/template/.agents/skills/yss-skill-source-index-refresh/references/source-location.md
CHANGED
|
@@ -6,7 +6,7 @@ YSS skill references may mention paths such as `yss-microservice-components/yss-
|
|
|
6
6
|
|
|
7
7
|
1. Check the current workspace first. If `.codegraph/` exists, use `codegraph explore "<class, module, or path hint>"` before text search.
|
|
8
8
|
2. If the component source is outside the workspace, use `YSS_SOURCE_ROOT` when it is set. It should point to the repository root that contains `yss-microservice-components`.
|
|
9
|
-
Compare `git -C "$YSS_SOURCE_ROOT" rev-parse HEAD`
|
|
9
|
+
Compare every indexed `Component tree` with `git -C "$YSS_SOURCE_ROOT" rev-parse HEAD:<component-path>` and check `git status --porcelain -- <component-path>`. A tree mismatch or component-local dirty state is `stale` and blocks exact implementation guidance until refresh. `Source commit` is trace metadata only; unrelated monorepo changes do not stale an unchanged component tree.
|
|
10
10
|
3. If `YSS_SOURCE_ROOT` is not set, search common local roots such as the current repository parents, `~/Projects`, `~/Documents`, and `~/Documents/yss-project`.
|
|
11
11
|
4. If the source still cannot be found, use the generated `references/source-index.md` as a stale-but-useful map of module names, package names, class names, and Maven artifacts. Do not assume listed files exist locally.
|
|
12
12
|
|
|
@@ -15,4 +15,5 @@ YSS skill references may mention paths such as `yss-microservice-components/yss-
|
|
|
15
15
|
- Say "source path hints" instead of "source root" unless you have verified the directory in the current environment.
|
|
16
16
|
- Keep generated indexes useful for search, but do not require agents to open those exact paths.
|
|
17
17
|
- Prefer symbols, package names, Maven artifact names, and annotations in instructions; they survive repository relocation better than absolute paths.
|
|
18
|
+
- Keep full production source out of skill `assets/`; generate concise signatures, activation conditions and file hashes instead.
|
|
18
19
|
- When refreshing indexes, export `YSS_SOURCE_ROOT=/absolute/path/to/yss-cloud-microservice` if auto-detection cannot find the component repository.
|