@atlashub/smartstack-cli 4.80.0 → 5.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 (1008) hide show
  1. package/.documentation/agents.html +124 -585
  2. package/.documentation/ba-develop.html +852 -0
  3. package/.documentation/ba-skills.html +465 -0
  4. package/.documentation/business-analyse.html +385 -1570
  5. package/.documentation/cli-commands.html +162 -799
  6. package/.documentation/commands.html +902 -1338
  7. package/.documentation/css/styles.css +34 -1
  8. package/.documentation/efcore.html +161 -2599
  9. package/.documentation/gitflow.html +62 -105
  10. package/.documentation/hooks.html +94 -343
  11. package/.documentation/index.html +116 -385
  12. package/.documentation/init.html +217 -1566
  13. package/.documentation/installation.html +121 -1470
  14. package/.documentation/license.html +90 -450
  15. package/.documentation/ralph-loop.html +105 -602
  16. package/dist/index.js +9421 -79036
  17. package/dist/index.js.map +1 -1
  18. package/package.json +5 -20
  19. package/scripts/generate-docs/README.md +87 -0
  20. package/scripts/generate-docs/index.ts +175 -0
  21. package/scripts/generate-docs/lib/context-builder.ts +81 -0
  22. package/scripts/generate-docs/lib/handlebars-setup.ts +162 -0
  23. package/scripts/generate-docs/lib/markdown-parser.ts +86 -0
  24. package/scripts/generate-docs/lib/sidebar-builder.ts +80 -0
  25. package/scripts/generate-docs/lib/skill-parser.ts +171 -0
  26. package/scripts/generate-docs/lib/stats.ts +32 -0
  27. package/scripts/generate-docs/lib/version.ts +17 -0
  28. package/scripts/generate-docs/templates/layout.hbs +33 -0
  29. package/scripts/generate-docs/templates/pages/_generic.hbs +12 -0
  30. package/scripts/generate-docs/templates/pages/ba-develop.hbs +10 -0
  31. package/scripts/generate-docs/templates/pages/ba-skills.hbs +8 -0
  32. package/scripts/generate-docs/templates/pages/business-analyse.hbs +1 -0
  33. package/scripts/generate-docs/templates/pages/commands.hbs +13 -0
  34. package/scripts/generate-docs/templates/pages/gitflow.hbs +2164 -0
  35. package/scripts/generate-docs/templates/pages/index.hbs +5 -0
  36. package/scripts/generate-docs/templates/partials/breadcrumb.hbs +6 -0
  37. package/scripts/generate-docs/templates/partials/header.hbs +22 -0
  38. package/scripts/generate-docs/templates/partials/sidebar.hbs +32 -0
  39. package/scripts/generate-docs/templates/partials/skill-card.hbs +22 -0
  40. package/scripts/generate-docs/templates/partials/skill-grid.hbs +5 -0
  41. package/scripts/generate-docs/templates/partials/skill-table.hbs +18 -0
  42. package/scripts/generate-docs/templates/partials/stats-bar.hbs +20 -0
  43. package/scripts/test-migration-program-cs.mts +94 -0
  44. package/templates/agents/explore-codebase.md +2 -3
  45. package/templates/agents/explore-docs.md +5 -5
  46. package/templates/hooks/hooks.json +0 -9
  47. package/templates/project/Program.cs.template +17 -5
  48. package/templates/project/appsettings.json.template +208 -195
  49. package/templates/project/claude-md/api.CLAUDE.md.template +27 -2
  50. package/templates/project/patch-smartstack-theme.cjs.template +42 -0
  51. package/templates/scripts/statusline/README.md +47 -0
  52. package/templates/scripts/statusline/index.js +224 -0
  53. package/templates/skills/CLAUDE.md +235 -0
  54. package/templates/skills/ba-develop/SKILL.md +310 -0
  55. package/templates/skills/ba-develop/cli/compute-page-diff/__tests__/compute-page-diff.test.ts +177 -0
  56. package/templates/skills/ba-develop/cli/compute-page-diff/compute-diff.ts +51 -0
  57. package/templates/skills/ba-develop/cli/compute-page-diff/disk-drift.ts +55 -0
  58. package/templates/skills/ba-develop/cli/compute-page-diff/index.ts +89 -0
  59. package/templates/skills/ba-develop/cli/compute-page-diff/scan-pagespecs.ts +115 -0
  60. package/templates/skills/ba-develop/cli/compute-page-diff/types.ts +63 -0
  61. package/templates/skills/ba-develop/cli/compute-page-diff/validate.ts +20 -0
  62. package/templates/skills/ba-develop/cli/update-snapshot/__tests__/update-snapshot.test.ts +73 -0
  63. package/templates/skills/ba-develop/cli/update-snapshot/execute.ts +24 -0
  64. package/templates/skills/ba-develop/cli/update-snapshot/index.ts +61 -0
  65. package/templates/skills/ba-develop/cli/update-snapshot/types.ts +40 -0
  66. package/templates/skills/ba-develop/cli/update-snapshot/validate.ts +17 -0
  67. package/templates/skills/ba-develop/references/anti-patterns.md +101 -0
  68. package/templates/skills/ba-develop/references/auto-healing.md +191 -0
  69. package/templates/skills/ba-develop/references/commit-checkpoints.md +79 -0
  70. package/templates/skills/ba-develop/references/gates.md +380 -0
  71. package/templates/skills/ba-develop/references/output-contract.md +95 -0
  72. package/templates/skills/ba-develop/references/phases-detail.md +592 -0
  73. package/templates/skills/ba-develop-plan/SKILL.md +239 -0
  74. package/templates/skills/ba-develop-plan/cli/preflight-develop-plan/__tests__/validate.test.ts +225 -0
  75. package/templates/skills/ba-develop-plan/cli/preflight-develop-plan/index.ts +102 -0
  76. package/templates/skills/ba-develop-plan/cli/preflight-develop-plan/types.ts +121 -0
  77. package/templates/skills/ba-develop-plan/cli/preflight-develop-plan/validate.ts +261 -0
  78. package/templates/skills/business-analyse/_workflow/README.md +34 -0
  79. package/templates/skills/business-analyse/_workflow/ba-files.md +174 -0
  80. package/templates/skills/business-analyse/_workflow/code-discipline.md +104 -0
  81. package/templates/skills/business-analyse/_workflow/communication.md +63 -0
  82. package/templates/skills/business-analyse/_workflow/completeAuto-discipline.md +79 -0
  83. package/templates/skills/business-analyse/_workflow/context-documents.md +45 -0
  84. package/templates/skills/business-analyse/_workflow/doc-templates.md +318 -0
  85. package/templates/skills/business-analyse/audit-actors/SKILL.md +97 -0
  86. package/templates/skills/business-analyse/audit-cross-dimension/SKILL.md +127 -0
  87. package/templates/skills/business-analyse/audit-cross-ref-code/SKILL.md +119 -0
  88. package/templates/skills/business-analyse/audit-data-model/SKILL.md +343 -0
  89. package/templates/skills/business-analyse/audit-menu/SKILL.md +97 -0
  90. package/templates/skills/business-analyse/audit-prd/SKILL.md +479 -0
  91. package/templates/skills/business-analyse/audit-pre-dev/SKILL.md +135 -0
  92. package/templates/skills/business-analyse/audit-rbac/SKILL.md +93 -0
  93. package/templates/skills/business-analyse/audit-rules/SKILL.md +182 -0
  94. package/templates/skills/business-analyse/audit-screens/SKILL.md +169 -0
  95. package/templates/skills/business-analyse/audit-sections/SKILL.md +174 -0
  96. package/templates/skills/business-analyse/audit-use-cases/SKILL.md +245 -0
  97. package/templates/skills/business-analyse/create-actors/SKILL.md +129 -0
  98. package/templates/skills/business-analyse/create-ba-order/SKILL.md +182 -0
  99. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/__tests__/generate.test.ts +151 -0
  100. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/__tests__/graph.test.ts +173 -0
  101. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/generate.ts +273 -0
  102. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/graph.ts +193 -0
  103. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/index.ts +108 -0
  104. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/types.ts +106 -0
  105. package/templates/skills/business-analyse/create-ba-order/cli/create-ba-order/validate.ts +79 -0
  106. package/templates/skills/business-analyse/create-business-rules/SKILL.md +302 -0
  107. package/templates/skills/business-analyse/create-business-rules/levels/access-rules.md +105 -0
  108. package/templates/skills/business-analyse/create-business-rules/levels/elaborate.md +193 -0
  109. package/templates/skills/business-analyse/create-business-rules/levels/identify.md +157 -0
  110. package/templates/skills/business-analyse/create-business-rules/levels/link.md +86 -0
  111. package/templates/skills/business-analyse/create-data-model/SKILL.md +319 -0
  112. package/templates/skills/business-analyse/create-data-model/levels/attributes.md +130 -0
  113. package/templates/skills/business-analyse/create-data-model/levels/identify.md +100 -0
  114. package/templates/skills/business-analyse/create-data-model/levels/relationships.md +97 -0
  115. package/templates/skills/business-analyse/create-menu/SKILL.md +191 -0
  116. package/templates/skills/business-analyse/create-menu/levels/applications.md +85 -0
  117. package/templates/skills/business-analyse/create-menu/levels/modules.md +81 -0
  118. package/templates/skills/business-analyse/create-menu/levels/resources.md +75 -0
  119. package/templates/skills/business-analyse/create-menu/levels/sections.md +82 -0
  120. package/templates/skills/business-analyse/create-plan-development/SKILL.md +93 -0
  121. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/__tests__/graph.test.ts +271 -0
  122. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/__tests__/parse.test.ts +177 -0
  123. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/generate.ts +317 -0
  124. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/graph.ts +233 -0
  125. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/index.ts +106 -0
  126. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/parse.ts +346 -0
  127. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/types.ts +160 -0
  128. package/templates/skills/business-analyse/create-plan-development/cli/create-plan-development/validate.ts +118 -0
  129. package/templates/skills/business-analyse/create-prd/SKILL.md +228 -0
  130. package/templates/skills/business-analyse/create-rbac/SKILL.md +255 -0
  131. package/templates/skills/business-analyse/create-rbac/levels/detail.md +86 -0
  132. package/templates/skills/business-analyse/create-rbac/levels/discovery.md +63 -0
  133. package/templates/skills/business-analyse/create-rbac/levels/review.md +66 -0
  134. package/templates/skills/business-analyse/create-screen/SKILL.md +386 -0
  135. package/templates/skills/business-analyse/create-screen/levels/dashboard-screens.md +94 -0
  136. package/templates/skills/business-analyse/create-screen/levels/form-screens.md +142 -0
  137. package/templates/skills/business-analyse/create-screen/levels/home-screens.md +151 -0
  138. package/templates/skills/business-analyse/create-screen/levels/kanban-screens.md +86 -0
  139. package/templates/skills/business-analyse/create-screen/levels/list-screens.md +134 -0
  140. package/templates/skills/business-analyse/create-screen/references/post-check.md +101 -0
  141. package/templates/skills/business-analyse/create-screen/references/react-templates.md +252 -0
  142. package/templates/skills/business-analyse/create-screen/references/smartcomponents.md +419 -0
  143. package/templates/skills/business-analyse/create-screen/references/type-mapping.md +150 -0
  144. package/templates/skills/business-analyse/create-use-case/SKILL.md +347 -0
  145. package/templates/skills/business-analyse/create-use-case/levels/detail.md +136 -0
  146. package/templates/skills/business-analyse/create-use-case/levels/discovery.md +110 -0
  147. package/templates/skills/business-analyse/loop/SKILL.md +401 -0
  148. package/templates/skills/business-analyse/modeling-detail/SKILL.md +241 -0
  149. package/templates/skills/business-analyse/modeling-inventory/SKILL.md +174 -0
  150. package/templates/skills/business-analyse/reconcile-menu/SKILL.md +180 -0
  151. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/__tests__/clean.test.ts +266 -0
  152. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/__tests__/detect.test.ts +231 -0
  153. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/__tests__/scan.test.ts +154 -0
  154. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/clean.ts +319 -0
  155. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/detect.ts +256 -0
  156. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/index.ts +126 -0
  157. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/scan.ts +175 -0
  158. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/types.ts +136 -0
  159. package/templates/skills/business-analyse/reconcile-menu/cli/reconcile-menu/validate.ts +32 -0
  160. package/templates/skills/check-version/SKILL.md +196 -196
  161. package/templates/skills/cli-app-sync/SKILL.md +9 -9
  162. package/templates/skills/cli-app-sync/references/comparison-map.md +4 -4
  163. package/templates/skills/cli-app-sync/references/diff-entities.md +6 -6
  164. package/templates/skills/conventions/SKILL.md +64 -0
  165. package/templates/skills/dev-start/SKILL.md +190 -237
  166. package/templates/skills/development/SKILL.md +87 -0
  167. package/templates/skills/development/audit/SKILL.md +156 -0
  168. package/templates/skills/development/audit/routing-dynamic/SKILL.md +196 -0
  169. package/templates/skills/development/audit-dev-api/SKILL.md +331 -0
  170. package/templates/skills/development/audit-dev-api/cli/audit-dev-api/__tests__/end-to-end.test.ts +364 -0
  171. package/templates/skills/development/audit-dev-api/cli/audit-dev-api/audit.ts +646 -0
  172. package/templates/skills/development/audit-dev-api/cli/audit-dev-api/index.ts +140 -0
  173. package/templates/skills/development/audit-dev-api/cli/audit-dev-api/types.ts +158 -0
  174. package/templates/skills/development/audit-dev-api/cli/audit-dev-api/validate.ts +45 -0
  175. package/templates/skills/development/audit-dev-core/SKILL.md +182 -0
  176. package/templates/skills/development/audit-dev-data/SKILL.md +195 -0
  177. package/templates/skills/development/audit-dev-domain/SKILL.md +184 -0
  178. package/templates/skills/development/audit-dev-frontend/SKILL.md +530 -0
  179. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/__tests__/end-to-end.test.ts +202 -0
  180. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/apply.ts +31 -0
  181. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/audit.ts +734 -0
  182. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/index.ts +125 -0
  183. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/types.ts +165 -0
  184. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-actions-alignment/validate.ts +36 -0
  185. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/__tests__/dev-ui-022.test.ts +193 -0
  186. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/apply.ts +374 -0
  187. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/audit.ts +1126 -0
  188. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/index.ts +141 -0
  189. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/types.ts +218 -0
  190. package/templates/skills/development/audit-dev-frontend/cli/audit-dev-frontend/validate.ts +80 -0
  191. package/templates/skills/development/audit-dev-tests/SKILL.md +82 -0
  192. package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/__tests__/audit.test.ts +220 -0
  193. package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/audit.ts +185 -0
  194. package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/index.ts +84 -0
  195. package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/types.ts +48 -0
  196. package/templates/skills/development/audit-dev-tests/cli/audit-dev-tests/validate.ts +36 -0
  197. package/templates/skills/development/audit-dev-wire/SKILL.md +144 -0
  198. package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/__tests__/audit.test.ts +171 -0
  199. package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/audit.ts +307 -0
  200. package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/index.ts +139 -0
  201. package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/types.ts +110 -0
  202. package/templates/skills/development/audit-dev-wire/cli/audit-dev-wire/validate.ts +16 -0
  203. package/templates/skills/development/backend/business-layer/SKILL.md +255 -0
  204. package/templates/skills/development/backend/business-layer/cli/scaffold-business/__tests__/generate.test.ts +254 -0
  205. package/templates/skills/development/backend/business-layer/cli/scaffold-business/generate.ts +842 -0
  206. package/templates/skills/development/backend/business-layer/cli/scaffold-business/index.ts +56 -0
  207. package/templates/skills/development/backend/business-layer/cli/scaffold-business/types.ts +112 -0
  208. package/templates/skills/development/backend/business-layer/cli/scaffold-business/validate.ts +24 -0
  209. package/templates/skills/development/backend/controller/SKILL.md +154 -0
  210. package/templates/skills/development/backend/controller/cli/scaffold-controller/__tests__/generate.test.ts +345 -0
  211. package/templates/skills/development/backend/controller/cli/scaffold-controller/generate.ts +280 -0
  212. package/templates/skills/development/backend/controller/cli/scaffold-controller/index.ts +49 -0
  213. package/templates/skills/development/backend/controller/cli/scaffold-controller/types.ts +72 -0
  214. package/templates/skills/development/backend/controller/cli/scaffold-controller/validate.ts +14 -0
  215. package/templates/skills/development/backend/core-seed/SKILL.md +177 -0
  216. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/__tests__/build-spec.test.ts +163 -0
  217. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/__tests__/generate.test.ts +330 -0
  218. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/__tests__/validate.test.ts +126 -0
  219. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/build-spec.ts +287 -0
  220. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/generate.ts +826 -0
  221. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/index.ts +188 -0
  222. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/types.ts +163 -0
  223. package/templates/skills/development/backend/core-seed/cli/scaffold-core-seed/validate.ts +129 -0
  224. package/templates/skills/development/backend/data-layer/SKILL.md +163 -0
  225. package/templates/skills/development/backend/data-layer/cli/scaffold-entity/__tests__/generate.test.ts +155 -0
  226. package/templates/skills/development/backend/data-layer/cli/scaffold-entity/generate.ts +232 -0
  227. package/templates/skills/development/backend/data-layer/cli/scaffold-entity/index.ts +34 -0
  228. package/templates/skills/development/backend/data-layer/cli/scaffold-entity/types.ts +60 -0
  229. package/templates/skills/development/backend/data-layer/cli/scaffold-entity/validate.ts +42 -0
  230. package/templates/skills/development/backend/data-layer/cli/scaffold-migration/execute.ts +13 -0
  231. package/templates/skills/development/backend/data-layer/cli/scaffold-migration/index.ts +25 -0
  232. package/templates/skills/development/backend/data-layer/cli/scaffold-migration/types.ts +11 -0
  233. package/templates/skills/development/backend/data-layer/cli/scaffold-migration/validate.ts +9 -0
  234. package/templates/skills/development/backend/screen-controller/SKILL.md +169 -0
  235. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/__tests__/generate.test.ts +329 -0
  236. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/__tests__/hub-views.test.ts +105 -0
  237. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/__tests__/parse-pagespec.test.ts +137 -0
  238. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/generate.ts +437 -0
  239. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/index.ts +108 -0
  240. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/parse-pagespec.ts +104 -0
  241. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/types.ts +101 -0
  242. package/templates/skills/development/backend/screen-controller/cli/scaffold-screen-controller/validate.ts +26 -0
  243. package/templates/skills/development/backend/seed-data/SKILL.md +91 -0
  244. package/templates/skills/development/backend/seed-data/cli/scaffold-seed/generate.ts +471 -0
  245. package/templates/skills/development/backend/seed-data/cli/scaffold-seed/index.ts +74 -0
  246. package/templates/skills/development/backend/seed-data/cli/scaffold-seed/types.ts +104 -0
  247. package/templates/skills/development/backend/seed-data/cli/scaffold-seed/validate.ts +63 -0
  248. package/templates/skills/development/backend/structure/SKILL.md +47 -0
  249. package/templates/skills/development/debug/SKILL.md +62 -0
  250. package/templates/skills/development/debug/audit-bug/SKILL.md +185 -0
  251. package/templates/skills/development/debug/backend/SKILL.md +114 -0
  252. package/templates/skills/development/debug/discuss-bug/SKILL.md +193 -0
  253. package/templates/skills/development/debug/fix-bug/SKILL.md +172 -0
  254. package/templates/skills/development/debug/frontend/SKILL.md +215 -0
  255. package/templates/skills/development/frontend/api-client/SKILL.md +158 -0
  256. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/__tests__/generate.test.ts +1180 -0
  257. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/__tests__/screen-strata-contract.test.ts +261 -0
  258. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/__tests__/url-parity.test.ts +201 -0
  259. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/generate.ts +875 -0
  260. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/index.ts +36 -0
  261. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/types.ts +251 -0
  262. package/templates/skills/development/frontend/api-client/cli/scaffold-api-client/validate.ts +10 -0
  263. package/templates/skills/development/frontend/auth/SKILL.md +77 -0
  264. package/templates/skills/development/frontend/auth/cli/scaffold-frontend-auth/generate.ts +306 -0
  265. package/templates/skills/development/frontend/auth/cli/scaffold-frontend-auth/index.ts +179 -0
  266. package/templates/skills/development/frontend/auth/cli/scaffold-frontend-auth/types.ts +22 -0
  267. package/templates/skills/development/frontend/auth/cli/scaffold-frontend-auth/validate.ts +37 -0
  268. package/templates/skills/development/frontend/component/SKILL.md +347 -0
  269. package/templates/skills/development/frontend/component/cli/scaffold-component/__tests__/generate.test.ts +1237 -0
  270. package/templates/skills/development/frontend/component/cli/scaffold-component/generate.ts +1923 -0
  271. package/templates/skills/development/frontend/component/cli/scaffold-component/index.ts +155 -0
  272. package/templates/skills/development/frontend/component/cli/scaffold-component/types.ts +290 -0
  273. package/templates/skills/development/frontend/component/cli/scaffold-component/validate.ts +16 -0
  274. package/templates/skills/development/frontend/component/cli/validate-page/__tests__/execute.test.ts +231 -0
  275. package/templates/skills/development/frontend/component/cli/validate-page/execute.ts +598 -0
  276. package/templates/skills/development/frontend/component/cli/validate-page/index.ts +88 -0
  277. package/templates/skills/development/frontend/component/cli/validate-page/types.ts +58 -0
  278. package/templates/skills/development/frontend/component/cli/validate-page/validate.ts +28 -0
  279. package/templates/skills/development/frontend/component/patterns/README.md +42 -0
  280. package/templates/skills/development/frontend/component/patterns/detail-page.md +133 -0
  281. package/templates/skills/development/frontend/component/patterns/entity-card.md +148 -0
  282. package/templates/skills/development/frontend/component/patterns/form-page.md +191 -0
  283. package/templates/skills/development/frontend/component/patterns/kanban-board.md +195 -0
  284. package/templates/skills/development/frontend/component/patterns/list-page.md +175 -0
  285. package/templates/skills/development/frontend/extension-config/SKILL.md +108 -0
  286. package/templates/skills/development/frontend/extension-config/cli/scaffold-extension-config/generate.ts +64 -0
  287. package/templates/skills/development/frontend/extension-config/cli/scaffold-extension-config/index.ts +70 -0
  288. package/templates/skills/development/frontend/extension-config/cli/scaffold-extension-config/types.ts +27 -0
  289. package/templates/skills/development/frontend/extension-config/cli/scaffold-extension-config/validate.ts +16 -0
  290. package/templates/skills/development/frontend/layout/SKILL.md +52 -0
  291. package/templates/skills/development/frontend/layout/cli/scaffold-layout/__tests__/generate.test.ts +66 -0
  292. package/templates/skills/development/frontend/layout/cli/scaffold-layout/generate.ts +175 -0
  293. package/templates/skills/development/frontend/layout/cli/scaffold-layout/index.ts +104 -0
  294. package/templates/skills/development/frontend/layout/cli/scaffold-layout/types.ts +17 -0
  295. package/templates/skills/development/frontend/layout/cli/scaffold-layout/validate.ts +37 -0
  296. package/templates/skills/development/frontend/routes/SKILL.md +152 -0
  297. package/templates/skills/development/frontend/routes/cli/aggregate-component-registry/generate.ts +216 -0
  298. package/templates/skills/development/frontend/routes/cli/aggregate-component-registry/index.ts +121 -0
  299. package/templates/skills/development/frontend/routes/cli/aggregate-component-registry/types.ts +69 -0
  300. package/templates/skills/development/frontend/routes/cli/aggregate-component-registry/validate.ts +23 -0
  301. package/templates/skills/development/frontend/routes/cli/scaffold-routes/__tests__/generate.test.ts +292 -0
  302. package/templates/skills/development/frontend/routes/cli/scaffold-routes/generate.ts +270 -0
  303. package/templates/skills/development/frontend/routes/cli/scaffold-routes/index.ts +42 -0
  304. package/templates/skills/development/frontend/routes/cli/scaffold-routes/types.ts +114 -0
  305. package/templates/skills/development/frontend/routes/cli/scaffold-routes/validate.ts +68 -0
  306. package/templates/skills/development/frontend/structure/SKILL.md +119 -0
  307. package/templates/skills/development/frontend/theme/SKILL.md +48 -0
  308. package/templates/skills/development/frontend/theme/cli/scaffold-theme/__tests__/generate.test.ts +53 -0
  309. package/templates/skills/development/frontend/theme/cli/scaffold-theme/generate.ts +129 -0
  310. package/templates/skills/development/frontend/theme/cli/scaffold-theme/index.ts +102 -0
  311. package/templates/skills/development/frontend/theme/cli/scaffold-theme/types.ts +48 -0
  312. package/templates/skills/development/frontend/theme/cli/scaffold-theme/validate.ts +37 -0
  313. package/templates/skills/development/frontend/ui-polish/SKILL.md +192 -0
  314. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/__tests__/r18.test.ts +153 -0
  315. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/__tests__/r19.test.ts +307 -0
  316. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/__tests__/r20.test.ts +167 -0
  317. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/__tests__/shared-scan.test.ts +262 -0
  318. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/apply.ts +580 -0
  319. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/audit.ts +825 -0
  320. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/index.ts +133 -0
  321. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/types.ts +121 -0
  322. package/templates/skills/development/frontend/ui-polish/cli/ui-polish/validate.ts +73 -0
  323. package/templates/skills/development/frontend/ui-polish/tokens.json +292 -0
  324. package/templates/skills/development/frontend/ui-primitives/SKILL.md +88 -0
  325. package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/__tests__/generate.test.ts +158 -0
  326. package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/generate.ts +345 -0
  327. package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/index.ts +142 -0
  328. package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/types.ts +27 -0
  329. package/templates/skills/development/frontend/ui-primitives/cli/scaffold-ui-primitives/validate.ts +37 -0
  330. package/templates/skills/development/run/SKILL.md +61 -0
  331. package/templates/skills/development/run/backend/SKILL.md +106 -0
  332. package/templates/skills/development/run/frontend/SKILL.md +116 -0
  333. package/templates/skills/development/smoke-test/SKILL.md +99 -0
  334. package/templates/skills/development/smoke-test/cli/run-smoke/execute.ts +424 -0
  335. package/templates/skills/development/smoke-test/cli/run-smoke/index.ts +75 -0
  336. package/templates/skills/development/smoke-test/cli/run-smoke/types.ts +100 -0
  337. package/templates/skills/development/testing/SKILL.md +148 -0
  338. package/templates/skills/development/testing/cli/scaffold-tests/generate.ts +530 -0
  339. package/templates/skills/development/testing/cli/scaffold-tests/index.ts +83 -0
  340. package/templates/skills/development/testing/cli/scaffold-tests/types.ts +51 -0
  341. package/templates/skills/development/testing/cli/scaffold-tests/validate.ts +33 -0
  342. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/__tests__/generate.test.ts +188 -0
  343. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/__tests__/parse-ac.test.ts +191 -0
  344. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/generate.ts +190 -0
  345. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/index.ts +138 -0
  346. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/parse-ac.ts +172 -0
  347. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/types.ts +104 -0
  348. package/templates/skills/development/testing/cli/scaffold-tests-from-ac/validate.ts +57 -0
  349. package/templates/skills/development/testing/cli/test-report/execute.ts +140 -0
  350. package/templates/skills/development/testing/cli/test-report/index.ts +96 -0
  351. package/templates/skills/development/testing/cli/test-report/types.ts +52 -0
  352. package/templates/skills/development/testing/cli/test-report/validate.ts +26 -0
  353. package/templates/skills/development/testing/fix-build/SKILL.md +81 -0
  354. package/templates/skills/development/testing/smoke-http/SKILL.md +123 -0
  355. package/templates/skills/development/testing/smoke-http/cli/smoke-http/execute.ts +129 -0
  356. package/templates/skills/development/testing/smoke-http/cli/smoke-http/index.ts +113 -0
  357. package/templates/skills/development/testing/smoke-http/cli/smoke-http/types.ts +62 -0
  358. package/templates/skills/development/testing/smoke-http/cli/smoke-http/validate.ts +36 -0
  359. package/templates/skills/development/testing/ui-test/SKILL.md +128 -0
  360. package/templates/skills/development/testing/ui-test/cli/build-manifest/generate.ts +129 -0
  361. package/templates/skills/development/testing/ui-test/cli/build-manifest/index.ts +80 -0
  362. package/templates/skills/development/testing/ui-test/cli/build-manifest/types.ts +72 -0
  363. package/templates/skills/development/testing/ui-test/cli/build-manifest/validate.ts +44 -0
  364. package/templates/skills/development/testing/ui-test/cli/run-ui-test/execute.ts +136 -0
  365. package/templates/skills/development/testing/ui-test/cli/run-ui-test/index.ts +75 -0
  366. package/templates/skills/development/testing/ui-test/cli/run-ui-test/lib/dev-browser-driver.ts +250 -0
  367. package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/delete.js.hbs +83 -0
  368. package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/detail.js.hbs +87 -0
  369. package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/edit.js.hbs +91 -0
  370. package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/form-submit.js.hbs +82 -0
  371. package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/list.js.hbs +125 -0
  372. package/templates/skills/development/testing/ui-test/cli/run-ui-test/templates/permission-negative.js.hbs +65 -0
  373. package/templates/skills/development/testing/ui-test/cli/run-ui-test/types.ts +57 -0
  374. package/templates/skills/development/testing/ui-test/cli/run-ui-test/validate.ts +56 -0
  375. package/templates/skills/documentation/SKILL.md +168 -139
  376. package/templates/skills/documentation/cli/extract-doc/__tests__/forbidden.test.ts +136 -0
  377. package/templates/skills/documentation/cli/extract-doc/__tests__/overflow.test.ts +76 -0
  378. package/templates/skills/documentation/cli/extract-doc/__tests__/required.test.ts +147 -0
  379. package/templates/skills/documentation/cli/extract-doc/extract.ts +657 -0
  380. package/templates/skills/documentation/cli/extract-doc/index.ts +102 -0
  381. package/templates/skills/documentation/cli/extract-doc/types.ts +133 -0
  382. package/templates/skills/documentation/cli/extract-doc/validate.ts +35 -0
  383. package/templates/skills/documentation/cli/scaffold-doc/generate.ts +198 -0
  384. package/templates/skills/documentation/cli/scaffold-doc/index.ts +61 -0
  385. package/templates/skills/documentation/cli/scaffold-doc/types.ts +72 -0
  386. package/templates/skills/documentation/cli/scaffold-doc/validate.ts +33 -0
  387. package/templates/skills/documentation/data-schema.md +18 -38
  388. package/templates/skills/documentation/steps/step-01-scan.md +59 -113
  389. package/templates/skills/documentation/steps/step-02-generate.md +158 -231
  390. package/templates/skills/documentation/steps/step-03-validate.md +101 -280
  391. package/templates/skills/documentation/templates.md +403 -92
  392. package/templates/skills/efcore/SKILL.md +88 -308
  393. package/templates/skills/efcore/_shared.md +140 -0
  394. package/templates/skills/efcore/agents/create.md +69 -0
  395. package/templates/skills/efcore/agents/db-update.md +58 -0
  396. package/templates/skills/efcore/agents/list.md +35 -0
  397. package/templates/skills/efcore/agents/rebase-snapshot.md +50 -0
  398. package/templates/skills/efcore/agents/recreate-db.md +78 -0
  399. package/templates/skills/efcore/agents/squash.md +78 -0
  400. package/templates/skills/efcore/agents/status.md +35 -0
  401. package/templates/skills/efcore/cli/create/execute.ts +164 -0
  402. package/templates/skills/efcore/cli/create/index.ts +51 -0
  403. package/templates/skills/efcore/cli/create/types.ts +35 -0
  404. package/templates/skills/efcore/cli/create/validate.ts +29 -0
  405. package/templates/skills/efcore/cli/lib/detect-dbcontexts.ts +195 -0
  406. package/templates/skills/efcore/cli/lib/ef-runner.ts +144 -0
  407. package/templates/skills/efcore/cli/lib/migration-name.ts +56 -0
  408. package/templates/skills/efcore/cli/lib/parse-csproj-version.ts +45 -0
  409. package/templates/skills/efcore/cli/list/execute.ts +83 -0
  410. package/templates/skills/efcore/cli/list/index.ts +60 -0
  411. package/templates/skills/efcore/cli/list/types.ts +46 -0
  412. package/templates/skills/efcore/cli/list/validate.ts +20 -0
  413. package/templates/skills/efcore/cli/rebase-snapshot/execute.ts +21 -0
  414. package/templates/skills/efcore/cli/rebase-snapshot/index.ts +53 -0
  415. package/templates/skills/efcore/cli/rebase-snapshot/types.ts +20 -0
  416. package/templates/skills/efcore/cli/rebase-snapshot/validate.ts +25 -0
  417. package/templates/skills/efcore/cli/squash/execute.ts +298 -0
  418. package/templates/skills/efcore/cli/squash/index.ts +57 -0
  419. package/templates/skills/efcore/cli/squash/types.ts +38 -0
  420. package/templates/skills/efcore/cli/squash/validate.ts +30 -0
  421. package/templates/skills/efcore/cli/status/execute.ts +152 -0
  422. package/templates/skills/efcore/cli/status/index.ts +45 -0
  423. package/templates/skills/efcore/cli/status/types.ts +32 -0
  424. package/templates/skills/efcore/cli/status/validate.ts +20 -0
  425. package/templates/skills/external/context7/SKILL.md +121 -0
  426. package/templates/skills/external/dev-browser/SKILL.md +134 -0
  427. package/templates/skills/gitflow/SKILL.md +139 -392
  428. package/templates/skills/gitflow/_shared.md +24 -620
  429. package/templates/skills/gitflow/agents/abort.md +47 -0
  430. package/templates/skills/gitflow/agents/cleanup.md +50 -0
  431. package/templates/skills/gitflow/agents/commit.md +41 -0
  432. package/templates/skills/gitflow/agents/finish.md +47 -0
  433. package/templates/skills/gitflow/agents/init.md +41 -0
  434. package/templates/skills/gitflow/agents/merge.md +44 -0
  435. package/templates/skills/gitflow/agents/pr.md +39 -0
  436. package/templates/skills/gitflow/agents/start.md +42 -0
  437. package/templates/skills/gitflow/agents/status.md +39 -0
  438. package/templates/skills/gitflow/agents/sync.md +38 -0
  439. package/templates/skills/gitflow/cli/abort/execute.ts +61 -0
  440. package/templates/skills/gitflow/cli/abort/index.ts +116 -0
  441. package/templates/skills/gitflow/cli/abort/types.ts +21 -0
  442. package/templates/skills/gitflow/cli/abort/validate.ts +38 -0
  443. package/templates/skills/gitflow/cli/cleanup/execute.ts +107 -0
  444. package/templates/skills/gitflow/cli/cleanup/index.ts +122 -0
  445. package/templates/skills/gitflow/cli/cleanup/types.ts +26 -0
  446. package/templates/skills/gitflow/cli/cleanup/validate.ts +33 -0
  447. package/templates/skills/gitflow/cli/commit/execute.ts +146 -0
  448. package/templates/skills/gitflow/cli/commit/index.ts +77 -0
  449. package/templates/skills/gitflow/cli/commit/types.ts +36 -0
  450. package/templates/skills/gitflow/cli/commit/validate.ts +38 -0
  451. package/templates/skills/gitflow/cli/finish/execute.ts +127 -0
  452. package/templates/skills/gitflow/cli/finish/index.ts +106 -0
  453. package/templates/skills/gitflow/cli/finish/types.ts +25 -0
  454. package/templates/skills/gitflow/cli/finish/validate.ts +44 -0
  455. package/templates/skills/gitflow/cli/generate-msg/execute.ts +51 -0
  456. package/templates/skills/gitflow/cli/generate-msg/index.ts +73 -0
  457. package/templates/skills/gitflow/cli/generate-msg/types.ts +37 -0
  458. package/templates/skills/gitflow/cli/generate-msg/validate.ts +42 -0
  459. package/templates/skills/gitflow/cli/init/execute.ts +186 -0
  460. package/templates/skills/gitflow/cli/init/index.ts +127 -0
  461. package/templates/skills/gitflow/cli/init/types.ts +63 -0
  462. package/templates/skills/gitflow/cli/init/validate.ts +56 -0
  463. package/templates/skills/gitflow/cli/lib/branch.ts +83 -0
  464. package/templates/skills/gitflow/cli/lib/config.ts +149 -0
  465. package/templates/skills/gitflow/cli/lib/efcore.ts +136 -0
  466. package/templates/skills/gitflow/cli/lib/git.ts +212 -0
  467. package/templates/skills/gitflow/cli/lib/output.ts +49 -0
  468. package/templates/skills/gitflow/cli/lib/paths.ts +54 -0
  469. package/templates/skills/gitflow/cli/lib/platform.ts +44 -0
  470. package/templates/skills/gitflow/cli/lib/provider.ts +147 -0
  471. package/templates/skills/gitflow/cli/lib/types.ts +189 -0
  472. package/templates/skills/gitflow/cli/lib/version.ts +152 -0
  473. package/templates/skills/gitflow/cli/lib/worktree.ts +170 -0
  474. package/templates/skills/gitflow/cli/merge/execute.ts +93 -0
  475. package/templates/skills/gitflow/cli/merge/index.ts +109 -0
  476. package/templates/skills/gitflow/cli/merge/types.ts +24 -0
  477. package/templates/skills/gitflow/cli/merge/validate.ts +33 -0
  478. package/templates/skills/gitflow/cli/pr/execute.ts +131 -0
  479. package/templates/skills/gitflow/cli/pr/index.ts +115 -0
  480. package/templates/skills/gitflow/cli/pr/types.ts +27 -0
  481. package/templates/skills/gitflow/cli/pr/validate.ts +27 -0
  482. package/templates/skills/gitflow/cli/start/execute.ts +98 -0
  483. package/templates/skills/gitflow/cli/start/index.ts +75 -0
  484. package/templates/skills/gitflow/cli/start/types.ts +26 -0
  485. package/templates/skills/gitflow/cli/start/validate.ts +47 -0
  486. package/templates/skills/gitflow/cli/status/execute.ts +251 -0
  487. package/templates/skills/gitflow/cli/status/index.ts +154 -0
  488. package/templates/skills/gitflow/cli/status/types.ts +75 -0
  489. package/templates/skills/gitflow/cli/status/validate.ts +38 -0
  490. package/templates/skills/gitflow/cli/sync/execute.ts +84 -0
  491. package/templates/skills/gitflow/cli/sync/index.ts +75 -0
  492. package/templates/skills/gitflow/cli/sync/types.ts +25 -0
  493. package/templates/skills/gitflow/cli/sync/validate.ts +34 -0
  494. package/templates/skills/gitflow/commit-message.md +46 -0
  495. package/templates/skills/init/SKILL.md +54 -0
  496. package/templates/skills/lib/__tests__/canonical-hash.test.ts +45 -0
  497. package/templates/skills/lib/__tests__/page-spec-actions.test.ts +232 -0
  498. package/templates/skills/lib/canonical-hash.ts +40 -0
  499. package/templates/skills/lib/detector.ts +243 -0
  500. package/templates/skills/lib/dotnet.ts +238 -0
  501. package/templates/skills/lib/frontend-fixers.ts +151 -0
  502. package/templates/skills/lib/fs.ts +238 -0
  503. package/templates/skills/lib/git.ts +134 -0
  504. package/templates/skills/lib/graph.ts +138 -0
  505. package/templates/skills/lib/navroute-parser.ts +51 -0
  506. package/templates/skills/lib/output.ts +117 -0
  507. package/templates/skills/lib/page-spec-actions.ts +350 -0
  508. package/templates/skills/lib/skill-slug.ts +121 -0
  509. package/templates/skills/lib/string-utils.ts +140 -0
  510. package/templates/skills/lib/template-loader.ts +115 -0
  511. package/templates/skills/lib/url-conventions.ts +151 -0
  512. package/templates/skills/package.json +5 -0
  513. package/templates/skills/quick-search/SKILL.md +99 -99
  514. package/templates/skills/review/SKILL.md +56 -0
  515. package/templates/skills/smoke-generation/SKILL.md +18 -16
  516. package/templates/skills/ui-components/SKILL.md +136 -457
  517. package/templates/skills/upgrade/SKILL.md +36 -0
  518. package/templates/skills/utils/SKILL.md +45 -44
  519. package/templates/skills/utils/subcommands/test-web-config.md +152 -152
  520. package/templates/skills/utils/subcommands/test-web.md +123 -123
  521. package/templates/skills/validate-feature/SKILL.md +102 -101
  522. package/templates/skills/validate-feature/references/api-smoke-tests.md +140 -140
  523. package/templates/skills/validate-feature/references/db-validation-checks.md +180 -180
  524. package/templates/skills/validate-feature/steps/step-00-dependencies.md +121 -121
  525. package/templates/skills/validate-feature/steps/step-01-compile.md +39 -39
  526. package/templates/skills/validate-feature/steps/step-02-unit-tests.md +45 -45
  527. package/templates/skills/validate-feature/steps/step-03-integration-tests.md +53 -53
  528. package/templates/skills/validate-feature/steps/step-04-api-smoke.md +94 -94
  529. package/templates/skills/validate-feature/steps/step-05-db-validation.md +149 -149
  530. package/templates/skills/validation/conventions/SKILL.md +193 -0
  531. package/templates/skills/validation/conventions/cli/validate-conventions/execute.ts +368 -0
  532. package/templates/skills/validation/conventions/cli/validate-conventions/index.ts +67 -0
  533. package/templates/skills/validation/conventions/cli/validate-conventions/types.ts +91 -0
  534. package/templates/skills/validation/conventions/cli/validate-conventions/validate.ts +36 -0
  535. package/templates/skills/validation/cross-validate/SKILL.md +83 -0
  536. package/templates/skills/validation/cross-validate/cli/execute.ts +576 -0
  537. package/templates/skills/validation/cross-validate/cli/index.ts +87 -0
  538. package/templates/skills/validation/cross-validate/cli/types.ts +85 -0
  539. package/templates/skills/validation/cross-validate/cli/validate.ts +54 -0
  540. package/templates/skills/validation/eslint/SKILL.md +65 -0
  541. package/templates/skills/validation/eslint/cli/execute.ts +413 -0
  542. package/templates/skills/validation/eslint/cli/index.ts +102 -0
  543. package/templates/skills/validation/eslint/cli/types.ts +48 -0
  544. package/templates/skills/validation/eslint/cli/validate.ts +43 -0
  545. package/templates/skills/validation/project-inventory/SKILL.md +166 -0
  546. package/templates/skills/validation/project-inventory/cli/project-inventory/execute.ts +397 -0
  547. package/templates/skills/validation/project-inventory/cli/project-inventory/index.ts +80 -0
  548. package/templates/skills/validation/project-inventory/cli/project-inventory/types.ts +89 -0
  549. package/templates/skills/validation/project-inventory/cli/project-inventory/validate.ts +35 -0
  550. package/templates/skills/validation/readiness-report/SKILL.md +109 -0
  551. package/templates/skills/validation/readiness-report/cli/execute.ts +236 -0
  552. package/templates/skills/validation/readiness-report/cli/index.ts +234 -0
  553. package/templates/skills/validation/readiness-report/cli/types.ts +61 -0
  554. package/templates/skills/validation/readiness-report/cli/validate.ts +54 -0
  555. package/templates/skills/validation/roslyn/SKILL.md +103 -0
  556. package/templates/skills/validation/roslyn/cli/execute.ts +616 -0
  557. package/templates/skills/validation/roslyn/cli/index.ts +86 -0
  558. package/templates/skills/validation/roslyn/cli/types.ts +50 -0
  559. package/templates/skills/validation/roslyn/cli/validate.ts +43 -0
  560. package/.documentation/apex.html +0 -649
  561. package/dist/mcp-entry.mjs +0 -68888
  562. package/dist/mcp-entry.mjs.map +0 -1
  563. package/scripts/extract-api-endpoints.ts +0 -325
  564. package/scripts/extract-business-rules.ts +0 -440
  565. package/scripts/generate-doc-with-mock-ui.ts +0 -804
  566. package/templates/agents/ba-reader.md +0 -386
  567. package/templates/agents/ba-writer.md +0 -810
  568. package/templates/agents/efcore/migration.md +0 -204
  569. package/templates/agents/efcore/rebase-snapshot.md +0 -202
  570. package/templates/agents/efcore/squash.md +0 -269
  571. package/templates/agents/gitflow/abort.md +0 -45
  572. package/templates/agents/gitflow/cleanup.md +0 -107
  573. package/templates/agents/gitflow/commit.md +0 -236
  574. package/templates/agents/gitflow/exec.md +0 -48
  575. package/templates/agents/gitflow/finish.md +0 -146
  576. package/templates/agents/gitflow/init-clone.md +0 -199
  577. package/templates/agents/gitflow/init-detect.md +0 -137
  578. package/templates/agents/gitflow/init-validate.md +0 -225
  579. package/templates/agents/gitflow/init.md +0 -509
  580. package/templates/agents/gitflow/merge.md +0 -145
  581. package/templates/agents/gitflow/plan.md +0 -42
  582. package/templates/agents/gitflow/pr.md +0 -191
  583. package/templates/agents/gitflow/review.md +0 -49
  584. package/templates/agents/gitflow/start.md +0 -147
  585. package/templates/agents/gitflow/status.md +0 -95
  586. package/templates/agents/mcp-healthcheck.md +0 -163
  587. package/templates/hooks/docs-drift-check.md +0 -96
  588. package/templates/hooks/ef-migration-check.md +0 -139
  589. package/templates/hooks/mcp-check.md +0 -64
  590. package/templates/hooks/ralph-mcp-logger.sh +0 -46
  591. package/templates/mcp-scaffolding/component.tsx.hbs +0 -318
  592. package/templates/mcp-scaffolding/controller.cs.hbs +0 -118
  593. package/templates/mcp-scaffolding/entity-extension.cs.hbs +0 -239
  594. package/templates/mcp-scaffolding/frontend/api-client.ts.hbs +0 -117
  595. package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +0 -133
  596. package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +0 -261
  597. package/templates/mcp-scaffolding/service-extension.cs.hbs +0 -53
  598. package/templates/mcp-scaffolding/tests/controller.test.cs.hbs +0 -436
  599. package/templates/mcp-scaffolding/tests/entity.test.cs.hbs +0 -239
  600. package/templates/mcp-scaffolding/tests/repository.test.cs.hbs +0 -441
  601. package/templates/mcp-scaffolding/tests/security.test.cs.hbs +0 -442
  602. package/templates/mcp-scaffolding/tests/service.test.cs.hbs +0 -402
  603. package/templates/mcp-scaffolding/tests/validator.test.cs.hbs +0 -428
  604. package/templates/skills/_resources/config-safety.md +0 -61
  605. package/templates/skills/_resources/context-digest-template.md +0 -53
  606. package/templates/skills/_resources/doc-context-cache.md +0 -60
  607. package/templates/skills/_resources/docs-manifest-schema.md +0 -155
  608. package/templates/skills/_resources/formatting-guide.md +0 -124
  609. package/templates/skills/_resources/mcp-validate-documentation-spec.md +0 -181
  610. package/templates/skills/_shared.md +0 -228
  611. package/templates/skills/admin/SKILL.md +0 -48
  612. package/templates/skills/ai-prompt/SKILL.md +0 -171
  613. package/templates/skills/ai-prompt/references/ai-agent-modes.md +0 -89
  614. package/templates/skills/ai-prompt/references/eval-framework.md +0 -129
  615. package/templates/skills/ai-prompt/steps/step-00-init.md +0 -47
  616. package/templates/skills/ai-prompt/steps/step-01-implementation.md +0 -122
  617. package/templates/skills/apex/SKILL.md +0 -234
  618. package/templates/skills/apex/_shared.md +0 -197
  619. package/templates/skills/apex/references/analysis-methods.md +0 -178
  620. package/templates/skills/apex/references/challenge-questions.md +0 -359
  621. package/templates/skills/apex/references/checks/architecture-checks.sh +0 -154
  622. package/templates/skills/apex/references/checks/backend-checks.sh +0 -208
  623. package/templates/skills/apex/references/checks/frontend-checks.sh +0 -560
  624. package/templates/skills/apex/references/checks/infrastructure-checks.sh +0 -292
  625. package/templates/skills/apex/references/checks/security-checks.sh +0 -153
  626. package/templates/skills/apex/references/checks/seed-checks.sh +0 -610
  627. package/templates/skills/apex/references/code-generation.md +0 -412
  628. package/templates/skills/apex/references/core-seed-data.md +0 -1502
  629. package/templates/skills/apex/references/domain-events-pattern.md +0 -45
  630. package/templates/skills/apex/references/entity-hooks-pattern.md +0 -68
  631. package/templates/skills/apex/references/error-classification.md +0 -168
  632. package/templates/skills/apex/references/frontend-route-wiring-app-tsx.md +0 -91
  633. package/templates/skills/apex/references/licensing-enforcement.md +0 -52
  634. package/templates/skills/apex/references/parallel-execution.md +0 -187
  635. package/templates/skills/apex/references/person-extension-pattern.md +0 -619
  636. package/templates/skills/apex/references/post-checks.md +0 -162
  637. package/templates/skills/apex/references/smartstack-api.md +0 -591
  638. package/templates/skills/apex/references/smartstack-frontend-compliance.md +0 -616
  639. package/templates/skills/apex/references/smartstack-frontend.md +0 -442
  640. package/templates/skills/apex/references/smartstack-layers.md +0 -551
  641. package/templates/skills/apex/steps/step-00-init.md +0 -405
  642. package/templates/skills/apex/steps/step-01-analyze.md +0 -210
  643. package/templates/skills/apex/steps/step-02-plan.md +0 -303
  644. package/templates/skills/apex/steps/step-03-execute.md +0 -194
  645. package/templates/skills/apex/steps/step-03a-layer0-domain.md +0 -144
  646. package/templates/skills/apex/steps/step-03b-layer1-seed.md +0 -339
  647. package/templates/skills/apex/steps/step-03c-layer2-backend.md +0 -401
  648. package/templates/skills/apex/steps/step-03d-layer3-frontend.md +0 -562
  649. package/templates/skills/apex/steps/step-03e-layer4-devdata.md +0 -46
  650. package/templates/skills/apex/steps/step-04-examine.md +0 -404
  651. package/templates/skills/apex/steps/step-05-deep-review.md +0 -140
  652. package/templates/skills/apex/steps/step-06-resolve.md +0 -120
  653. package/templates/skills/apex/steps/step-07-tests.md +0 -271
  654. package/templates/skills/apex/steps/step-08-run-tests.md +0 -135
  655. package/templates/skills/apex-verify/SKILL.md +0 -110
  656. package/templates/skills/apex-verify/references/audit-rules.md +0 -50
  657. package/templates/skills/apex-verify/steps/step-00-init.md +0 -119
  658. package/templates/skills/apex-verify/steps/step-01-nav-audit.md +0 -96
  659. package/templates/skills/apex-verify/steps/step-02-crud-audit.md +0 -127
  660. package/templates/skills/apex-verify/steps/step-03-perm-audit.md +0 -119
  661. package/templates/skills/apex-verify/steps/step-04-route-audit.md +0 -98
  662. package/templates/skills/apex-verify/steps/step-05-report.md +0 -110
  663. package/templates/skills/application/SKILL.md +0 -241
  664. package/templates/skills/application/references/application-roles-template.md +0 -228
  665. package/templates/skills/application/references/backend-controller-hierarchy.md +0 -68
  666. package/templates/skills/application/references/backend-entity-seeding.md +0 -73
  667. package/templates/skills/application/references/backend-seeding-and-dto-output.md +0 -83
  668. package/templates/skills/application/references/backend-table-prefix-mapping.md +0 -80
  669. package/templates/skills/application/references/backend-verification.md +0 -88
  670. package/templates/skills/application/references/contexts-cheatsheet.md +0 -86
  671. package/templates/skills/application/references/extensions-system.md +0 -158
  672. package/templates/skills/application/references/frontend-i18n-and-output.md +0 -67
  673. package/templates/skills/application/references/frontend-route-naming.md +0 -123
  674. package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +0 -91
  675. package/templates/skills/application/references/frontend-verification.md +0 -158
  676. package/templates/skills/application/references/init-parameter-detection.md +0 -121
  677. package/templates/skills/application/references/migration-checklist-troubleshooting.md +0 -88
  678. package/templates/skills/application/references/nav-fallback-procedure.md +0 -198
  679. package/templates/skills/application/references/provider-template.md +0 -191
  680. package/templates/skills/application/references/roles-client-project-handling.md +0 -55
  681. package/templates/skills/application/references/roles-fallback-procedure.md +0 -144
  682. package/templates/skills/application/references/smartstack-provider.md +0 -118
  683. package/templates/skills/application/references/test-coverage-requirements.md +0 -213
  684. package/templates/skills/application/references/test-frontend.md +0 -73
  685. package/templates/skills/application/references/test-prerequisites.md +0 -72
  686. package/templates/skills/application/references/themes-db-driven.md +0 -484
  687. package/templates/skills/application/steps/step-00-init.md +0 -130
  688. package/templates/skills/application/steps/step-01-navigation.md +0 -170
  689. package/templates/skills/application/steps/step-02-permissions.md +0 -196
  690. package/templates/skills/application/steps/step-03-roles.md +0 -182
  691. package/templates/skills/application/steps/step-03b-provider.md +0 -134
  692. package/templates/skills/application/steps/step-04-backend.md +0 -174
  693. package/templates/skills/application/steps/step-05-frontend.md +0 -189
  694. package/templates/skills/application/steps/step-06-migration.md +0 -189
  695. package/templates/skills/application/steps/step-07-tests.md +0 -356
  696. package/templates/skills/application/steps/step-08-documentation.md +0 -137
  697. package/templates/skills/application/templates-backend.md +0 -463
  698. package/templates/skills/application/templates-frontend.md +0 -950
  699. package/templates/skills/application/templates-i18n.md +0 -520
  700. package/templates/skills/application/templates-seed.md +0 -1110
  701. package/templates/skills/audit-route/SKILL.md +0 -107
  702. package/templates/skills/audit-route/references/routing-pattern.md +0 -131
  703. package/templates/skills/audit-route/steps/step-00-init.md +0 -128
  704. package/templates/skills/audit-route/steps/step-01-inventory.md +0 -157
  705. package/templates/skills/audit-route/steps/step-02-conformity.md +0 -193
  706. package/templates/skills/audit-route/steps/step-03-report.md +0 -201
  707. package/templates/skills/business-analyse/SKILL.md +0 -252
  708. package/templates/skills/business-analyse/_shared.md +0 -276
  709. package/templates/skills/business-analyse/patterns/suggestion-catalog.md +0 -560
  710. package/templates/skills/business-analyse/questionnaire/01-context.md +0 -43
  711. package/templates/skills/business-analyse/questionnaire/02-stakeholders-scope.md +0 -111
  712. package/templates/skills/business-analyse/questionnaire/03-data-ui.md +0 -125
  713. package/templates/skills/business-analyse/questionnaire/04-risks-metrics.md +0 -6
  714. package/templates/skills/business-analyse/questionnaire/05-cross-module.md +0 -69
  715. package/templates/skills/business-analyse/questionnaire.md +0 -156
  716. package/templates/skills/business-analyse/react/application-viewer.md +0 -242
  717. package/templates/skills/business-analyse/react/components.md +0 -532
  718. package/templates/skills/business-analyse/react/i18n-template.md +0 -306
  719. package/templates/skills/business-analyse/react/schema.md +0 -831
  720. package/templates/skills/business-analyse/references/03-json-schemas.md +0 -221
  721. package/templates/skills/business-analyse/references/03-post-check-validation.md +0 -208
  722. package/templates/skills/business-analyse/references/03-smartstack-entity-guards.md +0 -32
  723. package/templates/skills/business-analyse/references/04-cross-module-validation.md +0 -95
  724. package/templates/skills/business-analyse/references/04-file-allocation.md +0 -162
  725. package/templates/skills/business-analyse/references/04-naming-audit-checks.md +0 -174
  726. package/templates/skills/business-analyse/references/04-semantic-validation-matrix.md +0 -118
  727. package/templates/skills/business-analyse/references/acceptance-criteria.md +0 -164
  728. package/templates/skills/business-analyse/references/analysis-semantic-checks.md +0 -190
  729. package/templates/skills/business-analyse/references/canonical-json-formats.md +0 -204
  730. package/templates/skills/business-analyse/references/compilation-structure-cards.md +0 -297
  731. package/templates/skills/business-analyse/references/consolidation-structural-checks.md +0 -124
  732. package/templates/skills/business-analyse/references/detection-strategies.md +0 -424
  733. package/templates/skills/business-analyse/references/domain-research-playbook.md +0 -234
  734. package/templates/skills/business-analyse/references/entity-architecture-decision.md +0 -240
  735. package/templates/skills/business-analyse/references/entity-sourcing-presentation.md +0 -166
  736. package/templates/skills/business-analyse/references/init-resume-logic.md +0 -70
  737. package/templates/skills/business-analyse/references/init-schema-deployment.md +0 -65
  738. package/templates/skills/business-analyse/references/module-completeness-challenge.md +0 -174
  739. package/templates/skills/business-analyse/references/multi-app-detection.md +0 -149
  740. package/templates/skills/business-analyse/references/naming-conventions.md +0 -253
  741. package/templates/skills/business-analyse/references/portal-classification.md +0 -52
  742. package/templates/skills/business-analyse/references/robustness-checks.md +0 -426
  743. package/templates/skills/business-analyse/references/ui-dashboard-spec.md +0 -85
  744. package/templates/skills/business-analyse/references/ui-resource-cards.md +0 -259
  745. package/templates/skills/business-analyse/references/validation-checklist.md +0 -378
  746. package/templates/skills/business-analyse/schemas/application-schema.json +0 -481
  747. package/templates/skills/business-analyse/schemas/feature-schema.json +0 -53
  748. package/templates/skills/business-analyse/schemas/index-schema.json +0 -47
  749. package/templates/skills/business-analyse/schemas/project-schema.json +0 -481
  750. package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +0 -245
  751. package/templates/skills/business-analyse/schemas/sections/discovery-schema.json +0 -80
  752. package/templates/skills/business-analyse/schemas/sections/handoff-schema.json +0 -82
  753. package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +0 -70
  754. package/templates/skills/business-analyse/schemas/sections/specification-schema.json +0 -567
  755. package/templates/skills/business-analyse/schemas/sections/validation-schema.json +0 -93
  756. package/templates/skills/business-analyse/schemas/shared/common-defs.json +0 -227
  757. package/templates/skills/business-analyse/steps/step-00-init.md +0 -463
  758. package/templates/skills/business-analyse/steps/step-01-cadrage.md +0 -901
  759. package/templates/skills/business-analyse/steps/step-02-structure.md +0 -315
  760. package/templates/skills/business-analyse/steps/step-03-specify.md +0 -986
  761. package/templates/skills/business-analyse/steps/step-04-consolidate.md +0 -928
  762. package/templates/skills/business-analyse/templates/tpl-frd.md +0 -168
  763. package/templates/skills/business-analyse/templates/tpl-handoff.md +0 -189
  764. package/templates/skills/business-analyse/templates/tpl-launch-displays.md +0 -59
  765. package/templates/skills/business-analyse/templates-frd.md +0 -476
  766. package/templates/skills/business-analyse/templates-react.md +0 -574
  767. package/templates/skills/business-analyse-design/SKILL.md +0 -101
  768. package/templates/skills/business-analyse-design/references/screens-post-check.md +0 -221
  769. package/templates/skills/business-analyse-design/references/screens-type-mapping.md +0 -138
  770. package/templates/skills/business-analyse-design/references/smartcomponents-templates.md +0 -225
  771. package/templates/skills/business-analyse-design/references/spec-auto-inference.md +0 -117
  772. package/templates/skills/business-analyse-design/steps/step-01-screens.md +0 -108
  773. package/templates/skills/business-analyse-design/steps/step-02-wireframes.md +0 -155
  774. package/templates/skills/business-analyse-design/steps/step-03-navigation.md +0 -189
  775. package/templates/skills/business-analyse-develop/SKILL.md +0 -250
  776. package/templates/skills/business-analyse-develop/references/category-completeness.md +0 -326
  777. package/templates/skills/business-analyse-develop/references/category-rules.md +0 -109
  778. package/templates/skills/business-analyse-develop/references/compact-loop.md +0 -478
  779. package/templates/skills/business-analyse-develop/references/handoff-quality-gate.md +0 -132
  780. package/templates/skills/business-analyse-develop/references/init-resume-recovery.md +0 -183
  781. package/templates/skills/business-analyse-develop/references/module-transition.md +0 -246
  782. package/templates/skills/business-analyse-develop/references/multi-module-queue.md +0 -171
  783. package/templates/skills/business-analyse-develop/references/parallel-execution.md +0 -246
  784. package/templates/skills/business-analyse-develop/references/prd-v3-transformation.md +0 -326
  785. package/templates/skills/business-analyse-develop/references/quality-gates.md +0 -160
  786. package/templates/skills/business-analyse-develop/references/report-reconciliation.md +0 -140
  787. package/templates/skills/business-analyse-develop/references/report-template.md +0 -142
  788. package/templates/skills/business-analyse-develop/references/section-splitting.md +0 -439
  789. package/templates/skills/business-analyse-develop/references/task-transform-legacy.md +0 -256
  790. package/templates/skills/business-analyse-develop/references/team-orchestration.md +0 -547
  791. package/templates/skills/business-analyse-develop/steps/step-00-init.md +0 -242
  792. package/templates/skills/business-analyse-develop/steps/step-01-task.md +0 -182
  793. package/templates/skills/business-analyse-develop/steps/step-01-v4-execute.md +0 -139
  794. package/templates/skills/business-analyse-develop/steps/step-02-execute.md +0 -216
  795. package/templates/skills/business-analyse-develop/steps/step-02-v4-verify.md +0 -176
  796. package/templates/skills/business-analyse-develop/steps/step-03-commit.md +0 -107
  797. package/templates/skills/business-analyse-develop/steps/step-04-check.md +0 -419
  798. package/templates/skills/business-analyse-develop/steps/step-05-report.md +0 -137
  799. package/templates/skills/business-analyse-handoff/SKILL.md +0 -101
  800. package/templates/skills/business-analyse-handoff/references/acceptance-criteria.md +0 -318
  801. package/templates/skills/business-analyse-handoff/references/agent-handoff-transform-prompt.md +0 -211
  802. package/templates/skills/business-analyse-handoff/references/context-isolation-pattern.md +0 -47
  803. package/templates/skills/business-analyse-handoff/references/entity-canonicalization.md +0 -158
  804. package/templates/skills/business-analyse-handoff/references/entity-domain-mapping.md +0 -115
  805. package/templates/skills/business-analyse-handoff/references/handoff-file-inventory.md +0 -49
  806. package/templates/skills/business-analyse-handoff/references/handoff-file-templates.md +0 -197
  807. package/templates/skills/business-analyse-handoff/references/handoff-global-validation.md +0 -142
  808. package/templates/skills/business-analyse-handoff/references/handoff-mappings.md +0 -108
  809. package/templates/skills/business-analyse-handoff/references/handoff-seeddata-generation.md +0 -314
  810. package/templates/skills/business-analyse-handoff/references/prd-generation.md +0 -362
  811. package/templates/skills/business-analyse-handoff/references/prd-validation-checks.md +0 -125
  812. package/templates/skills/business-analyse-handoff/references/project-index-update.md +0 -98
  813. package/templates/skills/business-analyse-handoff/references/readiness-scoring.md +0 -95
  814. package/templates/skills/business-analyse-handoff/schemas/handoff-schema.json +0 -95
  815. package/templates/skills/business-analyse-handoff/steps/step-00-validate.md +0 -158
  816. package/templates/skills/business-analyse-handoff/steps/step-01-transform.md +0 -85
  817. package/templates/skills/business-analyse-handoff/steps/step-02-export.md +0 -169
  818. package/templates/skills/business-analyse-handoff/templates/tpl-progress.md +0 -172
  819. package/templates/skills/business-analyse-html/SKILL.md +0 -89
  820. package/templates/skills/business-analyse-html/html/ba-interactive.html +0 -6134
  821. package/templates/skills/business-analyse-html/html/build-html.js +0 -137
  822. package/templates/skills/business-analyse-html/html/src/partials/cadrage-context.html +0 -34
  823. package/templates/skills/business-analyse-html/html/src/partials/cadrage-scope.html +0 -27
  824. package/templates/skills/business-analyse-html/html/src/partials/cadrage-stakeholders.html +0 -55
  825. package/templates/skills/business-analyse-html/html/src/partials/cadrage-success.html +0 -34
  826. package/templates/skills/business-analyse-html/html/src/partials/consol-datamodel.html +0 -8
  827. package/templates/skills/business-analyse-html/html/src/partials/consol-flows.html +0 -29
  828. package/templates/skills/business-analyse-html/html/src/partials/consol-interactions.html +0 -8
  829. package/templates/skills/business-analyse-html/html/src/partials/consol-permissions.html +0 -8
  830. package/templates/skills/business-analyse-html/html/src/partials/decomp-dependencies.html +0 -38
  831. package/templates/skills/business-analyse-html/html/src/partials/decomp-modules.html +0 -43
  832. package/templates/skills/business-analyse-html/html/src/partials/handoff-summary.html +0 -24
  833. package/templates/skills/business-analyse-html/html/src/partials/module-spec-container.html +0 -4
  834. package/templates/skills/business-analyse-html/html/src/scripts/01-data-init.js +0 -313
  835. package/templates/skills/business-analyse-html/html/src/scripts/02-navigation.js +0 -316
  836. package/templates/skills/business-analyse-html/html/src/scripts/03-render-cadrage.js +0 -162
  837. package/templates/skills/business-analyse-html/html/src/scripts/04-render-modules.js +0 -203
  838. package/templates/skills/business-analyse-html/html/src/scripts/05-render-specs.js +0 -866
  839. package/templates/skills/business-analyse-html/html/src/scripts/06-render-consolidation.js +0 -196
  840. package/templates/skills/business-analyse-html/html/src/scripts/06-render-mockups.js +0 -564
  841. package/templates/skills/business-analyse-html/html/src/scripts/07-render-handoff.js +0 -108
  842. package/templates/skills/business-analyse-html/html/src/scripts/08-editing.js +0 -137
  843. package/templates/skills/business-analyse-html/html/src/scripts/09-export.js +0 -138
  844. package/templates/skills/business-analyse-html/html/src/scripts/10-comments.js +0 -221
  845. package/templates/skills/business-analyse-html/html/src/scripts/11-review-panel.js +0 -167
  846. package/templates/skills/business-analyse-html/html/src/scripts/12-render-diagrams.js +0 -162
  847. package/templates/skills/business-analyse-html/html/src/styles/01-variables.css +0 -38
  848. package/templates/skills/business-analyse-html/html/src/styles/02-layout.css +0 -216
  849. package/templates/skills/business-analyse-html/html/src/styles/03-navigation.css +0 -120
  850. package/templates/skills/business-analyse-html/html/src/styles/04-cards.css +0 -194
  851. package/templates/skills/business-analyse-html/html/src/styles/05-modules.css +0 -518
  852. package/templates/skills/business-analyse-html/html/src/styles/06-wireframes.css +0 -263
  853. package/templates/skills/business-analyse-html/html/src/styles/07-comments.css +0 -184
  854. package/templates/skills/business-analyse-html/html/src/styles/08-review-panel.css +0 -241
  855. package/templates/skills/business-analyse-html/html/src/styles/09-mockups-html.css +0 -220
  856. package/templates/skills/business-analyse-html/html/src/styles/10-diagrams.css +0 -73
  857. package/templates/skills/business-analyse-html/html/src/template.html +0 -449
  858. package/templates/skills/business-analyse-html/references/02-embedded-artifacts-building.md +0 -144
  859. package/templates/skills/business-analyse-html/references/02-feature-data-building.md +0 -143
  860. package/templates/skills/business-analyse-html/references/02-mapping-tables.md +0 -442
  861. package/templates/skills/business-analyse-html/references/02-normalization-helpers.md +0 -139
  862. package/templates/skills/business-analyse-html/references/02-screen-format-detection.md +0 -283
  863. package/templates/skills/business-analyse-html/references/02-self-check-validation.md +0 -199
  864. package/templates/skills/business-analyse-html/references/data-build.md +0 -215
  865. package/templates/skills/business-analyse-html/references/data-mapping.md +0 -452
  866. package/templates/skills/business-analyse-html/references/output-modes.md +0 -119
  867. package/templates/skills/business-analyse-html/references/wireframe-svg-style-guide.md +0 -335
  868. package/templates/skills/business-analyse-html/steps/step-01-collect.md +0 -140
  869. package/templates/skills/business-analyse-html/steps/step-02-build-data.md +0 -76
  870. package/templates/skills/business-analyse-html/steps/step-03-render.md +0 -95
  871. package/templates/skills/business-analyse-html/steps/step-04-verify.md +0 -224
  872. package/templates/skills/business-analyse-quick/SKILL.md +0 -807
  873. package/templates/skills/business-analyse-quick/references/domain-heuristics.md +0 -172
  874. package/templates/skills/business-analyse-quick/references/prd-schema.md +0 -268
  875. package/templates/skills/business-analyse-review/SKILL.md +0 -71
  876. package/templates/skills/business-analyse-review/references/review-data-mapping.md +0 -367
  877. package/templates/skills/business-analyse-review/steps/step-00-init.md +0 -111
  878. package/templates/skills/business-analyse-review/steps/step-01-apply.md +0 -304
  879. package/templates/skills/business-analyse-status/SKILL.md +0 -136
  880. package/templates/skills/cc-agent/SKILL.md +0 -129
  881. package/templates/skills/cc-agent/references/agent-behavior-patterns.md +0 -95
  882. package/templates/skills/cc-agent/references/agent-frontmatter.md +0 -213
  883. package/templates/skills/cc-agent/references/permission-modes.md +0 -102
  884. package/templates/skills/cc-agent/references/tools-reference.md +0 -144
  885. package/templates/skills/cc-agent/steps/step-00-init.md +0 -134
  886. package/templates/skills/cc-agent/steps/step-01-design.md +0 -186
  887. package/templates/skills/cc-agent/steps/step-02-generate.md +0 -131
  888. package/templates/skills/cc-agent/steps/step-03-validate.md +0 -130
  889. package/templates/skills/cc-agent/templates/agent-categorized.md +0 -67
  890. package/templates/skills/cc-agent/templates/agent-standalone.md +0 -56
  891. package/templates/skills/cc-agent/templates/agent-with-skills.md +0 -94
  892. package/templates/skills/cc-audit/SKILL.md +0 -108
  893. package/templates/skills/cc-audit/references/agent-checklist.md +0 -91
  894. package/templates/skills/cc-audit/references/hook-checklist.md +0 -110
  895. package/templates/skills/cc-audit/references/skill-checklist.md +0 -70
  896. package/templates/skills/cc-audit/steps/step-00-init.md +0 -98
  897. package/templates/skills/cc-audit/steps/step-01-scan.md +0 -142
  898. package/templates/skills/cc-audit/steps/step-02-analyze.md +0 -158
  899. package/templates/skills/cc-audit/steps/step-03-report.md +0 -142
  900. package/templates/skills/cc-skill/SKILL.md +0 -134
  901. package/templates/skills/cc-skill/references/best-practices.md +0 -167
  902. package/templates/skills/cc-skill/references/frontmatter-reference.md +0 -182
  903. package/templates/skills/cc-skill/references/skill-patterns.md +0 -199
  904. package/templates/skills/cc-skill/steps/step-00-init.md +0 -119
  905. package/templates/skills/cc-skill/steps/step-01-design.md +0 -199
  906. package/templates/skills/cc-skill/steps/step-02-generate.md +0 -145
  907. package/templates/skills/cc-skill/steps/step-03-steps.md +0 -151
  908. package/templates/skills/cc-skill/steps/step-04-validate.md +0 -124
  909. package/templates/skills/cc-skill/templates/skill-forked.md +0 -85
  910. package/templates/skills/cc-skill/templates/skill-progressive.md +0 -102
  911. package/templates/skills/cc-skill/templates/skill-simple.md +0 -75
  912. package/templates/skills/cc-skill/templates/step-template.md +0 -82
  913. package/templates/skills/controller/SKILL.md +0 -162
  914. package/templates/skills/controller/postman-templates.md +0 -614
  915. package/templates/skills/controller/references/controller-code-templates.md +0 -162
  916. package/templates/skills/controller/references/mcp-scaffold-workflow.md +0 -237
  917. package/templates/skills/controller/references/permission-sync-templates.md +0 -149
  918. package/templates/skills/controller/steps/step-00-init.md +0 -193
  919. package/templates/skills/controller/steps/step-01-analyze.md +0 -152
  920. package/templates/skills/controller/steps/step-02-plan.md +0 -176
  921. package/templates/skills/controller/steps/step-03-generate.md +0 -189
  922. package/templates/skills/controller/steps/step-04-perms.md +0 -80
  923. package/templates/skills/controller/steps/step-05-validate.md +0 -107
  924. package/templates/skills/controller/templates.md +0 -1556
  925. package/templates/skills/debug/SKILL.md +0 -70
  926. package/templates/skills/debug/references/team-protocol.md +0 -232
  927. package/templates/skills/debug/steps/step-00-init.md +0 -57
  928. package/templates/skills/debug/steps/step-01-analyze.md +0 -219
  929. package/templates/skills/debug/steps/step-02-resolve.md +0 -85
  930. package/templates/skills/efcore/references/database-operations.md +0 -66
  931. package/templates/skills/efcore/references/reset-operations.md +0 -81
  932. package/templates/skills/efcore/references/seed-methods.md +0 -86
  933. package/templates/skills/efcore/references/shared-init-functions.md +0 -250
  934. package/templates/skills/efcore/references/sql-objects-injection.md +0 -19
  935. package/templates/skills/efcore/references/troubleshooting.md +0 -81
  936. package/templates/skills/efcore/references/zero-downtime-patterns.md +0 -229
  937. package/templates/skills/explore/SKILL.md +0 -98
  938. package/templates/skills/feature-full/SKILL.md +0 -111
  939. package/templates/skills/feature-full/steps/step-00-init.md +0 -57
  940. package/templates/skills/feature-full/steps/step-01-implementation.md +0 -133
  941. package/templates/skills/gitflow/phases/abort.md +0 -189
  942. package/templates/skills/gitflow/phases/cleanup.md +0 -264
  943. package/templates/skills/gitflow/phases/status.md +0 -192
  944. package/templates/skills/gitflow/references/commit-message-generation.md +0 -58
  945. package/templates/skills/gitflow/references/commit-migration-validation.md +0 -53
  946. package/templates/skills/gitflow/references/finish-cleanup.md +0 -55
  947. package/templates/skills/gitflow/references/finish-version-bumping.md +0 -45
  948. package/templates/skills/gitflow/references/init-config-template.md +0 -143
  949. package/templates/skills/gitflow/references/init-environment-detection.md +0 -41
  950. package/templates/skills/gitflow/references/init-name-normalization.md +0 -118
  951. package/templates/skills/gitflow/references/init-questions.md +0 -193
  952. package/templates/skills/gitflow/references/init-structure-creation.md +0 -75
  953. package/templates/skills/gitflow/references/init-version-detection.md +0 -23
  954. package/templates/skills/gitflow/references/init-workspace-detection.md +0 -43
  955. package/templates/skills/gitflow/references/merge-ci-status.md +0 -36
  956. package/templates/skills/gitflow/references/merge-execution.md +0 -62
  957. package/templates/skills/gitflow/references/merge-pr-context.md +0 -76
  958. package/templates/skills/gitflow/references/plan-template.md +0 -69
  959. package/templates/skills/gitflow/references/pr-build-checks.md +0 -60
  960. package/templates/skills/gitflow/references/pr-generation.md +0 -58
  961. package/templates/skills/gitflow/references/start-branch-normalization.md +0 -28
  962. package/templates/skills/gitflow/references/start-efcore-preflight.md +0 -70
  963. package/templates/skills/gitflow/references/start-local-config.md +0 -113
  964. package/templates/skills/gitflow/references/start-worktree-creation.md +0 -50
  965. package/templates/skills/gitflow/references/sync-push-verify.md +0 -44
  966. package/templates/skills/gitflow/references/sync-rebase-conflicts.md +0 -38
  967. package/templates/skills/gitflow/steps/step-commit.md +0 -199
  968. package/templates/skills/gitflow/steps/step-finish.md +0 -147
  969. package/templates/skills/gitflow/steps/step-init.md +0 -230
  970. package/templates/skills/gitflow/steps/step-merge.md +0 -85
  971. package/templates/skills/gitflow/steps/step-plan.md +0 -151
  972. package/templates/skills/gitflow/steps/step-pr.md +0 -247
  973. package/templates/skills/gitflow/steps/step-start.md +0 -195
  974. package/templates/skills/gitflow/steps/step-sync.md +0 -161
  975. package/templates/skills/gitflow/templates/config.json +0 -72
  976. package/templates/skills/mcp/SKILL.md +0 -62
  977. package/templates/skills/mcp/steps/step-01-healthcheck.md +0 -108
  978. package/templates/skills/mcp/steps/step-02-tools.md +0 -73
  979. package/templates/skills/migrate/SKILL.md +0 -312
  980. package/templates/skills/migrate/references/v3.34-to-v3.46.md +0 -289
  981. package/templates/skills/notification/SKILL.md +0 -173
  982. package/templates/skills/refactor/SKILL.md +0 -56
  983. package/templates/skills/refactor/steps/step-01-discover.md +0 -60
  984. package/templates/skills/refactor/steps/step-02-execute.md +0 -67
  985. package/templates/skills/review-code/SKILL.md +0 -95
  986. package/templates/skills/review-code/references/clean-code-principles.md +0 -292
  987. package/templates/skills/review-code/references/code-quality-metrics.md +0 -174
  988. package/templates/skills/review-code/references/feedback-patterns.md +0 -149
  989. package/templates/skills/review-code/references/owasp-api-top10.md +0 -243
  990. package/templates/skills/review-code/references/security-checklist.md +0 -212
  991. package/templates/skills/review-code/references/smartstack-conventions.md +0 -568
  992. package/templates/skills/review-code/steps/step-01-smartstack.md +0 -96
  993. package/templates/skills/review-code/steps/step-02-detailed-review.md +0 -80
  994. package/templates/skills/review-code/steps/step-03-react.md +0 -44
  995. package/templates/skills/sketch/SKILL.md +0 -34
  996. package/templates/skills/ui-components/accessibility.md +0 -170
  997. package/templates/skills/ui-components/patterns/dashboard-chart.md +0 -327
  998. package/templates/skills/ui-components/patterns/data-table.md +0 -175
  999. package/templates/skills/ui-components/patterns/entity-card.md +0 -77
  1000. package/templates/skills/ui-components/patterns/grid-layout.md +0 -91
  1001. package/templates/skills/ui-components/patterns/kanban.md +0 -43
  1002. package/templates/skills/ui-components/references/component-catalog.md +0 -82
  1003. package/templates/skills/ui-components/responsive-guidelines.md +0 -278
  1004. package/templates/skills/ui-components/style-guide.md +0 -113
  1005. package/templates/skills/validate/SKILL.md +0 -181
  1006. package/templates/skills/workflow/SKILL.md +0 -196
  1007. package/templates/skills/workflow/steps/step-00-init.md +0 -57
  1008. package/templates/skills/workflow/steps/step-01-implementation.md +0 -84
