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

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 (147) hide show
  1. package/dist/constants/error-messages.d.ts +1 -0
  2. package/dist/constants/error-messages.d.ts.map +1 -1
  3. package/dist/constants/error-messages.js +1 -0
  4. package/dist/constants/error-messages.js.map +1 -1
  5. package/dist/dtos/create-chatter-message.dto.d.ts +1 -0
  6. package/dist/dtos/create-chatter-message.dto.d.ts.map +1 -1
  7. package/dist/dtos/create-chatter-message.dto.js +7 -1
  8. package/dist/dtos/create-chatter-message.dto.js.map +1 -1
  9. package/dist/dtos/post-chatter-message.dto.d.ts +1 -0
  10. package/dist/dtos/post-chatter-message.dto.d.ts.map +1 -1
  11. package/dist/dtos/post-chatter-message.dto.js +6 -1
  12. package/dist/dtos/post-chatter-message.dto.js.map +1 -1
  13. package/dist/dtos/update-chatter-message.dto.d.ts +1 -0
  14. package/dist/dtos/update-chatter-message.dto.d.ts.map +1 -1
  15. package/dist/dtos/update-chatter-message.dto.js +8 -1
  16. package/dist/dtos/update-chatter-message.dto.js.map +1 -1
  17. package/dist/dtos/update-chatter-note-message.dto.d.ts +1 -0
  18. package/dist/dtos/update-chatter-note-message.dto.d.ts.map +1 -1
  19. package/dist/dtos/update-chatter-note-message.dto.js +7 -1
  20. package/dist/dtos/update-chatter-note-message.dto.js.map +1 -1
  21. package/dist/entities/chatter-message.entity.d.ts +1 -0
  22. package/dist/entities/chatter-message.entity.d.ts.map +1 -1
  23. package/dist/entities/chatter-message.entity.js +5 -1
  24. package/dist/entities/chatter-message.entity.js.map +1 -1
  25. package/dist/helpers/solid-core-error-codes-provider.service.d.ts.map +1 -1
  26. package/dist/helpers/solid-core-error-codes-provider.service.js +9 -0
  27. package/dist/helpers/solid-core-error-codes-provider.service.js.map +1 -1
  28. package/dist/interfaces/chatter-mention-notification.interface.d.ts +27 -0
  29. package/dist/interfaces/chatter-mention-notification.interface.d.ts.map +1 -0
  30. package/dist/interfaces/chatter-mention-notification.interface.js +3 -0
  31. package/dist/interfaces/chatter-mention-notification.interface.js.map +1 -0
  32. package/dist/jobs/chatter-mention-notification-email-queue-handler.service.d.ts +17 -0
  33. package/dist/jobs/chatter-mention-notification-email-queue-handler.service.d.ts.map +1 -0
  34. package/dist/jobs/chatter-mention-notification-email-queue-handler.service.js +106 -0
  35. package/dist/jobs/chatter-mention-notification-email-queue-handler.service.js.map +1 -0
  36. package/dist/jobs/database/chatter-mention-notification-email-publisher-database.service.d.ts +12 -0
  37. package/dist/jobs/database/chatter-mention-notification-email-publisher-database.service.d.ts.map +1 -0
  38. package/dist/jobs/database/chatter-mention-notification-email-publisher-database.service.js +39 -0
  39. package/dist/jobs/database/chatter-mention-notification-email-publisher-database.service.js.map +1 -0
  40. package/dist/jobs/database/chatter-mention-notification-email-queue-options-database.d.ts +8 -0
  41. package/dist/jobs/database/chatter-mention-notification-email-queue-options-database.d.ts.map +1 -0
  42. package/dist/jobs/database/chatter-mention-notification-email-queue-options-database.js +10 -0
  43. package/dist/jobs/database/chatter-mention-notification-email-queue-options-database.js.map +1 -0
  44. package/dist/jobs/database/chatter-mention-notification-email-subscriber-database.service.d.ts +20 -0
  45. package/dist/jobs/database/chatter-mention-notification-email-subscriber-database.service.d.ts.map +1 -0
  46. package/dist/jobs/database/chatter-mention-notification-email-subscriber-database.service.js +48 -0
  47. package/dist/jobs/database/chatter-mention-notification-email-subscriber-database.service.js.map +1 -0
  48. package/dist/jobs/rabbitmq/chatter-mention-notification-email-publisher.service.d.ts +12 -0
  49. package/dist/jobs/rabbitmq/chatter-mention-notification-email-publisher.service.d.ts.map +1 -0
  50. package/dist/jobs/rabbitmq/chatter-mention-notification-email-publisher.service.js +39 -0
  51. package/dist/jobs/rabbitmq/chatter-mention-notification-email-publisher.service.js.map +1 -0
  52. package/dist/jobs/rabbitmq/chatter-mention-notification-email-queue-options.d.ts +8 -0
  53. package/dist/jobs/rabbitmq/chatter-mention-notification-email-queue-options.d.ts.map +1 -0
  54. package/dist/jobs/rabbitmq/chatter-mention-notification-email-queue-options.js +10 -0
  55. package/dist/jobs/rabbitmq/chatter-mention-notification-email-queue-options.js.map +1 -0
  56. package/dist/jobs/rabbitmq/chatter-mention-notification-email-subscriber.service.d.ts +18 -0
  57. package/dist/jobs/rabbitmq/chatter-mention-notification-email-subscriber.service.d.ts.map +1 -0
  58. package/dist/jobs/rabbitmq/chatter-mention-notification-email-subscriber.service.js +45 -0
  59. package/dist/jobs/rabbitmq/chatter-mention-notification-email-subscriber.service.js.map +1 -0
  60. package/dist/jobs/redis/chatter-mention-notification-email-publisher-redis.service.d.ts +12 -0
  61. package/dist/jobs/redis/chatter-mention-notification-email-publisher-redis.service.d.ts.map +1 -0
  62. package/dist/jobs/redis/chatter-mention-notification-email-publisher-redis.service.js +39 -0
  63. package/dist/jobs/redis/chatter-mention-notification-email-publisher-redis.service.js.map +1 -0
  64. package/dist/jobs/redis/chatter-mention-notification-email-queue-options-redis.d.ts +8 -0
  65. package/dist/jobs/redis/chatter-mention-notification-email-queue-options-redis.d.ts.map +1 -0
  66. package/dist/jobs/redis/chatter-mention-notification-email-queue-options-redis.js +10 -0
  67. package/dist/jobs/redis/chatter-mention-notification-email-queue-options-redis.js.map +1 -0
  68. package/dist/jobs/redis/chatter-mention-notification-email-subscriber-redis.service.d.ts +18 -0
  69. package/dist/jobs/redis/chatter-mention-notification-email-subscriber-redis.service.d.ts.map +1 -0
  70. package/dist/jobs/redis/chatter-mention-notification-email-subscriber-redis.service.js +45 -0
  71. package/dist/jobs/redis/chatter-mention-notification-email-subscriber-redis.service.js.map +1 -0
  72. package/dist/seeders/seed-data/solid-core-metadata.json +21 -0
  73. package/dist/services/chatter-message.service.d.ts +7 -1
  74. package/dist/services/chatter-message.service.d.ts.map +1 -1
  75. package/dist/services/chatter-message.service.js +85 -4
  76. package/dist/services/chatter-message.service.js.map +1 -1
  77. package/dist/solid-core.module.d.ts.map +1 -1
  78. package/dist/solid-core.module.js +14 -0
  79. package/dist/solid-core.module.js.map +1 -1
  80. package/dist-tests/api/authenticate.spec.js +119 -0
  81. package/dist-tests/api/authenticate.spec.js.map +1 -0
  82. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +97 -0
  83. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +1 -0
  84. package/dist-tests/api/ping.spec.js +21 -0
  85. package/dist-tests/api/ping.spec.js.map +1 -0
  86. package/dist-tests/helpers/auth.js +41 -0
  87. package/dist-tests/helpers/auth.js.map +1 -0
  88. package/dist-tests/helpers/env.js +11 -0
  89. package/dist-tests/helpers/env.js.map +1 -0
  90. package/docs/agent-builder/notebook-lm-prompt-for-agent-builder.md +136 -0
  91. package/docs/agent-builder/team-ready-note-agent-builder.md +305 -0
  92. package/docs/agent-hub-grooming.md +301 -0
  93. package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +438 -0
  94. package/docs/dashboards/dashboard-curl-smoke-tests.txt +146 -0
  95. package/docs/dashboards/delete-legacy-dashboard-metadata.sql +172 -0
  96. package/docs/datasource-introspection-ddl-analysis.md +326 -0
  97. package/docs/datasource-introspection-implementation-plan.md +306 -0
  98. package/docs/grouping-enhancements.md +89 -0
  99. package/docs/java-spring/README.md +3 -0
  100. package/docs/java-spring/solid-core-module-deep-dive-report.md +1317 -0
  101. package/docs/module-package-import-handoff.md +691 -0
  102. package/docs/seed-changes.md +65 -0
  103. package/docs/test-data-workflow.md +200 -0
  104. package/docs/type-declaration-import-issue.md +24 -0
  105. package/docs/workflow/business-automation-example-notes.md +309 -0
  106. package/docs/workflow/data-engineering-pipeline-example-notes.md +330 -0
  107. package/docs/workflow/foreach-example-notes.md +187 -0
  108. package/docs/workflow/hello-world-example-notes.md +271 -0
  109. package/docs/workflow/kestra-concepts-plugins-blueprints.md +315 -0
  110. package/docs/workflow/loop-until-example-notes.md +198 -0
  111. package/docs/workflow/microservices-and-apis-example-notes.md +264 -0
  112. package/docs/workflow/samples.md +25 -0
  113. package/docs/workflow/what-is-kestra.md +79 -0
  114. package/docs/workflow/workflow-core-module-handoff-summary.md +191 -0
  115. package/docs/workflow/workflow-module-brd.md +185 -0
  116. package/docs/workflow/workflow-module-domain-model.md +252 -0
  117. package/docs/workflow/workflow-module-metadata-dsl.md +302 -0
  118. package/docs/workflow/workflow-module-technical-spec.md +293 -0
  119. package/docs/workflow/workflow-node-type-contracts.md +635 -0
  120. package/docs/workflow/workflow-node-ui-metadata-contract.md +1262 -0
  121. package/docs/workflow/workflow-solidx-model-field-spec.md +284 -0
  122. package/package.json +1 -1
  123. package/src/constants/error-messages.ts +1 -0
  124. package/src/dtos/create-chatter-message.dto.ts +5 -0
  125. package/src/dtos/post-chatter-message.dto.ts +4 -0
  126. package/src/dtos/update-chatter-message.dto.ts +6 -0
  127. package/src/dtos/update-chatter-note-message.dto.ts +5 -0
  128. package/src/entities/chatter-message.entity.ts +3 -0
  129. package/src/helpers/solid-core-error-codes-provider.service.ts +9 -0
  130. package/src/interfaces/chatter-mention-notification.interface.ts +29 -0
  131. package/src/jobs/chatter-mention-notification-email-queue-handler.service.ts +114 -0
  132. package/src/jobs/database/chatter-mention-notification-email-publisher-database.service.ts +23 -0
  133. package/src/jobs/database/chatter-mention-notification-email-queue-options-database.ts +9 -0
  134. package/src/jobs/database/chatter-mention-notification-email-subscriber-database.service.ts +32 -0
  135. package/src/jobs/rabbitmq/chatter-mention-notification-email-publisher.service.ts +23 -0
  136. package/src/jobs/rabbitmq/chatter-mention-notification-email-queue-options.ts +9 -0
  137. package/src/jobs/rabbitmq/chatter-mention-notification-email-subscriber.service.ts +30 -0
  138. package/src/jobs/redis/chatter-mention-notification-email-publisher-redis.service.ts +23 -0
  139. package/src/jobs/redis/chatter-mention-notification-email-queue-options-redis.ts +9 -0
  140. package/src/jobs/redis/chatter-mention-notification-email-subscriber-redis.service.ts +30 -0
  141. package/src/seeders/seed-data/email-templates/chatter-mention-notification.handlebars.html +200 -0
  142. package/src/seeders/seed-data/solid-core-metadata.json +21 -0
  143. package/src/services/chatter-message.service.ts +97 -2
  144. package/src/solid-core.module.ts +14 -0
  145. package/.claude/settings.local.json +0 -16
  146. package/CLAUDE.md +0 -26
  147. package/src/services/1.js +0 -6
