@atlashub/smartstack-cli 3.39.0 → 3.41.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 (472) hide show
  1. package/.documentation/apex.html +644 -644
  2. package/.documentation/css/styles.css +2320 -2320
  3. package/.documentation/init.html +1377 -1377
  4. package/.documentation/js/app.js +780 -780
  5. package/.documentation/prd-json-v2.0.0.md +396 -396
  6. package/.documentation/testing-ba-e2e.md +462 -462
  7. package/config/default-config.json +95 -95
  8. package/config/mcp-defaults.json +62 -62
  9. package/config/settings.json +53 -53
  10. package/config/settings.local.example.json +16 -16
  11. package/dist/index.js +6 -3
  12. package/dist/index.js.map +1 -1
  13. package/dist/mcp-entry.mjs +6 -4
  14. package/dist/mcp-entry.mjs.map +1 -1
  15. package/package.json +115 -115
  16. package/scripts/extract-api-endpoints.ts +325 -325
  17. package/scripts/extract-business-rules.ts +440 -440
  18. package/scripts/generate-doc-with-mock-ui.ts +804 -804
  19. package/scripts/health-check.sh +168 -168
  20. package/scripts/postinstall.js +18 -18
  21. package/templates/agents/action.md +37 -37
  22. package/templates/agents/ba-reader.md +378 -378
  23. package/templates/agents/ba-writer.md +861 -861
  24. package/templates/agents/code-reviewer.md +163 -163
  25. package/templates/agents/db-reader.md +149 -149
  26. package/templates/agents/docs-context-reader.md +143 -143
  27. package/templates/agents/docs-sync-checker.md +122 -122
  28. package/templates/agents/efcore/conflicts.md +95 -84
  29. package/templates/agents/efcore/db-deploy.md +85 -74
  30. package/templates/agents/efcore/db-reset.md +96 -85
  31. package/templates/agents/efcore/db-seed.md +72 -61
  32. package/templates/agents/efcore/db-status.md +97 -86
  33. package/templates/agents/efcore/migration.md +197 -186
  34. package/templates/agents/efcore/rebase-snapshot.md +119 -108
  35. package/templates/agents/efcore/scan.md +103 -92
  36. package/templates/agents/efcore/squash.md +172 -161
  37. package/templates/agents/explore-codebase.md +66 -66
  38. package/templates/agents/explore-docs.md +98 -98
  39. package/templates/agents/fix-grammar.md +50 -50
  40. package/templates/agents/gitflow/abort.md +45 -45
  41. package/templates/agents/gitflow/cleanup.md +96 -96
  42. package/templates/agents/gitflow/commit.md +236 -236
  43. package/templates/agents/gitflow/exec.md +48 -48
  44. package/templates/agents/gitflow/finish.md +146 -146
  45. package/templates/agents/gitflow/init-clone.md +199 -199
  46. package/templates/agents/gitflow/init-detect.md +137 -137
  47. package/templates/agents/gitflow/init-validate.md +225 -225
  48. package/templates/agents/gitflow/init.md +340 -340
  49. package/templates/agents/gitflow/merge.md +145 -145
  50. package/templates/agents/gitflow/plan.md +42 -42
  51. package/templates/agents/gitflow/pr.md +191 -191
  52. package/templates/agents/gitflow/review.md +49 -49
  53. package/templates/agents/gitflow/start.md +147 -147
  54. package/templates/agents/gitflow/status.md +95 -95
  55. package/templates/agents/mcp-healthcheck.md +163 -163
  56. package/templates/agents/snipper.md +37 -37
  57. package/templates/agents/websearch.md +46 -46
  58. package/templates/hooks/appsettings-guard.sh +76 -76
  59. package/templates/hooks/docs-drift-check.md +96 -96
  60. package/templates/hooks/ef-migration-check.md +139 -139
  61. package/templates/hooks/hooks.json +58 -58
  62. package/templates/hooks/mcp-check.md +64 -64
  63. package/templates/hooks/ralph-mcp-logger.sh +46 -46
  64. package/templates/hooks/ralph-session-end.sh +69 -69
  65. package/templates/hooks/stop-hook.sh +177 -177
  66. package/templates/hooks/wsl-dotnet-cleanup.sh +24 -24
  67. package/templates/mcp-scaffolding/component.tsx.hbs +318 -318
  68. package/templates/mcp-scaffolding/controller.cs.hbs +192 -192
  69. package/templates/mcp-scaffolding/entity-extension.cs.hbs +239 -239
  70. package/templates/mcp-scaffolding/frontend/api-client.ts.hbs +116 -116
  71. package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +133 -133
  72. package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +126 -126
  73. package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +261 -261
  74. package/templates/mcp-scaffolding/service-extension.cs.hbs +53 -53
  75. package/templates/mcp-scaffolding/tests/controller.test.cs.hbs +436 -436
  76. package/templates/mcp-scaffolding/tests/entity.test.cs.hbs +239 -239
  77. package/templates/mcp-scaffolding/tests/repository.test.cs.hbs +441 -441
  78. package/templates/mcp-scaffolding/tests/security.test.cs.hbs +442 -442
  79. package/templates/mcp-scaffolding/tests/service.test.cs.hbs +402 -402
  80. package/templates/mcp-scaffolding/tests/validator.test.cs.hbs +428 -428
  81. package/templates/project/DependencyInjection.Application.cs.template +25 -25
  82. package/templates/project/DependencyInjection.Infrastructure.cs.template +61 -61
  83. package/templates/project/DesignTimeExtensionsDbContextFactory.cs.template +70 -70
  84. package/templates/project/ExampleEntity.cs.template +116 -116
  85. package/templates/project/ExampleEntityConfiguration.cs.template +64 -64
  86. package/templates/project/ExampleService.cs.template +146 -146
  87. package/templates/project/ExtensionsDbContext.cs.template +41 -41
  88. package/templates/project/IExtensionsDbContext.cs.template +22 -22
  89. package/templates/project/Program.cs.template +47 -47
  90. package/templates/project/README.md +79 -79
  91. package/templates/project/api.ts.template +12 -12
  92. package/templates/project/appsettings.json.template +170 -170
  93. package/templates/project/claude-settings.json.template +5 -5
  94. package/templates/project/test-frontend/msw/handlers.ts +58 -58
  95. package/templates/project/test-frontend/msw/server.ts +25 -25
  96. package/templates/project/test-frontend/setup.ts +16 -16
  97. package/templates/project/test-frontend/test-utils.tsx +59 -59
  98. package/templates/project/test-frontend/vitest.config.ts +31 -31
  99. package/templates/ralph/README.md +93 -93
  100. package/templates/ralph/ralph.config.yaml +113 -113
  101. package/templates/scripts/setup-ralph-loop.sh +173 -173
  102. package/templates/skills/_resources/config-safety.md +61 -61
  103. package/templates/skills/_resources/context-digest-template.md +53 -53
  104. package/templates/skills/_resources/doc-context-cache.md +60 -60
  105. package/templates/skills/_resources/docs-manifest-schema.md +155 -155
  106. package/templates/skills/_resources/formatting-guide.md +124 -124
  107. package/templates/skills/_resources/mcp-validate-documentation-spec.md +181 -181
  108. package/templates/skills/_shared.md +228 -228
  109. package/templates/skills/admin/SKILL.md +48 -48
  110. package/templates/skills/ai-prompt/SKILL.md +107 -107
  111. package/templates/skills/ai-prompt/steps/step-00-init.md +47 -47
  112. package/templates/skills/ai-prompt/steps/step-01-implementation.md +122 -122
  113. package/templates/skills/apex/SKILL.md +168 -168
  114. package/templates/skills/apex/_shared.md +141 -141
  115. package/templates/skills/apex/references/agent-teams-protocol.md +164 -164
  116. package/templates/skills/apex/references/analysis-methods.md +141 -141
  117. package/templates/skills/apex/references/challenge-questions.md +145 -145
  118. package/templates/skills/apex/references/code-generation.md +412 -412
  119. package/templates/skills/apex/references/core-seed-data.md +1437 -1437
  120. package/templates/skills/apex/references/error-classification.md +144 -144
  121. package/templates/skills/apex/references/examine-build-validation.md +82 -82
  122. package/templates/skills/apex/references/execution-frontend-gates.md +177 -177
  123. package/templates/skills/apex/references/execution-frontend-patterns.md +105 -105
  124. package/templates/skills/apex/references/execution-layer1-rules.md +96 -96
  125. package/templates/skills/apex/references/initialization-challenge-flow.md +110 -110
  126. package/templates/skills/apex/references/planning-layer-mapping.md +151 -151
  127. package/templates/skills/apex/references/post-checks.md +1584 -1584
  128. package/templates/skills/apex/references/smartstack-api.md +1053 -1053
  129. package/templates/skills/apex/references/smartstack-frontend.md +1571 -1571
  130. package/templates/skills/apex/references/smartstack-layers.md +402 -402
  131. package/templates/skills/apex/steps/step-00-init.md +307 -307
  132. package/templates/skills/apex/steps/step-01-analyze.md +165 -165
  133. package/templates/skills/apex/steps/step-02-plan.md +144 -144
  134. package/templates/skills/apex/steps/step-03-execute.md +328 -328
  135. package/templates/skills/apex/steps/step-04-examine.md +263 -263
  136. package/templates/skills/apex/steps/step-05-deep-review.md +129 -129
  137. package/templates/skills/apex/steps/step-06-resolve.md +101 -101
  138. package/templates/skills/apex/steps/step-07-tests.md +238 -238
  139. package/templates/skills/apex/steps/step-08-run-tests.md +125 -125
  140. package/templates/skills/application/SKILL.md +4 -4
  141. package/templates/skills/application/references/application-roles-template.md +227 -227
  142. package/templates/skills/application/references/backend-controller-hierarchy.md +58 -58
  143. package/templates/skills/application/references/backend-entity-seeding.md +72 -72
  144. package/templates/skills/application/references/backend-seeding-and-dto-output.md +83 -83
  145. package/templates/skills/application/references/backend-table-prefix-mapping.md +79 -79
  146. package/templates/skills/application/references/backend-verification.md +88 -88
  147. package/templates/skills/application/references/frontend-i18n-and-output.md +67 -67
  148. package/templates/skills/application/references/frontend-route-naming.md +117 -117
  149. package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +107 -107
  150. package/templates/skills/application/references/frontend-verification.md +156 -156
  151. package/templates/skills/application/references/migration-checklist-troubleshooting.md +1 -1
  152. package/templates/skills/application/references/provider-template.md +177 -177
  153. package/templates/skills/application/references/roles-client-project-handling.md +55 -55
  154. package/templates/skills/application/references/roles-fallback-procedure.md +149 -149
  155. package/templates/skills/application/references/test-coverage-requirements.md +213 -213
  156. package/templates/skills/application/references/test-frontend.md +73 -73
  157. package/templates/skills/application/references/test-prerequisites.md +72 -72
  158. package/templates/skills/application/steps/step-05-frontend.md +176 -176
  159. package/templates/skills/application/steps/step-06-migration.md +193 -193
  160. package/templates/skills/application/steps/step-07-tests.md +356 -356
  161. package/templates/skills/application/steps/step-08-documentation.md +137 -137
  162. package/templates/skills/application/templates-backend.md +463 -463
  163. package/templates/skills/application/templates-frontend.md +685 -685
  164. package/templates/skills/application/templates-i18n.md +520 -520
  165. package/templates/skills/application/templates-seed.md +1096 -1096
  166. package/templates/skills/business-analyse/SKILL.md +327 -327
  167. package/templates/skills/business-analyse/_architecture.md +123 -123
  168. package/templates/skills/business-analyse/_elicitation.md +206 -206
  169. package/templates/skills/business-analyse/_module-loop.md +115 -115
  170. package/templates/skills/business-analyse/_shared.md +383 -383
  171. package/templates/skills/business-analyse/_suggestions.md +34 -34
  172. package/templates/skills/business-analyse/html/ba-interactive.html +4477 -4477
  173. package/templates/skills/business-analyse/html/build-html.js +77 -77
  174. package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +150 -150
  175. package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +227 -227
  176. package/templates/skills/business-analyse/html/src/scripts/03-render-cadrage.js +199 -199
  177. package/templates/skills/business-analyse/html/src/scripts/04-render-modules.js +205 -205
  178. package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +647 -647
  179. package/templates/skills/business-analyse/html/src/scripts/06-render-consolidation.js +195 -195
  180. package/templates/skills/business-analyse/html/src/scripts/07-render-handoff.js +92 -92
  181. package/templates/skills/business-analyse/html/src/scripts/08-editing.js +135 -135
  182. package/templates/skills/business-analyse/html/src/scripts/09-export.js +168 -168
  183. package/templates/skills/business-analyse/html/src/scripts/10-comments.js +171 -171
  184. package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +166 -166
  185. package/templates/skills/business-analyse/html/src/styles/01-variables.css +38 -38
  186. package/templates/skills/business-analyse/html/src/styles/02-layout.css +101 -101
  187. package/templates/skills/business-analyse/html/src/styles/03-navigation.css +120 -120
  188. package/templates/skills/business-analyse/html/src/styles/04-cards.css +196 -196
  189. package/templates/skills/business-analyse/html/src/styles/05-modules.css +454 -454
  190. package/templates/skills/business-analyse/html/src/styles/06-wireframes.css +272 -272
  191. package/templates/skills/business-analyse/html/src/styles/07-comments.css +184 -184
  192. package/templates/skills/business-analyse/html/src/styles/08-review-panel.css +241 -241
  193. package/templates/skills/business-analyse/html/src/template.html +516 -516
  194. package/templates/skills/business-analyse/patterns/suggestion-catalog.md +546 -546
  195. package/templates/skills/business-analyse/questionnaire/00-application.md +160 -160
  196. package/templates/skills/business-analyse/questionnaire/00b-project.md +85 -85
  197. package/templates/skills/business-analyse/questionnaire/01-context.md +185 -185
  198. package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +189 -189
  199. package/templates/skills/business-analyse/questionnaire/03-scope.md +164 -164
  200. package/templates/skills/business-analyse/questionnaire/04-data.md +88 -88
  201. package/templates/skills/business-analyse/questionnaire/05-integrations.md +58 -58
  202. package/templates/skills/business-analyse/questionnaire/06-security.md +68 -68
  203. package/templates/skills/business-analyse/questionnaire/07-ui.md +76 -76
  204. package/templates/skills/business-analyse/questionnaire/08-performance.md +42 -42
  205. package/templates/skills/business-analyse/questionnaire/09-constraints.md +45 -45
  206. package/templates/skills/business-analyse/questionnaire/10-documentation.md +43 -43
  207. package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +59 -59
  208. package/templates/skills/business-analyse/questionnaire/12-migration.md +58 -58
  209. package/templates/skills/business-analyse/questionnaire/13-cross-module.md +69 -69
  210. package/templates/skills/business-analyse/questionnaire/14-risk-assumptions.md +135 -135
  211. package/templates/skills/business-analyse/questionnaire/15-success-metrics.md +136 -136
  212. package/templates/skills/business-analyse/questionnaire.md +337 -337
  213. package/templates/skills/business-analyse/react/application-viewer.md +242 -242
  214. package/templates/skills/business-analyse/react/components.md +551 -551
  215. package/templates/skills/business-analyse/react/i18n-template.md +306 -306
  216. package/templates/skills/business-analyse/references/acceptance-criteria.md +169 -169
  217. package/templates/skills/business-analyse/references/agent-module-prompt.md +362 -362
  218. package/templates/skills/business-analyse/references/agent-pooling-best-practices.md +557 -557
  219. package/templates/skills/business-analyse/references/analysis-semantic-checks.md +190 -190
  220. package/templates/skills/business-analyse/references/cache-warming-strategy.md +566 -566
  221. package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +41 -41
  222. package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +74 -74
  223. package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +115 -115
  224. package/templates/skills/business-analyse/references/cadrage-shared-modules.md +68 -69
  225. package/templates/skills/business-analyse/references/cadrage-structure-cards.md +85 -85
  226. package/templates/skills/business-analyse/references/compilation-structure-cards.md +297 -297
  227. package/templates/skills/business-analyse/references/consolidation-structural-checks.md +107 -107
  228. package/templates/skills/business-analyse/references/deploy-data-build.md +180 -180
  229. package/templates/skills/business-analyse/references/deploy-modes.md +118 -118
  230. package/templates/skills/business-analyse/references/detection-strategies.md +424 -424
  231. package/templates/skills/business-analyse/references/entity-architecture-decision.md +218 -218
  232. package/templates/skills/business-analyse/references/handoff-file-templates.md +120 -120
  233. package/templates/skills/business-analyse/references/handoff-mappings.md +81 -81
  234. package/templates/skills/business-analyse/references/handoff-seeddata-generation.md +312 -312
  235. package/templates/skills/business-analyse/references/html-data-mapping.md +299 -299
  236. package/templates/skills/business-analyse/references/init-schema-deployment.md +65 -65
  237. package/templates/skills/business-analyse/references/naming-conventions.md +243 -243
  238. package/templates/skills/business-analyse/references/prd-generation.md +258 -258
  239. package/templates/skills/business-analyse/references/review-data-mapping.md +363 -363
  240. package/templates/skills/business-analyse/references/robustness-checks.md +542 -542
  241. package/templates/skills/business-analyse/references/spec-auto-inference.md +111 -111
  242. package/templates/skills/business-analyse/references/team-orchestration.md +1022 -1022
  243. package/templates/skills/business-analyse/references/ui-dashboard-spec.md +85 -85
  244. package/templates/skills/business-analyse/references/ui-resource-cards.md +259 -259
  245. package/templates/skills/business-analyse/references/validate-incremental-html.md +121 -121
  246. package/templates/skills/business-analyse/references/validation-checklist.md +347 -347
  247. package/templates/skills/business-analyse/references/wireframe-svg-style-guide.md +335 -335
  248. package/templates/skills/business-analyse/schemas/application-schema.json +453 -453
  249. package/templates/skills/business-analyse/schemas/feature-schema.json +53 -53
  250. package/templates/skills/business-analyse/schemas/project-schema.json +485 -485
  251. package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +201 -201
  252. package/templates/skills/business-analyse/schemas/sections/discovery-schema.json +82 -82
  253. package/templates/skills/business-analyse/schemas/sections/handoff-schema.json +80 -80
  254. package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +70 -70
  255. package/templates/skills/business-analyse/schemas/sections/specification-schema.json +547 -547
  256. package/templates/skills/business-analyse/schemas/sections/validation-schema.json +93 -93
  257. package/templates/skills/business-analyse/schemas/shared/common-defs.json +226 -226
  258. package/templates/skills/business-analyse/steps/step-00-init.md +575 -576
  259. package/templates/skills/business-analyse/steps/step-01-cadrage.md +767 -767
  260. package/templates/skills/business-analyse/steps/step-01b-applications.md +419 -419
  261. package/templates/skills/business-analyse/steps/step-02-decomposition.md +387 -387
  262. package/templates/skills/business-analyse/steps/step-03a-data.md +16 -16
  263. package/templates/skills/business-analyse/steps/step-03a1-setup.md +506 -506
  264. package/templates/skills/business-analyse/steps/step-03a2-analysis.md +252 -252
  265. package/templates/skills/business-analyse/steps/step-03b-ui.md +425 -425
  266. package/templates/skills/business-analyse/steps/step-03c-compile.md +611 -611
  267. package/templates/skills/business-analyse/steps/step-03d-validate.md +783 -783
  268. package/templates/skills/business-analyse/steps/step-04-consolidation.md +17 -17
  269. package/templates/skills/business-analyse/steps/step-04a-collect.md +415 -415
  270. package/templates/skills/business-analyse/steps/step-04b-analyze.md +163 -163
  271. package/templates/skills/business-analyse/steps/step-04c-decide.md +186 -186
  272. package/templates/skills/business-analyse/steps/step-05a-handoff.md +840 -840
  273. package/templates/skills/business-analyse/steps/step-05b-deploy.md +522 -522
  274. package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +703 -703
  275. package/templates/skills/business-analyse/steps/step-06-review.md +278 -278
  276. package/templates/skills/business-analyse/templates/tpl-frd.md +168 -168
  277. package/templates/skills/business-analyse/templates/tpl-handoff.md +186 -186
  278. package/templates/skills/business-analyse/templates/tpl-launch-displays.md +59 -59
  279. package/templates/skills/business-analyse/templates/tpl-progress.md +172 -172
  280. package/templates/skills/business-analyse/templates-frd.md +476 -476
  281. package/templates/skills/business-analyse/templates-react.md +574 -574
  282. package/templates/skills/cc-agent/SKILL.md +129 -129
  283. package/templates/skills/cc-agent/references/agent-behavior-patterns.md +95 -95
  284. package/templates/skills/cc-agent/references/agent-frontmatter.md +213 -213
  285. package/templates/skills/cc-agent/references/permission-modes.md +102 -102
  286. package/templates/skills/cc-agent/references/tools-reference.md +144 -144
  287. package/templates/skills/cc-agent/steps/step-00-init.md +134 -134
  288. package/templates/skills/cc-agent/steps/step-01-design.md +186 -186
  289. package/templates/skills/cc-agent/steps/step-02-generate.md +131 -131
  290. package/templates/skills/cc-agent/steps/step-03-validate.md +130 -130
  291. package/templates/skills/cc-agent/templates/agent-categorized.md +67 -67
  292. package/templates/skills/cc-agent/templates/agent-standalone.md +56 -56
  293. package/templates/skills/cc-agent/templates/agent-with-skills.md +94 -94
  294. package/templates/skills/cc-audit/SKILL.md +108 -108
  295. package/templates/skills/cc-audit/references/agent-checklist.md +91 -91
  296. package/templates/skills/cc-audit/references/hook-checklist.md +110 -110
  297. package/templates/skills/cc-audit/references/skill-checklist.md +70 -70
  298. package/templates/skills/cc-audit/steps/step-00-init.md +98 -98
  299. package/templates/skills/cc-audit/steps/step-01-scan.md +142 -142
  300. package/templates/skills/cc-audit/steps/step-02-analyze.md +158 -158
  301. package/templates/skills/cc-audit/steps/step-03-report.md +142 -142
  302. package/templates/skills/cc-skill/SKILL.md +134 -134
  303. package/templates/skills/cc-skill/references/best-practices.md +167 -167
  304. package/templates/skills/cc-skill/references/frontmatter-reference.md +182 -182
  305. package/templates/skills/cc-skill/references/skill-patterns.md +199 -199
  306. package/templates/skills/cc-skill/steps/step-00-init.md +119 -119
  307. package/templates/skills/cc-skill/steps/step-01-design.md +199 -199
  308. package/templates/skills/cc-skill/steps/step-02-generate.md +145 -145
  309. package/templates/skills/cc-skill/steps/step-03-steps.md +151 -151
  310. package/templates/skills/cc-skill/steps/step-04-validate.md +124 -124
  311. package/templates/skills/cc-skill/templates/skill-forked.md +85 -85
  312. package/templates/skills/cc-skill/templates/skill-progressive.md +102 -102
  313. package/templates/skills/cc-skill/templates/skill-simple.md +75 -75
  314. package/templates/skills/cc-skill/templates/step-template.md +82 -82
  315. package/templates/skills/check-version/SKILL.md +196 -196
  316. package/templates/skills/controller/SKILL.md +162 -162
  317. package/templates/skills/controller/postman-templates.md +614 -614
  318. package/templates/skills/controller/references/controller-code-templates.md +159 -159
  319. package/templates/skills/controller/references/mcp-scaffold-workflow.md +209 -209
  320. package/templates/skills/controller/references/permission-sync-templates.md +149 -149
  321. package/templates/skills/controller/steps/step-00-init.md +193 -191
  322. package/templates/skills/controller/steps/step-01-analyze.md +146 -146
  323. package/templates/skills/controller/steps/step-02-plan.md +176 -176
  324. package/templates/skills/controller/steps/step-03-generate.md +189 -189
  325. package/templates/skills/controller/steps/step-04-perms.md +80 -80
  326. package/templates/skills/controller/steps/step-05-validate.md +107 -107
  327. package/templates/skills/controller/templates.md +1555 -1555
  328. package/templates/skills/debug/SKILL.md +70 -70
  329. package/templates/skills/debug/references/team-protocol.md +232 -232
  330. package/templates/skills/debug/steps/step-00-init.md +57 -57
  331. package/templates/skills/debug/steps/step-01-analyze.md +219 -219
  332. package/templates/skills/debug/steps/step-02-resolve.md +85 -85
  333. package/templates/skills/documentation/SKILL.md +132 -132
  334. package/templates/skills/documentation/data-schema.md +227 -227
  335. package/templates/skills/documentation/steps/step-00-init.md +70 -70
  336. package/templates/skills/documentation/steps/step-01-scan.md +113 -113
  337. package/templates/skills/documentation/steps/step-02-generate.md +231 -231
  338. package/templates/skills/documentation/steps/step-03-validate.md +251 -238
  339. package/templates/skills/documentation/templates.md +662 -663
  340. package/templates/skills/efcore/SKILL.md +168 -167
  341. package/templates/skills/efcore/references/both-contexts.md +32 -32
  342. package/templates/skills/efcore/references/database-operations.md +67 -67
  343. package/templates/skills/efcore/references/destructive-operations.md +38 -38
  344. package/templates/skills/efcore/references/reset-operations.md +81 -81
  345. package/templates/skills/efcore/references/seed-methods.md +86 -86
  346. package/templates/skills/efcore/references/shared-init-functions.md +250 -250
  347. package/templates/skills/efcore/references/sql-objects-injection.md +61 -61
  348. package/templates/skills/efcore/references/troubleshooting.md +81 -81
  349. package/templates/skills/efcore/references/zero-downtime-patterns.md +227 -227
  350. package/templates/skills/efcore/steps/db/step-deploy.md +217 -217
  351. package/templates/skills/efcore/steps/db/step-reset.md +186 -186
  352. package/templates/skills/efcore/steps/db/step-seed.md +166 -166
  353. package/templates/skills/efcore/steps/db/step-status.md +173 -173
  354. package/templates/skills/efcore/steps/migration/step-00-init.md +102 -102
  355. package/templates/skills/efcore/steps/migration/step-01-check.md +164 -164
  356. package/templates/skills/efcore/steps/migration/step-02-create.md +160 -160
  357. package/templates/skills/efcore/steps/migration/step-03-validate.md +168 -168
  358. package/templates/skills/efcore/steps/rebase-snapshot/step-00-init.md +173 -173
  359. package/templates/skills/efcore/steps/rebase-snapshot/step-01-backup.md +100 -100
  360. package/templates/skills/efcore/steps/rebase-snapshot/step-02-fetch.md +115 -115
  361. package/templates/skills/efcore/steps/rebase-snapshot/step-03-create.md +112 -112
  362. package/templates/skills/efcore/steps/rebase-snapshot/step-04-validate.md +157 -157
  363. package/templates/skills/efcore/steps/shared/step-00-init.md +131 -131
  364. package/templates/skills/efcore/steps/squash/step-00-init.md +141 -141
  365. package/templates/skills/efcore/steps/squash/step-01-backup.md +120 -120
  366. package/templates/skills/efcore/steps/squash/step-02-fetch.md +168 -168
  367. package/templates/skills/efcore/steps/squash/step-03-create.md +184 -184
  368. package/templates/skills/efcore/steps/squash/step-04-validate.md +174 -174
  369. package/templates/skills/explore/SKILL.md +98 -98
  370. package/templates/skills/feature-full/SKILL.md +111 -111
  371. package/templates/skills/feature-full/steps/step-00-init.md +57 -57
  372. package/templates/skills/feature-full/steps/step-01-implementation.md +120 -120
  373. package/templates/skills/gitflow/SKILL.md +377 -377
  374. package/templates/skills/gitflow/_shared.md +620 -620
  375. package/templates/skills/gitflow/phases/abort.md +189 -189
  376. package/templates/skills/gitflow/phases/cleanup.md +234 -234
  377. package/templates/skills/gitflow/phases/status.md +192 -192
  378. package/templates/skills/gitflow/references/commit-message-generation.md +58 -58
  379. package/templates/skills/gitflow/references/commit-migration-validation.md +49 -49
  380. package/templates/skills/gitflow/references/finish-cleanup.md +55 -55
  381. package/templates/skills/gitflow/references/finish-version-bumping.md +45 -45
  382. package/templates/skills/gitflow/references/init-config-template.md +135 -135
  383. package/templates/skills/gitflow/references/init-environment-detection.md +41 -41
  384. package/templates/skills/gitflow/references/init-name-normalization.md +103 -103
  385. package/templates/skills/gitflow/references/init-questions.md +185 -185
  386. package/templates/skills/gitflow/references/init-structure-creation.md +75 -75
  387. package/templates/skills/gitflow/references/init-version-detection.md +21 -21
  388. package/templates/skills/gitflow/references/init-workspace-detection.md +43 -43
  389. package/templates/skills/gitflow/references/merge-ci-status.md +36 -36
  390. package/templates/skills/gitflow/references/merge-execution.md +62 -62
  391. package/templates/skills/gitflow/references/merge-pr-context.md +76 -76
  392. package/templates/skills/gitflow/references/plan-template.md +69 -69
  393. package/templates/skills/gitflow/references/pr-build-checks.md +60 -60
  394. package/templates/skills/gitflow/references/pr-generation.md +58 -58
  395. package/templates/skills/gitflow/references/start-branch-normalization.md +28 -28
  396. package/templates/skills/gitflow/references/start-efcore-preflight.md +70 -70
  397. package/templates/skills/gitflow/references/start-local-config.md +113 -113
  398. package/templates/skills/gitflow/references/start-worktree-creation.md +50 -50
  399. package/templates/skills/gitflow/references/sync-push-verify.md +44 -44
  400. package/templates/skills/gitflow/references/sync-rebase-conflicts.md +38 -38
  401. package/templates/skills/gitflow/steps/step-commit.md +199 -199
  402. package/templates/skills/gitflow/steps/step-finish.md +147 -147
  403. package/templates/skills/gitflow/steps/step-init.md +190 -190
  404. package/templates/skills/gitflow/steps/step-merge.md +85 -85
  405. package/templates/skills/gitflow/steps/step-plan.md +151 -151
  406. package/templates/skills/gitflow/steps/step-pr.md +199 -199
  407. package/templates/skills/gitflow/steps/step-start.md +195 -195
  408. package/templates/skills/gitflow/steps/step-sync.md +161 -161
  409. package/templates/skills/gitflow/templates/config.json +72 -72
  410. package/templates/skills/mcp/SKILL.md +62 -62
  411. package/templates/skills/mcp/steps/step-01-healthcheck.md +108 -108
  412. package/templates/skills/mcp/steps/step-02-tools.md +73 -73
  413. package/templates/skills/notification/SKILL.md +173 -173
  414. package/templates/skills/quick-search/SKILL.md +99 -99
  415. package/templates/skills/ralph-loop/SKILL.md +234 -234
  416. package/templates/skills/ralph-loop/references/category-completeness.md +185 -185
  417. package/templates/skills/ralph-loop/references/category-rules.md +96 -96
  418. package/templates/skills/ralph-loop/references/compact-loop.md +300 -300
  419. package/templates/skills/ralph-loop/references/init-resume-recovery.md +127 -127
  420. package/templates/skills/ralph-loop/references/module-transition.md +151 -151
  421. package/templates/skills/ralph-loop/references/multi-module-queue.md +171 -171
  422. package/templates/skills/ralph-loop/references/parallel-execution.md +246 -246
  423. package/templates/skills/ralph-loop/references/section-splitting.md +439 -439
  424. package/templates/skills/ralph-loop/references/task-transform-legacy.md +256 -256
  425. package/templates/skills/ralph-loop/references/team-orchestration.md +547 -547
  426. package/templates/skills/ralph-loop/steps/step-00-init.md +150 -150
  427. package/templates/skills/ralph-loop/steps/step-01-task.md +174 -174
  428. package/templates/skills/ralph-loop/steps/step-02-execute.md +177 -177
  429. package/templates/skills/ralph-loop/steps/step-03-commit.md +92 -92
  430. package/templates/skills/ralph-loop/steps/step-04-check.md +207 -207
  431. package/templates/skills/ralph-loop/steps/step-05-report.md +175 -175
  432. package/templates/skills/refactor/SKILL.md +56 -56
  433. package/templates/skills/refactor/steps/step-01-discover.md +60 -60
  434. package/templates/skills/refactor/steps/step-02-execute.md +67 -67
  435. package/templates/skills/review-code/SKILL.md +95 -94
  436. package/templates/skills/review-code/references/clean-code-principles.md +292 -292
  437. package/templates/skills/review-code/references/code-quality-metrics.md +174 -174
  438. package/templates/skills/review-code/references/feedback-patterns.md +149 -149
  439. package/templates/skills/review-code/references/owasp-api-top10.md +243 -243
  440. package/templates/skills/review-code/references/security-checklist.md +212 -212
  441. package/templates/skills/review-code/steps/step-01-smartstack.md +96 -96
  442. package/templates/skills/review-code/steps/step-02-detailed-review.md +80 -80
  443. package/templates/skills/review-code/steps/step-03-react.md +44 -44
  444. package/templates/skills/ui-components/SKILL.md +137 -137
  445. package/templates/skills/ui-components/accessibility.md +170 -170
  446. package/templates/skills/ui-components/patterns/dashboard-chart.md +327 -327
  447. package/templates/skills/ui-components/patterns/data-table.md +39 -39
  448. package/templates/skills/ui-components/patterns/entity-card.md +77 -77
  449. package/templates/skills/ui-components/patterns/grid-layout.md +91 -91
  450. package/templates/skills/ui-components/patterns/kanban.md +43 -43
  451. package/templates/skills/ui-components/responsive-guidelines.md +278 -278
  452. package/templates/skills/ui-components/style-guide.md +113 -113
  453. package/templates/skills/utils/SKILL.md +44 -44
  454. package/templates/skills/utils/subcommands/test-web-config.md +152 -152
  455. package/templates/skills/utils/subcommands/test-web.md +123 -123
  456. package/templates/skills/validate/SKILL.md +181 -181
  457. package/templates/skills/validate-feature/SKILL.md +101 -101
  458. package/templates/skills/validate-feature/references/api-smoke-tests.md +140 -140
  459. package/templates/skills/validate-feature/references/db-validation-checks.md +180 -180
  460. package/templates/skills/validate-feature/steps/step-00-dependencies.md +121 -121
  461. package/templates/skills/validate-feature/steps/step-01-compile.md +39 -39
  462. package/templates/skills/validate-feature/steps/step-02-unit-tests.md +45 -45
  463. package/templates/skills/validate-feature/steps/step-03-integration-tests.md +53 -53
  464. package/templates/skills/validate-feature/steps/step-04-api-smoke.md +94 -94
  465. package/templates/skills/validate-feature/steps/step-05-db-validation.md +149 -149
  466. package/templates/skills/workflow/SKILL.md +127 -127
  467. package/templates/skills/workflow/steps/step-00-init.md +57 -57
  468. package/templates/skills/workflow/steps/step-01-implementation.md +84 -84
  469. package/templates/test-web/api-health.json +38 -38
  470. package/templates/test-web/minimal.json +19 -19
  471. package/templates/test-web/npm-package.json +46 -46
  472. package/templates/test-web/seo-check.json +54 -54
