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,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: yss-cache
|
|
3
|
+
description: 用于 YSS 缓存框架的接入、配置、代码修改和故障诊断。Use when tasks involve QueryCache、UpdateCache、ClearCache、TTL、SpEL key、事务提交后缓存操作、Redis/Caffeine/Hazelcast 后端切换、Redis Standalone/Sentinel/Cluster、Jedis 连接池、Redis fallback、JetCache、多级缓存、序列化兼容、缓存不命中或失效不一致。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# yss-cache
|
|
7
|
+
|
|
8
|
+
处理 `yss-component-cache-parent` 及其消费项目的缓存任务。
|
|
9
|
+
|
|
10
|
+
## 工作流
|
|
11
|
+
|
|
12
|
+
1. 按 `yss-source-index/references/source-location.md` 定位真实源码。当前工作区有 `.codegraph/` 时先用 CodeGraph;否则读取 [source-index.md](references/source-index.md) 后用符号或 Maven 模块搜索。
|
|
13
|
+
2. 识别使用模型:Spring Cache 单后端路由、Redis 故障降级,或 JetCache local + remote。不要混用三者的行为假设。
|
|
14
|
+
3. 明确缓存名、key、TTL、更新/删除路径、跨节点一致性和序列化兼容要求。
|
|
15
|
+
4. 先检查现有依赖、启动注解、配置和注解用法,再决定修改业务代码、配置还是组件。
|
|
16
|
+
5. 修改后执行对应 reference 的验证;组件跨模块修改必须从父 reactor 构建,不要依赖本地旧 SNAPSHOT。
|
|
17
|
+
|
|
18
|
+
## 不变量
|
|
19
|
+
|
|
20
|
+
- 新增查询缓存时同时覆盖更新、删除和状态变更的失效路径。
|
|
21
|
+
- key 必须稳定并显式包含租户、机构、账套等隔离维度;不要依赖 DTO 的不稳定序列化结果。
|
|
22
|
+
- 不要把 Redis fallback 当作正常二级缓存。Caffeine fallback 存在节点间不一致窗口。
|
|
23
|
+
- 不要声称纯 Redis 后端会广播本地缓存失效。只有确认 JetCache 配置了 local、remote 和 broadcast channel 后才能作此判断。
|
|
24
|
+
- 不要在没有双读、版本前缀、灰度清理或迁移窗口时修改 serializer、key prefix 或 cache name。
|
|
25
|
+
- 不明确一致性要求时,不默认启用本地缓存或 fallback。
|
|
26
|
+
|
|
27
|
+
## 按场景读取
|
|
28
|
+
|
|
29
|
+
- 模块、后端选择或多级缓存边界:[architecture.md](references/architecture.md)
|
|
30
|
+
- 新增或修改缓存注解、SpEL、空 key、全量清理:[annotations.md](references/annotations.md)
|
|
31
|
+
- 依赖、启动注解、TTL、Caffeine/Hazelcast、Bean backoff:[configuration.md](references/configuration.md)
|
|
32
|
+
- Redis 单机、哨兵、集群、认证、SSL、超时、Jedis pool:[redis-topology.md](references/redis-topology.md)
|
|
33
|
+
- Redis 故障、fallback、恢复清理和一致性:[redis-fallback.md](references/redis-fallback.md)
|
|
34
|
+
- RedisTemplate/RedisCacheManager 数据格式或迁移:[serialization.md](references/serialization.md)
|
|
35
|
+
- 缓存不生效、未失效、启动失败、Redis 异常:[troubleshooting.md](references/troubleshooting.md)
|
|
36
|
+
- 完成修改后的组件与消费项目验收:[verification.md](references/verification.md)
|
|
37
|
+
|
|
38
|
+
## 工具
|
|
39
|
+
|
|
40
|
+
- `scripts/inspect-cache-usage.sh <project-root>`:只读扫描消费项目;发现阻断缺陷返回 1,输入或环境错误返回 2。
|
|
41
|
+
- `scripts/verify-cache-component.sh [--source-root PATH] [--consumer-root PATH --consumer-module MODULE]`:验证组件、真实 Redis、Java 8 字节码及可选消费模块。
|
|
42
|
+
- `scripts/check-skill-freshness.sh [source-root]`:比较技能契约与当前组件源码;发现漂移返回 1。
|
|
43
|
+
|
|
44
|
+
当组件源码变化后,用 `yss-source-index` 刷新 [source-index.md](references/source-index.md),再运行 freshness 检查。不要手工修改生成索引。
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# 注解契约
|
|
2
|
+
|
|
3
|
+
## 映射
|
|
4
|
+
|
|
5
|
+
- `@QueryCache` -> Spring `CacheableOperation`。
|
|
6
|
+
- `@UpdateCache` -> Spring `CachePutOperation`。
|
|
7
|
+
- `@ClearCache` -> Spring `CacheEvictOperation`。
|
|
8
|
+
- `value` 与 `cacheNames` 是别名;非空 `cacheName` 会覆盖枚举 cache names。
|
|
9
|
+
- 默认 resolver 是 `cacheComposeResolver`。
|
|
10
|
+
- `key` 与 `keyGenerator` 互斥。
|
|
11
|
+
|
|
12
|
+
## 参数语义
|
|
13
|
+
|
|
14
|
+
- `condition`:调用前判断,false 时跳过缓存操作。
|
|
15
|
+
- `unless`:结果产生后判断;Query/Update 支持。ClearCache 虽保留该字段,但当前解析器不映射它。
|
|
16
|
+
- `sync`:QueryCache 映射到同步加载;UpdateCache 和 ClearCache 当前不映射该字段。
|
|
17
|
+
- `allEntries=true`:明确清空整个 cache。
|
|
18
|
+
- `beforeInvocation=true`:业务方法执行前清理;后续业务失败不会恢复旧缓存。
|
|
19
|
+
|
|
20
|
+
## Key 与清理
|
|
21
|
+
|
|
22
|
+
```java
|
|
23
|
+
@QueryCache(cacheName = "valuation:plan", key = "#tenantId + ':' + #planId")
|
|
24
|
+
public PlanDTO get(String tenantId, Long planId) { ... }
|
|
25
|
+
|
|
26
|
+
@ClearCache(cacheName = "valuation:plan", key = "#tenantId + ':' + #planId")
|
|
27
|
+
public void delete(String tenantId, Long planId) { ... }
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
- 未配置 key 时由 Spring KeyGenerator 生成;无参数方法会得到 `SimpleKey.EMPTY`。
|
|
31
|
+
- 当前 YSS 拦截器将 `SimpleKey.EMPTY` 视为全量清理。需要单 key 清理时必须给出稳定 key。
|
|
32
|
+
- 全量清理优先显式写 `allEntries=true`,不要依赖偶然 key 形态。
|
|
33
|
+
- 集合参数先稳定排序;null、大小写和空白必须归一化。
|
|
34
|
+
|
|
35
|
+
## AOP 与事务
|
|
36
|
+
|
|
37
|
+
- 缓存方法必须通过 Spring 代理调用;同类 `this.method()` 自调用会绕过拦截。
|
|
38
|
+
- private 方法不能作为代理入口;final 方法/类受代理方式限制。
|
|
39
|
+
- `put`、`evict`、`clear` 在事务同步激活时延迟到 `afterCommit`;回滚不执行缓存变更。
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# 架构与选择
|
|
2
|
+
|
|
3
|
+
## 三种模型
|
|
4
|
+
|
|
5
|
+
| 模型 | 行为 | 一致性边界 |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| Spring Cache 后端路由 | `yss.cache.active-type` 在 Redis、Caffeine、Hazelcast 中选择一个 Provider | 同一时刻是单后端,不是多级缓存 |
|
|
8
|
+
| Redis fallback | Redis 故障时可临时改用另一个 Provider | 是故障降级;Caffeine 会产生节点间不一致窗口 |
|
|
9
|
+
| JetCache | 独立扩展,可配置 local + remote | 只有实际配置 broadcast channel 才能认为本地失效会同步 |
|
|
10
|
+
|
|
11
|
+
## 模块
|
|
12
|
+
|
|
13
|
+
- `yss-component-spring-cache`:注解、解析器、拦截器、路由和公共属性。
|
|
14
|
+
- `yss-component-redis-cache`:Jedis 连接、RedisTemplate、RedisCacheManager、健康检查和 fallback。
|
|
15
|
+
- `yss-component-caffeine-cache`:节点本地缓存。
|
|
16
|
+
- `yss-component-hazelcast-cache`:显式依赖的集群内存后端。
|
|
17
|
+
- `yss-component-cache-starter`:默认聚合 Spring Cache、Redis 和 Caffeine。
|
|
18
|
+
- `yss-component-jetcache`:与 Spring Cache 路由模型分开分析。
|
|
19
|
+
|
|
20
|
+
## 选择规则
|
|
21
|
+
|
|
22
|
+
- 跨节点共享且不接受节点本地旧值:使用纯 Redis。
|
|
23
|
+
- 读多写少并允许短暂节点差异:可选择 Caffeine。
|
|
24
|
+
- Redis 故障期间业务可用性高于缓存一致性:评估后启用 fallback。
|
|
25
|
+
- 需要 local + remote:先确认 JetCache 的 local、remote、序列化和广播配置,不要只看依赖名称。
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# 接入与配置
|
|
2
|
+
|
|
3
|
+
## 推荐接入
|
|
4
|
+
|
|
5
|
+
```xml
|
|
6
|
+
<dependency>
|
|
7
|
+
<groupId>com.yss.cloud</groupId>
|
|
8
|
+
<artifactId>yss-component-cache-starter</artifactId>
|
|
9
|
+
</dependency>
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
启动类使用 `@EnableYssCloudCache`。`@EnableYssCloudRedisCache` 仅为兼容保留并已废弃。
|
|
13
|
+
|
|
14
|
+
## 公共属性
|
|
15
|
+
|
|
16
|
+
```yaml
|
|
17
|
+
yss:
|
|
18
|
+
cache:
|
|
19
|
+
active-type: redis # redis | caffeine | hazelcast
|
|
20
|
+
default-ttl: 1h
|
|
21
|
+
redis:
|
|
22
|
+
fallback-enabled: false
|
|
23
|
+
fallback-type: caffeine
|
|
24
|
+
clear-fallback-on-recovery: true
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- Redis 动态 cache 和 Caffeine 默认 TTL 使用 `yss.cache.default-ttl`。
|
|
28
|
+
- `CacheKeyCode` 中声明的 TTL 覆盖默认 TTL。
|
|
29
|
+
- Caffeine 的 `spring.cache.caffeine.spec` 可覆盖默认构建规格,修改前检查项目现有配置。
|
|
30
|
+
- Hazelcast 不在 starter 生产依赖中;使用时显式引入模块并配置 `active-type=hazelcast`。
|
|
31
|
+
|
|
32
|
+
## 自定义 Bean
|
|
33
|
+
|
|
34
|
+
默认配置会对用户提供的 `RedisProperties`、`RedisConnectionFactory`、`JedisClientConfiguration`、pool config、RedisCacheManager、resolver、provider、serializer、RedisTemplate 和 RedisMappingContext 回退。排障时按类型和名称检查实际 Bean,不能假设框架默认 Bean 一定生效。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Redis 故障降级与恢复
|
|
2
|
+
|
|
3
|
+
## 状态流
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
Redis 健康 -> 命令或健康检查失败 -> 标记不健康 -> 跳过 Redis
|
|
7
|
+
-> 可选 fallback -> 周期健康检查 -> Redis 可连接
|
|
8
|
+
-> 清理脏 Redis cache 与本地 fallback cache -> 恢复 Redis
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
- fallback 默认关闭,默认目标是 Caffeine。
|
|
12
|
+
- Redis 健康检查当前每 20 秒执行一次。
|
|
13
|
+
- Redis 命令级连接故障也会立即报告不健康,不必等待下一轮检查。
|
|
14
|
+
- 只读 fallback 不标记 Redis cache 为脏。
|
|
15
|
+
- put、putIfAbsent、evict、clear、invalidate 和 valueLoader 产生的回退写入会标记为脏。
|
|
16
|
+
- 恢复时先清理降级期间发生写操作的 Redis cache,再清理本地 fallback cache。
|
|
17
|
+
- Redis 失效失败时继续保持不健康状态并在后续检查重试,不能提前切回旧 Redis 数据。
|
|
18
|
+
|
|
19
|
+
## 一致性判断
|
|
20
|
+
|
|
21
|
+
- Caffeine fallback 是每节点独立数据,不能保证跨节点读到相同值。
|
|
22
|
+
- `clear-fallback-on-recovery=false` 会跳过恢复清理,可能重新暴露 Redis 旧值;除非业务明确接受,不要关闭。
|
|
23
|
+
- 强一致、锁、幂等状态或余额类数据不应依赖缓存 fallback 保证正确性。
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Redis 拓扑
|
|
2
|
+
|
|
3
|
+
框架使用 Spring Boot `spring.redis` 属性和 Jedis 客户端。
|
|
4
|
+
|
|
5
|
+
## Standalone
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
spring:
|
|
9
|
+
redis:
|
|
10
|
+
host: localhost
|
|
11
|
+
port: 6379
|
|
12
|
+
database: 10
|
|
13
|
+
username: ${REDIS_USERNAME:}
|
|
14
|
+
password: ${REDIS_PASSWORD:}
|
|
15
|
+
connect-timeout: 5s
|
|
16
|
+
timeout: 10s
|
|
17
|
+
client-type: jedis
|
|
18
|
+
jedis:
|
|
19
|
+
pool:
|
|
20
|
+
enabled: true
|
|
21
|
+
max-active: 16
|
|
22
|
+
max-idle: 8
|
|
23
|
+
min-idle: 2
|
|
24
|
+
max-wait: 2s
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Sentinel
|
|
28
|
+
|
|
29
|
+
```yaml
|
|
30
|
+
spring:
|
|
31
|
+
redis:
|
|
32
|
+
database: 10
|
|
33
|
+
username: ${REDIS_USERNAME:}
|
|
34
|
+
password: ${REDIS_PASSWORD:}
|
|
35
|
+
sentinel:
|
|
36
|
+
master: mymaster
|
|
37
|
+
nodes: host1:26379,host2:26379,host3:26379
|
|
38
|
+
username: ${SENTINEL_USERNAME:}
|
|
39
|
+
password: ${SENTINEL_PASSWORD:}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
业务 Redis 认证与 Sentinel 自身认证相互独立。
|
|
43
|
+
|
|
44
|
+
## Cluster
|
|
45
|
+
|
|
46
|
+
```yaml
|
|
47
|
+
spring:
|
|
48
|
+
redis:
|
|
49
|
+
database: 0
|
|
50
|
+
username: ${REDIS_USERNAME:}
|
|
51
|
+
password: ${REDIS_PASSWORD:}
|
|
52
|
+
cluster:
|
|
53
|
+
nodes: host1:6379,host2:6379,host3:6379
|
|
54
|
+
max-redirects: 5
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 强制约束
|
|
58
|
+
|
|
59
|
+
- Sentinel 和 Cluster 不能同时配置,违反时启动失败。
|
|
60
|
+
- Redis Cluster 只允许 DB 0,非零 `spring.redis.database` 会启动失败。
|
|
61
|
+
- username/password、SSL、client-name、连接/读取超时和 Jedis pool 参数会传入连接配置。
|
|
62
|
+
- 不要提供 Lettuce 专属调优参数;当前实现明确使用 Jedis。
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 序列化兼容
|
|
2
|
+
|
|
3
|
+
当前存在两条不同数据路径:
|
|
4
|
+
|
|
5
|
+
- 框架 `RedisTemplate` 使用 Jackson JSON serializer。
|
|
6
|
+
- Spring `RedisCacheManager` 沿用默认 JDK value serialization。
|
|
7
|
+
|
|
8
|
+
两者的数据不可假设互相可读。`RedisTemplate` 的历史泛型声明与通用 JSON 行为也不完全一致,修改前必须检查消费方注入类型和实际操作。
|
|
9
|
+
|
|
10
|
+
以下变化都属于 Redis 数据协议变更:
|
|
11
|
+
|
|
12
|
+
- 修改 value/hash serializer。
|
|
13
|
+
- 修改 key serializer 或 cache prefix。
|
|
14
|
+
- 重命名 cache name。
|
|
15
|
+
- 改变 key 的字段、顺序、归一化或版本。
|
|
16
|
+
|
|
17
|
+
实施协议迁移前至少选择一种策略:双读单写、双写、版本化前缀、灰度清理或停机迁移。必须验证旧值读取、新值写入、回滚和混合版本节点;禁止把“统一 serializer”当作无风险重构。
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# yss-cache Source Index
|
|
2
|
+
|
|
3
|
+
Generated: 2026-07-17T10:08:00+00:00
|
|
4
|
+
Indexed source root: resolved at refresh time; set `YSS_SOURCE_ROOT` to reproduce or refresh.
|
|
5
|
+
|
|
6
|
+
This file is generated by `yss-source-index/scripts/refresh-yss-skill-index.py`. Do not hand-edit generated sections.
|
|
7
|
+
|
|
8
|
+
Paths below are source path hints captured at refresh time. If they do not exist in the current workspace, locate sources using `YSS_SOURCE_ROOT`, CodeGraph, package/class names, Maven artifact names, or repository search before assuming the source is unavailable.
|
|
9
|
+
|
|
10
|
+
## Component Path Hints
|
|
11
|
+
|
|
12
|
+
- `yss-microservice-components/yss-component-cache-parent` (existed when indexed)
|
|
13
|
+
|
|
14
|
+
## Documentation Files
|
|
15
|
+
|
|
16
|
+
- `yss-microservice-components/yss-component-cache-parent/readme.md`
|
|
17
|
+
|
|
18
|
+
## Maven Modules
|
|
19
|
+
|
|
20
|
+
- `yss-microservice-components/yss-component-cache-parent`
|
|
21
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-cache-starter`
|
|
22
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-caffeine-cache`
|
|
23
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-hazelcast-cache`
|
|
24
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-jetcache`
|
|
25
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-redis-cache`
|
|
26
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache`
|
|
27
|
+
|
|
28
|
+
## Key Java Entry Points
|
|
29
|
+
|
|
30
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-caffeine-cache/src/main/java/com/yss/cloud/cache/caffeine/config/CacheCaffeineManagerConfig.java`
|
|
31
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-caffeine-cache/src/main/java/com/yss/cloud/cache/caffeine/config/CacheCaffeineResolver.java`
|
|
32
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-caffeine-cache/src/main/java/com/yss/cloud/cache/caffeine/config/CaffeineCacheBackendProvider.java`
|
|
33
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-hazelcast-cache/src/main/java/com/yss/cloud/cache/hazelcast/config/CacheHazelcastManagerConfig.java`
|
|
34
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-hazelcast-cache/src/main/java/com/yss/cloud/cache/hazelcast/config/HazelcastCacheBackendProvider.java`
|
|
35
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-hazelcast-cache/src/main/java/com/yss/cloud/cache/hazelcast/config/YssCacheHazelcastProperties.java`
|
|
36
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-jetcache/src/main/java/com/yss/cloud/cache/jetcache/CacheManagerCompose.java`
|
|
37
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-redis-cache/src/main/java/com/yss/cloud/cache/redis/config/RedisCacheBackendProvider.java`
|
|
38
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-redis-cache/src/main/java/com/yss/cloud/cache/redis/config/RedisConnFactoryConfig.java`
|
|
39
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-redis-cache/src/main/java/com/yss/cloud/cache/redis/config/RedisTemplateConfig.java`
|
|
40
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-redis-cache/src/main/java/com/yss/cloud/cache/redis/config/SafeRedisCache.java`
|
|
41
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-redis-cache/src/main/java/com/yss/cloud/cache/redis/config/YssCacheRedisResolver.java`
|
|
42
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-redis-cache/src/main/java/com/yss/cloud/cache/repository/BaseRedisRepository.java`
|
|
43
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-redis-cache/src/main/java/com/yss/cloud/cache/repository/YssDatamiddle.java`
|
|
44
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/ApplicationContextCacheHelper.java`
|
|
45
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/CacheComposeResolver.java`
|
|
46
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/CacheManagerCompose.java`
|
|
47
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/CacheMemResolver.java`
|
|
48
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/CacheRedisResolver.java`
|
|
49
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/EnableYssCloudCache.java`
|
|
50
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/EnableYssCloudRedisCache.java`
|
|
51
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/YssCacheBackendProvider.java`
|
|
52
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/YssCacheInterceptor.java`
|
|
53
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/YssCacheProperties.java`
|
|
54
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/annotation/ClearCache.java`
|
|
55
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/annotation/QueryCache.java`
|
|
56
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/annotation/UpdateCache.java`
|
|
57
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/annotation/YssCacheAnnotationParser.java`
|
|
58
|
+
- `yss-microservice-components/yss-component-cache-parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/config/CacheOperationSourceConfiguration.java`
|
|
59
|
+
|
|
60
|
+
## Recommended Next Reads
|
|
61
|
+
|
|
62
|
+
- Start with the documentation files above when learning component usage.
|
|
63
|
+
- Search the key Java entry points for annotations, auto configuration, properties, aspects, interceptors, handlers, and result objects before changing application code.
|
|
64
|
+
- Prefer existing component extension points over rewriting framework logic in business modules.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# 证据化排障
|
|
2
|
+
|
|
3
|
+
## 缓存未命中
|
|
4
|
+
|
|
5
|
+
1. 检查 starter/后端依赖和 `@EnableYssCloudCache`。
|
|
6
|
+
2. 检查 `active-type` 与实际 Provider/CacheManager Bean。
|
|
7
|
+
3. 确认调用经过 Spring 代理,不是同类自调用。
|
|
8
|
+
4. 检查 SpEL 参数名、null、集合顺序和租户维度。
|
|
9
|
+
5. 比较两次调用生成的 cache name/key,并检查 Redis 实际 key。
|
|
10
|
+
6. 检查 `condition`、`unless`、TTL 和序列化异常。
|
|
11
|
+
|
|
12
|
+
## 更新后仍读旧值
|
|
13
|
+
|
|
14
|
+
1. 列出所有写、删、状态变更入口,确认每条路径都更新或清理相同 cache/key。
|
|
15
|
+
2. 检查事务是否尚未提交;YSS 写/删/清理可能在 `afterCommit` 执行。
|
|
16
|
+
3. 检查是否误用了 Caffeine、fallback 或 JetCache local cache。
|
|
17
|
+
4. 检查 `allEntries`、`beforeInvocation` 和空 key 产生的 `SimpleKey.EMPTY`。
|
|
18
|
+
|
|
19
|
+
## Redis 启动或连接失败
|
|
20
|
+
|
|
21
|
+
1. 判定 Standalone/Sentinel/Cluster,检查拓扑互斥和 Cluster DB 0。
|
|
22
|
+
2. 分别核对 Redis 数据节点与 Sentinel 认证。
|
|
23
|
+
3. 检查 SSL、DNS、端口、connect/read timeout 和 Jedis pool。
|
|
24
|
+
4. 检查用户自定义连接工厂是否使默认配置回退。
|
|
25
|
+
|
|
26
|
+
## Redis 故障后行为异常
|
|
27
|
+
|
|
28
|
+
1. 检查 fallback 是否明确开启、目标 Provider 是否存在且 available。
|
|
29
|
+
2. 区分只读回退与脏写回退。
|
|
30
|
+
3. 查看恢复时 Redis 清理失败日志;失败时框架应保持降级并重试。
|
|
31
|
+
4. 多节点差异优先按 fallback 一致性窗口分析,不要误判为 Redis 广播失效。
|
|
32
|
+
|
|
33
|
+
可先运行 `scripts/inspect-cache-usage.sh <project-root>` 取得静态证据,再进入源码路径。
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# 验证与完成标准
|
|
2
|
+
|
|
3
|
+
## 组件
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
./mvnw -f yss-microservice-components/yss-component-cache-parent/pom.xml verify
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
跨模块测试使用父 reactor 的 `-pl <module> -am`,避免解析本地旧 SNAPSHOT。也可运行:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
scripts/verify-cache-component.sh --source-root /path/to/yss-cloud-microservice
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 消费项目
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
./mvnw -pl <starter-module> -am -DskipTests package
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
完整启动依赖数据库、注册中心等外部服务时,构建验证与启动验证分开报告。
|
|
22
|
+
|
|
23
|
+
## 验收矩阵
|
|
24
|
+
|
|
25
|
+
- 首次调用执行业务,第二次相同 key 命中缓存。
|
|
26
|
+
- 不同租户/业务 key 不串值。
|
|
27
|
+
- 更新、删除、状态变更后旧值失效。
|
|
28
|
+
- `condition`、`unless` 和异常返回行为符合预期。
|
|
29
|
+
- 默认 TTL 和枚举覆盖 TTL 在后端物理存在。
|
|
30
|
+
- Redis 停止后行为符合 fallback 配置;恢复后旧 Redis 值不会重新出现。
|
|
31
|
+
- Sentinel/Cluster 创建正确连接工厂,Cluster 使用 DB 0。
|
|
32
|
+
- Docker 可用时真实 Redis 认证、JSON template、JDK cache serialization 和 TTL 测试实际执行。
|
|
33
|
+
- Java 8 组件 class major version 为 52。
|
|
34
|
+
- `git diff --check` 通过,消费 starter 构建通过。
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -u
|
|
3
|
+
|
|
4
|
+
skill_dir=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
|
5
|
+
|
|
6
|
+
locate_source() {
|
|
7
|
+
if [ "$#" -gt 0 ] && [ -n "$1" ]; then
|
|
8
|
+
if [ -d "$1/yss-microservice-components/yss-component-cache-parent" ]; then
|
|
9
|
+
echo "$1"
|
|
10
|
+
return 0
|
|
11
|
+
fi
|
|
12
|
+
return 1
|
|
13
|
+
fi
|
|
14
|
+
if [ -n "${YSS_SOURCE_ROOT:-}" ] && [ -d "$YSS_SOURCE_ROOT/yss-microservice-components/yss-component-cache-parent" ]; then
|
|
15
|
+
echo "$YSS_SOURCE_ROOT"
|
|
16
|
+
return 0
|
|
17
|
+
fi
|
|
18
|
+
for candidate in "$PWD" "$PWD/.." "$HOME/Projects/yss-cloud-microservice" "$HOME/Documents/yss-project/yss-cloud-microservice"; do
|
|
19
|
+
if [ -d "$candidate/yss-microservice-components/yss-component-cache-parent" ]; then
|
|
20
|
+
(CDPATH= cd -- "$candidate" && pwd)
|
|
21
|
+
return 0
|
|
22
|
+
fi
|
|
23
|
+
done
|
|
24
|
+
return 1
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
source_root=$(locate_source "${1:-}") || {
|
|
28
|
+
echo "ERROR: cannot locate yss-component-cache-parent; pass source root or set YSS_SOURCE_ROOT" >&2
|
|
29
|
+
exit 2
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
parent="$source_root/yss-microservice-components/yss-component-cache-parent"
|
|
33
|
+
annotation="$parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/annotation/ClearCache.java"
|
|
34
|
+
properties="$parent/yss-component-spring-cache/src/main/java/com/yss/cloud/cache/YssCacheProperties.java"
|
|
35
|
+
connection="$parent/yss-component-redis-cache/src/main/java/com/yss/cloud/cache/redis/config/RedisConnFactoryConfig.java"
|
|
36
|
+
index="$skill_dir/references/source-index.md"
|
|
37
|
+
fail=0
|
|
38
|
+
|
|
39
|
+
require_text() {
|
|
40
|
+
file=$1
|
|
41
|
+
pattern=$2
|
|
42
|
+
label=$3
|
|
43
|
+
if ! grep -Eq "$pattern" "$file"; then
|
|
44
|
+
echo "STALE: $label not found in $file"
|
|
45
|
+
fail=1
|
|
46
|
+
fi
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
require_text "$annotation" 'boolean allEntries\(\)' 'ClearCache.allEntries'
|
|
50
|
+
require_text "$annotation" 'boolean beforeInvocation\(\)' 'ClearCache.beforeInvocation'
|
|
51
|
+
require_text "$properties" 'private Duration defaultTtl' 'yss.cache.default-ttl'
|
|
52
|
+
require_text "$properties" 'private boolean fallbackEnabled' 'Redis fallback-enabled'
|
|
53
|
+
require_text "$properties" 'private String fallbackType' 'Redis fallback-type'
|
|
54
|
+
require_text "$properties" 'private boolean clearFallbackOnRecovery' 'Redis clear-fallback-on-recovery'
|
|
55
|
+
require_text "$connection" 'cannot be configured together' 'Sentinel/Cluster mutual exclusion'
|
|
56
|
+
require_text "$connection" 'database must be 0' 'Cluster database 0 guard'
|
|
57
|
+
|
|
58
|
+
for module in yss-component-spring-cache yss-component-redis-cache yss-component-caffeine-cache yss-component-cache-starter yss-component-jetcache; do
|
|
59
|
+
if ! grep -q "$module" "$index"; then
|
|
60
|
+
echo "STALE: source-index is missing module $module"
|
|
61
|
+
fail=1
|
|
62
|
+
fi
|
|
63
|
+
done
|
|
64
|
+
|
|
65
|
+
generated=$(sed -n 's/^Generated: //p' "$index" | head -1)
|
|
66
|
+
if [ -z "$generated" ]; then
|
|
67
|
+
echo "STALE: source-index has no Generated timestamp"
|
|
68
|
+
fail=1
|
|
69
|
+
else
|
|
70
|
+
echo "INFO: source-index generated at $generated"
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
if [ "$annotation" -nt "$index" ] || [ "$properties" -nt "$index" ] || [ "$connection" -nt "$index" ]; then
|
|
74
|
+
echo "STALE: critical cache source is newer than source-index"
|
|
75
|
+
fail=1
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
if [ "$fail" -ne 0 ]; then
|
|
79
|
+
echo "RESULT: skill/source contract drift detected; refresh with yss-source-index and review semantic references"
|
|
80
|
+
exit 1
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
echo "RESULT: yss-cache critical contracts match source at $source_root"
|
|
84
|
+
exit 0
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -u
|
|
3
|
+
|
|
4
|
+
usage() {
|
|
5
|
+
echo "Usage: $0 <project-root>" >&2
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
if [ "$#" -ne 1 ]; then
|
|
9
|
+
usage
|
|
10
|
+
exit 2
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
root=$1
|
|
14
|
+
if [ ! -d "$root" ]; then
|
|
15
|
+
echo "ERROR: project root does not exist: $root" >&2
|
|
16
|
+
exit 2
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
if command -v rg >/dev/null 2>&1; then
|
|
20
|
+
search() { rg -n --hidden --glob '!target/**' --glob '!.git/**' --glob '*.java' --glob '*.yml' --glob '*.yaml' --glob '*.properties' --glob 'pom.xml' "$1" "$root" 2>/dev/null || true; }
|
|
21
|
+
files() { rg --files "$root" -g '*.yml' -g '*.yaml' -g '*.properties' -g '*.java' -g 'pom.xml'; }
|
|
22
|
+
else
|
|
23
|
+
search() { grep -REn "$1" "$root" --include='*.java' --include='*.yml' --include='*.yaml' --include='*.properties' --include='pom.xml' 2>/dev/null || true; }
|
|
24
|
+
files() { find "$root" -type f \( -name '*.java' -o -name '*.yml' -o -name '*.yaml' -o -name '*.properties' -o -name 'pom.xml' \); }
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
tmp=${TMPDIR:-/tmp}/yss-cache-inspect.$$
|
|
28
|
+
trap 'rm -f "$tmp"' EXIT HUP INT TERM
|
|
29
|
+
files >"$tmp"
|
|
30
|
+
if [ ! -s "$tmp" ]; then
|
|
31
|
+
echo "ERROR: no Java, Maven, or configuration files found under $root" >&2
|
|
32
|
+
exit 2
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
fail=0
|
|
36
|
+
echo "YSS cache usage inspection: $root"
|
|
37
|
+
|
|
38
|
+
report() {
|
|
39
|
+
level=$1
|
|
40
|
+
title=$2
|
|
41
|
+
pattern=$3
|
|
42
|
+
result=$(search "$pattern")
|
|
43
|
+
if [ -n "$result" ]; then
|
|
44
|
+
echo
|
|
45
|
+
echo "[$level] $title"
|
|
46
|
+
echo "$result" | sed -n '1,20p'
|
|
47
|
+
fi
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
report INFO "Cache component dependencies" 'yss-component-(cache-starter|spring-cache|redis-cache|caffeine-cache|hazelcast-cache|jetcache)'
|
|
51
|
+
report INFO "Cache enable annotations" '@EnableYssCloud(Cache|RedisCache)'
|
|
52
|
+
report INFO "YSS cache annotations" '@(QueryCache|UpdateCache|ClearCache)'
|
|
53
|
+
report INFO "Configured backend and TTL" 'yss\.cache\.(active-type|default-ttl)|active-type:|default-ttl:'
|
|
54
|
+
report INFO "Redis fallback configuration" 'fallback-(enabled|type)|clear-fallback-on-recovery'
|
|
55
|
+
report INFO "RedisTemplate injection contracts" 'RedisTemplate[[:space:]]*<'
|
|
56
|
+
|
|
57
|
+
sentinel=$(search 'spring\.redis\.sentinel|sentinel:')
|
|
58
|
+
cluster=$(search 'spring\.redis\.cluster|cluster:')
|
|
59
|
+
if [ -n "$sentinel" ] && [ -n "$cluster" ]; then
|
|
60
|
+
echo
|
|
61
|
+
echo "[ERROR] Both Redis Sentinel and Cluster configuration markers were found. Confirm they are not active in the same profile."
|
|
62
|
+
fail=1
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
if [ -n "$cluster" ]; then
|
|
66
|
+
nonzero=$(search 'spring\.redis\.database[[:space:]]*=[[:space:]]*[1-9][0-9]*|database:[[:space:]]*[1-9][0-9]*')
|
|
67
|
+
if [ -n "$nonzero" ]; then
|
|
68
|
+
echo
|
|
69
|
+
echo "[ERROR] Redis Cluster requires database 0."
|
|
70
|
+
echo "$nonzero" | sed -n '1,20p'
|
|
71
|
+
fail=1
|
|
72
|
+
fi
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
clear_without_key=$(search '@ClearCache[[:space:]]*(\([^)]*\))?')
|
|
76
|
+
if [ -n "$clear_without_key" ]; then
|
|
77
|
+
echo
|
|
78
|
+
echo "[REVIEW] ClearCache usages found. Verify each use has a stable key or explicit allEntries=true; no-arg methods produce SimpleKey.EMPTY."
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
query=$(search '@QueryCache')
|
|
82
|
+
update=$(search '@(UpdateCache|ClearCache)')
|
|
83
|
+
if [ -n "$query" ] && [ -z "$update" ]; then
|
|
84
|
+
echo
|
|
85
|
+
echo "[REVIEW] QueryCache is used but no UpdateCache/ClearCache annotation was found. Inspect explicit invalidation paths."
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
if [ "$fail" -ne 0 ]; then
|
|
89
|
+
echo
|
|
90
|
+
echo "RESULT: blocking cache configuration defects found"
|
|
91
|
+
exit 1
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
echo
|
|
95
|
+
echo "RESULT: no statically provable blocking cache defect found; REVIEW items still require code inspection"
|
|
96
|
+
exit 0
|