@@ -0,0 +1,271 @@
1
+ # Hello World Example Notes
2
+
3
+ ## Purpose
4
+
5
+ This document captures a simple reference workflow with:
6
+
7
+ - a disabled schedule trigger
8
+ - one workflow input
9
+ - a linear task sequence
10
+ - cross-task output references in the final log message
11
+
12
+ Compared with the other examples, this one is intentionally simple and is useful as the baseline topology for a trigger-driven sequential workflow.
13
+
14
+ ---
15
+
16
+ ## Example Workflow YAML
17
+
18
+ ```yaml
19
+ id: hello-world
20
+ namespace: tutorial
21
+ labels:
22
+ name: Hello World
23
+
24
+ triggers:
25
+ - id: daily
26
+ type: io.kestra.plugin.core.trigger.Schedule
27
+ cron: 0 9 * * *
28
+ disabled: true
29
+
30
+ inputs:
31
+ - id: user
32
+ type: STRING
33
+ defaults: Rick Astley
34
+
35
+ tasks:
36
+ - id: first_task
37
+ type: io.kestra.plugin.core.output.OutputValues
38
+ description: Return a value used later in the logged greeting.
39
+ values:
40
+ message: "thrilled"
41
+
42
+ - id: second_task
43
+ type: io.kestra.plugin.scripts.shell.Commands
44
+ description: Run quick shell commands and expose a value as output.
45
+ commands:
46
+ - sleep 0.42
47
+ - echo '::{"outputs":{"returned_data":"mydata"}}::'
48
+
49
+ - id: hello_world
50
+ type: io.kestra.plugin.core.log.Log
51
+ description: Log a welcome message using the inputs and earlier outputs.
52
+ message: |
53
+ Welcome to Kestra, {{ inputs.user }}!
54
+ We are {{ outputs.first_task.values.message }} to have you. Here is your output from the second task: {{outputs.second_task.vars}}.
55
+
56
+ description: |
57
+ **Use case:** Intro to Kestra that collects a `user` input and writes a friendly log.
58
+ **Trigger:** Disabled daily run at 09:00, left in place to show how scheduling works.
59
+ **Highlights:**
60
+ - Emit sample values to demonstrate how outputs travel between tasks.
61
+ - Run a shell command and surface its output for downstream use.
62
+ - Log the combined greeting using both inputs and prior outputs.
63
+ ```
64
+
65
+ ---
66
+
67
+ ## What This Example Adds
68
+
69
+ This example is useful because it is the cleanest reference for:
70
+
71
+ - a simple trigger group
72
+ - a simple top-level input
73
+ - a purely linear task flow
74
+ - output propagation across multiple tasks
75
+ - a beginner-friendly workflow shape
76
+
77
+ It is a good baseline workflow to validate that the editor handles the most common happy path before layering in control flow and nested groups.
78
+
79
+ ---
80
+
81
+ ## High-Level Structure
82
+
83
+ ```text
84
+ Triggers
85
+ └── daily
86
+
87
+ Main Flow
88
+ first_task
89
+ |
90
+ v
91
+ second_task
92
+ |
93
+ v
94
+ hello_world
95
+ ```
96
+
97
+ Another useful linear representation:
98
+
99
+ ```text
100
+ Start
101
+ |
102
+ v
103
+ [trigger group: daily]
104
+ |
105
+ v
106
+ first_task
107
+ |
108
+ v
109
+ second_task
110
+ |
111
+ v
112
+ hello_world
113
+ |
114
+ v
115
+ End
116
+ ```
117
+
118
+ ---
119
+
120
+ ## Main Note
121
+
122
+ ### Example With Trigger
123
+
124
+ This is the key point of this example.
125
+
126
+ It confirms the simpler trigger case:
127
+
128
+ - one schedule trigger
129
+ - one straight-line task chain
130
+ - no branching
131
+ - no nested control-flow container
132
+
133
+ This makes it a strong baseline reference for trigger-aware topology rendering.
134
+
135
+ ---
136
+
137
+ ## Trigger Notes
138
+
139
+ The screenshots again reinforce the trigger-group treatment:
140
+
141
+ - triggers appear in a dedicated grouped region
142
+ - they are visually distinct from normal tasks
143
+ - the group connects into the main workflow sequence
144
+ - disabled triggers are still shown
145
+
146
+ For SolidX:
147
+
148
+ - the trigger group should remain visible in both topology and edit views
149
+ - disabled state should be preserved in the rendered metadata
150
+ - trigger visualization should not require trigger editing to be complete
151
+
152
+ ---
153
+
154
+ ## Inputs Notes
155
+
156
+ This example includes one top-level input:
157
+
158
+ - `user`
159
+
160
+ That makes it useful as a lightweight reference for workflow-level inputs without the extra complexity of multiple configurable runtime endpoints.
161
+
162
+ The workflow editor will eventually need to support:
163
+
164
+ - displaying workflow inputs clearly
165
+ - editing them through code first
166
+ - later, optionally surfacing them in a schema-driven workflow settings experience
167
+
168
+ ---
169
+
170
+ ## Output Propagation Notes
171
+
172
+ This example is also a nice reference for how outputs flow between tasks.
173
+
174
+ ### Output Usage Pattern
175
+
176
+ - `first_task` emits `values.message`
177
+ - `second_task` emits shell-derived output data
178
+ - `hello_world` consumes both
179
+
180
+ This is useful for docs and UI because it demonstrates:
181
+
182
+ - task outputs are part of the workflow authoring experience
183
+ - users need help understanding available upstream outputs
184
+ - code completion and docs should eventually assist with these references
185
+
186
+ The final log task is effectively a small example of expression-aware authoring.
187
+
188
+ ---
189
+
190
+ ## Topology Notes
191
+
192
+ The topology for this workflow is intentionally minimal:
193
+
194
+ - trigger group at the top
195
+ - one vertical line of tasks
196
+ - no branches
197
+ - no nested containers
198
+
199
+ This means it should be treated as the baseline layout contract for simple workflows.
200
+
201
+ If this example renders poorly, the editor is not yet ready for the more advanced ones.
202
+
203
+ ---
204
+
205
+ ## Edit View Notes
206
+
207
+ The edit screenshot again supports the same basic composition:
208
+
209
+ - left: code
210
+ - right: flow
211
+
212
+ This example is especially useful here because the structure is easy to visually verify against the YAML without much interpretation.
213
+
214
+ That makes it a good smoke-test workflow for:
215
+
216
+ - YAML-to-flow transformation
217
+ - trigger rendering
218
+ - icon mapping
219
+ - sequential node spacing
220
+ - add/edit/delete affordances
221
+
222
+ ---
223
+
224
+ ## Implications For SolidX
225
+
226
+ This example should be used as the default sanity-check workflow for the editor because it combines:
227
+
228
+ - trigger presence
229
+ - inputs
230
+ - outputs
231
+ - sequential task chaining
232
+
233
+ without introducing:
234
+
235
+ - branching
236
+ - grouping containers
237
+ - nested child tasks
238
+
239
+ So it is likely the best first example for verifying the full authoring loop.
240
+
241
+ ---
242
+
243
+ ## Pending Feature Notes
244
+
245
+ This example highlights a few future UX improvements:
246
+
247
+ - workflow-level input editing surface
248
+ - output reference assistance in code editing
249
+ - trigger-specific docs and status rendering
250
+ - task output discovery in the docs side panel or schema editor
251
+
252
+ ---
253
+
254
+ ## Screenshot References
255
+
256
+ These screenshots informed the notes above:
257
+
258
+ - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.14.06.png`
259
+ - `/Users/harishpatel/Desktop/Screenshot 2026-07-10 at 17.14.19.png`
260
+
261
+ ---
262
+
263
+ ## Recommended Follow-On Use
264
+
265
+ This example should be used as a reference for:
266
+
267
+ 1. simple trigger-group rendering
268
+ 2. linear workflow layout validation
269
+ 3. workflow input handling
270
+ 4. output-reference awareness in authoring
271
+ 5. smoke-testing the end-to-end code-to-flow editor behavior
@@ -0,0 +1,315 @@
1
+ # Kestra Concepts, Plugins, and Blueprints
2
+
3
+ This note summarizes the Kestra Academy pages from the `Concepts` section plus the `Plugins` and `Blueprints` lessons. The goal is to translate Kestra's mental model into design inputs for a reusable SolidX workflow engine and builder module.
4
+
5
+ ## Flows
6
+
7
+ A flow is the top-level workflow container. It defines:
8
+
9
+ - a unique `id`
10
+ - a `namespace`
11
+ - the `tasks` that perform the work
12
+
13
+ Kestra treats the flow as the unit of orchestration. The flow holds both the tasks and the orchestration logic that determines how those tasks relate. Flows can be authored in YAML, through a no-code editor, or with AI assistance.
14
+
15
+ Important behavior:
16
+
17
+ - Every flow belongs to a namespace
18
+ - Namespaces act like hierarchical folders
19
+ - Flow `id` and `namespace` become permanent after save
20
+
21
+ ### Design implication for us
22
+
23
+ We will need a first-class workflow definition aggregate with stable identity, logical grouping, versioning, and a representation that can support both code-based and visual editing.
24
+
25
+ ## Tasks
26
+
27
+ Tasks are the individual executable steps in a flow. They perform discrete actions such as:
28
+
29
+ - calling an API
30
+ - running code
31
+ - querying a database
32
+ - sending a notification
33
+
34
+ Kestra highlights two broad task categories:
35
+
36
+ - Runnable tasks: do actual work
37
+ - Flowable tasks: control orchestration behavior
38
+
39
+ Every task has at least:
40
+
41
+ - `id`
42
+ - `type`
43
+
44
+ Task-specific properties then vary by plugin/task type.
45
+
46
+ ### Design implication for us
47
+
48
+ Our model should distinguish between:
49
+
50
+ - step identity
51
+ - step type
52
+ - step configuration
53
+ - executable work steps versus control-flow steps
54
+
55
+ This is likely the start of a polymorphic node model in our domain.
56
+
57
+ ## Inputs
58
+
59
+ Inputs parameterize a flow so it can be executed with different values without changing the definition. Kestra inputs have:
60
+
61
+ - `id`
62
+ - `type`
63
+
64
+ Common optional properties include:
65
+
66
+ - `defaults`
67
+ - `displayName`
68
+ - `required`
69
+ - `description`
70
+
71
+ Kestra supports multiple input types such as string, integer, select, JSON, file, and URI. Inputs are referenced via expressions like `{{ inputs.name }}`.
72
+
73
+ ### Design implication for us
74
+
75
+ We need a typed workflow input model with validation, defaults, UI metadata, and runtime binding support. Inputs should be usable both at manual execution time and by automated triggers.
76
+
77
+ ## Outputs
78
+
79
+ Outputs are runtime results produced by tasks. They are stored in the execution context and made available to downstream tasks. Outputs can be:
80
+
81
+ - simple values
82
+ - structured data
83
+ - files
84
+
85
+ They are referenced using expressions like `{{ outputs.task_id.output_value }}`.
86
+
87
+ Kestra also introduces the idea that an entire flow can expose outputs, not just tasks.
88
+
89
+ ### Design implication for us
90
+
91
+ We need an execution context model that can store and resolve:
92
+
93
+ - per-step outputs
94
+ - flow-level outputs
95
+ - file or artifact references
96
+
97
+ This becomes a core part of runtime execution and expression resolution.
98
+
99
+ ## Triggers
100
+
101
+ Triggers automate flow execution. Kestra describes them as the "when" of a workflow. Examples include:
102
+
103
+ - schedules
104
+ - polling
105
+ - realtime events
106
+ - webhooks
107
+ - flow completion triggers
108
+
109
+ Triggers have their own `id`, `type`, and type-specific configuration. They can also pass input values into a flow when they fire. A single flow can have multiple triggers.
110
+
111
+ ### Design implication for us
112
+
113
+ We need a first-class trigger model that supports:
114
+
115
+ - multiple trigger instances per workflow
116
+ - trigger-specific configuration
117
+ - input injection
118
+ - manual and automated execution paths
119
+
120
+ This likely means triggers should be separate domain entities attached to a workflow definition rather than being embedded as anonymous config blobs only.
121
+
122
+ ## Expressions
123
+
124
+ Expressions are the dynamic binding and transformation layer. Kestra uses `{{ }}` syntax and allows access to runtime context such as:
125
+
126
+ - `inputs`
127
+ - `outputs`
128
+ - `flow`
129
+ - `execution`
130
+ - `trigger`
131
+
132
+ Expressions can do more than variable lookup. They can:
133
+
134
+ - transform values
135
+ - parse JSON
136
+ - format dates
137
+ - perform calculations
138
+
139
+ ### Design implication for us
140
+
141
+ We need to make an early architectural decision about the expression system:
142
+
143
+ - whether to design our own expression format
144
+ - whether to embed an existing engine
145
+ - what execution context objects are exposed
146
+ - how expressions are validated at design time versus resolved at runtime
147
+
148
+ This is a foundational concern because it affects inputs, outputs, conditions, triggers, and task configuration.
149
+
150
+ ## Flowable Tasks
151
+
152
+ Flowable tasks control orchestration instead of doing business work directly. Kestra highlights patterns such as:
153
+
154
+ - conditional branching with `If` and `Switch`
155
+ - iteration with `ForEach`, `ForEachItem`, and `LoopUntil`
156
+ - parallel execution
157
+ - subflows for reuse
158
+
159
+ These tasks combine orchestration rules with expressions.
160
+
161
+ ### Design implication for us
162
+
163
+ Our workflow graph cannot be modeled as only a flat list of steps. We will need support for:
164
+
165
+ - branching
166
+ - nesting
167
+ - loops
168
+ - fan-out / parallelism
169
+ - reusable subflow invocation
170
+
171
+ This pushes us toward a graph or tree-plus-edges model rather than a simple sequential pipeline model.
172
+
173
+ ## Execution
174
+
175
+ An execution is a single run of a flow. Each execution contains task runs, and each task run has its own runtime behavior, outputs, logs, and status.
176
+
177
+ Kestra emphasizes:
178
+
179
+ - execution states such as created, running, success, failed
180
+ - observability through logs, metrics, outputs, topology, and timing views
181
+ - replaying failed task runs or entire executions
182
+ - revisions of flow definitions
183
+
184
+ ### Design implication for us
185
+
186
+ We should model workflow definition and workflow execution separately. At minimum, our domain will likely need:
187
+
188
+ - workflow definitions
189
+ - workflow revisions
190
+ - workflow executions
191
+ - step executions
192
+ - execution state transitions
193
+ - logs / metrics / artifacts
194
+ - replay or rerun semantics
195
+
196
+ ## Secrets
197
+
198
+ Secrets are sensitive values stored outside workflow definitions and referenced at runtime. Kestra exposes them through expressions via a `secret()` function and avoids leaking them into code, logs, and outputs.
199
+
200
+ ### Design implication for us
201
+
202
+ We need a secret reference strategy, not just plain text fields. The module should support:
203
+
204
+ - secure secret references in workflow definitions
205
+ - runtime secret resolution
206
+ - masking in logs and UI
207
+ - separation between design-time config and sensitive runtime values
208
+
209
+ ## Plugins
210
+
211
+ Plugins are the extension mechanism that powers tasks and triggers. In Kestra's framing, plugins are the integration and capability layer that connects workflows to:
212
+
213
+ - programming runtimes
214
+ - databases
215
+ - APIs
216
+ - cloud systems
217
+ - notification channels
218
+
219
+ Even "core" capabilities are still exposed as plugin-backed task or trigger types.
220
+
221
+ ### Design implication for us
222
+
223
+ This is especially important for our module. We should not hard-code every possible step type into the core engine. We likely need:
224
+
225
+ - a reusable action/task type registry
226
+ - typed configuration schemas per task type
227
+ - trigger type registry
228
+ - optional packaging/distribution story for reusable step providers
229
+
230
+ In SolidX terms, this may become one of the primary extensibility points of the module.
231
+
232
+ ## Blueprints
233
+
234
+ Blueprints are curated, ready-to-use example workflows. Kestra presents them as:
235
+
236
+ - working code
237
+ - documentation
238
+ - tags for discovery
239
+
240
+ They are meant to accelerate adoption by giving users validated examples that can be copied and adapted.
241
+
242
+ ### Design implication for us
243
+
244
+ A reusable workflow builder module will benefit from a blueprint/template system from the start or at least early in the roadmap. Blueprints can help with:
245
+
246
+ - onboarding
247
+ - discoverability
248
+ - best-practice reuse
249
+ - sample implementations of step types and orchestration patterns
250
+
251
+ ## Cross-Cutting Observations
252
+
253
+ Kestra's model repeatedly separates concerns in a very clean way:
254
+
255
+ - Definition versus execution
256
+ - Work steps versus control-flow steps
257
+ - Static configuration versus runtime context
258
+ - Secure references versus plain values
259
+ - Core engine versus plugin-provided capabilities
260
+
261
+ That separation is probably the biggest lesson for our design.
262
+
263
+ ## Likely Domain Areas For Our SolidX Module
264
+
265
+ Based on these lessons, our reusable module will probably need domain models for at least:
266
+
267
+ - Workflow definition
268
+ - Workflow revision
269
+ - Workflow namespace or foldering concept
270
+ - Workflow input
271
+ - Workflow output
272
+ - Trigger
273
+ - Step / task
274
+ - Step type registry
275
+ - Step execution
276
+ - Workflow execution
277
+ - Execution logs and artifacts
278
+ - Secret reference
279
+ - Blueprint / template
280
+
281
+ ## Metadata / DSL Implication
282
+
283
+ Kestra uses YAML as a human-readable workflow definition format. For our SolidX module, we should expect to define an equivalent metadata representation for workflows that can support:
284
+
285
+ - stable workflow identity
286
+ - typed nodes
287
+ - nested control-flow structures
288
+ - trigger definitions
289
+ - expressions
290
+ - reusable references
291
+ - versioning
292
+
293
+ That representation will need to work for both:
294
+
295
+ - a visual workflow builder
296
+ - a code or JSON/YAML style export/import story
297
+
298
+ ## Sources
299
+
300
+ - [Flows](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404093-flows)
301
+ - [Tasks](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404094-tasks)
302
+ - [Inputs](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404096-inputs)
303
+ - [Outputs](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404097-outputs)
304
+ - [Triggers](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404103-triggers)
305
+ - [Expressions](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404099-expressions)
306
+ - [Flowable Tasks](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404106-flowable-tasks)
307
+ - [Execution](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404107-execution)
308
+ - [Secrets](https://academy.kestra.io/p/courses/kestra-fundamentals/3492614-concepts/11404115-secrets)
309
+ - [Plugins](https://academy.kestra.io/p/courses/kestra-fundamentals/3492618-plugins-blueprints/11437898-plugins)
310
+ - [Blueprints](https://academy.kestra.io/p/courses/kestra-fundamentals/3492618-plugins-blueprints/11437900-blueprints)
311
+
312
+ ## Notes
313
+
314
+ - The extracted lesson text was pulled from the Academy pages directly.
315
+ - Some lessons included image-heavy examples, so the summary focuses on the textual teaching content plus explicit design implications for our module.