@auto-engineer/narrative 1.139.0 → 1.140.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +5 -5
  3. package/.turbo/turbo-type-check.log +1 -1
  4. package/CHANGELOG.md +32 -0
  5. package/README.md +8 -8
  6. package/dist/scripts/convert-flow-exec.js +2 -2
  7. package/dist/scripts/convert-flow-exec.js.map +1 -1
  8. package/dist/scripts/print-schema.js +5 -5
  9. package/dist/scripts/print-schema.js.map +1 -1
  10. package/dist/src/fluent-builder.d.ts +29 -29
  11. package/dist/src/fluent-builder.d.ts.map +1 -1
  12. package/dist/src/fluent-builder.js +81 -81
  13. package/dist/src/fluent-builder.js.map +1 -1
  14. package/dist/src/{getNarratives.d.ts → getScenes.d.ts} +6 -6
  15. package/dist/src/getScenes.d.ts.map +1 -0
  16. package/dist/src/{getNarratives.js → getScenes.js} +16 -16
  17. package/dist/src/getScenes.js.map +1 -0
  18. package/dist/src/id/addAutoIds.d.ts.map +1 -1
  19. package/dist/src/id/addAutoIds.js +22 -22
  20. package/dist/src/id/addAutoIds.js.map +1 -1
  21. package/dist/src/id/hasAllIds.d.ts.map +1 -1
  22. package/dist/src/id/hasAllIds.js +2 -2
  23. package/dist/src/id/hasAllIds.js.map +1 -1
  24. package/dist/src/index.d.ts +8 -8
  25. package/dist/src/index.d.ts.map +1 -1
  26. package/dist/src/index.js +4 -4
  27. package/dist/src/index.js.map +1 -1
  28. package/dist/src/loader/index.js +1 -1
  29. package/dist/src/loader/index.js.map +1 -1
  30. package/dist/src/loader/runtime-cjs.js +1 -1
  31. package/dist/src/loader/runtime-cjs.js.map +1 -1
  32. package/dist/src/narrative-context.d.ts +9 -9
  33. package/dist/src/narrative-context.d.ts.map +1 -1
  34. package/dist/src/narrative-context.js +47 -47
  35. package/dist/src/narrative-context.js.map +1 -1
  36. package/dist/src/narrative-registry.d.ts +6 -6
  37. package/dist/src/narrative-registry.d.ts.map +1 -1
  38. package/dist/src/narrative-registry.js +26 -26
  39. package/dist/src/narrative-registry.js.map +1 -1
  40. package/dist/src/narrative.d.ts +5 -5
  41. package/dist/src/narrative.d.ts.map +1 -1
  42. package/dist/src/narrative.js +26 -27
  43. package/dist/src/narrative.js.map +1 -1
  44. package/dist/src/parse-graphql-request.d.ts +1 -1
  45. package/dist/src/parse-graphql-request.d.ts.map +1 -1
  46. package/dist/src/parse-graphql-request.js +3 -3
  47. package/dist/src/parse-graphql-request.js.map +1 -1
  48. package/dist/src/samples/items.narrative.js +2 -2
  49. package/dist/src/samples/items.narrative.js.map +1 -1
  50. package/dist/src/samples/mixed-given-types.narrative.js +2 -2
  51. package/dist/src/samples/mixed-given-types.narrative.js.map +1 -1
  52. package/dist/src/samples/place-order.narrative.js +2 -2
  53. package/dist/src/samples/place-order.narrative.js.map +1 -1
  54. package/dist/src/samples/questionnaires.narrative.js +2 -2
  55. package/dist/src/samples/questionnaires.narrative.js.map +1 -1
  56. package/dist/src/samples/seasonal-assistant.schema.json +2 -2
  57. package/dist/src/samples/test-with-ids.narrative.js +2 -2
  58. package/dist/src/samples/test-with-ids.narrative.js.map +1 -1
  59. package/dist/src/schema.d.ts +136 -136
  60. package/dist/src/schema.d.ts.map +1 -1
  61. package/dist/src/schema.js +76 -76
  62. package/dist/src/schema.js.map +1 -1
  63. package/dist/src/slice-builder.d.ts +6 -6
  64. package/dist/src/slice-builder.d.ts.map +1 -1
  65. package/dist/src/slice-builder.js +21 -21
  66. package/dist/src/slice-builder.js.map +1 -1
  67. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js +1 -1
  68. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js.map +1 -1
  69. package/dist/src/transformers/model-to-narrative/cross-module-imports.js +4 -4
  70. package/dist/src/transformers/model-to-narrative/cross-module-imports.js.map +1 -1
  71. package/dist/src/transformers/model-to-narrative/generators/compose.js +3 -3
  72. package/dist/src/transformers/model-to-narrative/generators/compose.js.map +1 -1
  73. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts +2 -2
  74. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts.map +1 -1
  75. package/dist/src/transformers/model-to-narrative/generators/flow.js +20 -20
  76. package/dist/src/transformers/model-to-narrative/generators/flow.js.map +1 -1
  77. package/dist/src/transformers/model-to-narrative/generators/imports.d.ts +1 -1
  78. package/dist/src/transformers/model-to-narrative/generators/imports.d.ts.map +1 -1
  79. package/dist/src/transformers/model-to-narrative/generators/imports.js +1 -1
  80. package/dist/src/transformers/model-to-narrative/generators/imports.js.map +1 -1
  81. package/dist/src/transformers/model-to-narrative/generators/module-code.js +14 -14
  82. package/dist/src/transformers/model-to-narrative/generators/module-code.js.map +1 -1
  83. package/dist/src/transformers/model-to-narrative/index.d.ts +4 -4
  84. package/dist/src/transformers/model-to-narrative/index.d.ts.map +1 -1
  85. package/dist/src/transformers/model-to-narrative/index.js +1 -1
  86. package/dist/src/transformers/model-to-narrative/spec-traversal.d.ts +2 -2
  87. package/dist/src/transformers/model-to-narrative/spec-traversal.d.ts.map +1 -1
  88. package/dist/src/transformers/model-to-narrative/spec-traversal.js +5 -5
  89. package/dist/src/transformers/model-to-narrative/spec-traversal.js.map +1 -1
  90. package/dist/src/transformers/model-to-narrative/types.d.ts +1 -1
  91. package/dist/src/transformers/model-to-narrative/types.d.ts.map +1 -1
  92. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts +1 -1
  93. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts.map +1 -1
  94. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js +4 -4
  95. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js.map +1 -1
  96. package/dist/src/transformers/model-to-narrative/validate-modules.d.ts +1 -1
  97. package/dist/src/transformers/model-to-narrative/validate-modules.d.ts.map +1 -1
  98. package/dist/src/transformers/model-to-narrative/validate-modules.js +19 -19
  99. package/dist/src/transformers/model-to-narrative/validate-modules.js.map +1 -1
  100. package/dist/src/transformers/narrative-to-model/assemble.d.ts +2 -2
  101. package/dist/src/transformers/narrative-to-model/assemble.d.ts.map +1 -1
  102. package/dist/src/transformers/narrative-to-model/assemble.js +10 -3
  103. package/dist/src/transformers/narrative-to-model/assemble.js.map +1 -1
  104. package/dist/src/transformers/narrative-to-model/debug.d.ts.map +1 -1
  105. package/dist/src/transformers/narrative-to-model/debug.js +1 -1
  106. package/dist/src/transformers/narrative-to-model/debug.js.map +1 -1
  107. package/dist/src/transformers/narrative-to-model/derive-modules.d.ts +2 -2
  108. package/dist/src/transformers/narrative-to-model/derive-modules.d.ts.map +1 -1
  109. package/dist/src/transformers/narrative-to-model/derive-modules.js +9 -9
  110. package/dist/src/transformers/narrative-to-model/derive-modules.js.map +1 -1
  111. package/dist/src/transformers/narrative-to-model/index.d.ts +2 -2
  112. package/dist/src/transformers/narrative-to-model/index.d.ts.map +1 -1
  113. package/dist/src/transformers/narrative-to-model/index.js +39 -39
  114. package/dist/src/transformers/narrative-to-model/index.js.map +1 -1
  115. package/dist/src/transformers/narrative-to-model/spec-processors.js +1 -1
  116. package/dist/src/transformers/narrative-to-model/spec-processors.js.map +1 -1
  117. package/dist/src/transformers/narrative-to-model/strings.d.ts +1 -1
  118. package/dist/src/transformers/narrative-to-model/strings.d.ts.map +1 -1
  119. package/dist/src/transformers/narrative-to-model/strings.js +6 -6
  120. package/dist/src/transformers/narrative-to-model/strings.js.map +1 -1
  121. package/dist/src/validate-slice-requests.d.ts +4 -4
  122. package/dist/src/validate-slice-requests.d.ts.map +1 -1
  123. package/dist/src/validate-slice-requests.js +34 -34
  124. package/dist/src/validate-slice-requests.js.map +1 -1
  125. package/dist/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +4 -4
  127. package/scripts/convert-flow-exec.ts +2 -2
  128. package/scripts/print-schema.ts +8 -8
  129. package/src/fluent-builder.specs.ts +3 -3
  130. package/src/fluent-builder.ts +141 -141
  131. package/src/{getNarratives.cache.specs.ts → getScenes.cache.specs.ts} +45 -45
  132. package/src/{getNarratives.specs.ts → getScenes.specs.ts} +302 -300
  133. package/src/{getNarratives.ts → getScenes.ts} +20 -20
  134. package/src/id/addAutoIds.specs.ts +105 -105
  135. package/src/id/addAutoIds.ts +26 -26
  136. package/src/id/hasAllIds.specs.ts +59 -59
  137. package/src/id/hasAllIds.ts +6 -6
  138. package/src/index.ts +12 -13
  139. package/src/loader/index.ts +1 -1
  140. package/src/loader/runtime-cjs.ts +1 -1
  141. package/src/model-to-narrative.specs.ts +133 -135
  142. package/src/narrative-context.specs.ts +24 -24
  143. package/src/narrative-context.ts +61 -61
  144. package/src/narrative-registry.ts +31 -31
  145. package/src/narrative.ts +31 -33
  146. package/src/parse-graphql-request.specs.ts +5 -5
  147. package/src/parse-graphql-request.ts +3 -3
  148. package/src/samples/items.narrative.ts +2 -2
  149. package/src/samples/mixed-given-types.narrative.ts +2 -2
  150. package/src/samples/place-order.narrative.ts +2 -2
  151. package/src/samples/questionnaires.narrative.ts +2 -2
  152. package/src/samples/seasonal-assistant.schema.json +2 -2
  153. package/src/samples/test-with-ids.narrative.ts +2 -2
  154. package/src/schema.specs.ts +99 -91
  155. package/src/schema.ts +89 -89
  156. package/src/slice-builder.ts +30 -30
  157. package/src/transformers/model-to-narrative/analysis/lint-helpers.ts +1 -1
  158. package/src/transformers/model-to-narrative/cross-module-imports.specs.ts +43 -43
  159. package/src/transformers/model-to-narrative/cross-module-imports.ts +4 -4
  160. package/src/transformers/model-to-narrative/generators/compose.ts +4 -4
  161. package/src/transformers/model-to-narrative/generators/flow.ts +36 -36
  162. package/src/transformers/model-to-narrative/generators/imports.ts +1 -1
  163. package/src/transformers/model-to-narrative/generators/module-code.ts +15 -15
  164. package/src/transformers/model-to-narrative/index.ts +4 -4
  165. package/src/transformers/model-to-narrative/modules.specs.ts +58 -58
  166. package/src/transformers/model-to-narrative/spec-traversal.specs.ts +43 -43
  167. package/src/transformers/model-to-narrative/spec-traversal.ts +6 -6
  168. package/src/transformers/model-to-narrative/types.ts +1 -1
  169. package/src/transformers/model-to-narrative/utils/integration-extractor.ts +5 -5
  170. package/src/transformers/model-to-narrative/validate-modules.ts +22 -22
  171. package/src/transformers/narrative-to-model/assemble.ts +12 -4
  172. package/src/transformers/narrative-to-model/debug.ts +1 -1
  173. package/src/transformers/narrative-to-model/derive-modules.specs.ts +35 -35
  174. package/src/transformers/narrative-to-model/derive-modules.ts +11 -11
  175. package/src/transformers/narrative-to-model/index.ts +47 -47
  176. package/src/transformers/narrative-to-model/spec-processors.ts +1 -1
  177. package/src/transformers/narrative-to-model/strings.ts +6 -6
  178. package/src/transformers/narrative-to-model/type-inference.specs.ts +11 -11
  179. package/src/validate-slice-requests.specs.ts +113 -113
  180. package/src/validate-slice-requests.ts +49 -49
  181. package/dist/src/getNarratives.d.ts.map +0 -1
  182. package/dist/src/getNarratives.js.map +0 -1
