@solidxai/core 0.1.12-beta.2 → 0.1.12-beta.4

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 (162) hide show
  1. package/.claude/settings.local.json +16 -0
  2. package/CLAUDE.md +26 -0
  3. package/dist/commands/seed.command.d.ts.map +1 -1
  4. package/dist/commands/seed.command.js +15 -2
  5. package/dist/commands/seed.command.js.map +1 -1
  6. package/dist/constants/media-file-types.d.ts +5 -0
  7. package/dist/constants/media-file-types.d.ts.map +1 -0
  8. package/dist/constants/media-file-types.js +27 -0
  9. package/dist/constants/media-file-types.js.map +1 -0
  10. package/dist/controllers/media.controller.d.ts +14 -11
  11. package/dist/controllers/media.controller.d.ts.map +1 -1
  12. package/dist/controllers/media.controller.js +72 -33
  13. package/dist/controllers/media.controller.js.map +1 -1
  14. package/dist/dtos/create-media.dto.d.ts +1 -0
  15. package/dist/dtos/create-media.dto.d.ts.map +1 -1
  16. package/dist/dtos/create-media.dto.js +7 -1
  17. package/dist/dtos/create-media.dto.js.map +1 -1
  18. package/dist/dtos/create-role-metadata.dto.d.ts +2 -0
  19. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  20. package/dist/dtos/create-role-metadata.dto.js +3 -1
  21. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  22. package/dist/dtos/update-media.dto.d.ts +1 -0
  23. package/dist/dtos/update-media.dto.d.ts.map +1 -1
  24. package/dist/dtos/update-media.dto.js +7 -1
  25. package/dist/dtos/update-media.dto.js.map +1 -1
  26. package/dist/entities/media.entity.d.ts +1 -0
  27. package/dist/entities/media.entity.d.ts.map +1 -1
  28. package/dist/entities/media.entity.js +9 -1
  29. package/dist/entities/media.entity.js.map +1 -1
  30. package/dist/enums/auth-type.enum.d.ts +2 -1
  31. package/dist/enums/auth-type.enum.d.ts.map +1 -1
  32. package/dist/enums/auth-type.enum.js +1 -0
  33. package/dist/enums/auth-type.enum.js.map +1 -1
  34. package/dist/guards/authentication.guard.d.ts +3 -1
  35. package/dist/guards/authentication.guard.d.ts.map +1 -1
  36. package/dist/guards/authentication.guard.js +5 -1
  37. package/dist/guards/authentication.guard.js.map +1 -1
  38. package/dist/guards/media-signed-url.guard.d.ts +9 -0
  39. package/dist/guards/media-signed-url.guard.d.ts.map +1 -0
  40. package/dist/guards/media-signed-url.guard.js +49 -0
  41. package/dist/guards/media-signed-url.guard.js.map +1 -0
  42. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
  43. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +10 -13
  44. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
  45. package/dist/interfaces.d.ts +19 -1
  46. package/dist/interfaces.d.ts.map +1 -1
  47. package/dist/interfaces.js +2 -0
  48. package/dist/interfaces.js.map +1 -1
  49. package/dist/repository/media.repository.d.ts.map +1 -1
  50. package/dist/repository/media.repository.js +2 -0
  51. package/dist/repository/media.repository.js.map +1 -1
  52. package/dist/seeders/module-metadata-seeder.service.d.ts +7 -1
  53. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  54. package/dist/seeders/module-metadata-seeder.service.js +87 -3
  55. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  56. package/dist/seeders/permission-metadata-seeder.service.d.ts +1 -0
  57. package/dist/seeders/permission-metadata-seeder.service.d.ts.map +1 -1
  58. package/dist/seeders/permission-metadata-seeder.service.js +6 -1
  59. package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
  60. package/dist/seeders/seed-data/solid-core-metadata.json +114 -13
  61. package/dist/services/authentication.service.d.ts +1 -0
  62. package/dist/services/authentication.service.d.ts.map +1 -1
  63. package/dist/services/authentication.service.js +19 -1
  64. package/dist/services/authentication.service.js.map +1 -1
  65. package/dist/services/media-download-url.service.d.ts +21 -0
  66. package/dist/services/media-download-url.service.d.ts.map +1 -0
  67. package/dist/services/media-download-url.service.js +67 -0
  68. package/dist/services/media-download-url.service.js.map +1 -0
  69. package/dist/services/media-storage.utils.d.ts +27 -0
  70. package/dist/services/media-storage.utils.d.ts.map +1 -0
  71. package/dist/services/media-storage.utils.js +82 -0
  72. package/dist/services/media-storage.utils.js.map +1 -0
  73. package/dist/services/media.service.d.ts +20 -4
  74. package/dist/services/media.service.d.ts.map +1 -1
  75. package/dist/services/media.service.js +157 -55
  76. package/dist/services/media.service.js.map +1 -1
  77. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts +4 -4
  78. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  79. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +37 -63
  80. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  81. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts +5 -5
  82. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  83. package/dist/services/mediaStorageProviders/file-storage-provider.js +37 -38
  84. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  85. package/dist/services/role-metadata.service.d.ts +1 -0
  86. package/dist/services/role-metadata.service.d.ts.map +1 -1
  87. package/dist/services/role-metadata.service.js +8 -5
  88. package/dist/services/role-metadata.service.js.map +1 -1
  89. package/dist/solid-core.module.d.ts.map +1 -1
  90. package/dist/solid-core.module.js +11 -1
  91. package/dist/solid-core.module.js.map +1 -1
  92. package/dist/subscribers/audit.subscriber.js +1 -1
  93. package/dist/subscribers/audit.subscriber.js.map +1 -1
  94. package/package.json +1 -1
  95. package/src/commands/seed.command.ts +17 -3
  96. package/src/constants/media-file-types.ts +44 -0
  97. package/src/controllers/media.controller.ts +44 -24
  98. package/src/dtos/create-media.dto.ts +8 -3
  99. package/src/dtos/create-role-metadata.dto.ts +2 -0
  100. package/src/dtos/update-media.dto.ts +8 -3
  101. package/src/entities/media.entity.ts +4 -1
  102. package/src/enums/auth-type.enum.ts +1 -0
  103. package/src/guards/authentication.guard.ts +3 -0
  104. package/src/guards/media-signed-url.guard.ts +41 -0
  105. package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +12 -24
  106. package/src/interfaces.ts +20 -0
  107. package/src/repository/media.repository.ts +2 -0
  108. package/src/seeders/module-metadata-seeder.service.ts +109 -3
  109. package/src/seeders/permission-metadata-seeder.service.ts +6 -1
  110. package/src/seeders/seed-data/solid-core-metadata.json +114 -13
  111. package/src/services/1.js +6 -0
  112. package/src/services/authentication.service.ts +24 -1
  113. package/src/services/media-download-url.service.ts +67 -0
  114. package/src/services/media-storage.utils.ts +79 -0
  115. package/src/services/media.service.ts +189 -59
  116. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +52 -76
  117. package/src/services/mediaStorageProviders/file-storage-provider.ts +44 -48
  118. package/src/services/role-metadata.service.ts +17 -5
  119. package/src/solid-core.module.ts +21 -2
  120. package/src/subscribers/audit.subscriber.ts +1 -1
  121. package/dist-tests/api/authenticate.spec.js +0 -119
  122. package/dist-tests/api/authenticate.spec.js.map +0 -1
  123. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
  124. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
  125. package/dist-tests/api/ping.spec.js +0 -21
  126. package/dist-tests/api/ping.spec.js.map +0 -1
  127. package/dist-tests/helpers/auth.js +0 -41
  128. package/dist-tests/helpers/auth.js.map +0 -1
  129. package/dist-tests/helpers/env.js +0 -11
  130. package/dist-tests/helpers/env.js.map +0 -1
  131. package/docs/agent-builder/notebook-lm-prompt-for-agent-builder.md +0 -136
  132. package/docs/agent-builder/team-ready-note-agent-builder.md +0 -305
  133. package/docs/agent-hub-grooming.md +0 -301
  134. package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +0 -438
  135. package/docs/dashboards/dashboard-curl-smoke-tests.txt +0 -146
  136. package/docs/dashboards/delete-legacy-dashboard-metadata.sql +0 -172
  137. package/docs/datasource-introspection-ddl-analysis.md +0 -326
  138. package/docs/datasource-introspection-implementation-plan.md +0 -306
  139. package/docs/grouping-enhancements.md +0 -89
  140. package/docs/java-spring/README.md +0 -3
  141. package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
  142. package/docs/module-package-import-handoff.md +0 -691
  143. package/docs/seed-changes.md +0 -65
  144. package/docs/test-data-workflow.md +0 -200
  145. package/docs/type-declaration-import-issue.md +0 -24
  146. package/docs/workflow/business-automation-example-notes.md +0 -309
  147. package/docs/workflow/data-engineering-pipeline-example-notes.md +0 -330
  148. package/docs/workflow/foreach-example-notes.md +0 -187
  149. package/docs/workflow/hello-world-example-notes.md +0 -271
  150. package/docs/workflow/kestra-concepts-plugins-blueprints.md +0 -315
  151. package/docs/workflow/loop-until-example-notes.md +0 -198
  152. package/docs/workflow/microservices-and-apis-example-notes.md +0 -264
  153. package/docs/workflow/samples.md +0 -25
  154. package/docs/workflow/what-is-kestra.md +0 -79
  155. package/docs/workflow/workflow-core-module-handoff-summary.md +0 -191
  156. package/docs/workflow/workflow-module-brd.md +0 -185
  157. package/docs/workflow/workflow-module-domain-model.md +0 -252
  158. package/docs/workflow/workflow-module-metadata-dsl.md +0 -302
  159. package/docs/workflow/workflow-module-technical-spec.md +0 -293
  160. package/docs/workflow/workflow-node-type-contracts.md +0 -635
  161. package/docs/workflow/workflow-node-ui-metadata-contract.md +0 -1262
  162. package/docs/workflow/workflow-solidx-model-field-spec.md +0 -284
