create-yss-spec 1.1.4 → 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.
Files changed (561) hide show
  1. package/README.md +20 -2
  2. package/package.json +13 -2
  3. package/src/cli.js +367 -51
  4. package/template/.agents/skills/ask-matt/SKILL.md +8 -4
  5. package/template/.agents/skills/ask-matt/agents/openai.yaml +5 -0
  6. package/template/.agents/skills/code-review/SKILL.md +4 -4
  7. package/template/.agents/skills/code-review/agents/openai.yaml +3 -0
  8. package/template/.agents/skills/codebase-design/agents/openai.yaml +3 -0
  9. package/template/.agents/skills/competitive-intelligence/SKILL.md +5 -5
  10. package/template/.agents/skills/diagnosing-bugs/agents/openai.yaml +3 -0
  11. package/template/.agents/skills/domain-modeling/agents/openai.yaml +3 -0
  12. package/template/.agents/skills/excalidraw-diagram-generator/SKILL.md +3 -3
  13. package/template/.agents/skills/grill-me/agents/openai.yaml +5 -0
  14. package/template/.agents/skills/grill-with-docs/agents/openai.yaml +5 -0
  15. package/template/.agents/skills/grilling/SKILL.md +4 -4
  16. package/template/.agents/skills/grilling/agents/openai.yaml +3 -0
  17. package/template/.agents/skills/handoff/SKILL.md +1 -1
  18. package/template/.agents/skills/handoff/agents/openai.yaml +5 -0
  19. package/template/.agents/skills/high-fidelity-html-prototype/SKILL.md +6 -6
  20. package/template/.agents/skills/high-fidelity-html-prototype/agents/openai.yaml +5 -0
  21. package/template/.agents/skills/implement/SKILL.md +2 -2
  22. package/template/.agents/skills/implement/agents/openai.yaml +5 -0
  23. package/template/.agents/skills/improve-codebase-architecture/SKILL.md +6 -1
  24. package/template/.agents/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
  25. package/template/.agents/skills/lombok/SKILL.md +345 -0
  26. package/template/.agents/skills/mapstruct/SKILL.md +328 -0
  27. package/template/.agents/skills/prototype/LOGIC.md +3 -3
  28. package/template/.agents/skills/prototype/SKILL.md +2 -6
  29. package/template/.agents/skills/prototype/UI.md +4 -4
  30. package/template/.agents/skills/prototype/agents/openai.yaml +3 -0
  31. package/template/.agents/skills/research/agents/openai.yaml +3 -0
  32. package/template/.agents/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
  33. package/template/.agents/skills/setup-matt-pocock-skills/SKILL.md +21 -32
  34. package/template/.agents/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
  35. package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-github.md +2 -2
  36. package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +2 -2
  37. package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-local.md +6 -6
  38. package/template/.agents/skills/setup-matt-pocock-skills/triage-labels.md +2 -2
  39. package/template/.agents/skills/tdd/agents/openai.yaml +3 -0
  40. package/template/.agents/skills/teach/GLOSSARY-FORMAT.md +35 -0
  41. package/template/.agents/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
  42. package/template/.agents/skills/teach/MISSION-FORMAT.md +31 -0
  43. package/template/.agents/skills/teach/RESOURCES-FORMAT.md +32 -0
  44. package/template/.agents/skills/teach/SKILL.md +140 -0
  45. package/template/.agents/skills/teach/agents/openai.yaml +5 -0
  46. package/template/.agents/skills/to-spec/SKILL.md +58 -0
  47. package/template/.agents/skills/to-spec/agents/openai.yaml +5 -0
  48. package/template/.agents/skills/to-tickets/SKILL.md +62 -0
  49. package/template/.agents/skills/to-tickets/agents/openai.yaml +5 -0
  50. package/template/.agents/skills/triage/SKILL.md +4 -4
  51. package/template/.agents/skills/triage/agents/openai.yaml +5 -0
  52. package/template/.agents/skills/wayfinder/SKILL.md +128 -0
  53. package/template/.agents/skills/wayfinder/agents/openai.yaml +5 -0
  54. package/template/.agents/skills/web-design-engineer/SKILL.md +2 -2
  55. package/template/.agents/skills/writing-great-skills/GLOSSARY.md +201 -0
  56. package/template/.agents/skills/writing-great-skills/SKILL.md +83 -0
  57. package/template/.agents/skills/writing-great-skills/agents/openai.yaml +5 -0
  58. package/template/.agents/skills/yss-cache/SKILL.md +44 -0
  59. package/template/.agents/skills/yss-cache/agents/openai.yaml +5 -0
  60. package/template/.agents/skills/yss-cache/references/annotations.md +39 -0
  61. package/template/.agents/skills/yss-cache/references/architecture.md +25 -0
  62. package/template/.agents/skills/yss-cache/references/configuration.md +34 -0
  63. package/template/.agents/skills/yss-cache/references/redis-fallback.md +23 -0
  64. package/template/.agents/skills/yss-cache/references/redis-topology.md +62 -0
  65. package/template/.agents/skills/yss-cache/references/serialization.md +17 -0
  66. package/template/.agents/skills/yss-cache/references/source-index.md +64 -0
  67. package/template/.agents/skills/yss-cache/references/troubleshooting.md +33 -0
  68. package/template/.agents/skills/yss-cache/references/verification.md +34 -0
  69. package/template/.agents/skills/yss-cache/scripts/check-skill-freshness.sh +84 -0
  70. package/template/.agents/skills/yss-cache/scripts/inspect-cache-usage.sh +96 -0
  71. package/template/.agents/skills/yss-cache/scripts/verify-cache-component.sh +101 -0
  72. package/template/.claude/skills/ask-matt/SKILL.md +8 -4
  73. package/template/.claude/skills/ask-matt/agents/openai.yaml +5 -0
  74. package/template/.claude/skills/code-review/SKILL.md +4 -4
  75. package/template/.claude/skills/code-review/agents/openai.yaml +3 -0
  76. package/template/.claude/skills/codebase-design/agents/openai.yaml +3 -0
  77. package/template/.claude/skills/competitive-intelligence/SKILL.md +5 -5
  78. package/template/.claude/skills/diagnosing-bugs/agents/openai.yaml +3 -0
  79. package/template/.claude/skills/domain-modeling/agents/openai.yaml +3 -0
  80. package/template/.claude/skills/excalidraw-diagram-generator/SKILL.md +37 -16
  81. package/template/.claude/skills/excalidraw-diagram-generator/scripts/add-arrow.py +18 -18
  82. package/template/.claude/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +46 -47
  83. package/template/.claude/skills/grill-me/agents/openai.yaml +5 -0
  84. package/template/.claude/skills/grill-with-docs/agents/openai.yaml +5 -0
  85. package/template/.claude/skills/grilling/SKILL.md +4 -4
  86. package/template/.claude/skills/grilling/agents/openai.yaml +3 -0
  87. package/template/.claude/skills/handoff/SKILL.md +1 -1
  88. package/template/.claude/skills/handoff/agents/openai.yaml +5 -0
  89. package/template/.claude/skills/implement/SKILL.md +2 -2
  90. package/template/.claude/skills/implement/agents/openai.yaml +5 -0
  91. package/template/.claude/skills/improve-codebase-architecture/SKILL.md +6 -1
  92. package/template/.claude/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
  93. package/template/.claude/skills/prototype/LOGIC.md +3 -3
  94. package/template/.claude/skills/prototype/SKILL.md +2 -6
  95. package/template/.claude/skills/prototype/UI.md +4 -4
  96. package/template/.claude/skills/prototype/agents/openai.yaml +3 -0
  97. package/template/.claude/skills/research/agents/openai.yaml +3 -0
  98. package/template/.claude/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
  99. package/template/.claude/skills/setup-matt-pocock-skills/SKILL.md +21 -32
  100. package/template/.claude/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
  101. package/template/.claude/skills/setup-matt-pocock-skills/issue-tracker-github.md +2 -2
  102. package/template/.claude/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +2 -2
  103. package/template/.claude/skills/setup-matt-pocock-skills/issue-tracker-local.md +6 -6
  104. package/template/.claude/skills/setup-matt-pocock-skills/triage-labels.md +2 -2
  105. package/template/.claude/skills/tdd/agents/openai.yaml +3 -0
  106. package/template/.claude/skills/teach/GLOSSARY-FORMAT.md +35 -0
  107. package/template/.claude/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
  108. package/template/.claude/skills/teach/MISSION-FORMAT.md +31 -0
  109. package/template/.claude/skills/teach/RESOURCES-FORMAT.md +32 -0
  110. package/template/.claude/skills/teach/SKILL.md +140 -0
  111. package/template/.claude/skills/teach/agents/openai.yaml +5 -0
  112. package/template/.claude/skills/to-spec/SKILL.md +58 -0
  113. package/template/.claude/skills/to-spec/agents/openai.yaml +5 -0
  114. package/template/.claude/skills/to-tickets/SKILL.md +62 -0
  115. package/template/.claude/skills/to-tickets/agents/openai.yaml +5 -0
  116. package/template/.claude/skills/triage/SKILL.md +4 -4
  117. package/template/.claude/skills/triage/agents/openai.yaml +5 -0
  118. package/template/.claude/skills/wayfinder/SKILL.md +128 -0
  119. package/template/.claude/skills/wayfinder/agents/openai.yaml +5 -0
  120. package/template/.claude/skills/web-design-engineer/SKILL.md +2 -2
  121. package/template/.claude/skills/writing-great-skills/GLOSSARY.md +201 -0
  122. package/template/.claude/skills/writing-great-skills/SKILL.md +83 -0
  123. package/template/.claude/skills/writing-great-skills/agents/openai.yaml +5 -0
  124. package/template/.claude/skills/yss-cache/SKILL.md +44 -0
  125. package/template/.claude/skills/yss-cache/agents/openai.yaml +5 -0
  126. package/template/.claude/skills/yss-cache/references/annotations.md +39 -0
  127. package/template/.claude/skills/yss-cache/references/architecture.md +25 -0
  128. package/template/.claude/skills/yss-cache/references/configuration.md +34 -0
  129. package/template/.claude/skills/yss-cache/references/redis-fallback.md +23 -0
  130. package/template/.claude/skills/yss-cache/references/redis-topology.md +62 -0
  131. package/template/.claude/skills/yss-cache/references/serialization.md +17 -0
  132. package/template/.claude/skills/yss-cache/references/source-index.md +64 -0
  133. package/template/.claude/skills/yss-cache/references/troubleshooting.md +33 -0
  134. package/template/.claude/skills/yss-cache/references/verification.md +34 -0
  135. package/template/.claude/skills/yss-cache/scripts/check-skill-freshness.sh +84 -0
  136. package/template/.claude/skills/yss-cache/scripts/inspect-cache-usage.sh +96 -0
  137. package/template/.claude/skills/yss-cache/scripts/verify-cache-component.sh +101 -0
  138. package/template/.codex/config.toml +3 -0
  139. package/template/.codex/skills/ask-matt/SKILL.md +8 -4
  140. package/template/.codex/skills/ask-matt/agents/openai.yaml +5 -0
  141. package/template/.codex/skills/code-review/SKILL.md +4 -4
  142. package/template/.codex/skills/code-review/agents/openai.yaml +3 -0
  143. package/template/.codex/skills/code-review-process/references/automation-and-standards.md +1 -1
  144. package/template/.codex/skills/codebase-design/agents/openai.yaml +3 -0
  145. package/template/.codex/skills/competitive-intelligence/SKILL.md +5 -5
  146. package/template/.codex/skills/cross-repo-implementation-routing/SKILL.md +1 -1
  147. package/template/.codex/skills/diagnosing-bugs/agents/openai.yaml +3 -0
  148. package/template/.codex/skills/domain-modeling/agents/openai.yaml +3 -0
  149. package/template/.codex/skills/grill-with-docs/agents/openai.yaml +5 -0
  150. package/template/.codex/skills/handoff/SKILL.md +16 -0
  151. package/template/.codex/skills/handoff/agents/openai.yaml +5 -0
  152. package/template/.codex/skills/high-fidelity-html-prototype/SKILL.md +6 -6
  153. package/template/.codex/skills/implement/SKILL.md +2 -2
  154. package/template/.codex/skills/implement/agents/openai.yaml +5 -0
  155. package/template/.codex/skills/improve-codebase-architecture/SKILL.md +6 -1
  156. package/template/.codex/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
  157. package/template/.codex/skills/product-design-prototype/SKILL.md +14 -10
  158. package/template/.codex/skills/product-design-prototype/agents/openai.yaml +1 -1
  159. package/template/.codex/skills/prototype/LOGIC.md +3 -3
  160. package/template/.codex/skills/prototype/SKILL.md +2 -6
  161. package/template/.codex/skills/prototype/UI.md +4 -4
  162. package/template/.codex/skills/prototype/agents/openai.yaml +3 -0
  163. package/template/.codex/skills/prototype-review/SKILL.md +6 -6
  164. package/template/.codex/skills/prototype-review/agents/openai.yaml +2 -2
  165. package/template/.codex/skills/research/agents/openai.yaml +3 -0
  166. package/template/.codex/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
  167. package/template/.codex/skills/setup-matt-pocock-skills/SKILL.md +21 -32
  168. package/template/.codex/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
  169. package/template/.codex/skills/setup-matt-pocock-skills/issue-tracker-github.md +2 -2
  170. package/template/.codex/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +2 -2
  171. package/template/.codex/skills/setup-matt-pocock-skills/issue-tracker-local.md +6 -6
  172. package/template/.codex/skills/setup-matt-pocock-skills/triage-labels.md +2 -2
  173. package/template/.codex/skills/tdd/agents/openai.yaml +3 -0
  174. package/template/.codex/skills/to-spec/SKILL.md +58 -0
  175. package/template/.codex/skills/to-spec/agents/openai.yaml +5 -0
  176. package/template/.codex/skills/to-tickets/SKILL.md +62 -0
  177. package/template/.codex/skills/to-tickets/agents/openai.yaml +5 -0
  178. package/template/.codex/skills/triage/SKILL.md +4 -4
  179. package/template/.codex/skills/triage/agents/openai.yaml +5 -0
  180. package/template/.codex/skills/wayfinder/SKILL.md +128 -0
  181. package/template/.codex/skills/wayfinder/agents/openai.yaml +5 -0
  182. package/template/.codex/skills/writing-great-skills/GLOSSARY.md +201 -0
  183. package/template/.codex/skills/writing-great-skills/SKILL.md +83 -0
  184. package/template/.codex/skills/writing-great-skills/agents/openai.yaml +5 -0
  185. package/template/.codex/skills/yss-cache/SKILL.md +29 -58
  186. package/template/.codex/skills/yss-cache/agents/openai.yaml +2 -2
  187. package/template/.codex/skills/yss-cache/references/annotations.md +39 -0
  188. package/template/.codex/skills/yss-cache/references/architecture.md +25 -0
  189. package/template/.codex/skills/yss-cache/references/configuration.md +34 -0
  190. package/template/.codex/skills/yss-cache/references/redis-fallback.md +23 -0
  191. package/template/.codex/skills/yss-cache/references/redis-topology.md +62 -0
  192. package/template/.codex/skills/yss-cache/references/serialization.md +17 -0
  193. package/template/.codex/skills/yss-cache/references/source-index.md +1 -1
  194. package/template/.codex/skills/yss-cache/references/troubleshooting.md +33 -0
  195. package/template/.codex/skills/yss-cache/references/verification.md +34 -0
  196. package/template/.codex/skills/yss-cache/scripts/check-skill-freshness.sh +84 -0
  197. package/template/.codex/skills/yss-cache/scripts/inspect-cache-usage.sh +96 -0
  198. package/template/.codex/skills/yss-cache/scripts/verify-cache-component.sh +101 -0
  199. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +1 -0
  200. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
  201. package/template/.codex/skills/yss-design-system/SKILL.md +9 -2
  202. package/template/.codex/skills/yss-design-system/references/design-system.md +12 -0
  203. package/template/.codex/skills/yss-domain-modeling/SKILL.md +3 -3
  204. package/template/.codex/skills/yss-domain-modeling/agents/openai.yaml +1 -1
  205. package/template/.codex/skills/yss-domain-modeling/references/modeling-workflow.md +2 -2
  206. package/template/.codex/skills/yss-openapi/SKILL.md +35 -47
  207. package/template/.codex/skills/yss-openapi/img.png +0 -0
  208. package/template/.codex/skills/yss-openapi/img_1.png +0 -0
  209. package/template/.codex/skills/yss-openapi-draft-review/SKILL.md +2 -2
  210. package/template/.codex/skills/yss-openapi-governance/SKILL.md +2 -2
  211. package/template/.codex/skills/yss-product-lifecycle/SKILL.md +46 -39
  212. package/template/.codex/skills/yss-product-lifecycle/references/artifact-checklist.md +23 -21
  213. package/template/.codex/skills/yss-product-lifecycle/references/stage-routing.md +15 -15
  214. package/template/.codex/skills/yss-product-lifecycle/references/yss-skill-routing.md +13 -8
  215. package/template/.codex/skills/yss-repository/SKILL.md +11 -3
  216. package/template/.codex/skills/yss-router/SKILL.md +1 -1
  217. package/template/.codex/skills/yss-web-controller/SKILL.md +9 -3
  218. package/template/.hermes/skills/ask-matt/SKILL.md +8 -4
  219. package/template/.hermes/skills/ask-matt/agents/openai.yaml +5 -0
  220. package/template/.hermes/skills/code-review/SKILL.md +4 -4
  221. package/template/.hermes/skills/code-review/agents/openai.yaml +3 -0
  222. package/template/.hermes/skills/codebase-design/agents/openai.yaml +3 -0
  223. package/template/.hermes/skills/competitive-intelligence/SKILL.md +5 -5
  224. package/template/.hermes/skills/diagnosing-bugs/agents/openai.yaml +3 -0
  225. package/template/.hermes/skills/domain-modeling/agents/openai.yaml +3 -0
  226. package/template/.hermes/skills/excalidraw-diagram-generator/SKILL.md +37 -16
  227. package/template/.hermes/skills/excalidraw-diagram-generator/scripts/add-arrow.py +18 -18
  228. package/template/.hermes/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +46 -47
  229. package/template/.hermes/skills/grill-me/agents/openai.yaml +5 -0
  230. package/template/.hermes/skills/grill-with-docs/agents/openai.yaml +5 -0
  231. package/template/.hermes/skills/grilling/SKILL.md +4 -4
  232. package/template/.hermes/skills/grilling/agents/openai.yaml +3 -0
  233. package/template/.hermes/skills/handoff/SKILL.md +1 -1
  234. package/template/.hermes/skills/handoff/agents/openai.yaml +5 -0
  235. package/template/.hermes/skills/implement/SKILL.md +2 -2
  236. package/template/.hermes/skills/implement/agents/openai.yaml +5 -0
  237. package/template/.hermes/skills/improve-codebase-architecture/SKILL.md +6 -1
  238. package/template/.hermes/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
  239. package/template/.hermes/skills/prototype/LOGIC.md +3 -3
  240. package/template/.hermes/skills/prototype/SKILL.md +2 -6
  241. package/template/.hermes/skills/prototype/UI.md +4 -4
  242. package/template/.hermes/skills/prototype/agents/openai.yaml +3 -0
  243. package/template/.hermes/skills/research/agents/openai.yaml +3 -0
  244. package/template/.hermes/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
  245. package/template/.hermes/skills/setup-matt-pocock-skills/SKILL.md +21 -32
  246. package/template/.hermes/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
  247. package/template/.hermes/skills/setup-matt-pocock-skills/issue-tracker-github.md +2 -2
  248. package/template/.hermes/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +2 -2
  249. package/template/.hermes/skills/setup-matt-pocock-skills/issue-tracker-local.md +6 -6
  250. package/template/.hermes/skills/setup-matt-pocock-skills/triage-labels.md +2 -2
  251. package/template/.hermes/skills/tdd/agents/openai.yaml +3 -0
  252. package/template/.hermes/skills/teach/GLOSSARY-FORMAT.md +35 -0
  253. package/template/.hermes/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
  254. package/template/.hermes/skills/teach/MISSION-FORMAT.md +31 -0
  255. package/template/.hermes/skills/teach/RESOURCES-FORMAT.md +32 -0
  256. package/template/.hermes/skills/teach/SKILL.md +140 -0
  257. package/template/.hermes/skills/teach/agents/openai.yaml +5 -0
  258. package/template/.hermes/skills/to-spec/SKILL.md +58 -0
  259. package/template/.hermes/skills/to-spec/agents/openai.yaml +5 -0
  260. package/template/.hermes/skills/to-tickets/SKILL.md +62 -0
  261. package/template/.hermes/skills/to-tickets/agents/openai.yaml +5 -0
  262. package/template/.hermes/skills/triage/SKILL.md +4 -4
  263. package/template/.hermes/skills/triage/agents/openai.yaml +5 -0
  264. package/template/.hermes/skills/wayfinder/SKILL.md +128 -0
  265. package/template/.hermes/skills/wayfinder/agents/openai.yaml +5 -0
  266. package/template/.hermes/skills/web-design-engineer/SKILL.md +2 -2
  267. package/template/.hermes/skills/writing-great-skills/GLOSSARY.md +201 -0
  268. package/template/.hermes/skills/writing-great-skills/SKILL.md +83 -0
  269. package/template/.hermes/skills/writing-great-skills/agents/openai.yaml +5 -0
  270. package/template/.hermes/skills/yss-cache/SKILL.md +44 -0
  271. package/template/.hermes/skills/yss-cache/agents/openai.yaml +5 -0
  272. package/template/.hermes/skills/yss-cache/references/annotations.md +39 -0
  273. package/template/.hermes/skills/yss-cache/references/architecture.md +25 -0
  274. package/template/.hermes/skills/yss-cache/references/configuration.md +34 -0
  275. package/template/.hermes/skills/yss-cache/references/redis-fallback.md +23 -0
  276. package/template/.hermes/skills/yss-cache/references/redis-topology.md +62 -0
  277. package/template/.hermes/skills/yss-cache/references/serialization.md +17 -0
  278. package/template/.hermes/skills/yss-cache/references/source-index.md +64 -0
  279. package/template/.hermes/skills/yss-cache/references/troubleshooting.md +33 -0
  280. package/template/.hermes/skills/yss-cache/references/verification.md +34 -0
  281. package/template/.hermes/skills/yss-cache/scripts/check-skill-freshness.sh +84 -0
  282. package/template/.hermes/skills/yss-cache/scripts/inspect-cache-usage.sh +96 -0
  283. package/template/.hermes/skills/yss-cache/scripts/verify-cache-component.sh +101 -0
  284. package/template/.obsidian/app.json +3 -0
  285. package/template/.obsidian/appearance.json +5 -0
  286. package/template/.obsidian/community-plugins.json +4 -0
  287. package/template/.obsidian/core-plugins.json +33 -0
  288. package/template/.obsidian/graph.json +22 -0
  289. package/template/.obsidian/plugins/obsidian-excalidraw-plugin/data.json +1085 -0
  290. package/template/.obsidian/plugins/obsidian-excalidraw-plugin/main.js +30 -0
  291. package/template/.obsidian/plugins/obsidian-excalidraw-plugin/manifest.json +12 -0
  292. package/template/.obsidian/plugins/obsidian-excalidraw-plugin/styles.css +1 -0
  293. package/template/.obsidian/plugins/obsidian-git/main.js +415 -0
  294. package/template/.obsidian/plugins/obsidian-git/manifest.json +10 -0
  295. package/template/.obsidian/plugins/obsidian-git/styles.css +705 -0
  296. package/template/.obsidian/workspace.json +222 -0
  297. package/template/.pi/skills/ask-matt/SKILL.md +8 -4
  298. package/template/.pi/skills/ask-matt/agents/openai.yaml +5 -0
  299. package/template/.pi/skills/code-review/SKILL.md +4 -4
  300. package/template/.pi/skills/code-review/agents/openai.yaml +3 -0
  301. package/template/.pi/skills/codebase-design/agents/openai.yaml +3 -0
  302. package/template/.pi/skills/competitive-intelligence/SKILL.md +5 -5
  303. package/template/.pi/skills/diagnosing-bugs/agents/openai.yaml +3 -0
  304. package/template/.pi/skills/domain-modeling/agents/openai.yaml +3 -0
  305. package/template/.pi/skills/excalidraw-diagram-generator/SKILL.md +37 -16
  306. package/template/.pi/skills/excalidraw-diagram-generator/scripts/add-arrow.py +18 -18
  307. package/template/.pi/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +46 -47
  308. package/template/.pi/skills/grill-me/agents/openai.yaml +5 -0
  309. package/template/.pi/skills/grill-with-docs/agents/openai.yaml +5 -0
  310. package/template/.pi/skills/grilling/SKILL.md +4 -4
  311. package/template/.pi/skills/grilling/agents/openai.yaml +3 -0
  312. package/template/.pi/skills/handoff/SKILL.md +1 -1
  313. package/template/.pi/skills/handoff/agents/openai.yaml +5 -0
  314. package/template/.pi/skills/implement/SKILL.md +2 -2
  315. package/template/.pi/skills/implement/agents/openai.yaml +5 -0
  316. package/template/.pi/skills/improve-codebase-architecture/SKILL.md +6 -1
  317. package/template/.pi/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
  318. package/template/.pi/skills/prototype/LOGIC.md +3 -3
  319. package/template/.pi/skills/prototype/SKILL.md +2 -6
  320. package/template/.pi/skills/prototype/UI.md +4 -4
  321. package/template/.pi/skills/prototype/agents/openai.yaml +3 -0
  322. package/template/.pi/skills/research/agents/openai.yaml +3 -0
  323. package/template/.pi/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
  324. package/template/.pi/skills/setup-matt-pocock-skills/SKILL.md +21 -32
  325. package/template/.pi/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
  326. package/template/.pi/skills/setup-matt-pocock-skills/issue-tracker-github.md +2 -2
  327. package/template/.pi/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +2 -2
  328. package/template/.pi/skills/setup-matt-pocock-skills/issue-tracker-local.md +6 -6
  329. package/template/.pi/skills/setup-matt-pocock-skills/triage-labels.md +2 -2
  330. package/template/.pi/skills/tdd/agents/openai.yaml +3 -0
  331. package/template/.pi/skills/teach/GLOSSARY-FORMAT.md +35 -0
  332. package/template/.pi/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
  333. package/template/.pi/skills/teach/MISSION-FORMAT.md +31 -0
  334. package/template/.pi/skills/teach/RESOURCES-FORMAT.md +32 -0
  335. package/template/.pi/skills/teach/SKILL.md +140 -0
  336. package/template/.pi/skills/teach/agents/openai.yaml +5 -0
  337. package/template/.pi/skills/to-spec/SKILL.md +58 -0
  338. package/template/.pi/skills/to-spec/agents/openai.yaml +5 -0
  339. package/template/.pi/skills/to-tickets/SKILL.md +62 -0
  340. package/template/.pi/skills/to-tickets/agents/openai.yaml +5 -0
  341. package/template/.pi/skills/triage/SKILL.md +4 -4
  342. package/template/.pi/skills/triage/agents/openai.yaml +5 -0
  343. package/template/.pi/skills/wayfinder/SKILL.md +128 -0
  344. package/template/.pi/skills/wayfinder/agents/openai.yaml +5 -0
  345. package/template/.pi/skills/web-design-engineer/SKILL.md +2 -2
  346. package/template/.pi/skills/writing-great-skills/GLOSSARY.md +201 -0
  347. package/template/.pi/skills/writing-great-skills/SKILL.md +83 -0
  348. package/template/.pi/skills/writing-great-skills/agents/openai.yaml +5 -0
  349. package/template/.pi/skills/yss-cache/SKILL.md +44 -0
  350. package/template/.pi/skills/yss-cache/agents/openai.yaml +5 -0
  351. package/template/.pi/skills/yss-cache/references/annotations.md +39 -0
  352. package/template/.pi/skills/yss-cache/references/architecture.md +25 -0
  353. package/template/.pi/skills/yss-cache/references/configuration.md +34 -0
  354. package/template/.pi/skills/yss-cache/references/redis-fallback.md +23 -0
  355. package/template/.pi/skills/yss-cache/references/redis-topology.md +62 -0
  356. package/template/.pi/skills/yss-cache/references/serialization.md +17 -0
  357. package/template/.pi/skills/yss-cache/references/source-index.md +64 -0
  358. package/template/.pi/skills/yss-cache/references/troubleshooting.md +33 -0
  359. package/template/.pi/skills/yss-cache/references/verification.md +34 -0
  360. package/template/.pi/skills/yss-cache/scripts/check-skill-freshness.sh +84 -0
  361. package/template/.pi/skills/yss-cache/scripts/inspect-cache-usage.sh +96 -0
  362. package/template/.pi/skills/yss-cache/scripts/verify-cache-component.sh +101 -0
  363. package/template/.trae/skills/ask-matt/SKILL.md +8 -4
  364. package/template/.trae/skills/ask-matt/agents/openai.yaml +5 -0
  365. package/template/.trae/skills/code-review/SKILL.md +4 -4
  366. package/template/.trae/skills/code-review/agents/openai.yaml +3 -0
  367. package/template/.trae/skills/codebase-design/agents/openai.yaml +3 -0
  368. package/template/.trae/skills/competitive-intelligence/SKILL.md +5 -5
  369. package/template/.trae/skills/diagnosing-bugs/agents/openai.yaml +3 -0
  370. package/template/.trae/skills/domain-modeling/agents/openai.yaml +3 -0
  371. package/template/.trae/skills/excalidraw-diagram-generator/SKILL.md +37 -16
  372. package/template/.trae/skills/excalidraw-diagram-generator/scripts/add-arrow.py +18 -18
  373. package/template/.trae/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +46 -47
  374. package/template/.trae/skills/grill-me/agents/openai.yaml +5 -0
  375. package/template/.trae/skills/grill-with-docs/agents/openai.yaml +5 -0
  376. package/template/.trae/skills/grilling/SKILL.md +4 -4
  377. package/template/.trae/skills/grilling/agents/openai.yaml +3 -0
  378. package/template/.trae/skills/handoff/SKILL.md +1 -1
  379. package/template/.trae/skills/handoff/agents/openai.yaml +5 -0
  380. package/template/.trae/skills/implement/SKILL.md +2 -2
  381. package/template/.trae/skills/implement/agents/openai.yaml +5 -0
  382. package/template/.trae/skills/improve-codebase-architecture/SKILL.md +6 -1
  383. package/template/.trae/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
  384. package/template/.trae/skills/prototype/LOGIC.md +3 -3
  385. package/template/.trae/skills/prototype/SKILL.md +2 -6
  386. package/template/.trae/skills/prototype/UI.md +4 -4
  387. package/template/.trae/skills/prototype/agents/openai.yaml +3 -0
  388. package/template/.trae/skills/research/agents/openai.yaml +3 -0
  389. package/template/.trae/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
  390. package/template/.trae/skills/setup-matt-pocock-skills/SKILL.md +21 -32
  391. package/template/.trae/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
  392. package/template/.trae/skills/setup-matt-pocock-skills/issue-tracker-github.md +2 -2
  393. package/template/.trae/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +2 -2
  394. package/template/.trae/skills/setup-matt-pocock-skills/issue-tracker-local.md +6 -6
  395. package/template/.trae/skills/setup-matt-pocock-skills/triage-labels.md +2 -2
  396. package/template/.trae/skills/tdd/agents/openai.yaml +3 -0
  397. package/template/.trae/skills/teach/GLOSSARY-FORMAT.md +35 -0
  398. package/template/.trae/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
  399. package/template/.trae/skills/teach/MISSION-FORMAT.md +31 -0
  400. package/template/.trae/skills/teach/RESOURCES-FORMAT.md +32 -0
  401. package/template/.trae/skills/teach/SKILL.md +140 -0
  402. package/template/.trae/skills/teach/agents/openai.yaml +5 -0
  403. package/template/.trae/skills/to-spec/SKILL.md +58 -0
  404. package/template/.trae/skills/to-spec/agents/openai.yaml +5 -0
  405. package/template/.trae/skills/to-tickets/SKILL.md +62 -0
  406. package/template/.trae/skills/to-tickets/agents/openai.yaml +5 -0
  407. package/template/.trae/skills/triage/SKILL.md +4 -4
  408. package/template/.trae/skills/triage/agents/openai.yaml +5 -0
  409. package/template/.trae/skills/wayfinder/SKILL.md +128 -0
  410. package/template/.trae/skills/wayfinder/agents/openai.yaml +5 -0
  411. package/template/.trae/skills/web-design-engineer/SKILL.md +2 -2
  412. package/template/.trae/skills/writing-great-skills/GLOSSARY.md +201 -0
  413. package/template/.trae/skills/writing-great-skills/SKILL.md +83 -0
  414. package/template/.trae/skills/writing-great-skills/agents/openai.yaml +5 -0
  415. package/template/.trae/skills/yss-cache/SKILL.md +44 -0
  416. package/template/.trae/skills/yss-cache/agents/openai.yaml +5 -0
  417. package/template/.trae/skills/yss-cache/references/annotations.md +39 -0
  418. package/template/.trae/skills/yss-cache/references/architecture.md +25 -0
  419. package/template/.trae/skills/yss-cache/references/configuration.md +34 -0
  420. package/template/.trae/skills/yss-cache/references/redis-fallback.md +23 -0
  421. package/template/.trae/skills/yss-cache/references/redis-topology.md +62 -0
  422. package/template/.trae/skills/yss-cache/references/serialization.md +17 -0
  423. package/template/.trae/skills/yss-cache/references/source-index.md +64 -0
  424. package/template/.trae/skills/yss-cache/references/troubleshooting.md +33 -0
  425. package/template/.trae/skills/yss-cache/references/verification.md +34 -0
  426. package/template/.trae/skills/yss-cache/scripts/check-skill-freshness.sh +84 -0
  427. package/template/.trae/skills/yss-cache/scripts/inspect-cache-usage.sh +96 -0
  428. package/template/.trae/skills/yss-cache/scripts/verify-cache-component.sh +101 -0
  429. package/template/AGENTS.md +89 -258
  430. package/template/CONTEXT.md +24 -11
  431. package/template/README.md +31 -45
  432. package/template/docs/adr/{adr-product-design-prototype-entrypoint.md → 0001-product-design-prototype-entrypoint.md} +3 -3
  433. package/template/docs/adr/0002-yss-project-repository-mode.md +3 -0
  434. package/template/docs/agents/README.md +4 -5
  435. package/template/docs/agents/domain.md +13 -15
  436. package/template/docs/agents/gitlab-workflow-skills.md +5 -5
  437. package/template/docs/agents/issue-tracker.md +15 -14
  438. package/template/docs/agents/skills-maintenance.md +44 -109
  439. package/template/docs/agents/triage-labels.md +10 -12
  440. package/template/docs/api/templates/openapi-draft-review-checklist.md +4 -4
  441. package/template/docs/api/templates/openapi-freeze-record-template.md +5 -5
  442. package/template/docs/architecture/README.md +4 -4
  443. package/template/docs/architecture/templates/architecture-review-checklist.md +4 -4
  444. package/template/docs/architecture/templates/business-architecture-template.md +7 -7
  445. package/template/docs/architecture/templates/data-architecture-template.md +4 -4
  446. package/template/docs/architecture/templates/engineering-baseline-review-template.md +4 -3
  447. package/template/docs/architecture/templates/functional-architecture-template.md +7 -7
  448. package/template/docs/architecture/templates/system-overview-design-template.md +5 -6
  449. package/template/docs/architecture/templates/tech-design-template.md +2 -2
  450. package/template/docs/design/README.md +8 -8
  451. package/template/docs/design/design.md +10 -1
  452. package/template/docs/design/diagrams/README.md +1 -1
  453. package/template/docs/design/templates/interaction-spec-template.md +6 -6
  454. package/template/docs/design/templates/product-overview-design-template.md +8 -8
  455. package/template/docs/design/templates/prototype-confirmation-template.md +4 -4
  456. package/template/docs/design/templates/prototype-review-checklist.md +5 -5
  457. package/template/docs/design/templates/state-matrix-template.md +1 -1
  458. package/template/docs/discovery/IDEATION.md +2 -2
  459. package/template/docs/discovery/README.md +4 -4
  460. package/template/docs/discovery/templates/competitive-analysis-template.md +4 -4
  461. package/template/docs/discovery/templates/discovery-template.md +8 -8
  462. package/template/docs/implementation/create-yss-spec-repository-mode-contract.md +59 -0
  463. package/template/docs/process/MATT-POCOCK-ENGINEERING-SKILLS.md +35 -35
  464. package/template/docs/process/harness-automation-candidates.md +10 -13
  465. package/template/docs/process/harness-executive-blueprint.md +11 -11
  466. package/template/docs/process/harness-optimization-backlog.md +6 -6
  467. package/template/docs/process/harness-pilot-retro-metrics.md +8 -8
  468. package/template/docs/process/harness-pilot-selection.md +8 -8
  469. package/template/docs/process/harness-process-tailoring.md +31 -19
  470. package/template/docs/process/harness-work-unit-map.md +9 -9
  471. package/template/docs/process/implementation-repo-integration.md +25 -11
  472. package/template/docs/process/lifecycle-artifact-map.md +60 -42
  473. package/template/docs/process/product-prototype-workflow.md +10 -10
  474. package/template/docs/process/skill-governance.md +12 -4
  475. package/template/docs/process/subagent-collaboration-validation.md +53 -0
  476. package/template/docs/process/subagent-collaboration.md +111 -0
  477. package/template/docs/process/template-governance-grilling-record.md +38 -0
  478. package/template/docs/process/template-governance-skill-validation.md +44 -0
  479. package/template/docs/process/templates/stage-checkpoint-template.md +42 -7
  480. package/template/docs/releases/next-major-template-governance.md +32 -0
  481. package/template/docs/requirements/README.md +11 -11
  482. package/template/docs/{adr/template.md → templates/adr-template.md} +2 -2
  483. package/template/docs/templates/agent-brief-template.md +5 -5
  484. package/template/docs/templates/build-architecture-checklist-template.md +41 -11
  485. package/template/docs/templates/implementation-repo-registry-template.md +8 -3
  486. package/template/docs/templates/implementation-routing-template.md +85 -19
  487. package/template/docs/templates/requirement-freeze-template.md +8 -8
  488. package/template/docs/templates/review-report-template.md +50 -0
  489. package/template/docs/templates/spec-delta-template.md +5 -5
  490. package/template/docs/templates/{prd-template.md → spec-template.md} +19 -9
  491. package/template/docs/templates/subagent-task-package-template.md +93 -0
  492. package/template/docs/templates/verification-record-template.md +2 -2
  493. package/template/docs/templates/vertical-slice-ticket-template.md +88 -0
  494. package/template/docs/user-guide/README.md +2 -2
  495. package/template/docs/user-guide/create-yss-spec-cli-guide.md +27 -209
  496. package/template/docs/user-guide/excalidraw-diagram-generator-guide.md +8 -8
  497. package/template/docs/user-guide/grill-with-docs-best-practices.md +16 -16
  498. package/template/docs/user-guide/grill-with-docs-guide.md +19 -19
  499. package/template/docs/user-guide/lifecycle-best-practices.md +40 -40
  500. package/template/docs/user-guide/product-lifecycle-workflow.md +31 -31
  501. package/template/docs/user-guide/product-rd-lifecycle-best-practices.md +121 -121
  502. package/template/docs/user-guide/spec-ticket-migration-guide.md +35 -0
  503. package/template/scripts/sync-skills +126 -0
  504. package/template/scripts/update-skill-lock +202 -0
  505. package/template/scripts/verify-lifecycle-scenarios +136 -0
  506. package/template/scripts/verify-template +148 -141
  507. package/template/skills-lock.json +1068 -108
  508. package/template/yss-project.yaml +2 -0
  509. package/template.manifest.json +3 -16
  510. package/template/.agent/skills/ask-matt/SKILL.md +0 -74
  511. package/template/.agent/skills/code-review/SKILL.md +0 -89
  512. package/template/.agent/skills/codebase-design/DEEPENING.md +0 -37
  513. package/template/.agent/skills/codebase-design/DESIGN-IT-TWICE.md +0 -44
  514. package/template/.agent/skills/codebase-design/SKILL.md +0 -114
  515. package/template/.agent/skills/competitive-intelligence/SKILL.md +0 -94
  516. package/template/.agent/skills/diagnosing-bugs/SKILL.md +0 -134
  517. package/template/.agent/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -41
  518. package/template/.agent/skills/domain-modeling/ADR-FORMAT.md +0 -47
  519. package/template/.agent/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
  520. package/template/.agent/skills/domain-modeling/SKILL.md +0 -74
  521. package/template/.agent/skills/grill-with-docs/SKILL.md +0 -7
  522. package/template/.agent/skills/implement/SKILL.md +0 -15
  523. package/template/.agent/skills/improve-codebase-architecture/HTML-REPORT.md +0 -123
  524. package/template/.agent/skills/improve-codebase-architecture/SKILL.md +0 -66
  525. package/template/.agent/skills/prototype/LOGIC.md +0 -79
  526. package/template/.agent/skills/prototype/SKILL.md +0 -30
  527. package/template/.agent/skills/prototype/UI.md +0 -112
  528. package/template/.agent/skills/research/SKILL.md +0 -12
  529. package/template/.agent/skills/resolving-merge-conflicts/SKILL.md +0 -14
  530. package/template/.agent/skills/setup-matt-pocock-skills/SKILL.md +0 -127
  531. package/template/.agent/skills/setup-matt-pocock-skills/domain.md +0 -51
  532. package/template/.agent/skills/setup-matt-pocock-skills/issue-tracker-github.md +0 -45
  533. package/template/.agent/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +0 -46
  534. package/template/.agent/skills/setup-matt-pocock-skills/issue-tracker-local.md +0 -30
  535. package/template/.agent/skills/setup-matt-pocock-skills/triage-labels.md +0 -15
  536. package/template/.agent/skills/tdd/SKILL.md +0 -36
  537. package/template/.agent/skills/tdd/mocking.md +0 -59
  538. package/template/.agent/skills/tdd/tests.md +0 -77
  539. package/template/.agent/skills/to-issues/SKILL.md +0 -84
  540. package/template/.agent/skills/to-prd/SKILL.md +0 -75
  541. package/template/.agent/skills/triage/AGENT-BRIEF.md +0 -207
  542. package/template/.agent/skills/triage/OUT-OF-SCOPE.md +0 -105
  543. package/template/.agent/skills/triage/SKILL.md +0 -112
  544. package/template/.agents/skills/to-issues/SKILL.md +0 -84
  545. package/template/.agents/skills/to-prd/SKILL.md +0 -75
  546. package/template/.claude/skills/to-issues/SKILL.md +0 -84
  547. package/template/.claude/skills/to-prd/SKILL.md +0 -75
  548. package/template/.codex/skills/to-issues/SKILL.md +0 -84
  549. package/template/.codex/skills/to-prd/SKILL.md +0 -75
  550. package/template/.codex/skills/yss-cache/assets/ClearCache.java +0 -34
  551. package/template/.codex/skills/yss-cache/assets/QueryCache.java +0 -36
  552. package/template/.codex/skills/yss-cache/assets/UpdateCache.java +0 -34
  553. package/template/.codex/skills/yss-cache/references/README.md +0 -5
  554. package/template/.hermes/skills/to-issues/SKILL.md +0 -84
  555. package/template/.hermes/skills/to-prd/SKILL.md +0 -75
  556. package/template/.pi/skills/to-issues/SKILL.md +0 -84
  557. package/template/.pi/skills/to-prd/SKILL.md +0 -75
  558. package/template/.trae/skills/to-issues/SKILL.md +0 -84
  559. package/template/.trae/skills/to-prd/SKILL.md +0 -75
  560. package/template/docs/templates/vertical-slice-issue-template.md +0 -61
  561. /package/template/docs/requirements/{issues → tickets}/.gitkeep +0 -0
