create-yss-spec 2.1.3 → 2.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +1 -1
- package/template/.agents/skills/code-review/SKILL.md +38 -10
- package/template/.agents/skills/high-fidelity-html-prototype/SKILL.md +16 -12
- package/template/.agents/skills/product-design-prototype/SKILL.md +6 -2
- package/template/.agents/skills/prototype-review/SKILL.md +6 -2
- package/template/.agents/skills/wireframe-prototype/SKILL.md +5 -1
- package/template/.agents/skills/yss-api-integration/SKILL.md +25 -7
- package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
- package/template/.agents/skills/yss-design-system/SKILL.md +6 -5
- package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
- package/template/.agents/skills/yss-openapi-draft-review/SKILL.md +13 -17
- package/template/.agents/skills/yss-openapi-governance/SKILL.md +89 -114
- package/template/.agents/skills/yss-openapi-governance/agents/openai.yaml +2 -2
- package/template/.agents/skills/yss-product-lifecycle/SKILL.md +13 -7
- package/template/.agents/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
- package/template/.agents/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +7 -2
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +8 -0
- package/template/.agents/skills/yss-prototype-stage/SKILL.md +40 -0
- package/template/.agents/skills/yss-router/SKILL.md +2 -2
- package/template/.agents/skills/yss-router/references/router-contract.yaml +9 -8
- package/template/.agents/skills/yss-router/references/slice-implementation-contract.md +4 -1
- package/template/.agents/skills/yss-router/references/yss-skill-execution-result.md +2 -1
- package/template/.claude/skills/code-review/SKILL.md +38 -10
- package/template/.claude/skills/high-fidelity-html-prototype/SKILL.md +16 -12
- package/template/.claude/skills/product-design-prototype/SKILL.md +6 -2
- package/template/.claude/skills/prototype-review/SKILL.md +6 -2
- package/template/.claude/skills/wireframe-prototype/SKILL.md +5 -1
- package/template/.claude/skills/yss-api-integration/SKILL.md +25 -7
- package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
- package/template/.claude/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
- package/template/.claude/skills/yss-design-system/SKILL.md +6 -5
- package/template/.claude/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
- package/template/.claude/skills/yss-openapi-draft-review/SKILL.md +13 -17
- package/template/.claude/skills/yss-openapi-governance/SKILL.md +89 -114
- package/template/.claude/skills/yss-openapi-governance/agents/openai.yaml +2 -2
- package/template/.claude/skills/yss-product-lifecycle/SKILL.md +13 -7
- package/template/.claude/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
- package/template/.claude/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +7 -2
- package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +8 -0
- package/template/.claude/skills/yss-prototype-stage/SKILL.md +40 -0
- package/template/.claude/skills/yss-router/SKILL.md +2 -2
- package/template/.claude/skills/yss-router/references/router-contract.yaml +9 -8
- package/template/.claude/skills/yss-router/references/slice-implementation-contract.md +4 -1
- package/template/.claude/skills/yss-router/references/yss-skill-execution-result.md +2 -1
- package/template/.codex/skills/code-review/SKILL.md +38 -10
- package/template/.codex/skills/high-fidelity-html-prototype/SKILL.md +16 -12
- package/template/.codex/skills/product-design-prototype/SKILL.md +6 -2
- package/template/.codex/skills/prototype-review/SKILL.md +6 -2
- package/template/.codex/skills/wireframe-prototype/SKILL.md +5 -1
- package/template/.codex/skills/yss-api-integration/SKILL.md +25 -7
- package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
- package/template/.codex/skills/yss-design-system/SKILL.md +6 -5
- package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
- package/template/.codex/skills/yss-openapi-draft-review/SKILL.md +13 -17
- package/template/.codex/skills/yss-openapi-governance/SKILL.md +89 -114
- package/template/.codex/skills/yss-openapi-governance/agents/openai.yaml +2 -2
- package/template/.codex/skills/yss-product-lifecycle/SKILL.md +13 -7
- package/template/.codex/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
- package/template/.codex/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +7 -2
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +8 -0
- package/template/.codex/skills/yss-prototype-stage/SKILL.md +40 -0
- package/template/.codex/skills/yss-router/SKILL.md +2 -2
- package/template/.codex/skills/yss-router/references/router-contract.yaml +9 -8
- package/template/.codex/skills/yss-router/references/slice-implementation-contract.md +4 -1
- package/template/.codex/skills/yss-router/references/yss-skill-execution-result.md +2 -1
- package/template/.hermes/skills/code-review/SKILL.md +38 -10
- package/template/.hermes/skills/high-fidelity-html-prototype/SKILL.md +16 -12
- package/template/.hermes/skills/product-design-prototype/SKILL.md +6 -2
- package/template/.hermes/skills/prototype-review/SKILL.md +6 -2
- package/template/.hermes/skills/wireframe-prototype/SKILL.md +5 -1
- package/template/.hermes/skills/yss-api-integration/SKILL.md +25 -7
- package/template/.hermes/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
- package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
- package/template/.hermes/skills/yss-design-system/SKILL.md +6 -5
- package/template/.hermes/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
- package/template/.hermes/skills/yss-openapi-draft-review/SKILL.md +13 -17
- package/template/.hermes/skills/yss-openapi-governance/SKILL.md +89 -114
- package/template/.hermes/skills/yss-openapi-governance/agents/openai.yaml +2 -2
- package/template/.hermes/skills/yss-product-lifecycle/SKILL.md +13 -7
- package/template/.hermes/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
- package/template/.hermes/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
- package/template/.hermes/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
- package/template/.hermes/skills/yss-product-lifecycle/references/orchestration.md +7 -2
- package/template/.hermes/skills/yss-product-lifecycle/references/state-model.md +8 -0
- package/template/.hermes/skills/yss-prototype-stage/SKILL.md +40 -0
- package/template/.hermes/skills/yss-router/SKILL.md +2 -2
- package/template/.hermes/skills/yss-router/references/router-contract.yaml +9 -8
- package/template/.hermes/skills/yss-router/references/slice-implementation-contract.md +4 -1
- package/template/.hermes/skills/yss-router/references/yss-skill-execution-result.md +2 -1
- package/template/.pi/skills/code-review/SKILL.md +38 -10
- package/template/.pi/skills/high-fidelity-html-prototype/SKILL.md +16 -12
- package/template/.pi/skills/product-design-prototype/SKILL.md +6 -2
- package/template/.pi/skills/prototype-review/SKILL.md +6 -2
- package/template/.pi/skills/wireframe-prototype/SKILL.md +5 -1
- package/template/.pi/skills/yss-api-integration/SKILL.md +25 -7
- package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
- package/template/.pi/skills/yss-design-system/SKILL.md +6 -5
- package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
- package/template/.pi/skills/yss-openapi-draft-review/SKILL.md +13 -17
- package/template/.pi/skills/yss-openapi-governance/SKILL.md +89 -114
- package/template/.pi/skills/yss-openapi-governance/agents/openai.yaml +2 -2
- package/template/.pi/skills/yss-product-lifecycle/SKILL.md +13 -7
- package/template/.pi/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
- package/template/.pi/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +7 -2
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +8 -0
- package/template/.pi/skills/yss-prototype-stage/SKILL.md +40 -0
- package/template/.pi/skills/yss-router/SKILL.md +2 -2
- package/template/.pi/skills/yss-router/references/router-contract.yaml +9 -8
- package/template/.pi/skills/yss-router/references/slice-implementation-contract.md +4 -1
- package/template/.pi/skills/yss-router/references/yss-skill-execution-result.md +2 -1
- package/template/.qoder/skills/code-review/SKILL.md +38 -10
- package/template/.qoder/skills/high-fidelity-html-prototype/SKILL.md +16 -12
- package/template/.qoder/skills/product-design-prototype/SKILL.md +6 -2
- package/template/.qoder/skills/prototype-review/SKILL.md +6 -2
- package/template/.qoder/skills/wireframe-prototype/SKILL.md +5 -1
- package/template/.qoder/skills/yss-api-integration/SKILL.md +25 -7
- package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
- package/template/.qoder/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
- package/template/.qoder/skills/yss-design-system/SKILL.md +6 -5
- package/template/.qoder/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
- package/template/.qoder/skills/yss-openapi-draft-review/SKILL.md +13 -17
- package/template/.qoder/skills/yss-openapi-governance/SKILL.md +89 -114
- package/template/.qoder/skills/yss-openapi-governance/agents/openai.yaml +2 -2
- package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +13 -7
- package/template/.qoder/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
- package/template/.qoder/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +7 -2
- package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +8 -0
- package/template/.qoder/skills/yss-prototype-stage/SKILL.md +40 -0
- package/template/.qoder/skills/yss-router/SKILL.md +2 -2
- package/template/.qoder/skills/yss-router/references/router-contract.yaml +9 -8
- package/template/.qoder/skills/yss-router/references/slice-implementation-contract.md +4 -1
- package/template/.qoder/skills/yss-router/references/yss-skill-execution-result.md +2 -1
- package/template/.trae/skills/code-review/SKILL.md +38 -10
- package/template/.trae/skills/high-fidelity-html-prototype/SKILL.md +16 -12
- package/template/.trae/skills/product-design-prototype/SKILL.md +6 -2
- package/template/.trae/skills/prototype-review/SKILL.md +6 -2
- package/template/.trae/skills/wireframe-prototype/SKILL.md +5 -1
- package/template/.trae/skills/yss-api-integration/SKILL.md +25 -7
- package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +3 -17
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -30
- package/template/.trae/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +1 -21
- package/template/.trae/skills/yss-design-system/SKILL.md +6 -5
- package/template/.trae/skills/yss-frontend-scaffold-generator/SKILL.md +12 -6
- package/template/.trae/skills/yss-openapi-draft-review/SKILL.md +13 -17
- package/template/.trae/skills/yss-openapi-governance/SKILL.md +89 -114
- package/template/.trae/skills/yss-openapi-governance/agents/openai.yaml +2 -2
- package/template/.trae/skills/yss-product-lifecycle/SKILL.md +13 -7
- package/template/.trae/skills/yss-product-lifecycle/references/artifact-dependencies.md +2 -2
- package/template/.trae/skills/yss-product-lifecycle/references/matt-yss-adapter.md +8 -2
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +77 -30
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +7 -2
- package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +8 -0
- package/template/.trae/skills/yss-prototype-stage/SKILL.md +40 -0
- package/template/.trae/skills/yss-router/SKILL.md +2 -2
- package/template/.trae/skills/yss-router/references/router-contract.yaml +9 -8
- package/template/.trae/skills/yss-router/references/slice-implementation-contract.md +4 -1
- package/template/.trae/skills/yss-router/references/yss-skill-execution-result.md +2 -1
- package/template/AGENTS.md +7 -5
- package/template/CONTEXT.md +15 -1
- package/template/README.md +2 -1
- package/template/__yss_dotfile__.gitignore +4 -0
- package/template/docs/adr/0001-product-design-prototype-entrypoint.md +1 -1
- package/template/docs/adr/0003-machine-readable-lifecycle-registry.md +5 -0
- package/template/docs/adr/0004-split-lifecycle-and-router-registry-domains.md +5 -0
- package/template/docs/adr/0005-cross-repository-ecosystem-release-manifest.md +5 -0
- package/template/docs/adr/0006-stable-lifecycle-ids-and-generated-structure.md +5 -0
- package/template/docs/adr/0007-separate-skill-routing-registry-from-integrity-lock.md +5 -0
- package/template/docs/agents/issue-tracker.md +1 -0
- package/template/docs/api/templates/openapi-draft-review-checklist.md +8 -6
- package/template/docs/api/templates/openapi-freeze-record-template.md +8 -2
- package/template/docs/api/templates/openapi-json-export-record-template.md +60 -0
- package/template/docs/architecture/templates/architecture-review-checklist.md +6 -19
- package/template/docs/architecture/templates/functional-architecture-template.md +4 -4
- package/template/docs/architecture/templates/system-overview-design-template.md +10 -5
- package/template/docs/architecture/templates/tech-design-template.md +4 -11
- package/template/docs/design/README.md +4 -2
- package/template/docs/design/design.md +4 -0
- package/template/docs/design/templates/interaction-spec-template.md +3 -3
- package/template/docs/design/templates/prototype-confirmation-template.md +9 -6
- package/template/docs/design/templates/prototype-evidence-template.yaml +46 -0
- package/template/docs/design/templates/prototype-review-checklist.md +4 -4
- package/template/docs/discovery/templates/discovery-template.md +0 -1
- package/template/docs/implementation/create-yss-spec-repository-mode-contract.md +2 -2
- package/template/docs/process/harness-process-tailoring.md +2 -0
- package/template/docs/process/harness-work-unit-map.md +14 -10
- package/template/docs/process/lifecycle-artifact-map.md +84 -39
- package/template/docs/process/lifecycle-registry-baseline.json +70 -0
- package/template/docs/process/lifecycle-registry.yaml +289 -0
- package/template/docs/process/schemas/lifecycle-registry.schema.json +35 -0
- package/template/docs/reviews/lifecycle-registry-phase0-1-red-green-2026-08-17.md +61 -0
- package/template/docs/reviews/matt-yss-p0-ticket-review-git-red-green-2026-08-17.md +91 -0
- package/template/docs/reviews/openapi-skill-primary-source-research-2026-08-16.md +76 -0
- package/template/docs/reviews/openapi-yaml-first-independent-review-2026-08-16.md +121 -0
- package/template/docs/reviews/openapi-yaml-first-pressure-scenarios-2026-08-16.md +191 -0
- package/template/docs/reviews/openapi-yaml-first-red-green-2026-08-16.md +76 -0
- package/template/docs/reviews/openapi-yaml-json-output-independent-review-2026-08-16.md +30 -0
- package/template/docs/reviews/openapi-yaml-json-output-scope-red-green-2026-08-16.md +154 -0
- package/template/docs/reviews/research-create-yss-spec-refresh-2026-08-16.md +164 -0
- package/template/docs/reviews/security-permission-lifecycle-simplification-red-green-2026-08-16.md +43 -0
- package/template/docs/reviews/template-release-review-remediation-red-green-2026-08-17.md +41 -0
- package/template/docs/templates/agent-brief-template.md +2 -2
- package/template/docs/templates/build-architecture-checklist-template.md +3 -4
- package/template/docs/templates/implementation-repo-registry-template.md +0 -2
- package/template/docs/templates/implementation-routing-template.md +6 -6
- package/template/docs/templates/openapi-spec-template.yaml +0 -6
- package/template/docs/templates/review-report-template.md +2 -1
- package/template/docs/templates/spec-delta-template.md +1 -1
- package/template/docs/templates/spec-template.md +0 -1
- package/template/docs/templates/vertical-slice-ticket-template.md +2 -2
- package/template/docs/user-guide//344/272/247/345/223/201/347/224/237/345/221/275/345/221/250/346/234/237/345/267/245/344/275/234/346/265/201.md +6 -6
- package/template/docs/user-guide//344/272/247/345/223/201/347/240/224/345/217/221/345/205/250/347/224/237/345/221/275/345/221/250/346/234/237/346/234/200/344/275/263/345/256/236/350/267/265.md +3 -3
- package/template/docs/user-guide//345/244/226/351/203/250/345/221/275/344/273/244/350/241/214/345/267/245/345/205/267/345/256/236/350/267/265/346/214/207/345/215/227.md +1 -1
- package/template/docs/user-guide//347/224/237/345/221/275/345/221/250/346/234/237/346/234/200/344/275/263/345/256/236/350/267/265.md +1 -1
- package/template/scripts/generate-lifecycle-artifacts +26 -0
- package/template/scripts/lifecycle-registry.rb +194 -0
- package/template/scripts/sync-skills +1 -0
- package/template/scripts/test-export-yss-skills.rb +10 -6
- package/template/scripts/test-lifecycle-registry.rb +74 -0
- package/template/scripts/update-skill-lock +1 -0
- package/template/scripts/verify-governance-release +39 -0
- package/template/scripts/verify-lifecycle-registry +67 -0
- package/template/scripts/verify-lifecycle-scenarios +193 -23
- package/template/scripts/verify-matt-yss-integration-scenarios +297 -1
- package/template/scripts/verify-openapi-json-handoff-scenarios +270 -0
- package/template/scripts/verify-openapi-yaml-first-scenarios +120 -0
- package/template/scripts/verify-prototype-backend-scaffold-scenarios +26 -4
- package/template/scripts/verify-template +27 -3
- package/template/scripts/verify-yss-router-scenarios +51 -14
- package/template/skills-lock.json +25 -25
- package/template/wiki/raw/skills-lock.json +0 -15
- package/template/wiki/wiki/OpenAPI/345/245/221/347/272/246.md +1 -1
- package/template/wiki/wiki/YSS/345/267/245/347/250/213/346/212/200/350/203/275/344/275/223/347/263/273.md +1 -1
- package/template/yss-public-skills.json +5 -5
- package/template.snapshot.json +4 -4
- package/template/.agents/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
- package/template/.agents/skills/yss-openapi/SKILL.md +0 -116
- package/template/.agents/skills/yss-openapi/agents/openai.yaml +0 -4
- package/template/.agents/skills/yss-openapi/img.png +0 -0
- package/template/.agents/skills/yss-openapi/img_1.png +0 -0
- package/template/.claude/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
- package/template/.claude/skills/yss-openapi/SKILL.md +0 -116
- package/template/.claude/skills/yss-openapi/agents/openai.yaml +0 -4
- package/template/.claude/skills/yss-openapi/img.png +0 -0
- package/template/.claude/skills/yss-openapi/img_1.png +0 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
- package/template/.codex/skills/yss-openapi/SKILL.md +0 -116
- package/template/.codex/skills/yss-openapi/agents/openai.yaml +0 -4
- package/template/.codex/skills/yss-openapi/img.png +0 -0
- package/template/.codex/skills/yss-openapi/img_1.png +0 -0
- package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
- package/template/.hermes/skills/yss-openapi/SKILL.md +0 -116
- package/template/.hermes/skills/yss-openapi/agents/openai.yaml +0 -4
- package/template/.hermes/skills/yss-openapi/img.png +0 -0
- package/template/.hermes/skills/yss-openapi/img_1.png +0 -0
- package/template/.pi/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
- package/template/.pi/skills/yss-openapi/SKILL.md +0 -116
- package/template/.pi/skills/yss-openapi/agents/openai.yaml +0 -4
- package/template/.pi/skills/yss-openapi/img.png +0 -0
- package/template/.pi/skills/yss-openapi/img_1.png +0 -0
- package/template/.qoder/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
- package/template/.qoder/skills/yss-openapi/SKILL.md +0 -116
- package/template/.qoder/skills/yss-openapi/agents/openai.yaml +0 -4
- package/template/.qoder/skills/yss-openapi/img.png +0 -0
- package/template/.qoder/skills/yss-openapi/img_1.png +0 -0
- package/template/.trae/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template +0 -17
- package/template/.trae/skills/yss-openapi/SKILL.md +0 -116
- package/template/.trae/skills/yss-openapi/agents/openai.yaml +0 -4
- package/template/.trae/skills/yss-openapi/img.png +0 -0
- package/template/.trae/skills/yss-openapi/img_1.png +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "json"
|
|
5
|
+
require "pathname"
|
|
6
|
+
require "yaml"
|
|
7
|
+
|
|
8
|
+
ROOT = Pathname.new(__dir__).join("..").realpath
|
|
9
|
+
PROJECTION_ROOTS = %w[
|
|
10
|
+
.agents/skills
|
|
11
|
+
.claude/skills
|
|
12
|
+
.codex/skills
|
|
13
|
+
.hermes/skills
|
|
14
|
+
.pi/skills
|
|
15
|
+
.qoder/skills
|
|
16
|
+
.trae/skills
|
|
17
|
+
].freeze
|
|
18
|
+
|
|
19
|
+
failures = []
|
|
20
|
+
|
|
21
|
+
template_path = ROOT.join("docs/templates/openapi-spec-template.yaml")
|
|
22
|
+
documents = YAML.load_stream(template_path.read)
|
|
23
|
+
failures << "OpenAPI YAML 模板必须是单一 YAML document" unless documents.length == 1
|
|
24
|
+
document = documents.first
|
|
25
|
+
unless document.is_a?(Hash) && document["openapi"] == "3.1.0"
|
|
26
|
+
failures << "OpenAPI YAML 模板必须是 OAS 3.1 文档"
|
|
27
|
+
end
|
|
28
|
+
%w[pipeline stage status owner].each do |field|
|
|
29
|
+
failures << "OpenAPI YAML 模板不得把生命周期元数据写入根字段: #{field}" if document.is_a?(Hash) && document.key?(field)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
PROJECTION_ROOTS.each do |root|
|
|
33
|
+
failures << "已移除的 yss-openapi 仍存在: #{root}/yss-openapi" if ROOT.join(root, "yss-openapi").exist?
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
lock = JSON.parse(ROOT.join("skills-lock.json").read)
|
|
37
|
+
if lock.dig("skills", "shared", "yss-openapi")
|
|
38
|
+
failures << "skills-lock.json 仍登记 yss-openapi"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
public_skills = JSON.parse(ROOT.join("yss-public-skills.json").read)
|
|
42
|
+
if public_skills.fetch("skills").include?("yss-openapi")
|
|
43
|
+
failures << "yss-public-skills.json 仍公开 yss-openapi"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
router = ROOT.join(".agents/skills/yss-router/references/router-contract.yaml").read
|
|
47
|
+
removed_skill_pattern = /(?<![a-z0-9-])yss-openapi(?![a-z0-9-])/
|
|
48
|
+
failures << "Router 仍路由到 yss-openapi" if router.match?(removed_skill_pattern)
|
|
49
|
+
failures << "Router 脚手架合同仍允许旧 OpenAPI 基线" if router.include?("smart_doc_baseline")
|
|
50
|
+
unless router.include?("api-integration:\n when_regeneration: [yss-openapi-governance]")
|
|
51
|
+
failures << "Router 未将客户端重新生成路由到 yss-openapi-governance"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
lifecycle_contract = ROOT.join(".agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml").read
|
|
55
|
+
failures << "Lifecycle 脚手架合同仍允许旧 OpenAPI 基线" if lifecycle_contract.include?("smart_doc_baseline")
|
|
56
|
+
lifecycle_skill = ROOT.join(".agents/skills/yss-product-lifecycle/SKILL.md").read
|
|
57
|
+
failures << "Lifecycle 说明仍保留旧 OpenAPI 基线" if lifecycle_skill.match?(/smart[ -]?doc/i)
|
|
58
|
+
implementation_routing_template = ROOT.join("docs/templates/implementation-routing-template.md").read
|
|
59
|
+
failures << "实现路由模板仍保留旧 OpenAPI 基线" if implementation_routing_template.match?(/smart[ -]?doc/i)
|
|
60
|
+
|
|
61
|
+
scaffold_pom = ROOT.join(".agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template").read
|
|
62
|
+
failures << "后端脚手架仍包含 smart-doc Maven 插件" if scaffold_pom.include?("smart-doc-maven-plugin")
|
|
63
|
+
failures << "后端脚手架仍保留 smart-doc 配置模板" if ROOT.join(".agents/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template").exist?
|
|
64
|
+
|
|
65
|
+
scaffold_generator = ROOT.join(".agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py").read
|
|
66
|
+
failures << "后端脚手架生成器仍生成 smart-doc 配置" if scaffold_generator.include?("smart-doc.json") || scaffold_generator.include?("smart-doc-maven-plugin")
|
|
67
|
+
|
|
68
|
+
governance = ROOT.join(".agents/skills/yss-openapi-governance/SKILL.md").read
|
|
69
|
+
%w[YAML-first 唯一权威 redocly\ bundle --ext\ json operationId].each do |marker|
|
|
70
|
+
failures << "OpenAPI Governance 缺少 YAML-first JSON 派生规则: #{marker}" unless governance.include?(marker)
|
|
71
|
+
end
|
|
72
|
+
failures << "OpenAPI Governance 仍依赖 smart-doc" if governance.include?("smart-doc")
|
|
73
|
+
%w[pnpm\ generate:api orval.config unsafeDisableValidation].each do |marker|
|
|
74
|
+
failures << "OpenAPI Governance 越界到前端代码生成或 Orval 配置: #{marker}" if governance.include?(marker)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
api_integration = ROOT.join(".agents/skills/yss-api-integration/SKILL.md").read
|
|
78
|
+
%w[冻结的\ OpenAPI\ YAML redocly\ bundle 原样物化 既有前端代码生成流程].each do |marker|
|
|
79
|
+
failures << "API Integration 缺少冻结 JSON 的下游交接规则: #{marker}" unless api_integration.include?(marker)
|
|
80
|
+
end
|
|
81
|
+
failures << "API Integration 仍引用 yss-openapi" if api_integration.match?(removed_skill_pattern)
|
|
82
|
+
%w[docs/.scratch/<feature>/api/<feature>.json SHA-256 受控交接].each do |marker|
|
|
83
|
+
failures << "API Integration 未绑定治理 JSON 派生物: #{marker}" unless api_integration.include?(marker)
|
|
84
|
+
end
|
|
85
|
+
%w[orval.config unsafeDisableValidation].each do |marker|
|
|
86
|
+
failures << "API Integration 越界要求修改或核验 Orval 配置: #{marker}" if api_integration.include?(marker)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
frontend_scaffold = ROOT.join(".agents/skills/yss-frontend-scaffold-generator/SKILL.md").read
|
|
90
|
+
failures << "前端脚手架仍接受任意 openapi_source" if frontend_scaffold.include?("openapi_source")
|
|
91
|
+
%w[OpenAPI\ Freeze\ 记录 OpenAPI\ JSON\ 派生记录 SHA-256 openapi/openapi.json 既有前端代码生成流程].each do |marker|
|
|
92
|
+
failures << "前端脚手架未绑定冻结 JSON 交接: #{marker}" unless frontend_scaffold.include?(marker)
|
|
93
|
+
end
|
|
94
|
+
%w[配置并读取实际\ `orval.config.*` unsafeDisableValidation].each do |marker|
|
|
95
|
+
failures << "前端脚手架越界修改或核验既有 Orval 配置: #{marker}" if frontend_scaffold.include?(marker)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
export_record = ROOT.join("docs/api/templates/openapi-json-export-record-template.md")
|
|
99
|
+
failures << "缺少 OpenAPI JSON 派生记录模板" unless export_record.file?
|
|
100
|
+
if export_record.file?
|
|
101
|
+
export_record_text = export_record.read
|
|
102
|
+
%w[Orval\ 输入路径 orval.config unsafeDisableValidation pnpm\ generate:api].each do |marker|
|
|
103
|
+
failures << "JSON 派生记录越界记录前端 Orval 配置或执行: #{marker}" if export_record_text.include?(marker)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
freeze_record = ROOT.join("docs/api/templates/openapi-freeze-record-template.md")
|
|
108
|
+
%w[orval.config unsafeDisableValidation].each do |marker|
|
|
109
|
+
failures << "OpenAPI Freeze 记录越界规定 Orval 配置: #{marker}" if freeze_record.read.include?(marker)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
draft_checklist = ROOT.join("docs/api/templates/openapi-draft-review-checklist.md")
|
|
113
|
+
failures << "Draft 评审清单越界要求 Orval 输入路径" if draft_checklist.read.include?("Orval 输入路径")
|
|
114
|
+
|
|
115
|
+
unless failures.empty?
|
|
116
|
+
warn failures.join("\n")
|
|
117
|
+
exit 1
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
puts "OpenAPI YAML-first 场景验证通过"
|
|
@@ -16,8 +16,16 @@ end
|
|
|
16
16
|
def route_after_prototype(facts)
|
|
17
17
|
return {"status" => "not-applicable", "steps" => []} unless facts.fetch(:backend_impact)
|
|
18
18
|
|
|
19
|
-
if facts.fetch(:ui_impact)
|
|
20
|
-
|
|
19
|
+
if facts.fetch(:ui_impact)
|
|
20
|
+
{
|
|
21
|
+
prototype_review: "prototype-review-required",
|
|
22
|
+
prototype_verification: "prototype-verification-required",
|
|
23
|
+
antd_cli_verification: "antd-cli-verification-required",
|
|
24
|
+
browser_verification: "browser-verification-required",
|
|
25
|
+
prototype_confirmation: "prototype-confirmation-required"
|
|
26
|
+
}.each do |fact, reason|
|
|
27
|
+
return {"status" => "blocked", "reason" => reason, "steps" => []} unless facts.fetch(fact, false)
|
|
28
|
+
end
|
|
21
29
|
end
|
|
22
30
|
|
|
23
31
|
steps = ["engineering-baseline"]
|
|
@@ -74,7 +82,9 @@ if backend_scaffold.is_a?(Hash)
|
|
|
74
82
|
%w[approval_ref approver persisted_ref current_version].each do |required|
|
|
75
83
|
failures << "脚手架合同审批记录缺少 #{required}" unless scaffold_schema.dig("approval", "required").to_a.include?(required)
|
|
76
84
|
end
|
|
77
|
-
|
|
85
|
+
%w[prototype_review prototype_verification antd_cli_verification browser_verification prototype_confirmation].each do |required|
|
|
86
|
+
failures << "backend_scaffold 必须声明 #{required} 后置顺序" unless backend_scaffold.dig("sequence", "after").include?(required)
|
|
87
|
+
end
|
|
78
88
|
failures << "backend_scaffold 必须先于业务代码生成" unless backend_scaffold.dig("sequence", "before").include?("business_code_generation")
|
|
79
89
|
failures << "required 脚手架必须使用 yss-ddd-scaffold-generator" unless backend_scaffold["generator_skill"] == "yss-ddd-scaffold-generator"
|
|
80
90
|
failures << "脚手架生成必须使用 controlled-generation" unless backend_scaffold["tdd_mode"] == "controlled-generation"
|
|
@@ -146,7 +156,9 @@ if router_scaffold_schema.is_a?(Hash)
|
|
|
146
156
|
end
|
|
147
157
|
|
|
148
158
|
complete_facts = {
|
|
149
|
-
backend_impact: true, ui_impact: true,
|
|
159
|
+
backend_impact: true, ui_impact: true, prototype_review: true, prototype_verification: true,
|
|
160
|
+
antd_cli_verification: true, browser_verification: true, prototype_confirmation: true,
|
|
161
|
+
scaffold_status: "required", scaffold_contract_approved: true
|
|
150
162
|
}
|
|
151
163
|
complete_route = route_after_prototype(complete_facts)
|
|
152
164
|
expected_steps = %w[engineering-baseline yss-router-scaffold-contract lifecycle-approve-scaffold-contract yss-ddd-scaffold-generator yss-backend-scaffold-parent yss-router-contract-recompile]
|
|
@@ -155,6 +167,16 @@ failures << "原型完成后的后端路由顺序不完整" unless complete_rout
|
|
|
155
167
|
blocked_route = route_after_prototype(complete_facts.merge(prototype_confirmation: false))
|
|
156
168
|
failures << "原型未确认时错误允许后端脚手架" unless blocked_route["status"] == "blocked" && blocked_route["reason"] == "prototype-confirmation-required"
|
|
157
169
|
|
|
170
|
+
{
|
|
171
|
+
prototype_review: "prototype-review-required",
|
|
172
|
+
prototype_verification: "prototype-verification-required",
|
|
173
|
+
antd_cli_verification: "antd-cli-verification-required",
|
|
174
|
+
browser_verification: "browser-verification-required"
|
|
175
|
+
}.each do |missing_fact, reason|
|
|
176
|
+
blocked = route_after_prototype(complete_facts.merge(missing_fact => false))
|
|
177
|
+
failures << "#{missing_fact} 缺失时错误允许后端脚手架" unless blocked["status"] == "blocked" && blocked["reason"] == reason
|
|
178
|
+
end
|
|
179
|
+
|
|
158
180
|
missing_scaffold_contract = route_after_prototype(complete_facts.merge(scaffold_contract_approved: false))
|
|
159
181
|
failures << "脚手架受控生成缺少批准合同仍被允许" unless missing_scaffold_contract["status"] == "blocked" && missing_scaffold_contract["reason"] == "scaffold-contract-required"
|
|
160
182
|
|
|
@@ -29,6 +29,9 @@ required_files=(
|
|
|
29
29
|
"AGENTS.md"
|
|
30
30
|
"CONTEXT.md"
|
|
31
31
|
"skills-lock.json"
|
|
32
|
+
"docs/process/lifecycle-registry.yaml"
|
|
33
|
+
"docs/process/lifecycle-registry-baseline.json"
|
|
34
|
+
"docs/process/schemas/lifecycle-registry.schema.json"
|
|
32
35
|
"docs/process/lifecycle-artifact-map.md"
|
|
33
36
|
"docs/process/harness-process-tailoring.md"
|
|
34
37
|
"docs/templates/local-parent-ticket-template.md"
|
|
@@ -39,11 +42,17 @@ required_files=(
|
|
|
39
42
|
"scripts/update-skill-lock"
|
|
40
43
|
"scripts/implementation-path-policy.rb"
|
|
41
44
|
"scripts/verify-lifecycle-scenarios"
|
|
45
|
+
"scripts/generate-lifecycle-artifacts"
|
|
46
|
+
"scripts/verify-lifecycle-registry"
|
|
47
|
+
"scripts/test-lifecycle-registry.rb"
|
|
48
|
+
"scripts/verify-governance-release"
|
|
42
49
|
"scripts/verify-implementation-path-scenarios"
|
|
43
50
|
"scripts/verify-scaffold-generator-scenarios"
|
|
44
51
|
"scripts/verify-prototype-backend-scaffold-scenarios"
|
|
45
52
|
"scripts/verify-matt-yss-integration-scenarios"
|
|
46
53
|
"scripts/verify-yss-ui-scenarios"
|
|
54
|
+
"scripts/verify-openapi-yaml-first-scenarios"
|
|
55
|
+
"scripts/verify-openapi-json-handoff-scenarios"
|
|
47
56
|
)
|
|
48
57
|
|
|
49
58
|
required_skills=(
|
|
@@ -120,19 +129,28 @@ lock.fetch("skills", {}).fetch("shared", {}).each do |skill_name, metadata|
|
|
|
120
129
|
end
|
|
121
130
|
|
|
122
131
|
openapi_path = root.join("docs/templates/openapi-spec-template.yaml")
|
|
123
|
-
|
|
124
|
-
|
|
132
|
+
documents = YAML.load_stream(openapi_path.binread.force_encoding("UTF-8"))
|
|
133
|
+
unless documents.length == 1 && documents.first.is_a?(Hash) && documents.first["openapi"] == "3.1.0"
|
|
134
|
+
warn "docs/templates/openapi-spec-template.yaml 必须是单一 OAS 3.1 YAML document"
|
|
135
|
+
exit 1
|
|
136
|
+
end
|
|
125
137
|
RUBY
|
|
126
138
|
|
|
127
139
|
scripts/sync-skills --check
|
|
128
140
|
scripts/update-skill-lock --check
|
|
141
|
+
scripts/verify-lifecycle-registry
|
|
129
142
|
scripts/verify-lifecycle-scenarios
|
|
143
|
+
scripts/verify-governance-release
|
|
130
144
|
scripts/verify-implementation-path-scenarios
|
|
131
145
|
scripts/verify-scaffold-generator-scenarios
|
|
132
146
|
scripts/verify-prototype-backend-scaffold-scenarios
|
|
133
147
|
ruby scripts/verify-matt-yss-integration-scenarios
|
|
134
148
|
scripts/verify-yss-router-scenarios
|
|
135
149
|
scripts/verify-yss-ui-scenarios
|
|
150
|
+
scripts/verify-openapi-yaml-first-scenarios
|
|
151
|
+
scripts/verify-openapi-json-handoff-scenarios
|
|
152
|
+
ruby scripts/test-lifecycle-registry.rb
|
|
153
|
+
ruby scripts/test-export-yss-skills.rb
|
|
136
154
|
|
|
137
155
|
ruby <<'RUBY'
|
|
138
156
|
# encoding: UTF-8
|
|
@@ -161,7 +179,8 @@ obsolete_names = [
|
|
|
161
179
|
"obsidian-vault",
|
|
162
180
|
"writing-great-skills",
|
|
163
181
|
"code-review-process",
|
|
164
|
-
"yss-domain-modeling"
|
|
182
|
+
"yss-domain-modeling",
|
|
183
|
+
"yss-openapi"
|
|
165
184
|
].freeze
|
|
166
185
|
|
|
167
186
|
agent_roots.each do |agent_root|
|
|
@@ -266,6 +285,11 @@ ruby -c scripts/sync-skills >/dev/null
|
|
|
266
285
|
ruby -c scripts/update-skill-lock >/dev/null
|
|
267
286
|
ruby -c scripts/implementation-path-policy.rb >/dev/null
|
|
268
287
|
ruby -c scripts/verify-lifecycle-scenarios >/dev/null
|
|
288
|
+
ruby -c scripts/lifecycle-registry.rb >/dev/null
|
|
289
|
+
ruby -c scripts/generate-lifecycle-artifacts >/dev/null
|
|
290
|
+
ruby -c scripts/verify-lifecycle-registry >/dev/null
|
|
291
|
+
ruby -c scripts/test-lifecycle-registry.rb >/dev/null
|
|
292
|
+
ruby -c scripts/verify-governance-release >/dev/null
|
|
269
293
|
ruby -c scripts/verify-prototype-backend-scaffold-scenarios >/dev/null
|
|
270
294
|
ruby -c scripts/verify-matt-yss-integration-scenarios >/dev/null
|
|
271
295
|
ruby -c scripts/verify-yss-ui-scenarios >/dev/null
|
|
@@ -38,7 +38,7 @@ def routing_input_violations(contract, input)
|
|
|
38
38
|
contract.fetch("exclusive_flags").each do |left, right|
|
|
39
39
|
violations << "#{left}/#{right}" unless flags[left] != flags[right]
|
|
40
40
|
end
|
|
41
|
-
violations
|
|
41
|
+
violations.uniq
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
def active_impacts(input)
|
|
@@ -49,7 +49,8 @@ base_input = {
|
|
|
49
49
|
"slice_id" => "order-create",
|
|
50
50
|
"impact_flags" => {
|
|
51
51
|
"ui_impact" => true, "api_impact" => true, "no_api_impact" => false,
|
|
52
|
-
"data_impact" => false, "backend_impact" => false, "cross_repo" => false
|
|
52
|
+
"data_impact" => false, "backend_impact" => false, "cross_repo" => false,
|
|
53
|
+
"existing_frozen_baseline" => false
|
|
53
54
|
},
|
|
54
55
|
"lifecycle" => {}, "implementation" => {}, "acceptance" => {}
|
|
55
56
|
}
|
|
@@ -60,17 +61,36 @@ failures << "Invalid lifecycle input type was accepted" if routing_input_violati
|
|
|
60
61
|
both_api_modes = base_input["impact_flags"].merge("api_impact" => true, "no_api_impact" => true)
|
|
61
62
|
failures << "API/no-API exclusivity was not enforced" if routing_input_violations(CONTRACT, base_input.merge("impact_flags" => both_api_modes)).empty?
|
|
62
63
|
|
|
64
|
+
legacy_posture_key = %w[security permission posture].join("_")
|
|
65
|
+
failures << "Router 输入仍要求已废弃的专项输入" if CONTRACT.fetch("routing_input_required").include?(legacy_posture_key)
|
|
66
|
+
failures << "Router 仍声明已废弃的专项合同" if CONTRACT.key?(legacy_posture_key)
|
|
67
|
+
legacy_impact_flags = CONTRACT.fetch("impact_flags_required").select do |flag|
|
|
68
|
+
%w[permission security].any? { |prefix| flag.start_with?("#{prefix}_") }
|
|
69
|
+
end
|
|
70
|
+
failures << "Router 仍要求安全 / 权限派生旗标" unless (CONTRACT.fetch("impact_flags_required") & legacy_impact_flags).empty?
|
|
71
|
+
explicit_authorization_input = base_input.merge("acceptance" => {"behavior" => "角色授权规则变化"})
|
|
72
|
+
failures << "显式权限行为无法按普通输入进入 Router" unless routing_input_violations(CONTRACT, explicit_authorization_input).empty?
|
|
73
|
+
|
|
63
74
|
common_ready = CONTRACT.dig("readiness", "common").to_h { |key| [key, true] }
|
|
64
75
|
ui_ready = CONTRACT.dig("readiness", "ui_impact").to_h { |key| [key, true] }
|
|
65
76
|
api_ready = CONTRACT.dig("readiness", "api_impact").to_h { |key| [key, true] }
|
|
66
77
|
all_ui = common_ready.merge(ui_ready).merge(api_ready)
|
|
67
78
|
failures << "Approved UI inputs were blocked" unless readiness_missing(CONTRACT, %w[ui_impact api_impact], all_ui).empty?
|
|
68
79
|
|
|
80
|
+
%w[prototype_review prototype_verification antd_cli_evidence browser_verification_evidence prototype_confirmation].each do |field|
|
|
81
|
+
failures << "Router UI readiness 缺少 #{field}" unless CONTRACT.dig("readiness", "ui_impact").include?(field)
|
|
82
|
+
end
|
|
83
|
+
|
|
69
84
|
ui_without_confirmation = all_ui.merge("prototype_confirmation" => false)
|
|
70
85
|
unless readiness_missing(CONTRACT, %w[ui_impact api_impact], ui_without_confirmation).include?("prototype_confirmation")
|
|
71
86
|
failures << "UI implementation was not blocked without prototype confirmation"
|
|
72
87
|
end
|
|
73
88
|
|
|
89
|
+
ui_without_browser_evidence = all_ui.merge("browser_verification_evidence" => false)
|
|
90
|
+
unless readiness_missing(CONTRACT, %w[ui_impact api_impact], ui_without_browser_evidence).include?("browser_verification_evidence")
|
|
91
|
+
failures << "UI implementation was not blocked without browser verification evidence"
|
|
92
|
+
end
|
|
93
|
+
|
|
74
94
|
data_ready = common_ready.merge(CONTRACT.dig("readiness", "data_impact").to_h { |key| [key, true] })
|
|
75
95
|
data_missing = data_ready.merge("data_architecture" => false)
|
|
76
96
|
unless readiness_missing(CONTRACT, %w[data_impact], data_missing).include?("data_architecture")
|
|
@@ -504,14 +524,26 @@ backend_skill_mutation["backend"]["required_skills"].delete("mapstruct")
|
|
|
504
524
|
failures << "Backend contract accepted incomplete skill closure" unless slice_contract_decision_violations(CONTRACT, backend_input, backend_evidence, backend_skill_mutation, backend_expected_skills).include?("backend.required_skills")
|
|
505
525
|
failures << "Backend contract accepted omitted skill closure" if slice_contract_decision_violations(CONTRACT, backend_input, backend_evidence, backend_slice, []).empty?
|
|
506
526
|
|
|
527
|
+
component_route_examples = {
|
|
528
|
+
"Current-user" => {"impact" => "current-user-context", "skills" => ["yss-userinfo"]},
|
|
529
|
+
"Audit" => {"impact" => "audit-event", "skills" => ["yss-audit-log", "yss-userinfo", "yss-dto"]},
|
|
530
|
+
"Encryption" => {"impact" => "encryption-or-signing", "skills" => ["yss-security-algorithm", "yss-exception"]}
|
|
531
|
+
}
|
|
532
|
+
component_route_examples.each do |label, example|
|
|
533
|
+
candidate = Marshal.load(Marshal.dump(backend_slice))
|
|
534
|
+
candidate["backend"]["component_impacts"] = [example.fetch("impact")]
|
|
535
|
+
required_skills = dependency_closure(CONTRACT, backend_expected_skills + example.fetch("skills"), {})
|
|
536
|
+
candidate["backend"]["required_skills"] = required_skills
|
|
537
|
+
candidate["common"]["required_skills"] = required_skills
|
|
538
|
+
failures << "#{label} component route was rejected" unless slice_contract_decision_violations(
|
|
539
|
+
CONTRACT, backend_input, backend_evidence, candidate, required_skills
|
|
540
|
+
).empty?
|
|
541
|
+
end
|
|
507
542
|
component_slice = Marshal.load(Marshal.dump(backend_slice))
|
|
508
543
|
component_slice["backend"]["component_impacts"] = ["current-user-context"]
|
|
509
544
|
component_skills = dependency_closure(CONTRACT, backend_expected_skills + ["yss-userinfo"], {})
|
|
510
545
|
component_slice["backend"]["required_skills"] = component_skills
|
|
511
546
|
component_slice["common"]["required_skills"] = component_skills
|
|
512
|
-
failures << "Current-user component route was rejected" unless slice_contract_decision_violations(
|
|
513
|
-
CONTRACT, backend_input, backend_evidence, component_slice, component_skills
|
|
514
|
-
).empty?
|
|
515
547
|
unknown_component = Marshal.load(Marshal.dump(component_slice))
|
|
516
548
|
unknown_component["backend"]["component_impacts"] = ["unknown-component"]
|
|
517
549
|
unless slice_contract_decision_violations(CONTRACT, backend_input, backend_evidence, unknown_component, component_skills).include?("backend.component_impacts")
|
|
@@ -730,6 +762,17 @@ mutations = {
|
|
|
730
762
|
"drift" => valid_result.merge("status" => "drift"),
|
|
731
763
|
"violation" => valid_result.merge("status" => "violation")
|
|
732
764
|
}
|
|
765
|
+
|
|
766
|
+
valid_deferred = valid_result.merge(
|
|
767
|
+
"status" => "seam-deferred",
|
|
768
|
+
"seam_deferred" => [{
|
|
769
|
+
"risk" => "temporary adapter", "owner" => "team", "follow_up_ticket" => "T-2",
|
|
770
|
+
"verification_plan" => "contract test", "target_version_or_release_date" => "2026-09-01"
|
|
771
|
+
}]
|
|
772
|
+
)
|
|
773
|
+
unless execution_violations(CONTRACT, valid_deferred, *valid_args).empty?
|
|
774
|
+
failures << "Valid seam-deferred result was rejected"
|
|
775
|
+
end
|
|
733
776
|
mutations.each do |expected, result|
|
|
734
777
|
blocker = expected.sub(/-(empty|command|contract-version|status|shape|work-unit|missing|implemented-with-seam|not-applicable-reason|identity|area)$/, "")
|
|
735
778
|
actual = execution_violations(CONTRACT, result, *valid_args)
|
|
@@ -870,15 +913,9 @@ end
|
|
|
870
913
|
|
|
871
914
|
scaffold_pom_template = ROOT.join(".agents/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template")
|
|
872
915
|
scaffold_pom_body = scaffold_pom_template.read
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
smart_doc_body = smart_doc_template.file? ? smart_doc_template.read : ""
|
|
877
|
-
%w[allInOne outPath packageFilters componentType].each do |marker|
|
|
878
|
-
failures << "smart-doc template missing #{marker}" unless smart_doc_body.include?("\"#{marker}\"")
|
|
879
|
-
end
|
|
880
|
-
failures << "smart-doc packageFilters must use the supported single-star regex" unless smart_doc_body.include?("\"packageFilters\": \"{{base_package}}.*\"")
|
|
881
|
-
failures << "smart-doc template contains environment secret settings" if smart_doc_body.match?(/appToken|openUrl|debugEnvUrl|serverUrl/)
|
|
916
|
+
failures << "后端脚手架不得保留旧 OpenAPI Maven 插件" if scaffold_pom_body.include?("smart-doc-maven-plugin")
|
|
917
|
+
legacy_openapi_template = ROOT.join(".agents/skills/yss-ddd-scaffold-generator/assets/templates/config/smart-doc.json.template")
|
|
918
|
+
failures << "后端脚手架不得保留旧 OpenAPI 配置模板" if legacy_openapi_template.exist?
|
|
882
919
|
|
|
883
920
|
%w[
|
|
884
921
|
yss-domain/SKILL.md
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"source": "mattpocock/skills",
|
|
95
95
|
"sourceType": "github",
|
|
96
96
|
"skillPath": "skills/engineering/code-review/SKILL.md",
|
|
97
|
-
"effectiveHash": "
|
|
97
|
+
"effectiveHash": "e1a71372e9ef1e5dc422fdf138ba2803ad7d4f6ce82d0fe276017276b365c150",
|
|
98
98
|
"upstreamHash": "1d5e7242a98674635be79ab310cdda0e555d36a9903d2526ebf4263d0b7997ca",
|
|
99
99
|
"targets": [
|
|
100
100
|
".agents/skills",
|
|
@@ -328,7 +328,7 @@
|
|
|
328
328
|
"source": "project",
|
|
329
329
|
"sourceType": "local",
|
|
330
330
|
"skillPath": ".agents/skills/high-fidelity-html-prototype/SKILL.md",
|
|
331
|
-
"effectiveHash": "
|
|
331
|
+
"effectiveHash": "9cde0608db48293eb0c0784a4283a41ba582aabdc2ef9f77dc1606492d333eda",
|
|
332
332
|
"targets": [
|
|
333
333
|
".agents/skills",
|
|
334
334
|
".claude/skills",
|
|
@@ -469,7 +469,7 @@
|
|
|
469
469
|
"source": "project",
|
|
470
470
|
"sourceType": "local",
|
|
471
471
|
"skillPath": ".agents/skills/product-design-prototype/SKILL.md",
|
|
472
|
-
"effectiveHash": "
|
|
472
|
+
"effectiveHash": "cd8f600b5fde968244186e365e6533c1b6edbd8e3726d3d2d3e38b8056457d7f",
|
|
473
473
|
"targets": [
|
|
474
474
|
".agents/skills",
|
|
475
475
|
".claude/skills",
|
|
@@ -500,7 +500,7 @@
|
|
|
500
500
|
"source": "project",
|
|
501
501
|
"sourceType": "local",
|
|
502
502
|
"skillPath": ".agents/skills/prototype-review/SKILL.md",
|
|
503
|
-
"effectiveHash": "
|
|
503
|
+
"effectiveHash": "5502cd1617734eaf50b6aaa26ced6d5dfe60b5ef552ea81cdfb7150a9d3008d0",
|
|
504
504
|
"targets": [
|
|
505
505
|
".agents/skills",
|
|
506
506
|
".claude/skills",
|
|
@@ -784,7 +784,7 @@
|
|
|
784
784
|
"source": "project",
|
|
785
785
|
"sourceType": "local",
|
|
786
786
|
"skillPath": ".agents/skills/wireframe-prototype/SKILL.md",
|
|
787
|
-
"effectiveHash": "
|
|
787
|
+
"effectiveHash": "200e1a34cc4de1f6a9f6a8e31e66c123568e804183d6661ee0c164086f88a88e",
|
|
788
788
|
"targets": [
|
|
789
789
|
".agents/skills",
|
|
790
790
|
".claude/skills",
|
|
@@ -894,7 +894,7 @@
|
|
|
894
894
|
"source": "project",
|
|
895
895
|
"sourceType": "local",
|
|
896
896
|
"skillPath": ".agents/skills/yss-api-integration/SKILL.md",
|
|
897
|
-
"effectiveHash": "
|
|
897
|
+
"effectiveHash": "fb6ccf48f016b6df63c3072fc771344c29a1523b5daf08f9512e7bbd79c6a3bc",
|
|
898
898
|
"targets": [
|
|
899
899
|
".agents/skills",
|
|
900
900
|
".claude/skills",
|
|
@@ -1029,7 +1029,7 @@
|
|
|
1029
1029
|
"source": "project",
|
|
1030
1030
|
"sourceType": "local",
|
|
1031
1031
|
"skillPath": ".agents/skills/yss-ddd-scaffold-generator/SKILL.md",
|
|
1032
|
-
"effectiveHash": "
|
|
1032
|
+
"effectiveHash": "b0febe45515f862957742dabd2cfb1df7c56811b059f60821efee6712534a834",
|
|
1033
1033
|
"targets": [
|
|
1034
1034
|
".agents/skills",
|
|
1035
1035
|
".claude/skills",
|
|
@@ -1044,7 +1044,7 @@
|
|
|
1044
1044
|
"source": "project",
|
|
1045
1045
|
"sourceType": "local",
|
|
1046
1046
|
"skillPath": ".agents/skills/yss-design-system/SKILL.md",
|
|
1047
|
-
"effectiveHash": "
|
|
1047
|
+
"effectiveHash": "0cf7028c716b33c6a4b376f8bc6d17708854c0e6b9c460fc60cfa3865be63ce5",
|
|
1048
1048
|
"targets": [
|
|
1049
1049
|
".agents/skills",
|
|
1050
1050
|
".claude/skills",
|
|
@@ -1179,7 +1179,7 @@
|
|
|
1179
1179
|
"source": "project",
|
|
1180
1180
|
"sourceType": "local",
|
|
1181
1181
|
"skillPath": ".agents/skills/yss-frontend-scaffold-generator/SKILL.md",
|
|
1182
|
-
"effectiveHash": "
|
|
1182
|
+
"effectiveHash": "6b966c5824b80f5196c7fd8225238b3047d9e49f1f94c60179e4a567d82911f5",
|
|
1183
1183
|
"targets": [
|
|
1184
1184
|
".agents/skills",
|
|
1185
1185
|
".claude/skills",
|
|
@@ -1265,11 +1265,11 @@
|
|
|
1265
1265
|
".trae/skills"
|
|
1266
1266
|
]
|
|
1267
1267
|
},
|
|
1268
|
-
"yss-openapi": {
|
|
1268
|
+
"yss-openapi-draft-review": {
|
|
1269
1269
|
"source": "project",
|
|
1270
1270
|
"sourceType": "local",
|
|
1271
|
-
"skillPath": ".agents/skills/yss-openapi/SKILL.md",
|
|
1272
|
-
"effectiveHash": "
|
|
1271
|
+
"skillPath": ".agents/skills/yss-openapi-draft-review/SKILL.md",
|
|
1272
|
+
"effectiveHash": "dcf5c6125081e1adb3b3ee0204f2e14fec62dd2ccb7857d2f0d46c1b64e2755c",
|
|
1273
1273
|
"targets": [
|
|
1274
1274
|
".agents/skills",
|
|
1275
1275
|
".claude/skills",
|
|
@@ -1280,11 +1280,11 @@
|
|
|
1280
1280
|
".trae/skills"
|
|
1281
1281
|
]
|
|
1282
1282
|
},
|
|
1283
|
-
"yss-openapi-
|
|
1283
|
+
"yss-openapi-governance": {
|
|
1284
1284
|
"source": "project",
|
|
1285
1285
|
"sourceType": "local",
|
|
1286
|
-
"skillPath": ".agents/skills/yss-openapi-
|
|
1287
|
-
"effectiveHash": "
|
|
1286
|
+
"skillPath": ".agents/skills/yss-openapi-governance/SKILL.md",
|
|
1287
|
+
"effectiveHash": "20ea763036bc0cbf355c2a644cc65e3054cfaa29de679f699409e24d8d647088",
|
|
1288
1288
|
"targets": [
|
|
1289
1289
|
".agents/skills",
|
|
1290
1290
|
".claude/skills",
|
|
@@ -1295,11 +1295,11 @@
|
|
|
1295
1295
|
".trae/skills"
|
|
1296
1296
|
]
|
|
1297
1297
|
},
|
|
1298
|
-
"yss-
|
|
1298
|
+
"yss-page-module-development": {
|
|
1299
1299
|
"source": "project",
|
|
1300
1300
|
"sourceType": "local",
|
|
1301
|
-
"skillPath": ".agents/skills/yss-
|
|
1302
|
-
"effectiveHash": "
|
|
1301
|
+
"skillPath": ".agents/skills/yss-page-module-development/SKILL.md",
|
|
1302
|
+
"effectiveHash": "3198981c5b138f1126e4c0c463eb195f47c4565a049518243651e8ea7bcc136c",
|
|
1303
1303
|
"targets": [
|
|
1304
1304
|
".agents/skills",
|
|
1305
1305
|
".claude/skills",
|
|
@@ -1310,11 +1310,11 @@
|
|
|
1310
1310
|
".trae/skills"
|
|
1311
1311
|
]
|
|
1312
1312
|
},
|
|
1313
|
-
"yss-
|
|
1313
|
+
"yss-product-lifecycle": {
|
|
1314
1314
|
"source": "project",
|
|
1315
1315
|
"sourceType": "local",
|
|
1316
|
-
"skillPath": ".agents/skills/yss-
|
|
1317
|
-
"effectiveHash": "
|
|
1316
|
+
"skillPath": ".agents/skills/yss-product-lifecycle/SKILL.md",
|
|
1317
|
+
"effectiveHash": "1bdf5769a237d6a95bec19dc2ce5790ae052b164c79c9520373bacf9c7b28d0e",
|
|
1318
1318
|
"targets": [
|
|
1319
1319
|
".agents/skills",
|
|
1320
1320
|
".claude/skills",
|
|
@@ -1325,11 +1325,11 @@
|
|
|
1325
1325
|
".trae/skills"
|
|
1326
1326
|
]
|
|
1327
1327
|
},
|
|
1328
|
-
"yss-
|
|
1328
|
+
"yss-prototype-stage": {
|
|
1329
1329
|
"source": "project",
|
|
1330
1330
|
"sourceType": "local",
|
|
1331
|
-
"skillPath": ".agents/skills/yss-
|
|
1332
|
-
"effectiveHash": "
|
|
1331
|
+
"skillPath": ".agents/skills/yss-prototype-stage/SKILL.md",
|
|
1332
|
+
"effectiveHash": "38d4bb83e7a3bf104c11d99e4a8cad9f2094fb29da51f32b0e9a66ebcbe16d03",
|
|
1333
1333
|
"targets": [
|
|
1334
1334
|
".agents/skills",
|
|
1335
1335
|
".claude/skills",
|
|
@@ -1374,7 +1374,7 @@
|
|
|
1374
1374
|
"source": "project",
|
|
1375
1375
|
"sourceType": "local",
|
|
1376
1376
|
"skillPath": ".agents/skills/yss-router/SKILL.md",
|
|
1377
|
-
"effectiveHash": "
|
|
1377
|
+
"effectiveHash": "315788ec2c1fcca6f577fa3f83bf0e848404031c5691fd2ba8058ba25fcd0c14",
|
|
1378
1378
|
"targets": [
|
|
1379
1379
|
".agents/skills",
|
|
1380
1380
|
".claude/skills",
|
|
@@ -1265,21 +1265,6 @@
|
|
|
1265
1265
|
".trae/skills"
|
|
1266
1266
|
]
|
|
1267
1267
|
},
|
|
1268
|
-
"yss-openapi": {
|
|
1269
|
-
"source": "project",
|
|
1270
|
-
"sourceType": "local",
|
|
1271
|
-
"skillPath": ".agents/skills/yss-openapi/SKILL.md",
|
|
1272
|
-
"effectiveHash": "2283b86f5731d58d6138895f2418dd681abc49aa5b3b753b64ef3f7d0d87b690",
|
|
1273
|
-
"targets": [
|
|
1274
|
-
".agents/skills",
|
|
1275
|
-
".claude/skills",
|
|
1276
|
-
".codex/skills",
|
|
1277
|
-
".hermes/skills",
|
|
1278
|
-
".pi/skills",
|
|
1279
|
-
".qoder/skills",
|
|
1280
|
-
".trae/skills"
|
|
1281
|
-
]
|
|
1282
|
-
},
|
|
1283
1268
|
"yss-openapi-draft-review": {
|
|
1284
1269
|
"source": "project",
|
|
1285
1270
|
"sourceType": "local",
|
|
@@ -6,4 +6,4 @@ OpenAPI Freeze 指已通过评审、可作为前后端实现和契约测试输
|
|
|
6
6
|
|
|
7
7
|
OpenAPI 契约文件存放于 `docs/api/specs/`,评审检查清单与 Freeze 记录模板见 `docs/api/templates/`。OpenAPI Freeze 或无 API 影响记录完成后,使用 `to-tickets` 拆分成窄垂直切片(见 [[垂直切片Ticket]])。OpenAPI Draft 属于待冻结资产,使用 `ready-for-human`;只有 Freeze 后的契约才支撑 `ready-for-agent` 的切片。
|
|
8
8
|
|
|
9
|
-
YSS 的 OpenAPI
|
|
9
|
+
YSS 的 OpenAPI 契约以冻结的 OpenAPI 3.1 YAML 为唯一权威。`yss-openapi-governance` 使用锁定的 Redocly CLI 派生 JSON,随后由 `api-integration` 刷新前端 Orval API 客户端;JSON 与生成代码均不得手工修改(见 [[YSS工程技能体系]])。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
YSS skills 是项目内置的 YSS 工程规范技能,用于 DDD、UI、OpenAPI、Repository、Controller、DTO、组件和编码规范,与 Matt Pocock 的轻量流程技能互补(见 [[Matt技能体系]])。
|
|
4
4
|
|
|
5
|
-
按领域划分:后端脚手架(`yss-ddd-scaffold-generator` 及 Domain / Application / Infrastructure / Web / Adapter 分层技能)、领域建模(`yss-domain`)、持久层(`yss-repository`、`yss-mybatis`、`yss-db2mybatis`)、Web 契约(`yss-web-controller`、`yss-dto`、`yss-openapi`)、前端(`yss-ui`、`yss-components`、`yss-formily`、`yss-hook`、`yss-page-module-development`)、以及横切组件(`yss-cache`、`yss-exception`、`yss-log`、`yss-userinfo`、`yss-distributed-id`、`yss-security-algorithm`、`yss-resilience4j` 等)。
|
|
5
|
+
按领域划分:后端脚手架(`yss-ddd-scaffold-generator` 及 Domain / Application / Infrastructure / Web / Adapter 分层技能)、领域建模(`yss-domain`)、持久层(`yss-repository`、`yss-mybatis`、`yss-db2mybatis`)、Web 契约(`yss-web-controller`、`yss-dto`、`yss-openapi-governance`、`yss-openapi-draft-review`)、前端(`yss-ui`、`yss-components`、`yss-formily`、`yss-hook`、`yss-page-module-development`、`api-integration`)、以及横切组件(`yss-cache`、`yss-exception`、`yss-log`、`yss-userinfo`、`yss-distributed-id`、`yss-security-algorithm`、`yss-resilience4j` 等)。
|
|
6
6
|
|
|
7
7
|
技能路由纪律:核心 YSS skills 必须消费批准合同并返回 YSS Skill Execution Result(见 [[切片实现合同]]);路径越界、证据缺失、未执行验证、`drift`、`violation` 或 `new_impacts` 阻断继续实现或触发重路由。禁止绕过合同与检查清单直接在 `AGENTS.md` 中自行发明细则。
|
|
8
8
|
|
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
"yss-log",
|
|
29
29
|
"yss-microapp-commit",
|
|
30
30
|
"yss-mybatis",
|
|
31
|
-
"yss-openapi",
|
|
32
31
|
"yss-openapi-draft-review",
|
|
33
32
|
"yss-openapi-governance",
|
|
34
33
|
"yss-page-module-development",
|
|
35
34
|
"yss-product-lifecycle",
|
|
35
|
+
"yss-prototype-stage",
|
|
36
36
|
"yss-repository",
|
|
37
37
|
"yss-resilience4j",
|
|
38
38
|
"yss-router",
|
|
@@ -74,7 +74,8 @@
|
|
|
74
74
|
"yss-dto",
|
|
75
75
|
"yss-jdbc",
|
|
76
76
|
"yss-mybatis",
|
|
77
|
-
"yss-repository"
|
|
77
|
+
"yss-repository",
|
|
78
|
+
"yss-web-controller"
|
|
78
79
|
]
|
|
79
80
|
},
|
|
80
81
|
{
|
|
@@ -88,10 +89,10 @@
|
|
|
88
89
|
"yss-frontend-scaffold-generator",
|
|
89
90
|
"yss-hook",
|
|
90
91
|
"yss-page-module-development",
|
|
92
|
+
"yss-prototype-stage",
|
|
91
93
|
"yss-ui",
|
|
92
94
|
"yss-use-table-height",
|
|
93
|
-
"yss-use-tree-height"
|
|
94
|
-
"yss-web-controller"
|
|
95
|
+
"yss-use-tree-height"
|
|
95
96
|
]
|
|
96
97
|
},
|
|
97
98
|
{
|
|
@@ -99,7 +100,6 @@
|
|
|
99
100
|
"description": "用于 YSS API 设计、审查、治理和生成集成的技能。",
|
|
100
101
|
"skills": [
|
|
101
102
|
"yss-api-integration",
|
|
102
|
-
"yss-openapi",
|
|
103
103
|
"yss-openapi-draft-review",
|
|
104
104
|
"yss-openapi-governance"
|
|
105
105
|
]
|