@atlashub/smartstack-cli 4.17.1 → 4.19.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 (167) hide show
  1. package/package.json +1 -1
  2. package/templates/agents/ba-reader.md +86 -80
  3. package/templates/agents/ba-writer.md +321 -413
  4. package/templates/agents/docs-context-reader.md +3 -3
  5. package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +133 -0
  6. package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +126 -0
  7. package/templates/skills/apex/SKILL.md +29 -16
  8. package/templates/skills/apex/_shared.md +62 -9
  9. package/templates/skills/apex/references/analysis-methods.md +8 -6
  10. package/templates/skills/apex/references/challenge-questions.md +5 -5
  11. package/templates/skills/apex/references/core-seed-data.md +68 -45
  12. package/templates/skills/apex/references/frontend-route-wiring-app-tsx.md +26 -21
  13. package/templates/skills/apex/references/parallel-execution.md +156 -0
  14. package/templates/skills/apex/references/person-extension-pattern.md +12 -12
  15. package/templates/skills/apex/references/post-checks.md +1748 -1726
  16. package/templates/skills/apex/references/smartstack-api.md +63 -57
  17. package/templates/skills/apex/references/smartstack-frontend-compliance.md +594 -0
  18. package/templates/skills/apex/references/smartstack-frontend.md +1246 -1842
  19. package/templates/skills/apex/references/smartstack-layers.md +98 -145
  20. package/templates/skills/apex/steps/step-00-init.md +30 -6
  21. package/templates/skills/apex/steps/step-01-analyze.md +27 -23
  22. package/templates/skills/apex/steps/step-02-plan.md +12 -12
  23. package/templates/skills/apex/steps/step-03-execute.md +198 -143
  24. package/templates/skills/apex/steps/step-04-examine.md +24 -93
  25. package/templates/skills/apex/steps/step-05-deep-review.md +16 -16
  26. package/templates/skills/apex/steps/step-06-resolve.md +9 -9
  27. package/templates/skills/apex/steps/step-07-tests.md +3 -1
  28. package/templates/skills/apex/steps/step-08-run-tests.md +1 -1
  29. package/templates/skills/business-analyse/SKILL.md +182 -301
  30. package/templates/skills/business-analyse/_shared.md +119 -336
  31. package/templates/skills/business-analyse/html/ba-interactive.html +703 -82
  32. package/templates/skills/business-analyse/html/build-html.js +41 -3
  33. package/templates/skills/business-analyse/html/src/partials/cadrage-context.html +34 -0
  34. package/templates/skills/business-analyse/html/src/partials/cadrage-risks.html +48 -0
  35. package/templates/skills/business-analyse/html/src/partials/cadrage-scope.html +49 -0
  36. package/templates/skills/business-analyse/html/src/partials/cadrage-stakeholders.html +55 -0
  37. package/templates/skills/business-analyse/html/src/partials/cadrage-success.html +34 -0
  38. package/templates/skills/business-analyse/html/src/partials/consol-datamodel.html +8 -0
  39. package/templates/skills/business-analyse/html/src/partials/consol-flows.html +29 -0
  40. package/templates/skills/business-analyse/html/src/partials/consol-interactions.html +8 -0
  41. package/templates/skills/business-analyse/html/src/partials/consol-permissions.html +8 -0
  42. package/templates/skills/business-analyse/html/src/partials/decomp-dependencies.html +38 -0
  43. package/templates/skills/business-analyse/html/src/partials/decomp-modules.html +51 -0
  44. package/templates/skills/business-analyse/html/src/partials/handoff-summary.html +24 -0
  45. package/templates/skills/business-analyse/html/src/partials/module-spec-container.html +4 -0
  46. package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +17 -1
  47. package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +31 -5
  48. package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +100 -63
  49. package/templates/skills/business-analyse/html/src/scripts/06-render-mockups.js +372 -0
  50. package/templates/skills/business-analyse/html/src/scripts/10-comments.js +41 -13
  51. package/templates/skills/business-analyse/html/src/styles/09-mockups-html.css +136 -0
  52. package/templates/skills/business-analyse/patterns/suggestion-catalog.md +7 -5
  53. package/templates/skills/business-analyse/questionnaire/02-stakeholders-scope.md +142 -0
  54. package/templates/skills/business-analyse/questionnaire/03-data-ui.md +94 -0
  55. package/templates/skills/business-analyse/questionnaire/04-risks-metrics.md +150 -0
  56. package/templates/skills/business-analyse/questionnaire/05-cross-module.md +69 -0
  57. package/templates/skills/business-analyse/questionnaire.md +23 -280
  58. package/templates/skills/business-analyse/react/application-viewer.md +2 -2
  59. package/templates/skills/business-analyse/react/components.md +4 -4
  60. package/templates/skills/business-analyse/react/i18n-template.md +1 -1
  61. package/templates/skills/business-analyse/react/schema.md +14 -14
  62. package/templates/skills/business-analyse/references/acceptance-criteria.md +25 -25
  63. package/templates/skills/business-analyse/references/analysis-semantic-checks.md +3 -3
  64. package/templates/skills/business-analyse/references/compilation-structure-cards.md +1 -1
  65. package/templates/skills/business-analyse/references/consolidation-structural-checks.md +7 -7
  66. package/templates/skills/business-analyse/references/deploy-data-build.md +14 -12
  67. package/templates/skills/business-analyse/references/deploy-modes.md +10 -10
  68. package/templates/skills/business-analyse/references/detection-strategies.md +6 -6
  69. package/templates/skills/business-analyse/references/html-data-mapping.md +15 -15
  70. package/templates/skills/business-analyse/references/naming-conventions.md +4 -4
  71. package/templates/skills/business-analyse/references/review-data-mapping.md +29 -29
  72. package/templates/skills/business-analyse/references/robustness-checks.md +36 -33
  73. package/templates/skills/business-analyse/references/spec-auto-inference.md +2 -2
  74. package/templates/skills/business-analyse/references/ui-dashboard-spec.md +1 -1
  75. package/templates/skills/business-analyse/references/ui-resource-cards.md +1 -1
  76. package/templates/skills/business-analyse/references/validation-checklist.md +9 -6
  77. package/templates/skills/business-analyse/references/wireframe-svg-style-guide.md +2 -2
  78. package/templates/skills/business-analyse/schemas/application-schema.json +8 -8
  79. package/templates/skills/business-analyse/schemas/feature-schema.json +3 -3
  80. package/templates/skills/business-analyse/schemas/index-schema.json +47 -0
  81. package/templates/skills/business-analyse/schemas/project-schema.json +6 -6
  82. package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +1 -1
  83. package/templates/skills/business-analyse/schemas/sections/handoff-schema.json +5 -3
  84. package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +4 -4
  85. package/templates/skills/business-analyse/schemas/sections/specification-schema.json +1 -1
  86. package/templates/skills/business-analyse/schemas/shared/common-defs.json +4 -3
  87. package/templates/skills/business-analyse/steps/step-00-init.md +93 -134
  88. package/templates/skills/business-analyse/steps/step-01-cadrage.md +136 -172
  89. package/templates/skills/business-analyse/steps/step-02-structure.md +175 -0
  90. package/templates/skills/business-analyse/steps/step-03-specify.md +198 -0
  91. package/templates/skills/business-analyse/steps/step-04-consolidate.md +478 -0
  92. package/templates/skills/business-analyse/steps/step-05-deploy.md +220 -0
  93. package/templates/skills/business-analyse/steps/step-06-review.md +51 -69
  94. package/templates/skills/business-analyse/templates/tpl-frd.md +1 -1
  95. package/templates/skills/business-analyse/templates/tpl-handoff.md +20 -17
  96. package/templates/skills/business-analyse/templates/tpl-launch-displays.md +2 -2
  97. package/templates/skills/business-analyse/templates-react.md +2 -2
  98. package/templates/skills/derive-prd/SKILL.md +92 -0
  99. package/templates/skills/derive-prd/references/acceptance-criteria.md +169 -0
  100. package/templates/skills/derive-prd/references/entity-domain-mapping.md +115 -0
  101. package/templates/skills/{business-analyse → derive-prd}/references/handoff-file-templates.md +131 -120
  102. package/templates/skills/{business-analyse → derive-prd}/references/handoff-mappings.md +95 -95
  103. package/templates/skills/{business-analyse → derive-prd}/references/handoff-seeddata-generation.md +312 -312
  104. package/templates/skills/{business-analyse → derive-prd}/references/prd-generation.md +262 -258
  105. package/templates/skills/derive-prd/references/readiness-scoring.md +104 -0
  106. package/templates/skills/derive-prd/schemas/handoff-schema.json +95 -0
  107. package/templates/skills/derive-prd/steps/step-00-validate.md +130 -0
  108. package/templates/skills/derive-prd/steps/step-01-transform.md +206 -0
  109. package/templates/skills/derive-prd/steps/step-02-export.md +181 -0
  110. package/templates/skills/{business-analyse → derive-prd}/templates/tpl-progress.md +172 -172
  111. package/templates/skills/ralph-loop/SKILL.md +10 -4
  112. package/templates/skills/ralph-loop/references/category-completeness.md +20 -4
  113. package/templates/skills/ralph-loop/references/compact-loop.md +80 -48
  114. package/templates/skills/ralph-loop/references/init-resume-recovery.md +4 -2
  115. package/templates/skills/ralph-loop/references/parallel-execution.md +27 -27
  116. package/templates/skills/ralph-loop/steps/step-00-init.md +19 -9
  117. package/templates/skills/ralph-loop/steps/step-01-task.md +12 -4
  118. package/templates/skills/ralph-loop/steps/step-02-execute.md +9 -4
  119. package/templates/skills/ralph-loop/steps/step-03-commit.md +1 -1
  120. package/templates/skills/ralph-loop/steps/step-04-check.md +5 -21
  121. package/templates/skills/ralph-loop/steps/step-05-report.md +6 -1
  122. package/templates/skills/apex/references/agent-teams-protocol.md +0 -203
  123. package/templates/skills/business-analyse/_architecture.md +0 -124
  124. package/templates/skills/business-analyse/_elicitation.md +0 -206
  125. package/templates/skills/business-analyse/_module-loop.md +0 -115
  126. package/templates/skills/business-analyse/_suggestions.md +0 -34
  127. package/templates/skills/business-analyse/questionnaire/00-application.md +0 -160
  128. package/templates/skills/business-analyse/questionnaire/00b-project.md +0 -85
  129. package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +0 -189
  130. package/templates/skills/business-analyse/questionnaire/03-scope.md +0 -164
  131. package/templates/skills/business-analyse/questionnaire/04-data.md +0 -88
  132. package/templates/skills/business-analyse/questionnaire/05-integrations.md +0 -58
  133. package/templates/skills/business-analyse/questionnaire/06-security.md +0 -68
  134. package/templates/skills/business-analyse/questionnaire/07-ui.md +0 -76
  135. package/templates/skills/business-analyse/questionnaire/08-performance.md +0 -42
  136. package/templates/skills/business-analyse/questionnaire/09-constraints.md +0 -45
  137. package/templates/skills/business-analyse/questionnaire/10-documentation.md +0 -43
  138. package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +0 -59
  139. package/templates/skills/business-analyse/questionnaire/12-migration.md +0 -58
  140. package/templates/skills/business-analyse/questionnaire/13-cross-module.md +0 -69
  141. package/templates/skills/business-analyse/questionnaire/14-risk-assumptions.md +0 -135
  142. package/templates/skills/business-analyse/questionnaire/15-success-metrics.md +0 -136
  143. package/templates/skills/business-analyse/references/agent-module-prompt.md +0 -362
  144. package/templates/skills/business-analyse/references/agent-pooling-best-practices.md +0 -557
  145. package/templates/skills/business-analyse/references/cache-warming-strategy.md +0 -566
  146. package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +0 -41
  147. package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +0 -74
  148. package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +0 -115
  149. package/templates/skills/business-analyse/references/cadrage-shared-modules.md +0 -68
  150. package/templates/skills/business-analyse/references/cadrage-structure-cards.md +0 -85
  151. package/templates/skills/business-analyse/references/team-orchestration.md +0 -1022
  152. package/templates/skills/business-analyse/references/validate-incremental-html.md +0 -121
  153. package/templates/skills/business-analyse/steps/step-01b-applications.md +0 -419
  154. package/templates/skills/business-analyse/steps/step-02-decomposition.md +0 -387
  155. package/templates/skills/business-analyse/steps/step-03a-data.md +0 -16
  156. package/templates/skills/business-analyse/steps/step-03a1-setup.md +0 -506
  157. package/templates/skills/business-analyse/steps/step-03a2-analysis.md +0 -301
  158. package/templates/skills/business-analyse/steps/step-03b-ui.md +0 -425
  159. package/templates/skills/business-analyse/steps/step-03c-compile.md +0 -611
  160. package/templates/skills/business-analyse/steps/step-03d-validate.md +0 -783
  161. package/templates/skills/business-analyse/steps/step-04-consolidation.md +0 -17
  162. package/templates/skills/business-analyse/steps/step-04a-collect.md +0 -415
  163. package/templates/skills/business-analyse/steps/step-04b-analyze.md +0 -163
  164. package/templates/skills/business-analyse/steps/step-04c-decide.md +0 -186
  165. package/templates/skills/business-analyse/steps/step-05a-handoff.md +0 -840
  166. package/templates/skills/business-analyse/steps/step-05b-deploy.md +0 -522
  167. package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +0 -703