@@ -1,73 +1,44 @@
1
1
  ---
2
2
  name: yss-cache
3
- description: 用于 YSS 缓存框架的接入、配置和排障。当用户提到 QueryCache、UpdateCache、ClearCache、多级缓存、Redis/Caffeine 切换、JetCache 或缓存不生效时调用。
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
4
  ---
5
5
 
6
6
  # yss-cache
7
7
 
8
- 用于处理 `yss-component-cache-parent` 相关的缓存接入、配置修复和使用规范问题。
8
+ 处理 `yss-component-cache-parent` 及其消费项目的缓存任务。
9
9
 
10
- ## 何时使用
10
+ ## 工作流
11
11
 
12
- - 用户要新增或修改缓存注解。
13
- - 用户提到 `@QueryCache`、`@UpdateCache`、`@ClearCache`。
14
- - 用户在排查 Redis、Caffeine、JetCache、多级缓存切换问题。
15
- - 用户反馈缓存命中异常、缓存未失效、Redis 不可用时降级异常。
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。
16
17
 
17
- ## 工作方式
18
+ ## 不变量
18
19
 
19
- 1. 先识别项目当前用的是 Spring Cache 扩展、Redis/Caffeine/Hazelcast 后端还是 JetCache 扩展。
20
- 2. 涉及真实类名、配置项、模块依赖或排障时,先读 `references/source-index.md`,再定位源码或文档。
21
- 3. 先查现有配置与注解用法,再决定是否改代码、改配置或两者都改。
22
- 4. 只围绕当前问题解释缓存策略、key、失效与降级,不输出整套框架宣传材料。
20
+ - 新增查询缓存时同时覆盖更新、删除和状态变更的失效路径。
21
+ - key 必须稳定并显式包含租户、机构、账套等隔离维度;不要依赖 DTO 的不稳定序列化结果。
22
+ - 不要把 Redis fallback 当作正常二级缓存。Caffeine fallback 存在节点间不一致窗口。
23
+ - 不要声称纯 Redis 后端会广播本地缓存失效。只有确认 JetCache 配置了 local、remote 和 broadcast channel 后才能作此判断。
24
+ - 不要在没有双读、版本前缀、灰度清理或迁移窗口时修改 serializer、key prefix 或 cache name。
25
+ - 不明确一致性要求时,不默认启用本地缓存或 fallback。
23
26
 
