@jahia/agentic 0.3.0 → 0.4.1

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 (398) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/claude/.claude/rules/jahia.md +13 -40
  3. package/dist/claude/.claude/skills/jahia-cnd-author/SKILL.md +94 -0
  4. package/dist/claude/.claude/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  5. package/dist/claude/.claude/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  6. package/dist/claude/.claude/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
  7. package/dist/claude/.claude/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  8. package/dist/claude/.claude/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  9. package/dist/claude/.claude/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
  10. package/dist/claude/.claude/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
  11. package/dist/claude/.claude/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  12. package/dist/claude/.claude/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  13. package/dist/claude/.claude/skills/jahia-dev-accessibility/SKILL.md +5 -265
  14. package/dist/claude/.claude/skills/jahia-dev-build-component/SKILL.md +15 -7
  15. package/dist/claude/.claude/skills/jahia-dev-create-page-template/SKILL.md +59 -21
  16. package/dist/claude/.claude/skills/jahia-dev-create-template-set/SKILL.md +20 -47
  17. package/dist/claude/.claude/skills/jahia-dev-create-view/SKILL.md +3 -3
  18. package/dist/claude/.claude/skills/jahia-dev-review-cnd/SKILL.md +79 -0
  19. package/dist/claude/.claude/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
  20. package/dist/claude/.claude/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
  21. package/dist/claude/.claude/skills/jahia-dev-site-review/SKILL.md +70 -0
  22. package/dist/claude/.claude/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
  23. package/dist/claude/.claude/skills/jahia-dev-start-local/SKILL.md +18 -26
  24. package/dist/claude/CLAUDE.md +14 -41
  25. package/dist/codex/.agents/skills/jahia-cnd-author/SKILL.md +94 -0
  26. package/dist/codex/.agents/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  27. package/dist/codex/.agents/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  28. package/dist/codex/.agents/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
  29. package/dist/codex/.agents/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  30. package/dist/codex/.agents/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  31. package/dist/codex/.agents/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
  32. package/dist/codex/.agents/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
  33. package/dist/codex/.agents/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  34. package/dist/codex/.agents/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  35. package/dist/codex/.agents/skills/jahia-dev-accessibility/SKILL.md +5 -265
  36. package/dist/codex/.agents/skills/jahia-dev-build-component/SKILL.md +15 -7
  37. package/dist/codex/.agents/skills/jahia-dev-create-page-template/SKILL.md +59 -21
  38. package/dist/codex/.agents/skills/jahia-dev-create-template-set/SKILL.md +20 -47
  39. package/dist/codex/.agents/skills/jahia-dev-create-view/SKILL.md +3 -3
  40. package/dist/codex/.agents/skills/jahia-dev-review-cnd/SKILL.md +79 -0
  41. package/dist/codex/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
  42. package/dist/codex/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
  43. package/dist/codex/.agents/skills/jahia-dev-site-review/SKILL.md +70 -0
  44. package/dist/codex/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
  45. package/dist/codex/.agents/skills/jahia-dev-start-local/SKILL.md +18 -26
  46. package/dist/codex/AGENTS.md +15 -42
  47. package/dist/copilot/.agents/skills/jahia-cnd-author/SKILL.md +94 -0
  48. package/dist/copilot/.agents/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  49. package/dist/copilot/.agents/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  50. package/dist/copilot/.agents/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
  51. package/dist/copilot/.agents/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  52. package/dist/copilot/.agents/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  53. package/dist/copilot/.agents/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
  54. package/dist/copilot/.agents/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
  55. package/dist/copilot/.agents/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  56. package/dist/copilot/.agents/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  57. package/dist/copilot/.agents/skills/jahia-dev-accessibility/SKILL.md +5 -265
  58. package/dist/copilot/.agents/skills/jahia-dev-build-component/SKILL.md +15 -7
  59. package/dist/copilot/.agents/skills/jahia-dev-create-page-template/SKILL.md +59 -21
  60. package/dist/copilot/.agents/skills/jahia-dev-create-template-set/SKILL.md +20 -47
  61. package/dist/copilot/.agents/skills/jahia-dev-create-view/SKILL.md +3 -3
  62. package/dist/copilot/.agents/skills/jahia-dev-review-cnd/SKILL.md +79 -0
  63. package/dist/copilot/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
  64. package/dist/copilot/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
  65. package/dist/copilot/.agents/skills/jahia-dev-site-review/SKILL.md +70 -0
  66. package/dist/copilot/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
  67. package/dist/copilot/.agents/skills/jahia-dev-start-local/SKILL.md +18 -26
  68. package/dist/copilot/AGENTS.md +15 -42
  69. package/dist/cursor/.agents/skills/jahia-cnd-author/SKILL.md +94 -0
  70. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  71. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  72. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
  73. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  74. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  75. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
  76. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
  77. package/dist/cursor/.agents/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  78. package/dist/cursor/.agents/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  79. package/dist/cursor/.agents/skills/jahia-dev-accessibility/SKILL.md +5 -265
  80. package/dist/cursor/.agents/skills/jahia-dev-build-component/SKILL.md +15 -7
  81. package/dist/cursor/.agents/skills/jahia-dev-create-page-template/SKILL.md +59 -21
  82. package/dist/cursor/.agents/skills/jahia-dev-create-template-set/SKILL.md +20 -47
  83. package/dist/cursor/.agents/skills/jahia-dev-create-view/SKILL.md +3 -3
  84. package/dist/cursor/.agents/skills/jahia-dev-review-cnd/SKILL.md +79 -0
  85. package/dist/cursor/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
  86. package/dist/cursor/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
  87. package/dist/cursor/.agents/skills/jahia-dev-site-review/SKILL.md +70 -0
  88. package/dist/cursor/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
  89. package/dist/cursor/.agents/skills/jahia-dev-start-local/SKILL.md +18 -26
  90. package/dist/cursor/.cursor/rules/jahia.mdc +13 -40
  91. package/dist/gemini/.agents/skills/jahia-cnd-author/SKILL.md +94 -0
  92. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  93. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  94. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
  95. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  96. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  97. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
  98. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
  99. package/dist/gemini/.agents/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  100. package/dist/gemini/.agents/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  101. package/dist/gemini/.agents/skills/jahia-dev-accessibility/SKILL.md +5 -265
  102. package/dist/gemini/.agents/skills/jahia-dev-build-component/SKILL.md +15 -7
  103. package/dist/gemini/.agents/skills/jahia-dev-create-page-template/SKILL.md +59 -21
  104. package/dist/gemini/.agents/skills/jahia-dev-create-template-set/SKILL.md +20 -47
  105. package/dist/gemini/.agents/skills/jahia-dev-create-view/SKILL.md +3 -3
  106. package/dist/gemini/.agents/skills/jahia-dev-review-cnd/SKILL.md +79 -0
  107. package/dist/gemini/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
  108. package/dist/gemini/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
  109. package/dist/gemini/.agents/skills/jahia-dev-site-review/SKILL.md +70 -0
  110. package/dist/gemini/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
  111. package/dist/gemini/.agents/skills/jahia-dev-start-local/SKILL.md +18 -26
  112. package/dist/gemini/AGENTS.md +15 -42
  113. package/dist/gemini/GEMINI.md +2 -2
  114. package/dist/index.js +13 -0
  115. package/dist/opencode/.agents/skills/jahia-cnd-author/SKILL.md +94 -0
  116. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  117. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  118. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
  119. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  120. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  121. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
  122. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
  123. package/dist/opencode/.agents/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  124. package/dist/opencode/.agents/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  125. package/dist/opencode/.agents/skills/jahia-dev-accessibility/SKILL.md +5 -265
  126. package/dist/opencode/.agents/skills/jahia-dev-build-component/SKILL.md +15 -7
  127. package/dist/opencode/.agents/skills/jahia-dev-create-page-template/SKILL.md +59 -21
  128. package/dist/opencode/.agents/skills/jahia-dev-create-template-set/SKILL.md +20 -47
  129. package/dist/opencode/.agents/skills/jahia-dev-create-view/SKILL.md +3 -3
  130. package/dist/opencode/.agents/skills/jahia-dev-review-cnd/SKILL.md +79 -0
  131. package/dist/opencode/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
  132. package/dist/opencode/.agents/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
  133. package/dist/opencode/.agents/skills/jahia-dev-site-review/SKILL.md +70 -0
  134. package/dist/opencode/.agents/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
  135. package/dist/opencode/.agents/skills/jahia-dev-start-local/SKILL.md +18 -26
  136. package/dist/opencode/AGENTS.md +15 -42
  137. package/dist/windsurf/.windsurf/rules/jahia.md +13 -40
  138. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/SKILL.md +94 -0
  139. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-area-types.md +55 -0
  140. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-authoring-experience.md +92 -0
  141. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-child-nodes.md +74 -0
  142. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-jahia-mixins.md +510 -0
  143. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-modeling-decisions.md +87 -0
  144. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-numbers-dates.md +92 -0
  145. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-string-selectors.md +133 -0
  146. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/cnd-syntax.md +119 -0
  147. package/dist/windsurf/.windsurf/skills/jahia-cnd-author/references/types-ts-mapping.md +73 -0
  148. package/dist/windsurf/.windsurf/skills/jahia-dev-accessibility/SKILL.md +5 -265
  149. package/dist/windsurf/.windsurf/skills/jahia-dev-build-component/SKILL.md +15 -7
  150. package/dist/windsurf/.windsurf/skills/jahia-dev-create-page-template/SKILL.md +59 -21
  151. package/dist/windsurf/.windsurf/skills/jahia-dev-create-template-set/SKILL.md +20 -47
  152. package/dist/windsurf/.windsurf/skills/jahia-dev-create-view/SKILL.md +3 -3
  153. package/dist/windsurf/.windsurf/skills/jahia-dev-review-cnd/SKILL.md +79 -0
  154. package/dist/windsurf/.windsurf/skills/jahia-dev-review-cnd/scripts/check-cnd.d.mts +13 -0
  155. package/dist/windsurf/.windsurf/skills/jahia-dev-review-cnd/scripts/check-cnd.mjs +198 -0
  156. package/dist/windsurf/.windsurf/skills/jahia-dev-site-review/SKILL.md +70 -0
  157. package/dist/windsurf/.windsurf/skills/jahia-dev-site-review/scripts/review-pages.mjs +85 -0
  158. package/dist/windsurf/.windsurf/skills/jahia-dev-start-local/SKILL.md +18 -26
  159. package/dist/windsurf/AGENTS.md +15 -42
  160. package/package.json +1 -1
  161. package/dist/claude/.claude/skills/jahia/SKILL.md +0 -144
  162. package/dist/claude/.claude/skills/jahia-content/SKILL.md +0 -157
  163. package/dist/claude/.claude/skills/jahia-content-create-content/SKILL.md +0 -359
  164. package/dist/claude/.claude/skills/jahia-content-explore-structure/SKILL.md +0 -255
  165. package/dist/claude/.claude/skills/jahia-content-media-upload/SKILL.md +0 -197
  166. package/dist/claude/.claude/skills/jahia-content-move-content/SKILL.md +0 -231
  167. package/dist/claude/.claude/skills/jahia-content-organize/SKILL.md +0 -209
  168. package/dist/claude/.claude/skills/jahia-content-publish/SKILL.md +0 -181
  169. package/dist/claude/.claude/skills/jahia-content-query-content/SKILL.md +0 -174
  170. package/dist/claude/.claude/skills/jahia-content-translate-content/SKILL.md +0 -226
  171. package/dist/claude/.claude/skills/jahia-dev/SKILL.md +0 -124
  172. package/dist/claude/.claude/skills/jahia-dev-apis/SKILL.md +0 -52
  173. package/dist/claude/.claude/skills/jahia-dev-apis/references/authentication.md +0 -484
  174. package/dist/claude/.claude/skills/jahia-dev-apis/references/graphql.md +0 -657
  175. package/dist/claude/.claude/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  176. package/dist/claude/.claude/skills/jahia-dev-apis/references/security.md +0 -541
  177. package/dist/claude/.claude/skills/jahia-dev-cypress/SKILL.md +0 -265
  178. package/dist/claude/.claude/skills/jahia-dev-define-content-type/SKILL.md +0 -536
  179. package/dist/claude/.claude/skills/jahia-dev-java/SKILL.md +0 -110
  180. package/dist/claude/.claude/skills/jahia-dev-java/references/backend.md +0 -331
  181. package/dist/claude/.claude/skills/jahia-dev-java/references/content-types.md +0 -273
  182. package/dist/claude/.claude/skills/jahia-dev-java/references/modules.md +0 -218
  183. package/dist/claude/.claude/skills/jahia-dev-java/references/osgi.md +0 -208
  184. package/dist/claude/.claude/skills/jahia-dev-java/references/rendering.md +0 -191
  185. package/dist/claude/.claude/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  186. package/dist/claude/.claude/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  187. package/dist/claude/.claude/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  188. package/dist/claude/.claude/skills/jahia-java-concurrency/SKILL.md +0 -308
  189. package/dist/claude/.claude/skills/jahia-java-jcr/SKILL.md +0 -153
  190. package/dist/claude/.claude/skills/jahia-java-osgi/SKILL.md +0 -134
  191. package/dist/claude/.claude/skills/jahia-java-persistence/SKILL.md +0 -177
  192. package/dist/claude/.claude/skills/jahia-java-security/SKILL.md +0 -84
  193. package/dist/claude/.claude/skills/jahia-review-java/SKILL.md +0 -131
  194. package/dist/claude/.claude/skills/jahia-review-java/references/code-review-output.md +0 -121
  195. package/dist/codex/.agents/skills/jahia/SKILL.md +0 -144
  196. package/dist/codex/.agents/skills/jahia-content/SKILL.md +0 -157
  197. package/dist/codex/.agents/skills/jahia-content-create-content/SKILL.md +0 -359
  198. package/dist/codex/.agents/skills/jahia-content-explore-structure/SKILL.md +0 -255
  199. package/dist/codex/.agents/skills/jahia-content-media-upload/SKILL.md +0 -197
  200. package/dist/codex/.agents/skills/jahia-content-move-content/SKILL.md +0 -231
  201. package/dist/codex/.agents/skills/jahia-content-organize/SKILL.md +0 -209
  202. package/dist/codex/.agents/skills/jahia-content-publish/SKILL.md +0 -181
  203. package/dist/codex/.agents/skills/jahia-content-query-content/SKILL.md +0 -174
  204. package/dist/codex/.agents/skills/jahia-content-translate-content/SKILL.md +0 -226
  205. package/dist/codex/.agents/skills/jahia-dev/SKILL.md +0 -124
  206. package/dist/codex/.agents/skills/jahia-dev-apis/SKILL.md +0 -52
  207. package/dist/codex/.agents/skills/jahia-dev-apis/references/authentication.md +0 -484
  208. package/dist/codex/.agents/skills/jahia-dev-apis/references/graphql.md +0 -657
  209. package/dist/codex/.agents/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  210. package/dist/codex/.agents/skills/jahia-dev-apis/references/security.md +0 -541
  211. package/dist/codex/.agents/skills/jahia-dev-cypress/SKILL.md +0 -265
  212. package/dist/codex/.agents/skills/jahia-dev-define-content-type/SKILL.md +0 -536
  213. package/dist/codex/.agents/skills/jahia-dev-java/SKILL.md +0 -110
  214. package/dist/codex/.agents/skills/jahia-dev-java/references/backend.md +0 -331
  215. package/dist/codex/.agents/skills/jahia-dev-java/references/content-types.md +0 -273
  216. package/dist/codex/.agents/skills/jahia-dev-java/references/modules.md +0 -218
  217. package/dist/codex/.agents/skills/jahia-dev-java/references/osgi.md +0 -208
  218. package/dist/codex/.agents/skills/jahia-dev-java/references/rendering.md +0 -191
  219. package/dist/codex/.agents/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  220. package/dist/codex/.agents/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  221. package/dist/codex/.agents/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  222. package/dist/codex/.agents/skills/jahia-java-concurrency/SKILL.md +0 -308
  223. package/dist/codex/.agents/skills/jahia-java-jcr/SKILL.md +0 -153
  224. package/dist/codex/.agents/skills/jahia-java-osgi/SKILL.md +0 -134
  225. package/dist/codex/.agents/skills/jahia-java-persistence/SKILL.md +0 -177
  226. package/dist/codex/.agents/skills/jahia-java-security/SKILL.md +0 -84
  227. package/dist/codex/.agents/skills/jahia-review-java/SKILL.md +0 -131
  228. package/dist/codex/.agents/skills/jahia-review-java/references/code-review-output.md +0 -121
  229. package/dist/copilot/.agents/skills/jahia/SKILL.md +0 -144
  230. package/dist/copilot/.agents/skills/jahia-content/SKILL.md +0 -157
  231. package/dist/copilot/.agents/skills/jahia-content-create-content/SKILL.md +0 -359
  232. package/dist/copilot/.agents/skills/jahia-content-explore-structure/SKILL.md +0 -255
  233. package/dist/copilot/.agents/skills/jahia-content-media-upload/SKILL.md +0 -197
  234. package/dist/copilot/.agents/skills/jahia-content-move-content/SKILL.md +0 -231
  235. package/dist/copilot/.agents/skills/jahia-content-organize/SKILL.md +0 -209
  236. package/dist/copilot/.agents/skills/jahia-content-publish/SKILL.md +0 -181
  237. package/dist/copilot/.agents/skills/jahia-content-query-content/SKILL.md +0 -174
  238. package/dist/copilot/.agents/skills/jahia-content-translate-content/SKILL.md +0 -226
  239. package/dist/copilot/.agents/skills/jahia-dev/SKILL.md +0 -124
  240. package/dist/copilot/.agents/skills/jahia-dev-apis/SKILL.md +0 -52
  241. package/dist/copilot/.agents/skills/jahia-dev-apis/references/authentication.md +0 -484
  242. package/dist/copilot/.agents/skills/jahia-dev-apis/references/graphql.md +0 -657
  243. package/dist/copilot/.agents/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  244. package/dist/copilot/.agents/skills/jahia-dev-apis/references/security.md +0 -541
  245. package/dist/copilot/.agents/skills/jahia-dev-cypress/SKILL.md +0 -265
  246. package/dist/copilot/.agents/skills/jahia-dev-define-content-type/SKILL.md +0 -536
  247. package/dist/copilot/.agents/skills/jahia-dev-java/SKILL.md +0 -110
  248. package/dist/copilot/.agents/skills/jahia-dev-java/references/backend.md +0 -331
  249. package/dist/copilot/.agents/skills/jahia-dev-java/references/content-types.md +0 -273
  250. package/dist/copilot/.agents/skills/jahia-dev-java/references/modules.md +0 -218
  251. package/dist/copilot/.agents/skills/jahia-dev-java/references/osgi.md +0 -208
  252. package/dist/copilot/.agents/skills/jahia-dev-java/references/rendering.md +0 -191
  253. package/dist/copilot/.agents/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  254. package/dist/copilot/.agents/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  255. package/dist/copilot/.agents/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  256. package/dist/copilot/.agents/skills/jahia-java-concurrency/SKILL.md +0 -308
  257. package/dist/copilot/.agents/skills/jahia-java-jcr/SKILL.md +0 -153
  258. package/dist/copilot/.agents/skills/jahia-java-osgi/SKILL.md +0 -134
  259. package/dist/copilot/.agents/skills/jahia-java-persistence/SKILL.md +0 -177
  260. package/dist/copilot/.agents/skills/jahia-java-security/SKILL.md +0 -84
  261. package/dist/copilot/.agents/skills/jahia-review-java/SKILL.md +0 -131
  262. package/dist/copilot/.agents/skills/jahia-review-java/references/code-review-output.md +0 -121
  263. package/dist/cursor/.agents/skills/jahia/SKILL.md +0 -144
  264. package/dist/cursor/.agents/skills/jahia-content/SKILL.md +0 -157
  265. package/dist/cursor/.agents/skills/jahia-content-create-content/SKILL.md +0 -359
  266. package/dist/cursor/.agents/skills/jahia-content-explore-structure/SKILL.md +0 -255
  267. package/dist/cursor/.agents/skills/jahia-content-media-upload/SKILL.md +0 -197
  268. package/dist/cursor/.agents/skills/jahia-content-move-content/SKILL.md +0 -231
  269. package/dist/cursor/.agents/skills/jahia-content-organize/SKILL.md +0 -209
  270. package/dist/cursor/.agents/skills/jahia-content-publish/SKILL.md +0 -181
  271. package/dist/cursor/.agents/skills/jahia-content-query-content/SKILL.md +0 -174
  272. package/dist/cursor/.agents/skills/jahia-content-translate-content/SKILL.md +0 -226
  273. package/dist/cursor/.agents/skills/jahia-dev/SKILL.md +0 -124
  274. package/dist/cursor/.agents/skills/jahia-dev-apis/SKILL.md +0 -52
  275. package/dist/cursor/.agents/skills/jahia-dev-apis/references/authentication.md +0 -484
  276. package/dist/cursor/.agents/skills/jahia-dev-apis/references/graphql.md +0 -657
  277. package/dist/cursor/.agents/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  278. package/dist/cursor/.agents/skills/jahia-dev-apis/references/security.md +0 -541
  279. package/dist/cursor/.agents/skills/jahia-dev-cypress/SKILL.md +0 -265
  280. package/dist/cursor/.agents/skills/jahia-dev-define-content-type/SKILL.md +0 -536
  281. package/dist/cursor/.agents/skills/jahia-dev-java/SKILL.md +0 -110
  282. package/dist/cursor/.agents/skills/jahia-dev-java/references/backend.md +0 -331
  283. package/dist/cursor/.agents/skills/jahia-dev-java/references/content-types.md +0 -273
  284. package/dist/cursor/.agents/skills/jahia-dev-java/references/modules.md +0 -218
  285. package/dist/cursor/.agents/skills/jahia-dev-java/references/osgi.md +0 -208
  286. package/dist/cursor/.agents/skills/jahia-dev-java/references/rendering.md +0 -191
  287. package/dist/cursor/.agents/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  288. package/dist/cursor/.agents/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  289. package/dist/cursor/.agents/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  290. package/dist/cursor/.agents/skills/jahia-java-concurrency/SKILL.md +0 -308
  291. package/dist/cursor/.agents/skills/jahia-java-jcr/SKILL.md +0 -153
  292. package/dist/cursor/.agents/skills/jahia-java-osgi/SKILL.md +0 -134
  293. package/dist/cursor/.agents/skills/jahia-java-persistence/SKILL.md +0 -177
  294. package/dist/cursor/.agents/skills/jahia-java-security/SKILL.md +0 -84
  295. package/dist/cursor/.agents/skills/jahia-review-java/SKILL.md +0 -131
  296. package/dist/cursor/.agents/skills/jahia-review-java/references/code-review-output.md +0 -121
  297. package/dist/gemini/.agents/skills/jahia/SKILL.md +0 -144
  298. package/dist/gemini/.agents/skills/jahia-content/SKILL.md +0 -157
  299. package/dist/gemini/.agents/skills/jahia-content-create-content/SKILL.md +0 -359
  300. package/dist/gemini/.agents/skills/jahia-content-explore-structure/SKILL.md +0 -255
  301. package/dist/gemini/.agents/skills/jahia-content-media-upload/SKILL.md +0 -197
  302. package/dist/gemini/.agents/skills/jahia-content-move-content/SKILL.md +0 -231
  303. package/dist/gemini/.agents/skills/jahia-content-organize/SKILL.md +0 -209
  304. package/dist/gemini/.agents/skills/jahia-content-publish/SKILL.md +0 -181
  305. package/dist/gemini/.agents/skills/jahia-content-query-content/SKILL.md +0 -174
  306. package/dist/gemini/.agents/skills/jahia-content-translate-content/SKILL.md +0 -226
  307. package/dist/gemini/.agents/skills/jahia-dev/SKILL.md +0 -124
  308. package/dist/gemini/.agents/skills/jahia-dev-apis/SKILL.md +0 -52
  309. package/dist/gemini/.agents/skills/jahia-dev-apis/references/authentication.md +0 -484
  310. package/dist/gemini/.agents/skills/jahia-dev-apis/references/graphql.md +0 -657
  311. package/dist/gemini/.agents/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  312. package/dist/gemini/.agents/skills/jahia-dev-apis/references/security.md +0 -541
  313. package/dist/gemini/.agents/skills/jahia-dev-cypress/SKILL.md +0 -265
  314. package/dist/gemini/.agents/skills/jahia-dev-define-content-type/SKILL.md +0 -536
  315. package/dist/gemini/.agents/skills/jahia-dev-java/SKILL.md +0 -110
  316. package/dist/gemini/.agents/skills/jahia-dev-java/references/backend.md +0 -331
  317. package/dist/gemini/.agents/skills/jahia-dev-java/references/content-types.md +0 -273
  318. package/dist/gemini/.agents/skills/jahia-dev-java/references/modules.md +0 -218
  319. package/dist/gemini/.agents/skills/jahia-dev-java/references/osgi.md +0 -208
  320. package/dist/gemini/.agents/skills/jahia-dev-java/references/rendering.md +0 -191
  321. package/dist/gemini/.agents/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  322. package/dist/gemini/.agents/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  323. package/dist/gemini/.agents/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  324. package/dist/gemini/.agents/skills/jahia-java-concurrency/SKILL.md +0 -308
  325. package/dist/gemini/.agents/skills/jahia-java-jcr/SKILL.md +0 -153
  326. package/dist/gemini/.agents/skills/jahia-java-osgi/SKILL.md +0 -134
  327. package/dist/gemini/.agents/skills/jahia-java-persistence/SKILL.md +0 -177
  328. package/dist/gemini/.agents/skills/jahia-java-security/SKILL.md +0 -84
  329. package/dist/gemini/.agents/skills/jahia-review-java/SKILL.md +0 -131
  330. package/dist/gemini/.agents/skills/jahia-review-java/references/code-review-output.md +0 -121
  331. package/dist/opencode/.agents/skills/jahia/SKILL.md +0 -144
  332. package/dist/opencode/.agents/skills/jahia-content/SKILL.md +0 -157
  333. package/dist/opencode/.agents/skills/jahia-content-create-content/SKILL.md +0 -359
  334. package/dist/opencode/.agents/skills/jahia-content-explore-structure/SKILL.md +0 -255
  335. package/dist/opencode/.agents/skills/jahia-content-media-upload/SKILL.md +0 -197
  336. package/dist/opencode/.agents/skills/jahia-content-move-content/SKILL.md +0 -231
  337. package/dist/opencode/.agents/skills/jahia-content-organize/SKILL.md +0 -209
  338. package/dist/opencode/.agents/skills/jahia-content-publish/SKILL.md +0 -181
  339. package/dist/opencode/.agents/skills/jahia-content-query-content/SKILL.md +0 -174
  340. package/dist/opencode/.agents/skills/jahia-content-translate-content/SKILL.md +0 -226
  341. package/dist/opencode/.agents/skills/jahia-dev/SKILL.md +0 -124
  342. package/dist/opencode/.agents/skills/jahia-dev-apis/SKILL.md +0 -52
  343. package/dist/opencode/.agents/skills/jahia-dev-apis/references/authentication.md +0 -484
  344. package/dist/opencode/.agents/skills/jahia-dev-apis/references/graphql.md +0 -657
  345. package/dist/opencode/.agents/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  346. package/dist/opencode/.agents/skills/jahia-dev-apis/references/security.md +0 -541
  347. package/dist/opencode/.agents/skills/jahia-dev-cypress/SKILL.md +0 -265
  348. package/dist/opencode/.agents/skills/jahia-dev-define-content-type/SKILL.md +0 -536
  349. package/dist/opencode/.agents/skills/jahia-dev-java/SKILL.md +0 -110
  350. package/dist/opencode/.agents/skills/jahia-dev-java/references/backend.md +0 -331
  351. package/dist/opencode/.agents/skills/jahia-dev-java/references/content-types.md +0 -273
  352. package/dist/opencode/.agents/skills/jahia-dev-java/references/modules.md +0 -218
  353. package/dist/opencode/.agents/skills/jahia-dev-java/references/osgi.md +0 -208
  354. package/dist/opencode/.agents/skills/jahia-dev-java/references/rendering.md +0 -191
  355. package/dist/opencode/.agents/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  356. package/dist/opencode/.agents/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  357. package/dist/opencode/.agents/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  358. package/dist/opencode/.agents/skills/jahia-java-concurrency/SKILL.md +0 -308
  359. package/dist/opencode/.agents/skills/jahia-java-jcr/SKILL.md +0 -153
  360. package/dist/opencode/.agents/skills/jahia-java-osgi/SKILL.md +0 -134
  361. package/dist/opencode/.agents/skills/jahia-java-persistence/SKILL.md +0 -177
  362. package/dist/opencode/.agents/skills/jahia-java-security/SKILL.md +0 -84
  363. package/dist/opencode/.agents/skills/jahia-review-java/SKILL.md +0 -131
  364. package/dist/opencode/.agents/skills/jahia-review-java/references/code-review-output.md +0 -121
  365. package/dist/windsurf/.windsurf/skills/jahia/SKILL.md +0 -144
  366. package/dist/windsurf/.windsurf/skills/jahia-content/SKILL.md +0 -157
  367. package/dist/windsurf/.windsurf/skills/jahia-content-create-content/SKILL.md +0 -359
  368. package/dist/windsurf/.windsurf/skills/jahia-content-explore-structure/SKILL.md +0 -255
  369. package/dist/windsurf/.windsurf/skills/jahia-content-media-upload/SKILL.md +0 -197
  370. package/dist/windsurf/.windsurf/skills/jahia-content-move-content/SKILL.md +0 -231
  371. package/dist/windsurf/.windsurf/skills/jahia-content-organize/SKILL.md +0 -209
  372. package/dist/windsurf/.windsurf/skills/jahia-content-publish/SKILL.md +0 -181
  373. package/dist/windsurf/.windsurf/skills/jahia-content-query-content/SKILL.md +0 -174
  374. package/dist/windsurf/.windsurf/skills/jahia-content-translate-content/SKILL.md +0 -226
  375. package/dist/windsurf/.windsurf/skills/jahia-dev/SKILL.md +0 -124
  376. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/SKILL.md +0 -52
  377. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/authentication.md +0 -484
  378. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/graphql.md +0 -657
  379. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/jcr-api.md +0 -465
  380. package/dist/windsurf/.windsurf/skills/jahia-dev-apis/references/security.md +0 -541
  381. package/dist/windsurf/.windsurf/skills/jahia-dev-cypress/SKILL.md +0 -265
  382. package/dist/windsurf/.windsurf/skills/jahia-dev-define-content-type/SKILL.md +0 -536
  383. package/dist/windsurf/.windsurf/skills/jahia-dev-java/SKILL.md +0 -110
  384. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/backend.md +0 -331
  385. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/content-types.md +0 -273
  386. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/modules.md +0 -218
  387. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/osgi.md +0 -208
  388. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/rendering.md +0 -191
  389. package/dist/windsurf/.windsurf/skills/jahia-dev-java/references/ui-extensions.md +0 -344
  390. package/dist/windsurf/.windsurf/skills/jahia-dev-osgi-module/SKILL.md +0 -297
  391. package/dist/windsurf/.windsurf/skills/jahia-dev-ui-extension/SKILL.md +0 -559
  392. package/dist/windsurf/.windsurf/skills/jahia-java-concurrency/SKILL.md +0 -308
  393. package/dist/windsurf/.windsurf/skills/jahia-java-jcr/SKILL.md +0 -153
  394. package/dist/windsurf/.windsurf/skills/jahia-java-osgi/SKILL.md +0 -134
  395. package/dist/windsurf/.windsurf/skills/jahia-java-persistence/SKILL.md +0 -177
  396. package/dist/windsurf/.windsurf/skills/jahia-java-security/SKILL.md +0 -84
  397. package/dist/windsurf/.windsurf/skills/jahia-review-java/SKILL.md +0 -131
  398. package/dist/windsurf/.windsurf/skills/jahia-review-java/references/code-review-output.md +0 -121
