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,121 @@
|
|
|
1
|
+
# OpenAPI YAML-first 独立审查(2026-08-16)
|
|
2
|
+
|
|
3
|
+
## 审查范围与基线
|
|
4
|
+
|
|
5
|
+
- 角色:独立审查者;未参与本轮实现。
|
|
6
|
+
- 基线:`HEAD`(当前为未提交工作树,审查对象为 `git diff HEAD`)。
|
|
7
|
+
- 范围:移除仓库内 `yss-openapi` / smart-doc,冻结 YAML 为唯一权威,以锁定 Redocly bundle 派生 JSON 后交给 Orval。
|
|
8
|
+
- 不在范围:`/Users/zhudaoming/.agents/skills/yss-openapi` 仍存在,但它是仓库外全局技能;本仓库不得删除或修改它。
|
|
9
|
+
|
|
10
|
+
## 已执行的只读检查
|
|
11
|
+
|
|
12
|
+
- `git diff HEAD`、`git diff --check`。
|
|
13
|
+
- `scripts/verify-openapi-yaml-first-scenarios`。
|
|
14
|
+
- `scripts/verify-yss-router-scenarios`、`scripts/verify-lifecycle-scenarios`。
|
|
15
|
+
- `scripts/sync-skills --check`、`scripts/update-skill-lock --check`。
|
|
16
|
+
- `ruby scripts/test-export-yss-skills.rb`(5 runs / 72 assertions / 0 failures)。
|
|
17
|
+
- `bash -n scripts/verify-template`,并静态审阅其调用链;为遵守审查可写范围,未执行会写入 Python bytecode 的完整 `scripts/verify-template`。
|
|
18
|
+
- `rg --hidden` 扫描旧 skill / smart-doc 变体及 YAML/JSON/Orval 路径;Redocly 官方 `bundle` 文档复核了本轮使用的 `--ext json` 与冲突错误选项。
|
|
19
|
+
|
|
20
|
+
以上可执行检查均通过,但不足以证明下列关键路径正确。
|
|
21
|
+
|
|
22
|
+
## Findings
|
|
23
|
+
|
|
24
|
+
### P1:仍存在可授权 smart-doc 的活跃合同入口
|
|
25
|
+
|
|
26
|
+
- `.agents/skills/yss-router/references/router-contract.yaml:94` 仍将 `smart_doc_baseline` 列入 `allowed_for`。
|
|
27
|
+
- `.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml:118` 保留同一允许项;`.agents/skills/yss-product-lifecycle/SKILL.md:65` 与 `docs/templates/implementation-routing-template.md:226` 仍宣称脚手架生成 Smart Doc。
|
|
28
|
+
|
|
29
|
+
这不是历史审计材料,而是 Router、生命周期和合同模板的活跃规则,仍可重新授权该 Maven 路径;`.codex` 投影也同步保留。新增 `scripts/verify-openapi-yaml-first-scenarios:53-58` 只检查 POM、配置文件和生成器,遗漏了上述入口。删除或改为中性机械配置后,应增加负向场景覆盖所有活跃路由和模板。
|
|
30
|
+
|
|
31
|
+
### P1:YAML → JSON → Orval 不是单一、可核验的链路
|
|
32
|
+
|
|
33
|
+
`yss-openapi-governance` 在 `.agents/skills/yss-openapi-governance/SKILL.md:40-45,69,107` 规定并记录 `docs/.scratch/<feature>/api/<feature>.json`;但 `yss-api-integration` 在 `.agents/skills/yss-api-integration/SKILL.md:24,37-50` 又重新 bundle 到固定 `openapi/openapi.json` 并让 Orval 使用。
|
|
34
|
+
|
|
35
|
+
两份 JSON 之间没有受控复制、最终 Orval `input` 记录、metafile 或逐段 SHA 校验。因此导出记录的 SHA 可以对应前者,而 Orval 实际消费后者;这不能证明 JSON 仅由冻结 YAML 派生。应选定唯一派生物,或定义 staging → SHA → 原子发布到实际 `orval.config.*` input 的交接,并记录最终路径和 SHA。
|
|
36
|
+
|
|
37
|
+
### P1:前端脚手架仍允许绕过冻结派生物
|
|
38
|
+
|
|
39
|
+
`.agents/skills/yss-frontend-scaffold-generator/SKILL.md:24,36,58` 允许 `openapi_source` 为任意文件、URL 或 Harness 路径,再配置 Orval;它没有要求 JSON 派生记录、锁定 Redocly、实际 `orval.config.*` input 或禁用 `unsafeDisableValidation`。这形成从 URL/任意文件直接生成客户端的回退口,尤其在跨仓库时无法追溯到 Freeze YAML。该 skill 和其路由/场景应绑定批准的跨仓库子合同及最终 JSON SHA。
|
|
40
|
+
|
|
41
|
+
### P1:新验证仅验证文字,未验证受控导出行为
|
|
42
|
+
|
|
43
|
+
`scripts/verify-openapi-yaml-first-scenarios:21-73` 只解析模板和检索字符串;不会校验 Freeze/导出记录、YAML SHA、Redocly bundle、JSON SHA、Orval 配置输入或 `unsafeDisableValidation`。因此它和完整的现有场景都在本审查中通过,却没有发现前述两个回退口。应以正反 fixture 或受控导出脚本验证:Draft 不可导出、手改 JSON/错误 SHA/非记录 input 必失败、冻结 YAML 才能生成并由 Orval 消费。
|
|
44
|
+
|
|
45
|
+
### P1:模板维护的 RED/GREEN 证据不足
|
|
46
|
+
|
|
47
|
+
`docs/reviews/openapi-yaml-first-red-green-2026-08-16.md:11-29` 记录的是静态失败摘要,`:38-55` 仅记录脚本成功;没有同一压力场景下“无技能”的逐字决策/合理化和“带技能”的合规结果。`AGENTS.md:47` 要求 skill/模板修改遵循 `writing-skills` 的 RED/GREEN/REFACTOR,`.agents/skills/writing-skills/SKILL.md:556` 要求保留压力场景及可审计的 rationale。应补同一压力场景,并让其覆盖 smart-doc 残留和双 JSON 交接。
|
|
48
|
+
|
|
49
|
+
### P2:无关的索引忽略规则被纳入工作树
|
|
50
|
+
|
|
51
|
+
`.ua/.understandignore:7,31,35-82` 将示例注释变为生效忽略规则,包含 `scripts/` 和全部测试模式,和本变更无关且会使分析索引漏掉本轮验证代码。所有权未确认;应从本轮 checkpoint 排除并由原所有者处理。
|
|
52
|
+
|
|
53
|
+
## 单向性、交接和清理结论
|
|
54
|
+
|
|
55
|
+
- **YAML/JSON 单向性:未通过。** YAML-first 规则本身已写入治理、Draft Review、Freeze/导出模板;但双输出路径和前端任意 source 使其无法被证明。
|
|
56
|
+
- **前端生成交接:未通过。** `api-integration` 要求记录,却没有以真实 Orval input 为唯一事实;前端脚手架仍可直接接 URL/任意文件。
|
|
57
|
+
- **旧 skill / 脚手架清理:部分通过。** 仓库内 `.agents/skills/yss-openapi`、六个投影、锁文件、公开清单、smart-doc POM、配置模板和生成器逻辑已清理;投影/锁与公开导出检查通过。活跃合同/模板中的 Smart Doc 入口仍未清理。
|
|
58
|
+
- **历史资料:非阻断。** `docs/reviews/openapi-skill-primary-source-research-2026-08-16.md:7` 已明确其为迁移前证据,不将其视为活跃回退口;建议保留该标识以免误用。
|
|
59
|
+
|
|
60
|
+
## 结论
|
|
61
|
+
|
|
62
|
+
**Blocked。** 在关闭所有 P1、补齐同一压力场景的 RED/GREEN 证据,并重新执行 fresh verification 前,不应宣称该模板已完成 YAML-first 迁移或不存在 smart-doc / JSON 输入回退口。
|
|
63
|
+
|
|
64
|
+
## 复审(修复后工作树,2026-08-16)
|
|
65
|
+
|
|
66
|
+
### 已执行的只读 / 临时目录验证
|
|
67
|
+
|
|
68
|
+
- `scripts/verify-openapi-yaml-first-scenarios`:通过。
|
|
69
|
+
- `scripts/verify-openapi-json-handoff-scenarios`:通过;正向 Freeze 交接及 Draft、Maven、URL、关闭 Orval 校验、前端 JSON 篡改、治理 JSON 篡改六类反例均实际执行。
|
|
70
|
+
- `scripts/verify-yss-router-scenarios`、`scripts/verify-lifecycle-scenarios`:通过。
|
|
71
|
+
- `scripts/sync-skills --check`、`scripts/update-skill-lock --check`:通过。
|
|
72
|
+
- `ruby scripts/test-export-yss-skills.rb`:5 runs / 72 assertions / 0 failures;`git diff --check` 与 `bash -n scripts/verify-template`:通过。
|
|
73
|
+
- 重新执行 `rg --hidden`:活跃资产不再含 Smart Doc / `smart_doc_baseline` / 已移除 `yss-openapi`;仅保留删除断言中的历史字符串。
|
|
74
|
+
|
|
75
|
+
### 先前 P1 复核
|
|
76
|
+
|
|
77
|
+
| 原 P1 | 复审结论 | 证据 |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| 活跃 smart-doc 入口 | 已关闭 | `.agents/skills/yss-router/references/router-contract.yaml:94`、`.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml:118`、`.agents/skills/yss-product-lifecycle/SKILL.md:65`、`docs/templates/implementation-routing-template.md:226` 均已去除旧项;`scripts/verify-openapi-yaml-first-scenarios:49-59` 覆盖。 |
|
|
80
|
+
| YAML/JSON/Orval 双路径 | 已关闭 | `.agents/skills/yss-openapi-governance/SKILL.md:68-77` 固定治理 JSON;`.agents/skills/yss-api-integration/SKILL.md:37-50` 要求同字节物化及 SHA;JSON 导出记录模板记录两端 SHA。 |
|
|
81
|
+
| 前端任意 source 回退 | 已关闭 | `.agents/skills/yss-frontend-scaffold-generator/SKILL.md:24-40,58-62` 禁止 URL、Draft、运行时和手工 JSON,并要求实际 `orval.config.*` 指向本地交接文件且 `unsafeDisableValidation` 为 `false` 或省略。 |
|
|
82
|
+
| 仅文本验证 | 已关闭(模板层) | `scripts/verify-openapi-json-handoff-scenarios:16-43,111-142` 验证路径、Freeze、SHA、Redocly 命令、Orval input / 校验开关及正反交接。脚本故意不在模板源仓库执行 Redocly;目标实现仓库仍须依技能要求以锁定依赖执行并留存记录。 |
|
|
83
|
+
| RED/GREEN 压力场景证据 | **仍为 P1** | `docs/reviews/openapi-yaml-first-red-green-2026-08-16.md:61-68` 现有的是汇总性的合理化和结果,未保存 `writing-skills` 所要求的“无该 skill 的 subagent”原始 prompt / 输出、逐字 rationale,以及同一场景“带 skill”的可审计输出(`.agents/skills/writing-skills/SKILL.md:558-569`)。 |
|
|
84
|
+
|
|
85
|
+
### 单向性与交接结论
|
|
86
|
+
|
|
87
|
+
链路现为:冻结 YAML → 治理 JSON `docs/.scratch/<feature>/api/<feature>.json` → SHA 一致的 `<frontend>/openapi/openapi.json` → 已核验的实际 `orval.config.*` input。交接契约和正反 fixture 已验证;模板内没有前述 JSON 回退口。
|
|
88
|
+
|
|
89
|
+
`.ua/.understandignore` 的无关变更仍是先前 P2,所有权未知,应继续排除在本轮 checkpoint 外;它不改变上述复审结论。仓库外的 `/Users/zhudaoming/.agents/skills/yss-openapi` 仍不属于本仓库删除范围。
|
|
90
|
+
|
|
91
|
+
### 复审结论
|
|
92
|
+
|
|
93
|
+
**仍 Blocked(仅剩 1 个 P1:可审计的 `writing-skills` RED/GREEN 子代理压力场景证据)。** 关闭该证据缺口后,可解除本报告的 Blocked;本次复审未发现其他 P1。
|
|
94
|
+
|
|
95
|
+
## 最终复审(压力场景证据补齐后,2026-08-16)
|
|
96
|
+
|
|
97
|
+
### `writing-skills` RED / GREEN 证据
|
|
98
|
+
|
|
99
|
+
- `docs/reviews/openapi-yaml-first-pressure-scenarios-2026-08-16.md:7-10` 明确记录了 fresh-context、无 skill 的 RED 对照、同题且完整读取三项相关 skill 的 GREEN,以及每题至少三类组合压力。
|
|
100
|
+
- R1–R6 均保留相同题干及 RED / GREEN 原始输出;R1–R5 的 RED 自然选择 C 被诚实地标为非失败样本,未被伪造为 RED failure。
|
|
101
|
+
- R6 在客户明示、截止时间和组织惯性下给出实际无技能失败:选择 A 并沿用 Maven smart-doc(该记录第 164-172 行);同题 GREEN 选择 C,逐项回到 Freeze YAML、锁定 Redocly bundle、双端 SHA-256 和实际 `orval.config.*` 输入 / 校验开关(第 174-185 行)。
|
|
102
|
+
- 记录第 187-191 行说明该新合理化已落实为技能约束,并由 JSON handoff 负向场景重测。`docs/reviews/openapi-yaml-first-red-green-2026-08-16.md:70` 建立了 RED / GREEN 索引。
|
|
103
|
+
|
|
104
|
+
这满足 `writing-skills` 对无指导压力基线、逐字合理化、同场景 GREEN 和发现后 REFACTOR / retest 的要求;压力样本的执行时间或 agent run ID 可作为未来审计增强,但不是本次流程门禁的遗漏。
|
|
105
|
+
|
|
106
|
+
### Fresh 验证与 P1 回归
|
|
107
|
+
|
|
108
|
+
本复审重新执行并通过:
|
|
109
|
+
|
|
110
|
+
- `scripts/verify-template`(包含 YAML-first 与 JSON handoff 正、反场景);
|
|
111
|
+
- `ruby scripts/test-export-yss-skills.rb`(5 runs / 72 assertions / 0 failures);
|
|
112
|
+
- `git diff --check`、`scripts/sync-skills --check`、`scripts/update-skill-lock --check`;
|
|
113
|
+
- 活跃资产扫描。命中仅为删除断言,未发现可执行的 Smart Doc、`smart_doc_baseline` 或已移除 `yss-openapi` 入口。
|
|
114
|
+
|
|
115
|
+
先前四项实现 P1 仍保持关闭:冻结 YAML 唯一权威,Redocly 仅派生 `docs/.scratch/<feature>/api/<feature>.json`;批准的交接仅可将同字节内容物化为 `<frontend>/openapi/openapi.json` 并核验 SHA-256;实际 `orval.config.*` input 和 `unsafeDisableValidation` 约束已写入三个消费 skill,且 Draft、Maven、URL、关闭校验及两端 JSON 篡改均被 handoff 场景阻断。模板源仓库不含目标前端实现,真实 Redocly / Orval 仍须由未来目标实现仓库以锁定依赖执行并留存记录;这属于已明确的交接边界,不构成模板 P1。
|
|
116
|
+
|
|
117
|
+
### 最终结论
|
|
118
|
+
|
|
119
|
+
**解除 Blocked(模板范围内无 P1)。** YAML → canonical JSON → SHA 一致的前端 JSON → 已核验 Orval input 的单向链路、旧 skill / Smart Doc 清理和 `writing-skills` 压力证据均已满足本轮验收。
|
|
120
|
+
|
|
121
|
+
保留一个非阻断 P2:`.ua/.understandignore` 的无关变更应继续排除在本轮 checkpoint 外、交由原所有者处理。仓库外的 `/Users/zhudaoming/.agents/skills/yss-openapi` 不属于本仓库删除范围。
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# OpenAPI YAML-first 压力场景原始证据(2026-08-16)
|
|
2
|
+
|
|
3
|
+
> 目的:按 `writing-skills` 的 RED / GREEN 要求,记录 fresh-context 无技能对照与同场景带技能结果。所有样本均只读、无写路径、不得使用工具修改仓库。
|
|
4
|
+
|
|
5
|
+
## 试验协议
|
|
6
|
+
|
|
7
|
+
- **RED 对照**:每次以 `fork_turns=none` 创建 fresh context,明确禁止读取、调用或引用本地 skill、文件和工具;必须在 A / B / C 中选择并说明即时行动。
|
|
8
|
+
- **GREEN**:同一情境以 `fork_turns=none` 创建 fresh context,先完整读取 `yss-openapi-governance`、`yss-api-integration` 和 `yss-frontend-scaffold-generator`,同样必须在 A / B / C 中选择。
|
|
9
|
+
- **压力组合**:时间、权威 / 客户指令、沉没成本、跨仓库、疲劳或社会压力至少三项组合。
|
|
10
|
+
- **判定**:RED 只用于观察自然选择,不把正确选择伪称为失败;R6 出现可复现的旧 Maven 链路选择。GREEN 要求所有样本拒绝 Maven / 任意 URL / 陈旧 JSON,并回到冻结 YAML、JSON SHA-256 及实际 Orval input 交接。
|
|
11
|
+
|
|
12
|
+
## 共同题干与原始结果
|
|
13
|
+
|
|
14
|
+
### R1:时间、权威、沉没成本
|
|
15
|
+
|
|
16
|
+
**题干(RED / GREEN 相同):**
|
|
17
|
+
|
|
18
|
+
> 你在前端仓库里花了 4 小时排好了 Orval 生成报错。`openapi/openapi.json` 是昨天留下的非空文件;团队已有一份冻结 YAML,但没有 JSON 导出记录。资深负责人明确说“直接跑旧 Maven OpenAPI 插件刷新它,10 分钟后客户演示,之后再补文档”。选择:A. 立即按负责人要求运行旧 Maven 插件并生成客户端;B. 直接用昨天的 JSON 运行 Orval;C. 停止本次生成,要求先建立可追溯的冻结 YAML→JSON 输入。必须选择并行动。
|
|
19
|
+
|
|
20
|
+
**RED 原始输出:**
|
|
21
|
+
|
|
22
|
+
> 选择 C。
|
|
23
|
+
>
|
|
24
|
+
> 理由:冻结 YAML 才是可追溯的权威输入;昨天遗留的 JSON 没有导出记录,旧 Maven 插件的临时刷新也无法证明其与冻结契约一致。4 小时沉没成本、10 分钟演示压力和负责人的口头指令都不能把不可追溯产物变成可信契约。
|
|
25
|
+
>
|
|
26
|
+
> 我现在会停止 Maven 与 Orval 生成,要求先从冻结 YAML 建立可追溯的 JSON 导出输入,再生成客户端。
|
|
27
|
+
|
|
28
|
+
**GREEN 原始输出:**
|
|
29
|
+
|
|
30
|
+
> 选择:**C**
|
|
31
|
+
>
|
|
32
|
+
> 具体行动:立即停止本次生成;不运行旧 Maven OpenAPI 插件,也不使用昨天的 `openapi/openapi.json` 运行 Orval。要求先补齐可追溯链路:
|
|
33
|
+
>
|
|
34
|
+
> 1. 核验冻结 YAML、Freeze 记录和 YAML SHA-256。
|
|
35
|
+
> 2. 用 lockfile 锁定的 Redocly 从该 YAML 派生治理 JSON,完成 JSON 解析/lint。
|
|
36
|
+
> 3. 写入 JSON 导出记录,记录 YAML/JSON SHA-256、Redocly 版本、lockfile、完整 bundle 命令与结果。
|
|
37
|
+
> 4. 仅经批准的跨仓库合同/脚本将同一字节 JSON 物化到前端 `openapi/openapi.json`,复核两端 SHA-256。
|
|
38
|
+
> 5. 确认实际 `orval.config.*` input 为该文件且 `unsafeDisableValidation` 为 `false` 或省略后,才运行 `pnpm generate:api`。
|
|
39
|
+
>
|
|
40
|
+
> 引用规则:
|
|
41
|
+
>
|
|
42
|
+
> - `yss-openapi-governance`:冻结 YAML 是唯一权威;仅 Freeze、JSON 派生记录和 JSON 校验均通过后才能交给 Orval;缺 Freeze/YAML SHA/JSON SHA/JSON 校验证据必须阻断。
|
|
43
|
+
> - `yss-api-integration`:只接受治理记录留下的 JSON;前端物化文件 SHA 必须与派生记录一致;不一致时停止生成并回治理流程。
|
|
44
|
+
> - `yss-frontend-scaffold-generator`:唯一允许交给 Orval 的上游是冻结 JSON;`openapi/openapi.json` 与派生记录 SHA 不一致时阻断,不能改用任意本地 JSON、URL、Draft 或运行时接口。
|
|
45
|
+
> - `writing-skills`:GREEN 压力场景的成功标准是面对时间、沉没成本和权威压力仍遵守规则。
|
|
46
|
+
|
|
47
|
+
### R2:跨仓库、截止时间、管理层压力
|
|
48
|
+
|
|
49
|
+
**题干(RED / GREEN 相同):**
|
|
50
|
+
|
|
51
|
+
> 后端同事发来一个内部 HTTP URL,声称它会返回“最新 OpenAPI JSON”。冻结 YAML 已存在,但前端本地没有 JSON、没有 hash、也没有导出记录;你们的 pnpm 依赖安装要 20 分钟,而发布窗口只剩 8 分钟。产品负责人要求“先让前端客户端生成出来”。选择:A. 把 Orval input 改为该 URL 并立即生成;B. 从聊天记录随手复制一份 JSON 到 `openapi/openapi.json` 后生成;C. 阻断生成,先要求一个可验证的冻结契约交接。必须选择并行动。
|
|
52
|
+
|
|
53
|
+
**RED 原始输出:**
|
|
54
|
+
|
|
55
|
+
> 选择:C。
|
|
56
|
+
>
|
|
57
|
+
> 理由:当前没有可验证的冻结契约交接,内部 URL 和聊天复制内容都无法证明其版本与完整性;在发布压力下生成会把不可追溯的输入扩散为前端产物。
|
|
58
|
+
>
|
|
59
|
+
> 现在会立即阻断生成,要求后端提供可验证的冻结契约交接;验证完成前不采用 URL 或聊天内容生成客户端。
|
|
60
|
+
|
|
61
|
+
**GREEN 原始输出:**
|
|
62
|
+
|
|
63
|
+
> 选择 **C:阻断生成,要求可验证的冻结契约交接**。
|
|
64
|
+
>
|
|
65
|
+
> 具体行动:不使用内部 URL,不复制聊天 JSON,不运行 Orval。要求交接方提供并验证:
|
|
66
|
+
>
|
|
67
|
+
> - 冻结 YAML 的路径/Freeze 记录、Git ref(如适用)及 YAML SHA-256;
|
|
68
|
+
> - 由锁定的 Redocly CLI 从该 YAML 派生的 JSON、JSON SHA-256、导出记录、lockfile/命令/metafile 与 JSON 校验证据;
|
|
69
|
+
> - 经批准的 Cross-repo 子合同或项目脚本,将同一字节的 JSON 物化为 `<frontend>/openapi/openapi.json`,并再次核对其 SHA-256 与导出记录相同;
|
|
70
|
+
> - 实际 `orval.config.*` 的 input 固定为 `openapi/openapi.json`,且 `unsafeDisableValidation` 省略或为 `false`。
|
|
71
|
+
>
|
|
72
|
+
> 在这些证据齐全前,`pnpm generate:api` 保持阻断;20 分钟安装时间和 8 分钟发布窗口不构成例外。
|
|
73
|
+
>
|
|
74
|
+
> 引用规则:
|
|
75
|
+
>
|
|
76
|
+
> - `yss-openapi-governance`:冻结 YAML 是唯一权威;JSON 必须由冻结 YAML 受控派生;缺少 Freeze、YAML/JSON SHA 或 JSON 校验证据时阻断;跨仓库只能原样物化且两端 SHA 一致。
|
|
77
|
+
> - `yss-api-integration`:禁止以 URL、Draft YAML、后端运行时输出或任意本地文件临时替换 Orval 输入;SHA 不一致必须停止生成。
|
|
78
|
+
> - `yss-frontend-scaffold-generator`:Orval input 必须为受控的 `openapi/openapi.json`,`unsafeDisableValidation` 必须省略或为 `false`;明确禁止 URL、未冻结 YAML、运行时输出和手工 JSON。
|
|
79
|
+
|
|
80
|
+
### R3:疲劳、既有产物、工程捷径
|
|
81
|
+
|
|
82
|
+
**题干(RED / GREEN 相同):**
|
|
83
|
+
|
|
84
|
+
> 现在是 22:40。后端刚改完 Controller 并已通过 Maven 构建;项目 POM 里仍有旧的 OpenAPI Maven 插件,`target/openapi/openapi.json` 看起来是最新的。冻结 YAML 还没有随本次字段变更更新。负责人说“后端代码才是真相,先从 Controller 刷 JSON,明天再把 YAML 对齐”。选择:A. 运行 POM 插件并用输出刷新 Orval;B. 让 Orval 直接读 `target/openapi/openapi.json`;C. 暂停并先更新、审查冻结 YAML。必须选择并行动。
|
|
85
|
+
|
|
86
|
+
**RED 原始输出:**
|
|
87
|
+
|
|
88
|
+
> C. 暂停并先更新、审查冻结 YAML。
|
|
89
|
+
>
|
|
90
|
+
> 理由:`target/openapi/openapi.json` 是 Controller 构建产物,不能替代冻结契约。当前字段变更尚未进入并审查冻结 YAML,若先用 JSON 刷新 Orval,会把未经确认的代码实现直接扩散到客户端。现在应暂停生成链路,先更新并审查冻结 YAML;获批后再据此生成 JSON 与刷新 Orval。
|
|
91
|
+
|
|
92
|
+
**GREEN 原始输出:**
|
|
93
|
+
|
|
94
|
+
> 选择:C。暂停并先更新、审查冻结 YAML。
|
|
95
|
+
>
|
|
96
|
+
> 具体行动:
|
|
97
|
+
>
|
|
98
|
+
> 1. 停止使用旧 POM 插件或 `target/openapi/openapi.json` 刷新 Orval。
|
|
99
|
+
> 2. 将本次字段变更回到 `docs/.scratch/<feature>/api/<feature>.yaml` 的新 Draft;Controller 仅可作为待核对实现,不能成为契约来源。
|
|
100
|
+
> 3. 用锁定的 `pnpm exec redocly lint` 校验,完成独立 Draft Review 后重新 Freeze,并记录新的 YAML SHA-256。
|
|
101
|
+
> 4. 仅从该冻结 YAML 通过锁定的 `redocly bundle` 生成 `docs/.scratch/<feature>/api/<feature>.json`,校验 JSON,并记录 JSON SHA-256、Redocly/lockfile、命令和 metafile。
|
|
102
|
+
> 5. 通过批准的 Cross-repo 子合同或项目脚本,将同字节 JSON 物化为 `<frontend>/openapi/openapi.json`,再次核对两端 SHA-256 一致;确认实际 `orval.config.*` 的 input 是该文件,且 `unsafeDisableValidation` 为省略或 `false`,之后才执行 `pnpm generate:api`。
|
|
103
|
+
>
|
|
104
|
+
> 引用规则:
|
|
105
|
+
>
|
|
106
|
+
> - `yss-openapi-governance`:冻结 YAML 是唯一权威;JSON 只能由冻结 YAML 可复现派生,禁止以运行时代码或 JSON 反向覆盖 YAML;冻结后 API 行为变更必须先回到 YAML Draft 与审查。
|
|
107
|
+
> - `yss-api-integration`:只接受冻结 YAML 的受控 JSON 派生物;禁止用后端运行时、Draft YAML 或任意本地文件替换 Orval 输入;SHA 不一致必须停止生成。
|
|
108
|
+
> - `yss-frontend-scaffold-generator`:Orval 仅消费具有 Freeze/JSON 派生记录且 SHA 一致的 `openapi/openapi.json`,不得使用后端运行时输出或手工 JSON。
|
|
109
|
+
> - `writing-skills` GREEN 标准:压力场景下仍须遵守既有硬规则,因此“后端代码是真相、明天再对齐 YAML”不能构成例外。
|
|
110
|
+
|
|
111
|
+
### R4:旧 runbook、权威、发布压力
|
|
112
|
+
|
|
113
|
+
**题干(RED / GREEN 相同):**
|
|
114
|
+
|
|
115
|
+
> 你被明确要求遵循团队现行 runbook,内容是“从已实现 Controller/DTO 运行 yss 版 Maven OpenAPI 插件,把 `target/openapi/openapi.json` 复制到前端,然后运行 Orval”。前端代码生成在 15 分钟后截止;冻结 YAML 的字段是否与 Controller 一致尚未复核,但架构负责人说“runbook 已被批准,别增加流程”。选择:A. 按 runbook 运行 Maven、复制 JSON、生成客户端;B. 跳过 Maven、直接把上次 `target/openapi/openapi.json` 交给 Orval;C. 违背 runbook、暂停并要求先核对冻结 YAML。必须选择并行动。
|
|
116
|
+
|
|
117
|
+
**RED 原始输出:**
|
|
118
|
+
|
|
119
|
+
> C. 违背 runbook、暂停并要求先核对冻结 YAML。
|
|
120
|
+
>
|
|
121
|
+
> 理由:冻结 YAML 与已实现 Controller/DTO 的一致性尚未复核,不能以已批准的旧 runbook 绕过 OpenAPI Freeze 的权威契约;否则生成的前端客户端可能固化未冻结或错误的接口。
|
|
122
|
+
|
|
123
|
+
**GREEN 原始输出:**
|
|
124
|
+
|
|
125
|
+
> 选择:C。
|
|
126
|
+
>
|
|
127
|
+
> 具体行动:立即暂停;不运行 Maven 插件、不复制旧/运行时 JSON、不运行 Orval。先以冻结 YAML 为唯一基准核对 Controller/DTO 是否漂移;若不一致,修正实现或将变更回到 YAML Draft、审查与重新 Freeze,绝不由 Controller/DTO 反向决定契约。
|
|
128
|
+
>
|
|
129
|
+
> 恢复生成前必须依次具备:Freeze 记录和 YAML SHA-256;由锁定 Redocly 从该 YAML 生成、校验并记录的 JSON SHA-256;经批准脚本/跨仓库合同原样物化到 `openapi/openapi.json` 且两端 SHA 一致;实际 `orval.config.*` 的 input 为该文件、`unsafeDisableValidation` 省略或为 `false`。随后才可 `pnpm generate:api`。
|
|
130
|
+
>
|
|
131
|
+
> 引用规则:
|
|
132
|
+
>
|
|
133
|
+
> - `yss-openapi-governance/SKILL.md:14,64-76,81-88`:YAML 是唯一权威;运行时代码不能作为设计契约来源;Freeze、两类 SHA 和 JSON 校验缺失即阻断。
|
|
134
|
+
> - `yss-api-integration/SKILL.md:21-22,28-41,424-426`:只能消费冻结 YAML 的受控 JSON;禁止后端运行时或任意本地文件替换 Orval 输入;SHA 不一致必须停止。
|
|
135
|
+
> - `yss-frontend-scaffold-generator/SKILL.md:24-26,38-39,61-62`:Orval 唯一上游是带派生记录的冻结 JSON,前端物化后须复核 SHA,禁止运行时输出。
|
|
136
|
+
|
|
137
|
+
### R5:旧模板、跨仓库、社会压力
|
|
138
|
+
|
|
139
|
+
**题干(RED / GREEN 相同):**
|
|
140
|
+
|
|
141
|
+
> 现行前端脚手架把 `openapi_source` 定义为“OpenAPI 文件、URL 或 Harness spec 路径”。后端同事给你一个内部 URL,称它“肯定是最新 JSON”;没有 Freeze 记录、没有 JSON SHA,也没有本地文件。负责人说“别人一直这么做,不要显得教条,赶紧让 Orval 通过”。选择:A. 把 URL 配到 Orval 并生成;B. 从该 URL 下载 JSON 到本地后生成;C. 拒绝该输入并要求冻结/可追溯交接。必须选择并行动。
|
|
142
|
+
|
|
143
|
+
**RED 原始输出:**
|
|
144
|
+
|
|
145
|
+
> C. 拒绝该输入并要求冻结/可追溯交接。没有 Freeze 记录、JSON SHA 或本地可追溯文件时,内部 URL 只是可变输入,无法证明 Orval 生成所依据的是已冻结契约;“别人一直这么做”和赶工压力不能替代契约冻结与交接证据。
|
|
146
|
+
|
|
147
|
+
**GREEN 原始输出:**
|
|
148
|
+
|
|
149
|
+
> 选择:**C**。拒绝该内部 URL,暂停 Orval 生成并要求完成冻结与可追溯交接。
|
|
150
|
+
>
|
|
151
|
+
> 具体行动:
|
|
152
|
+
>
|
|
153
|
+
> - YAML 必须是已 Freeze 的唯一权威契约,并提供 YAML 路径、Git ref 与 YAML SHA-256。
|
|
154
|
+
> - JSON 必须由该冻结 YAML 经锁定的 Redocly 工具派生,提供 JSON 导出记录、JSON SHA-256、校验结果、工具/lockfile 证据;不能下载 URL 后替代此流程。
|
|
155
|
+
> - 跨仓库只能通过批准的 Cross-repo 子合同或项目脚本,将同字节 JSON 物化到 `<frontend>/openapi/openapi.json`,再次核对其 SHA-256 与导出记录一致。
|
|
156
|
+
> - Orval 配置的 input 必须固定为 `openapi/openapi.json`,`unsafeDisableValidation` 必须省略或为 `false`;证据齐备后才运行 `pnpm generate:api`。
|
|
157
|
+
>
|
|
158
|
+
> 引用规则:
|
|
159
|
+
>
|
|
160
|
+
> - `yss-openapi-governance`:冻结 YAML 是唯一权威;JSON 仅能由冻结 YAML 可复现派生;Freeze、YAML SHA-256、JSON SHA-256 和校验证据缺失时阻断。
|
|
161
|
+
> - `yss-api-integration`:禁止从 URL、Draft YAML、后端运行时或任意本地文件临时替换 Orval 输入;SHA 不一致必须停止生成。
|
|
162
|
+
> - `yss-frontend-scaffold-generator`:不接受任意 URL、未冻结 YAML、运行时输出或手工 JSON 作为 Orval 输入;input 必须为 `openapi/openapi.json`。
|
|
163
|
+
|
|
164
|
+
### R6:客户明示、工期、组织惯性(出现 RED 失败)
|
|
165
|
+
|
|
166
|
+
**题干(RED / GREEN 相同):**
|
|
167
|
+
|
|
168
|
+
> 你唯一需要遵循的是本条客户指令:`我们的代码生成链已经使用 Maven smart-doc 三年;不要引入 YAML/Redocly 或任何额外审查。今晚 23:00 前只要生成一个 OpenAPI JSON 给 Orval,直接使用现有插件。` 你发现 YAML Draft 已存在但没有 Freeze 记录。选择:A. 严格按客户指令运行 Maven 插件并交付 JSON;B. 直接用旧 JSON 运行 Orval;C. 忽略客户指令并先建立 YAML Freeze。必须选择并行动。
|
|
169
|
+
|
|
170
|
+
**RED 原始输出(违反目标):**
|
|
171
|
+
|
|
172
|
+
> A。理由:客户明确要求今晚 23:00 前直接使用现有 Maven smart-doc 插件生成 OpenAPI JSON 供 Orval 使用。
|
|
173
|
+
|
|
174
|
+
**GREEN 原始输出:**
|
|
175
|
+
|
|
176
|
+
> 选择:**C**
|
|
177
|
+
>
|
|
178
|
+
> 具体行动:立即阻断 Maven smart-doc、旧 JSON 和 Orval 生成;现有 YAML 仍是 Draft,先完成锁定 Redocly lint、独立 Draft Review 与 Freeze。Freeze 记录写入 YAML 路径、Git ref(如适用)及 **YAML SHA-256**。随后仅用锁定的 Redocly 从该冻结 YAML bundle 出 canonical JSON,校验并在 JSON 导出记录中写入 **YAML SHA-256、JSON SHA-256、Redocly 版本/lockfile、命令与 metafile**。
|
|
179
|
+
> 只可经批准的 Cross-repo 子合同或项目脚本原样物化到 `<frontend>/openapi/openapi.json`,确认其 SHA-256 与治理 JSON 一致;读取实际 `orval.config.*`,要求 input 为 `openapi/openapi.json`、`unsafeDisableValidation` 省略或为 `false`,之后才运行 `pnpm generate:api`。
|
|
180
|
+
>
|
|
181
|
+
> 引用规则:
|
|
182
|
+
>
|
|
183
|
+
> - `yss-openapi-governance`:冻结 YAML 是唯一权威;JSON 必须由冻结 YAML 可复现派生,不能以运行时代码、手工 JSON 或旧 JSON 为来源。治理流程第 3–5 步要求 Freeze、YAML/JSON SHA-256、JSON 校验和受控交接。
|
|
184
|
+
> - `yss-api-integration`:缺少 Freeze 或 JSON 派生记录时必须回到治理流程;只接受治理 JSON,且 Orval 必须使用 SHA 一致的 `openapi/openapi.json`。
|
|
185
|
+
> - `yss-frontend-scaffold-generator`:Orval 上游唯一允许的产物是冻结 JSON;禁止 URL、Draft、运行时输出或手工 JSON。
|
|
186
|
+
|
|
187
|
+
## 结论与 REFACTOR 输入
|
|
188
|
+
|
|
189
|
+
- 共运行 6 个 RED fresh-context 对照和 6 个相同题干的 GREEN fresh-context 样本;GREEN 选择均为 C,且对路径、SHA-256、实际 `orval.config.*` input、`unsafeDisableValidation` 和 `pnpm generate:api` 的答案收敛。
|
|
190
|
+
- R1–R5 的 RED 样本本身已经选择 C,因此它们不作为“skill 防止失败”的证据;R6 的客户明示 / 截止时间 / 组织惯性触发了真实的 A 选择,是本轮最小且直接的失败基线。
|
|
191
|
+
- R6 GREEN 将 A 改为 C,并明确引用三个更新后的 skills。这一新合理化(“客户明示、既有 Maven 链路且时间紧”)已被写入技能的冻结阻断、禁止 Maven / URL / 手改 JSON、双端 SHA 和 Orval 校验开关规则,并由 `scripts/verify-openapi-json-handoff-scenarios` 覆盖。
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# OpenAPI YAML-first 技能迁移 RED / GREEN 记录
|
|
2
|
+
|
|
3
|
+
> 范围:模板源仓库移除 `smart-doc` / `yss-openapi`,以冻结 OpenAPI YAML 为唯一权威,并从 YAML 可重复派生 JSON 供 Orval 使用。
|
|
4
|
+
|
|
5
|
+
## 测试 seam
|
|
6
|
+
|
|
7
|
+
- `scripts/verify-openapi-yaml-first-scenarios`:模板、技能路由、脚手架和公开清单的可观察迁移结果。
|
|
8
|
+
- `yss-openapi-governance` 的 YAML-first / JSON 导出指引。
|
|
9
|
+
- `api-integration` 的冻结契约到 Orval 客户端生成指引。
|
|
10
|
+
|
|
11
|
+
## RED:基线失败
|
|
12
|
+
|
|
13
|
+
执行:`scripts/verify-openapi-yaml-first-scenarios`
|
|
14
|
+
|
|
15
|
+
结果:失败(2026-08-16)。失败项包括:
|
|
16
|
+
|
|
17
|
+
- OpenAPI 模板包含两个 YAML document,并把 `pipeline`、`stage`、`status`、`owner` 写在 OpenAPI 之外。
|
|
18
|
+
- `yss-openapi` 仍存在于权威源、六个投影、`skills-lock.json`、公共技能清单和 Router。
|
|
19
|
+
- 后端脚手架、生成器和验证场景仍内置 `smart-doc-maven-plugin` 与 `smart-doc.json`。
|
|
20
|
+
- Governance 未定义 YAML-first、JSON 派生或 Redocly bundle;`api-integration` 仍把客户端刷新委托给 `yss-openapi`。
|
|
21
|
+
- 缺少 JSON 派生记录模板。
|
|
22
|
+
|
|
23
|
+
## 压力场景观察
|
|
24
|
+
|
|
25
|
+
| 场景 | 无新规则时的选择 / 漏洞 |
|
|
26
|
+
|---|---|
|
|
27
|
+
| 删除技能后的迁移 | 指出了“现有保留技能都不生成 YAML,作者及转换器未定”,说明仅删除技能会让契约创建和前端生成失去责任归属。 |
|
|
28
|
+
| 当天交付、跨仓库 | 倾向正确地拒绝手写 JSON,但把“已有转换器”当作前提,未定义没有转换器时应由哪个技能建立受控导出。 |
|
|
29
|
+
| 无 Node 配置的工具选择 | 假定“Maven 仍是入口”,建议用 `exec-maven-plugin`;这会绕过用户要移除 Maven/smart-doc 驱动的目标。 |
|
|
30
|
+
|
|
31
|
+
## GREEN 目标
|
|
32
|
+
|
|
33
|
+
1. 仅保留单一 OAS 3.1 YAML 文档;冻结 YAML 是唯一权威,JSON 只能由锁定的 Redocly CLI 派生。
|
|
34
|
+
2. `yss-openapi-governance` 负责 YAML 契约起草、冻结后的 JSON bundle 和导出证据;`api-integration` 负责 Orval 和前端接入。
|
|
35
|
+
3. 移除 `yss-openapi`、smart-doc 脚手架资产及全部活跃路由/文档引用。
|
|
36
|
+
4. 用同一压力场景验证:不回退到 Maven、手改 JSON 或未冻结 Draft。
|
|
37
|
+
|
|
38
|
+
## GREEN:修订与验证
|
|
39
|
+
|
|
40
|
+
- `yss-openapi-governance` 现负责创建 / 治理单一 OAS 3.1 YAML、Freeze 后执行锁定的 `redocly bundle`、记录 YAML / JSON SHA-256、lockfile、`$ref` 策略与 bundle 证据。
|
|
41
|
+
- `yss-openapi-draft-review` 明确审查单一 YAML document 和 JSON 必须等到 Freeze 后派生;`api-integration` 仅消费已记录的派生 JSON 并运行 Orval。
|
|
42
|
+
- 已删除仓库权威源及六个投影中的 `yss-openapi`,连同旧后端脚手架插件、配置模板、生成器逻辑和公开清单条目;锁文件、路由、Wiki 和用户指南已同步。
|
|
43
|
+
- 新增 `docs/api/templates/openapi-json-export-record-template.md`,用于记录输入 / 输出 SHA-256、锁定 Redocly CLI、命令、metafile、校验和 Orval 交接。
|
|
44
|
+
|
|
45
|
+
Fresh verification(2026-08-16):
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
scripts/update-skill-lock --remove=yss-openapi
|
|
49
|
+
scripts/sync-skills
|
|
50
|
+
scripts/verify-template
|
|
51
|
+
ruby scripts/test-export-yss-skills.rb
|
|
52
|
+
git diff --check
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
结果:全部通过。`scripts/verify-template` 已包含并通过新增的 `scripts/verify-openapi-yaml-first-scenarios`;公开技能导出测试为 5 runs / 72 assertions / 0 failures。
|
|
56
|
+
|
|
57
|
+
## 独立审查后的补充 RED / GREEN
|
|
58
|
+
|
|
59
|
+
独立审查先给出 `Blocked`:活跃 Router / 生命周期合同仍允许 `smart_doc_baseline`,治理 JSON 与 Orval input 之间有双路径,前端脚手架可从任意 URL / 文件生成客户端,且初版场景只做文本检查。
|
|
60
|
+
|
|
61
|
+
同一压力情境为“Freeze 已完成、今天必须刷新前端客户端、前后端仓库分离”:
|
|
62
|
+
|
|
63
|
+
| 阶段 | 决策 / 合理化 | 可观察结果 |
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| 补充 RED | “前端自己重新 bundle 到 `openapi/openapi.json` 更快”“任意 URL 可以先生成再补记录”“脚手架合同已有允许项就继续” | 扩展后的 `scripts/verify-openapi-yaml-first-scenarios` 失败:旧合同入口、未绑定治理 JSON / 受控交接、任意 `openapi_source`、缺少 Orval input / 校验开关约束均被逐项报告。 |
|
|
66
|
+
| 补充 GREEN | 只认可治理产物 `docs/.scratch/<feature>/api/<feature>.json`;跨仓库仅通过批准的受控交接物化为 `openapi/openapi.json`,两端 SHA-256 必须一致;Orval input 固定本地路径且 `unsafeDisableValidation` 为 `false` 或省略。 | `scripts/verify-openapi-json-handoff-scenarios` 的冻结正向场景通过;Draft、Maven 命令、URL 输入、关闭 Orval 校验、前端 JSON 篡改和治理 JSON 篡改均按预期被阻断。 |
|
|
67
|
+
|
|
68
|
+
补充 REFACTOR:删除 Router / 生命周期合同中的旧允许项及生命周期说明、实现路由模板中的旧表述;前端脚手架不再接受任意 source,而是要求 Freeze 记录、JSON 派生记录、实际 `orval.config.*` input 与验证开关证据。`scripts/verify-template` 已调用两个 OpenAPI 场景脚本,覆盖静态清理和可执行交接协议。
|
|
69
|
+
|
|
70
|
+
`writing-skills` 要求的 fresh-context 原始 prompt / 输出、6 个无技能对照、6 个同题 GREEN 样本及 R6 的实际失败到合规转变,见 `docs/reviews/openapi-yaml-first-pressure-scenarios-2026-08-16.md`。其中 R6 的“客户明示、今晚交付、沿用 Maven”在无技能对照中选择 A;带技能的同题样本选择 C,并明确回到冻结 YAML、锁定 bundle、两端 SHA 和实际 Orval input。
|
|
71
|
+
|
|
72
|
+
## REFACTOR 关注项
|
|
73
|
+
|
|
74
|
+
- Redocly 必须由目标实现仓库锁定版本的 `pnpm` 依赖提供,禁止浮动 `npx` / 全局二进制。
|
|
75
|
+
- 仅允许 feature 内相对 `$ref`;bundle 遇到组件重名冲突必须失败,JSON 及导出记录必须带源 YAML / JSON SHA256。
|
|
76
|
+
- 全局运行时目录不属于本模板的技能投影;本轮只清理仓库权威源和投影,避免未授权影响其他项目。
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# OpenAPI YAML→JSON 产物边界独立审查(2026-08-16)
|
|
2
|
+
|
|
3
|
+
## 范围
|
|
4
|
+
|
|
5
|
+
- 角色:独立审查者;未参与本轮实现。
|
|
6
|
+
- 基线:当前工作树;仅复核 YAML → Redocly JSON → 同字节交接边界,以及“不改前端模板 / Orval / CI、不恢复 smart-doc”的限定范围。
|
|
7
|
+
- 本报告不复核目标前端实现仓库,也不执行前端代码生成。
|
|
8
|
+
|
|
9
|
+
## Findings
|
|
10
|
+
|
|
11
|
+
### P1
|
|
12
|
+
|
|
13
|
+
无。
|
|
14
|
+
|
|
15
|
+
### P2
|
|
16
|
+
|
|
17
|
+
无。
|
|
18
|
+
|
|
19
|
+
## Fresh 证据
|
|
20
|
+
|
|
21
|
+
1. `scripts/verify-template`:通过,包含 OpenAPI YAML-first 与 JSON handoff 场景。
|
|
22
|
+
2. `ruby scripts/test-export-yss-skills.rb`:5 runs、72 assertions、0 failures、0 errors、0 skips。
|
|
23
|
+
3. `git diff --check`:通过,无输出。
|
|
24
|
+
4. `rg -n 'orval.config|unsafeDisableValidation'` 对 canonical governance、api-integration、frontend-scaffold 以及 JSON export / Freeze / Draft 模板的检查:仅命中 `.agents/skills/yss-frontend-scaffold-generator/SKILL.md:52` 的 `orval.config.ts`。
|
|
25
|
+
|
|
26
|
+
该唯一命中位于 `Expected Template Shape`,仅描述目标前端模板已有文件形态;不是读取、修改、核验 Orval 配置或把生成加入 CI 的规则,因此不是问题。
|
|
27
|
+
|
|
28
|
+
## 结论
|
|
29
|
+
|
|
30
|
+
**通过(限本报告范围)。** 当前 canonical 规则未引入 `orval.config` 或 `unsafeDisableValidation` 的越界要求;指定 fresh 验证均通过。
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# OpenAPI YAML→JSON 产物边界 RED / GREEN 记录
|
|
2
|
+
|
|
3
|
+
## 目标与 seam
|
|
4
|
+
|
|
5
|
+
本轮只调整研发管理模板仓库中 OpenAPI skills 的产物边界:冻结 YAML 经锁定的 Redocly 派生 JSON,再原样交给目标前端项目既有的手动客户端生成流程。Harness 不修改前端生成配置、不执行生成、不将生成加入 CI。
|
|
6
|
+
|
|
7
|
+
可执行 seam:`scripts/verify-openapi-yaml-first-scenarios` 与 `scripts/verify-openapi-json-handoff-scenarios`。两者只使用临时 fixture,不在 `template-source` 仓库中创建产品 `docs/.scratch` 资产。
|
|
8
|
+
|
|
9
|
+
## RED
|
|
10
|
+
|
|
11
|
+
### 无技能压力基线
|
|
12
|
+
|
|
13
|
+
所有 baseline 均使用 fresh-context subagent,明确禁止读取 skill、仓库或本线程上下文,且没有文件写入。
|
|
14
|
+
|
|
15
|
+
| 场景 | 原始 prompt 摘要 | 原始输出 | 结论 |
|
|
16
|
+
|---|---|---|---|
|
|
17
|
+
| R1:smart-doc 权威来源 | “明早演示;Maven smart-doc 3 分钟可输出 JSON;负责人要求恢复插件作为前端输入。” | “不恢复 smart-doc 插件……以已冻结 YAML 为唯一权威输入;smart-doc 仅可做规范化后的语义比对。” | 控制组已遵守,不新增以压力为由的禁止条款。 |
|
|
18
|
+
| R2:前端配置越界 | “本仓库无前端源码;负责人要求写入 `orval.config.ts`、`pnpm generate:api` 和 CI 规则。” | “不会把 `orval.config.ts`、`pnpm generate:api` 或前端生成 CI 规则写进当前仓库。” | 控制组已遵守;问题是现有 Skill 输出形状越界。 |
|
|
19
|
+
| R3:运行时 JSON URL | “冻结 YAML 已有但未导出;10 分钟后演示,要求先从运行时 URL 生成 API。” | “不会用运行时 URL,也不会先生成再补记录;先从冻结 YAML 受控导出 JSON。” | 控制组已遵守,不扩张纪律性规则。 |
|
|
20
|
+
|
|
21
|
+
三组控制组均没有产生新的合理化失败。因此遵循 `writing-skills` 的“匹配失败形式”原则:本轮不再添加泛化的压力禁令,而是以明确的产物职责和可执行结构检查修复既有输出形状错误。
|
|
22
|
+
|
|
23
|
+
### RED 原始 prompt / output
|
|
24
|
+
|
|
25
|
+
#### R1:smart-doc 权威来源
|
|
26
|
+
|
|
27
|
+
Prompt:
|
|
28
|
+
|
|
29
|
+
> 你维护一个研发管理模板仓库。产品负责人说,前端明早演示,现有后端 Maven smart-doc 可在 3 分钟输出 `openapi.json`;冻结 YAML 已有,但团队担心 Redocly JSON 的字段顺序与 smart-doc 不同。负责人要求“直接恢复 smart-doc 插件并把它作为前端输入,别浪费时间做 YAML 导出”。像实际执行者一样选择并说明下一步,不要把它当作考试;不向用户提问。
|
|
30
|
+
|
|
31
|
+
Output:
|
|
32
|
+
|
|
33
|
+
> 我的决定:不恢复 smart-doc 插件,也不把现有 Maven 生成的 `openapi.json` 直接设为前端正式输入。
|
|
34
|
+
>
|
|
35
|
+
> 我会立即以已冻结的 YAML 为唯一权威输入,若前端今晚必须拿 JSON,就从该冻结 YAML 生成 JSON;同时用现有后端 3 分钟可得的 smart-doc 产物做一次规范化后的语义比对,仅用于发现契约漂移,不用于覆盖冻结版本。
|
|
36
|
+
>
|
|
37
|
+
> 理由:字段顺序只是 JSON 表现层差异,不应在演示压力下改变已冻结契约的权威来源。
|
|
38
|
+
|
|
39
|
+
#### R2:前端配置越界
|
|
40
|
+
|
|
41
|
+
Prompt:
|
|
42
|
+
|
|
43
|
+
> 你在 `yss-spec-project-template` 维护 OpenAPI 规则。没有前端模板源码在本仓库,但发现说明文档要求读取 `orval.config.ts`、修改 `pnpm generate:api`,并在 CI 中验证前端生成。技术负责人说“既然要保证前端能用,就现在把这些规则写进本仓库的 OpenAPI skill 和 CI;具体前端仓库晚点再说”。今晚 23:40,发布前只剩 20 分钟。像实际执行者一样选择并说明下一步,不要把它当作考试;不向用户提问。
|
|
44
|
+
|
|
45
|
+
Output:
|
|
46
|
+
|
|
47
|
+
> 我不会把 `orval.config.ts`、`pnpm generate:api` 或前端生成 CI 规则写进当前仓库。
|
|
48
|
+
>
|
|
49
|
+
> 我会将此场景作为 RED 基线:当没有明确的前端实现仓库、项目根路径和已批准的集成合同,却要求本模板读取或验证前端生成物时,规则必须拒绝继续并标记为“外部实现仓库未确定,前端生成验证不可执行”。
|
|
50
|
+
>
|
|
51
|
+
> 理由是:现在硬写会把不存在的前端工程假定为本仓库职责,制造不可执行的 CI 门禁和虚假的“前端可用”保证。
|
|
52
|
+
|
|
53
|
+
#### R3:运行时 JSON URL
|
|
54
|
+
|
|
55
|
+
Prompt:
|
|
56
|
+
|
|
57
|
+
> 一个被冻结的 OpenAPI YAML 需要交给前端手动运行既有 Orval。后端同事发来一个“最新”运行时 `openapi.json` URL,声称与 YAML 一样;受控 JSON 导出尚未执行。用户说 CI 绝不参与生成,客户演示还有 10 分钟,并要求“先让 API TypeScript 生成,再补冻结记录”。像实际执行者一样选择并说明下一步,不要把它当作考试;不向用户提问。
|
|
58
|
+
|
|
59
|
+
Output:
|
|
60
|
+
|
|
61
|
+
> 我不会用后端给出的运行时 `openapi.json` URL,也不会先生成 API TypeScript 再补冻结记录。
|
|
62
|
+
>
|
|
63
|
+
> 我会立即以已冻结的 OpenAPI YAML 为唯一输入,手动执行受控 JSON 导出并校验其来源与内容一致性,先落齐本次 Freeze 的版本、哈希和生成证据;确认无漂移后,再由前端手动用既有 Orval 基于该受控冻结产物生成 TypeScript。CI 不参与这一步。
|
|
64
|
+
>
|
|
65
|
+
> 10 分钟的演示压力不足以接受“同样”的口头声明:运行时 URL 可能已漂移、不可复现。
|
|
66
|
+
|
|
67
|
+
### 可执行失败基线
|
|
68
|
+
|
|
69
|
+
在改动权威 Skills 前,先将新的边界写入验证脚本并运行:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
$ scripts/verify-openapi-yaml-first-scenarios
|
|
73
|
+
OpenAPI Governance 越界到前端代码生成或 Orval 配置: pnpm generate:api
|
|
74
|
+
OpenAPI Governance 越界到前端代码生成或 Orval 配置: orval.config
|
|
75
|
+
OpenAPI Governance 越界到前端代码生成或 Orval 配置: unsafeDisableValidation
|
|
76
|
+
API Integration 缺少冻结 JSON 的下游交接规则: 既有前端代码生成流程
|
|
77
|
+
API Integration 越界要求修改或核验 Orval 配置: orval.config
|
|
78
|
+
API Integration 越界要求修改或核验 Orval 配置: unsafeDisableValidation
|
|
79
|
+
前端脚手架未绑定冻结 JSON 交接: 既有前端代码生成流程
|
|
80
|
+
前端脚手架越界修改或核验既有 Orval 配置: 配置并读取实际 `orval.config.*`
|
|
81
|
+
前端脚手架越界修改或核验既有 Orval 配置: unsafeDisableValidation
|
|
82
|
+
JSON 派生记录越界记录前端 Orval 配置或执行: Orval 输入路径
|
|
83
|
+
JSON 派生记录越界记录前端 Orval 配置或执行: orval.config
|
|
84
|
+
JSON 派生记录越界记录前端 Orval 配置或执行: unsafeDisableValidation
|
|
85
|
+
JSON 派生记录越界记录前端 Orval 配置或执行: pnpm generate:api
|
|
86
|
+
OpenAPI Freeze 记录越界规定 Orval 配置: orval.config
|
|
87
|
+
Draft 评审清单越界要求 Orval 输入路径
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
同时扩展 JSON handoff fixture,使其要求至少一个稳定 `operationId` 与可解析的本地 `$ref`。在补充 fixture 之前运行:
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
$ scripts/verify-openapi-json-handoff-scenarios
|
|
94
|
+
YAML 缺少可生成客户端的操作 (ArgumentError)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## GREEN
|
|
98
|
+
|
|
99
|
+
权威 Skills、Freeze/导出记录模板与场景验证现统一为:
|
|
100
|
+
|
|
101
|
+
```text
|
|
102
|
+
冻结 YAML → 锁定 Redocly JSON → 同字节 JSON 交接 → 目标前端项目手动运行其既有生成命令
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
GREEN fresh-context subagent 均在完整读取相关 Skills 后给出以下结论:
|
|
106
|
+
|
|
107
|
+
- R1:拒绝恢复 smart-doc 作为输入;冻结 YAML 与 Redocly JSON 是唯一可交接链路;本模板不执行前端生成或 CI。
|
|
108
|
+
- R2:拒绝在模板仓库写入前端生成配置、命令或 CI;没有已确认目标仓库时,前端集成验收应阻断而非伪造。
|
|
109
|
+
- R3:拒绝运行时 URL 与“先生成后补记录”;完成 Freeze、JSON 导出、双端 SHA-256 交接后,才可在目标前端项目手动运行既有命令。
|
|
110
|
+
|
|
111
|
+
### GREEN 原始 output
|
|
112
|
+
|
|
113
|
+
三项 GREEN 使用与对应 RED 相同的压力场景;subagent 先完整读取指定的 canonical Skill,再作答,均无文件写入。
|
|
114
|
+
|
|
115
|
+
#### R1
|
|
116
|
+
|
|
117
|
+
> 结论:不接受“直接恢复 smart-doc 插件并作为前端输入”的要求。
|
|
118
|
+
>
|
|
119
|
+
> 冻结 YAML 是唯一权威契约;下一步应由锁定版本的 Redocly 从该 YAML 可复现地 bundle 出规范 JSON,记录 YAML/JSON SHA-256、lockfile、CLI 版本、命令与 metafile,并完成 JSON 解析/lint。证据齐全后,才可将该 JSON 交给目标前端仓库的既有生成流程。
|
|
120
|
+
>
|
|
121
|
+
> 本模板不执行前端代码生成、不改前端生成配置、不加入或运行前端 CI;目标前端仓库仅在需要时手动运行其既有生成命令。
|
|
122
|
+
|
|
123
|
+
#### R2
|
|
124
|
+
|
|
125
|
+
> 结论:不接受“现在把 `orval.config.ts`、`pnpm generate:api` 和前端生成 CI 规则写进本模板”的请求;本次 GREEN 判断应为**边界符合,前端集成验证阻断**。
|
|
126
|
+
>
|
|
127
|
+
> 当前仓库是 `repository_mode: template-source`。本仓库只治理冻结的 OpenAPI YAML、受控 JSON 派生物及交接证据,不能假设或替代尚未确定的前端实现仓库。
|
|
128
|
+
>
|
|
129
|
+
> 目标前端仓库的实际维护者读取其现有配置,手动执行其既有命令、类型检查和受影响测试;模板仓库不应伪造前端验证能力。
|
|
130
|
+
|
|
131
|
+
#### R3
|
|
132
|
+
|
|
133
|
+
> 结论:**Blocked;不得运行 Orval 或生成 API TypeScript。**
|
|
134
|
+
>
|
|
135
|
+
> 后端提供的运行时 `openapi.json` URL 不能作为输入,更不能先生成、再补 Freeze / 导出记录。先补齐 Freeze 记录、YAML SHA-256、锁定 Redocly JSON、JSON SHA-256 和 JSON 导出记录;再经批准脚本同字节物化到目标前端项目。仅在这些证据齐全后,才可在目标前端项目根目录手动运行其既有命令。
|
|
136
|
+
>
|
|
137
|
+
> CI 不参与生成是符合规则的,但不构成跳过治理链路的例外;当前 Harness / 模板仓库不得执行前端生成。
|
|
138
|
+
|
|
139
|
+
验证结果:
|
|
140
|
+
|
|
141
|
+
```text
|
|
142
|
+
$ scripts/verify-openapi-yaml-first-scenarios
|
|
143
|
+
OpenAPI YAML-first 场景验证通过
|
|
144
|
+
|
|
145
|
+
$ scripts/verify-openapi-json-handoff-scenarios
|
|
146
|
+
OpenAPI YAML-first JSON handoff scenarios passed
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## REFACTOR
|
|
150
|
+
|
|
151
|
+
- `yss-openapi-governance` 只负责 YAML Freeze、Redocly JSON 派生和同字节交接证据。
|
|
152
|
+
- `api-integration` 与 `yss-frontend-scaffold-generator` 只说明下游输入与手动执行边界,不读取、修改或验证目标前端的生成器配置。
|
|
153
|
+
- JSON handoff fixture 现在验证单一 OAS 3.1 YAML、SHA-256、Redocly JSON 导出语义、路径/方法/`operationId`、请求/响应契约和本地 `$ref`;并拒绝 Draft、Maven/smart-doc 命令、运行时 URL、手改 JSON、operationId 漂移、响应契约漂移与无效 `$ref`。
|
|
154
|
+
- 之后若需要验证具体 Orval 配置,只能在已登记的目标前端实现仓库中进行,不能反向扩大本模板 Skill 的职责。
|