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
|
@@ -77,7 +77,7 @@ def create_arrow(
|
|
|
77
77
|
) -> list:
|
|
78
78
|
"""
|
|
79
79
|
Create an arrow element.
|
|
80
|
-
|
|
80
|
+
|
|
81
81
|
Args:
|
|
82
82
|
from_x: Starting X coordinate
|
|
83
83
|
from_y: Starting Y coordinate
|
|
@@ -86,12 +86,12 @@ def create_arrow(
|
|
|
86
86
|
style: Line style (solid, dashed, dotted)
|
|
87
87
|
color: Arrow color
|
|
88
88
|
label: Optional text label on the arrow
|
|
89
|
-
|
|
89
|
+
|
|
90
90
|
Returns:
|
|
91
91
|
List of elements (arrow and optional label)
|
|
92
92
|
"""
|
|
93
93
|
elements = []
|
|
94
|
-
|
|
94
|
+
|
|
95
95
|
# Arrow element
|
|
96
96
|
arrow = {
|
|
97
97
|
"id": generate_unique_id(),
|
|
@@ -133,12 +133,12 @@ def create_arrow(
|
|
|
133
133
|
"lastCommittedPoint": None
|
|
134
134
|
}
|
|
135
135
|
elements.append(arrow)
|
|
136
|
-
|
|
136
|
+
|
|
137
137
|
# Optional label
|
|
138
138
|
if label:
|
|
139
139
|
mid_x = (from_x + to_x) / 2 - (len(label) * 5)
|
|
140
140
|
mid_y = (from_y + to_y) / 2 - 10
|
|
141
|
-
|
|
141
|
+
|
|
142
142
|
label_element = {
|
|
143
143
|
"id": generate_unique_id(),
|
|
144
144
|
"type": "text",
|
|
@@ -177,7 +177,7 @@ def create_arrow(
|
|
|
177
177
|
"lineHeight": 1.25
|
|
178
178
|
}
|
|
179
179
|
elements.append(label_element)
|
|
180
|
-
|
|
180
|
+
|
|
181
181
|
return elements
|
|
182
182
|
|
|
183
183
|
|
|
@@ -193,7 +193,7 @@ def add_arrow_to_diagram(
|
|
|
193
193
|
) -> None:
|
|
194
194
|
"""
|
|
195
195
|
Add an arrow to an Excalidraw diagram.
|
|
196
|
-
|
|
196
|
+
|
|
197
197
|
Args:
|
|
198
198
|
diagram_path: Path to the Excalidraw diagram file
|
|
199
199
|
from_x: Starting X coordinate
|
|
@@ -206,28 +206,28 @@ def add_arrow_to_diagram(
|
|
|
206
206
|
"""
|
|
207
207
|
print(f"Creating arrow from ({from_x}, {from_y}) to ({to_x}, {to_y})")
|
|
208
208
|
arrow_elements = create_arrow(from_x, from_y, to_x, to_y, style, color, label)
|
|
209
|
-
|
|
209
|
+
|
|
210
210
|
if label:
|
|
211
211
|
print(f" With label: '{label}'")
|
|
212
|
-
|
|
212
|
+
|
|
213
213
|
# Load diagram
|
|
214
214
|
print(f"Loading diagram: {diagram_path}")
|
|
215
215
|
with open(diagram_path, 'r', encoding='utf-8') as f:
|
|
216
216
|
diagram = json.load(f)
|
|
217
|
-
|
|
217
|
+
|
|
218
218
|
# Add arrow elements
|
|
219
219
|
if 'elements' not in diagram:
|
|
220
220
|
diagram['elements'] = []
|
|
221
|
-
|
|
221
|
+
|
|
222
222
|
original_count = len(diagram['elements'])
|
|
223
223
|
diagram['elements'].extend(arrow_elements)
|
|
224
224
|
print(f" Added {len(arrow_elements)} elements (total: {original_count} -> {len(diagram['elements'])})")
|
|
225
|
-
|
|
225
|
+
|
|
226
226
|
# Save diagram
|
|
227
227
|
print(f"Saving diagram")
|
|
228
228
|
with open(diagram_path, 'w', encoding='utf-8') as f:
|
|
229
229
|
json.dump(diagram, f, indent=2, ensure_ascii=False)
|
|
230
|
-
|
|
230
|
+
|
|
231
231
|
print(f"✓ Successfully added arrow to diagram")
|
|
232
232
|
|
|
233
233
|
|
|
@@ -247,20 +247,20 @@ def main():
|
|
|
247
247
|
print(" python add-arrow.py diagram.excalidraw 300 200 500 300")
|
|
248
248
|
print(" python add-arrow.py diagram.excalidraw 300 200 500 300 --label 'HTTP'")
|
|
249
249
|
sys.exit(1)
|
|
250
|
-
|
|
250
|
+
|
|
251
251
|
diagram_path = Path(sys.argv[1])
|
|
252
252
|
from_x = float(sys.argv[2])
|
|
253
253
|
from_y = float(sys.argv[3])
|
|
254
254
|
to_x = float(sys.argv[4])
|
|
255
255
|
to_y = float(sys.argv[5])
|
|
256
|
-
|
|
256
|
+
|
|
257
257
|
# Parse optional arguments
|
|
258
258
|
style = "solid"
|
|
259
259
|
color = "#1e1e1e"
|
|
260
260
|
label = None
|
|
261
261
|
# Default: use edit suffix to avoid editor overwrite issues
|
|
262
262
|
use_edit_suffix = True
|
|
263
|
-
|
|
263
|
+
|
|
264
264
|
i = 6
|
|
265
265
|
while i < len(sys.argv):
|
|
266
266
|
if sys.argv[i] == '--style':
|
|
@@ -296,12 +296,12 @@ def main():
|
|
|
296
296
|
else:
|
|
297
297
|
print(f"Error: Unknown option: {sys.argv[i]}")
|
|
298
298
|
sys.exit(1)
|
|
299
|
-
|
|
299
|
+
|
|
300
300
|
# Validate inputs
|
|
301
301
|
if not diagram_path.exists():
|
|
302
302
|
print(f"Error: Diagram file not found: {diagram_path}")
|
|
303
303
|
sys.exit(1)
|
|
304
|
-
|
|
304
|
+
|
|
305
305
|
try:
|
|
306
306
|
work_path, final_path = prepare_edit_path(diagram_path, use_edit_suffix)
|
|
307
307
|
add_arrow_to_diagram(work_path, from_x, from_y, to_x, to_y, style, color, label)
|
|
@@ -37,60 +37,60 @@ def calculate_bounding_box(elements: List[Dict[str, Any]]) -> Tuple[float, float
|
|
|
37
37
|
"""Calculate the bounding box (min_x, min_y, max_x, max_y) of icon elements."""
|
|
38
38
|
if not elements:
|
|
39
39
|
return (0, 0, 0, 0)
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
min_x = float('inf')
|
|
42
42
|
min_y = float('inf')
|
|
43
43
|
max_x = float('-inf')
|
|
44
44
|
max_y = float('-inf')
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
for element in elements:
|
|
47
47
|
if 'x' in element and 'y' in element:
|
|
48
48
|
x = element['x']
|
|
49
49
|
y = element['y']
|
|
50
50
|
width = element.get('width', 0)
|
|
51
51
|
height = element.get('height', 0)
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
min_x = min(min_x, x)
|
|
54
54
|
min_y = min(min_y, y)
|
|
55
55
|
max_x = max(max_x, x + width)
|
|
56
56
|
max_y = max(max_y, y + height)
|
|
57
|
-
|
|
57
|
+
|
|
58
58
|
return (min_x, min_y, max_x, max_y)
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
def transform_icon_elements(
|
|
62
|
-
elements: List[Dict[str, Any]],
|
|
63
|
-
target_x: float,
|
|
62
|
+
elements: List[Dict[str, Any]],
|
|
63
|
+
target_x: float,
|
|
64
64
|
target_y: float
|
|
65
65
|
) -> List[Dict[str, Any]]:
|
|
66
66
|
"""
|
|
67
67
|
Transform icon elements to target coordinates with unique IDs.
|
|
68
|
-
|
|
68
|
+
|
|
69
69
|
Args:
|
|
70
70
|
elements: Icon elements from JSON file
|
|
71
71
|
target_x: Target X coordinate (top-left position)
|
|
72
72
|
target_y: Target Y coordinate (top-left position)
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
Returns:
|
|
75
75
|
Transformed elements with new coordinates and IDs
|
|
76
76
|
"""
|
|
77
77
|
if not elements:
|
|
78
78
|
return []
|
|
79
|
-
|
|
79
|
+
|
|
80
80
|
# Calculate bounding box
|
|
81
81
|
min_x, min_y, max_x, max_y = calculate_bounding_box(elements)
|
|
82
|
-
|
|
82
|
+
|
|
83
83
|
# Calculate offset
|
|
84
84
|
offset_x = target_x - min_x
|
|
85
85
|
offset_y = target_y - min_y
|
|
86
|
-
|
|
86
|
+
|
|
87
87
|
# Create ID mapping: old_id -> new_id
|
|
88
88
|
id_mapping = {}
|
|
89
89
|
for element in elements:
|
|
90
90
|
if 'id' in element:
|
|
91
91
|
old_id = element['id']
|
|
92
92
|
id_mapping[old_id] = generate_unique_id()
|
|
93
|
-
|
|
93
|
+
|
|
94
94
|
# Create group ID mapping
|
|
95
95
|
group_id_mapping = {}
|
|
96
96
|
for element in elements:
|
|
@@ -98,47 +98,47 @@ def transform_icon_elements(
|
|
|
98
98
|
for old_group_id in element['groupIds']:
|
|
99
99
|
if old_group_id not in group_id_mapping:
|
|
100
100
|
group_id_mapping[old_group_id] = generate_unique_id()
|
|
101
|
-
|
|
101
|
+
|
|
102
102
|
# Transform elements
|
|
103
103
|
transformed = []
|
|
104
104
|
for element in elements:
|
|
105
105
|
new_element = element.copy()
|
|
106
|
-
|
|
106
|
+
|
|
107
107
|
# Update coordinates
|
|
108
108
|
if 'x' in new_element:
|
|
109
109
|
new_element['x'] = new_element['x'] + offset_x
|
|
110
110
|
if 'y' in new_element:
|
|
111
111
|
new_element['y'] = new_element['y'] + offset_y
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
# Update ID
|
|
114
114
|
if 'id' in new_element:
|
|
115
115
|
new_element['id'] = id_mapping[new_element['id']]
|
|
116
|
-
|
|
116
|
+
|
|
117
117
|
# Update group IDs
|
|
118
118
|
if 'groupIds' in new_element:
|
|
119
119
|
new_element['groupIds'] = [
|
|
120
120
|
group_id_mapping[gid] for gid in new_element['groupIds']
|
|
121
121
|
]
|
|
122
|
-
|
|
122
|
+
|
|
123
123
|
# Update binding references if they exist
|
|
124
124
|
if 'startBinding' in new_element and new_element['startBinding']:
|
|
125
125
|
if 'elementId' in new_element['startBinding']:
|
|
126
126
|
old_id = new_element['startBinding']['elementId']
|
|
127
127
|
if old_id in id_mapping:
|
|
128
128
|
new_element['startBinding']['elementId'] = id_mapping[old_id]
|
|
129
|
-
|
|
129
|
+
|
|
130
130
|
if 'endBinding' in new_element and new_element['endBinding']:
|
|
131
131
|
if 'elementId' in new_element['endBinding']:
|
|
132
132
|
old_id = new_element['endBinding']['elementId']
|
|
133
133
|
if old_id in id_mapping:
|
|
134
134
|
new_element['endBinding']['elementId'] = id_mapping[old_id]
|
|
135
|
-
|
|
135
|
+
|
|
136
136
|
# Update containerId if it exists
|
|
137
137
|
if 'containerId' in new_element and new_element['containerId']:
|
|
138
138
|
old_id = new_element['containerId']
|
|
139
139
|
if old_id in id_mapping:
|
|
140
140
|
new_element['containerId'] = id_mapping[old_id]
|
|
141
|
-
|
|
141
|
+
|
|
142
142
|
# Update boundElements if they exist
|
|
143
143
|
if 'boundElements' in new_element and new_element['boundElements']:
|
|
144
144
|
new_bound_elements = []
|
|
@@ -149,31 +149,31 @@ def transform_icon_elements(
|
|
|
149
149
|
bound_elem['id'] = id_mapping[old_id]
|
|
150
150
|
new_bound_elements.append(bound_elem)
|
|
151
151
|
new_element['boundElements'] = new_bound_elements
|
|
152
|
-
|
|
152
|
+
|
|
153
153
|
transformed.append(new_element)
|
|
154
|
-
|
|
154
|
+
|
|
155
155
|
return transformed
|
|
156
156
|
|
|
157
157
|
|
|
158
158
|
def load_icon(icon_name: str, library_path: Path) -> List[Dict[str, Any]]:
|
|
159
159
|
"""
|
|
160
160
|
Load icon elements from library.
|
|
161
|
-
|
|
161
|
+
|
|
162
162
|
Args:
|
|
163
163
|
icon_name: Name of the icon (e.g., "EC2", "VPC")
|
|
164
164
|
library_path: Path to the icon library directory
|
|
165
|
-
|
|
165
|
+
|
|
166
166
|
Returns:
|
|
167
167
|
List of icon elements
|
|
168
168
|
"""
|
|
169
169
|
icon_file = library_path / "icons" / f"{icon_name}.json"
|
|
170
|
-
|
|
170
|
+
|
|
171
171
|
if not icon_file.exists():
|
|
172
172
|
raise FileNotFoundError(f"Icon file not found: {icon_file}")
|
|
173
|
-
|
|
173
|
+
|
|
174
174
|
with open(icon_file, 'r', encoding='utf-8') as f:
|
|
175
175
|
icon_data = json.load(f)
|
|
176
|
-
|
|
176
|
+
|
|
177
177
|
return icon_data.get('elements', [])
|
|
178
178
|
|
|
179
179
|
|
|
@@ -216,12 +216,12 @@ def finalize_edit_path(work_path: Path, final_path: Path | None) -> None:
|
|
|
216
216
|
def create_text_label(text: str, x: float, y: float) -> Dict[str, Any]:
|
|
217
217
|
"""
|
|
218
218
|
Create a text label element.
|
|
219
|
-
|
|
219
|
+
|
|
220
220
|
Args:
|
|
221
221
|
text: Label text
|
|
222
222
|
x: X coordinate
|
|
223
223
|
y: Y coordinate
|
|
224
|
-
|
|
224
|
+
|
|
225
225
|
Returns:
|
|
226
226
|
Text element dictionary
|
|
227
227
|
"""
|
|
@@ -274,7 +274,7 @@ def add_icon_to_diagram(
|
|
|
274
274
|
) -> None:
|
|
275
275
|
"""
|
|
276
276
|
Add an icon to an Excalidraw diagram.
|
|
277
|
-
|
|
277
|
+
|
|
278
278
|
Args:
|
|
279
279
|
diagram_path: Path to the Excalidraw diagram file
|
|
280
280
|
icon_name: Name of the icon to add
|
|
@@ -287,43 +287,43 @@ def add_icon_to_diagram(
|
|
|
287
287
|
print(f"Loading icon: {icon_name}")
|
|
288
288
|
icon_elements = load_icon(icon_name, library_path)
|
|
289
289
|
print(f" Loaded {len(icon_elements)} elements")
|
|
290
|
-
|
|
290
|
+
|
|
291
291
|
# Transform icon elements
|
|
292
292
|
print(f"Transforming to position ({x}, {y})")
|
|
293
293
|
transformed_elements = transform_icon_elements(icon_elements, x, y)
|
|
294
|
-
|
|
294
|
+
|
|
295
295
|
# Calculate icon bounding box for label positioning
|
|
296
296
|
if label and transformed_elements:
|
|
297
297
|
min_x, min_y, max_x, max_y = calculate_bounding_box(transformed_elements)
|
|
298
298
|
icon_width = max_x - min_x
|
|
299
299
|
icon_height = max_y - min_y
|
|
300
|
-
|
|
300
|
+
|
|
301
301
|
# Position label below icon, centered
|
|
302
302
|
label_x = min_x + (icon_width / 2) - (len(label) * 5)
|
|
303
303
|
label_y = max_y + 10
|
|
304
|
-
|
|
304
|
+
|
|
305
305
|
label_element = create_text_label(label, label_x, label_y)
|
|
306
306
|
transformed_elements.append(label_element)
|
|
307
307
|
print(f" Added label: '{label}'")
|
|
308
|
-
|
|
308
|
+
|
|
309
309
|
# Load diagram
|
|
310
310
|
print(f"Loading diagram: {diagram_path}")
|
|
311
311
|
with open(diagram_path, 'r', encoding='utf-8') as f:
|
|
312
312
|
diagram = json.load(f)
|
|
313
|
-
|
|
313
|
+
|
|
314
314
|
# Add transformed elements
|
|
315
315
|
if 'elements' not in diagram:
|
|
316
316
|
diagram['elements'] = []
|
|
317
|
-
|
|
317
|
+
|
|
318
318
|
original_count = len(diagram['elements'])
|
|
319
319
|
diagram['elements'].extend(transformed_elements)
|
|
320
320
|
print(f" Added {len(transformed_elements)} elements (total: {original_count} -> {len(diagram['elements'])})")
|
|
321
|
-
|
|
321
|
+
|
|
322
322
|
# Save diagram
|
|
323
323
|
print(f"Saving diagram")
|
|
324
324
|
with open(diagram_path, 'w', encoding='utf-8') as f:
|
|
325
325
|
json.dump(diagram, f, indent=2, ensure_ascii=False)
|
|
326
|
-
|
|
326
|
+
|
|
327
327
|
print(f"✓ Successfully added '{icon_name}' icon to diagram")
|
|
328
328
|
|
|
329
329
|
|
|
@@ -342,22 +342,22 @@ def main():
|
|
|
342
342
|
print(" python add-icon-to-diagram.py diagram.excalidraw EC2 500 300")
|
|
343
343
|
print(" python add-icon-to-diagram.py diagram.excalidraw EC2 500 300 --label 'Web Server'")
|
|
344
344
|
sys.exit(1)
|
|
345
|
-
|
|
345
|
+
|
|
346
346
|
diagram_path = Path(sys.argv[1])
|
|
347
347
|
icon_name = sys.argv[2]
|
|
348
348
|
x = float(sys.argv[3])
|
|
349
349
|
y = float(sys.argv[4])
|
|
350
|
-
|
|
350
|
+
|
|
351
351
|
# Default library path
|
|
352
352
|
script_dir = Path(__file__).parent
|
|
353
353
|
default_library_path = script_dir.parent / "libraries" / "aws-architecture-icons"
|
|
354
|
-
|
|
354
|
+
|
|
355
355
|
# Parse optional arguments
|
|
356
356
|
library_path = default_library_path
|
|
357
357
|
label = None
|
|
358
358
|
# Default: use edit suffix to avoid editor overwrite issues
|
|
359
359
|
use_edit_suffix = True
|
|
360
|
-
|
|
360
|
+
|
|
361
361
|
i = 5
|
|
362
362
|
while i < len(sys.argv):
|
|
363
363
|
if sys.argv[i] == '--library-path':
|
|
@@ -383,16 +383,16 @@ def main():
|
|
|
383
383
|
else:
|
|
384
384
|
print(f"Error: Unknown option: {sys.argv[i]}")
|
|
385
385
|
sys.exit(1)
|
|
386
|
-
|
|
386
|
+
|
|
387
387
|
# Validate inputs
|
|
388
388
|
if not diagram_path.exists():
|
|
389
389
|
print(f"Error: Diagram file not found: {diagram_path}")
|
|
390
390
|
sys.exit(1)
|
|
391
|
-
|
|
391
|
+
|
|
392
392
|
if not library_path.exists():
|
|
393
393
|
print(f"Error: Library path not found: {library_path}")
|
|
394
394
|
sys.exit(1)
|
|
395
|
-
|
|
395
|
+
|
|
396
396
|
try:
|
|
397
397
|
work_path, final_path = prepare_edit_path(diagram_path, use_edit_suffix)
|
|
398
398
|
add_icon_to_diagram(work_path, icon_name, x, y, library_path, label)
|
|
@@ -404,4 +404,3 @@ def main():
|
|
|
404
404
|
|
|
405
405
|
if __name__ == '__main__':
|
|
406
406
|
main()
|
|
407
|
-
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grilling
|
|
3
|
+
description: Grill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any 'grill' trigger phrases.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Interview me relentlessly about every aspect of this until we reach a shared understanding. Walk down each branch of the decision tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.
|
|
7
|
+
|
|
8
|
+
Ask the questions one at a time, waiting for feedback on each question before continuing. Asking multiple questions at once is bewildering.
|
|
9
|
+
|
|
10
|
+
If a *fact* can be found by exploring the environment (filesystem, tools, etc.), look it up rather than asking me. The *decisions*, though, are mine — put each one to me and wait for my answer.
|
|
11
|
+
|
|
12
|
+
Do not act on it until I confirm we have reached a shared understanding.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: handoff
|
|
3
|
+
description: Compact the current conversation into a handoff document for another agent to pick up.
|
|
4
|
+
argument-hint: "What will the next session be used for?"
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Write a handoff document summarising the current conversation so a fresh agent can continue the work. Save to the temporary directory of the user's OS - not the current workspace.
|
|
9
|
+
|
|
10
|
+
Include a "suggested skills" section in the document, which suggests skills that the agent should invoke.
|
|
11
|
+
|
|
12
|
+
Do not duplicate content already captured in other artifacts (specs, plans, ADRs, issues, commits, diffs). Reference them by path or URL instead.
|
|
13
|
+
|
|
14
|
+
Redact any sensitive information, such as API keys, passwords, or personally identifiable information.
|
|
15
|
+
|
|
16
|
+
If the user passed arguments, treat them as a description of what the next session will focus on and tailor the doc accordingly.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: implement
|
|
3
|
-
description: "Implement a piece of work based on a
|
|
3
|
+
description: "Implement a piece of work based on a spec or set of tickets."
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Implement the work described by the user in the
|
|
7
|
+
Implement the work described by the user in the spec or tickets.
|
|
8
8
|
|
|
9
9
|
Use /tdd where possible, at pre-agreed seams.
|
|
10
10
|
|
|
@@ -17,6 +17,11 @@ This command is _informed_ by the project's domain model and built on a shared d
|
|
|
17
17
|
|
|
18
18
|
### 1. Explore
|
|
19
19
|
|
|
20
|
+
**Scope before you scan — YAGNI.** Deepening a module pays off by making future changes to it easier, so put extra weight on the parts of the codebase that have recently changed. Decide *where* to look before you look:
|
|
21
|
+
|
|
22
|
+
- If the user named a direction — a module, a subsystem, a pain point — take it, and skip the inference below.
|
|
23
|
+
- Otherwise, walk back a good stretch of the commit history (`git log --oneline`) to find the codebase's hot spots — the files and areas that keep coming up — and let those paths pull your attention first. If the changes are scattered with no clear hot spot, widen the net.
|
|
24
|
+
|
|
20
25
|
Read the project's domain glossary (`CONTEXT.md`) and any ADRs in the area you're touching first.
|
|
21
26
|
|
|
22
27
|
Then use the Agent tool with `subagent_type=Explore` to walk the codebase. Don't follow rigid heuristics — explore organically and note where you experience friction:
|
|
@@ -56,7 +61,7 @@ Do NOT propose interfaces yet. After the file is written, ask the user: "Which o
|
|
|
56
61
|
|
|
57
62
|
### 3. Grilling loop
|
|
58
63
|
|
|
59
|
-
Once the user picks a candidate, run the `/grilling` skill to walk the
|
|
64
|
+
Once the user picks a candidate, run the `/grilling` skill to walk the decision tree with them — constraints, dependencies, the shape of the deepened module, what sits behind the seam, what tests survive.
|
|
60
65
|
|
|
61
66
|
Side effects happen inline as decisions crystallize — run the `/domain-modeling` skill to keep the domain model current as you go:
|
|
62
67
|
|
|
@@ -36,7 +36,7 @@ The right shape depends on the question:
|
|
|
36
36
|
|
|
37
37
|
Pick whichever shape best fits the question being asked, *not* whichever is easiest to wire to a TUI. Keep it pure: no I/O, no terminal code, no `console.log` for control flow. The TUI imports it and calls into it; nothing flows the other direction.
|
|
38
38
|
|
|
39
|
-
This is what makes the prototype useful past its own lifetime
|
|
39
|
+
This is what makes the prototype useful past its own lifetime: when the question's been answered, the validated reducer / machine / function set can be lifted into the real module on its own.
|
|
40
40
|
|
|
41
41
|
### 4. Build the smallest TUI that exposes the state
|
|
42
42
|
|
|
@@ -66,9 +66,9 @@ If the host project has no task runner, just put the command at the top of the p
|
|
|
66
66
|
|
|
67
67
|
Give the user the run command. They'll drive it themselves; the interesting moments are when they say "wait, that shouldn't be possible" or "huh, I assumed X would be different" — those are the bugs in the _idea_, which is the whole point. If they want new actions added, add them. Prototypes evolve.
|
|
68
68
|
|
|
69
|
-
### 7. Capture the answer
|
|
69
|
+
### 7. Capture the answer and the prototype
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
Once the prototype has answered its question, capture the answer, then capture the prototype the way the [SKILL](SKILL.md) describes. The logic-specific mapping: the validated reducer / machine / function set lifts into the real module (the decision, absorbed); the TUI shell rides along to the throwaway branch that keeps the prototype as a primary source.
|
|
72
72
|
|
|
73
73
|
## Anti-patterns
|
|
74
74
|
|
|
@@ -21,10 +21,6 @@ The two branches produce very different artifacts — getting this wrong wastes
|
|
|
21
21
|
1. **Throwaway from day one, and clearly marked as such.** Locate the prototype code close to where it will actually be used (next to the module or page it's prototyping for) so context is obvious — but name it so a casual reader can see it's a prototype, not production. For throwaway UI routes, obey whatever routing convention the project already uses; don't invent a new top-level structure.
|
|
22
22
|
2. **One command to run.** Whatever the project's existing task runner supports — `pnpm <name>`, `python <path>`, `bun <path>`, etc. The user must be able to start it without thinking.
|
|
23
23
|
3. **No persistence by default.** State lives in memory. Persistence is the thing the prototype is _checking_, not something it should depend on. If the question explicitly involves a database, hit a scratch DB or a local file with a clear "PROTOTYPE — wipe me" name.
|
|
24
|
-
4. **Skip the polish.** No tests, no error handling beyond what makes the prototype _runnable_, no abstractions. The point is to learn something fast
|
|
24
|
+
4. **Skip the polish.** No tests, no error handling beyond what makes the prototype _runnable_, no abstractions. The point is to learn something fast.
|
|
25
25
|
5. **Surface the state.** After every action (logic) or on every variant switch (UI), print or render the full relevant state so the user can see what changed.
|
|
26
|
-
6. **
|
|
27
|
-
|
|
28
|
-
## When done
|
|
29
|
-
|
|
30
|
-
The _answer_ is the only thing worth keeping from a prototype. Capture it somewhere durable (commit message, ADR, issue, or a `NOTES.md` next to the prototype) along with the question it was answering. If the user is around, that capture is a quick conversation; if not, leave the placeholder so they (or you, on the next pass) can fill in the verdict before deleting the prototype.
|
|
26
|
+
6. **Capture it when done.** Fold any validated decision into the real code, then capture the prototype itself as a **primary source**: commit it to a throwaway branch, out of main, and leave a context pointer to that branch on the implementation issue. Capture the answer too — the verdict and the question it settled — in the issue or a commit. The main branch keeps only the validated decision.
|
|
@@ -97,12 +97,12 @@ Surface the URL (and the `?variant=` keys). The user will flip through whenever
|
|
|
97
97
|
|
|
98
98
|
### 6. Capture the answer and clean up
|
|
99
99
|
|
|
100
|
-
Once a variant has won,
|
|
100
|
+
Once a variant has won, capture the answer — which variant and why — then capture the prototype the way the [SKILL](SKILL.md) describes. Fold the winner into the real code and move the rest onto the throwaway branch, not into main:
|
|
101
101
|
|
|
102
|
-
- **Sub-shape A** —
|
|
103
|
-
- **Sub-shape B** — promote the winning variant to a real route
|
|
102
|
+
- **Sub-shape A** — fold the winner into the existing page; drop the losing variants and the switcher from main.
|
|
103
|
+
- **Sub-shape B** — promote the winning variant to a real route; drop the throwaway route and the switcher from main.
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
The full set of variants is the primary source, so it lands on the throwaway branch, not the bin — variant components and the switcher left in the main branch rot fast and confuse the next reader.
|
|
106
106
|
|
|
107
107
|
## Anti-patterns
|
|
108
108
|
|