@@ -1,783 +0,0 @@
1
- ---
2
- name: step-03d-validate
3
- description: Per-module validation, write feature.json, incremental HTML deploy, loop decision
4
- model: sonnet
5
- next_step: steps/step-03a1-setup.md OR steps/step-04a-collect.md (conditional)
6
- ---
7
-
8
- > **Context files:** `_shared.md` | `_module-loop.md`
9
-
10
- # Step 3d: Validation & Loop
11
-
12
- ## MANDATORY EXECUTION RULES
13
-
14
- - ALWAYS use ULTRATHINK mode
15
- - This step VALIDATES the specification from step-03c, writes it to feature.json, and decides loop continuation
16
- - ALWAYS verify specification completeness before writing
17
- - ALL communication in `{language}`
18
-
19
- ## MODE DETECTION (inherited from step-03a1)
20
-
21
- > **CRITICAL: Re-check your execution mode before proceeding.**
22
-
23
- **IF you are running as a TEAM AGENT** (your prompt contains `PROPOSE & REVIEW` or `team-lead` as recipient):
24
- → **NEVER** use `AskUserQuestion` in ANY section below (sections 9d, 10, 12)
25
- → Section 9d: if validation fails, AUTO-CORRECT silently (no user options)
26
- → Section 12: **SKIP ENTIRELY** — go directly to section 12-bis (Agent Mode)
27
- → After writing feature.json, send `PROPOSAL_READY` to team lead via SendMessage
28
- → NEVER present options/menus to the user — you are an autonomous agent
29
-
30
- **IF you are running in the MAIN CONVERSATION** (classic inline mode):
31
- → Normal interactive mode — use `AskUserQuestion` as documented
32
- → Section 12-bis does NOT apply to you
33
- - **ID NAMING RULE (MANDATORY, NO EXCEPTION):**
34
- All IDs MUST include a module prefix to guarantee application-wide uniqueness.
35
- The prefix is derived from the module code initials (2-4 chars):
36
- UserManagement → UM | VehicleManagement → VM | PartsInventory → PI
37
- RepairManagement → RM | MaintenanceSchedule → MS | DataSync → DS
38
- Notifications → NT | Dashboard → DB | Orders → OR | Customers → CU
39
-
40
- NEVER use bare IDs (UC-001, BR-VAL-001) in multi-module mode.
41
-
42
- ## YOUR TASK
43
-
44
- Validate the module specification for completeness and consistency, write to feature.json, deploy incremental HTML, and decide whether to loop to the next module or proceed to consolidation.
45
-
46
- ---
47
-
48
- ### 9. Per-Module Validation
49
-
50
- #### 9a. Completeness Checks
51
-
52
- > **CRITICAL:** Checks MUST count ACTUAL elements in arrays, NOT declarative values.
53
- > A check that reports PASS when the array is empty is a LIE and BLOCKS downstream quality.
54
-
55
- | Section | Minimum | How to verify | Status |
56
- |---------|---------|---------------|--------|
57
- | actors | 2 | `specification.actors.length >= 2` | PASS/FAIL |
58
- | useCases | 2 | `specification.useCases.length >= 2` | PASS/FAIL |
59
- | functionalRequirements | 4 | `specification.functionalRequirements.length >= 4` | PASS/FAIL |
60
- | permissionMatrix | 1 resource × 2 roles | `specification.permissionMatrix.permissions.length >= 1 && specification.permissionMatrix.roleAssignments.length >= 2` | PASS/FAIL |
61
- | entities | 1 | `analysis.entities.length >= 1` | PASS/FAIL |
62
- | entitySchemaFormat | attributes[] not fields[] (BLOCKING) | `analysis.entities.every(e => e.attributes?.length > 0)` | PASS/FAIL |
63
- | entityAttributeTypes | ALL attributes have `type` field (BLOCKING) | `analysis.entities.every(e => e.attributes.every(a => a.type))` — **NOTE:** Entities in analysis phase may NOT have `type`. Step-03c auto-fix MUST have run first. If types are missing, RE-RUN step-03c auto-fix algorithm. | PASS/FAIL |
64
- | navigation | entries[] present (BLOCKING) | `specification.navigation?.entries?.length >= 1` | PASS/FAIL |
65
- | dataLifecycle | present in analysis (BLOCKING) | `analysis.dataLifecycle !== undefined` | PASS/FAIL |
66
- | wireframes | 1 per section (BLOCKING) | `(specification.uiWireframes \|\| specification.wireframes \|\| []).length >= (specification.sections \|\| []).length` (count REAL elements, check BOTH key names) | PASS/FAIL |
67
- | wireframeSchema | All required fields present (BLOCKING) | `(specification.uiWireframes \|\| specification.wireframes \|\| []).every(w => (w.screen \|\| w.title) && w.section && (w.mockup \|\| w.ascii \|\| w.content))` | PASS/FAIL |
68
- | sections | 1 (BLOCKING) | `specification.sections.length >= 1` (EVERY module needs at least 1 section) | PASS/FAIL |
69
- | gherkinScenarios | 1 array entry | `Array.isArray(specification.gherkinScenarios) && specification.gherkinScenarios.length >= 1` | PASS/FAIL |
70
- | gherkinFormat | Array not object (BLOCKING) | `Array.isArray(specification.gherkinScenarios)` (NOT a single object) | PASS/FAIL |
71
- | validations | 1 | `specification.validations.length >= 1` | PASS/FAIL |
72
- | validationFormat | rules[] array (BLOCKING) | `specification.validations.every(v => Array.isArray(v.rules))` (NOT singular `rule`) | PASS/FAIL |
73
- | messages | 4 | `specification.messages.length >= 4` | PASS/FAIL |
74
- | messageFormat | `message` field present (BLOCKING) | `specification.messages.every(m => m.message)` | PASS/FAIL |
75
- | lifeCycles | 1 (if entity has status) | `specification.lifeCycles.length >= 1` (if any entity has status/state field) | PASS/FAIL |
76
- | seedDataCore | 9 arrays present with content | See detailed check below | PASS/FAIL (BLOCKING) |
77
- | apiEndpoints | 1 | `specification.apiEndpoints.length >= 1` | PASS/FAIL |
78
- | i18nKeys | present | `specification.i18nKeys !== undefined && specification.i18nKeys !== null` | PASS/FAIL |
79
- | navigationIcons | non-null | `specification.seedDataCore.navigationModules.every(m => m.icon !== null)` | PASS/FAIL |
80
-
81
- **seedDataCore detailed check (BLOCKING):**
82
- ```javascript
83
- const sdc = specification.seedDataCore;
84
- const currentModuleIndex = metadata.workflow?.currentModuleIndex || 0;
85
- const checks = [
86
- // navigationApplications and applicationRoles: required for first module (index 0), can be empty for subsequent modules
87
- { key: "navigationApplications", actual: sdc.navigationApplications?.length || 0, min: currentModuleIndex === 0 ? 1 : 0 },
88
- { key: "applicationRoles", actual: sdc.applicationRoles?.length || 0, min: currentModuleIndex === 0 ? 1 : 0 },
89
- { key: "navigationModules", actual: sdc.navigationModules?.length || 0, min: 1 },
90
- { key: "navigationSections", actual: sdc.navigationSections?.length || 0, min: 1 }, // EVERY module needs ≥1 section
91
- { key: "navigationResources", actual: sdc.navigationResources?.length || 0, min: 1 },
92
- { key: "navigationTranslations", actual: sdc.navigationTranslations?.length || 0, min: 2 }, // min fr+en
93
- { key: "permissions", actual: sdc.permissions?.length || 0, min: 1 },
94
- { key: "rolePermissions", actual: sdc.rolePermissions?.length || 0, min: 1 },
95
- { key: "permissionConstants", actual: sdc.permissionConstants?.length || 0, min: 1 }
96
- ];
97
- const failures = checks.filter(c => c.actual < c.min);
98
- IF failures.length > 0:
99
- BLOCKING ERROR: "seedDataCore incomplete — empty arrays: {failures.map(f => f.key).join(', ')}"
100
- → Fix: Ensure specification.sections[] has ≥1 entry, then re-run 8f-bis transform
101
- ```
102
-
103
- #### 9b. Consistency Checks
104
-
105
- - Every UC has ≥1 linked FR
106
- - Every FR has ≥1 linked BR
107
- - All BR references exist in analysis.businessRules
108
- - All actors appear in permissionMatrix
109
- - Permission paths use correct format: module-level `{app}.{module}.{action}` or section-level `{app}.{module}.{section}.{action}`
110
- - rolePermissions paths match permissions paths
111
- - API routes use consistent prefix
112
-
113
- #### 9c. Convention Checks
114
-
115
- - UC-NNN format
116
- - FR-NNN format
117
- - BR-{CATEGORY}-NNN format
118
- - Entity names PascalCase
119
- - Field names camelCase
120
- - Entity attribute format: `attributes[]` with {name, description}, NOT `fields[]` with {name, type} — entities must NOT have tableName or primaryKey
121
- - Wireframe structure: `screen` (not `name`/`title`), `mockup` (not `ascii`/`content`), `componentMapping` is array of {wireframeElement, reactComponent} (not plain key-value object), `layout` is object with regions (not string)
122
- - Wireframe field naming: uses `screen` (not `title`), `mockup` (not `ascii`) — auto-fix if wrong (see 9c-fix below)
123
- - Permission paths dot-separated lowercase
124
-
125
- #### 9c-fix. Auto-Fix Wireframe Field Names (MANDATORY before writing)
126
-
127
- > **CRITICAL:** The agent may use non-canonical field names (`title`, `ascii`, `name`, `content`).
128
- > These MUST be normalized to canonical names before writing to feature.json.
129
-
130
- ```javascript
131
- // AUTO-FIX: Normalize wireframe field names before writing
132
- const wireframes = specification.uiWireframes || specification.wireframes || [];
133
- for (const wf of wireframes) {
134
- if (wf.title && !wf.screen) { wf.screen = wf.title; delete wf.title; }
135
- if (wf.ascii && !wf.mockup) { wf.mockup = wf.ascii; delete wf.ascii; }
136
- if (wf.content && !wf.mockup) { wf.mockup = wf.content; delete wf.content; }
137
- if (wf.name && !wf.screen) { wf.screen = wf.name; delete wf.name; }
138
- }
139
- // Store normalized wireframes back under canonical key
140
- specification.uiWireframes = wireframes;
141
- ```
142
-
143
- #### 9c-fix-entities. Auto-Fix Entity Attribute Types (MANDATORY before writing)
144
-
145
- > **DEFENSE-IN-DEPTH:** step-03c POST-CHECK should catch attributes without `type`,
146
- > but if any slip through to step-03d, auto-fix them here before writing to feature.json.
147
- > Uses the same type inference algorithm as step-03c POST-CHECK.
148
-
149
- ```javascript
150
- // AUTO-FIX: Ensure all entity attributes have structured type
151
- const entities = analysis.entities || [];
152
- let entityAutoFixCount = 0;
153
- for (const entity of entities) {
154
- for (const attr of entity.attributes || []) {
155
- if (!attr.type) {
156
- // Infer type from attribute name pattern
157
- if (attr.validation?.match(/max\s*\d+/i) || attr.name.match(/name|title|code|description|label|email|phone|address/i)) {
158
- attr.type = "string";
159
- const maxMatch = attr.validation?.match(/max\s*(\d+)/i);
160
- if (maxMatch) attr.maxLength = parseInt(maxMatch[1]);
161
- } else if (attr.name.match(/id$/i)) {
162
- attr.type = "Guid";
163
- } else if (attr.name.match(/date|At$/i)) {
164
- attr.type = "DateTime";
165
- } else if (attr.name.match(/is[A-Z]|has[A-Z]|active|enabled/)) {
166
- attr.type = "bool";
167
- } else if (attr.name.match(/amount|salary|rate|price|total/i)) {
168
- attr.type = "decimal";
169
- } else if (attr.name.match(/count|number|order|sort|index/i)) {
170
- attr.type = "int";
171
- } else {
172
- attr.type = "string"; // safe default
173
- }
174
- // Normalize free-text maxLength
175
- if (typeof attr.validation === 'string' && !attr.maxLength) {
176
- const m = attr.validation.match(/max\s*(\d+)/i);
177
- if (m) attr.maxLength = parseInt(m[1]);
178
- }
179
- if (attr.required === undefined) attr.required = true;
180
- entityAutoFixCount++;
181
- }
182
- }
183
- }
184
- if (entityAutoFixCount > 0) {
185
- console.warn(`DEFENSE-IN-DEPTH: auto-fixed ${entityAutoFixCount} attributes without type in step-03d`);
186
- }
187
- ```
188
-
189
- #### 9d. Decision
190
-
191
- > **TEAM AGENT MODE:** If running as team agent, SKIP AskUserQuestion. On FAIL → auto-correct silently. On PASS → proceed directly to section 11 (write). NEVER present options to the user.
192
-
193
- **INLINE MODE ONLY (main conversation):**
194
-
195
- IF validation PASS:
196
- Display summary, ask client for confirmation
197
-
198
- IF validation FAIL:
199
- Display errors, offer:
200
- ```
201
- options:
202
- - label: "Auto-corriger"
203
- description: "Corriger automatiquement les erreurs détectées"
204
- - label: "Réviser manuellement"
205
- description: "Revenir aux sections problématiques"
206
- - label: "Forcer la validation"
207
- description: "Accepter malgré les erreurs (risqué)"
208
- ```
209
-
210
- #### 9e. Write Module Validation Section (MANDATORY)
211
-
212
- > **The module feature.json MUST have a `validation` section recording the results of steps 9a-9d.**
213
-
214
- ```
215
- ba-writer.enrichSection({
216
- featureId: {module_feature_id},
217
- section: "validation",
218
- data: {
219
- validatedAt: "{ISO timestamp}",
220
- completenessChecks: [
221
- { "section": "useCases", "count": {count}, "minimum": 2, "status": "PASS|FAIL" },
222
- { "section": "functionalRequirements", "count": {count}, "minimum": 4, "status": "PASS|FAIL" },
223
- { "section": "wireframes", "count": {count}, "minimum": {section_count}, "status": "PASS|FAIL" },
224
- { "section": "seedDataCore", "count": 7, "minimum": 7, "status": "PASS|FAIL" }
225
- ],
226
- consistencyChecks: [
227
- { "check": "UC-FR linkage", "passed": {n}, "warnings": {n}, "errors": {n}, "status": "PASS|FAIL" },
228
- { "check": "BR references valid", "passed": {n}, "warnings": {n}, "errors": {n}, "status": "PASS|FAIL" },
229
- { "check": "Permission path format", "passed": {n}, "warnings": {n}, "errors": {n}, "status": "PASS|FAIL" }
230
- ],
231
- conventionChecks: [
232
- { "check": "ID naming with module prefix", "status": "PASS|FAIL", "details": "..." },
233
- { "check": "Entity names PascalCase", "status": "PASS|FAIL", "details": "..." }
234
- ],
235
- semanticChecks: [
236
- { "check": "orphan-permissions", "module": "{currentModule}", "status": "PASS|WARNING|ERROR", "details": "...", "autoFixed": false },
237
- { "check": "uc-sans-fr", "module": "{currentModule}", "status": "PASS|WARNING|ERROR", "details": "...", "autoFixed": false },
238
- { "check": "missing-wireframes", "module": "{currentModule}", "status": "PASS|WARNING|ERROR", "details": "...", "autoFixed": false }
239
- ],
240
- warnings: ["List of non-blocking warnings"],
241
- decision: {
242
- "approved": true,
243
- "reason": "All checks passed",
244
- "approvalMode": "standard",
245
- "approvedBy": "Client",
246
- "approvedAt": "{ISO timestamp}"
247
- }
248
- }
249
- })
250
- ```
251
-
252
- #### 9e-POST-CHECK: Validation Section Persistence (BLOCKING)
253
-
254
- > **CRITICAL:** The `validation` section MUST be persisted to feature.json. Without it, consolidation checks fail.
255
-
256
- ```bash
257
- MODULE_JSON="{module_feature_json_path}"
258
- node -e "const d=JSON.parse(require('fs').readFileSync(process.argv[1],'utf-8'));
259
- if(!d.validation||!d.validation.decision) { console.error('FAIL: validation section missing or incomplete'); process.exit(1); }
260
- console.log('PASS: validation section present with decision');" "$MODULE_JSON"
261
- ```
262
-
263
- IF this check FAILS → re-execute section 9e write and re-run this check.
264
-
265
- #### 9f. Module Specification Checklist (BLOCKING)
266
-
267
- > **CRITICAL:** This checklist MUST be FULLY COMPLETED before marking module status = "specified".
268
-
269
- **Execute the comprehensive validation checklist:**
270
-
271
- Run the 29-check validation process across 10 categories:
272
- - Data Model (4 checks) | Business Rules (3 checks) | Use Cases & FRs (4 checks)
273
- - Permissions (3 checks) | UI & Navigation (4 checks) | I18N & Messages (3 checks)
274
- - Seed Data (2 checks) | API Endpoints (2 checks) | Validations (1 check) | Gherkin (3 checks)
275
-
276
- ```javascript
277
- const blockingFailures = checks.filter(c => c.blocking && c.status === "FAIL");
278
-
279
- IF blockingFailures.length > 0:
280
- // CONDITIONAL LOAD: Only load detailed checklist on validation failure
281
- Read references/validation-checklist.md
282
- Display:
283
- - Full validation logic for FAILED checks
284
- - Exact requirements (minimums, patterns, formats)
285
- - Fix recommendations for each failure
286
-
287
- BLOCKING ERROR: Module specification incomplete
288
- → Fix all failures before proceeding
289
-
290
- ELSE:
291
- All blocking checks passed ✓
292
- Display: "{warnings_count} warnings (non-blocking)"
293
- → Proceed to mark module as "specified"
294
- ```
295
-
296
- **Optimization:** The detailed 280-line validation-checklist.md is loaded **only when validation fails** (saves ~10,000 tokens on success path).
297
-
298
- ---
299
-
300
- ### 9g. Anti-Premature-Completion Guard (MANDATORY)
301
-
302
- > **CRITICAL — NEVER say "the analysis is complete" or "ready for /ralph-loop" at this point.**
303
- > Step-03d is the END of SPECIFICATION, NOT the end of the BA workflow.
304
- > Steps 04a → 04b → 04c (consolidation) + 05a → 05b → 05c (handoff) are STILL REQUIRED.
305
- > Without handoff, /ralph-loop will generate an INCOMPLETE PRD (no frontend, no tests).
306
-
307
- **FORBIDDEN phrases in step-03d output:**
308
- - "L'analyse métier est complète" / "The business analysis is complete"
309
- - "Prêt pour /ralph-loop" / "Ready for /ralph-loop"
310
- - "Vous pouvez maintenant lancer /ralph-loop"
311
- - Any variation suggesting the BA is finished or /ralph-loop can be invoked
312
-
313
- **REQUIRED phrasing:**
314
- - "Module {name} spécifié. {Remaining} modules restants." (if more modules)
315
- - "Tous les modules spécifiés. Passage à la consolidation (étapes 04a-04c)..." (if last module)
316
- - NEVER mention /ralph-loop — only step-05c (ralph readiness) validates the handoff
317
-
318
- ### 10. Module Summary with Roles & Permissions
319
-
320
- Display comprehensive summary:
321
-
322
- ```
323
- ═══════════════════════════════════════════════════════════
324
- MODULE SPÉCIFIÉ: {currentModule} ({currentModuleIndex + 1}/{total})
325
- ═══════════════════════════════════════════════════════════
326
-
327
- | Aspect | Valeur |
328
- |--------|--------|
329
- | Entités | {count} ({entity names}) |
330
- | Business Rules | {count} (VAL: X, CALC: Y, WF: Z) |
331
- | Use Cases | {count} (UC-001 → UC-NNN) |
332
- | Exigences | {count} FRs |
333
- | Sections | {count} ({section names}) |
334
- | Maquettes | {count} wireframes |
335
- | Permissions | {count} paths |
336
- | Tests Gherkin | {count} scénarios |
337
- | Messages | {count} |
338
-
339
- ### Rôles & Permissions pour {currentModule}
340
- | Rôle | Permissions |
341
- |------|------------|
342
- | {App} Admin | {app}.{module}.* |
343
- | {App} Manager | read, create, update, assign |
344
- | {App} Contributor | read, create, update |
345
- | {App} Viewer | read |
346
-
347
- → Validation: {PASS/FAIL}
348
- ═══════════════════════════════════════════════════════════
349
-
350
- {IF validation PASS}:
351
- → Module validé automatiquement
352
- → Passage automatique au module suivant (section 12)
353
-
354
- {IF validation FAIL}:
355
- → Afficher les erreurs et offrir les options de correction (section 9d)
356
- ```
357
-
358
- ---
359
-
360
- ### 11. Write Module Feature.json
361
-
362
- ```
363
- // Write analysis section with ALL subsections
364
- ba-writer.enrichSection({
365
- featureId: {module_feature_id},
366
- section: "analysis",
367
- data: {
368
- objectives: [{id, objective, metric, target}], // from 6a
369
- entities: [{name, description, attributes, relationships}], // from 6b — SCHEMA FORMAT
370
- businessRules: [{id, name, category, statement, priority, conditions, examples, testability}], // from 7 — SCHEMA FORMAT
371
- processFlow: {entryPoints, mainFlow, decisionPoints, alternativeFlows}, // from 6c
372
- dataLifecycle: {retentionPeriod, archiveStrategy, gdprCompliance, states} // from 6d
373
- }
374
- })
375
-
376
- // Write specification section with ALL subsections
377
- ba-writer.enrichSection({
378
- featureId: {module_feature_id},
379
- section: "specification",
380
- data: {
381
- actors: [{role, description, permissions}], // 8a
382
- useCases: [{id, name, primaryActor, permission, mainScenario, linkedRules}], // 8b
383
- functionalRequirements: [{id, statement, priority, linkedRules, linkedUseCases, acceptanceCriteria}], // 8c
384
- permissionMatrix: {permissions: [], roleAssignments: []}, // 8d
385
- navigation: {entries: []}, // 8e
386
- seedDataCore: {navigationModules, navigationSections, navigationResources, navigationTranslations, permissions, rolePermissions, permissionConstants}, // 8f (7 arrays)
387
- gherkinScenarios: [{feature, scenarios: [{name, tags, given, when, then}]}], // 8g
388
- validations: [{entity, field, rules, errorMessageKey}], // 8h
389
- messages: [{code, type, title, message, i18nKey}], // 8i
390
- lifeCycles: [{entity, field, initialState, states: [{id, displayName, color, allowedTransitions, isTerminal}], transitions}], // 8j
391
- apiEndpoints: [{method, path, permission, requestDto, responseDto, description}], // 8k
392
- i18nKeys: {...}, // 8l
393
- sections: [{code, labels, route, icon, permission, wireframe, useCases, businessRules, resources}], // from 3a-bis
394
- dashboards: [{code, title, kpis, filters, refreshMode}], // from 3d
395
- uiWireframes: [{screen, section, mockup, elements, actions, componentMapping, layout}] // from 3b
396
- }
397
- })
398
-
399
- // Write validation results from step 9
400
- // (Already written in step 9e above)
401
-
402
- ba-writer.updateStatus({module_feature_id}, "specified")
403
-
404
- // Update master
405
- ba-writer.updateModuleStatus({feature_id}, {currentModule.code}, "specified")
406
- ```
407
-
408
- #### 11-POST-CHECK: Verify Written Data (BLOCKING)
409
-
410
- > **CRITICAL — Data loss prevention.** After writing, READ BACK the module feature.json and verify the following arrays are **non-empty**:
411
-
412
- ```javascript
413
- // READ BACK the written feature.json
414
- const written = ba-reader.read({module_feature_id});
415
-
416
- // BLOCKING checks — if ANY fails, the write was incomplete
417
- const checks = [
418
- { key: "specification.actors", actual: written.specification?.actors?.length, min: 2 },
419
- { key: "specification.useCases", actual: written.specification?.useCases?.length, min: 2 },
420
- { key: "specification.wireframes", actual: (written.specification?.uiWireframes?.length || written.specification?.wireframes?.length || 0), min: 1 },
421
- { key: "specification.sections", actual: written.specification?.sections?.length, min: 1 },
422
- { key: "specification.seedDataCore", actual: Object.keys(written.specification?.seedDataCore || {}).length, min: 7 },
423
- { key: "specification.lifeCycles", actual: written.specification?.lifeCycles?.length, min: 0 },
424
- { key: "specification.gherkinScenarios",actual: written.specification?.gherkinScenarios?.length,min: 1 },
425
- { key: "specification.apiEndpoints", actual: written.specification?.apiEndpoints?.length, min: 1 }
426
- ];
427
-
428
- const failures = checks.filter(c => (c.actual || 0) < c.min);
429
-
430
- IF failures.length > 0:
431
- BLOCKING ERROR: "Feature.json write INCOMPLETE — missing data in: {failures.map(f => f.key).join(', ')}"
432
- → Re-execute section 11 write with ALL specification data
433
- → DO NOT proceed to next module until ALL checks pass
434
-
435
- // SPECIAL CHECK: wireframes content verification (check BOTH key names)
436
- const wireframes = written.specification?.uiWireframes || written.specification?.wireframes || [];
437
- IF wireframes.length > 0:
438
- const emptyMockups = wireframes.filter(wf => !wf.mockup && !wf.ascii && !wf.content);
439
- IF emptyMockups.length > 0:
440
- WARNING: "{emptyMockups.length} wireframes have empty mockup content — verify step-03b data"
441
-
442
- // SPECIAL CHECK: wireframes >= sections
443
- const sectionCount = written.specification?.sections?.length || 0;
444
- IF wireframes.length < sectionCount:
445
- BLOCKING ERROR: "{wireframes.length} wireframes < {sectionCount} sections — wireframes MISSING for some sections"
446
- → Re-read wireframes from conversation context and re-write to feature.json
447
- ```
448
-
449
- #### 11-POST-CHECK-BASH: Acceptance Criteria Verification (BLOCKING)
450
-
451
- > **CRITICAL:** The pseudocode checks above are interpreted by the model — they can be "passed" incorrectly.
452
- > This bash check reads the REAL file on disk and provides an objective verification.
453
- > See [references/acceptance-criteria.md](../references/acceptance-criteria.md) for the full acceptance criteria definition.
454
-
455
- ```bash
456
- MODULE_JSON="{module_feature_json_path}"
457
- node -e "
458
- const fs = require('fs');
459
- const data = JSON.parse(fs.readFileSync(process.argv[1], 'utf-8'));
460
- const spec = data.specification || {};
461
- const analysis = data.analysis || {};
462
- const wf = spec.uiWireframes || spec.wireframes || [];
463
- const sections = spec.sections || [];
464
- const checks = [
465
- ['entities >= 1', (analysis.entities||[]).length, 1],
466
- ['useCases >= 2', (spec.useCases||[]).length, 2],
467
- ['FRs >= 4', (spec.functionalRequirements||[]).length,4],
468
- ['wireframes >= 1', wf.length, 1],
469
- ['wireframes >= sections', wf.length, sections.length],
470
- ['sections >= 1', sections.length, 1],
471
- ['seedDataCore 7 arrays', Object.keys(spec.seedDataCore||{}).filter(k=>(spec.seedDataCore||{})[k]&&(spec.seedDataCore||{})[k].length>0).length, 7],
472
- ['gherkin is array', Array.isArray(spec.gherkinScenarios)?1:0, 1],
473
- ['apiEndpoints >= 1', (spec.apiEndpoints||[]).length, 1],
474
- ['messages >= 4', (spec.messages||[]).length, 4],
475
- ['validations >= 1', (spec.validations||[]).length, 1],
476
- ['navigation entries', (spec.navigation?.entries||[]).length, 1],
477
- ['dataLifecycle', analysis.dataLifecycle ? 1 : 0, 1],
478
- ['validation section', data.validation ? 1 : 0, 1]
479
- ];
480
- // AC-18: i18n 4 languages check
481
- const i18n = spec.i18nKeys || {};
482
- const i18nLangs = ['fr','en','it','de'];
483
- let i18nMissing = 0;
484
- function checkI18nLeaf(obj) {
485
- if (typeof obj !== 'object' || obj === null) return;
486
- const hasLang = i18nLangs.some(l => typeof obj[l] === 'string');
487
- if (hasLang) { i18nLangs.forEach(l => { if (!obj[l]) i18nMissing++; }); }
488
- else { Object.values(obj).forEach(v => checkI18nLeaf(v)); }
489
- }
490
- checkI18nLeaf(i18n);
491
- checks.push(['i18n 4 languages (missing keys)', 0, i18nMissing > 10 ? 1 : 0]);
492
-
493
- const fails = checks.filter(c => c[1] < c[2]);
494
- fails.forEach(f => console.error('FAIL: ' + f[0] + ' = ' + f[1] + ' (min: ' + f[2] + ')'));
495
- if (i18nMissing > 0 && i18nMissing <= 10) { console.warn('WARNING: ' + i18nMissing + ' i18n leaf keys missing translations (IT/DE)'); }
496
- // Check wireframe content
497
- const emptyWf = wf.filter(w => !w.mockup && !w.ascii && !w.content);
498
- if (emptyWf.length > 0) { fails.push(['wireframe content', 0, 1]); console.error('FAIL: ' + emptyWf.length + ' wireframes have EMPTY content'); }
499
- // Check entity attribute types
500
- const badAttrs = (analysis.entities||[]).flatMap(e => (e.attributes||[]).filter(a => !a.type).map(a => e.name+'.'+a.name));
501
- if (badAttrs.length > 0) { fails.push(['attr.type', 0, 1]); console.error('FAIL: attributes without type: ' + badAttrs.join(', ')); }
502
- // AC-15: Validation rules format
503
- const badRules = (spec.validations||[]).filter(v => v.rules && !Array.isArray(v.rules));
504
- if (badRules.length > 0) { fails.push(['AC-15: rules not array', badRules.length, 0]); console.error('FAIL: AC-15: ' + badRules.length + ' validations have rules as string'); }
505
- // AC-16: Messages must have message field
506
- const noMsg = (spec.messages||[]).filter(m => !m.message);
507
- if (noMsg.length > 0) { fails.push(['AC-16: message missing', noMsg.length, 0]); console.error('FAIL: AC-16: ' + noMsg.length + ' messages missing message field'); }
508
- // AC-17: Gherkin content structure
509
- if (Array.isArray(spec.gherkinScenarios)) { const badG = spec.gherkinScenarios.filter(g => !g.feature || !Array.isArray(g.scenarios)); if (badG.length > 0) { fails.push(['AC-17: gherkin content', badG.length, 0]); console.error('FAIL: AC-17: ' + badG.length + ' gherkin entries invalid'); } }
510
- if (fails.length > 0) { console.error('BLOCKING: ' + fails.length + ' acceptance criteria failed'); process.exit(1); }
511
- console.log('PASS: All acceptance criteria met');
512
- " "$MODULE_JSON"
513
- ```
514
-
515
- IF this check FAILS:
516
- - Identify which criteria failed from the output
517
- - Fix the corresponding data (re-read from conversation context, re-generate, or re-run the step that produces it)
518
- - Re-write to feature.json
519
- - Re-run the POST-CHECK until PASS
520
-
521
- > **WHY:** Step-03b now writes wireframes intermediately (since fix), but step-03d section 11 does the FULL write.
522
- > This bash POST-CHECK is the ultimate safety net — it reads the REAL file and verifies ALL acceptance criteria.
523
- > The pseudocode checks (section 9a) catch issues early; this bash check catches anything the model missed.
524
-
525
- ---
526
-
527
- ### 11-bis. Deploy Incremental Interactive HTML (MANDATORY)
528
-
529
- > **After each module is specified, deploy/update the interactive HTML document with all available data.**
530
- > The client can review completed modules while the next module is being specified.
531
-
532
- See [references/validate-incremental-html.md](../references/validate-incremental-html.md) for the complete deployment process (read sources, build FEATURE_DATA, replace placeholders, write HTML).
533
-
534
- Uses the **same mapping** as step-05b-deploy.md — only difference is `moduleSpecs` only includes completed modules.
535
-
536
- ---
537
-
538
- ### 12. Loop Decision
539
-
540
- > **TEAM AGENT MODE: SKIP THIS ENTIRE SECTION.** If you are a team agent (your prompt contains `PROPOSE & REVIEW`), go directly to **section 12-bis** below. Section 12 is for inline mode ONLY. You MUST NOT load the next step or advance the module loop — the team lead handles orchestration.
541
-
542
- **INLINE MODE ONLY (main conversation):**
543
-
544
- ```
545
- ba-writer.advanceModuleLoop({feature_id})
546
- → Increments currentModuleIndex
547
- → Updates completedModules
548
- → Updates currentModule
549
-
550
- IF currentModuleIndex < moduleOrder.length:
551
- Display: "→ Module suivant: {nextModule} ({currentModuleIndex + 1}/{total})"
552
- Load: steps/step-03a1-setup.md
553
-
554
- IF currentModuleIndex >= moduleOrder.length:
555
- ba-writer.updateStatus({feature_id}, "specified")
556
-
557
- // CHECKPOINT: Save progress BEFORE transition (protects against context exhaustion)
558
- ba-writer.enrichSection({
559
- featureId: {feature_id},
560
- section: "metadata.workflow",
561
- data: {
562
- lastCompletedStep: "step-03d-validate",
563
- allModulesSpecified: true
564
- }
565
- })
566
-
567
- // CHECK: Are we in project mode (multi-application)?
568
- IF workflow.mode === "project":
569
- // APPLICATION LOOP: Check if more applications remain
570
- projectFeature = ba-reader.findProjectFeature()
571
- ba-writer.updateApplicationStatus(projectId, currentApp.code, "specified")
572
- ba-writer.advanceApplicationLoop(projectId)
573
-
574
- IF projectFeature.metadata.workflow.currentApplicationIndex + 1 < projectFeature.metadata.workflow.applicationOrder.length:
575
- nextApp = projectFeature.metadata.workflow.applicationOrder[currentApplicationIndex + 1]
576
- Display: "═══ Application {currentApp.name} terminée ({N}/{total}). Prochaine : {nextApp} ═══"
577
- Display: "⚠ NE PAS lancer /ralph-loop — d'autres applications et la consolidation sont encore nécessaires."
578
- // Load step-02 for next application's module decomposition
579
- Load: steps/step-02-decomposition.md
580
- ELSE:
581
- Display: "═══ Toutes les applications spécifiées! Passage à la consolidation cross-application... ═══"
582
- Display: "⚠ NE PAS lancer /ralph-loop — la consolidation et le handoff sont encore nécessaires."
583
- ba-writer.updateStatus(projectId, "specified")
584
- Load: steps/step-04a-collect.md
585
- ELSE:
586
- // SINGLE APPLICATION: Current behavior
587
- Display: "═══ Tous les modules spécifiés! Passage à la consolidation (04a→04c) puis handoff (05a→05c)... ═══"
588
- Display: "⚠ NE PAS lancer /ralph-loop — la consolidation et le handoff sont encore nécessaires."
589
-
590
- // MANDATORY TRANSITION — DO NOT STOP HERE
591
- // If context is near exhaustion, the checkpoint above ensures the user
592
- // can resume with /business-analyse and it will route to step-04a automatically.
593
- Load: steps/step-04a-collect.md
594
- ```
595
-
596
- ---
597
-
598
- ## 12-bis. Agent Mode: Send Proposal to Team Lead
599
-
600
- **IF running as TEAM AGENT (autonomous mode — detected in step-03a1 MODE DETECTION):**
601
-
602
- After all validation checks PASS and module feature.json is written:
603
-
604
- ### A. Build Structured Summary
605
-
606
- Read the written module feature.json via ba-reader and build:
607
-
608
- ```
609
- ## Module: {moduleCode} — Specification Summary
610
-
611
- ### Entities ({count})
612
- | Entity | Key Attributes | Relationships |
613
- |--------|---------------|---------------|
614
- | {name} | {attr1} ({type}), {attr2} ({type}), ... | → {relatedEntity} (FK) |
615
-
616
- ### Sections ({count})
617
- | Section | Description | Resources |
618
- |---------|-------------|-----------|
619
- | {code} | {description} | {resource1}, {resource2}, ... |
620
-
621
- ### Use Cases ({count})
622
- - {UC-ID}: {title}
623
-
624
- ### Business Rules ({count})
625
- - {BR-ID}: {title} ({category})
626
-
627
- ### Permissions
628
- - {permission.path}: {roles with access}
629
-
630
- ### Seed Data Counts
631
- - Modules: {n} | Sections: {n} | Resources: {n}
632
- - Translations: {n} | Permissions: {n} | Role mappings: {n} | Constants: {n}
633
-
634
- ### Wireframes
635
- - {section}: {1-line description of layout and key components}
636
- ```
637
-
638
- ### B. Send Proposal
639
-
640
- ```
641
- SendMessage({
642
- type: "message",
643
- recipient: "team-lead",
644
- content: "PROPOSAL_READY:{moduleCode}\n\n{structured_summary}",
645
- summary: "{moduleCode} specification ready for review"
646
- })
647
- ```
648
-
649
- ### C. Wait for Response
650
-
651
- **WAIT** for team lead to respond:
652
-
653
- - **`APPROVED:{moduleCode}`** → Proceed to step D (Module Complete)
654
- - **`REVISION:{moduleCode}\n{feedback}`** → Apply changes:
655
- 1. Read the feedback
656
- 2. Update the relevant sections in feature.json via ba-writer
657
- 3. Re-run validation checks (section 9)
658
- 4. Re-build summary and send new `PROPOSAL_READY`
659
- 5. Max **3 revision cycles** — after 3, send `ERROR:{moduleCode}:Max revisions reached` and stop
660
-
661
- ### D. Module Complete
662
-
663
- After approval:
664
-
665
- ```
666
- ba-writer.updateModuleStatus({feature_id}, {moduleCode}, "specified")
667
- ```
668
-
669
- ```
670
- SendMessage({
671
- type: "message",
672
- recipient: "team-lead",
673
- content: "MODULE_COMPLETE:{moduleCode}",
674
- summary: "{moduleCode} module complete"
675
- })
676
- ```
677
-
678
- Then WAIT — the team lead will send you a `shutdown_request`.
679
- Do NOT loop to next module. The team lead handles module ordering and will spawn a new agent for the next module.
680
-
681
- ### E. Shutdown (MANDATORY)
682
-
683
- When you receive a `shutdown_request` from the team lead:
684
-
685
- ```
686
- SendMessage({
687
- type: "shutdown_response",
688
- request_id: "{requestId from the shutdown_request message}",
689
- approve: true
690
- })
691
- ```
692
-
693
- This terminates your process. Do NOT output any text after `shutdown_response`.
694
-
695
- **Sequence reminder:** APPROVED → MODULE_COMPLETE → shutdown_request → shutdown_response (4 separate steps, never skip).
696
-
697
- ---
698
-
699
- ## SELF-VERIFICATION (MANDATORY before loading next step)
700
-
701
- Before proceeding to step-03a (next module) or step-04 (consolidation), VERIFY:
702
-
703
- 1. **Module feature.json has specification section** with ALL sub-sections (actors, useCases, functionalRequirements, permissionMatrix, navigation, seedDataCore, gherkinScenarios, validations, messages, lifeCycles, apiEndpoints, i18nKeys, sections, uiWireframes)
704
- 2. **Module feature.json status** = "specified" (set by section 11)
705
- 3. **Master modules[].status** for this module = "specified" (set by section 11)
706
- 4. **ba-interactive.html exists** and includes data for this module (set by section 11-bis)
707
-
708
- **IF any check fails → FIX before proceeding.** Do NOT advance the module loop with incomplete data.
709
-
710
- ---
711
-
712
- ## SINGLE-MODULE MODE
713
-
714
- When only 1 module in moduleOrder:
715
-
716
- - Same full validation flow
717
- - Skip cross-module references (section 5)
718
- - After validation → direct to step-04a-collect.md (auto-consolidation)
719
-
720
- ---
721
-
722
- ## RESUME SUPPORT
723
-
724
- IF the step is resumed (e.g., after interruption):
725
-
726
- ```
727
- Read metadata.workflow.currentModuleIndex
728
- Read metadata.workflow.currentModule
729
- → Resume at the correct module
730
- → If module has partial data, show what exists and continue from there
731
- ```
732
-
733
- ---
734
-
735
- ## CONTEXT MANAGEMENT
736
-
737
- | Loaded | Not Loaded |
738
- |--------|------------|
739
- | _shared.md | Other module feature.json (full) |
740
- | feature-schema.json | Questionnaires not needed |
741
- | Questionnaires for this module | Templates |
742
- | Completed modules summary (100 lines max) | React viewer files |
743
-
744
- ---
745
-
746
- ## STATE VARIABLES
747
-
748
- | Variable | Description |
749
- |----------|-------------|
750
- | `{currentModule}` | Current module being specified |
751
- | `{currentModuleIndex}` | Index in moduleOrder |
752
- | `{completedModules}` | Array of already specified module codes |
753
- | `{module_feature_id}` | Feature ID for the module-level feature.json |
754
-
755
- ---
756
-
757
- ## SUCCESS METRICS
758
-
759
- - Module specification validation PASS
760
- - Per-module validation results recorded in feature.json
761
- - Client confirmed module specification
762
- - Module feature.json written with all sections
763
- - Master updated with module status
764
- - Interactive HTML deployed/updated with completed module data (incremental)
765
- - Loop advanced correctly or consolidation phase initiated
766
-
767
- ---
768
-
769
- ## FAILURE MODES
770
-
771
- - Validation FAIL → offer auto-correct / manual revise / force
772
- - Client rejects → revise specific sections via step-03a or step-03b
773
- - Cross-module reference error → clarify with client
774
- - Interruption → resumable via workflow state
775
-
776
- ---
777
-
778
- ## NEXT STEP
779
-
780
- Conditional:
781
-
782
- - IF modules remaining → Load `steps/step-03a1-setup.md`
783
- - IF all modules done → Load `steps/step-04a-collect.md`