@@ -1,177 +0,0 @@
1
- ---
2
- name: jahia-java-persistence
3
- description: Persistence and data model patterns for Jahia Java backend — correct usage of JPA/Hibernate with JCR, N+1 avoidance, timestamp consistency, entity model decisions, transactional asymmetry between SQL and JCR, and locking/concurrency in write paths. Load when implementing or reviewing any class that interacts with a relational database alongside JCR.
4
- allowed-tools: Read
5
- ---
6
-
7
- # Persistence Patterns for Jahia Java Backend
8
-
9
- This skill covers how to design and implement the persistence layer correctly when combining SQL (JPA/Hibernate) with JCR in a Jahia Java module. Each section states the correct approach first, then the pitfall. Both developers and reviewers use this skill.
10
-
11
- ---
12
-
13
- ## Sequence and counter columns
14
-
15
- ### Correct approach
16
-
17
- Use the database's native mechanisms for generating ordered identifiers:
18
- - `IDENTITY` / `AUTO_INCREMENT` on the primary key for insertion order.
19
- - A `SEQUENCE` object (reserved inside a serialized transaction) if you need a stable ordering column separate from the PK.
20
-
21
- ### Pitfall
22
-
23
- ```java
24
- // anti-pattern — read-then-act race
25
- int max = repository.selectMaxNumber(contentId, locale); // SELECT MAX(...)
26
- entity.setNumber(max + 1);
27
- session.persist(entity);
28
- ```
29
-
30
- Two concurrent inserts for the same `(contentId, locale)` read the same `MAX`, produce duplicate numbers, and either hit a unique constraint violation or silently corrupt ordering. Application-managed counters are never safe without explicit row-level locking. The counter column is also redundant if the primary key already provides insertion order.
31
-
32
- **Finding level:** P1 for concurrent write paths; P2 if access is serialised by a documented higher-level lock, but that invariant must be documented.
33
-
34
- ---
35
-
36
- ## N+1 query patterns
37
-
38
- ### Correct approach
39
-
40
- Load parent and child data in one round-trip:
41
- - SQL: `JOIN` or a `WHERE id IN (...)` batch query.
42
- - JPA: `JOIN FETCH` in JPQL or `@EntityGraph`.
43
-
44
- ### Pitfall
45
-
46
- ```java
47
- // anti-pattern
48
- List<Group> groups = repo.listGroups(contentId); // 1 query
49
- for (Group g : groups) {
50
- g.setVersions(repo.loadVersionsForGroup(g.getId())); // N queries
51
- }
52
- ```
53
-
54
- N+1 patterns are invisible in low-volume testing but degrade linearly under real content volumes. For unbounded lists (version history, publication logs) this becomes a UI performance cliff.
55
-
56
- **Finding level:** P2 for capped lists; P1 for unbounded lists in hot paths.
57
-
58
- ---
59
-
60
- ## Timestamp consistency in batch operations
61
-
62
- ### Correct approach
63
-
64
- Compute the timestamp **once** at the start of a logical operation and pass it to every entity created by that operation:
65
-
66
- ```java
67
- Instant now = Instant.now(); // computed once
68
- groupEntity.setCreatedAt(now);
69
- for (var version : versions) {
70
- versionEntity.setCreatedAt(now); // same value for all
71
- }
72
- ```
73
-
74
- This makes "all entities from this operation" a trivial equality predicate: `WHERE operationId = ? AND createdAt = ?`. It also makes the audit trail semantically correct — these are one logical event, not N sequential events.
75
-
76
- ### Pitfall
77
-
78
- Multiple independent `Instant.now()` calls within the same logical operation produce timestamp drift. Even millisecond drift means "show me all versions from this publish event" requires a range query with fuzzy bounds instead of equality. It also implies false ordering between things that are the same event.
79
-
80
- **Finding level:** P2 — correctness and query simplicity. Elevate to P1 if the drift creates misleading audit trails.
81
-
82
- ---
83
-
84
- ## Entity model: when a separate table earns its keep
85
-
86
- ### Correct approach
87
-
88
- A separate table/entity is justified when it carries state that would be annoyingly denormalised across every member row: operation type, author, workflow status, retry counters, approval metadata, referential integrity constraints.
89
-
90
- If the only purpose of the separate table is to group rows (no meaningful payload of its own), a plain `operationId` UUID column on the member table is sufficient:
91
- - "All operations for a content": `SELECT DISTINCT operationId, createdAt FROM NodeVersion WHERE contentId = ? ORDER BY createdAt DESC`
92
- - "All versions of one operation": `SELECT * FROM NodeVersion WHERE operationId = ?`
93
-
94
- Rule of thumb: defer extraction to a separate entity until the denormalised columns exceed 3–4 fields, or you need referential integrity on the operation itself (cascading, per-operation locks). The refactor is straightforward later — `INSERT ... SELECT DISTINCT` into the new table, add the FK, drop the denormalised columns.
95
-
96
- ### Pitfall
97
-
98
- ```java
99
- // separate table with no meaningful payload — not justified yet
100
- @Entity class NodeVersionGroupEntity {
101
- UUID id;
102
- UUID nodeUuid; // duplicated from every member row
103
- Instant createdAt; // drifts from member rows (see above)
104
- // nothing else
105
- }
106
- ```
107
-
108
- A correlation-only entity adds a table, a JOIN on every group query, a separate Hibernate lifecycle, and the risk of timestamp drift — for zero domain benefit until the group gains real state.
109
-
110
- **Finding level:** P2 — surface as a design decision for the team, not a demand for immediate refactoring. Ask: does the group entity carry any state today? What is the expected evolution?
111
-
112
- ---
113
-
114
- ## Transactional asymmetry — mixed SQL + JCR stores
115
-
116
- ### Correct approach
117
-
118
- SQL (Hibernate) and JCR do not share a transaction. Treat every mixed write path as requiring explicit reasoning about failure modes.
119
-
120
- Options in order of preference:
121
- 1. **JCR as system of record:** write to JCR first; only commit to SQL after a successful `session.save()`. If the SQL commit fails, log the orphaned JCR state and add it to a retry or cleanup queue.
122
- 2. **Outbox pattern:** write to SQL only (including a status/outbox column); a separate process reads and applies the JCR write idempotently.
123
- 3. **Accept the asymmetry:** document the inconsistency window explicitly, add a compensating cleanup path, and add monitoring to detect orphaned rows.
124
-
125
- ### Pitfall
126
-
127
- ```java
128
- repository.insertVersion(entity); // SQL committed inside Hibernate session
129
- jcrNode.setProperty("...", value); // if this fails, SQL is already committed
130
- session.save();
131
- ```
132
-
133
- A failure in the JCR write leaves the SQL committed and the JCR unchanged — silent data inconsistency. Symptoms: rows in the DB with no corresponding JCR node, or vice versa.
134
-
135
- **Finding level:** P1 — silent data inconsistency. Elevate to P0 if the inconsistency is user-visible or hard to detect.
136
-
137
- ---
138
-
139
- ## Locking and write paths
140
-
141
- ### Correct approach
142
-
143
- Document the thread-safety contract of every write path that involves locking, restoration, or multi-step state transitions:
144
- - Is the path safe to call concurrently? If not, what external lock must the caller hold?
145
- - Does the path clear existing locks? If yes, whose lock? Under what conditions is clearing safe?
146
-
147
- Before clearing a JCR lock in a write path:
148
- 1. Verify the lock is not owned by an unrelated operation (active publication job, workflow, concurrent editor).
149
- 2. If the lock is external, fail with a clear error — do not continue.
150
-
151
- ### Pitfall
152
-
153
- ```java
154
- // dangerous — clears all locks unconditionally, continues even if clearing fails
155
- JCRContentUtils.clearAllLocks(node);
156
- restoreContent(node, version);
157
- ```
158
-
159
- This pattern is dangerous in any path that is not the sole writer. A publication job in progress may have locked the node for a reason; clearing the lock and continuing the restore corrupts the publication. See also `jahia-java-jcr` locking section.
160
-
161
- **Finding level:** P0 if active in production code; P1 if guarded by a feature flag off by default — but must appear in known-limitations/next-steps regardless.
162
-
163
- ---
164
-
165
- ## Schema documentation
166
-
167
- ### Correct approach
168
-
169
- For any module that introduces relational tables, include a schema summary in `docs/` or a README section covering:
170
- - Table names and purpose.
171
- - Key column types and constraints (primary keys, foreign keys, unique constraints, indexed columns).
172
- - How SQL tables relate to JCR nodes (which JCR property or node UUID maps to which SQL column).
173
- - Any migration strategy for schema changes.
174
-
175
- ### Pitfall
176
-
177
- Undocumented tables discovered by reviewing Hibernate entity classes alone — reviewers and future maintainers cannot verify the full schema from code without running the application and inspecting the DB. This is a P2 documentation finding.
@@ -1,84 +0,0 @@
1
- ---
2
- name: jahia-java-security
3
- description: Jahia security model for Java backend development — the four protection mechanisms (Security Filter, CSRF Guard, ACLs, captcha), when each applies, and how to audit or implement each correctly. Load when implementing or reviewing any HTTP-reachable surface in a Jahia Java module.
4
- allowed-tools: Read
5
- ---
6
-
7
- # Jahia Security Model for Java Backend
8
-
9
- This skill covers how to correctly protect HTTP-reachable surfaces in a Jahia Java module. Each mechanism is described with its correct use, its limits, and the common mistakes that create vulnerabilities. Both developers and reviewers use this skill.
10
-
11
- ---
12
-
13
- ## The four protection mechanisms
14
-
15
- Every reachable surface in a Jahia module is protected by zero, one, or several of these. Map each one explicitly for any surface you implement or review.
16
-
17
- ### 1. Jahia Security Filter (API scopes)
18
-
19
- - **What:** OSGi-configurable filter that gates URL patterns by `Origin`/`Referer` and required permissions/scopes.
20
- - **Config:** YAML under `META-INF/configurations/org.jahia.modules.api.permissions-*.yaml`.
21
- - **Origin gating:** `auto_apply: - origin: hosted` ensures requests come from the same domain. Works for guests and authenticated users. Does not break CDN caching.
22
- - **Permission gating:** `grants: - api: <name>; node: <selector>` enforces a Jahia permission.
23
- - **When to use:** default protection for any module-exposed servlet or GraphQL endpoint reachable over HTTP. This is the first line of defense — apply it before considering CSRF Guard or inline checks.
24
-
25
- ### 2. CSRF Guard
26
-
27
- - **What:** Jahia-wide servlet filter injecting a token into XHR/fetch and validating it server-side.
28
- - **Critical limitation:** `jahia.csrf-guard.bypassForGuest = true` by default. CSRF Guard **does not protect guest submissions** out of the box. Enabling it for guests breaks CDN caching of public pages.
29
- - **When to use:** authenticated-only operations where you can verify the URL pattern is in the guard's `resolvedUrlPatterns` config.
30
- - **Common mistake:** assuming CSRF Guard protects a guest-reachable form. It does not — a guest submitting a public form bypasses CSRF Guard entirely.
31
-
32
- ### 3. Jahia permissions and ACLs
33
-
34
- - **What:** JCR-based ACLs + named permissions declared in `permissions.xml` or `*.cnd`.
35
- - **Enforcement:** `JCRSessionWrapper` (user session — permissions apply) vs `JCRSessionFactory.getCurrentSystemSession()` / `JCRTemplate.doExecuteWithSystemSession` (system session — permissions bypassed).
36
- - **GraphQL:** `@GraphQLField` operations should declare `@RequirePermission` annotations. An admin operation without `@RequirePermission` is a finding.
37
- - **When to use:** any operation that reads/writes JCR content with content-level access rules — jContent admin screens, content workflows, operations that respect site/node permissions.
38
- - **Audit rule:** when code uses a system session, the security boundary is whatever check happened *before* the `doExecuteWithSystemSession` call. Find that check explicitly. If there is none, the operation is anonymous-privileged — P0 for writes, P1 for reads.
39
-
40
- ### 4. Captcha and one-time tokens
41
-
42
- - **What:** non-replayable credentials tied to the rendering page.
43
- - **When to use:** defense-in-depth against bots and as partial CSRF mitigation for guest forms.
44
- - **Not a primary CSRF control.** Captcha protects a specific form when enabled, but it is not origin verification. Do not let a code path rely on captcha alone.
45
-
46
- ---
47
-
48
- ## Decision matrix
49
-
50
- For each surface you implement or review, fill this in:
51
-
52
- | Surface | Guests? | Auth users? | Side effects? | Required protection |
53
- |---|---|---|---|---|
54
- | Public form submit | Yes | Yes | Email, JCR write | Security Filter `origin: hosted` (primary) + captcha (defense-in-depth) |
55
- | Admin GraphQL query | No | Yes (with permission) | Read JCR | Security Filter `origin: hosted` + `@RequirePermission(...)` |
56
- | Admin GraphQL mutation | No | Yes (with permission) | Write JCR | Same + verify ACL when system session is used |
57
- | OSGi servlet at `/modules/...` | Depends | Depends | Depends | At minimum: `origin: hosted` |
58
- | Choicelist initializer | Indirect (editor UI) | Yes (editor) | Read config | Inherits editor auth — verify it does not leak cross-tenant data |
59
-
60
- ---
61
-
62
- ## Implementing a secure surface — checklist
63
-
64
- When adding a new servlet, GraphQL operation, or filter:
65
-
66
- 1. **Declare the Security Filter scope** in `org.jahia.modules.api.permissions-*.yaml`.
67
- 2. **Classify the surface** in the decision matrix above.
68
- 3. **If writing JCR with a system session:** document the prior permission check in a Javadoc comment on the method.
69
- 4. **If the surface is public (guest-reachable):** do not rely on CSRF Guard alone. Use `origin: hosted` + captcha if the action has side effects.
70
- 5. **If the surface is admin-only:** add `@RequirePermission` to the GraphQL field or inline `JCRTemplate` ACL check.
71
- 6. **Document the intent.** A deliberate "this endpoint is public because X" must be in a Javadoc on the class or in `docs/security.md`. An undocumented gap is a finding even if intentional — the next maintainer cannot tell intent from accident.
72
-
73
- ---
74
-
75
- ## Findings to surface during review
76
-
77
- 1. **Unprotected endpoint.** Any servlet/GraphQL operation without a Security Filter scope **and** without `@RequirePermission` **and** without an inline auth check. P0 unless explicitly documented as intentionally public.
78
- 2. **CSRF Guard guest bypass misunderstood.** Code or docs claiming CSRF Guard protects guests. P0 — foundational misunderstanding.
79
- 3. **System session without prior permission check.** P0 for writes, P1 for reads.
80
- 4. **Captcha presented as primary CSRF defense.** P1 — it is defense-in-depth, not primary.
81
- 5. **Missing `@RequirePermission` on admin GraphQL.** P0 for mutations, P1 for sensitive-data queries.
82
- 6. **Permission referenced but not declared.** A permission name used in code or config that is not declared in any module resource. P1.
83
- 7. **Email recipients from user input.** Any `to:` address derived from a submitted field without an allowlist. P1 — open relay vector.
84
- 8. **Outbound HTTP without timeouts.** `HttpClient.newHttpClient()` with no `connectTimeout` or request timeout on any external call. P0 — trivial DoS.
@@ -1,131 +0,0 @@
1
- ---
2
- name: jahia-review-java
3
- description: Reviews a Jahia Java/backend module (or PoC) across 6 passes — security, code health, build/packaging, documentation drift, tests, and consolidation. Produces a prioritised finding report with concrete next steps. Load supporting references from this skill's references/ folder on demand.
4
- allowed-tools: Bash, Read
5
- ---
6
-
7
- # Skill: jahia-review-java
8
-
9
- You are a senior Java/Jahia reviewer. Audit a Jahia Java module (OSGi, JCR, CND, Spring) or a PoC branch and produce a code review that is **actionable, prioritised, and reusable as input for the next review cycle**.
10
-
11
- ## What "good" looks like
12
-
13
- 1. **Security-first.** Every endpoint, servlet, GraphQL operation, action is mapped to its access control posture.
14
- 2. **Concise with a path forward.** Each finding names the problem, names the fix, names the effort. No hedging.
15
- 3. **No noise.** Style, formatting — out. Findings must survive "why does this matter for production?"
16
- 4. **Honest about uncertainty.** When you cannot verify a claim, say so and flag for the author.
17
- 5. **Reusable next cycle.** Output structure is stable so the next reviewer can see what was fixed, deferred, or new.
18
-
19
- ## Operating modes
20
-
21
- Detect from context. Ask once if genuinely ambiguous.
22
-
23
- | Mode | Trigger | Output |
24
- |---|---|---|
25
- | **PR review** | GitHub MCP available + PR diff in context | Inline PR comments + one summary comment with the prioritised table |
26
- | **Module audit** | Checked-out source, no PR context | Single `code-review-{module}-{YYYY-MM-DD}.md` at repo root |
27
- | **PoC review** | PR/branch explicitly described as a PoC | Surface risks, missing next steps, and unknowns — not a production readiness checklist |
28
- | **Follow-up** | A prior `code-review-*.md` exists in the repo | Update the prior doc in place — mark each finding resolved / deferred / still-open |
29
-
30
- **PoC mode distinction:** A PoC review does not expect production-grade code. Its goal is to surface every risk, weak spot, missing business logic, and open architectural question so the team can make informed decisions before committing to the implementation. Frame each finding as "next step: team decision" rather than demanding immediate fixes. The PoC owner is not expected to have all the answers.
31
-
32
- ## The review passes — execute in order
33
-
34
- ### Pass 0 — Orient (never skip)
35
-
36
- - List the source tree; identify packages by responsibility (servlets, actions, services, GraphQL, filters, OSGi components, persistence).
37
- - Read `pom.xml`, `AGENTS.md` (if present), `README.md`, all files under `docs/` and `.harness/`.
38
- - Read every CND file; note declared node types, mixins, namespace.
39
- - Identify SPI surface: `Export-Package` in `pom.xml`, public interfaces, `@ProviderType` annotations.
40
- - Note prior reviews. If one exists, switch to follow-up mode.
41
-
42
- Output of this pass stays internal — it is your map, not written to the review.
43
-
44
- ### Pass 1 — Security surface mapping
45
-
46
- For every reachable surface (servlet, JAX-RS, GraphQL query/mutation, whiteboard service, filter, choicelist initializer):
47
-
48
- 1. **Who can reach it?** Guest / authenticated / role-gated / permission-gated / internal-only.
49
- 2. **What does it do?** Read, write, side-effect (email, HTTP, file I/O), admin operation.
50
- 3. **How is access enforced?** Security Filter scope, CSRF Guard, `@RequirePermission`, inline ACL, session-based, none.
51
- 4. **Is the posture documented?** A deliberate "unprotected because X" is acceptable. An undocumented gap is a finding.
52
-
53
- Cross-reference with `/jahia-java-security` for Jahia-specific mechanisms and the full decision matrix.
54
-
55
- ### Pass 2 — Code health
56
-
57
- Walk the implementation. Look for:
58
-
59
- - **Layering violations.** Business logic in servlets. JCR access bypassing services. Presentation in the service layer.
60
- - **Oversized classes.** One class doing 5+ jobs. Each responsibility is a candidate for extraction.
61
- - **Reinvention.** Hand-rolled encoding, escaping, date parsing where `java.time`, Commons Lang, or Guava would do it.
62
- - **Overdesign.** Premature abstraction with one implementation. SPI hooks no consumer exists for. Factory+builder+strategy for a 30-line operation. Flag P3 unless it blocks understanding.
63
- - **Concurrency.** Mutable fields in `@Component` services without `volatile`. Services that are not internally thread-safe but carry no documentation of caller responsibility. Read-then-act DB patterns (`SELECT MAX` + `INSERT` without serialisation). Restore/write paths that bypass or unconditionally clear caller-set locks.
64
- - **Persistence anti-patterns.** N+1 queries. Separate tables with no attributes of their own (a correlation UUID on the row is enough). Application-managed counters instead of DB-native auto-increment. Multiple independent `Instant.now()` calls in the same logical operation (timestamp drift). Transactional asymmetry between SQL and JCR commits.
65
- - **Error handling.** Swallowed exceptions. Fail-open on infrastructure errors. Exception in a side-effect that can abort an unrelated primary operation.
66
- - **TODOs and leftovers.** `TODO`, `FIXME`, `XXX`, commented-out code. Each is a finding unless tracked in `docs/` or explicitly accepted in the PR description.
67
- - **Dead payload fields.** Fields stored in the persistence model but never read by any live code path — flag as dead storage; remove or document intent.
68
- - **Diff/delta engine gaps.** When a reverse-delta engine is present: check what entity state is NOT diffed (mixins, children, ACLs, references). Verify empty-diff short-circuits to avoid phantom versions. Verify old-value storage is actually consumed by the apply path.
69
- - **Service locator anti-pattern.** `SpringContextSingleton.getBean()` or equivalent inside a service method — prefer `@Reference`/`@Autowired` injection.
70
-
71
- Cross-reference with `/jahia-java-jcr` for JCR session, locking, mixin, and SNS pitfalls.
72
- Cross-reference with `/jahia-java-osgi` for OSGi component lifecycle, reference, and export-package pitfalls.
73
- Cross-reference with `/jahia-java-persistence` for persistence-layer anti-patterns.
74
- Cross-reference with `/jahia-java-concurrency` for thread safety — `volatile`, locking, atomics, static fields, JCR session threading.
75
-
76
- ### Pass 3 — Build, packaging, dependencies
77
-
78
- - `jahia-impl` is `<scope>provided</scope>` with all transitives excluded; each used library declared explicitly.
79
- - `Export-Package` lists only SPI surface, not implementation packages.
80
- - Embedded libraries are commented in the POM with a *why*.
81
- - If the module advertises an SPI for third parties, that SPI lives in a separate `*-api` artifact.
82
-
83
- ### Pass 4 — Documentation drift
84
-
85
- Compare every doc, harness file, and `AGENTS.md` claim against the code:
86
- - URLs, endpoints, class names, config PIDs — do they match?
87
- - "Not yet implemented" claims for code that is in fact implemented.
88
- - Known-limitations sections that omit critical risks actually present in the code.
89
- - Next-steps sections that lack coverage for risks identified in the code.
90
-
91
- In PoC mode, the known-limitations/next-steps gap is the primary documentation finding: if the code contains dangerous or incomplete patterns, those must appear in next steps — even if not yet actionable.
92
-
93
- ### Pass 5 — Tests
94
-
95
- 1. Is there a `src/test/` directory? If no, list pure-function classes (parsers, validators, calculators) as test targets.
96
- 2. For PoC mode: note which critical paths have no test coverage and which should be added before the PoC direction is validated.
97
-
98
- ### Pass 6 — Consolidate and prioritise
99
-
100
- - Collapse duplicate findings to one finding with multiple sites.
101
- - Assign severity using the four-level scale below.
102
- - Assign effort: XS (<1h), S (<half day), M (<2 days), L (more).
103
- - Sort by severity within sections. Build the prioritised summary table.
104
-
105
- ## Severity discipline
106
-
107
- | Level | When to use |
108
- |---|---|
109
- | 🔴 P0 | Active security hole, data loss, fail-open auth, broken public contract, dangerous active code (not just a PoC TODO) |
110
- | 🟠 P1 | Significant gap defensible only by accepting documented risk, silent partial failure, broken SPI promise |
111
- | 🟡 P2 | Code health that compounds over time, doc drift, missing tests for critical paths |
112
- | 🟢 P3 | Refactor opportunities, nice-to-have abstractions, minor cleanup |
113
-
114
- When in doubt, drop one level. Inflated severity loses the reader's trust.
115
-
116
- ## Output
117
-
118
- Read `references/code-review-output.md` before writing. It defines section order, finding template, and summary table schema.
119
-
120
- Two non-negotiable rules:
121
- 1. **Each finding ends with a concrete next step** — a code change, a ticket, or an explicit "accept as-is, document the tradeoff".
122
- 2. **Surface honest doubts.** When you cannot verify a claim, say so. The author would rather have an explicit unknown than a false certainty.
123
-
124
- ## What not to do
125
-
126
- - Do not lecture. The reader is a senior engineer.
127
- - Do not flag stylistic preferences unless they map to a configured Checkstyle/PMD rule that would fail CI.
128
- - Do not invent line numbers. Use `ClassName#methodName` as anchors.
129
- - Do not pad. If a section has no findings, write "No findings."
130
- - Do not split one problem into multiple findings to make the review look thorough.
131
- - In PoC mode: do not demand answers the PoC owner cannot yet have. Frame open questions as "next step: team decision" or "add a story".
@@ -1,121 +0,0 @@
1
- # Skill: Code Review Output Format
2
-
3
- Load this skill before writing the review output. It defines the section order, finding template, and summary table schema.
4
-
5
- ## When to load
6
-
7
- Always, just before writing the deliverable. Do not load during analysis passes.
8
-
9
- ## Output mode selection
10
-
11
- Detect from context:
12
-
13
- | Signal | Mode |
14
- |---|---|
15
- | GitHub MCP tools available + a PR number in context | **PR mode**: inline comments + one summary comment |
16
- | Local filesystem only, module checked out, no PR | **File mode**: single markdown at repo root |
17
- | A prior `code-review-*.md` exists in the repo | **Follow-up mode**: see `skills/review-followup/SKILL.md` |
18
-
19
- When unclear, default to **File mode**.
20
-
21
- ## File naming (File mode)
22
-
23
- `code-review-{module-name}-{YYYY-MM-DD}.md` at the module root. The module name comes from `pom.xml` `<artifactId>`.
24
-
25
- If a review already exists for the same date, append `-v2`, `-v3`, etc. Do not overwrite without explicit instruction.
26
-
27
- ## Section order (mandatory)
28
-
29
- ```
30
- # Code review — {module-name} (backend|frontend|fullstack)
31
-
32
- - Date: YYYY-MM-DD
33
- - Scope: {one line — what was reviewed, what was not}
34
- - Out of scope: {one line — explicit exclusions}
35
-
36
- {One short paragraph: overall posture. Lead with what is right; the findings list is for what is wrong. Do not pad.}
37
-
38
- ## 1. Security
39
- ## 2. API and backend design
40
- ## 3. Bugs and rough edges
41
- ## 4. Documentation and harness drift
42
- ## 5. Build, Maven, and OSGi packaging
43
- ## 6. OSGi and concurrency
44
- ## 7. Tests
45
- ## {N}. Prioritised summary
46
- ## {N+1}. Closing note
47
- ```
48
-
49
- Omit sections with no findings — write "No findings." inline only if the absence itself is worth noting (e.g. "No concurrency findings — all `@Component` services are stateless.").
50
-
51
- The Closing note is one paragraph. It names the single biggest risk and the single biggest strength. No bullet lists.
52
-
53
- ## Finding template
54
-
55
- Each finding has the same shape:
56
-
57
- ```markdown
58
- ### {N.M} {Short title} — {severity emoji} P{0|1|2|3}
59
-
60
- {One sentence: the problem.}
61
-
62
- {2-6 sentences: why it matters, where it manifests, what triggers it. Code snippet if it clarifies in fewer words than prose.}
63
-
64
- **Fix:** {Concrete action. Library name + method, or class change, or "accept and document".}
65
-
66
- **Effort:** {XS | S | M | L}
67
- ```
68
-
69
- Rules:
70
-
71
- - **Severity emoji + level** in the heading. Never one without the other.
72
- - **The problem in one sentence.** If you need a paragraph, you have not understood it yet.
73
- - **Code snippets are quoted, not paraphrased.** If the bug is in three lines of code, show those three lines.
74
- - **The Fix line is mandatory.** No exceptions. If there is no fix, the finding is "accept and document" — say so explicitly.
75
- - **Effort is mandatory.** Authors prioritise by effort × severity. Without effort, the table is half-useless.
76
-
77
- ## Anchors
78
-
79
- Use `ClassName#methodName` as the anchor for code references. Line numbers go stale; method names survive refactors. When a finding spans multiple files, list them under "Affected sites" inline.
80
-
81
- ## Severity rules
82
-
83
- See the parent `AGENTS.md` severity table. One reminder: **the prioritised summary table is your honesty check**. If P0 has more than 5 items, you have inflated severity. Re-evaluate.
84
-
85
- ## Prioritised summary table
86
-
87
- The penultimate section. Schema:
88
-
89
- | Priority | Item | Effort |
90
- |---|---|---|
91
- | 🔴 P0 | {one-line description with §X.Y backref} | XS/S/M/L |
92
- | ... |
93
-
94
- Sort by priority, then by section number. P3 items can be grouped if numerous.
95
-
96
- The backref (`§X.Y`) is mandatory — the reader uses the table as an index into the full findings.
97
-
98
- ## PR mode specifics
99
-
100
- When posting to a PR:
101
-
102
- - **Inline comments** for findings that point to a specific file/line span. Use the same finding template, condensed.
103
- - **One summary comment** at the PR level containing:
104
- - The opening paragraph (overall posture).
105
- - The prioritised summary table.
106
- - Links to the inline comments via their permalinks.
107
- - **No giant markdown dump in the summary comment.** Inline comments carry the body of each finding.
108
-
109
- If a finding cannot be anchored to a line (e.g. "the module has no tests"), it goes only in the summary comment.
110
-
111
- ## Follow-up mode handoff
112
-
113
- If a prior review exists, hand off to `skills/review-followup/SKILL.md`. Do not write a fresh review.
114
-
115
- ## What not to do
116
-
117
- - Do not number findings across the whole document (e.g. "Finding 47"). Number within sections: §1.1, §1.2, §3.1.
118
- - Do not split a finding into a "problem" finding and a "fix" finding. One finding = one problem + its fix.
119
- - Do not write a "tl;dr" at the top. The opening paragraph is the tl;dr.
120
- - Do not include process meta-commentary in the output ("During Pass 2 I noticed..."). The doc is for the author, not a log of your work.
121
- - Do not write recommendations the author cannot act on alone. If a fix requires a product decision, name the decision; do not pretend it is purely technical.
@@ -1,144 +0,0 @@
1
- ---
2
- name: jahia
3
- description: Top-level entry point for ALL Jahia tasks. Detects whether the request is about building a module (dev) or managing content (CMS via MCP tools), and delegates to the right skill or combination. Start here if unsure which Jahia skill to use.
4
- ---
5
-
6
- # Jahia — Universal Entry Point
7
-
8
- You are the top-level GPS for all Jahia work. Your job is to understand what the user wants to accomplish, then delegate to the right skill(s) — `/jahia-dev`, `/jahia-content`, or both in sequence.
9
-
10
- > **Content operations use MCP tools** via the `jahia` MCP server. Never call Jahia's GraphQL API directly for content creation, querying, or structure discovery — use the MCP tools instead.
11
-
12
- ---
13
-
14
- ## Step 1 — Classify the request
15
-
16
- Read the user's request and classify it using the table below. A task can span multiple categories.
17
-
18
- | Category | Keywords / intent | Skill |
19
- |----------|-------------------|-------|
20
- | **Module development** | create module, scaffold, content type, CND, view, React, TSX, page template, CSS, build, deploy, compile | `/jahia-dev` |
21
- | **Personalization / analytics** | jExperience, jCustomer, window.wem, visitor events, Kibana dashboard, personalization, DXP | `/jahia-dev-jexperience` |
22
- | **Content management** | create content, add article, populate, move, reorganize, publish, query what's in the CMS | `/jahia-content` |
23
- | **OSGi / back-office** | Java bundle, OSGi service, jcontent action, admin panel, toolbar button, Webpack, Module Federation | `/jahia-dev-osgi-module` or `/jahia-dev-ui-extension` |
24
- | **E2E testing** | Cypress, test spec, edit mode, component interaction, publish workflow | `/jahia-dev-cypress` |
25
- | **Java module reference** | OSGi DS, CND definitions, JSP rendering, Drools rules, JCR SQL2, Content Editor JSON, component registry | `/jahia-dev-java` |
26
- | **API reference** | GraphQL schema, JCR Java/REST API, OAuth/SAML auth, personal tokens, HTML filtering, CSP, security scopes | `/jahia-dev-apis` |
27
- | **Operations / DevOps** | Docker Compose, Kubernetes, health endpoints, logs, Karaf, provisioning YAML scripts | `/jahia-dev-ops` |
28
- | **Configuration reference** | jahia.properties keys, cluster setup, operating mode, auth settings, JCR/search tuning | `/jahia-dev-properties` |
29
- | **Both** | build a component AND fill it with content, design a section AND add pages to it, set up a site end-to-end | Run `/jahia-dev` first, then `/jahia-content` |
30
-
31
- If the request is ambiguous, ask one clarifying question:
32
- > "Are you building or changing **code** (module, views, templates) — or managing **content** (articles, pages, folders) inside a running Jahia site?"
33
-
34
- ---
35
-
36
- ## Step 2 — Run the right GPS(es)
37
-
38
- ### Dev only → invoke `/jahia-dev`
39
- `/jahia-dev` will detect the project state and route to the correct dev sub-skill.
40
-
41
- ### CMS only → invoke `/jahia-content`
42
- `/jahia-content` will check the live site and route to the right content management sub-skill.
43
-
44
- ### Both → run in order
45
-
46
- When a task requires code changes **and** content changes, always execute in this order:
47
-
48
- ```
49
- 1. /jahia-dev ← build/update the module code
50
- 2. yarn build && yarn jahia-deploy ← push the updated module to Jahia (never use yarn dev)
51
- 3. /jahia-content ← populate or reorganize content
52
- ```
53
-
54
- Rationale: content types must exist in the CMS before you can create nodes of those types.
55
-
56
- ---
57
-
58
- ## Step 3 — Common compound workflows
59
-
60
- Use these recipes as starting points when the task maps to a known pattern.
61
-
62
- ### "Build a new section on the site"
63
- ```
64
- 1. /jahia-dev-build-component → define the content type + create the view
65
- 2. /jahia-dev-create-page-template → (if a new page layout is needed)
66
- 3. /jahia-content-create-content → create the site if needed, then populate the section with content
67
- 4. /jahia-content-organize → (if existing content needs to be reorganized)
68
- ```
69
-
70
- ### "Add an article to the site"
71
- ```
72
- 1. Check the CND — does the article content type exist?
73
- → Yes: jump to step 2
74
- → No: /jahia-dev-define-content-type + /jahia-dev-create-view first
75
- 2. /jahia-content-create-content → create the article node + set properties
76
- 3. /jahia-content-publish → publish it to LIVE
77
- ```
78
-
79
- ### "Redesign the layout of a page"
80
- ```
81
- 1. /jahia-dev-screenshot → capture current state for before/after comparison
82
- 2. /jahia-dev-create-view → update the view / CSS
83
- 3. yarn build && yarn jahia-deploy → push changes (never use yarn dev)
84
- 4. /jahia-dev-screenshot → validate the result
85
- ```
86
-
87
- ### "Set up a new site from scratch"
88
- ```
89
- 1. /jahia-dev-create-template-set → scaffold the module
90
- 2. /jahia-dev-start-local → start Jahia locally
91
- 3. /jahia-dev-build-component → build content types + views (repeat per component)
92
- 4. /jahia-dev-create-page-template → create page templates
93
- 5. /jahia-content-create-content → use `site.templateSets` + `site.create`, then add pages and content
94
- 6. /jahia-content-publish → publish the site content
95
- 7. /jahia-dev-review → catch issues before shipping
96
- ```
97
-
98
- ---
99
-
100
- ## Step 4 — Print the full skill map
101
-
102
- Always print this at the end so the user can jump anywhere:
103
-
104
- ```
105
- ## All Jahia Skills
106
-
107
- ### 🏗 Development (/jahia-dev and sub-skills)
108
- /jahia-dev Detect project state, guide to next step ← start here
109
- /jahia-dev-create-template-set Scaffold a new JS/React Jahia module
110
- /jahia-dev-start-local Start Jahia locally (Docker or bare metal)
111
- /jahia-dev-build-component Build a complete component (CND + view) ← shortcut
112
- /jahia-dev-define-content-type Define a CND content type + types.ts
113
- /jahia-dev-create-view Implement a React view (.server.tsx + CSS Module)
114
- /jahia-dev-create-page-template Create a page template with Areas
115
- /jahia-dev-query-content Write JCR-SQL2 / useJCRQuery for content listings
116
- /jahia-dev-review Code review: 8 critical checks, 9 warnings, 10 suggestions
117
- /jahia-dev-screenshot Screenshot reference + local render for visual comparison
118
- /jahia-dev-debug Debug build/deploy/runtime errors end-to-end
119
- /jahia-dev-cypress Write Cypress E2E tests for Jahia components
120
- /jahia-dev-import-from Implement a component inspired by one on an external URL
121
- /jahia-dev-jexperience jExperience + jCustomer: push events, Kibana dashboards, local DXP stack
122
-
123
- ### ⚙️ OSGi / Back-office extensions
124
- /jahia-dev-osgi-module Build or configure an OSGi Java bundle module
125
- /jahia-dev-ui-extension Extend jcontent back-office with React 18/Webpack actions or panels
126
-
127
- ### 📝 Content Management (/jahia-content and sub-skills)
128
- /jahia-content Detect site state, route to content operations ← start here
129
- /jahia-content-explore-structure Map content types, properties, enums & mixins on an unknown site
130
- /jahia-content-query-content Query and audit content via MCP tools
131
- /jahia-content-create-content Create sites, pages, nodes, folders, and articles
132
- /jahia-content-media-upload Upload files and images into Jahia media storage
133
- /jahia-content-organize Restructure the tree: move, copy, rename, reorder, delete
134
- /jahia-content-move-content Focused move/reorder/delete workflow for an existing branch
135
- /jahia-content-translate-content Translate i18n content and page titles
136
- /jahia-content-publish Publish, unpublish, and inspect publication status
137
- ### 📚 Knowledge Reference
138
- /jahia-dev-java OSGi DS, CND definitions, JSP rendering, Drools rules, Content Editor/jContent UI
139
- /jahia-jcr-sql2 JCR-SQL2 syntax, filtering, full-text, joins, and pagination guardrails
140
- /jahia-dev-apis GraphQL, JCR Java/REST API, OAuth/SAML, personal tokens, HTML filtering, CSP
141
- /jahia-dev-ops Docker Compose, Kubernetes, health monitoring, Karaf, provisioning YAML API
142
- /jahia-dev-properties jahia.properties and OSGi .cfg configuration keys reference
143
- ```
144
-