24
- ## 源码索引
27
+ ## 按场景读取
25
28
 
26
- - 源码位置不要假设固定目录;先按 `yss-source-index/references/source-location.md` 定位。
27
- - 当前技能索引:`references/source-index.md`
28
- - 重点源码入口通常包括 `EnableYssCloudCache`、`EnableYssCloudRedisCache`、`YssCacheInterceptor`、`YssCacheProperties`、`YssCacheAnnotationParser`、`QueryCache`、`UpdateCache`、`ClearCache`、各缓存后端 Provider/Resolver。
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)
29
37
 
30
- 当组件源码变化后,用 `yss-source-index` 刷新索引;刷新或读取前先按源码定位策略确认真实位置。
38
+ ## 工具
31
39
 
32
- ## 检查清单
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。
33
43
 
34
- - 启动类是否开启了缓存能力。
35
- - 当前启用的是 `redis` 还是 `caffeine`。
36
- - 缓存 key 是否稳定且能表达业务唯一性。
37
- - 更新和删除路径是否同时处理了缓存刷新或失效。
38
- - 读方法是否被 Spring 代理调用,而不是类内自调用绕过 AOP。
39
- - Redis 异常时是否有预期中的降级路径。
40
- - 多级缓存场景下,本地缓存和远端缓存的一致性边界是否被业务接受。
41
- - key 中涉及用户、租户、机构、账套等上下文时,是否显式纳入 key 设计。
42
-
43
- ## 实施建议
44
-
45
- - 查询接口优先用 `@QueryCache`。
46
- - 更新接口优先用 `@UpdateCache` 或显式失效。
47
- - 删除或状态变更接口优先用 `@ClearCache`。
48
- - 对跨节点一致性要求高的场景,优先确认是否需要 JetCache 或 Redis 广播。
49
- - 读多写少、允许短暂不一致的场景才考虑本地缓存。
50
- - 多服务共享缓存时,优先复用项目既有缓存 key 常量、枚举或命名约定。
51
-
52
- ## 排障顺序
53
-
54
- 1. 依赖和启动注解是否引入正确。
55
- 2. 配置项是否启用了预期缓存后端。
56
- 3. 目标方法是否能被 Spring AOP 代理。
57
- 4. 注解 key 表达式是否能解析到方法参数。
58
- 5. 更新/删除链路是否命中失效逻辑。
59
- 6. Redis/Caffeine/JetCache 后端是否实际创建了缓存管理器。
60
- 7. 降级行为是否与配置和业务预期一致。
61
-
62
- ## 修改约束
63
-
64
- - 不要只加查询缓存而不处理更新失效。
65
- - 不要把缓存 key 绑定到不稳定对象序列化结果。
66
- - 不要在不明确一致性要求时默认启用本地缓存。
67
- - 如果项目已经有统一缓存 key 常量或枚举,沿用现有约定。
68
-
69
- ## 按需读取
70
-
71
- - 源码索引:`references/source-index.md`
72
- - 注解定义:`assets/QueryCache.java`、`assets/UpdateCache.java`、`assets/ClearCache.java`
73
- - 复杂实现细节:`references/README.md`
44
+ 当组件源码变化后,用 `yss-source-index` 刷新 [source-index.md](references/source-index.md),再运行 freshness 检查。不要手工修改生成索引。
@@ -1,5 +1,5 @@
1
1
  version: 1
2
2
  interface:
3
3
  display_name: "YSS Cache"
4
- short_description: "QueryCache、缓存更新、失效刷新与排障规范"
5
- default_prompt: "Use $yss-cache to configure or debug QueryCache, UpdateCache, ClearCache, and Redis or Caffeine caching behavior."
4
+ short_description: "YSS 缓存注解、Redis 拓扑、降级与序列化诊断"
5
+ default_prompt: "Use $yss-cache to configure or diagnose YSS cache annotations, Redis topology, fallback, TTL, and serialization behavior."
@@ -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”当作无风险重构。
@@ -1,6 +1,6 @@
1
1
  # yss-cache Source Index
2
2
 
3
- Generated: 2026-06-29T16:11:14+00:00
3
+ Generated: 2026-07-17T10:08:00+00:00
4
4
  Indexed source root: resolved at refresh time; set `YSS_SOURCE_ROOT` to reproduce or refresh.
5
5
 
6
6
  This file is generated by `yss-source-index/scripts/refresh-yss-skill-index.py`. Do not hand-edit generated sections.
@@ -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