@@ -1,330 +0,0 @@
1
- # Data Engineering Pipeline Example Notes
2
-
3
- ## Purpose
4
-
5
- This document captures a concrete workflow example and the accompanying UI notes derived from the Kestra reference screens. It is intended to serve as a working design reference for the SolidX workflow-definition list view, detail view, and editor experience.
6
-
7
- ---
8
-
9
- ## Example Workflow YAML
10
-
11
- ```yaml
12
- id: data-engineering-pipeline
13
- namespace: tutorial
14
- labels:
15
- name: Data Engineering Pipeline
16
-
17
- inputs:
18
- - id: columns_to_keep
19
- type: ARRAY
20
- itemType: STRING
21
- defaults:
22
- - brand
23
- - price
24
-
25
- tasks:
26
- - id: extract
27
- type: io.kestra.plugin.core.http.Download
28
- description: Download the raw products JSON data.
29
- uri: https://dummyjson.com/products
30
-
31
- - id: transform
32
- type: io.kestra.plugin.scripts.python.Script
33
- description: Filter the product fields and write a cleaned JSON file.
34
- containerImage: python:3.11-alpine
35
- inputFiles:
36
- data.json: "{{ outputs.extract.uri }}"
37
- outputFiles:
38
- - "*.json"
39
- script: |
40
- import json
41
- import os
42
-
43
- with open("data.json", "r") as file:
44
- data = json.load(file)
45
-
46
- filtered_data = [
47
- {column: product.get(column, "N/A") for column in {{ inputs.columns_to_keep }}}
48
- for product in data["products"]
49
- ]
50
-
51
- with open("products.json", "w") as file:
52
- json.dump(filtered_data, file, indent=4)
53
-
54
- - id: query
55
- type: io.kestra.plugin.jdbc.duckdb.Queries
56
- description: Aggregate the cleaned data with DuckDB and store the result.
57
- inputFiles:
58
- products.json: "{{ outputs.transform.outputFiles['products.json'] }}"
59
- sql: |
60
- INSTALL json;
61
- LOAD json;
62
- SELECT brand, round(avg(price), 2) as avg_price
63
- FROM read_json_auto('{{ workingDir }}/products.json')
64
- GROUP BY brand
65
- ORDER BY avg_price DESC;
66
- fetchType: STORE
67
-
68
- description: |
69
- **Use case:** Compact data engineering pipeline that filters product data and aggregates it by brand.
70
- **Highlights:**
71
- - Download product JSON from a public API.
72
- - Run a Python transform that keeps only the requested columns and emits a cleaned file.
73
- - Query the cleaned data with DuckDB to compute average prices per brand and store the result for download in the UI.
74
- ```
75
-
76
- ---
77
-
78
- ## What This Example Represents
79
-
80
- This workflow is a good V1 reference because it is:
81
-
82
- - Simple enough to understand quickly.
83
- - Sequential, so it maps well to the current implicit-edge model.
84
- - Realistic, because it uses HTTP download, transformation, and data querying.
85
- - Rich enough to exercise inputs, outputs, descriptions, code editing, and topology rendering.
86
-
87
- The visual topology implied by this workflow is:
88
-
89
- ```text
90
- Start
91
- |
92
- v
93
- extract
94
- |
95
- v
96
- transform
97
- |
98
- v
99
- query
100
- |
101
- v
102
- End
103
- ```
104
-
105
- ---
106
-
107
- ## Detail Page Notes
108
-
109
- The reference detail experience suggests a workflow page shaped around tabs, not a single long form.
110
-
111
- ### Tabs Observed
112
-
113
- - `Overview`
114
- - `Topology`
115
- - `Executions`
116
- - `Edit`
117
- - `Revisions`
118
- - `Triggers`
119
- - `Logs`
120
- - `Metrics`
121
- - `Dependencies`
122
- - `Concurrency`
123
- - `Audit Logs`
124
-
125
- ### SolidX Interpretation
126
-
127
- For SolidX workflow-definition UX, the current recommended prioritization is:
128
-
129
- - Keep: `Overview`
130
- - Keep: `Topology`
131
- - Keep: `Executions`
132
- - Keep: `Edit`
133
- - Keep: `Triggers`
134
- - Keep: `Logs`
135
- - Keep: `Metrics`
136
- - Ignore for now: `Revisions`
137
- - Ignore for now: `Concurrency`
138
- - Ignore for now: `Audit Logs`
139
-
140
- ---
141
-
142
- ## Overview Notes
143
-
144
- The overview page should change meaningfully once executions exist.
145
-
146
- ### Before Executions
147
-
148
- The page can show an empty-state hero with a primary call to action:
149
-
150
- - execute workflow
151
- - guide the user toward the first run
152
-
153
- ### After Executions
154
-
155
- The page can evolve into a summary dashboard showing:
156
-
157
- - success ratio
158
- - failed ratio
159
- - in-progress count
160
- - pending count
161
- - total executions
162
- - execution trend / chart
163
- - description panel
164
-
165
- This means the overview page should not be treated as static documentation. It should become an operational summary once runtime data exists.
166
-
167
- ---
168
-
169
- ## Topology Notes
170
-
171
- Topology is read-only in the reference detail page.
172
-
173
- Recommended SolidX interpretation:
174
-
175
- - `Topology` tab should be a clean read-only visualization.
176
- - It should render the workflow structure without edit affordances.
177
- - It can reuse the same layout logic as the editor flow view, but without mutation controls.
178
-
179
- ---
180
-
181
- ## Executions Notes
182
-
183
- The `Executions` tab should present a list of all executions for the workflow.
184
-
185
- Important characteristics from the reference:
186
-
187
- - list-based presentation
188
- - filtering/search support
189
- - empty state when no executions exist
190
-
191
- For SolidX:
192
-
193
- - use existing retrieve APIs
194
- - support server-side pagination, sorting, and search where possible
195
- - keep the visuals close to SolidX list/table patterns
196
-
197
- ---
198
-
199
- ## Edit Tab Notes
200
-
201
- This is the most important area for the current UI work.
202
-
203
- ### Desired Structure
204
-
205
- - `Edit` is a top-level detail tab.
206
- - Inside `Edit`, only `Code` and `Flow` should be primary editing surfaces.
207
- - `Docs` should open in a side panel, not as a main third panel in the base layout.
208
-
209
- ### Editor Layout
210
-
211
- - left: code editor
212
- - right: flow editor
213
- - docs: contextual side panel that opens on demand
214
-
215
- ### Editing Mode
216
-
217
- - flow uses React Flow
218
- - modal editing for nodes
219
- - docs are contextual to the selected node type
220
- - save remains manual
221
-
222
- ---
223
-
224
- ## Flow Canvas Notes
225
-
226
- The reference behavior to preserve:
227
-
228
- - `+` insertion controls between nodes
229
- - per-node actions:
230
- - edit
231
- - delete
232
- - view docs
233
- - directional flow should be visible
234
- - zoom in / zoom out controls should exist
235
- - users may drag nodes to rearrange the graph visually
236
- - dragging is for visual arrangement only, not for defining semantic connections via drag-and-drop wiring
237
-
238
- ### Important Modeling Note
239
-
240
- Workflow structure is still governed by the workflow DSL contract.
241
-
242
- That means:
243
-
244
- - node order remains driven by workflow structure
245
- - edges are implicit from the DSL
246
- - the canvas is a visual/editor representation of the workflow, not the source of truth for execution semantics
247
-
248
- ---
249
-
250
- ## Triggers Notes
251
-
252
- Triggers are wanted, but not the first editing priority.
253
-
254
- Current note:
255
-
256
- - keep a `Triggers` tab in the long-term detail experience
257
- - rendering and editing of triggers can come after the core editor is stabilized
258
-
259
- ---
260
-
261
- ## Logs Notes
262
-
263
- Logs are wanted.
264
-
265
- Recommended direction:
266
-
267
- - separate `Logs` tab
268
- - searchable / filterable runtime log list
269
- - use workflow or execution context to scope logs
270
-
271
- ---
272
-
273
- ## Metrics Notes
274
-
275
- Metrics are wanted, but depend on runtime persistence.
276
-
277
- Important note:
278
-
279
- - metrics are only meaningful once we persist them into backing tables or another queryable runtime store
280
-
281
- So for now:
282
-
283
- - keep `Metrics` in the design vocabulary
284
- - treat it as a pending feature unless the persistence model is implemented
285
-
286
- ---
287
-
288
- ## Pending Feature Notes
289
-
290
- The following are intentionally deferred or partially deferred:
291
-
292
- - metrics persistence and reporting
293
- - trigger authoring experience
294
- - richer overview analytics
295
- - revisions
296
- - concurrency controls
297
- - audit-log specific workflow views
298
- - blueprints for this area as part of a later phase
299
-
300
- ---
301
-
302
- ## Screenshot References
303
-
304
- These screenshots informed the notes above:
305
-
306
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 16.58.43.png`
307
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 16.58.48.png`
308
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 16.58.53.png`
309
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 16.58.59.png`
310
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 16.59.07.png`
311
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 16.59.16.png`
312
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 16.59.22.png`
313
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 16.59.28.png`
314
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.01.42.png`
315
- - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.01.47.png`
316
-
317
- ---
318
-
319
- ## Recommended Next UI Build Order
320
-
321
- Based on this example, the clean next implementation sequence is:
322
-
323
- 1. Finish the bespoke workflow-definition list view.
324
- 2. Tighten the workflow-definition detail shell with tabs.
325
- 3. Refine the `Edit` tab into:
326
- - left code editor
327
- - right React Flow editor
328
- - contextual docs side panel
329
- 4. Add modal-based node configuration using schema-driven forms.
330
- 5. Add runtime tabs for executions, logs, and later metrics.
@@ -1,187 +0,0 @@
1
- # ForEach Example Notes
2
-
3
- ## Purpose
4
-
5
- This document captures a reference workflow for loop-based control flow using `ForEach`. It fills an important gap in the example set by showing how repeated execution over a list of values should be represented in topology and editor views.
6
-
7
- ---
8
-
9
- ## Example Workflow YAML
10
-
11
- ```yaml
12
- id: foreach_example
13
- namespace: my.namespace
14
-
15
- tasks:
16
- - id: for_each_loop
17
- type: io.kestra.core.tasks.flows.ForEach
18
- values: ["item_1", "item_2", "item_3"]
19
- tasks:
20
- - id: print_value
21
- type: io.kestra.core.tasks.scripts.Bash
22
- commands:
23
- - echo "Current loop value is {{ taskrun.value }}"
24
- ```
25
-
26
- ---
27
-
28
- ## What This Example Adds
29
-
30
- This example is useful because it shows:
31
-
32
- - iterative control flow
33
- - a loop container node
34
- - child tasks executed once per loop item
35
- - loop-scoped runtime values such as `taskrun.value`
36
-
37
- It is the cleanest reference for repeated execution semantics in the workflow DSL.
38
-
39
- ---
40
-
41
- ## High-Level Structure
42
-
43
- ```text
44
- Start
45
- |
46
- v
47
- for_each_loop
48
- |
49
- v
50
- print_value
51
- |
52
- v
53
- End
54
- ```
55
-
56
- Conceptually, the structure is:
57
-
58
- ```text
59
- Workflow
60
- └── for_each_loop
61
- └── print_value
62
- ```
63
-
64
- Runtime interpretation:
65
-
66
- ```text
67
- for_each_loop over ["item_1", "item_2", "item_3"]
68
- - run print_value with taskrun.value = "item_1"
69
- - run print_value with taskrun.value = "item_2"
70
- - run print_value with taskrun.value = "item_3"
71
- ```
72
-
73
- ---
74
-
75
- ## Main Note
76
-
77
- ### Example With `ForEach`
78
-
79
- This is the key purpose of the example.
80
-
81
- It shows that a loop is not just a visual group. It represents repeated execution of its child tasks across a collection of values.
82
-
83
- For SolidX, the topology should communicate:
84
-
85
- - the loop container
86
- - the loop body
87
- - that child tasks belong to the repeated block
88
-
89
- The canvas does not need to simulate every repeated instance visually. It should represent the structural loop definition cleanly.
90
-
91
- ---
92
-
93
- ## Topology Notes
94
-
95
- The screenshot suggests:
96
-
97
- - `ForEach` appears as a grouped/container region
98
- - the loop node is rendered inside that region
99
- - the child task appears within the same grouped flow area
100
- - the overall sequence still remains vertical and directional
101
-
102
- This means the renderer should support a loop-specific grouped layout similar to other control-flow containers, but with loop semantics instead of branch semantics.
103
-
104
- ---
105
-
106
- ## Loop Semantics Notes
107
-
108
- This example is important because it introduces loop-local context:
109
-
110
- - `taskrun.value`
111
-
112
- That means the editor and docs system will eventually need to help users understand:
113
-
114
- - which context values are available inside loops
115
- - that those values only exist within the loop body
116
- - how expressions differ between workflow scope and loop scope
117
-
118
- This is a documentation and autocomplete concern as much as a topology concern.
119
-
120
- ---
121
-
122
- ## Implications For SolidX Flow Modeling
123
-
124
- This example implies the flow model should support a distinct category for loop containers.
125
-
126
- Useful structural categories now include:
127
-
128
- - simple task node
129
- - trigger group
130
- - branch/control-flow container
131
- - nested/group container
132
- - loop container
133
-
134
- For `ForEach` specifically, the model should preserve:
135
-
136
- - loop source values
137
- - child task list
138
- - loop-local expression scope
139
-
140
- ---
141
-
142
- ## Editor Notes
143
-
144
- This example is a good reminder that the editor should remain DSL-driven.
145
-
146
- For a loop:
147
-
148
- - the source of truth is the `ForEach` node definition
149
- - the canvas should reflect loop structure
150
- - the user should edit loop configuration from metadata/schema, not by drawing repeated paths manually
151
-
152
- This fits well with the current direction:
153
-
154
- - code + flow are the primary surfaces
155
- - node editing is modal
156
- - docs are contextual
157
-
158
- ---
159
-
160
- ## Future UX Notes
161
-
162
- This example points to a few future needs:
163
-
164
- - loop-aware docs for `taskrun.value`
165
- - loop-container editing modal
166
- - schema-driven configuration for `values`
167
- - clear distinction between loop definition and loop runtime iterations
168
-
169
- ---
170
-
171
- ## Screenshot References
172
-
173
- This screenshot informed the notes above:
174
-
175
- - `/var/folders/z_/h0rqj1693gs4cxm3k_vks86c0000gn/T/TemporaryItems/NSIRD_screencaptureui_ptomjl/Screenshot 2026-07-10 at 17.17.48.png`
176
-
177
- ---
178
-
179
- ## Recommended Follow-On Use
180
-
181
- This example should be used as a reference for:
182
-
183
- 1. `ForEach` node rendering
184
- 2. loop-container layout rules
185
- 3. loop-local expression awareness
186
- 4. schema-driven loop configuration UX
187
- 5. future autocomplete help for loop scope values