@@ -20,7 +20,7 @@ export type { GeneratedFile };
20
20
 
21
21
  export function generateAllModulesCode(model: Model, opts: GenerateModuleCodeOptions): GeneratedFile[] {
22
22
  const modules =
23
- model.modules && model.modules.length > 0 ? model.modules : deriveModules(model.narratives, model.messages);
23
+ model.modules && model.modules.length > 0 ? model.modules : deriveModules(model.scenes, model.messages);
24
24
 
25
25
  // Compute all cross-module dependencies in a single pass
26
26
  const { importsPerModule, exportsPerModule } = computeAllCrossModuleDependencies(modules, model);
@@ -40,16 +40,16 @@ export function generateAllModulesCode(model: Model, opts: GenerateModuleCodeOpt
40
40
  return sortFilesByPath(files);
41
41
  }
42
42
 
43
- function getNarrativesForModule(module: Module, model: Model): Model['narratives'] {
43
+ function getScenesForModule(module: Module, model: Model): Model['scenes'] {
44
44
  if (module.isDerived) {
45
- return model.narratives.filter((n) => {
46
- const narrativeSourceFile = n.sourceFile ?? 'generated.narrative.ts';
47
- return narrativeSourceFile === module.sourceFile;
45
+ return model.scenes.filter((n) => {
46
+ const sceneSourceFile = n.sourceFile ?? 'generated.narrative.ts';
47
+ return sceneSourceFile === module.sourceFile;
48
48
  });
49
49
  }
50
50
 
51
- const narrativeIds = new Set(module.contains.narrativeIds);
52
- return model.narratives.filter((n) => n.id && narrativeIds.has(n.id));
51
+ const sceneIds = new Set(module.contains.sceneIds);
52
+ return model.scenes.filter((n) => n.id && sceneIds.has(n.id));
53
53
  }
54
54
 
55
55
  function generateModuleCode(
@@ -61,12 +61,12 @@ function generateModuleCode(
61
61
  ): string {
62
62
  const f = ts.factory;
63
63
 
64
- const narratives = getNarrativesForModule(module, model);
64
+ const scenes = getScenesForModule(module, model);
65
65
  const declaredMessageKeys = new Set(module.declares.messages.map((m) => `${m.kind}:${m.name}`));
66
66
  const messages = model.messages.filter((m) => declaredMessageKeys.has(`${m.type}:${m.name}`));
67
67
  const integrations = model.integrations ?? [];
68
68
 
69
- const allTypeIntegrationNames = extractTypeIntegrationNames(narratives);
69
+ const allTypeIntegrationNames = extractTypeIntegrationNames(scenes);
70
70
  const allValueIntegrationNames = integrations.map((integration) => integrationNameToPascalCase(integration.name));
71
71
 
72
72
  const allFlowFunctionNames = [...ALL_FLOW_FUNCTION_NAMES];
@@ -77,7 +77,7 @@ function generateModuleCode(
77
77
  allTypeIntegrationNames,
78
78
  allValueIntegrationNames,
79
79
  allFlowFunctionNames,
80
- narratives,
80
+ scenes,
81
81
  [],
82
82
  );
83
83
  const preliminaryFile = f.createSourceFile(
@@ -120,10 +120,10 @@ function generateModuleCode(
120
120
  }
121
121
 
122
122
  // For derived modules, only include types that are actually used in flow code
123
- // or when there's no flow code (hasEmptyFlowSlices)
123
+ // or when there's no flow code (hasEmptyFlowMoments)
124
124
  const isUsedInFlow = usageAnalysis.usedTypes.has(msg.name);
125
- const hasEmptyFlowSlices = narratives.length === 0 || narratives.every((flow) => flow.slices.length === 0);
126
- return isUsedInFlow || hasEmptyFlowSlices;
125
+ const hasEmptyFlowMoments = scenes.length === 0 || scenes.every((flow) => flow.moments.length === 0);
126
+ return isUsedInFlow || hasEmptyFlowMoments;
127
127
  });
128
128
 
129
129
  const statements = buildStatements(
@@ -133,7 +133,7 @@ function generateModuleCode(
133
133
  usedTypeIntegrationNames,
134
134
  usedValueIntegrationNames,
135
135
  usedFlowFunctionNames,
136
- narratives,
136
+ scenes,
137
137
  crossModuleImports,
138
138
  exportedTypes,
139
139
  );
@@ -150,7 +150,7 @@ function buildStatements(
150
150
  typeIntegrationNames: string[],
151
151
  valueIntegrationNames: string[],
152
152
  usedFlowFunctionNames: string[],
153
- flows: Model['narratives'],
153
+ flows: Model['scenes'],
154
154
  crossModuleImports: CrossModuleImport[],
155
155
  exportedTypes?: Set<string>,
156
156
  ): ts.Statement[] {
@@ -1,7 +1,7 @@
1
1
  import type { Model } from '../../index';
2
2
  import { formatWithPrettier } from './formatting/prettier';
3
3
  import { generateAllModulesCode } from './generators/module-code';
4
- import type { GeneratedNarratives } from './types';
4
+ import type { GeneratedScenes } from './types';
5
5
 
6
6
  /**
7
7
  * Converts a schema specification to TypeScript flow DSL code files.
@@ -11,9 +11,9 @@ import type { GeneratedNarratives } from './types';
11
11
  * and flow specifications. Each module in the model produces one output file.
12
12
  *
13
13
  * @param model The complete schema specification conforming to SpecsSchema
14
- * @returns Promise resolving to GeneratedNarratives with files array
14
+ * @returns Promise resolving to GeneratedScenes with files array
15
15
  */
16
- export async function modelToNarrative(model: Model): Promise<GeneratedNarratives> {
16
+ export async function modelToNarrative(model: Model): Promise<GeneratedScenes> {
17
17
  const flowImport = '@auto-engineer/narrative';
18
18
  const integrationImport = extractIntegrationImportFromModel(model);
19
19
 
@@ -36,4 +36,4 @@ function extractIntegrationImportFromModel(model: Model): string {
36
36
  return '';
37
37
  }
38
38
 
39
- export type { GeneratedNarratives } from './types';
39
+ export type { GeneratedScenes } from './types';
@@ -8,18 +8,18 @@ describe('module functionality', () => {
8
8
  it('produces self-contained files with duplicated types for each sourceFile', async () => {
9
9
  const model: Model = {
10
10
  variant: 'specs',
11
- narratives: [
11
+ scenes: [
12
12
  {
13
13
  name: 'Orders',
14
14
  id: 'orders-flow',
15
15
  sourceFile: 'orders.narrative.ts',
16
- slices: [],
16
+ moments: [],
17
17
  },
18
18
  {
19
19
  name: 'Users',
20
20
  id: 'users-flow',
21
21
  sourceFile: 'users.narrative.ts',
22
- slices: [],
22
+ moments: [],
23
23
  },
24
24
  ],
25
25
  messages: [
@@ -35,13 +35,13 @@ describe('module functionality', () => {
35
35
  {
36
36
  sourceFile: 'orders.narrative.ts',
37
37
  isDerived: true,
38
- contains: { narrativeIds: ['orders-flow'] },
38
+ contains: { sceneIds: ['orders-flow'] },
39
39
  declares: { messages: [{ kind: 'event', name: 'SharedEvent' }] },
40
40
  },
41
41
  {
42
42
  sourceFile: 'users.narrative.ts',
43
43
  isDerived: true,
44
- contains: { narrativeIds: ['users-flow'] },
44
+ contains: { sceneIds: ['users-flow'] },
45
45
  declares: { messages: [{ kind: 'event', name: 'SharedEvent' }] },
46
46
  },
47
47
  ],
@@ -73,16 +73,16 @@ describe('module functionality', () => {
73
73
  it('generates cross-module imports for types declared by other modules', async () => {
74
74
  const model: Model = {
75
75
  variant: 'specs',
76
- narratives: [
76
+ scenes: [
77
77
  {
78
78
  name: 'Shared Types',
79
79
  id: 'shared-types',
80
- slices: [],
80
+ moments: [],
81
81
  },
82
82
  {
83
83
  name: 'Orders',
84
84
  id: 'orders-flow',
85
- slices: [
85
+ moments: [
86
86
  {
87
87
  name: 'create order',
88
88
  type: 'command',
@@ -132,7 +132,7 @@ describe('module functionality', () => {
132
132
  {
133
133
  sourceFile: 'shared/types.narrative.ts',
134
134
  isDerived: false,
135
- contains: { narrativeIds: ['shared-types'] },
135
+ contains: { sceneIds: ['shared-types'] },
136
136
  declares: {
137
137
  messages: [{ kind: 'event', name: 'OrderCreated' }],
138
138
  },
@@ -140,7 +140,7 @@ describe('module functionality', () => {
140
140
  {
141
141
  sourceFile: 'features/orders.narrative.ts',
142
142
  isDerived: false,
143
- contains: { narrativeIds: ['orders-flow'] },
143
+ contains: { sceneIds: ['orders-flow'] },
144
144
  declares: {
145
145
  messages: [{ kind: 'command', name: 'CreateOrder' }],
146
146
  },
@@ -166,19 +166,19 @@ describe('module functionality', () => {
166
166
  it('detects duplicate sourceFiles', () => {
167
167
  const model: Model = {
168
168
  variant: 'specs',
169
- narratives: [],
169
+ scenes: [],
170
170
  messages: [],
171
171
  modules: [
172
172
  {
173
173
  sourceFile: 'same-file.ts',
174
174
  isDerived: false,
175
- contains: { narrativeIds: [] },
175
+ contains: { sceneIds: [] },
176
176
  declares: { messages: [] },
177
177
  },
178
178
  {
179
179
  sourceFile: 'same-file.ts',
180
180
  isDerived: false,
181
- contains: { narrativeIds: [] },
181
+ contains: { sceneIds: [] },
182
182
  declares: { messages: [] },
183
183
  },
184
184
  ],
@@ -194,19 +194,19 @@ describe('module functionality', () => {
194
194
  it('detects narrative assigned to multiple authored modules', () => {
195
195
  const model: Model = {
196
196
  variant: 'specs',
197
- narratives: [{ name: 'Test', id: 'test-narrative', slices: [] }],
197
+ scenes: [{ name: 'Test', id: 'test-narrative', moments: [] }],
198
198
  messages: [],
199
199
  modules: [
200
200
  {
201
201
  sourceFile: 'a.ts',
202
202
  isDerived: false,
203
- contains: { narrativeIds: ['test-narrative'] },
203
+ contains: { sceneIds: ['test-narrative'] },
204
204
  declares: { messages: [] },
205
205
  },
206
206
  {
207
207
  sourceFile: 'b.ts',
208
208
  isDerived: false,
209
- contains: { narrativeIds: ['test-narrative'] },
209
+ contains: { sceneIds: ['test-narrative'] },
210
210
  declares: { messages: [] },
211
211
  },
212
212
  ],
@@ -214,25 +214,25 @@ describe('module functionality', () => {
214
214
 
215
215
  const errors = validateModules(model);
216
216
 
217
- expect(errors.some((e) => e.type === 'narrative_multi_assigned')).toBe(true);
217
+ expect(errors.some((e) => e.type === 'scene_multi_assigned')).toBe(true);
218
218
  });
219
219
 
220
220
  it('detects message declared by multiple authored modules', () => {
221
221
  const model: Model = {
222
222
  variant: 'specs',
223
- narratives: [],
223
+ scenes: [],
224
224
  messages: [{ type: 'event', source: 'internal', name: 'SharedEvent', fields: [] }],
225
225
  modules: [
226
226
  {
227
227
  sourceFile: 'a.ts',
228
228
  isDerived: false,
229
- contains: { narrativeIds: [] },
229
+ contains: { sceneIds: [] },
230
230
  declares: { messages: [{ kind: 'event', name: 'SharedEvent' }] },
231
231
  },
232
232
  {
233
233
  sourceFile: 'b.ts',
234
234
  isDerived: false,
235
- contains: { narrativeIds: [] },
235
+ contains: { sceneIds: [] },
236
236
  declares: { messages: [{ kind: 'event', name: 'SharedEvent' }] },
237
237
  },
238
238
  ],
@@ -246,19 +246,19 @@ describe('module functionality', () => {
246
246
  it('allows type duplication in derived modules', () => {
247
247
  const model: Model = {
248
248
  variant: 'specs',
249
- narratives: [],
249
+ scenes: [],
250
250
  messages: [{ type: 'event', source: 'internal', name: 'SharedEvent', fields: [] }],
251
251
  modules: [
252
252
  {
253
253
  sourceFile: 'file1.ts',
254
254
  isDerived: true,
255
- contains: { narrativeIds: [] },
255
+ contains: { sceneIds: [] },
256
256
  declares: { messages: [{ kind: 'event', name: 'SharedEvent' }] },
257
257
  },
258
258
  {
259
259
  sourceFile: 'file2.ts',
260
260
  isDerived: true,
261
- contains: { narrativeIds: [] },
261
+ contains: { sceneIds: [] },
262
262
  declares: { messages: [{ kind: 'event', name: 'SharedEvent' }] },
263
263
  },
264
264
  ],
@@ -272,7 +272,7 @@ describe('module functionality', () => {
272
272
  it('returns no errors for empty modules array', () => {
273
273
  const model: Model = {
274
274
  variant: 'specs',
275
- narratives: [{ name: 'Test', id: 'test-1', slices: [] }],
275
+ scenes: [{ name: 'Test', id: 'test-1', moments: [] }],
276
276
  messages: [{ type: 'event', source: 'internal', name: 'TestEvent', fields: [] }],
277
277
  modules: [],
278
278
  };
@@ -285,13 +285,13 @@ describe('module functionality', () => {
285
285
  it('detects narrative not found in model', () => {
286
286
  const model: Model = {
287
287
  variant: 'specs',
288
- narratives: [],
288
+ scenes: [],
289
289
  messages: [],
290
290
  modules: [
291
291
  {
292
292
  sourceFile: 'a.ts',
293
293
  isDerived: false,
294
- contains: { narrativeIds: ['nonexistent-narrative'] },
294
+ contains: { sceneIds: ['nonexistent-narrative'] },
295
295
  declares: { messages: [] },
296
296
  },
297
297
  ],
@@ -299,20 +299,20 @@ describe('module functionality', () => {
299
299
 
300
300
  const errors = validateModules(model);
301
301
 
302
- expect(errors.some((e) => e.type === 'narrative_not_found')).toBe(true);
302
+ expect(errors.some((e) => e.type === 'scene_not_found')).toBe(true);
303
303
  expect(errors[0].message).toContain('nonexistent-narrative');
304
304
  });
305
305
 
306
- it('detects unassigned narratives', () => {
306
+ it('detects unassigned scenes', () => {
307
307
  const model: Model = {
308
308
  variant: 'specs',
309
- narratives: [{ name: 'Orphan', id: 'orphan-narrative', slices: [] }],
309
+ scenes: [{ name: 'Orphan', id: 'orphan-narrative', moments: [] }],
310
310
  messages: [],
311
311
  modules: [
312
312
  {
313
313
  sourceFile: 'a.ts',
314
314
  isDerived: false,
315
- contains: { narrativeIds: [] },
315
+ contains: { sceneIds: [] },
316
316
  declares: { messages: [] },
317
317
  },
318
318
  ],
@@ -320,20 +320,20 @@ describe('module functionality', () => {
320
320
 
321
321
  const errors = validateModules(model);
322
322
 
323
- expect(errors.some((e) => e.type === 'narrative_unassigned')).toBe(true);
324
- expect(errors.find((e) => e.type === 'narrative_unassigned')!.message).toContain('orphan-narrative');
323
+ expect(errors.some((e) => e.type === 'scene_unassigned')).toBe(true);
324
+ expect(errors.find((e) => e.type === 'scene_unassigned')!.message).toContain('orphan-narrative');
325
325
  });
326
326
 
327
327
  it('detects undeclared messages', () => {
328
328
  const model: Model = {
329
329
  variant: 'specs',
330
- narratives: [],
330
+ scenes: [],
331
331
  messages: [{ type: 'event', source: 'internal', name: 'UndeclaredEvent', fields: [] }],
332
332
  modules: [
333
333
  {
334
334
  sourceFile: 'a.ts',
335
335
  isDerived: false,
336
- contains: { narrativeIds: [] },
336
+ contains: { sceneIds: [] },
337
337
  declares: { messages: [] },
338
338
  },
339
339
  ],
@@ -361,18 +361,18 @@ describe('module functionality', () => {
361
361
  it('generates separate files for each sourceFile in derived modules', async () => {
362
362
  const model: Model = {
363
363
  variant: 'specs',
364
- narratives: [
364
+ scenes: [
365
365
  {
366
366
  name: 'Orders',
367
367
  id: 'orders-flow',
368
368
  sourceFile: 'orders.narrative.ts',
369
- slices: [],
369
+ moments: [],
370
370
  },
371
371
  {
372
372
  name: 'Users',
373
373
  id: 'users-flow',
374
374
  sourceFile: 'users.narrative.ts',
375
- slices: [],
375
+ moments: [],
376
376
  },
377
377
  ],
378
378
  messages: [
@@ -389,7 +389,7 @@ describe('module functionality', () => {
389
389
  {
390
390
  sourceFile: 'orders.narrative.ts',
391
391
  isDerived: true,
392
- contains: { narrativeIds: ['orders-flow'] },
392
+ contains: { sceneIds: ['orders-flow'] },
393
393
  declares: {
394
394
  messages: [
395
395
  { kind: 'command', name: 'CreateOrder' },
@@ -400,7 +400,7 @@ describe('module functionality', () => {
400
400
  {
401
401
  sourceFile: 'users.narrative.ts',
402
402
  isDerived: true,
403
- contains: { narrativeIds: ['users-flow'] },
403
+ contains: { sceneIds: ['users-flow'] },
404
404
  declares: {
405
405
  messages: [
406
406
  { kind: 'command', name: 'CreateOrder' },
@@ -419,16 +419,16 @@ describe('module functionality', () => {
419
419
  const ordersFile = result.files.find((f) => f.path === 'orders.narrative.ts');
420
420
  const usersFile = result.files.find((f) => f.path === 'users.narrative.ts');
421
421
 
422
- expect(ordersFile?.code).toContain("narrative('Orders'");
423
- expect(usersFile?.code).toContain("narrative('Users'");
422
+ expect(ordersFile?.code).toContain("scene('Orders'");
423
+ expect(usersFile?.code).toContain("scene('Users'");
424
424
  });
425
425
 
426
426
  it('duplicates types in each derived module file', async () => {
427
427
  const model: Model = {
428
428
  variant: 'specs',
429
- narratives: [
430
- { name: 'Flow A', id: 'flow-a', sourceFile: 'a.narrative.ts', slices: [] },
431
- { name: 'Flow B', id: 'flow-b', sourceFile: 'b.narrative.ts', slices: [] },
429
+ scenes: [
430
+ { name: 'Flow A', id: 'flow-a', sourceFile: 'a.narrative.ts', moments: [] },
431
+ { name: 'Flow B', id: 'flow-b', sourceFile: 'b.narrative.ts', moments: [] },
432
432
  ],
433
433
  messages: [
434
434
  {
@@ -443,13 +443,13 @@ describe('module functionality', () => {
443
443
  {
444
444
  sourceFile: 'a.narrative.ts',
445
445
  isDerived: true,
446
- contains: { narrativeIds: ['flow-a'] },
446
+ contains: { sceneIds: ['flow-a'] },
447
447
  declares: { messages: [{ kind: 'event', name: 'SharedEvent' }] },
448
448
  },
449
449
  {
450
450
  sourceFile: 'b.narrative.ts',
451
451
  isDerived: true,
452
- contains: { narrativeIds: ['flow-b'] },
452
+ contains: { sceneIds: ['flow-b'] },
453
453
  declares: { messages: [{ kind: 'event', name: 'SharedEvent' }] },
454
454
  },
455
455
  ],
@@ -465,12 +465,12 @@ describe('module functionality', () => {
465
465
  it('generates cross-module imports for authored modules', async () => {
466
466
  const model: Model = {
467
467
  variant: 'specs',
468
- narratives: [
469
- { name: 'Shared Types', id: 'shared-types', slices: [] },
468
+ scenes: [
469
+ { name: 'Shared Types', id: 'shared-types', moments: [] },
470
470
  {
471
471
  name: 'Orders',
472
472
  id: 'orders-flow',
473
- slices: [
473
+ moments: [
474
474
  {
475
475
  name: 'create order',
476
476
  type: 'command',
@@ -516,13 +516,13 @@ describe('module functionality', () => {
516
516
  {
517
517
  sourceFile: 'shared/types.narrative.ts',
518
518
  isDerived: false,
519
- contains: { narrativeIds: ['shared-types'] },
519
+ contains: { sceneIds: ['shared-types'] },
520
520
  declares: { messages: [{ kind: 'event', name: 'OrderCreated' }] },
521
521
  },
522
522
  {
523
523
  sourceFile: 'features/orders.narrative.ts',
524
524
  isDerived: false,
525
- contains: { narrativeIds: ['orders-flow'] },
525
+ contains: { sceneIds: ['orders-flow'] },
526
526
  declares: { messages: [{ kind: 'command', name: 'CreateOrder' }] },
527
527
  },
528
528
  ],
@@ -543,10 +543,10 @@ describe('module functionality', () => {
543
543
  it('sorts output files alphabetically by path', async () => {
544
544
  const model: Model = {
545
545
  variant: 'specs',
546
- narratives: [
547
- { name: 'Z', id: 'z', sourceFile: 'z.narrative.ts', slices: [] },
548
- { name: 'A', id: 'a', sourceFile: 'a.narrative.ts', slices: [] },
549
- { name: 'M', id: 'm', sourceFile: 'm.narrative.ts', slices: [] },
546
+ scenes: [
547
+ { name: 'Z', id: 'z', sourceFile: 'z.narrative.ts', moments: [] },
548
+ { name: 'A', id: 'a', sourceFile: 'a.narrative.ts', moments: [] },
549
+ { name: 'M', id: 'm', sourceFile: 'm.narrative.ts', moments: [] },
550
550
  ],
551
551
  messages: [],
552
552
  integrations: [],
@@ -554,19 +554,19 @@ describe('module functionality', () => {
554
554
  {
555
555
  sourceFile: 'z.narrative.ts',
556
556
  isDerived: true,
557
- contains: { narrativeIds: ['z'] },
557
+ contains: { sceneIds: ['z'] },
558
558
  declares: { messages: [] },
559
559
  },
560
560
  {
561
561
  sourceFile: 'a.narrative.ts',
562
562
  isDerived: true,
563
- contains: { narrativeIds: ['a'] },
563
+ contains: { sceneIds: ['a'] },
564
564
  declares: { messages: [] },
565
565
  },
566
566
  {
567
567
  sourceFile: 'm.narrative.ts',
568
568
  isDerived: true,
569
- contains: { narrativeIds: ['m'] },
569
+ contains: { sceneIds: ['m'] },
570
570
  declares: { messages: [] },
571
571
  },
572
572
  ],