@@ -1,522 +1,522 @@
1
- ---
2
- name: step-05b-deploy
3
- description: Generate prd.json, deploy artifacts, interactive HTML
4
- model: sonnet
5
- next_step: steps/step-05c-ralph-readiness.md
6
- ---
7
-
8
- > **Context files:** _shared.md
9
-
10
- # Step 5b: Deploy Artifacts & Interactive HTML
11
-
12
- ## MANDATORY EXECUTION RULES
13
-
14
- - **ALWAYS** verify all module handoffs are complete before generating artifacts
15
- - **ALWAYS** derive prd.json from feature.json (NEVER independently)
16
- - **NEVER** invent entities/FRs/BRs not in feature.json
17
- - **ALWAYS** update BA manifest at docs/index.json
18
- - **ALWAYS** deploy ba-interactive.html PRE-POPULATED with all data
19
- - **ALWAYS** follow references/html-data-mapping.md EXACTLY for FEATURE_DATA and EMBEDDED_ARTIFACTS mapping
20
- - **FEATURE_DATA.moduleSpecs MUST be populated for EACH module** — empty moduleSpecs = BROKEN specification tabs
21
- - **FEATURE_DATA.cadrage.scope must use HTML keys** (vital/important/optional/excluded) NOT feature.json keys (mustHave/shouldHave/couldHave/outOfScope)
22
- - **FEATURE_DATA.metadata.analysisMode must be set** from master.metadata.analysisMode (always "interactive")
23
- - **NEVER leave FEATURE_DATA or EMBEDDED_ARTIFACTS empty or partial**
24
-
25
- ## YOUR TASK
26
-
27
- Generate deployment artifacts (prd.json, progress.txt, BA manifest) and deploy the interactive HTML document pre-populated with all analysis data.
28
-
29
- ---
30
-
31
- ## EXECUTION SEQUENCE
32
-
33
- ### 0. Pre-flight Verification
34
-
35
- Before generating ANY artifact, verify step-05a completed successfully:
36
-
37
- ```
38
- FOR each module in modules[]:
39
- Read module feature.json
40
- IF module.handoff === {} OR module.status !== "handed-off":
41
- → BLOCKING ERROR: Module {module.code} has no handoff data
42
- → Return to step-05a-handoff.md
43
- ```
44
-
45
- IF all modules have valid handoff → proceed.
46
-
47
- ---
48
-
49
- ### 1. Generate prd.json (PROGRAMMATIC)
50
-
51
- > **RULE:** prd.json is extracted by CLI code, **NEVER** generated by LLM.
52
- > The `ss derive-prd` command performs a deterministic data transformation from feature.json.
53
-
54
- **For each module:**
55
-
56
- ```
57
- Execute: ss derive-prd --feature {moduleFeaturePath} --output .ralph/prd-{moduleCode}.json
58
- ```
59
-
60
- **For consolidated view (multi-module, optional):**
61
-
62
- ```
63
- Execute: ss derive-prd --application {masterFeaturePath}
64
- → Generates .ralph/prd-{moduleCode}.json for each module
65
- ```
66
-
67
- **Verification:** After execution, read the generated prd.json and display summary:
68
-
69
- ```
70
- prd.json generated for module {moduleCode}:
71
- - Use cases: {count}
72
- - Functional requirements: {count}
73
- - Business rules: {count}
74
- - API endpoints: {count}
75
- - Sections: {count}
76
- - Files to create: {count}
77
- - BR-to-code mappings: {count}
78
- ```
79
-
80
- **Key guarantees:**
81
- - Source MUST reference feature.json path (traceability)
82
- - All data is EXACT COPY from feature.json (no transformation, no invention)
83
- - prd.json $version: "3.0.0" (unified format with pre-computed tasks)
84
- - source.type: "ba-handoff-programmatic"
85
-
86
- **POST-CHECK (BLOCKING — DO NOT SKIP):**
87
-
88
- After `ss derive-prd` execution, read the generated prd-{moduleCode}.json and verify structural integrity:
89
-
90
- ```javascript
91
- const prd = readJSON(`.ralph/prd-${moduleCode}.json`);
92
- const featureHandoff = moduleFeature.handoff.filesToCreate;
93
-
94
- // 1. Verify structure: filesToCreate MUST be under implementation (NOT root level)
95
- if (prd.filesToCreate && !prd.implementation?.filesToCreate) {
96
- BLOCKING_ERROR("prd.json has filesToCreate at ROOT level — this is NOT from ss derive-prd");
97
- BLOCKING_ERROR("Re-run: ss derive-prd --feature {path} --output .ralph/prd-{moduleCode}.json");
98
- STOP;
99
- }
100
-
101
- // 2. Verify ALL 7 categories present and match feature.json
102
- const categories = ['domain', 'application', 'infrastructure', 'api', 'frontend', 'seedData', 'tests'];
103
- for (const cat of categories) {
104
- const prdCount = prd.implementation.filesToCreate[cat]?.length ?? 0;
105
- const featureCount = featureHandoff[cat]?.length ?? 0;
106
- if (prdCount !== featureCount) {
107
- BLOCKING_ERROR(`${cat}: prd has ${prdCount} files but feature.json has ${featureCount}`);
108
- }
109
- }
110
- ```
111
-
112
- Display verification table:
113
-
114
- ```
115
- POST-CHECK: prd-{moduleCode}.json integrity
116
- | Category | feature.json | prd.json | Match |
117
- |----------------|-------------|----------|-------|
118
- | domain | {n} | {n} | OK/FAIL |
119
- | application | {n} | {n} | OK/FAIL |
120
- | infrastructure | {n} | {n} | OK/FAIL |
121
- | api | {n} | {n} | OK/FAIL |
122
- | frontend | {n} | {n} | OK/FAIL |
123
- | seedData | {n} | {n} | OK/FAIL |
124
- | tests | {n} | {n} | OK/FAIL |
125
- ```
126
-
127
- IF ANY category shows FAIL → **STOP AND RE-RUN `ss derive-prd`**. DO NOT proceed with incomplete PRD.
128
-
129
- ---
130
-
131
- ### 2. Initialize Progress Tracker
132
-
133
- > **Template:** Read `templates/tpl-progress.md` for the complete progress tracker template structure.
134
- > Populate the template with module-specific data from feature.json handoff sections.
135
-
136
- **Progress Tracker Rules:**
137
- - One section per module, in topological order (dependencies first)
138
- - CORE SeedData ALWAYS 5 entries (mandatory)
139
- - Business SeedData varies by module
140
- - Hierarchical task structure (module -> layer -> tasks)
141
- - Each task is independent, assignable checkbox
142
- - Effort estimate per module (simple/medium/complex)
143
- - Summary with totals across all modules
144
- - Cross-module tasks only if multi-module
145
-
146
- ---
147
-
148
- ### 3. Update BA Manifest (MANDATORY)
149
-
150
- > **The BA manifest enables the SmartStack web app to discover and display all available business analyses.**
151
- > It is a JSON index file at `docs/index.json` that lists all feature.json files.
152
-
153
- **Path:** `docs/index.json` (project root relative)
154
-
155
- **Schema:**
156
- ```json
157
- {
158
- "version": "1.0",
159
- "updatedAt": "{ISO timestamp}",
160
- "analyses": [
161
- {
162
- "appCode": "{app_code}",
163
- "appName": "{application_name}",
164
- "moduleCode": null | "{module_code}",
165
- "moduleName": "{module_name}",
166
- "version": "{version}",
167
- "status": "handed-off",
168
- "featureDescription": "{feature_description}",
169
- "path": "{app_code}/business-analyse/v{version}/feature.json",
170
- "updatedAt": "{ISO timestamp}"
171
- }
172
- ]
173
- }
174
- ```
175
-
176
- > Note: The "path" field uses `{app_code}` directly without any prefix (e.g., `FreeBike/business-analyse/v1.0/feature.json`).
177
-
178
- **Update logic:**
179
-
180
- 1. Read existing manifest at `docs/index.json` (or create empty `{ "version": "1.0", "updatedAt": "", "analyses": [] }`)
181
-
182
- 2. **PROJECT MODE (`workflow.mode === "project"`):**
183
- a. Add/update PROJECT-level entry:
184
- - Find existing entry where `projectId == {project_id}` AND `scope == "project"`
185
- - If found: update `status`, `updatedAt`
186
- - If not found: append new entry with `scope: "project"`, `projectId: "{project_id}"`, `path: "business-analyse/v{version}/feature.json"`
187
- b. For EACH APPLICATION:
188
- - Find existing entry where `appCode == {app_code}` AND `moduleCode == null` AND `version == {version}`
189
- - If found: update `status`, `updatedAt`, `featureDescription`
190
- - If not found: append new entry with `moduleCode: null` and `path: "{app_code}/business-analyse/v{version}/feature.json"`
191
- c. For EACH MODULE within each application:
192
- - Find existing entry where `appCode == {app_code}` AND `moduleCode == {module_code}` AND `version == {version}`
193
- - If found: update `status`, `updatedAt`, `featureDescription`
194
- - If not found: append new entry with `path: "{app_code}/{module_code}/business-analyse/v{version}/feature.json"`
195
-
196
- 3. **SINGLE-APP MODE (default):**
197
- a. For the APPLICATION-level feature.json:
198
- - Find existing entry where `appCode == {app_code}` AND `moduleCode == null` AND `version == {version}`
199
- - If found: update `status`, `updatedAt`, `featureDescription`
200
- - If not found: append new entry with `moduleCode: null` and `path: "{app_code}/business-analyse/v{version}/feature.json"`
201
- b. For EACH MODULE-level feature.json:
202
- - Find existing entry where `appCode == {app_code}` AND `moduleCode == {module_code}` AND `version == {version}`
203
- - If found: update `status`, `updatedAt`, `featureDescription`
204
- - If not found: append new entry with `moduleCode: "{module_code}"` and `path: "{app_code}/{module_code}/business-analyse/v{version}/feature.json"`
205
-
206
- 4. Update root `updatedAt` to current timestamp
207
- 5. Write manifest back to `docs/index.json`
208
-
209
- **Display confirmation:**
210
- ```
211
- ✓ BA manifest updated: docs/index.json
212
- Entries: {total_count} ({project_count} projects, {app_count} applications, {module_count} modules)
213
- Web viewer: /system/docs/ba
214
- ```
215
-
216
- **Why a manifest?**
217
- - The web app needs to discover available BAs without scanning the filesystem
218
- - Static file serving (no backend API needed)
219
- - Incremental updates: each handoff adds/updates only its entries
220
- - Consumed by the SmartStack web app BA viewer at `/system/docs/ba`
221
-
222
- ---
223
-
224
- ### 4. Read Source Data for HTML
225
-
226
- 1. Read the HTML template from skill directory: `html/ba-interactive.html` (relative to `~/.claude/skills/business-analyse/`)
227
- 2. **SINGLE-APP MODE:** Read the master feature.json (application level)
228
- 3. **PROJECT MODE:** Read the project feature.json + ALL application feature.json files
229
- 4. Read EACH module feature.json (module level, across all applications in project mode)
230
-
231
- > **Reference:** Read `references/html-data-mapping.md` for the complete FEATURE_DATA and EMBEDDED_ARTIFACTS mapping specification.
232
-
233
- **Key requirements:**
234
- - FEATURE_DATA must be pre-populated with ALL analysis data (empty data = BUG)
235
- - FEATURE_DATA.**moduleSpecs** MUST be populated for EACH module across ALL applications (use cases, business rules, entities, permissions) — empty moduleSpecs = BROKEN specification tabs
236
- - FEATURE_DATA.**cadrage.scope** must use HTML keys (vital/important/optional/excluded) NOT feature.json keys (mustHave/shouldHave/couldHave/outOfScope)
237
- - FEATURE_DATA.**metadata.analysisMode** must be set from `master.metadata.analysisMode` (always "interactive")
238
- - EMBEDDED_ARTIFACTS contains wireframes, E2E diagrams, dependency graph
239
- - Both objects are serialized as JSON with 2-space indentation
240
- - All data mapped from master and module feature.json files — follow `html-data-mapping.md` EXACTLY
241
-
242
- **PROJECT MODE additions to FEATURE_DATA:**
243
- - `FEATURE_DATA.project` — project-level metadata (name, applicationCount, applicationOrder)
244
- - `FEATURE_DATA.applications` — array of application summaries with their modules
245
- - `FEATURE_DATA.modules` — flattened list of ALL modules across ALL applications (each with `applicationCode` field)
246
- - `FEATURE_DATA.consolidation.crossApplicationInteractions` — from project feature.json
247
- - FEATURE_DATA.**metadata.workflowMode** must be `"project"` (enables multi-app tabs in HTML)
248
-
249
- ---
250
-
251
- ### 5-7. Build FEATURE_DATA, EMBEDDED_ARTIFACTS & Replace Placeholders
252
-
253
- See [references/deploy-data-build.md](../references/deploy-data-build.md) for:
254
- - Complete FEATURE_DATA object structure (metadata, cadrage, modules, moduleSpecs, consolidation, handoff)
255
- - Complete EMBEDDED_ARTIFACTS object structure (wireframes, e2eFlows, dependencyGraph)
256
- - 7-step build process for FEATURE_DATA
257
- - 4-step artifact gathering for EMBEDDED_ARTIFACTS
258
- - Placeholder replacement rules (8 placeholders)
259
-
260
- **Critical reminders:**
261
- - FEATURE_DATA.**moduleSpecs** MUST have ONE entry per module (empty = BUG)
262
- - FEATURE_DATA.**cadrage.scope** converts `mustHave→vital`, `shouldHave→important`, `couldHave→optional`, `outOfScope→excluded`
263
- - FEATURE_DATA.**metadata.analysisMode** from `master.metadata.analysisMode`
264
- - Also reference `references/html-data-mapping.md` for the full mapping spec
265
-
266
- ---
267
-
268
- ### 7-bis. Generate SVG Wireframes (Parallel Enrichment)
269
-
270
- > **After EMBEDDED_ARTIFACTS is built (sections 5-7) but BEFORE writing the HTML (section 8).**
271
- > This step enriches each ASCII wireframe with a professional SVG version for dual-view rendering.
272
-
273
- See [references/wireframe-svg-style-guide.md](../references/wireframe-svg-style-guide.md) for the complete SVG style specification, prompt template, and orchestration process.
274
-
275
- **Process summary:**
276
-
277
- 1. **Read** `references/wireframe-svg-style-guide.md` to get the prompt template
278
- 2. **Collect** all wireframes across ALL modules in `EMBEDDED_ARTIFACTS.wireframes` where `content` exists and `svgContent` is null
279
- 3. **Spawn parallel Task(sonnet) agents** — ONE per wireframe, ALL in a single message
280
- 4. **Collect and validate** results: strip markdown fences if present, verify SVG starts with `<svg` and contains `</svg>`
281
- 5. **Inject** valid SVGs into `EMBEDDED_ARTIFACTS.wireframes[moduleCode][index].svgContent`
282
- 6. **Display summary:**
283
- ```
284
- SVG wireframe generation:
285
- Total wireframes: {total}
286
- SVG generated: {successCount}/{total}
287
- Fallback (ASCII only): {failCount}/{total}
288
- ```
289
-
290
- > **CRITICAL:** This step is NEVER blocking. If all SVG generations fail, deployment
291
- > continues with ASCII-only wireframes. The HTML renderer checks for `svgContent` before
292
- > showing the SVG view. SVG is an enhancement, not a requirement.
293
-
294
- ---
295
-
296
- ### 8. Write and Verify
297
-
298
- 1. Write the populated HTML to the output directory: `docs/{app}/business-analyse/v{version}/ba-interactive.html`
299
- 2. Display deployment confirmation:
300
-
301
- ```
302
- [OK] Interactive HTML deployed:
303
- Path: docs/{app}/business-analyse/v{version}/ba-interactive.html
304
- Pre-populated with: {stakeholder_count} stakeholders, {module_count} modules,
305
- {total_uc} use cases, {total_br} business rules, {total_entity} entities
306
- Visual artifacts: {total_wireframes} wireframes, {e2e_flow_count} E2E diagrams
307
- Open in browser to review and edit the business analysis.
308
- Export JSON and re-import with: /business-analyse -x <exported-json-path>
309
- ```
310
-
311
- ---
312
-
313
- ## SELF-VERIFICATION (BEFORE COMPLETION)
314
-
315
- Before displaying completion, VERIFY:
316
-
317
- 1. **`.ralph/prd-{module}.json`** exists for ALL modules (file size > 100 bytes each)
318
- 2. **`.ralph/progress.txt`** exists (file size > 500 bytes)
319
- 3. **`docs/index.json`** exists with correct entry count
320
- 4. **ba-interactive.html** exists and file size > 100KB
321
- 5. **FEATURE_DATA contains moduleSpecs** with entries for ALL modules
322
- 6. **cadrage.scope uses HTML keys** (vital/important/optional/excluded)
323
-
324
- **IF any check fails → GENERATE the missing artifact before proceeding to completion.**
325
-
326
- ---
327
-
328
- ## POST-CHECK (BLOCKING)
329
-
330
- After writing the HTML file, verify:
331
-
332
- 1. **File size > 100KB** (indicates pre-populated, not empty template)
333
- ```bash
334
- file_size=$(stat --format=%s "{output_path}/ba-interactive.html")
335
- if [ $file_size -lt 100000 ]; then
336
- BLOCKING_ERROR("ba-interactive.html is only ${file_size} bytes — not pre-populated")
337
- fi
338
- ```
339
-
340
- 2. **Grep for "moduleSpecs"** — MUST be present in generated HTML
341
- ```bash
342
- if ! grep -q '"moduleSpecs"' "{output_path}/ba-interactive.html"; then
343
- BLOCKING_ERROR("moduleSpecs not found in HTML — FEATURE_DATA not serialized correctly")
344
- fi
345
- ```
346
-
347
- 3. **moduleSpecs must have entries for ALL modules** (not empty object `{}`)
348
- ```bash
349
- # Count moduleSpecs entries — should equal module count
350
- moduleSpec_count=$(grep -o '"moduleCode"' "{output_path}/ba-interactive.html" | wc -l)
351
- if [ $moduleSpec_count -lt {module_count} ]; then
352
- BLOCKING_ERROR("moduleSpecs has only ${moduleSpec_count} entries but need {module_count}")
353
- fi
354
- ```
355
-
356
- 4. **cadrage.scope must use HTML keys** (vital/important/optional/excluded)
357
- ```bash
358
- if grep -q '"mustHave"' "{output_path}/ba-interactive.html"; then
359
- BLOCKING_ERROR("cadrage.scope still has feature.json keys (mustHave) — must convert to HTML keys (vital)")
360
- fi
361
- ```
362
-
363
- 5. **EMBEDDED_ARTIFACTS wireframes must use renamed fields** (`format`/`content`, NOT `mockupFormat`/`mockup`)
364
- ```bash
365
- # Check that wireframe field rename was applied (mockup → content, mockupFormat → format)
366
- if grep -q '"mockupFormat"' "{output_path}/ba-interactive.html"; then
367
- BLOCKING_ERROR("EMBEDDED_ARTIFACTS wireframes still use 'mockupFormat' — must rename to 'format'")
368
- BLOCKING_ERROR("See references/html-data-mapping.md for correct field mapping")
369
- fi
370
- if grep -q '"mockup":' "{output_path}/ba-interactive.html" | grep -v '"mockupNotes"'; then
371
- # Note: "mockup" in EMBEDDED_ARTIFACTS = wrong, must be "content"
372
- BLOCKING_ERROR("EMBEDDED_ARTIFACTS wireframes still use 'mockup' — must rename to 'content'")
373
- fi
374
- ```
375
-
376
- 6. **EMBEDDED_ARTIFACTS wireframes must exist for ALL modules** (not empty `{}`)
377
- ```bash
378
- # Each module should have at least one wireframe with "format" and "content"
379
- if ! grep -q '"format"' "{output_path}/ba-interactive.html"; then
380
- BLOCKING_ERROR("No wireframe 'format' field found — EMBEDDED_ARTIFACTS wireframes not populated")
381
- fi
382
- ```
383
-
384
- 7. **WIREFRAME KEY ALIGNMENT** — wireframe keys MUST match module codes exactly
385
- ```
386
- FOR each module in FEATURE_DATA.modules:
387
- moduleCode = module.code (e.g., "GestionTemps")
388
- IF EMBEDDED_ARTIFACTS.wireframes[moduleCode] is undefined OR empty:
389
- BLOCKING_ERROR("Wireframe key mismatch: module code '${moduleCode}' not found in EMBEDDED_ARTIFACTS.wireframes")
390
- BLOCKING_ERROR("Available wireframe keys: ${Object.keys(EMBEDDED_ARTIFACTS.wireframes).join(', ')}")
391
- → FIX: Rename the wireframe key to match module.code exactly
392
- ```
393
- > **Why this matters:** The HTML renders wireframes via `EMBEDDED_ARTIFACTS.wireframes[code]`. If the key doesn't match the module code (e.g., "TimeTracking" vs "GestionTemps"), the wireframes tab shows "Aucune maquette disponible" even though data exists.
394
-
395
- 8. **MODULE COMPLETENESS** — every module must have spec data AND wireframes in HTML
396
- ```
397
- FOR each module in master.modules[]:
398
- IF FEATURE_DATA.moduleSpecs[module.code] is undefined:
399
- BLOCKING_ERROR("Module '${module.code}' missing from FEATURE_DATA.moduleSpecs")
400
- IF EMBEDDED_ARTIFACTS.wireframes[module.code] is undefined:
401
- BLOCKING_ERROR("Module '${module.code}' missing from EMBEDDED_ARTIFACTS.wireframes")
402
- IF module.featureJsonPath is null:
403
- BLOCKING_ERROR("Module '${module.code}' has no per-module feature.json (featureJsonPath is null)")
404
-
405
- expectedModules = master.modules.map(m => m.code).sort()
406
- specModules = Object.keys(FEATURE_DATA.moduleSpecs).sort()
407
- wireframeModules = Object.keys(EMBEDDED_ARTIFACTS.wireframes).sort()
408
-
409
- IF expectedModules.join(',') !== specModules.join(','):
410
- BLOCKING_ERROR("Module mismatch: expected [${expectedModules}] but moduleSpecs has [${specModules}]")
411
- IF expectedModules.join(',') !== wireframeModules.join(','):
412
- BLOCKING_ERROR("Module mismatch: expected [${expectedModules}] but wireframes has [${wireframeModules}]")
413
- ```
414
-
415
- 9. **MODULE DATA COMPLETENESS** — every module in FEATURE_DATA.modules[] must carry ALL fields from feature.json
416
- ```
417
- FOR each htmlModule in FEATURE_DATA.modules[]:
418
- masterModule = master.modules.find(m => m.code === htmlModule.code)
419
-
420
- // name MUST be display name, NOT code
421
- IF htmlModule.name === htmlModule.code AND masterModule.name !== masterModule.code:
422
- BLOCKING_ERROR("Module '${htmlModule.code}' has name === code. Expected: '${masterModule.name}'")
423
-
424
- // anticipatedSections MUST be present (drives Structure tab + navigation tree)
425
- IF masterModule.anticipatedSections?.length > 0 AND (!htmlModule.anticipatedSections OR htmlModule.anticipatedSections.length === 0):
426
- BLOCKING_ERROR("Module '${htmlModule.code}' lost anticipatedSections: master has ${masterModule.anticipatedSections.length}, HTML has 0")
427
- → FIX: Copy anticipatedSections from master.modules[].anticipatedSections
428
-
429
- // dependencies/dependents MUST be present (drives dependency graph)
430
- IF masterModule.dependencies?.length > 0 AND (!htmlModule.dependencies OR htmlModule.dependencies.length === 0):
431
- BLOCKING_ERROR("Module '${htmlModule.code}' lost dependencies array")
432
- ```
433
-
434
- Display verification table:
435
- ```
436
- POST-CHECK: Module data completeness
437
- | Module | name | sections | deps | wireframes | specs | Match |
438
- |----------------|---------|----------|------|------------|-------|-------|
439
- | {code} | {name} | {n} | {n} | {n} | OK | OK/FAIL |
440
- ```
441
-
442
- **IF ANY CHECK FAILS → DO NOT PROCEED. Fix the data mapping and regenerate.**
443
-
444
- ---
445
-
446
- ## COMPLETION
447
-
448
- > **IMPORTANT:** La BA ne lance JAMAIS /ralph-loop automatiquement.
449
- > Il peut y avoir une phase de revue/modification de la documentation entre les deux étapes.
450
- > L'utilisateur lance `/ralph-loop` manuellement quand il est prêt.
451
-
452
- Display completion using the template from `templates/tpl-launch-displays.md`:
453
-
454
- ```
455
- ═══════════════════════════════════════════════════════════════
456
- [OK] BUSINESS ANALYSE TERMINEE - {application_name OR project_name}
457
- ═══════════════════════════════════════════════════════════════
458
-
459
- {IF workflow.mode === "project":}
460
- Project: {project_name}
461
- Apps: {app_count} ({app_names})
462
- {ENDIF}
463
- Modules: {count} ({names})
464
- Strategy: {strategy}
465
- Files: {total files across all modules}
466
- Tasks: {total tasks} ({core_count} CORE + {biz_count} business + {dev_count} development)
467
- Complexity: {complexity}
468
- Effort: {total_days} days ({total_hours} hours)
469
-
470
- [DIR] Artefacts générés:
471
- ✓ feature.json ({IF project: "project + " ENDIF}master + per-module) - spécification complète
472
- ✓ .ralph/prd-{module}.json - task breakdown per module
473
- {IF workflow.mode === "project":}
474
- ✓ .ralph/prd-CrossApplication.json - cross-application integration tests
475
- {ENDIF}
476
- ✓ .ralph/progress.txt - tracker de progression
477
- ✓ ba-interactive.html - document de revue interactif
478
-
479
- [TARGET] Prochaines étapes:
480
- 1. Ouvrir ba-interactive.html dans le navigateur
481
- 2. Partager avec les stakeholders pour validation
482
- 3. Si retours --> relancer /business-analyse pour une nouvelle itération
483
- 4. Validation qualité ULTRATHINK (automatique):
484
-
485
- → Lancement automatique de step-05c-ralph-readiness.md...
486
-
487
- 5. Une fois validé, lancer le développement:
488
-
489
- /ralph-loop
490
-
491
- Note: /ralph-loop -r sert UNIQUEMENT à reprendre une boucle interrompue.
492
- Après un /business-analyse, toujours utiliser /ralph-loop (sans -r).
493
-
494
- ═══════════════════════════════════════════════════════════════
495
- ```
496
-
497
- ---
498
-
499
- ## NEXT STEP
500
-
501
- **MANDATORY:** Load `steps/step-05c-ralph-readiness.md` — ULTRATHINK quality review & readiness gate.
502
-
503
- > **This step is NON-NEGOTIABLE.** The BA skill MUST run step-05c before completing.
504
- > DO NOT skip this step. DO NOT display a "done" message without running step-05c first.
505
-
506
- This validation ensures:
507
- - ULTRATHINK deep quality review of the entire BA output
508
- - All module handoffs are complete and content is coherent
509
- - PRD files are structurally valid
510
- - Cross-module references are resolvable
511
- - Specification quality meets production standards
512
- - No blocking issues before development
513
-
514
- ---
515
-
516
- ## MODE SUPPORT & TROUBLESHOOTING
517
-
518
- See [references/deploy-modes.md](../references/deploy-modes.md) for:
519
- - **Standard Mode** — full handoff (all 7 categories, complete mapping)
520
- - **Micro Mode** — simplified CRUD (3 core SeedData, lightweight)
521
- - **Delta Mode** — refactoring focus (affected modules only)
522
- - **Troubleshooting** — 12 common issues with resolutions
1
+ ---
2
+ name: step-05b-deploy
3
+ description: Generate prd.json, deploy artifacts, interactive HTML
4
+ model: sonnet
5
+ next_step: steps/step-05c-ralph-readiness.md
6
+ ---
7
+
8
+ > **Context files:** _shared.md
9
+
10
+ # Step 5b: Deploy Artifacts & Interactive HTML
11
+
12
+ ## MANDATORY EXECUTION RULES
13
+
14
+ - **ALWAYS** verify all module handoffs are complete before generating artifacts
15
+ - **ALWAYS** derive prd.json from feature.json (NEVER independently)
16
+ - **NEVER** invent entities/FRs/BRs not in feature.json
17
+ - **ALWAYS** update BA manifest at docs/index.json
18
+ - **ALWAYS** deploy ba-interactive.html PRE-POPULATED with all data
19
+ - **ALWAYS** follow references/html-data-mapping.md EXACTLY for FEATURE_DATA and EMBEDDED_ARTIFACTS mapping
20
+ - **FEATURE_DATA.moduleSpecs MUST be populated for EACH module** — empty moduleSpecs = BROKEN specification tabs
21
+ - **FEATURE_DATA.cadrage.scope must use HTML keys** (vital/important/optional/excluded) NOT feature.json keys (mustHave/shouldHave/couldHave/outOfScope)
22
+ - **FEATURE_DATA.metadata.analysisMode must be set** from master.metadata.analysisMode (always "interactive")
23
+ - **NEVER leave FEATURE_DATA or EMBEDDED_ARTIFACTS empty or partial**
24
+
25
+ ## YOUR TASK
26
+
27
+ Generate deployment artifacts (prd.json, progress.txt, BA manifest) and deploy the interactive HTML document pre-populated with all analysis data.
28
+
29
+ ---
30
+
31
+ ## EXECUTION SEQUENCE
32
+
33
+ ### 0. Pre-flight Verification
34
+
35
+ Before generating ANY artifact, verify step-05a completed successfully:
36
+
37
+ ```
38
+ FOR each module in modules[]:
39
+ Read module feature.json
40
+ IF module.handoff === {} OR module.status !== "handed-off":
41
+ → BLOCKING ERROR: Module {module.code} has no handoff data
42
+ → Return to step-05a-handoff.md
43
+ ```
44
+
45
+ IF all modules have valid handoff → proceed.
46
+
47
+ ---
48
+
49
+ ### 1. Generate prd.json (PROGRAMMATIC)
50
+
51
+ > **RULE:** prd.json is extracted by CLI code, **NEVER** generated by LLM.
52
+ > The `ss derive-prd` command performs a deterministic data transformation from feature.json.
53
+
54
+ **For each module:**
55
+
56
+ ```
57
+ Execute: ss derive-prd --feature {moduleFeaturePath} --output .ralph/prd-{moduleCode}.json
58
+ ```
59
+
60
+ **For consolidated view (multi-module, optional):**
61
+
62
+ ```
63
+ Execute: ss derive-prd --application {masterFeaturePath}
64
+ → Generates .ralph/prd-{moduleCode}.json for each module
65
+ ```
66
+
67
+ **Verification:** After execution, read the generated prd.json and display summary:
68
+
69
+ ```
70
+ prd.json generated for module {moduleCode}:
71
+ - Use cases: {count}
72
+ - Functional requirements: {count}
73
+ - Business rules: {count}
74
+ - API endpoints: {count}
75
+ - Sections: {count}
76
+ - Files to create: {count}
77
+ - BR-to-code mappings: {count}
78
+ ```
79
+
80
+ **Key guarantees:**
81
+ - Source MUST reference feature.json path (traceability)
82
+ - All data is EXACT COPY from feature.json (no transformation, no invention)
83
+ - prd.json $version: "3.0.0" (unified format with pre-computed tasks)
84
+ - source.type: "ba-handoff-programmatic"
85
+
86
+ **POST-CHECK (BLOCKING — DO NOT SKIP):**
87
+
88
+ After `ss derive-prd` execution, read the generated prd-{moduleCode}.json and verify structural integrity:
89
+
90
+ ```javascript
91
+ const prd = readJSON(`.ralph/prd-${moduleCode}.json`);
92
+ const featureHandoff = moduleFeature.handoff.filesToCreate;
93
+
94
+ // 1. Verify structure: filesToCreate MUST be under implementation (NOT root level)
95
+ if (prd.filesToCreate && !prd.implementation?.filesToCreate) {
96
+ BLOCKING_ERROR("prd.json has filesToCreate at ROOT level — this is NOT from ss derive-prd");
97
+ BLOCKING_ERROR("Re-run: ss derive-prd --feature {path} --output .ralph/prd-{moduleCode}.json");
98
+ STOP;
99
+ }
100
+
101
+ // 2. Verify ALL 7 categories present and match feature.json
102
+ const categories = ['domain', 'application', 'infrastructure', 'api', 'frontend', 'seedData', 'tests'];
103
+ for (const cat of categories) {
104
+ const prdCount = prd.implementation.filesToCreate[cat]?.length ?? 0;
105
+ const featureCount = featureHandoff[cat]?.length ?? 0;
106
+ if (prdCount !== featureCount) {
107
+ BLOCKING_ERROR(`${cat}: prd has ${prdCount} files but feature.json has ${featureCount}`);
108
+ }
109
+ }
110
+ ```
111
+
112
+ Display verification table:
113
+
114
+ ```
115
+ POST-CHECK: prd-{moduleCode}.json integrity
116
+ | Category | feature.json | prd.json | Match |
117
+ |----------------|-------------|----------|-------|
118
+ | domain | {n} | {n} | OK/FAIL |
119
+ | application | {n} | {n} | OK/FAIL |
120
+ | infrastructure | {n} | {n} | OK/FAIL |
121
+ | api | {n} | {n} | OK/FAIL |
122
+ | frontend | {n} | {n} | OK/FAIL |
123
+ | seedData | {n} | {n} | OK/FAIL |
124
+ | tests | {n} | {n} | OK/FAIL |
125
+ ```
126
+
127
+ IF ANY category shows FAIL → **STOP AND RE-RUN `ss derive-prd`**. DO NOT proceed with incomplete PRD.
128
+
129
+ ---
130
+
131
+ ### 2. Initialize Progress Tracker
132
+
133
+ > **Template:** Read `templates/tpl-progress.md` for the complete progress tracker template structure.
134
+ > Populate the template with module-specific data from feature.json handoff sections.
135
+
136
+ **Progress Tracker Rules:**
137
+ - One section per module, in topological order (dependencies first)
138
+ - CORE SeedData ALWAYS 5 entries (mandatory)
139
+ - Business SeedData varies by module
140
+ - Hierarchical task structure (module -> layer -> tasks)
141
+ - Each task is independent, assignable checkbox
142
+ - Effort estimate per module (simple/medium/complex)
143
+ - Summary with totals across all modules
144
+ - Cross-module tasks only if multi-module
145
+
146
+ ---
147
+
148
+ ### 3. Update BA Manifest (MANDATORY)
149
+
150
+ > **The BA manifest enables the SmartStack web app to discover and display all available business analyses.**
151
+ > It is a JSON index file at `docs/index.json` that lists all feature.json files.
152
+
153
+ **Path:** `docs/index.json` (project root relative)
154
+
155
+ **Schema:**
156
+ ```json
157
+ {
158
+ "version": "1.0",
159
+ "updatedAt": "{ISO timestamp}",
160
+ "analyses": [
161
+ {
162
+ "appCode": "{app_code}",
163
+ "appName": "{application_name}",
164
+ "moduleCode": null | "{module_code}",
165
+ "moduleName": "{module_name}",
166
+ "version": "{version}",
167
+ "status": "handed-off",
168
+ "featureDescription": "{feature_description}",
169
+ "path": "{app_code}/business-analyse/v{version}/feature.json",
170
+ "updatedAt": "{ISO timestamp}"
171
+ }
172
+ ]
173
+ }
174
+ ```
175
+
176
+ > Note: The "path" field uses `{app_code}` directly without any prefix (e.g., `FreeBike/business-analyse/v1.0/feature.json`).
177
+
178
+ **Update logic:**
179
+
180
+ 1. Read existing manifest at `docs/index.json` (or create empty `{ "version": "1.0", "updatedAt": "", "analyses": [] }`)
181
+
182
+ 2. **PROJECT MODE (`workflow.mode === "project"`):**
183
+ a. Add/update PROJECT-level entry:
184
+ - Find existing entry where `projectId == {project_id}` AND `scope == "project"`
185
+ - If found: update `status`, `updatedAt`
186
+ - If not found: append new entry with `scope: "project"`, `projectId: "{project_id}"`, `path: "business-analyse/v{version}/feature.json"`
187
+ b. For EACH APPLICATION:
188
+ - Find existing entry where `appCode == {app_code}` AND `moduleCode == null` AND `version == {version}`
189
+ - If found: update `status`, `updatedAt`, `featureDescription`
190
+ - If not found: append new entry with `moduleCode: null` and `path: "{app_code}/business-analyse/v{version}/feature.json"`
191
+ c. For EACH MODULE within each application:
192
+ - Find existing entry where `appCode == {app_code}` AND `moduleCode == {module_code}` AND `version == {version}`
193
+ - If found: update `status`, `updatedAt`, `featureDescription`
194
+ - If not found: append new entry with `path: "{app_code}/{module_code}/business-analyse/v{version}/feature.json"`
195
+
196
+ 3. **SINGLE-APP MODE (default):**
197
+ a. For the APPLICATION-level feature.json:
198
+ - Find existing entry where `appCode == {app_code}` AND `moduleCode == null` AND `version == {version}`
199
+ - If found: update `status`, `updatedAt`, `featureDescription`
200
+ - If not found: append new entry with `moduleCode: null` and `path: "{app_code}/business-analyse/v{version}/feature.json"`
201
+ b. For EACH MODULE-level feature.json:
202
+ - Find existing entry where `appCode == {app_code}` AND `moduleCode == {module_code}` AND `version == {version}`
203
+ - If found: update `status`, `updatedAt`, `featureDescription`
204
+ - If not found: append new entry with `moduleCode: "{module_code}"` and `path: "{app_code}/{module_code}/business-analyse/v{version}/feature.json"`
205
+
206
+ 4. Update root `updatedAt` to current timestamp
207
+ 5. Write manifest back to `docs/index.json`
208
+
209
+ **Display confirmation:**
210
+ ```
211
+ ✓ BA manifest updated: docs/index.json
212
+ Entries: {total_count} ({project_count} projects, {app_count} applications, {module_count} modules)
213
+ Web viewer: /system/docs/ba
214
+ ```
215
+
216
+ **Why a manifest?**
217
+ - The web app needs to discover available BAs without scanning the filesystem
218
+ - Static file serving (no backend API needed)
219
+ - Incremental updates: each handoff adds/updates only its entries
220
+ - Consumed by the SmartStack web app BA viewer at `/system/docs/ba`
221
+
222
+ ---
223
+
224
+ ### 4. Read Source Data for HTML
225
+
226
+ 1. Read the HTML template from skill directory: `html/ba-interactive.html` (relative to `~/.claude/skills/business-analyse/`)
227
+ 2. **SINGLE-APP MODE:** Read the master feature.json (application level)
228
+ 3. **PROJECT MODE:** Read the project feature.json + ALL application feature.json files
229
+ 4. Read EACH module feature.json (module level, across all applications in project mode)
230
+
231
+ > **Reference:** Read `references/html-data-mapping.md` for the complete FEATURE_DATA and EMBEDDED_ARTIFACTS mapping specification.
232
+
233
+ **Key requirements:**
234
+ - FEATURE_DATA must be pre-populated with ALL analysis data (empty data = BUG)
235
+ - FEATURE_DATA.**moduleSpecs** MUST be populated for EACH module across ALL applications (use cases, business rules, entities, permissions) — empty moduleSpecs = BROKEN specification tabs
236
+ - FEATURE_DATA.**cadrage.scope** must use HTML keys (vital/important/optional/excluded) NOT feature.json keys (mustHave/shouldHave/couldHave/outOfScope)
237
+ - FEATURE_DATA.**metadata.analysisMode** must be set from `master.metadata.analysisMode` (always "interactive")
238
+ - EMBEDDED_ARTIFACTS contains wireframes, E2E diagrams, dependency graph
239
+ - Both objects are serialized as JSON with 2-space indentation
240
+ - All data mapped from master and module feature.json files — follow `html-data-mapping.md` EXACTLY
241
+
242
+ **PROJECT MODE additions to FEATURE_DATA:**
243
+ - `FEATURE_DATA.project` — project-level metadata (name, applicationCount, applicationOrder)
244
+ - `FEATURE_DATA.applications` — array of application summaries with their modules
245
+ - `FEATURE_DATA.modules` — flattened list of ALL modules across ALL applications (each with `applicationCode` field)
246
+ - `FEATURE_DATA.consolidation.crossApplicationInteractions` — from project feature.json
247
+ - FEATURE_DATA.**metadata.workflowMode** must be `"project"` (enables multi-app tabs in HTML)
248
+
249
+ ---
250
+
251
+ ### 5-7. Build FEATURE_DATA, EMBEDDED_ARTIFACTS & Replace Placeholders
252
+
253
+ See [references/deploy-data-build.md](../references/deploy-data-build.md) for:
254
+ - Complete FEATURE_DATA object structure (metadata, cadrage, modules, moduleSpecs, consolidation, handoff)
255
+ - Complete EMBEDDED_ARTIFACTS object structure (wireframes, e2eFlows, dependencyGraph)
256
+ - 7-step build process for FEATURE_DATA
257
+ - 4-step artifact gathering for EMBEDDED_ARTIFACTS
258
+ - Placeholder replacement rules (8 placeholders)
259
+
260
+ **Critical reminders:**
261
+ - FEATURE_DATA.**moduleSpecs** MUST have ONE entry per module (empty = BUG)
262
+ - FEATURE_DATA.**cadrage.scope** converts `mustHave→vital`, `shouldHave→important`, `couldHave→optional`, `outOfScope→excluded`
263
+ - FEATURE_DATA.**metadata.analysisMode** from `master.metadata.analysisMode`
264
+ - Also reference `references/html-data-mapping.md` for the full mapping spec
265
+
266
+ ---
267
+
268
+ ### 7-bis. Generate SVG Wireframes (Parallel Enrichment)
269
+
270
+ > **After EMBEDDED_ARTIFACTS is built (sections 5-7) but BEFORE writing the HTML (section 8).**
271
+ > This step enriches each ASCII wireframe with a professional SVG version for dual-view rendering.
272
+
273
+ See [references/wireframe-svg-style-guide.md](../references/wireframe-svg-style-guide.md) for the complete SVG style specification, prompt template, and orchestration process.
274
+
275
+ **Process summary:**
276
+
277
+ 1. **Read** `references/wireframe-svg-style-guide.md` to get the prompt template
278
+ 2. **Collect** all wireframes across ALL modules in `EMBEDDED_ARTIFACTS.wireframes` where `content` exists and `svgContent` is null
279
+ 3. **Spawn parallel Task(sonnet) agents** — ONE per wireframe, ALL in a single message
280
+ 4. **Collect and validate** results: strip markdown fences if present, verify SVG starts with `<svg` and contains `</svg>`
281
+ 5. **Inject** valid SVGs into `EMBEDDED_ARTIFACTS.wireframes[moduleCode][index].svgContent`
282
+ 6. **Display summary:**
283
+ ```
284
+ SVG wireframe generation:
285
+ Total wireframes: {total}
286
+ SVG generated: {successCount}/{total}
287
+ Fallback (ASCII only): {failCount}/{total}
288
+ ```
289
+
290
+ > **CRITICAL:** This step is NEVER blocking. If all SVG generations fail, deployment
291
+ > continues with ASCII-only wireframes. The HTML renderer checks for `svgContent` before
292
+ > showing the SVG view. SVG is an enhancement, not a requirement.
293
+
294
+ ---
295
+
296
+ ### 8. Write and Verify
297
+
298
+ 1. Write the populated HTML to the output directory: `docs/{app}/business-analyse/v{version}/ba-interactive.html`
299
+ 2. Display deployment confirmation:
300
+
301
+ ```
302
+ [OK] Interactive HTML deployed:
303
+ Path: docs/{app}/business-analyse/v{version}/ba-interactive.html
304
+ Pre-populated with: {stakeholder_count} stakeholders, {module_count} modules,
305
+ {total_uc} use cases, {total_br} business rules, {total_entity} entities
306
+ Visual artifacts: {total_wireframes} wireframes, {e2e_flow_count} E2E diagrams
307
+ Open in browser to review and edit the business analysis.
308
+ Export JSON and re-import with: /business-analyse -x <exported-json-path>
309
+ ```
310
+
311
+ ---
312
+
313
+ ## SELF-VERIFICATION (BEFORE COMPLETION)
314
+
315
+ Before displaying completion, VERIFY:
316
+
317
+ 1. **`.ralph/prd-{module}.json`** exists for ALL modules (file size > 100 bytes each)
318
+ 2. **`.ralph/progress.txt`** exists (file size > 500 bytes)
319
+ 3. **`docs/index.json`** exists with correct entry count
320
+ 4. **ba-interactive.html** exists and file size > 100KB
321
+ 5. **FEATURE_DATA contains moduleSpecs** with entries for ALL modules
322
+ 6. **cadrage.scope uses HTML keys** (vital/important/optional/excluded)
323
+
324
+ **IF any check fails → GENERATE the missing artifact before proceeding to completion.**
325
+
326
+ ---
327
+
328
+ ## POST-CHECK (BLOCKING)
329
+
330
+ After writing the HTML file, verify:
331
+
332
+ 1. **File size > 100KB** (indicates pre-populated, not empty template)
333
+ ```bash
334
+ file_size=$(stat --format=%s "{output_path}/ba-interactive.html")
335
+ if [ $file_size -lt 100000 ]; then
336
+ BLOCKING_ERROR("ba-interactive.html is only ${file_size} bytes — not pre-populated")
337
+ fi
338
+ ```
339
+
340
+ 2. **Grep for "moduleSpecs"** — MUST be present in generated HTML
341
+ ```bash
342
+ if ! grep -q '"moduleSpecs"' "{output_path}/ba-interactive.html"; then
343
+ BLOCKING_ERROR("moduleSpecs not found in HTML — FEATURE_DATA not serialized correctly")
344
+ fi
345
+ ```
346
+
347
+ 3. **moduleSpecs must have entries for ALL modules** (not empty object `{}`)
348
+ ```bash
349
+ # Count moduleSpecs entries — should equal module count
350
+ moduleSpec_count=$(grep -o '"moduleCode"' "{output_path}/ba-interactive.html" | wc -l)
351
+ if [ $moduleSpec_count -lt {module_count} ]; then
352
+ BLOCKING_ERROR("moduleSpecs has only ${moduleSpec_count} entries but need {module_count}")
353
+ fi
354
+ ```
355
+
356
+ 4. **cadrage.scope must use HTML keys** (vital/important/optional/excluded)
357
+ ```bash
358
+ if grep -q '"mustHave"' "{output_path}/ba-interactive.html"; then
359
+ BLOCKING_ERROR("cadrage.scope still has feature.json keys (mustHave) — must convert to HTML keys (vital)")
360
+ fi
361
+ ```
362
+
363
+ 5. **EMBEDDED_ARTIFACTS wireframes must use renamed fields** (`format`/`content`, NOT `mockupFormat`/`mockup`)
364
+ ```bash
365
+ # Check that wireframe field rename was applied (mockup → content, mockupFormat → format)
366
+ if grep -q '"mockupFormat"' "{output_path}/ba-interactive.html"; then
367
+ BLOCKING_ERROR("EMBEDDED_ARTIFACTS wireframes still use 'mockupFormat' — must rename to 'format'")
368
+ BLOCKING_ERROR("See references/html-data-mapping.md for correct field mapping")
369
+ fi
370
+ if grep -q '"mockup":' "{output_path}/ba-interactive.html" | grep -v '"mockupNotes"'; then
371
+ # Note: "mockup" in EMBEDDED_ARTIFACTS = wrong, must be "content"
372
+ BLOCKING_ERROR("EMBEDDED_ARTIFACTS wireframes still use 'mockup' — must rename to 'content'")
373
+ fi
374
+ ```
375
+
376
+ 6. **EMBEDDED_ARTIFACTS wireframes must exist for ALL modules** (not empty `{}`)
377
+ ```bash
378
+ # Each module should have at least one wireframe with "format" and "content"
379
+ if ! grep -q '"format"' "{output_path}/ba-interactive.html"; then
380
+ BLOCKING_ERROR("No wireframe 'format' field found — EMBEDDED_ARTIFACTS wireframes not populated")
381
+ fi
382
+ ```
383
+
384
+ 7. **WIREFRAME KEY ALIGNMENT** — wireframe keys MUST match module codes exactly
385
+ ```
386
+ FOR each module in FEATURE_DATA.modules:
387
+ moduleCode = module.code (e.g., "GestionTemps")
388
+ IF EMBEDDED_ARTIFACTS.wireframes[moduleCode] is undefined OR empty:
389
+ BLOCKING_ERROR("Wireframe key mismatch: module code '${moduleCode}' not found in EMBEDDED_ARTIFACTS.wireframes")
390
+ BLOCKING_ERROR("Available wireframe keys: ${Object.keys(EMBEDDED_ARTIFACTS.wireframes).join(', ')}")
391
+ → FIX: Rename the wireframe key to match module.code exactly
392
+ ```
393
+ > **Why this matters:** The HTML renders wireframes via `EMBEDDED_ARTIFACTS.wireframes[code]`. If the key doesn't match the module code (e.g., "TimeTracking" vs "GestionTemps"), the wireframes tab shows "Aucune maquette disponible" even though data exists.
394
+
395
+ 8. **MODULE COMPLETENESS** — every module must have spec data AND wireframes in HTML
396
+ ```
397
+ FOR each module in master.modules[]:
398
+ IF FEATURE_DATA.moduleSpecs[module.code] is undefined:
399
+ BLOCKING_ERROR("Module '${module.code}' missing from FEATURE_DATA.moduleSpecs")
400
+ IF EMBEDDED_ARTIFACTS.wireframes[module.code] is undefined:
401
+ BLOCKING_ERROR("Module '${module.code}' missing from EMBEDDED_ARTIFACTS.wireframes")
402
+ IF module.featureJsonPath is null:
403
+ BLOCKING_ERROR("Module '${module.code}' has no per-module feature.json (featureJsonPath is null)")
404
+
405
+ expectedModules = master.modules.map(m => m.code).sort()
406
+ specModules = Object.keys(FEATURE_DATA.moduleSpecs).sort()
407
+ wireframeModules = Object.keys(EMBEDDED_ARTIFACTS.wireframes).sort()
408
+
409
+ IF expectedModules.join(',') !== specModules.join(','):
410
+ BLOCKING_ERROR("Module mismatch: expected [${expectedModules}] but moduleSpecs has [${specModules}]")
411
+ IF expectedModules.join(',') !== wireframeModules.join(','):
412
+ BLOCKING_ERROR("Module mismatch: expected [${expectedModules}] but wireframes has [${wireframeModules}]")
413
+ ```
414
+
415
+ 9. **MODULE DATA COMPLETENESS** — every module in FEATURE_DATA.modules[] must carry ALL fields from feature.json
416
+ ```
417
+ FOR each htmlModule in FEATURE_DATA.modules[]:
418
+ masterModule = master.modules.find(m => m.code === htmlModule.code)
419
+
420
+ // name MUST be display name, NOT code
421
+ IF htmlModule.name === htmlModule.code AND masterModule.name !== masterModule.code:
422
+ BLOCKING_ERROR("Module '${htmlModule.code}' has name === code. Expected: '${masterModule.name}'")
423
+
424
+ // anticipatedSections MUST be present (drives Structure tab + navigation tree)
425
+ IF masterModule.anticipatedSections?.length > 0 AND (!htmlModule.anticipatedSections OR htmlModule.anticipatedSections.length === 0):
426
+ BLOCKING_ERROR("Module '${htmlModule.code}' lost anticipatedSections: master has ${masterModule.anticipatedSections.length}, HTML has 0")
427
+ → FIX: Copy anticipatedSections from master.modules[].anticipatedSections
428
+
429
+ // dependencies/dependents MUST be present (drives dependency graph)
430
+ IF masterModule.dependencies?.length > 0 AND (!htmlModule.dependencies OR htmlModule.dependencies.length === 0):
431
+ BLOCKING_ERROR("Module '${htmlModule.code}' lost dependencies array")
432
+ ```
433
+
434
+ Display verification table:
435
+ ```
436
+ POST-CHECK: Module data completeness
437
+ | Module | name | sections | deps | wireframes | specs | Match |
438
+ |----------------|---------|----------|------|------------|-------|-------|
439
+ | {code} | {name} | {n} | {n} | {n} | OK | OK/FAIL |
440
+ ```
441
+
442
+ **IF ANY CHECK FAILS → DO NOT PROCEED. Fix the data mapping and regenerate.**
443
+
444
+ ---
445
+
446
+ ## COMPLETION
447
+
448
+ > **IMPORTANT:** La BA ne lance JAMAIS /ralph-loop automatiquement.
449
+ > Il peut y avoir une phase de revue/modification de la documentation entre les deux étapes.
450
+ > L'utilisateur lance `/ralph-loop` manuellement quand il est prêt.
451
+
452
+ Display completion using the template from `templates/tpl-launch-displays.md`:
453
+
454
+ ```
455
+ ═══════════════════════════════════════════════════════════════
456
+ [OK] BUSINESS ANALYSE TERMINEE - {application_name OR project_name}
457
+ ═══════════════════════════════════════════════════════════════
458
+
459
+ {IF workflow.mode === "project":}
460
+ Project: {project_name}
461
+ Apps: {app_count} ({app_names})
462
+ {ENDIF}
463
+ Modules: {count} ({names})
464
+ Strategy: {strategy}
465
+ Files: {total files across all modules}
466
+ Tasks: {total tasks} ({core_count} CORE + {biz_count} business + {dev_count} development)
467
+ Complexity: {complexity}
468
+ Effort: {total_days} days ({total_hours} hours)
469
+
470
+ [DIR] Artefacts générés:
471
+ ✓ feature.json ({IF project: "project + " ENDIF}master + per-module) - spécification complète
472
+ ✓ .ralph/prd-{module}.json - task breakdown per module
473
+ {IF workflow.mode === "project":}
474
+ ✓ .ralph/prd-CrossApplication.json - cross-application integration tests
475
+ {ENDIF}
476
+ ✓ .ralph/progress.txt - tracker de progression
477
+ ✓ ba-interactive.html - document de revue interactif
478
+
479
+ [TARGET] Prochaines étapes:
480
+ 1. Ouvrir ba-interactive.html dans le navigateur
481
+ 2. Partager avec les stakeholders pour validation
482
+ 3. Si retours --> relancer /business-analyse pour une nouvelle itération
483
+ 4. Validation qualité ULTRATHINK (automatique):
484
+
485
+ → Lancement automatique de step-05c-ralph-readiness.md...
486
+
487
+ 5. Une fois validé, lancer le développement:
488
+
489
+ /ralph-loop
490
+
491
+ Note: /ralph-loop -r sert UNIQUEMENT à reprendre une boucle interrompue.
492
+ Après un /business-analyse, toujours utiliser /ralph-loop (sans -r).
493
+
494
+ ═══════════════════════════════════════════════════════════════
495
+ ```
496
+
497
+ ---
498
+
499
+ ## NEXT STEP
500
+
501
+ **MANDATORY:** Load `steps/step-05c-ralph-readiness.md` — ULTRATHINK quality review & readiness gate.
502
+
503
+ > **This step is NON-NEGOTIABLE.** The BA skill MUST run step-05c before completing.
504
+ > DO NOT skip this step. DO NOT display a "done" message without running step-05c first.
505
+
506
+ This validation ensures:
507
+ - ULTRATHINK deep quality review of the entire BA output
508
+ - All module handoffs are complete and content is coherent
509
+ - PRD files are structurally valid
510
+ - Cross-module references are resolvable
511
+ - Specification quality meets production standards
512
+ - No blocking issues before development
513
+
514
+ ---
515
+
516
+ ## MODE SUPPORT & TROUBLESHOOTING
517
+
518
+ See [references/deploy-modes.md](../references/deploy-modes.md) for:
519
+ - **Standard Mode** — full handoff (all 7 categories, complete mapping)
520
+ - **Micro Mode** — simplified CRUD (3 core SeedData, lightweight)
521
+ - **Delta Mode** — refactoring focus (affected modules only)
522
+ - **Troubleshooting** — 12 common issues with resolutions