create-yss-spec 1.1.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -2
- package/package.json +13 -2
- package/src/cli.js +367 -51
- package/template/.agents/skills/ask-matt/SKILL.md +8 -4
- package/template/.agents/skills/ask-matt/agents/openai.yaml +5 -0
- package/template/.agents/skills/code-review/SKILL.md +4 -4
- package/template/.agents/skills/code-review/agents/openai.yaml +3 -0
- package/template/.agents/skills/codebase-design/agents/openai.yaml +3 -0
- package/template/.agents/skills/competitive-intelligence/SKILL.md +5 -5
- package/template/.agents/skills/diagnosing-bugs/agents/openai.yaml +3 -0
- package/template/.agents/skills/domain-modeling/agents/openai.yaml +3 -0
- package/template/.agents/skills/excalidraw-diagram-generator/SKILL.md +4 -4
- package/template/.agents/skills/grill-me/SKILL.md +7 -0
- package/template/.agents/skills/grill-me/agents/openai.yaml +5 -0
- package/template/.agents/skills/grill-with-docs/agents/openai.yaml +5 -0
- package/template/.agents/skills/grilling/SKILL.md +12 -0
- package/template/.agents/skills/grilling/agents/openai.yaml +3 -0
- package/template/.agents/skills/handoff/SKILL.md +16 -0
- package/template/.agents/skills/handoff/agents/openai.yaml +5 -0
- package/template/.agents/skills/high-fidelity-html-prototype/SKILL.md +6 -6
- package/template/.agents/skills/high-fidelity-html-prototype/agents/openai.yaml +5 -0
- package/template/.agents/skills/implement/SKILL.md +2 -2
- package/template/.agents/skills/implement/agents/openai.yaml +5 -0
- package/template/.agents/skills/improve-codebase-architecture/SKILL.md +6 -1
- package/template/.agents/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
- package/template/.agents/skills/lombok/SKILL.md +345 -0
- package/template/.agents/skills/mapstruct/SKILL.md +328 -0
- package/template/.agents/skills/prototype/LOGIC.md +3 -3
- package/template/.agents/skills/prototype/SKILL.md +2 -6
- package/template/.agents/skills/prototype/UI.md +4 -4
- package/template/.agents/skills/prototype/agents/openai.yaml +3 -0
- package/template/.agents/skills/research/agents/openai.yaml +3 -0
- package/template/.agents/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
- package/template/.agents/skills/setup-matt-pocock-skills/SKILL.md +21 -32
- package/template/.agents/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
- package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-github.md +2 -2
- package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +2 -2
- package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-local.md +6 -6
- package/template/.agents/skills/setup-matt-pocock-skills/triage-labels.md +2 -2
- package/template/.agents/skills/tdd/agents/openai.yaml +3 -0
- package/template/.agents/skills/teach/GLOSSARY-FORMAT.md +35 -0
- package/template/.agents/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/template/.agents/skills/teach/MISSION-FORMAT.md +31 -0
- package/template/.agents/skills/teach/RESOURCES-FORMAT.md +32 -0
- package/template/.agents/skills/teach/SKILL.md +140 -0
- package/template/.agents/skills/teach/agents/openai.yaml +5 -0
- package/template/.agents/skills/to-spec/SKILL.md +58 -0
- package/template/.agents/skills/to-spec/agents/openai.yaml +5 -0
- package/template/.agents/skills/to-tickets/SKILL.md +62 -0
- package/template/.agents/skills/to-tickets/agents/openai.yaml +5 -0
- package/template/.agents/skills/triage/SKILL.md +4 -4
- package/template/.agents/skills/triage/agents/openai.yaml +5 -0
- package/template/.agents/skills/wayfinder/SKILL.md +128 -0
- package/template/.agents/skills/wayfinder/agents/openai.yaml +5 -0
- package/template/.agents/skills/web-design-engineer/SKILL.md +2 -2
- package/template/.agents/skills/writing-great-skills/GLOSSARY.md +201 -0
- package/template/.agents/skills/writing-great-skills/SKILL.md +83 -0
- package/template/.agents/skills/writing-great-skills/agents/openai.yaml +5 -0
- package/template/.agents/skills/yss-cache/SKILL.md +44 -0
- package/template/.agents/skills/yss-cache/agents/openai.yaml +5 -0
- package/template/.agents/skills/yss-cache/references/annotations.md +39 -0
- package/template/.agents/skills/yss-cache/references/architecture.md +25 -0
- package/template/.agents/skills/yss-cache/references/configuration.md +34 -0
- package/template/.agents/skills/yss-cache/references/redis-fallback.md +23 -0
- package/template/.agents/skills/yss-cache/references/redis-topology.md +62 -0
- package/template/.agents/skills/yss-cache/references/serialization.md +17 -0
- package/template/.agents/skills/yss-cache/references/source-index.md +64 -0
- package/template/.agents/skills/yss-cache/references/troubleshooting.md +33 -0
- package/template/.agents/skills/yss-cache/references/verification.md +34 -0
- package/template/.agents/skills/yss-cache/scripts/check-skill-freshness.sh +84 -0
- package/template/.agents/skills/yss-cache/scripts/inspect-cache-usage.sh +96 -0
- package/template/.agents/skills/yss-cache/scripts/verify-cache-component.sh +101 -0
- package/template/.claude/skills/ask-matt/SKILL.md +8 -4
- package/template/.claude/skills/ask-matt/agents/openai.yaml +5 -0
- package/template/.claude/skills/code-review/SKILL.md +4 -4
- package/template/.claude/skills/code-review/agents/openai.yaml +3 -0
- package/template/.claude/skills/codebase-design/agents/openai.yaml +3 -0
- package/template/.claude/skills/competitive-intelligence/SKILL.md +5 -5
- package/template/.claude/skills/diagnosing-bugs/agents/openai.yaml +3 -0
- package/template/.claude/skills/domain-modeling/agents/openai.yaml +3 -0
- package/template/.claude/skills/excalidraw-diagram-generator/SKILL.md +37 -16
- package/template/.claude/skills/excalidraw-diagram-generator/scripts/add-arrow.py +18 -18
- package/template/.claude/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +46 -47
- package/template/.claude/skills/grill-me/SKILL.md +7 -0
- package/template/.claude/skills/grill-me/agents/openai.yaml +5 -0
- package/template/.claude/skills/grill-with-docs/agents/openai.yaml +5 -0
- package/template/.claude/skills/grilling/SKILL.md +12 -0
- package/template/.claude/skills/grilling/agents/openai.yaml +3 -0
- package/template/.claude/skills/handoff/SKILL.md +16 -0
- package/template/.claude/skills/handoff/agents/openai.yaml +5 -0
- package/template/.claude/skills/implement/SKILL.md +2 -2
- package/template/.claude/skills/implement/agents/openai.yaml +5 -0
- package/template/.claude/skills/improve-codebase-architecture/SKILL.md +6 -1
- package/template/.claude/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
- package/template/.claude/skills/prototype/LOGIC.md +3 -3
- package/template/.claude/skills/prototype/SKILL.md +2 -6
- package/template/.claude/skills/prototype/UI.md +4 -4
- package/template/.claude/skills/prototype/agents/openai.yaml +3 -0
- package/template/.claude/skills/research/agents/openai.yaml +3 -0
- package/template/.claude/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
- package/template/.claude/skills/setup-matt-pocock-skills/SKILL.md +21 -32
- package/template/.claude/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
- package/template/.claude/skills/setup-matt-pocock-skills/issue-tracker-github.md +2 -2
- package/template/.claude/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +2 -2
- package/template/.claude/skills/setup-matt-pocock-skills/issue-tracker-local.md +6 -6
- package/template/.claude/skills/setup-matt-pocock-skills/triage-labels.md +2 -2
- package/template/.claude/skills/tdd/agents/openai.yaml +3 -0
- package/template/.claude/skills/teach/GLOSSARY-FORMAT.md +35 -0
- package/template/.claude/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/template/.claude/skills/teach/MISSION-FORMAT.md +31 -0
- package/template/.claude/skills/teach/RESOURCES-FORMAT.md +32 -0
- package/template/.claude/skills/teach/SKILL.md +140 -0
- package/template/.claude/skills/teach/agents/openai.yaml +5 -0
- package/template/.claude/skills/to-spec/SKILL.md +58 -0
- package/template/.claude/skills/to-spec/agents/openai.yaml +5 -0
- package/template/.claude/skills/to-tickets/SKILL.md +62 -0
- package/template/.claude/skills/to-tickets/agents/openai.yaml +5 -0
- package/template/.claude/skills/triage/SKILL.md +4 -4
- package/template/.claude/skills/triage/agents/openai.yaml +5 -0
- package/template/.claude/skills/wayfinder/SKILL.md +128 -0
- package/template/.claude/skills/wayfinder/agents/openai.yaml +5 -0
- package/template/.claude/skills/web-design-engineer/SKILL.md +2 -2
- package/template/.claude/skills/writing-great-skills/GLOSSARY.md +201 -0
- package/template/.claude/skills/writing-great-skills/SKILL.md +83 -0
- package/template/.claude/skills/writing-great-skills/agents/openai.yaml +5 -0
- package/template/.claude/skills/yss-cache/SKILL.md +44 -0
- package/template/.claude/skills/yss-cache/agents/openai.yaml +5 -0
- package/template/.claude/skills/yss-cache/references/annotations.md +39 -0
- package/template/.claude/skills/yss-cache/references/architecture.md +25 -0
- package/template/.claude/skills/yss-cache/references/configuration.md +34 -0
- package/template/.claude/skills/yss-cache/references/redis-fallback.md +23 -0
- package/template/.claude/skills/yss-cache/references/redis-topology.md +62 -0
- package/template/.claude/skills/yss-cache/references/serialization.md +17 -0
- package/template/.claude/skills/yss-cache/references/source-index.md +64 -0
- package/template/.claude/skills/yss-cache/references/troubleshooting.md +33 -0
- package/template/.claude/skills/yss-cache/references/verification.md +34 -0
- package/template/.claude/skills/yss-cache/scripts/check-skill-freshness.sh +84 -0
- package/template/.claude/skills/yss-cache/scripts/inspect-cache-usage.sh +96 -0
- package/template/.claude/skills/yss-cache/scripts/verify-cache-component.sh +101 -0
- package/template/.codex/config.toml +3 -0
- package/template/.codex/skills/ask-matt/SKILL.md +8 -4
- package/template/.codex/skills/ask-matt/agents/openai.yaml +5 -0
- package/template/.codex/skills/code-review/SKILL.md +4 -4
- package/template/.codex/skills/code-review/agents/openai.yaml +3 -0
- package/template/.codex/skills/code-review-process/references/automation-and-standards.md +1 -1
- package/template/.codex/skills/codebase-design/agents/openai.yaml +3 -0
- package/template/.codex/skills/competitive-intelligence/SKILL.md +5 -5
- package/template/.codex/skills/cross-repo-implementation-routing/SKILL.md +2 -2
- package/template/.codex/skills/diagnosing-bugs/agents/openai.yaml +3 -0
- package/template/.codex/skills/domain-modeling/agents/openai.yaml +3 -0
- package/template/.codex/skills/grill-with-docs/agents/openai.yaml +5 -0
- package/template/.codex/skills/handoff/SKILL.md +16 -0
- package/template/.codex/skills/handoff/agents/openai.yaml +5 -0
- package/template/.codex/skills/high-fidelity-html-prototype/SKILL.md +6 -6
- package/template/.codex/skills/implement/SKILL.md +2 -2
- package/template/.codex/skills/implement/agents/openai.yaml +5 -0
- package/template/.codex/skills/improve-codebase-architecture/SKILL.md +6 -1
- package/template/.codex/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
- package/template/.codex/skills/product-design-prototype/SKILL.md +14 -10
- package/template/.codex/skills/product-design-prototype/agents/openai.yaml +1 -1
- package/template/.codex/skills/prototype/LOGIC.md +3 -3
- package/template/.codex/skills/prototype/SKILL.md +2 -6
- package/template/.codex/skills/prototype/UI.md +4 -4
- package/template/.codex/skills/prototype/agents/openai.yaml +3 -0
- package/template/.codex/skills/prototype-review/SKILL.md +6 -6
- package/template/.codex/skills/prototype-review/agents/openai.yaml +2 -2
- package/template/.codex/skills/research/agents/openai.yaml +3 -0
- package/template/.codex/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
- package/template/.codex/skills/setup-matt-pocock-skills/SKILL.md +21 -32
- package/template/.codex/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
- package/template/.codex/skills/setup-matt-pocock-skills/issue-tracker-github.md +2 -2
- package/template/.codex/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +2 -2
- package/template/.codex/skills/setup-matt-pocock-skills/issue-tracker-local.md +6 -6
- package/template/.codex/skills/setup-matt-pocock-skills/triage-labels.md +2 -2
- package/template/.codex/skills/tdd/agents/openai.yaml +3 -0
- package/template/.codex/skills/to-spec/SKILL.md +58 -0
- package/template/.codex/skills/to-spec/agents/openai.yaml +5 -0
- package/template/.codex/skills/to-tickets/SKILL.md +62 -0
- package/template/.codex/skills/to-tickets/agents/openai.yaml +5 -0
- package/template/.codex/skills/triage/SKILL.md +4 -4
- package/template/.codex/skills/triage/agents/openai.yaml +5 -0
- package/template/.codex/skills/wayfinder/SKILL.md +128 -0
- package/template/.codex/skills/wayfinder/agents/openai.yaml +5 -0
- package/template/.codex/skills/writing-great-skills/GLOSSARY.md +201 -0
- package/template/.codex/skills/writing-great-skills/SKILL.md +83 -0
- package/template/.codex/skills/writing-great-skills/agents/openai.yaml +5 -0
- package/template/.codex/skills/yss-api-integration/SKILL.md +1 -1
- package/template/.codex/skills/yss-cache/SKILL.md +29 -58
- package/template/.codex/skills/yss-cache/agents/openai.yaml +2 -2
- package/template/.codex/skills/yss-cache/references/annotations.md +39 -0
- package/template/.codex/skills/yss-cache/references/architecture.md +25 -0
- package/template/.codex/skills/yss-cache/references/configuration.md +34 -0
- package/template/.codex/skills/yss-cache/references/redis-fallback.md +23 -0
- package/template/.codex/skills/yss-cache/references/redis-topology.md +62 -0
- package/template/.codex/skills/yss-cache/references/serialization.md +17 -0
- package/template/.codex/skills/yss-cache/references/source-index.md +1 -1
- package/template/.codex/skills/yss-cache/references/troubleshooting.md +33 -0
- package/template/.codex/skills/yss-cache/references/verification.md +34 -0
- package/template/.codex/skills/yss-cache/scripts/check-skill-freshness.sh +84 -0
- package/template/.codex/skills/yss-cache/scripts/inspect-cache-usage.sh +96 -0
- package/template/.codex/skills/yss-cache/scripts/verify-cache-component.sh +101 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +1 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +2 -2
- package/template/.codex/skills/yss-design-system/SKILL.md +9 -2
- package/template/.codex/skills/yss-design-system/references/design-system.md +12 -0
- package/template/.codex/skills/yss-domain-modeling/SKILL.md +3 -3
- package/template/.codex/skills/yss-domain-modeling/agents/openai.yaml +1 -1
- package/template/.codex/skills/yss-domain-modeling/references/modeling-workflow.md +2 -2
- package/template/.codex/skills/yss-filerunner/SKILL.md +1 -1
- package/template/.codex/skills/yss-openapi/SKILL.md +35 -47
- package/template/.codex/skills/yss-openapi/img.png +0 -0
- package/template/.codex/skills/yss-openapi/img_1.png +0 -0
- package/template/.codex/skills/yss-openapi-draft-review/SKILL.md +3 -3
- package/template/.codex/skills/yss-openapi-governance/SKILL.md +4 -4
- package/template/.codex/skills/yss-product-lifecycle/SKILL.md +57 -34
- package/template/.codex/skills/yss-product-lifecycle/references/artifact-checklist.md +23 -21
- package/template/.codex/skills/yss-product-lifecycle/references/stage-routing.md +15 -15
- package/template/.codex/skills/yss-product-lifecycle/references/yss-skill-routing.md +13 -8
- package/template/.codex/skills/yss-repository/SKILL.md +11 -3
- package/template/.codex/skills/yss-router/SKILL.md +2 -3
- package/template/.codex/skills/yss-router/references/boundaries.md +0 -1
- package/template/.codex/skills/yss-source-index/references/source-map-config.md +0 -1
- package/template/.codex/skills/yss-source-index/scripts/refresh-yss-skill-index.py +0 -3
- package/template/.codex/skills/yss-web-controller/SKILL.md +9 -3
- package/template/.hermes/skills/ask-matt/SKILL.md +8 -4
- package/template/.hermes/skills/ask-matt/agents/openai.yaml +5 -0
- package/template/.hermes/skills/code-review/SKILL.md +4 -4
- package/template/.hermes/skills/code-review/agents/openai.yaml +3 -0
- package/template/.hermes/skills/codebase-design/agents/openai.yaml +3 -0
- package/template/.hermes/skills/competitive-intelligence/SKILL.md +5 -5
- package/template/.hermes/skills/diagnosing-bugs/agents/openai.yaml +3 -0
- package/template/.hermes/skills/domain-modeling/agents/openai.yaml +3 -0
- package/template/.hermes/skills/excalidraw-diagram-generator/SKILL.md +37 -16
- package/template/.hermes/skills/excalidraw-diagram-generator/scripts/add-arrow.py +18 -18
- package/template/.hermes/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +46 -47
- package/template/.hermes/skills/grill-me/SKILL.md +7 -0
- package/template/.hermes/skills/grill-me/agents/openai.yaml +5 -0
- package/template/.hermes/skills/grill-with-docs/agents/openai.yaml +5 -0
- package/template/.hermes/skills/grilling/SKILL.md +12 -0
- package/template/.hermes/skills/grilling/agents/openai.yaml +3 -0
- package/template/.hermes/skills/handoff/SKILL.md +16 -0
- package/template/.hermes/skills/handoff/agents/openai.yaml +5 -0
- package/template/.hermes/skills/implement/SKILL.md +2 -2
- package/template/.hermes/skills/implement/agents/openai.yaml +5 -0
- package/template/.hermes/skills/improve-codebase-architecture/SKILL.md +6 -1
- package/template/.hermes/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
- package/template/.hermes/skills/prototype/LOGIC.md +3 -3
- package/template/.hermes/skills/prototype/SKILL.md +2 -6
- package/template/.hermes/skills/prototype/UI.md +4 -4
- package/template/.hermes/skills/prototype/agents/openai.yaml +3 -0
- package/template/.hermes/skills/research/agents/openai.yaml +3 -0
- package/template/.hermes/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
- package/template/.hermes/skills/setup-matt-pocock-skills/SKILL.md +21 -32
- package/template/.hermes/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
- package/template/.hermes/skills/setup-matt-pocock-skills/issue-tracker-github.md +2 -2
- package/template/.hermes/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +2 -2
- package/template/.hermes/skills/setup-matt-pocock-skills/issue-tracker-local.md +6 -6
- package/template/.hermes/skills/setup-matt-pocock-skills/triage-labels.md +2 -2
- package/template/.hermes/skills/tdd/agents/openai.yaml +3 -0
- package/template/.hermes/skills/teach/GLOSSARY-FORMAT.md +35 -0
- package/template/.hermes/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/template/.hermes/skills/teach/MISSION-FORMAT.md +31 -0
- package/template/.hermes/skills/teach/RESOURCES-FORMAT.md +32 -0
- package/template/.hermes/skills/teach/SKILL.md +140 -0
- package/template/.hermes/skills/teach/agents/openai.yaml +5 -0
- package/template/.hermes/skills/to-spec/SKILL.md +58 -0
- package/template/.hermes/skills/to-spec/agents/openai.yaml +5 -0
- package/template/.hermes/skills/to-tickets/SKILL.md +62 -0
- package/template/.hermes/skills/to-tickets/agents/openai.yaml +5 -0
- package/template/.hermes/skills/triage/SKILL.md +4 -4
- package/template/.hermes/skills/triage/agents/openai.yaml +5 -0
- package/template/.hermes/skills/wayfinder/SKILL.md +128 -0
- package/template/.hermes/skills/wayfinder/agents/openai.yaml +5 -0
- package/template/.hermes/skills/web-design-engineer/SKILL.md +2 -2
- package/template/.hermes/skills/writing-great-skills/GLOSSARY.md +201 -0
- package/template/.hermes/skills/writing-great-skills/SKILL.md +83 -0
- package/template/.hermes/skills/writing-great-skills/agents/openai.yaml +5 -0
- package/template/.hermes/skills/yss-cache/SKILL.md +44 -0
- package/template/.hermes/skills/yss-cache/agents/openai.yaml +5 -0
- package/template/.hermes/skills/yss-cache/references/annotations.md +39 -0
- package/template/.hermes/skills/yss-cache/references/architecture.md +25 -0
- package/template/.hermes/skills/yss-cache/references/configuration.md +34 -0
- package/template/.hermes/skills/yss-cache/references/redis-fallback.md +23 -0
- package/template/.hermes/skills/yss-cache/references/redis-topology.md +62 -0
- package/template/.hermes/skills/yss-cache/references/serialization.md +17 -0
- package/template/.hermes/skills/yss-cache/references/source-index.md +64 -0
- package/template/.hermes/skills/yss-cache/references/troubleshooting.md +33 -0
- package/template/.hermes/skills/yss-cache/references/verification.md +34 -0
- package/template/.hermes/skills/yss-cache/scripts/check-skill-freshness.sh +84 -0
- package/template/.hermes/skills/yss-cache/scripts/inspect-cache-usage.sh +96 -0
- package/template/.hermes/skills/yss-cache/scripts/verify-cache-component.sh +101 -0
- package/template/.obsidian/app.json +3 -0
- package/template/.obsidian/appearance.json +5 -0
- package/template/.obsidian/community-plugins.json +4 -0
- package/template/.obsidian/core-plugins.json +33 -0
- package/template/.obsidian/graph.json +22 -0
- package/template/.obsidian/plugins/obsidian-excalidraw-plugin/data.json +1085 -0
- package/template/.obsidian/plugins/obsidian-excalidraw-plugin/main.js +30 -0
- package/template/.obsidian/plugins/obsidian-excalidraw-plugin/manifest.json +12 -0
- package/template/.obsidian/plugins/obsidian-excalidraw-plugin/styles.css +1 -0
- package/template/.obsidian/plugins/obsidian-git/main.js +415 -0
- package/template/.obsidian/plugins/obsidian-git/manifest.json +10 -0
- package/template/.obsidian/plugins/obsidian-git/styles.css +705 -0
- package/template/.obsidian/workspace.json +222 -0
- package/template/.pi/skills/ask-matt/SKILL.md +8 -4
- package/template/.pi/skills/ask-matt/agents/openai.yaml +5 -0
- package/template/.pi/skills/code-review/SKILL.md +4 -4
- package/template/.pi/skills/code-review/agents/openai.yaml +3 -0
- package/template/.pi/skills/codebase-design/agents/openai.yaml +3 -0
- package/template/.pi/skills/competitive-intelligence/SKILL.md +5 -5
- package/template/.pi/skills/diagnosing-bugs/agents/openai.yaml +3 -0
- package/template/.pi/skills/domain-modeling/agents/openai.yaml +3 -0
- package/template/.pi/skills/excalidraw-diagram-generator/SKILL.md +37 -16
- package/template/.pi/skills/excalidraw-diagram-generator/scripts/add-arrow.py +18 -18
- package/template/.pi/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +46 -47
- package/template/.pi/skills/grill-me/SKILL.md +7 -0
- package/template/.pi/skills/grill-me/agents/openai.yaml +5 -0
- package/template/.pi/skills/grill-with-docs/agents/openai.yaml +5 -0
- package/template/.pi/skills/grilling/SKILL.md +12 -0
- package/template/.pi/skills/grilling/agents/openai.yaml +3 -0
- package/template/.pi/skills/handoff/SKILL.md +16 -0
- package/template/.pi/skills/handoff/agents/openai.yaml +5 -0
- package/template/.pi/skills/implement/SKILL.md +2 -2
- package/template/.pi/skills/implement/agents/openai.yaml +5 -0
- package/template/.pi/skills/improve-codebase-architecture/SKILL.md +6 -1
- package/template/.pi/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
- package/template/.pi/skills/prototype/LOGIC.md +3 -3
- package/template/.pi/skills/prototype/SKILL.md +2 -6
- package/template/.pi/skills/prototype/UI.md +4 -4
- package/template/.pi/skills/prototype/agents/openai.yaml +3 -0
- package/template/.pi/skills/research/agents/openai.yaml +3 -0
- package/template/.pi/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
- package/template/.pi/skills/setup-matt-pocock-skills/SKILL.md +21 -32
- package/template/.pi/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
- package/template/.pi/skills/setup-matt-pocock-skills/issue-tracker-github.md +2 -2
- package/template/.pi/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +2 -2
- package/template/.pi/skills/setup-matt-pocock-skills/issue-tracker-local.md +6 -6
- package/template/.pi/skills/setup-matt-pocock-skills/triage-labels.md +2 -2
- package/template/.pi/skills/tdd/agents/openai.yaml +3 -0
- package/template/.pi/skills/teach/GLOSSARY-FORMAT.md +35 -0
- package/template/.pi/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/template/.pi/skills/teach/MISSION-FORMAT.md +31 -0
- package/template/.pi/skills/teach/RESOURCES-FORMAT.md +32 -0
- package/template/.pi/skills/teach/SKILL.md +140 -0
- package/template/.pi/skills/teach/agents/openai.yaml +5 -0
- package/template/.pi/skills/to-spec/SKILL.md +58 -0
- package/template/.pi/skills/to-spec/agents/openai.yaml +5 -0
- package/template/.pi/skills/to-tickets/SKILL.md +62 -0
- package/template/.pi/skills/to-tickets/agents/openai.yaml +5 -0
- package/template/.pi/skills/triage/SKILL.md +4 -4
- package/template/.pi/skills/triage/agents/openai.yaml +5 -0
- package/template/.pi/skills/wayfinder/SKILL.md +128 -0
- package/template/.pi/skills/wayfinder/agents/openai.yaml +5 -0
- package/template/.pi/skills/web-design-engineer/SKILL.md +2 -2
- package/template/.pi/skills/writing-great-skills/GLOSSARY.md +201 -0
- package/template/.pi/skills/writing-great-skills/SKILL.md +83 -0
- package/template/.pi/skills/writing-great-skills/agents/openai.yaml +5 -0
- package/template/.pi/skills/yss-cache/SKILL.md +44 -0
- package/template/.pi/skills/yss-cache/agents/openai.yaml +5 -0
- package/template/.pi/skills/yss-cache/references/annotations.md +39 -0
- package/template/.pi/skills/yss-cache/references/architecture.md +25 -0
- package/template/.pi/skills/yss-cache/references/configuration.md +34 -0
- package/template/.pi/skills/yss-cache/references/redis-fallback.md +23 -0
- package/template/.pi/skills/yss-cache/references/redis-topology.md +62 -0
- package/template/.pi/skills/yss-cache/references/serialization.md +17 -0
- package/template/.pi/skills/yss-cache/references/source-index.md +64 -0
- package/template/.pi/skills/yss-cache/references/troubleshooting.md +33 -0
- package/template/.pi/skills/yss-cache/references/verification.md +34 -0
- package/template/.pi/skills/yss-cache/scripts/check-skill-freshness.sh +84 -0
- package/template/.pi/skills/yss-cache/scripts/inspect-cache-usage.sh +96 -0
- package/template/.pi/skills/yss-cache/scripts/verify-cache-component.sh +101 -0
- package/template/.trae/skills/ask-matt/SKILL.md +8 -4
- package/template/.trae/skills/ask-matt/agents/openai.yaml +5 -0
- package/template/.trae/skills/code-review/SKILL.md +4 -4
- package/template/.trae/skills/code-review/agents/openai.yaml +3 -0
- package/template/.trae/skills/codebase-design/agents/openai.yaml +3 -0
- package/template/.trae/skills/competitive-intelligence/SKILL.md +5 -5
- package/template/.trae/skills/diagnosing-bugs/agents/openai.yaml +3 -0
- package/template/.trae/skills/domain-modeling/agents/openai.yaml +3 -0
- package/template/.trae/skills/excalidraw-diagram-generator/SKILL.md +37 -16
- package/template/.trae/skills/excalidraw-diagram-generator/scripts/add-arrow.py +18 -18
- package/template/.trae/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +46 -47
- package/template/.trae/skills/grill-me/SKILL.md +7 -0
- package/template/.trae/skills/grill-me/agents/openai.yaml +5 -0
- package/template/.trae/skills/grill-with-docs/agents/openai.yaml +5 -0
- package/template/.trae/skills/grilling/SKILL.md +12 -0
- package/template/.trae/skills/grilling/agents/openai.yaml +3 -0
- package/template/.trae/skills/handoff/SKILL.md +16 -0
- package/template/.trae/skills/handoff/agents/openai.yaml +5 -0
- package/template/.trae/skills/implement/SKILL.md +2 -2
- package/template/.trae/skills/implement/agents/openai.yaml +5 -0
- package/template/.trae/skills/improve-codebase-architecture/SKILL.md +6 -1
- package/template/.trae/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
- package/template/.trae/skills/prototype/LOGIC.md +3 -3
- package/template/.trae/skills/prototype/SKILL.md +2 -6
- package/template/.trae/skills/prototype/UI.md +4 -4
- package/template/.trae/skills/prototype/agents/openai.yaml +3 -0
- package/template/.trae/skills/research/agents/openai.yaml +3 -0
- package/template/.trae/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
- package/template/.trae/skills/setup-matt-pocock-skills/SKILL.md +21 -32
- package/template/.trae/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
- package/template/.trae/skills/setup-matt-pocock-skills/issue-tracker-github.md +2 -2
- package/template/.trae/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +2 -2
- package/template/.trae/skills/setup-matt-pocock-skills/issue-tracker-local.md +6 -6
- package/template/.trae/skills/setup-matt-pocock-skills/triage-labels.md +2 -2
- package/template/.trae/skills/tdd/agents/openai.yaml +3 -0
- package/template/.trae/skills/teach/GLOSSARY-FORMAT.md +35 -0
- package/template/.trae/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/template/.trae/skills/teach/MISSION-FORMAT.md +31 -0
- package/template/.trae/skills/teach/RESOURCES-FORMAT.md +32 -0
- package/template/.trae/skills/teach/SKILL.md +140 -0
- package/template/.trae/skills/teach/agents/openai.yaml +5 -0
- package/template/.trae/skills/to-spec/SKILL.md +58 -0
- package/template/.trae/skills/to-spec/agents/openai.yaml +5 -0
- package/template/.trae/skills/to-tickets/SKILL.md +62 -0
- package/template/.trae/skills/to-tickets/agents/openai.yaml +5 -0
- package/template/.trae/skills/triage/SKILL.md +4 -4
- package/template/.trae/skills/triage/agents/openai.yaml +5 -0
- package/template/.trae/skills/wayfinder/SKILL.md +128 -0
- package/template/.trae/skills/wayfinder/agents/openai.yaml +5 -0
- package/template/.trae/skills/web-design-engineer/SKILL.md +2 -2
- package/template/.trae/skills/writing-great-skills/GLOSSARY.md +201 -0
- package/template/.trae/skills/writing-great-skills/SKILL.md +83 -0
- package/template/.trae/skills/writing-great-skills/agents/openai.yaml +5 -0
- package/template/.trae/skills/yss-cache/SKILL.md +44 -0
- package/template/.trae/skills/yss-cache/agents/openai.yaml +5 -0
- package/template/.trae/skills/yss-cache/references/annotations.md +39 -0
- package/template/.trae/skills/yss-cache/references/architecture.md +25 -0
- package/template/.trae/skills/yss-cache/references/configuration.md +34 -0
- package/template/.trae/skills/yss-cache/references/redis-fallback.md +23 -0
- package/template/.trae/skills/yss-cache/references/redis-topology.md +62 -0
- package/template/.trae/skills/yss-cache/references/serialization.md +17 -0
- package/template/.trae/skills/yss-cache/references/source-index.md +64 -0
- package/template/.trae/skills/yss-cache/references/troubleshooting.md +33 -0
- package/template/.trae/skills/yss-cache/references/verification.md +34 -0
- package/template/.trae/skills/yss-cache/scripts/check-skill-freshness.sh +84 -0
- package/template/.trae/skills/yss-cache/scripts/inspect-cache-usage.sh +96 -0
- package/template/.trae/skills/yss-cache/scripts/verify-cache-component.sh +101 -0
- package/template/AGENTS.md +89 -250
- package/template/CONTEXT.md +24 -11
- package/template/README.md +31 -45
- package/template/docs/adr/{adr-product-design-prototype-entrypoint.md → 0001-product-design-prototype-entrypoint.md} +3 -3
- package/template/docs/adr/0002-yss-project-repository-mode.md +3 -0
- package/template/docs/agents/README.md +4 -5
- package/template/docs/agents/domain.md +13 -15
- package/template/docs/agents/gitlab-workflow-skills.md +5 -5
- package/template/docs/agents/issue-tracker.md +15 -14
- package/template/docs/agents/skills-maintenance.md +44 -109
- package/template/docs/agents/triage-labels.md +10 -12
- package/template/docs/api/templates/openapi-draft-review-checklist.md +4 -4
- package/template/docs/api/templates/openapi-freeze-record-template.md +5 -5
- package/template/docs/architecture/README.md +4 -4
- package/template/docs/architecture/templates/architecture-review-checklist.md +4 -4
- package/template/docs/architecture/templates/business-architecture-template.md +7 -7
- package/template/docs/architecture/templates/data-architecture-template.md +4 -4
- package/template/docs/architecture/templates/engineering-baseline-review-template.md +4 -3
- package/template/docs/architecture/templates/functional-architecture-template.md +7 -7
- package/template/docs/architecture/templates/system-overview-design-template.md +5 -6
- package/template/docs/architecture/templates/tech-design-template.md +2 -2
- package/template/docs/design/README.md +8 -8
- package/template/docs/design/design.md +10 -1
- package/template/docs/design/diagrams/README.md +1 -1
- package/template/docs/design/templates/interaction-spec-template.md +6 -6
- package/template/docs/design/templates/product-overview-design-template.md +8 -8
- package/template/docs/design/templates/prototype-confirmation-template.md +4 -4
- package/template/docs/design/templates/prototype-review-checklist.md +5 -5
- package/template/docs/design/templates/state-matrix-template.md +1 -1
- package/template/docs/discovery/IDEATION.md +2 -2
- package/template/docs/discovery/README.md +4 -4
- package/template/docs/discovery/templates/competitive-analysis-template.md +4 -4
- package/template/docs/discovery/templates/discovery-template.md +8 -8
- package/template/docs/implementation/create-yss-spec-repository-mode-contract.md +59 -0
- package/template/docs/process/MATT-POCOCK-ENGINEERING-SKILLS.md +49 -30
- package/template/docs/process/harness-automation-candidates.md +10 -13
- package/template/docs/process/harness-executive-blueprint.md +11 -11
- package/template/docs/process/harness-optimization-backlog.md +6 -6
- package/template/docs/process/harness-pilot-retro-metrics.md +8 -8
- package/template/docs/process/harness-pilot-selection.md +8 -8
- package/template/docs/process/harness-process-tailoring.md +35 -16
- package/template/docs/process/harness-work-unit-map.md +9 -9
- package/template/docs/process/implementation-repo-integration.md +25 -11
- package/template/docs/process/lifecycle-artifact-map.md +66 -40
- package/template/docs/process/product-prototype-workflow.md +10 -10
- package/template/docs/process/skill-governance.md +12 -4
- package/template/docs/process/subagent-collaboration-validation.md +53 -0
- package/template/docs/process/subagent-collaboration.md +111 -0
- package/template/docs/process/template-governance-grilling-record.md +38 -0
- package/template/docs/process/template-governance-skill-validation.md +44 -0
- package/template/docs/process/templates/stage-checkpoint-template.md +42 -7
- package/template/docs/releases/next-major-template-governance.md +32 -0
- package/template/docs/requirements/README.md +11 -11
- package/template/docs/{adr/template.md → templates/adr-template.md} +2 -2
- package/template/docs/templates/agent-brief-template.md +5 -5
- package/template/docs/templates/build-architecture-checklist-template.md +41 -11
- package/template/docs/templates/implementation-repo-registry-template.md +8 -3
- package/template/docs/templates/implementation-routing-template.md +85 -19
- package/template/docs/templates/requirement-freeze-template.md +8 -8
- package/template/docs/templates/review-report-template.md +50 -0
- package/template/docs/templates/spec-delta-template.md +5 -5
- package/template/docs/templates/{prd-template.md → spec-template.md} +19 -9
- package/template/docs/templates/subagent-task-package-template.md +93 -0
- package/template/docs/templates/verification-record-template.md +2 -2
- package/template/docs/templates/vertical-slice-ticket-template.md +88 -0
- package/template/docs/user-guide/README.md +2 -2
- package/template/docs/user-guide/create-yss-spec-cli-guide.md +27 -209
- package/template/docs/user-guide/excalidraw-diagram-generator-guide.md +8 -8
- package/template/docs/user-guide/grill-with-docs-best-practices.md +16 -16
- package/template/docs/user-guide/grill-with-docs-guide.md +19 -19
- package/template/docs/user-guide/lifecycle-best-practices.md +40 -40
- package/template/docs/user-guide/product-lifecycle-workflow.md +31 -31
- package/template/docs/user-guide/product-rd-lifecycle-best-practices.md +121 -121
- package/template/docs/user-guide/spec-ticket-migration-guide.md +35 -0
- package/template/scripts/sync-skills +126 -0
- package/template/scripts/update-skill-lock +202 -0
- package/template/scripts/verify-lifecycle-scenarios +136 -0
- package/template/scripts/verify-template +148 -155
- package/template/skills-lock.json +1068 -65
- package/template/yss-project.yaml +2 -0
- package/template.manifest.json +3 -16
- package/template/.agent/skills/ask-matt/SKILL.md +0 -74
- package/template/.agent/skills/code-review/SKILL.md +0 -89
- package/template/.agent/skills/codebase-design/DEEPENING.md +0 -37
- package/template/.agent/skills/codebase-design/DESIGN-IT-TWICE.md +0 -44
- package/template/.agent/skills/codebase-design/SKILL.md +0 -114
- package/template/.agent/skills/competitive-intelligence/SKILL.md +0 -94
- package/template/.agent/skills/diagnosing-bugs/SKILL.md +0 -134
- package/template/.agent/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -41
- package/template/.agent/skills/domain-modeling/ADR-FORMAT.md +0 -47
- package/template/.agent/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
- package/template/.agent/skills/domain-modeling/SKILL.md +0 -74
- package/template/.agent/skills/grill-with-docs/SKILL.md +0 -7
- package/template/.agent/skills/implement/SKILL.md +0 -15
- package/template/.agent/skills/improve-codebase-architecture/HTML-REPORT.md +0 -123
- package/template/.agent/skills/improve-codebase-architecture/SKILL.md +0 -66
- package/template/.agent/skills/prototype/LOGIC.md +0 -79
- package/template/.agent/skills/prototype/SKILL.md +0 -30
- package/template/.agent/skills/prototype/UI.md +0 -112
- package/template/.agent/skills/research/SKILL.md +0 -12
- package/template/.agent/skills/resolving-merge-conflicts/SKILL.md +0 -14
- package/template/.agent/skills/setup-matt-pocock-skills/SKILL.md +0 -127
- package/template/.agent/skills/setup-matt-pocock-skills/domain.md +0 -51
- package/template/.agent/skills/setup-matt-pocock-skills/issue-tracker-github.md +0 -45
- package/template/.agent/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +0 -46
- package/template/.agent/skills/setup-matt-pocock-skills/issue-tracker-local.md +0 -30
- package/template/.agent/skills/setup-matt-pocock-skills/triage-labels.md +0 -15
- package/template/.agent/skills/tdd/SKILL.md +0 -36
- package/template/.agent/skills/tdd/mocking.md +0 -59
- package/template/.agent/skills/tdd/tests.md +0 -77
- package/template/.agent/skills/to-issues/SKILL.md +0 -84
- package/template/.agent/skills/to-prd/SKILL.md +0 -75
- package/template/.agent/skills/triage/AGENT-BRIEF.md +0 -207
- package/template/.agent/skills/triage/OUT-OF-SCOPE.md +0 -105
- package/template/.agent/skills/triage/SKILL.md +0 -112
- package/template/.agents/skills/to-issues/SKILL.md +0 -84
- package/template/.agents/skills/to-prd/SKILL.md +0 -75
- package/template/.claude/skills/to-issues/SKILL.md +0 -84
- package/template/.claude/skills/to-prd/SKILL.md +0 -75
- package/template/.codex/skills/to-issues/SKILL.md +0 -84
- package/template/.codex/skills/to-prd/SKILL.md +0 -75
- package/template/.codex/skills/yss-anti-scheduler/SKILL.md +0 -53
- package/template/.codex/skills/yss-anti-scheduler/agents/openai.yaml +0 -4
- package/template/.codex/skills/yss-anti-scheduler/references/source-index.md +0 -157
- package/template/.codex/skills/yss-cache/assets/ClearCache.java +0 -34
- package/template/.codex/skills/yss-cache/assets/QueryCache.java +0 -36
- package/template/.codex/skills/yss-cache/assets/UpdateCache.java +0 -34
- package/template/.codex/skills/yss-cache/references/README.md +0 -5
- package/template/.hermes/skills/to-issues/SKILL.md +0 -84
- package/template/.hermes/skills/to-prd/SKILL.md +0 -75
- package/template/.pi/skills/to-issues/SKILL.md +0 -84
- package/template/.pi/skills/to-prd/SKILL.md +0 -75
- package/template/.trae/skills/to-issues/SKILL.md +0 -84
- package/template/.trae/skills/to-prd/SKILL.md +0 -75
- package/template/docs/templates/vertical-slice-issue-template.md +0 -61
- /package/template/docs/requirements/{issues → tickets}/.gitkeep +0 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Spec / Ticket 迁移指南
|
|
2
|
+
|
|
3
|
+
本文面向从旧版模板升级的仓库。新模板采用一次性破坏性迁移,不保留旧 skill 的转发别名;迁移完成后应运行 `scripts/verify-template`。
|
|
4
|
+
|
|
5
|
+
## 名称映射
|
|
6
|
+
|
|
7
|
+
| 旧入口或路径 | 新入口或路径 |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `to-prd` | `to-spec` |
|
|
10
|
+
| `to-issues` | `to-tickets` |
|
|
11
|
+
| `docs/templates/prd-template.md` | `docs/templates/spec-template.md` |
|
|
12
|
+
| `docs/templates/vertical-slice-issue-template.md` | `docs/templates/vertical-slice-ticket-template.md` |
|
|
13
|
+
| `docs/requirements/issues/` | `docs/requirements/tickets/` |
|
|
14
|
+
| `docs/requirements/<feature>-prd.md` | `docs/requirements/<feature>-spec.md` |
|
|
15
|
+
|
|
16
|
+
旧文档中的 PRD 可继续作为历史事实保留,但新建和继续维护的规格资产应迁移为 Spec。GitHub Issues 与 GitLab Issues 仍是平台产品名称;领域工作单元统一称为 Ticket。
|
|
17
|
+
|
|
18
|
+
## 状态迁移
|
|
19
|
+
|
|
20
|
+
- Spec 初稿、产品设计、原型和 OpenAPI Draft 使用 `ready-for-human`。
|
|
21
|
+
- 需求与契约冻结后,先创建功能父 Ticket,再创建垂直切片子 Ticket。
|
|
22
|
+
- 只有必要门禁已通过、依赖已解除且可直接实现的垂直切片 Ticket 使用 `ready-for-agent`。
|
|
23
|
+
|
|
24
|
+
## 升级步骤
|
|
25
|
+
|
|
26
|
+
1. 在根目录添加 `yss-project.yaml`,明确 `repository_mode`。
|
|
27
|
+
2. 重命名旧规格、模板和本地任务目录,并修正 Markdown 链接。
|
|
28
|
+
3. 删除所有 Agent root 中的旧 skill 目录,不创建兼容别名。
|
|
29
|
+
4. 只在 `.agents/skills` 修改共享技能,运行 `scripts/sync-skills` 生成投影。
|
|
30
|
+
5. 运行 `scripts/update-skill-lock` 更新完整树哈希。
|
|
31
|
+
6. 运行 `scripts/verify-template`;修复全部结构、语义、压力场景和链接错误后再进入发布审查。
|
|
32
|
+
|
|
33
|
+
## 外部初始化 CLI
|
|
34
|
+
|
|
35
|
+
`create-yss-spec` 必须在初始化和升级时写入正确的 `repository_mode`,并执行等价的路径迁移与集成测试。模板仓库与 CLI 仓库未共同通过集成验证前,不得单独声明新版模板可发布。
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "digest"
|
|
5
|
+
require "fileutils"
|
|
6
|
+
require "json"
|
|
7
|
+
require "pathname"
|
|
8
|
+
|
|
9
|
+
ROOT = Pathname.new(__dir__).join("..").realpath
|
|
10
|
+
SOURCE_ROOT = ROOT.join(".agents/skills")
|
|
11
|
+
LOCK_PATH = ROOT.join("skills-lock.json")
|
|
12
|
+
PROJECTION_ROOTS = %w[
|
|
13
|
+
.claude/skills
|
|
14
|
+
.codex/skills
|
|
15
|
+
.hermes/skills
|
|
16
|
+
.pi/skills
|
|
17
|
+
.trae/skills
|
|
18
|
+
].freeze
|
|
19
|
+
OBSOLETE_SKILLS = %w[to-prd to-issues].freeze
|
|
20
|
+
|
|
21
|
+
def skill_names(root)
|
|
22
|
+
root.children.select(&:directory?).map { |item| item.basename.to_s }.sort
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def shared_skill_names
|
|
26
|
+
manifest = JSON.parse(LOCK_PATH.read)
|
|
27
|
+
shared = manifest.dig("skills", "shared")
|
|
28
|
+
return shared.keys.sort if manifest["version"] == 3 && shared.is_a?(Hash)
|
|
29
|
+
|
|
30
|
+
skill_names(SOURCE_ROOT) - OBSOLETE_SKILLS
|
|
31
|
+
rescue JSON::ParserError, Errno::ENOENT
|
|
32
|
+
warn "skills-lock.json 无法解析;请先运行 scripts/update-skill-lock"
|
|
33
|
+
exit 1
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def tree_hash(root)
|
|
37
|
+
digest = Digest::SHA256.new
|
|
38
|
+
root.glob("**/*", File::FNM_DOTMATCH)
|
|
39
|
+
.reject { |item| item.directory? || item.basename.to_s == ".DS_Store" }
|
|
40
|
+
.sort_by { |item| item.relative_path_from(root).to_s }
|
|
41
|
+
.each do |item|
|
|
42
|
+
relative = item.relative_path_from(root).to_s
|
|
43
|
+
digest << relative << "\0" << item.binread << "\0"
|
|
44
|
+
end
|
|
45
|
+
digest.hexdigest
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def validate_target!(target)
|
|
49
|
+
expanded = target.expand_path
|
|
50
|
+
expected_prefix = ROOT.join(".").expand_path.to_s + File::SEPARATOR
|
|
51
|
+
return if expanded.to_s.start_with?(expected_prefix) && expanded.basename.to_s == "skills"
|
|
52
|
+
|
|
53
|
+
warn "refusing unsafe projection target: #{target}"
|
|
54
|
+
exit 2
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def tracked_projection?(target)
|
|
58
|
+
relative = target.relative_path_from(ROOT).to_s
|
|
59
|
+
!IO.popen(["git", "ls-files", "-z", "--", relative], &:read).empty?
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
check_only = ARGV.include?("--check")
|
|
63
|
+
shared = shared_skill_names
|
|
64
|
+
missing_from_source = shared.reject { |skill_name| SOURCE_ROOT.join(skill_name).directory? }
|
|
65
|
+
unless missing_from_source.empty?
|
|
66
|
+
warn "锁文件声明的共享 skills 缺少权威内容: #{missing_from_source.join(', ')}"
|
|
67
|
+
exit 1
|
|
68
|
+
end
|
|
69
|
+
obsolete_in_source = shared & OBSOLETE_SKILLS
|
|
70
|
+
unless obsolete_in_source.empty?
|
|
71
|
+
warn "obsolete skills remain in canonical root: #{obsolete_in_source.join(', ')}"
|
|
72
|
+
exit 1
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
drift = []
|
|
76
|
+
|
|
77
|
+
PROJECTION_ROOTS.each do |relative_root|
|
|
78
|
+
projection_root = ROOT.join(relative_root)
|
|
79
|
+
validate_target!(projection_root)
|
|
80
|
+
FileUtils.mkdir_p(projection_root) unless check_only
|
|
81
|
+
|
|
82
|
+
shared.each do |skill_name|
|
|
83
|
+
source = SOURCE_ROOT.join(skill_name)
|
|
84
|
+
target = projection_root.join(skill_name)
|
|
85
|
+
|
|
86
|
+
if check_only
|
|
87
|
+
if target.symlink?
|
|
88
|
+
drift << "projection target mismatch: #{target.relative_path_from(ROOT)}" unless target.realpath == source.realpath
|
|
89
|
+
elsif !target.directory?
|
|
90
|
+
drift << "missing projection: #{target.relative_path_from(ROOT)}"
|
|
91
|
+
elsif tree_hash(source) != tree_hash(target)
|
|
92
|
+
drift << "projection drift: #{target.relative_path_from(ROOT)}"
|
|
93
|
+
end
|
|
94
|
+
next
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
if target.symlink?
|
|
98
|
+
next if target.realpath == source.realpath
|
|
99
|
+
|
|
100
|
+
FileUtils.rm_f(target)
|
|
101
|
+
FileUtils.ln_s(source.relative_path_from(projection_root), target)
|
|
102
|
+
elsif !tracked_projection?(target)
|
|
103
|
+
FileUtils.rm_rf(target)
|
|
104
|
+
FileUtils.ln_s(source.relative_path_from(projection_root), target)
|
|
105
|
+
else
|
|
106
|
+
FileUtils.rm_rf(target)
|
|
107
|
+
FileUtils.cp_r(source, target, preserve: true)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
OBSOLETE_SKILLS.each do |skill_name|
|
|
112
|
+
target = projection_root.join(skill_name)
|
|
113
|
+
if check_only
|
|
114
|
+
drift << "obsolete projection: #{target.relative_path_from(ROOT)}" if target.exist?
|
|
115
|
+
else
|
|
116
|
+
FileUtils.rm_rf(target)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
unless drift.empty?
|
|
122
|
+
warn drift.join("\n")
|
|
123
|
+
exit 1
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
puts check_only ? "skill projections are synchronized" : "synchronized #{shared.length} shared skills"
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "digest"
|
|
5
|
+
require "json"
|
|
6
|
+
require "pathname"
|
|
7
|
+
|
|
8
|
+
ROOT = Pathname.new(__dir__).join("..").realpath
|
|
9
|
+
LOCK_PATH = ROOT.join("skills-lock.json")
|
|
10
|
+
SHARED_ROOT = ROOT.join(".agents/skills")
|
|
11
|
+
PROJECTION_ROOTS = %w[
|
|
12
|
+
.claude/skills
|
|
13
|
+
.codex/skills
|
|
14
|
+
.hermes/skills
|
|
15
|
+
.pi/skills
|
|
16
|
+
.trae/skills
|
|
17
|
+
].freeze
|
|
18
|
+
GIT_WORKTREE = system(
|
|
19
|
+
"git",
|
|
20
|
+
"rev-parse",
|
|
21
|
+
"--is-inside-work-tree",
|
|
22
|
+
out: File::NULL,
|
|
23
|
+
err: File::NULL
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
def tracked_skill_names(relative_root)
|
|
27
|
+
return [] unless GIT_WORKTREE
|
|
28
|
+
|
|
29
|
+
IO.popen(
|
|
30
|
+
["git", "ls-files", "-z", "--", relative_root],
|
|
31
|
+
err: File::NULL,
|
|
32
|
+
&:read
|
|
33
|
+
).split("\0").map { |item| item.split("/")[2] }.compact.uniq
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def skill_names(root)
|
|
37
|
+
return [] unless root.directory?
|
|
38
|
+
|
|
39
|
+
root.children.select(&:directory?).map { |item| item.basename.to_s }.sort
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def tree_hash(root)
|
|
43
|
+
digest = Digest::SHA256.new
|
|
44
|
+
root.glob("**/*", File::FNM_DOTMATCH)
|
|
45
|
+
.reject { |item| item.directory? || item.basename.to_s == ".DS_Store" }
|
|
46
|
+
.sort_by { |item| item.relative_path_from(root).to_s }
|
|
47
|
+
.each do |item|
|
|
48
|
+
relative = item.relative_path_from(root).to_s
|
|
49
|
+
digest << relative << "\0" << item.binread << "\0"
|
|
50
|
+
end
|
|
51
|
+
digest.hexdigest
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def old_metadata
|
|
55
|
+
return {} unless LOCK_PATH.file?
|
|
56
|
+
|
|
57
|
+
parsed = JSON.parse(LOCK_PATH.read)
|
|
58
|
+
skills = parsed.fetch("skills", {})
|
|
59
|
+
return skills unless skills.key?("shared") || skills.key?("platform")
|
|
60
|
+
|
|
61
|
+
shared = skills.fetch("shared", {})
|
|
62
|
+
platform = skills.fetch("platform", {}).values.reduce({}) { |all, group| all.merge(group) }
|
|
63
|
+
shared.merge(platform)
|
|
64
|
+
rescue JSON::ParserError
|
|
65
|
+
{}
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def existing_shared_names
|
|
69
|
+
return nil unless LOCK_PATH.file?
|
|
70
|
+
|
|
71
|
+
parsed = JSON.parse(LOCK_PATH.read)
|
|
72
|
+
shared = parsed.dig("skills", "shared")
|
|
73
|
+
return shared.keys.sort if parsed["version"] == 3 && shared.is_a?(Hash)
|
|
74
|
+
|
|
75
|
+
nil
|
|
76
|
+
rescue JSON::ParserError
|
|
77
|
+
nil
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def existing_platform_inventory
|
|
81
|
+
return nil unless LOCK_PATH.file?
|
|
82
|
+
|
|
83
|
+
parsed = JSON.parse(LOCK_PATH.read)
|
|
84
|
+
platform = parsed.dig("skills", "platform")
|
|
85
|
+
return nil unless parsed["version"] == 3 && platform.is_a?(Hash)
|
|
86
|
+
|
|
87
|
+
platform.transform_values { |skills| skills.keys.sort }
|
|
88
|
+
rescue JSON::ParserError
|
|
89
|
+
nil
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def metadata_for(skill_name, skill_path, target_root, previous)
|
|
93
|
+
old = previous.fetch(skill_name, {})
|
|
94
|
+
metadata = {
|
|
95
|
+
"source" => old.fetch("source", "project"),
|
|
96
|
+
"sourceType" => old.fetch("sourceType", "local"),
|
|
97
|
+
"skillPath" => old.fetch("skillPath", skill_path),
|
|
98
|
+
"effectiveHash" => tree_hash(target_root)
|
|
99
|
+
}
|
|
100
|
+
upstream_hash = old["upstreamHash"] || old["computedHash"]
|
|
101
|
+
metadata["upstreamHash"] = upstream_hash if upstream_hash
|
|
102
|
+
metadata
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
previous = old_metadata
|
|
106
|
+
add_names = ARGV.grep(/\A--add=/).map { |item| item.split("=", 2).last }
|
|
107
|
+
remove_names = ARGV.grep(/\A--remove=/).map { |item| item.split("=", 2).last }
|
|
108
|
+
platform_additions = ARGV.grep(/\A--add-platform=/).map do |item|
|
|
109
|
+
item.split("=", 2).last.split(":", 2)
|
|
110
|
+
end
|
|
111
|
+
shared_names = existing_shared_names || skill_names(SHARED_ROOT)
|
|
112
|
+
shared_names = ((shared_names + add_names).uniq - remove_names).sort
|
|
113
|
+
|
|
114
|
+
missing_shared = shared_names.reject { |skill_name| SHARED_ROOT.join(skill_name).directory? }
|
|
115
|
+
unless missing_shared.empty?
|
|
116
|
+
warn "锁文件声明的共享 skills 缺少权威内容: #{missing_shared.join(', ')}"
|
|
117
|
+
exit 1
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
tracked_shared_names = tracked_skill_names(".agents/skills")
|
|
121
|
+
obsolete_names = %w[to-prd to-issues]
|
|
122
|
+
unlocked_tracked = tracked_shared_names - shared_names - obsolete_names
|
|
123
|
+
unless unlocked_tracked.empty?
|
|
124
|
+
warn "发现未登记到 skills-lock.json 的已跟踪共享 skills: #{unlocked_tracked.sort.join(', ')}"
|
|
125
|
+
warn "确认新增后运行 scripts/update-skill-lock --add=<skill-name>"
|
|
126
|
+
exit 1
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
all_targets = [".agents/skills", *PROJECTION_ROOTS]
|
|
130
|
+
|
|
131
|
+
shared = shared_names.to_h do |skill_name|
|
|
132
|
+
skill_root = SHARED_ROOT.join(skill_name)
|
|
133
|
+
metadata = metadata_for(
|
|
134
|
+
skill_name,
|
|
135
|
+
".agents/skills/#{skill_name}/SKILL.md",
|
|
136
|
+
skill_root,
|
|
137
|
+
previous
|
|
138
|
+
)
|
|
139
|
+
metadata["targets"] = all_targets
|
|
140
|
+
[skill_name, metadata]
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
existing_platform = existing_platform_inventory
|
|
144
|
+
platform = {}
|
|
145
|
+
PROJECTION_ROOTS.each do |relative_root|
|
|
146
|
+
target_root = ROOT.join(relative_root)
|
|
147
|
+
default_names = skill_names(target_root) - shared_names
|
|
148
|
+
platform_names = existing_platform ? existing_platform.fetch(relative_root, []) : default_names
|
|
149
|
+
additions = platform_additions.select { |root_name, _| root_name == relative_root }.map(&:last)
|
|
150
|
+
platform_names = ((platform_names + additions).uniq - remove_names - shared_names).sort
|
|
151
|
+
|
|
152
|
+
missing_platform = platform_names.reject { |skill_name| target_root.join(skill_name).directory? }
|
|
153
|
+
unless missing_platform.empty?
|
|
154
|
+
warn "锁文件声明的平台 skills 缺少内容 (#{relative_root}): #{missing_platform.join(', ')}"
|
|
155
|
+
exit 1
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
tracked_platform_names = tracked_skill_names(relative_root)
|
|
159
|
+
unlocked_platform = tracked_platform_names - shared_names - platform_names - obsolete_names
|
|
160
|
+
unless unlocked_platform.empty?
|
|
161
|
+
warn "发现未登记的平台 skills (#{relative_root}): #{unlocked_platform.sort.join(', ')}"
|
|
162
|
+
warn "确认新增后运行 scripts/update-skill-lock --add-platform=#{relative_root}:<skill-name>"
|
|
163
|
+
exit 1
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
next if platform_names.empty?
|
|
167
|
+
|
|
168
|
+
platform[relative_root] = platform_names.to_h do |skill_name|
|
|
169
|
+
skill_root = target_root.join(skill_name)
|
|
170
|
+
metadata = metadata_for(
|
|
171
|
+
skill_name,
|
|
172
|
+
"#{relative_root}/#{skill_name}/SKILL.md",
|
|
173
|
+
skill_root,
|
|
174
|
+
previous
|
|
175
|
+
)
|
|
176
|
+
metadata["targets"] = [relative_root]
|
|
177
|
+
[skill_name, metadata]
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
manifest = {
|
|
182
|
+
"version" => 3,
|
|
183
|
+
"generatedBy" => "scripts/update-skill-lock",
|
|
184
|
+
"canonicalRoot" => ".agents/skills",
|
|
185
|
+
"projectionRoots" => PROJECTION_ROOTS,
|
|
186
|
+
"skills" => {
|
|
187
|
+
"shared" => shared,
|
|
188
|
+
"platform" => platform
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
rendered = JSON.pretty_generate(manifest) + "\n"
|
|
192
|
+
|
|
193
|
+
if ARGV.include?("--check")
|
|
194
|
+
unless LOCK_PATH.file? && LOCK_PATH.read == rendered
|
|
195
|
+
warn "skills-lock.json is stale; run scripts/update-skill-lock"
|
|
196
|
+
exit 1
|
|
197
|
+
end
|
|
198
|
+
puts "skills-lock.json matches distributed skills"
|
|
199
|
+
else
|
|
200
|
+
LOCK_PATH.write(rendered)
|
|
201
|
+
puts "updated skills-lock.json with #{shared.length} shared skills and #{platform.values.sum(&:length)} platform skills"
|
|
202
|
+
end
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "pathname"
|
|
5
|
+
|
|
6
|
+
ROOT = Pathname.new(__dir__).join("..").realpath
|
|
7
|
+
|
|
8
|
+
def route(facts)
|
|
9
|
+
if facts.fetch(:repository_mode) == "template-source"
|
|
10
|
+
return %w[
|
|
11
|
+
impact-assessment
|
|
12
|
+
ssot-update
|
|
13
|
+
skill-projection-sync
|
|
14
|
+
pressure-scenarios
|
|
15
|
+
fresh-verification
|
|
16
|
+
independent-review
|
|
17
|
+
]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
gates = %w[impact-assessment tracker-sync fresh-verification]
|
|
21
|
+
return gates if facts.fetch(:scale) == :small && !facts.fetch(:high_risk)
|
|
22
|
+
|
|
23
|
+
gates.concat(%w[spec product-overview functional-architecture])
|
|
24
|
+
|
|
25
|
+
if facts.fetch(:ui_impact)
|
|
26
|
+
gates.concat(%w[
|
|
27
|
+
low-fidelity-prototype
|
|
28
|
+
state-matrix
|
|
29
|
+
high-fidelity-html-prototype
|
|
30
|
+
user-confirmation
|
|
31
|
+
])
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
gates.concat(%w[openapi-draft design-review openapi-freeze]) if facts.fetch(:api_impact)
|
|
35
|
+
|
|
36
|
+
if facts.fetch(:backend_impact) || facts.fetch(:high_risk)
|
|
37
|
+
gates.concat(%w[engineering-baseline architecture-review])
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
gates << "data-architecture" if facts.fetch(:data_impact)
|
|
41
|
+
gates << "spec-delta" if facts.fetch(:existing_frozen_baseline) && facts.fetch(:high_risk)
|
|
42
|
+
gates.concat(%w[parent-ticket vertical-slice-tickets])
|
|
43
|
+
gates.uniq
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
scenarios = [
|
|
47
|
+
{
|
|
48
|
+
name: "小文案调整",
|
|
49
|
+
facts: {
|
|
50
|
+
repository_mode: "project-instance", scale: :small, high_risk: false,
|
|
51
|
+
ui_impact: false, api_impact: false, backend_impact: false,
|
|
52
|
+
data_impact: false, existing_frozen_baseline: true
|
|
53
|
+
},
|
|
54
|
+
required: %w[impact-assessment tracker-sync fresh-verification],
|
|
55
|
+
forbidden: %w[spec product-overview spec-delta high-fidelity-html-prototype]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "纯后端新功能",
|
|
59
|
+
facts: {
|
|
60
|
+
repository_mode: "project-instance", scale: :new_module, high_risk: false,
|
|
61
|
+
ui_impact: false, api_impact: true, backend_impact: true,
|
|
62
|
+
data_impact: false, existing_frozen_baseline: false
|
|
63
|
+
},
|
|
64
|
+
required: %w[spec product-overview functional-architecture openapi-draft engineering-baseline parent-ticket vertical-slice-tickets],
|
|
65
|
+
forbidden: %w[low-fidelity-prototype state-matrix high-fidelity-html-prototype user-confirmation spec-delta]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: "有 UI 的新功能",
|
|
69
|
+
facts: {
|
|
70
|
+
repository_mode: "project-instance", scale: :new_module, high_risk: false,
|
|
71
|
+
ui_impact: true, api_impact: true, backend_impact: true,
|
|
72
|
+
data_impact: false, existing_frozen_baseline: false
|
|
73
|
+
},
|
|
74
|
+
required: %w[spec product-overview low-fidelity-prototype state-matrix high-fidelity-html-prototype user-confirmation openapi-freeze vertical-slice-tickets],
|
|
75
|
+
forbidden: %w[spec-delta]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: "既有冻结基线的高风险变更",
|
|
79
|
+
facts: {
|
|
80
|
+
repository_mode: "project-instance", scale: :medium, high_risk: true,
|
|
81
|
+
ui_impact: false, api_impact: true, backend_impact: true,
|
|
82
|
+
data_impact: true, existing_frozen_baseline: true
|
|
83
|
+
},
|
|
84
|
+
required: %w[spec product-overview spec-delta openapi-draft data-architecture architecture-review vertical-slice-tickets],
|
|
85
|
+
forbidden: %w[high-fidelity-html-prototype]
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: "模板源流程修订",
|
|
89
|
+
facts: {
|
|
90
|
+
repository_mode: "template-source", scale: :process, high_risk: true,
|
|
91
|
+
ui_impact: false, api_impact: false, backend_impact: false,
|
|
92
|
+
data_impact: false, existing_frozen_baseline: false
|
|
93
|
+
},
|
|
94
|
+
required: %w[impact-assessment ssot-update skill-projection-sync pressure-scenarios fresh-verification independent-review],
|
|
95
|
+
forbidden: %w[spec product-overview openapi-draft spec-delta vertical-slice-tickets]
|
|
96
|
+
}
|
|
97
|
+
].freeze
|
|
98
|
+
|
|
99
|
+
failures = []
|
|
100
|
+
|
|
101
|
+
scenarios.each do |scenario|
|
|
102
|
+
result = route(scenario.fetch(:facts))
|
|
103
|
+
missing = scenario.fetch(:required) - result
|
|
104
|
+
unexpected = scenario.fetch(:forbidden) & result
|
|
105
|
+
failures << "#{scenario.fetch(:name)} 缺少门禁: #{missing.join(', ')}" unless missing.empty?
|
|
106
|
+
failures << "#{scenario.fetch(:name)} 错误触发: #{unexpected.join(', ')}" unless unexpected.empty?
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
semantic_markers = {
|
|
110
|
+
"AGENTS.md" => [
|
|
111
|
+
"21 个门禁全部是条件强制门禁",
|
|
112
|
+
"只要进入 Spec 基线",
|
|
113
|
+
"只有存在 UI 影响时",
|
|
114
|
+
"Spec Delta 只记录相对既有冻结 Spec 基线",
|
|
115
|
+
"template-source"
|
|
116
|
+
],
|
|
117
|
+
"docs/process/harness-process-tailoring.md" => [
|
|
118
|
+
"全新产品 / 模块",
|
|
119
|
+
"不生成空文档",
|
|
120
|
+
"最近可信阶段"
|
|
121
|
+
]
|
|
122
|
+
}.freeze
|
|
123
|
+
|
|
124
|
+
semantic_markers.each do |relative_path, markers|
|
|
125
|
+
body = ROOT.join(relative_path).read
|
|
126
|
+
markers.each do |marker|
|
|
127
|
+
failures << "#{relative_path} 缺少语义标记: #{marker}" unless body.include?(marker)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
unless failures.empty?
|
|
132
|
+
warn failures.join("\n")
|
|
133
|
+
exit 1
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
puts "五类生命周期压力场景验证通过"
|