@@ -0,0 +1,826 @@
1
+ /**
2
+ * cli:scaffold-core-seed — generate.ts
3
+ *
4
+ * Generates 5 deterministic Core foundation seed providers PER application
5
+ * declared in the spec. Each provider implements ONE concern of
6
+ * IClientSeedDataProvider and returns Task.CompletedTask for the others —
7
+ * keeps responsibilities clean and lets the per-module gate
8
+ * (verifyCoreFoundationSeed) grep each concern in isolation.
9
+ *
10
+ * Output structure (one block per application):
11
+ * src/{AppCode}.Infrastructure/Persistence/Seeding/Applications/{AppPascal}/Core/
12
+ * {AppPascal}CoreNavigationSeedDataProvider.cs (Order = 10)
13
+ * {AppPascal}CoreRolesSeedDataProvider.cs (Order = 20)
14
+ * {AppPascal}CorePermissionsSeedDataProvider.cs (Order = 30)
15
+ * {AppPascal}CoreRolePermissionsSeedDataProvider.cs (Order = 40)
16
+ * {AppPascal}CoreTestUsersSeedDataProvider.cs (Order = 50, IsDevelopment-gated)
17
+ *
18
+ * Plus a patched DependencyInjection.cs with one block per application
19
+ * registered between `<<< CORE-SEED-DI-{AppPascal} BEGIN/END >>>` markers
20
+ * (idempotent — re-running the CLI overwrites each block contents but never
21
+ * the surrounding code, and each app's block patches independently).
22
+ *
23
+ * Idempotence (SmartStack convention):
24
+ * - GUIDs declared `static readonly` once per class — re-running scaffold
25
+ * does NOT regenerate them.
26
+ * - Each Seed*Async checks existence (composite key) before insert.
27
+ * - DI block per app is between markers — re-runs replace the block,
28
+ * leaving the rest of the file untouched.
29
+ */
30
+ import {
31
+ CORE_PROVIDER_SUFFIXES,
32
+ coreProviderClassName,
33
+ diBeginMarker,
34
+ diEndMarker,
35
+ pascalCase,
36
+ type ApplicationSpec,
37
+ type CoreSeedSpec,
38
+ type GeneratedFile,
39
+ type NavigationEntry,
40
+ type NavigationLevel,
41
+ type RoleEntry,
42
+ type TestUserEntry,
43
+ } from './types.js';
44
+
45
+ export interface AppDiRegistration {
46
+ /** Application's kebab-case code (e.g. `crm`). */
47
+ appCode: string;
48
+ /** Application's PascalCase code (e.g. `Crm`). Used for DI markers + class names. */
49
+ appPascal: string;
50
+ /** Full block including BEGIN/END marker comments. Idempotent to splice. */
51
+ markerBlock: string;
52
+ }
53
+
54
+ export interface CoreSeedGenerateResult {
55
+ files: GeneratedFile[];
56
+ diRegistration: {
57
+ /** One block per application — caller patches each independently. */
58
+ perApp: AppDiRegistration[];
59
+ /** Suggested target paths (in priority order) for the DI patch. The CLI's index.ts walks these and patches the first one that exists. */
60
+ candidatePaths: string[];
61
+ };
62
+ testUsersManifest: GeneratedFile | null;
63
+ }
64
+
65
+ export function generate(spec: CoreSeedSpec): CoreSeedGenerateResult {
66
+ const files: GeneratedFile[] = [];
67
+ const perApp: AppDiRegistration[] = [];
68
+
69
+ for (const app of spec.applications) {
70
+ const appPascal = pascalCase(app.code);
71
+ const ns =
72
+ spec.namespace
73
+ ? `${spec.namespace}.Applications.${appPascal}.Core`
74
+ : `${spec.appCode}.Infrastructure.Persistence.Seeding.Applications.${appPascal}.Core`;
75
+ const seedingDir = `src/${spec.appCode}.Infrastructure/Persistence/Seeding/Applications/${appPascal}/Core`;
76
+ const navByCode = new Map(app.navigation.map((n) => [`${n.level}:${n.code}`, n]));
77
+
78
+ files.push(
79
+ {
80
+ path: `${seedingDir}/${coreProviderClassName(appPascal, 'CoreNavigationSeedDataProvider')}.cs`,
81
+ content: renderNavigationProvider(app, appPascal, ns, navByCode),
82
+ },
83
+ {
84
+ path: `${seedingDir}/${coreProviderClassName(appPascal, 'CoreRolesSeedDataProvider')}.cs`,
85
+ content: renderRolesProvider(app, appPascal, ns),
86
+ },
87
+ {
88
+ path: `${seedingDir}/${coreProviderClassName(appPascal, 'CorePermissionsSeedDataProvider')}.cs`,
89
+ content: renderPermissionsProvider(app, appPascal, ns),
90
+ },
91
+ {
92
+ path: `${seedingDir}/${coreProviderClassName(appPascal, 'CoreRolePermissionsSeedDataProvider')}.cs`,
93
+ content: renderRolePermissionsProvider(app, appPascal, ns),
94
+ },
95
+ {
96
+ path: `${seedingDir}/${coreProviderClassName(appPascal, 'CoreTestUsersSeedDataProvider')}.cs`,
97
+ content: renderTestUsersProvider(app, appPascal, ns, spec.testUserPassword, spec.testUserEmailDomain),
98
+ },
99
+ );
100
+
101
+ perApp.push({
102
+ appCode: app.code,
103
+ appPascal,
104
+ markerBlock: renderDiRegistrationBlock(appPascal, spec.appCode),
105
+ });
106
+ }
107
+
108
+ const testUsersManifest =
109
+ spec.applications.some((a) => a.testUsers.length > 0) && spec.emitDevCredentialsManifest
110
+ ? { path: 'tests/ui-test/test-users.json', content: renderTestUsersManifest(spec) }
111
+ : null;
112
+
113
+ return {
114
+ files,
115
+ diRegistration: {
116
+ perApp,
117
+ candidatePaths: [
118
+ `src/${spec.appCode}.Infrastructure/DependencyInjection.cs`,
119
+ `src/${spec.appCode}.Infrastructure/ServiceCollectionExtensions.cs`,
120
+ `src/${spec.appCode}.Infrastructure/InfrastructureModule.cs`,
121
+ ],
122
+ },
123
+ testUsersManifest,
124
+ };
125
+ }
126
+
127
+ // ─── Helpers ─────────────────────────────────────────────────────────────
128
+
129
+ function escapeString(s: string): string {
130
+ return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
131
+ }
132
+
133
+ function emailFor(tu: TestUserEntry, domain: string): string {
134
+ const local = tu.emailLocalPart ?? tu.roleCode;
135
+ return `${local}.test@${domain}`;
136
+ }
137
+
138
+ function guidVar(entry: NavigationEntry, navByCode?: Map<string, NavigationEntry>): string {
139
+ const levelSuffix =
140
+ entry.level === 'application'
141
+ ? 'ApplicationId'
142
+ : entry.level === 'module'
143
+ ? 'ModuleId'
144
+ : entry.level === 'section'
145
+ ? 'SectionId'
146
+ : 'ResourceId';
147
+ // Include the parent chain in the variable name to avoid collisions between
148
+ // entries that share a `code` but live under different parents (e.g. two
149
+ // modules each with a "dashboard" section → `BudgetsDashboardSectionId`
150
+ // vs `CrmDashboardSectionId`). Application-level entries don't need a
151
+ // prefix (the per-app namespace already isolates them).
152
+ if (!navByCode || entry.level === 'application' || !entry.parentCode) {
153
+ return `${pascalCase(entry.code)}${levelSuffix}`;
154
+ }
155
+ const segments = [entry.code];
156
+ let current: NavigationEntry | undefined = entry;
157
+ const guard = new Set<string>();
158
+ while (current && current.parentCode) {
159
+ const key = `${current.level}:${current.code}`;
160
+ if (guard.has(key)) break;
161
+ guard.add(key);
162
+ const parentLevel = parentLevelOf(current.level);
163
+ if (!parentLevel) break;
164
+ const parent = navByCode.get(`${parentLevel}:${current.parentCode}`);
165
+ if (!parent) break;
166
+ if (parent.level !== 'application') {
167
+ segments.unshift(parent.code);
168
+ }
169
+ current = parent;
170
+ }
171
+ return segments.map(pascalCase).join('') + levelSuffix;
172
+ }
173
+
174
+ function parentLevelOf(level: NavigationLevel): NavigationLevel | null {
175
+ switch (level) {
176
+ case 'module':
177
+ return 'application';
178
+ case 'section':
179
+ return 'module';
180
+ case 'resource':
181
+ return 'section';
182
+ default:
183
+ return null;
184
+ }
185
+ }
186
+
187
+ function componentKeyFor(
188
+ entry: NavigationEntry,
189
+ appCode: string,
190
+ navByCode: Map<string, NavigationEntry>,
191
+ ): string {
192
+ if (entry.componentKey) return entry.componentKey;
193
+ const segments: string[] = [];
194
+ let current: NavigationEntry | undefined = entry;
195
+ const guard = new Set<string>();
196
+ while (current) {
197
+ const key = `${current.level}:${current.code}`;
198
+ if (guard.has(key)) break;
199
+ guard.add(key);
200
+ segments.unshift(current.code);
201
+ if (!current.parentCode) break;
202
+ const parentLevel = parentLevelOf(current.level);
203
+ if (!parentLevel) break;
204
+ current = navByCode.get(`${parentLevel}:${current.parentCode}`);
205
+ }
206
+ if (segments[0] !== appCode) {
207
+ segments.unshift(appCode);
208
+ }
209
+ return segments.join('.');
210
+ }
211
+
212
+ // ─── Provider 1 — Navigation ─────────────────────────────────────────────
213
+
214
+ function renderNavigationProvider(
215
+ app: ApplicationSpec,
216
+ appPascal: string,
217
+ ns: string,
218
+ navByCode: Map<string, NavigationEntry>,
219
+ ): string {
220
+ const className = coreProviderClassName(appPascal, 'CoreNavigationSeedDataProvider');
221
+ const apps = app.navigation.filter((n) => n.level === 'application');
222
+ const modules = app.navigation.filter((n) => n.level === 'module');
223
+ const sections = app.navigation.filter((n) => n.level === 'section');
224
+ const resources = app.navigation.filter((n) => n.level === 'resource');
225
+
226
+ return `using Microsoft.EntityFrameworkCore;
227
+ using SmartStack.Application.Common.Interfaces.Seeding;
228
+ using SmartStack.Application.Common.Interfaces.Persistence;
229
+ using SmartStack.Domain.Authorization;
230
+ using SmartStack.Domain.Navigation;
231
+
232
+ namespace ${ns};
233
+
234
+ /// <summary>
235
+ /// Core navigation seed for application "${app.code}" — Application + every Module
236
+ /// + every Section + every Resource declared in the PRD for this app. Generated
237
+ /// by scaffold-core-seed; do not hand-edit between runs.
238
+ ///
239
+ /// Idempotence pattern: each level (app/module/section/resource) is looked up
240
+ /// by code before insert. Re-running this provider does not duplicate rows.
241
+ /// Cross-references between levels resolve the parent's actual EF-assigned Id
242
+ /// at runtime so the provider does not depend on stable GUIDs across runs.
243
+ /// </summary>
244
+ public class ${className} : IClientSeedDataProvider
245
+ {
246
+ public int Order => 10;
247
+
248
+ public async Task SeedNavigationAsync(ICoreDbContext context, CancellationToken ct = default)
249
+ {
250
+ ${renderApplicationSeed(apps, app.code, navByCode)}
251
+
252
+ ${renderModuleSeed(modules, app.code, navByCode)}
253
+
254
+ ${renderSectionSeed(sections, app.code, navByCode)}
255
+
256
+ ${renderResourceSeed(resources, app.code, navByCode)}
257
+
258
+ await context.SaveChangesAsync(ct);
259
+ }
260
+
261
+ public Task SeedRolesAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
262
+ public Task SeedPermissionsAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
263
+ public Task SeedRolePermissionsAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
264
+ }
265
+ `;
266
+ }
267
+
268
+ function renderApplicationSeed(
269
+ apps: NavigationEntry[],
270
+ appCode: string,
271
+ navByCode: Map<string, NavigationEntry>,
272
+ ): string {
273
+ if (apps.length === 0) return ` // No application entries`;
274
+ return apps
275
+ .map((a) => ` if (!await context.NavigationApplications.AnyAsync(x => x.Code == "${a.code}", ct))
276
+ {
277
+ var navApp = NavigationApplication.Create(
278
+ code: "${a.code}",
279
+ label: "${escapeString(a.label)}",
280
+ icon: "${a.icon}",
281
+ iconType: IconType.${a.iconType},
282
+ route: "${a.route}",
283
+ displayOrder: ${a.displayOrder});
284
+ context.NavigationApplications.Add(navApp);
285
+ await context.SaveChangesAsync(ct);
286
+ }`)
287
+ .join('\n\n');
288
+ }
289
+
290
+ function renderModuleSeed(
291
+ modules: NavigationEntry[],
292
+ appCode: string,
293
+ navByCode: Map<string, NavigationEntry>,
294
+ ): string {
295
+ if (modules.length === 0) return ` // No module entries`;
296
+ return modules
297
+ .map((m) => {
298
+ const parentVar = m.parentCode
299
+ ? guidVar({ ...m, code: m.parentCode, level: 'application', parentCode: undefined } as NavigationEntry, navByCode)
300
+ : 'Guid.Empty';
301
+ return ` {
302
+ var parentApp_${m.code.replace(/[^A-Za-z0-9_]/g, '_')} = await context.NavigationApplications.FirstOrDefaultAsync(a => a.Code == "${m.parentCode ?? ''}", ct);
303
+ if (parentApp_${m.code.replace(/[^A-Za-z0-9_]/g, '_')} is not null && !await context.NavigationModules.AnyAsync(x => x.Code == "${m.code}" && x.ApplicationId == parentApp_${m.code.replace(/[^A-Za-z0-9_]/g, '_')}.Id, ct))
304
+ {
305
+ var navModule = NavigationModule.Create(
306
+ applicationId: parentApp_${m.code.replace(/[^A-Za-z0-9_]/g, '_')}.Id,
307
+ code: "${m.code}",
308
+ label: "${escapeString(m.label)}",
309
+ icon: "${m.icon}",
310
+ iconType: IconType.${m.iconType},
311
+ route: "${m.route}",
312
+ displayOrder: ${m.displayOrder});
313
+ context.NavigationModules.Add(navModule);
314
+ await context.SaveChangesAsync(ct);
315
+ }
316
+ }`;
317
+ })
318
+ .join('\n\n');
319
+ }
320
+
321
+ function renderSectionSeed(
322
+ sections: NavigationEntry[],
323
+ appCode: string,
324
+ navByCode: Map<string, NavigationEntry>,
325
+ ): string {
326
+ if (sections.length === 0) return ` // No section entries`;
327
+ return sections
328
+ .map((s) => {
329
+ // Reconstruct the parent module entry from navByCode so the variable
330
+ // name matches what was declared (e.g. `BudgetsModuleId`, prefixed by app).
331
+ const parentEntry = s.parentCode ? navByCode.get(`module:${s.parentCode}`) : undefined;
332
+ const parentVar = parentEntry
333
+ ? guidVar(parentEntry, navByCode)
334
+ : 'Guid.Empty';
335
+ return ` {
336
+ var parentMod_${s.code.replace(/[^A-Za-z0-9_]/g, '_')} = await context.NavigationModules.FirstOrDefaultAsync(m => m.Code == "${s.parentCode ?? ''}", ct);
337
+ if (parentMod_${s.code.replace(/[^A-Za-z0-9_]/g, '_')} is not null && !await context.NavigationSections.AnyAsync(x => x.Code == "${s.code}" && x.ModuleId == parentMod_${s.code.replace(/[^A-Za-z0-9_]/g, '_')}.Id, ct))
338
+ {
339
+ var section = NavigationSection.Create(
340
+ moduleId: parentMod_${s.code.replace(/[^A-Za-z0-9_]/g, '_')}.Id,
341
+ code: "${s.code}",
342
+ label: "${escapeString(s.label)}",
343
+ icon: "${s.icon}",
344
+ iconType: IconType.${s.iconType},
345
+ route: "${s.route}",
346
+ displayOrder: ${s.displayOrder});
347
+ context.NavigationSections.Add(section);
348
+ await context.SaveChangesAsync(ct);
349
+ }
350
+ }`;
351
+ })
352
+ .join('\n\n');
353
+ }
354
+
355
+ function renderResourceSeed(
356
+ resources: NavigationEntry[],
357
+ appCode: string,
358
+ navByCode: Map<string, NavigationEntry>,
359
+ ): string {
360
+ if (resources.length === 0) return ` // No resource entries`;
361
+ return resources
362
+ .map((r) => {
363
+ const parentEntry = r.parentCode ? navByCode.get(`section:${r.parentCode}`) : undefined;
364
+ const parentVar = parentEntry
365
+ ? guidVar(parentEntry, navByCode)
366
+ : 'Guid.Empty';
367
+ return ` {
368
+ var parentSec_${r.code.replace(/[^A-Za-z0-9_]/g, '_')} = await context.NavigationSections.FirstOrDefaultAsync(s => s.Code == "${r.parentCode ?? ''}", ct);
369
+ if (parentSec_${r.code.replace(/[^A-Za-z0-9_]/g, '_')} is not null && !await context.NavigationResources.AnyAsync(x => x.Code == "${r.code}" && x.SectionId == parentSec_${r.code.replace(/[^A-Za-z0-9_]/g, '_')}.Id, ct))
370
+ {
371
+ var resource = NavigationResource.Create(
372
+ sectionId: parentSec_${r.code.replace(/[^A-Za-z0-9_]/g, '_')}.Id,
373
+ code: "${r.code}",
374
+ label: "${escapeString(r.label)}",
375
+ route: "${r.route}",
376
+ displayOrder: ${r.displayOrder});
377
+ context.NavigationResources.Add(resource);
378
+ await context.SaveChangesAsync(ct);
379
+ }
380
+ }`;
381
+ })
382
+ .join('\n\n');
383
+ }
384
+
385
+ // ─── Provider 2 — Roles ──────────────────────────────────────────────────
386
+
387
+ function renderRolesProvider(app: ApplicationSpec, appPascal: string, ns: string): string {
388
+ const className = coreProviderClassName(appPascal, 'CoreRolesSeedDataProvider');
389
+ const navClassName = coreProviderClassName(appPascal, 'CoreNavigationSeedDataProvider');
390
+
391
+ const roleInserts =
392
+ app.roles.length === 0
393
+ ? ' // No roles defined'
394
+ : app.roles
395
+ .map(
396
+ (r) => ` {
397
+ var navApp_${r.code.replace(/[^A-Za-z0-9_]/g, '_')} = await context.NavigationApplications.FirstOrDefaultAsync(a => a.Code == "${r.applicationCode}", ct);
398
+ if (navApp_${r.code.replace(/[^A-Za-z0-9_]/g, '_')} is not null && !await context.Roles.AnyAsync(x => x.Code == "${r.code}" && x.ApplicationId == navApp_${r.code.replace(/[^A-Za-z0-9_]/g, '_')}.Id, ct))
399
+ {
400
+ var role = Role.Create(
401
+ name: "${escapeString(r.name)}",
402
+ shortName: "${escapeString(r.code)}",
403
+ category: RoleCategory.Custom,
404
+ applicationId: navApp_${r.code.replace(/[^A-Za-z0-9_]/g, '_')}.Id,
405
+ code: "${r.code}");
406
+ context.Roles.Add(role);
407
+ }
408
+ }`,
409
+ )
410
+ .join('\n');
411
+
412
+ return `using Microsoft.EntityFrameworkCore;
413
+ using SmartStack.Application.Common.Interfaces.Seeding;
414
+ using SmartStack.Application.Common.Interfaces.Persistence;
415
+ using SmartStack.Domain.Authorization;
416
+ using SmartStack.Domain.Navigation;
417
+ using SmartStack.Domain.Platform.Administration.Roles;
418
+
419
+ namespace ${ns};
420
+
421
+ /// <summary>
422
+ /// Core roles seed for application "${app.code}" — one Role per actor declared in
423
+ /// the PRD for this app. Resolves the parent NavigationApplication by code at
424
+ /// runtime so this provider does not depend on stable GUIDs across runs.
425
+ /// </summary>
426
+ public class ${className} : IClientSeedDataProvider
427
+ {
428
+ public int Order => 20;
429
+
430
+ public Task SeedNavigationAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
431
+
432
+ public async Task SeedRolesAsync(ICoreDbContext context, CancellationToken ct = default)
433
+ {
434
+ ${roleInserts}
435
+
436
+ await context.SaveChangesAsync(ct);
437
+ }
438
+
439
+ public Task SeedPermissionsAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
440
+ public Task SeedRolePermissionsAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
441
+ }
442
+ `;
443
+ }
444
+
445
+ // ─── Provider 3 — Permissions ────────────────────────────────────────────
446
+
447
+ function renderPermissionsProvider(app: ApplicationSpec, appPascal: string, ns: string): string {
448
+ const className = coreProviderClassName(appPascal, 'CorePermissionsSeedDataProvider');
449
+
450
+ // SmartStack 3.45 Permission API:
451
+ // Permission.CreateForSection(Guid sectionId, string path, PermissionAction? action,
452
+ // bool isWildcard, string description)
453
+ // PermissionAction { Access, Read, Create, Update, Delete, Export, Import,
454
+ // Approve, Reject, Assign, Execute }
455
+ // ICoreDbContext.Permissions : DbSet<Permission>
456
+ // sectionId is resolved at runtime by looking up NavigationSections by code,
457
+ // matching the same pattern CoreRolePermissionsSeedDataProvider uses for
458
+ // Role/Permission lookups. Idempotence: composite-key duplicate check on Path
459
+ // before insert.
460
+ const permsBlock =
461
+ app.permissions.length === 0
462
+ ? ' // No permissions defined'
463
+ : ` var permissionsToSeed = new (string Path, string Action, string SectionCode)[]
464
+ {
465
+ ${app.permissions.map((p) => ` ("${escapeString(p.path)}", "${escapeString(p.action)}", "${escapeString(p.sectionCode)}"),`).join('\n')}
466
+ };
467
+
468
+ foreach (var perm in permissionsToSeed)
469
+ {
470
+ var section = await context.NavigationSections.FirstOrDefaultAsync(s => s.Code == perm.SectionCode, ct);
471
+ if (section is null) continue;
472
+ if (await context.Permissions.AnyAsync(p => p.Path == perm.Path, ct)) continue;
473
+
474
+ var permission = Permission.CreateForSection(
475
+ sectionId: section.Id,
476
+ path: perm.Path,
477
+ action: ParseAction(perm.Action),
478
+ isWildcard: false,
479
+ description: $"Auto-generated for {perm.Path}");
480
+ context.Permissions.Add(permission);
481
+ }
482
+
483
+ await context.SaveChangesAsync(ct);`;
484
+
485
+ return `using Microsoft.EntityFrameworkCore;
486
+ using SmartStack.Application.Common.Interfaces.Seeding;
487
+ using SmartStack.Application.Common.Interfaces.Persistence;
488
+ using SmartStack.Domain.Authorization;
489
+ using SmartStack.Domain.Navigation;
490
+
491
+ namespace ${ns};
492
+
493
+ /// <summary>
494
+ /// Core permissions seed for application "${app.code}" — one Permission per
495
+ /// (path, action, section) triplet from this app's structured.permissions[]. Each
496
+ /// permission is scoped to a NavigationSection resolved by code at runtime, so
497
+ /// the provider does not depend on stable GUIDs across runs. The Path duplicate
498
+ /// check makes this idempotent across re-runs. Generated by scaffold-core-seed;
499
+ /// do not hand-edit.
500
+ /// </summary>
501
+ public class ${className} : IClientSeedDataProvider
502
+ {
503
+ public int Order => 30;
504
+
505
+ public Task SeedNavigationAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
506
+ public Task SeedRolesAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
507
+
508
+ public async Task SeedPermissionsAsync(ICoreDbContext context, CancellationToken ct = default)
509
+ {
510
+ ${permsBlock}
511
+ }
512
+
513
+ public Task SeedRolePermissionsAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
514
+
515
+ private static PermissionAction? ParseAction(string action) => action.ToLowerInvariant() switch
516
+ {
517
+ "access" => PermissionAction.Access,
518
+ "read" => PermissionAction.Read,
519
+ "create" => PermissionAction.Create,
520
+ "update" => PermissionAction.Update,
521
+ "delete" => PermissionAction.Delete,
522
+ "export" => PermissionAction.Export,
523
+ "import" => PermissionAction.Import,
524
+ "approve" => PermissionAction.Approve,
525
+ "reject" => PermissionAction.Reject,
526
+ "assign" => PermissionAction.Assign,
527
+ "execute" => PermissionAction.Execute,
528
+ _ => null,
529
+ };
530
+ }
531
+ `;
532
+ }
533
+
534
+ // ─── Provider 4 — RolePermissions ────────────────────────────────────────
535
+
536
+ function renderRolePermissionsProvider(app: ApplicationSpec, appPascal: string, ns: string): string {
537
+ const className = coreProviderClassName(appPascal, 'CoreRolePermissionsSeedDataProvider');
538
+
539
+ const mappingsBlock =
540
+ app.rolePermissions.length === 0
541
+ ? ' // No role-permission mappings defined'
542
+ : ` var mappings = new (string RoleCode, string PermissionPath)[]
543
+ {
544
+ ${app.rolePermissions.map((rp) => ` ("${rp.roleCode}", "${rp.permissionPath}"),`).join('\n')}
545
+ };
546
+
547
+ foreach (var mapping in mappings)
548
+ {
549
+ var role = await context.Roles.FirstOrDefaultAsync(r => r.Code == mapping.RoleCode, ct);
550
+ var permission = await context.Permissions.FirstOrDefaultAsync(
551
+ p => p.Path == mapping.PermissionPath,
552
+ ct);
553
+
554
+ if (role is null || permission is null) continue;
555
+
556
+ if (!await context.RolePermissions.AnyAsync(
557
+ rp => rp.RoleId == role.Id && rp.PermissionId == permission.Id,
558
+ ct))
559
+ {
560
+ context.RolePermissions.Add(RolePermission.Create(role.Id, permission.Id));
561
+ }
562
+ }
563
+
564
+ await context.SaveChangesAsync(ct);`;
565
+
566
+ return `using Microsoft.EntityFrameworkCore;
567
+ using SmartStack.Application.Common.Interfaces.Seeding;
568
+ using SmartStack.Application.Common.Interfaces.Persistence;
569
+ using SmartStack.Domain.Navigation;
570
+ using SmartStack.Domain.Platform.Administration.Roles;
571
+ using SmartStack.Domain.Platform.Administration.Users;
572
+
573
+ namespace ${ns};
574
+
575
+ /// <summary>
576
+ /// Core role-permission mappings for application "${app.code}" — wires each role to
577
+ /// its allowed permissions. Lookups by Code at runtime (decoupled from the per-app
578
+ /// CoreRolesSeedDataProvider's GUID fields), so this provider is safe to regenerate
579
+ /// independently. Generated by scaffold-core-seed; do not hand-edit.
580
+ /// </summary>
581
+ public class ${className} : IClientSeedDataProvider
582
+ {
583
+ public int Order => 40;
584
+
585
+ public Task SeedNavigationAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
586
+ public Task SeedRolesAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
587
+ public Task SeedPermissionsAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
588
+
589
+ public async Task SeedRolePermissionsAsync(ICoreDbContext context, CancellationToken ct = default)
590
+ {
591
+ ${mappingsBlock}
592
+ }
593
+ }
594
+ `;
595
+ }
596
+
597
+ // ─── Provider 5 — Test users (dev-only) ──────────────────────────────────
598
+
599
+ function renderTestUsersProvider(
600
+ app: ApplicationSpec,
601
+ appPascal: string,
602
+ ns: string,
603
+ testUserPassword: string,
604
+ testUserEmailDomain: string,
605
+ ): string {
606
+ const className = coreProviderClassName(appPascal, 'CoreTestUsersSeedDataProvider');
607
+ const rolesByCode = new Map<string, RoleEntry>(app.roles.map((r) => [r.code, r]));
608
+
609
+ const userInserts = app.testUsers
610
+ .map((tu) => {
611
+ const role = rolesByCode.get(tu.roleCode);
612
+ if (!role) return ` // Skipped test user: role "${tu.roleCode}" not found in spec`;
613
+ const email = emailFor(tu, testUserEmailDomain);
614
+ const localPart = tu.emailLocalPart ?? tu.roleCode;
615
+ return ` await EnsureTestUserAsync(context, "${email}", "${escapeString(localPart)} (test)", "${role.code}", TestUserPassword, ct);`;
616
+ })
617
+ .join('\n');
618
+
619
+ return `using Microsoft.EntityFrameworkCore;
620
+ using Microsoft.Extensions.Hosting;
621
+ using SmartStack.Application.Common.Interfaces.Seeding;
622
+ using SmartStack.Application.Common.Interfaces.Persistence;
623
+ using SmartStack.Domain.Navigation;
624
+ using SmartStack.Domain.Platform.Administration.Roles;
625
+ using SmartStack.Domain.Platform.Administration.Users;
626
+
627
+ namespace ${ns};
628
+
629
+ /// <summary>
630
+ /// Core test users for application "${app.code}" — one user per role declared in
631
+ /// the app's testUsers[]. Gated by IHostEnvironment.IsDevelopment() so production
632
+ /// deployments NEVER seed these.
633
+ ///
634
+ /// PROJECT-SPECIFIC CUSTOMIZATION REQUIRED:
635
+ /// The User entity factory and password hashing API differ per project. Adapt
636
+ /// EnsureTestUserAsync below to your User entity. Common patterns:
637
+ /// - User.CreateForDevelopment(...) (factory method)
638
+ /// - new User { Email = ..., PasswordHash = passwordHasher.Hash(...) }
639
+ /// - IUserAdminService.CreateAsync(...) (application service)
640
+ ///
641
+ /// Order = 50 ensures roles + permissions + role-permissions exist by the time
642
+ /// this runs.
643
+ /// </summary>
644
+ public class ${className} : IClientSeedDataProvider
645
+ {
646
+ private readonly IHostEnvironment _env;
647
+
648
+ public ${className}(IHostEnvironment env)
649
+ {
650
+ _env = env;
651
+ }
652
+
653
+ public int Order => 50;
654
+
655
+ // Hardcoded dev password — only used when IsDevelopment() is true.
656
+ private const string TestUserPassword = "${escapeString(testUserPassword)}";
657
+
658
+ public Task SeedNavigationAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
659
+ public Task SeedRolesAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
660
+ public Task SeedPermissionsAsync(ICoreDbContext context, CancellationToken ct = default) => Task.CompletedTask;
661
+
662
+ public Task SeedRolePermissionsAsync(ICoreDbContext context, CancellationToken ct = default)
663
+ {
664
+ // STUB — User creation requires a password hasher (IPasswordHasher / scrypt service)
665
+ // that IClientSeedDataProvider does not expose. The proper integration uses
666
+ // User.Create(email, passwordHash, firstName, lastName) with a pre-computed hash,
667
+ // OR a dedicated IDevTestUserService injected via DI.
668
+ //
669
+ // Test users to seed for application "${app.code}" (when IsDevelopment()):
670
+ ${app.testUsers.map((tu) => {
671
+ const role = rolesByCode.get(tu.roleCode);
672
+ if (!role) return ` // - <unknown role: ${tu.roleCode}>`;
673
+ return ` // - ${emailFor(tu, testUserEmailDomain)} (role=${role.code})`;
674
+ }).join('\n')}
675
+ return Task.CompletedTask;
676
+ }
677
+
678
+ /// <summary>
679
+ /// Reserved hook — implement when adapting to the project's User entity API.
680
+ /// </summary>
681
+ private static Task EnsureTestUserAsync(
682
+ ICoreDbContext context,
683
+ string email,
684
+ string displayName,
685
+ string roleCode,
686
+ string password,
687
+ CancellationToken ct)
688
+ {
689
+ return Task.CompletedTask;
690
+ }
691
+ }
692
+ `;
693
+ }
694
+
695
+ function renderTestUsersManifest(spec: CoreSeedSpec): string {
696
+ const users: Array<{
697
+ role: string;
698
+ email: string;
699
+ password: string;
700
+ applicationCode: string;
701
+ roleName: string;
702
+ }> = [];
703
+
704
+ for (const app of spec.applications) {
705
+ const rolesByCode = new Map<string, RoleEntry>(app.roles.map((r) => [r.code, r]));
706
+ for (const tu of app.testUsers) {
707
+ const role = rolesByCode.get(tu.roleCode);
708
+ if (!role) continue;
709
+ users.push({
710
+ role: tu.roleCode,
711
+ email: emailFor(tu, spec.testUserEmailDomain),
712
+ password: spec.testUserPassword,
713
+ applicationCode: role.applicationCode,
714
+ roleName: role.name,
715
+ });
716
+ }
717
+ }
718
+
719
+ return JSON.stringify(
720
+ {
721
+ generatedAt: new Date().toISOString(),
722
+ appCode: spec.appCode,
723
+ // Gitignored. Used by skills/development/testing/ui-test/cli/run-ui-test.
724
+ // Regenerated on every scaffold-core-seed run — do not edit by hand.
725
+ users,
726
+ },
727
+ null,
728
+ 2,
729
+ ) + '\n';
730
+ }
731
+
732
+ // ─── DI block ────────────────────────────────────────────────────────────
733
+
734
+ function renderDiRegistrationBlock(appPascal: string, appCode: string): string {
735
+ // Fully-qualified type names — the per-app providers live in nested
736
+ // namespaces `{AppCode}.Infrastructure.Persistence.Seeding.Applications.{AppPascal}.Core`,
737
+ // and DependencyInjection.cs (the patch host) doesn't necessarily import
738
+ // them. Fully-qualifying avoids needing a `using` directive at file scope
739
+ // (which we can't safely inject via the marker block).
740
+ const ns = `${appCode}.Infrastructure.Persistence.Seeding.Applications.${appPascal}.Core`;
741
+ const lines = CORE_PROVIDER_SUFFIXES.map(
742
+ (suffix) => ` services.AddScoped<IClientSeedDataProvider, ${ns}.${coreProviderClassName(appPascal, suffix)}>();`,
743
+ );
744
+ return [
745
+ ` ${diBeginMarker(appPascal)}`,
746
+ ...lines,
747
+ ` ${diEndMarker(appPascal)}`,
748
+ ].join('\n');
749
+ }
750
+
751
+ /**
752
+ * Patch a DependencyInjection.cs source for ONE application's DI block.
753
+ * If the BEGIN/END markers for this `appPascal` exist, replace the block
754
+ * content idempotently. Otherwise insert before the last `return services;`
755
+ * (or the file's last `}`).
756
+ *
757
+ * Returns null when the block was already up-to-date (no rewrite needed).
758
+ */
759
+ export function patchDependencyInjection(source: string, registration: AppDiRegistration): string | null {
760
+ const begin = diBeginMarker(registration.appPascal);
761
+ const end = diEndMarker(registration.appPascal);
762
+ const block = registration.markerBlock;
763
+
764
+ const beginIdx = source.indexOf(begin);
765
+ const endIdx = source.indexOf(end);
766
+
767
+ if (beginIdx >= 0 && endIdx >= 0 && endIdx > beginIdx) {
768
+ // Replace existing block. Find the start of the line containing BEGIN and
769
+ // end of the line containing END (so we replace whole lines, not partial).
770
+ const lineStart = source.lastIndexOf('\n', beginIdx) + 1;
771
+ const lineEnd = source.indexOf('\n', endIdx);
772
+ const before = source.slice(0, lineStart);
773
+ const after = lineEnd >= 0 ? source.slice(lineEnd + 1) : '';
774
+ const next = before + block + '\n' + after;
775
+ return next === source ? null : next;
776
+ }
777
+
778
+ // No markers — try to insert before the LAST `return services;` statement
779
+ // (the canonical end-of-method marker for SmartStack DI extension methods).
780
+ const returnMatches = [...source.matchAll(/\n\s*return services;\s*\n/g)];
781
+ if (returnMatches.length > 0) {
782
+ const last = returnMatches[returnMatches.length - 1];
783
+ const insertAt = last.index!;
784
+ const before = source.slice(0, insertAt);
785
+ const after = source.slice(insertAt);
786
+ return before + '\n' + block + after;
787
+ }
788
+
789
+ // Last resort — append before the file's last `}`. The agent will see this
790
+ // and may need to manually move it inside an extension method body.
791
+ const lastBrace = source.lastIndexOf('}');
792
+ if (lastBrace >= 0) {
793
+ return source.slice(0, lastBrace) + block + '\n' + source.slice(lastBrace);
794
+ }
795
+
796
+ return null;
797
+ }
798
+
799
+ // ─── Stable GUIDs ────────────────────────────────────────────────────────
800
+
801
+ /**
802
+ * Compute a deterministic GUID v5-like string from an arbitrary key. Uses a
803
+ * simple FNV-1a 128-bit-ish digest folded into the GUID format. Same key →
804
+ * same GUID forever, so re-running scaffold-core-seed does NOT churn the
805
+ * database row IDs (re-run idempotence requirement).
806
+ *
807
+ * Not cryptographic — just deterministic. Collisions across distinct keys
808
+ * are statistically negligible at the scale of one app's seed data.
809
+ */
810
+ function stableGuid(key: string): string {
811
+ // Simple deterministic 128-bit digest using two FNV-1a passes with
812
+ // different seeds — keeps the implementation dependency-free and fast.
813
+ const fnv = (s: string, seed: number): bigint => {
814
+ let h = BigInt(seed) & 0xffffffffffffffffn;
815
+ const PRIME = 1099511628211n;
816
+ for (let i = 0; i < s.length; i++) {
817
+ h ^= BigInt(s.charCodeAt(i));
818
+ h = (h * PRIME) & 0xffffffffffffffffn;
819
+ }
820
+ return h;
821
+ };
822
+ const high = fnv(key, 0x811c9dc5).toString(16).padStart(16, '0');
823
+ const low = fnv(key + ':low', 0x811c9dc5).toString(16).padStart(16, '0');
824
+ // GUID format: 8-4-4-4-12
825
+ return `${high.slice(0, 8)}-${high.slice(8, 12)}-${high.slice(12, 16)}-${low.slice(0, 4)}-${low.slice(4, 16)}`;
826
+ }