tasker-engine 1.0.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 (605) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +22 -0
  3. data/README.md +443 -0
  4. data/Rakefile +10 -0
  5. data/app/controllers/tasker/analytics_controller.rb +179 -0
  6. data/app/controllers/tasker/application_controller.rb +45 -0
  7. data/app/controllers/tasker/graphql_controller.rb +193 -0
  8. data/app/controllers/tasker/handlers_controller.rb +217 -0
  9. data/app/controllers/tasker/health_controller.rb +229 -0
  10. data/app/controllers/tasker/metrics_controller.rb +111 -0
  11. data/app/controllers/tasker/page_sort.rb +97 -0
  12. data/app/controllers/tasker/task_diagrams_controller.rb +30 -0
  13. data/app/controllers/tasker/tasks_controller.rb +123 -0
  14. data/app/controllers/tasker/workflow_steps_controller.rb +69 -0
  15. data/app/graphql/examples/all_tasks.graphql +22 -0
  16. data/app/graphql/examples/pending_tasks.graphql +23 -0
  17. data/app/graphql/tasker/graph_ql_types/annotation_type.rb +14 -0
  18. data/app/graphql/tasker/graph_ql_types/base_argument.rb +9 -0
  19. data/app/graphql/tasker/graph_ql_types/base_connection.rb +11 -0
  20. data/app/graphql/tasker/graph_ql_types/base_edge.rb +10 -0
  21. data/app/graphql/tasker/graph_ql_types/base_enum.rb +9 -0
  22. data/app/graphql/tasker/graph_ql_types/base_field.rb +10 -0
  23. data/app/graphql/tasker/graph_ql_types/base_input_object.rb +10 -0
  24. data/app/graphql/tasker/graph_ql_types/base_interface.rb +14 -0
  25. data/app/graphql/tasker/graph_ql_types/base_object.rb +10 -0
  26. data/app/graphql/tasker/graph_ql_types/base_scalar.rb +9 -0
  27. data/app/graphql/tasker/graph_ql_types/base_union.rb +11 -0
  28. data/app/graphql/tasker/graph_ql_types/dependent_system_object_map_type.rb +18 -0
  29. data/app/graphql/tasker/graph_ql_types/dependent_system_type.rb +13 -0
  30. data/app/graphql/tasker/graph_ql_types/mutation_type.rb +16 -0
  31. data/app/graphql/tasker/graph_ql_types/named_step_type.rb +16 -0
  32. data/app/graphql/tasker/graph_ql_types/named_task_type.rb +14 -0
  33. data/app/graphql/tasker/graph_ql_types/named_tasks_named_step_type.rb +19 -0
  34. data/app/graphql/tasker/graph_ql_types/node_type.rb +12 -0
  35. data/app/graphql/tasker/graph_ql_types/query_type.rb +20 -0
  36. data/app/graphql/tasker/graph_ql_types/task_annotation_type.rb +17 -0
  37. data/app/graphql/tasker/graph_ql_types/task_interface.rb +17 -0
  38. data/app/graphql/tasker/graph_ql_types/task_type.rb +26 -0
  39. data/app/graphql/tasker/graph_ql_types/workflow_step_type.rb +154 -0
  40. data/app/graphql/tasker/graph_ql_types.rb +42 -0
  41. data/app/graphql/tasker/mutations/base_mutation.rb +13 -0
  42. data/app/graphql/tasker/mutations/cancel_step.rb +29 -0
  43. data/app/graphql/tasker/mutations/cancel_task.rb +29 -0
  44. data/app/graphql/tasker/mutations/create_task.rb +52 -0
  45. data/app/graphql/tasker/mutations/update_step.rb +36 -0
  46. data/app/graphql/tasker/mutations/update_task.rb +41 -0
  47. data/app/graphql/tasker/queries/all_annotation_types.rb +17 -0
  48. data/app/graphql/tasker/queries/all_tasks.rb +23 -0
  49. data/app/graphql/tasker/queries/base_query.rb +9 -0
  50. data/app/graphql/tasker/queries/helpers.rb +16 -0
  51. data/app/graphql/tasker/queries/one_step.rb +24 -0
  52. data/app/graphql/tasker/queries/one_task.rb +18 -0
  53. data/app/graphql/tasker/queries/tasks_by_annotation.rb +31 -0
  54. data/app/graphql/tasker/queries/tasks_by_status.rb +30 -0
  55. data/app/graphql/tasker/tasker_rails_schema.rb +52 -0
  56. data/app/jobs/tasker/application_job.rb +8 -0
  57. data/app/jobs/tasker/metrics_export_job.rb +252 -0
  58. data/app/jobs/tasker/task_runner_job.rb +224 -0
  59. data/app/models/tasker/annotation_type.rb +26 -0
  60. data/app/models/tasker/application_record.rb +70 -0
  61. data/app/models/tasker/dependent_system.rb +26 -0
  62. data/app/models/tasker/dependent_system_object_map.rb +64 -0
  63. data/app/models/tasker/diagram/edge.rb +106 -0
  64. data/app/models/tasker/diagram/flowchart.rb +137 -0
  65. data/app/models/tasker/diagram/node.rb +99 -0
  66. data/app/models/tasker/named_step.rb +41 -0
  67. data/app/models/tasker/named_task.rb +121 -0
  68. data/app/models/tasker/named_tasks_named_step.rb +82 -0
  69. data/app/models/tasker/step_dag_relationship.rb +65 -0
  70. data/app/models/tasker/step_readiness_status.rb +59 -0
  71. data/app/models/tasker/task.rb +424 -0
  72. data/app/models/tasker/task_annotation.rb +36 -0
  73. data/app/models/tasker/task_diagram.rb +332 -0
  74. data/app/models/tasker/task_execution_context.rb +29 -0
  75. data/app/models/tasker/task_namespace.rb +41 -0
  76. data/app/models/tasker/task_transition.rb +235 -0
  77. data/app/models/tasker/workflow_step.rb +461 -0
  78. data/app/models/tasker/workflow_step_edge.rb +94 -0
  79. data/app/models/tasker/workflow_step_transition.rb +434 -0
  80. data/app/serializers/tasker/annotation_type_serializer.rb +8 -0
  81. data/app/serializers/tasker/handler_serializer.rb +109 -0
  82. data/app/serializers/tasker/task_annotation_serializer.rb +32 -0
  83. data/app/serializers/tasker/task_serializer.rb +168 -0
  84. data/app/serializers/tasker/workflow_step_serializer.rb +27 -0
  85. data/app/services/tasker/analytics_service.rb +409 -0
  86. data/app/views/tasker/task/_diagram.html.erb +32 -0
  87. data/config/initializers/dry_struct.rb +11 -0
  88. data/config/initializers/statesman.rb +6 -0
  89. data/config/initializers/tasker_orchestration.rb +17 -0
  90. data/config/initializers/time_formats.rb +4 -0
  91. data/config/routes.rb +34 -0
  92. data/config/tasker/subscriptions/example_integrations.yml +67 -0
  93. data/config/tasker/system_events.yml +305 -0
  94. data/db/functions/calculate_dependency_levels_v01.sql +45 -0
  95. data/db/functions/get_analytics_metrics_v01.sql +137 -0
  96. data/db/functions/get_slowest_steps_v01.sql +82 -0
  97. data/db/functions/get_slowest_tasks_v01.sql +96 -0
  98. data/db/functions/get_step_readiness_status_batch_v01.sql +140 -0
  99. data/db/functions/get_step_readiness_status_v01.sql +139 -0
  100. data/db/functions/get_system_health_counts_v01.sql +108 -0
  101. data/db/functions/get_task_execution_context_v01.sql +108 -0
  102. data/db/functions/get_task_execution_contexts_batch_v01.sql +104 -0
  103. data/db/init/schema.sql +2277 -0
  104. data/db/migrate/20250701165431_initial_tasker_schema.rb +116 -0
  105. data/db/views/tasker_step_dag_relationships_v01.sql +69 -0
  106. data/docs/APPLICATION_GENERATOR.md +384 -0
  107. data/docs/AUTH.md +1780 -0
  108. data/docs/CIRCUIT_BREAKER.md +224 -0
  109. data/docs/DEVELOPER_GUIDE.md +2665 -0
  110. data/docs/EVENT_SYSTEM.md +637 -0
  111. data/docs/EXECUTION_CONFIGURATION.md +341 -0
  112. data/docs/FLOW_CHART.md +149 -0
  113. data/docs/HEALTH.md +542 -0
  114. data/docs/METRICS.md +731 -0
  115. data/docs/OPTIMIZATION_PLAN.md +1479 -0
  116. data/docs/OVERVIEW.md +552 -0
  117. data/docs/QUICK_START.md +270 -0
  118. data/docs/REGISTRY_SYSTEMS.md +373 -0
  119. data/docs/REST_API.md +632 -0
  120. data/docs/ROADMAP.md +221 -0
  121. data/docs/SQL_FUNCTIONS.md +1408 -0
  122. data/docs/TASK_DIAGRAM.md +252 -0
  123. data/docs/TASK_EXECUTION_CONTROL_FLOW.md +237 -0
  124. data/docs/TELEMETRY.md +795 -0
  125. data/docs/TROUBLESHOOTING.md +756 -0
  126. data/docs/TaskHandlerGenerator.html +255 -0
  127. data/docs/Tasker/Analysis/RuntimeGraphAnalyzer.html +907 -0
  128. data/docs/Tasker/Analysis/TemplateGraphAnalyzer.html +1236 -0
  129. data/docs/Tasker/Analysis.html +117 -0
  130. data/docs/Tasker/AnalyticsController.html +450 -0
  131. data/docs/Tasker/AnalyticsService/BottleneckAnalytics.html +816 -0
  132. data/docs/Tasker/AnalyticsService/PerformanceAnalytics.html +586 -0
  133. data/docs/Tasker/AnalyticsService.html +2221 -0
  134. data/docs/Tasker/AnnotationType.html +137 -0
  135. data/docs/Tasker/AnnotationTypeSerializer.html +124 -0
  136. data/docs/Tasker/ApplicationController.html +147 -0
  137. data/docs/Tasker/ApplicationJob.html +128 -0
  138. data/docs/Tasker/ApplicationRecord.html +378 -0
  139. data/docs/Tasker/Authentication/AuthenticationError.html +124 -0
  140. data/docs/Tasker/Authentication/ConfigurationError.html +124 -0
  141. data/docs/Tasker/Authentication/Coordinator.html +242 -0
  142. data/docs/Tasker/Authentication/Interface.html +560 -0
  143. data/docs/Tasker/Authentication/InterfaceError.html +124 -0
  144. data/docs/Tasker/Authentication/NoneAuthenticator.html +338 -0
  145. data/docs/Tasker/Authentication.html +119 -0
  146. data/docs/Tasker/Authorization/AuthorizationError.html +139 -0
  147. data/docs/Tasker/Authorization/BaseCoordinator.html +927 -0
  148. data/docs/Tasker/Authorization/ConfigurationError.html +153 -0
  149. data/docs/Tasker/Authorization/ResourceConstants/ACTIONS.html +428 -0
  150. data/docs/Tasker/Authorization/ResourceConstants/RESOURCES.html +365 -0
  151. data/docs/Tasker/Authorization/ResourceConstants.html +146 -0
  152. data/docs/Tasker/Authorization/ResourceRegistry.html +882 -0
  153. data/docs/Tasker/Authorization/UnauthorizedError.html +153 -0
  154. data/docs/Tasker/Authorization.html +582 -0
  155. data/docs/Tasker/CacheCapabilities.html +167 -0
  156. data/docs/Tasker/CacheStrategy.html +1297 -0
  157. data/docs/Tasker/Concerns/Authenticatable.html +116 -0
  158. data/docs/Tasker/Concerns/Authorizable/AdminStatusChecker.html +256 -0
  159. data/docs/Tasker/Concerns/Authorizable.html +816 -0
  160. data/docs/Tasker/Concerns/ControllerAuthorizable.html +157 -0
  161. data/docs/Tasker/Concerns/EventPublisher.html +4023 -0
  162. data/docs/Tasker/Concerns/IdempotentStateTransitions.html +806 -0
  163. data/docs/Tasker/Concerns/LifecycleEventHelpers.html +129 -0
  164. data/docs/Tasker/Concerns/OrchestrationPublisher.html +129 -0
  165. data/docs/Tasker/Concerns/StateMachineBase/ClassMethods.html +1075 -0
  166. data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase/ClassMethods.html +191 -0
  167. data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase.html +126 -0
  168. data/docs/Tasker/Concerns/StateMachineBase.html +153 -0
  169. data/docs/Tasker/Concerns/StructuredLogging.html +1413 -0
  170. data/docs/Tasker/Concerns.html +117 -0
  171. data/docs/Tasker/Configuration/AuthConfiguration.html +1023 -0
  172. data/docs/Tasker/Configuration/ConfigurationProxy.html +581 -0
  173. data/docs/Tasker/Configuration/DatabaseConfiguration.html +475 -0
  174. data/docs/Tasker/Configuration/EngineConfiguration.html +1265 -0
  175. data/docs/Tasker/Configuration/HealthConfiguration.html +791 -0
  176. data/docs/Tasker/Configuration/TelemetryConfiguration.html +1308 -0
  177. data/docs/Tasker/Configuration/TelemetryConfigurationProxy.html +388 -0
  178. data/docs/Tasker/Configuration.html +1669 -0
  179. data/docs/Tasker/ConfigurationError.html +143 -0
  180. data/docs/Tasker/ConfiguredTask.html +514 -0
  181. data/docs/Tasker/Constants/EventDefinitions.html +590 -0
  182. data/docs/Tasker/Constants/LifecycleEvents.html +137 -0
  183. data/docs/Tasker/Constants/ObservabilityEvents/Step.html +152 -0
  184. data/docs/Tasker/Constants/ObservabilityEvents/Task.html +142 -0
  185. data/docs/Tasker/Constants/ObservabilityEvents.html +126 -0
  186. data/docs/Tasker/Constants/RegistryEvents.html +285 -0
  187. data/docs/Tasker/Constants/StepEvents.html +177 -0
  188. data/docs/Tasker/Constants/TaskEvents.html +167 -0
  189. data/docs/Tasker/Constants/TaskExecution/ExecutionStatus.html +207 -0
  190. data/docs/Tasker/Constants/TaskExecution/HealthStatus.html +191 -0
  191. data/docs/Tasker/Constants/TaskExecution/RecommendedAction.html +207 -0
  192. data/docs/Tasker/Constants/TaskExecution.html +126 -0
  193. data/docs/Tasker/Constants/TaskFinalization/ErrorMessages.html +132 -0
  194. data/docs/Tasker/Constants/TaskFinalization/PendingReasons.html +207 -0
  195. data/docs/Tasker/Constants/TaskFinalization/ReenqueueReasons.html +239 -0
  196. data/docs/Tasker/Constants/TaskFinalization.html +126 -0
  197. data/docs/Tasker/Constants/TaskStatuses.html +223 -0
  198. data/docs/Tasker/Constants/TestEvents.html +163 -0
  199. data/docs/Tasker/Constants/WorkflowEvents.html +222 -0
  200. data/docs/Tasker/Constants/WorkflowStepStatuses.html +223 -0
  201. data/docs/Tasker/Constants.html +561 -0
  202. data/docs/Tasker/DependentSystem.html +137 -0
  203. data/docs/Tasker/DependentSystemObjectMap.html +250 -0
  204. data/docs/Tasker/DetectorRegistry.html +598 -0
  205. data/docs/Tasker/Diagram/Edge.html +1191 -0
  206. data/docs/Tasker/Diagram/Flowchart.html +1539 -0
  207. data/docs/Tasker/Diagram/Node.html +1165 -0
  208. data/docs/Tasker/Diagram.html +117 -0
  209. data/docs/Tasker/Engine.html +215 -0
  210. data/docs/Tasker/Error.html +139 -0
  211. data/docs/Tasker/Events/Bus.html +1226 -0
  212. data/docs/Tasker/Events/Catalog/CatalogPrinter.html +258 -0
  213. data/docs/Tasker/Events/Catalog/CustomEventRegistrar.html +276 -0
  214. data/docs/Tasker/Events/Catalog/ExamplePayloadGenerator.html +294 -0
  215. data/docs/Tasker/Events/Catalog.html +1291 -0
  216. data/docs/Tasker/Events/CustomRegistry.html +943 -0
  217. data/docs/Tasker/Events/DefinitionLoader.html +575 -0
  218. data/docs/Tasker/Events/EventPayloadBuilder/ErrorInfoExtractor.html +286 -0
  219. data/docs/Tasker/Events/EventPayloadBuilder/StepPayloadBuilder.html +312 -0
  220. data/docs/Tasker/Events/EventPayloadBuilder.html +664 -0
  221. data/docs/Tasker/Events/Publisher.html +365 -0
  222. data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer/ErrorTypeClassifier.html +1128 -0
  223. data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer.html +270 -0
  224. data/docs/Tasker/Events/Subscribers/BaseSubscriber/MetricTagsExtractor.html +266 -0
  225. data/docs/Tasker/Events/Subscribers/BaseSubscriber.html +2556 -0
  226. data/docs/Tasker/Events/Subscribers/MetricsSubscriber.html +723 -0
  227. data/docs/Tasker/Events/Subscribers/TelemetrySubscriber.html +2251 -0
  228. data/docs/Tasker/Events/Subscribers.html +117 -0
  229. data/docs/Tasker/Events/SubscriptionLoader.html +493 -0
  230. data/docs/Tasker/Events.html +294 -0
  231. data/docs/Tasker/EventsGenerator.html +459 -0
  232. data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics/AnalyticsMetrics.html +135 -0
  233. data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics.html +412 -0
  234. data/docs/Tasker/Functions/FunctionBasedDependencyLevels.html +598 -0
  235. data/docs/Tasker/Functions/FunctionBasedSlowestSteps/SlowestStep.html +135 -0
  236. data/docs/Tasker/Functions/FunctionBasedSlowestSteps.html +453 -0
  237. data/docs/Tasker/Functions/FunctionBasedSlowestTasks/SlowestTask.html +135 -0
  238. data/docs/Tasker/Functions/FunctionBasedSlowestTasks.html +453 -0
  239. data/docs/Tasker/Functions/FunctionBasedStepReadinessStatus.html +1457 -0
  240. data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts/HealthMetrics.html +135 -0
  241. data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts.html +370 -0
  242. data/docs/Tasker/Functions/FunctionBasedTaskExecutionContext.html +1250 -0
  243. data/docs/Tasker/Functions/FunctionWrapper.html +479 -0
  244. data/docs/Tasker/Functions.html +117 -0
  245. data/docs/Tasker/Generators/AuthenticatorGenerator/UsageInstructionsFormatter.html +244 -0
  246. data/docs/Tasker/Generators/AuthenticatorGenerator.html +373 -0
  247. data/docs/Tasker/Generators/AuthorizationCoordinatorGenerator.html +430 -0
  248. data/docs/Tasker/Generators/SubscriberGenerator.html +377 -0
  249. data/docs/Tasker/Generators/TaskHandlerGenerator.html +263 -0
  250. data/docs/Tasker/Generators.html +117 -0
  251. data/docs/Tasker/GraphQLTypes/AnnotationType.html +132 -0
  252. data/docs/Tasker/GraphQLTypes/BaseArgument.html +124 -0
  253. data/docs/Tasker/GraphQLTypes/BaseConnection.html +124 -0
  254. data/docs/Tasker/GraphQLTypes/BaseEdge.html +130 -0
  255. data/docs/Tasker/GraphQLTypes/BaseEnum.html +124 -0
  256. data/docs/Tasker/GraphQLTypes/BaseField.html +124 -0
  257. data/docs/Tasker/GraphQLTypes/BaseInputObject.html +124 -0
  258. data/docs/Tasker/GraphQLTypes/BaseInterface.html +116 -0
  259. data/docs/Tasker/GraphQLTypes/BaseObject.html +128 -0
  260. data/docs/Tasker/GraphQLTypes/BaseScalar.html +124 -0
  261. data/docs/Tasker/GraphQLTypes/BaseUnion.html +124 -0
  262. data/docs/Tasker/GraphQLTypes/DependentSystemObjectMapType.html +132 -0
  263. data/docs/Tasker/GraphQLTypes/DependentSystemType.html +132 -0
  264. data/docs/Tasker/GraphQLTypes/MutationType.html +132 -0
  265. data/docs/Tasker/GraphQLTypes/NamedStepType.html +132 -0
  266. data/docs/Tasker/GraphQLTypes/NamedTaskType.html +132 -0
  267. data/docs/Tasker/GraphQLTypes/NamedTasksNamedStepType.html +132 -0
  268. data/docs/Tasker/GraphQLTypes/NodeType.html +118 -0
  269. data/docs/Tasker/GraphQLTypes/QueryType.html +139 -0
  270. data/docs/Tasker/GraphQLTypes/TaskAnnotationType.html +132 -0
  271. data/docs/Tasker/GraphQLTypes/TaskInterface.html +111 -0
  272. data/docs/Tasker/GraphQLTypes/TaskType.html +201 -0
  273. data/docs/Tasker/GraphQLTypes/WorkflowStepType.html +694 -0
  274. data/docs/Tasker/GraphQLTypes.html +130 -0
  275. data/docs/Tasker/GraphqlController.html +251 -0
  276. data/docs/Tasker/HandlerFactory.html +1518 -0
  277. data/docs/Tasker/HandlerSerializer.html +682 -0
  278. data/docs/Tasker/HandlersController.html +574 -0
  279. data/docs/Tasker/HashIdentityStrategy.html +278 -0
  280. data/docs/Tasker/Health/ReadinessChecker.html +712 -0
  281. data/docs/Tasker/Health/StatusChecker.html +653 -0
  282. data/docs/Tasker/Health.html +117 -0
  283. data/docs/Tasker/HealthController.html +523 -0
  284. data/docs/Tasker/IdentityStrategy.html +276 -0
  285. data/docs/Tasker/InvalidTaskHandlerConfig.html +135 -0
  286. data/docs/Tasker/LifecycleEvents/Events/Step.html +162 -0
  287. data/docs/Tasker/LifecycleEvents/Events/Task.html +162 -0
  288. data/docs/Tasker/LifecycleEvents/Events.html +204 -0
  289. data/docs/Tasker/LifecycleEvents/Publisher.html +132 -0
  290. data/docs/Tasker/LifecycleEvents.html +799 -0
  291. data/docs/Tasker/Logging/CorrelationIdGenerator.html +688 -0
  292. data/docs/Tasker/Logging.html +115 -0
  293. data/docs/Tasker/MetricsController.html +293 -0
  294. data/docs/Tasker/MetricsExportJob.html +414 -0
  295. data/docs/Tasker/Mutations/BaseMutation.html +128 -0
  296. data/docs/Tasker/Mutations/CancelStep.html +219 -0
  297. data/docs/Tasker/Mutations/CancelTask.html +221 -0
  298. data/docs/Tasker/Mutations/CreateTask.html +243 -0
  299. data/docs/Tasker/Mutations/UpdateStep.html +243 -0
  300. data/docs/Tasker/Mutations/UpdateTask.html +243 -0
  301. data/docs/Tasker/Mutations.html +117 -0
  302. data/docs/Tasker/NamedStep.html +216 -0
  303. data/docs/Tasker/NamedTask.html +910 -0
  304. data/docs/Tasker/NamedTasksNamedStep.html +435 -0
  305. data/docs/Tasker/Orchestration/BackoffCalculator.html +404 -0
  306. data/docs/Tasker/Orchestration/ConnectionBuilder/ConfigValidator.html +258 -0
  307. data/docs/Tasker/Orchestration/ConnectionBuilder.html +435 -0
  308. data/docs/Tasker/Orchestration/ConnectionPoolIntelligence.html +513 -0
  309. data/docs/Tasker/Orchestration/Coordinator.html +641 -0
  310. data/docs/Tasker/Orchestration/FutureStateAnalyzer.html +1045 -0
  311. data/docs/Tasker/Orchestration/Orchestrator.html +679 -0
  312. data/docs/Tasker/Orchestration/PluginIntegration.html +1127 -0
  313. data/docs/Tasker/Orchestration/ResponseProcessor.html +504 -0
  314. data/docs/Tasker/Orchestration/RetryHeaderParser.html +304 -0
  315. data/docs/Tasker/Orchestration/StepExecutor.html +995 -0
  316. data/docs/Tasker/Orchestration/StepSequenceFactory.html +644 -0
  317. data/docs/Tasker/Orchestration/TaskFinalizer/BlockageChecker.html +264 -0
  318. data/docs/Tasker/Orchestration/TaskFinalizer/ContextManager.html +254 -0
  319. data/docs/Tasker/Orchestration/TaskFinalizer/DelayCalculator.html +556 -0
  320. data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationDecisionMaker.html +348 -0
  321. data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationProcessor.html +286 -0
  322. data/docs/Tasker/Orchestration/TaskFinalizer/ReasonDeterminer.html +432 -0
  323. data/docs/Tasker/Orchestration/TaskFinalizer/ReenqueueManager.html +296 -0
  324. data/docs/Tasker/Orchestration/TaskFinalizer/UnclearStateHandler.html +314 -0
  325. data/docs/Tasker/Orchestration/TaskFinalizer.html +1212 -0
  326. data/docs/Tasker/Orchestration/TaskInitializer.html +766 -0
  327. data/docs/Tasker/Orchestration/TaskReenqueuer.html +506 -0
  328. data/docs/Tasker/Orchestration/ViableStepDiscovery.html +442 -0
  329. data/docs/Tasker/Orchestration/WorkflowCoordinator.html +510 -0
  330. data/docs/Tasker/Orchestration.html +130 -0
  331. data/docs/Tasker/PageSort/PageSortParamsBuilder.html +296 -0
  332. data/docs/Tasker/PageSort.html +247 -0
  333. data/docs/Tasker/PermanentError.html +518 -0
  334. data/docs/Tasker/ProceduralError.html +147 -0
  335. data/docs/Tasker/Queries/AllAnnotationTypes.html +217 -0
  336. data/docs/Tasker/Queries/AllTasks.html +221 -0
  337. data/docs/Tasker/Queries/BaseQuery.html +128 -0
  338. data/docs/Tasker/Queries/Helpers.html +187 -0
  339. data/docs/Tasker/Queries/OneStep.html +225 -0
  340. data/docs/Tasker/Queries/OneTask.html +217 -0
  341. data/docs/Tasker/Queries/TasksByAnnotation.html +231 -0
  342. data/docs/Tasker/Queries/TasksByStatus.html +233 -0
  343. data/docs/Tasker/Queries.html +119 -0
  344. data/docs/Tasker/Railtie.html +124 -0
  345. data/docs/Tasker/Registry/BaseRegistry.html +1690 -0
  346. data/docs/Tasker/Registry/EventPublisher.html +667 -0
  347. data/docs/Tasker/Registry/InterfaceValidator.html +569 -0
  348. data/docs/Tasker/Registry/RegistrationError.html +132 -0
  349. data/docs/Tasker/Registry/RegistryError.html +139 -0
  350. data/docs/Tasker/Registry/StatisticsCollector.html +841 -0
  351. data/docs/Tasker/Registry/SubscriberRegistry.html +1504 -0
  352. data/docs/Tasker/Registry/ValidationError.html +132 -0
  353. data/docs/Tasker/Registry.html +119 -0
  354. data/docs/Tasker/RetryableError.html +515 -0
  355. data/docs/Tasker/StateMachine/Compatibility.html +282 -0
  356. data/docs/Tasker/StateMachine/InvalidStateTransition.html +135 -0
  357. data/docs/Tasker/StateMachine/StepStateMachine/StandardizedPayloadBuilder.html +260 -0
  358. data/docs/Tasker/StateMachine/StepStateMachine.html +2215 -0
  359. data/docs/Tasker/StateMachine/TaskStateMachine.html +734 -0
  360. data/docs/Tasker/StateMachine.html +602 -0
  361. data/docs/Tasker/StepDagRelationship.html +657 -0
  362. data/docs/Tasker/StepHandler/Api/Config.html +1091 -0
  363. data/docs/Tasker/StepHandler/Api.html +884 -0
  364. data/docs/Tasker/StepHandler/AutomaticEventPublishing.html +321 -0
  365. data/docs/Tasker/StepHandler/Base.html +970 -0
  366. data/docs/Tasker/StepHandler.html +119 -0
  367. data/docs/Tasker/StepReadinessStatus.html +836 -0
  368. data/docs/Tasker/Task.html +2575 -0
  369. data/docs/Tasker/TaskAnnotation.html +137 -0
  370. data/docs/Tasker/TaskAnnotationSerializer.html +124 -0
  371. data/docs/Tasker/TaskBuilder/StepNameValidator.html +264 -0
  372. data/docs/Tasker/TaskBuilder/StepTemplateDefiner.html +264 -0
  373. data/docs/Tasker/TaskBuilder.html +764 -0
  374. data/docs/Tasker/TaskDiagram/StepToStepEdgeBuilder.html +260 -0
  375. data/docs/Tasker/TaskDiagram/TaskToRootStepEdgeBuilder.html +290 -0
  376. data/docs/Tasker/TaskDiagram.html +548 -0
  377. data/docs/Tasker/TaskDiagramsController.html +240 -0
  378. data/docs/Tasker/TaskExecutionContext.html +469 -0
  379. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/ClassBasedEventRegistrar.html +238 -0
  380. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/YamlEventRegistrar.html +254 -0
  381. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner.html +988 -0
  382. data/docs/Tasker/TaskHandler/ClassMethods.html +357 -0
  383. data/docs/Tasker/TaskHandler/InstanceMethods.html +1396 -0
  384. data/docs/Tasker/TaskHandler/StepGroup.html +1748 -0
  385. data/docs/Tasker/TaskHandler.html +271 -0
  386. data/docs/Tasker/TaskNamespace.html +312 -0
  387. data/docs/Tasker/TaskRunnerJob.html +406 -0
  388. data/docs/Tasker/TaskSerializer.html +474 -0
  389. data/docs/Tasker/TaskTransition.html +1517 -0
  390. data/docs/Tasker/TaskWorkflowSummary.html +988 -0
  391. data/docs/Tasker/TaskerRailsSchema/InvalidObjectTypeError.html +132 -0
  392. data/docs/Tasker/TaskerRailsSchema/TypeResolutionError.html +139 -0
  393. data/docs/Tasker/TaskerRailsSchema/UnknownInterfaceError.html +132 -0
  394. data/docs/Tasker/TaskerRailsSchema.html +384 -0
  395. data/docs/Tasker/TasksController.html +595 -0
  396. data/docs/Tasker/Telemetry/EventMapping.html +1307 -0
  397. data/docs/Tasker/Telemetry/EventRouter.html +2178 -0
  398. data/docs/Tasker/Telemetry/Events/ExportEvents.html +246 -0
  399. data/docs/Tasker/Telemetry/Events.html +115 -0
  400. data/docs/Tasker/Telemetry/ExportCoordinator/DistributedLockTimeoutError.html +135 -0
  401. data/docs/Tasker/Telemetry/ExportCoordinator.html +2137 -0
  402. data/docs/Tasker/Telemetry/IntelligentCacheManager.html +1083 -0
  403. data/docs/Tasker/Telemetry/LogBackend.html +1088 -0
  404. data/docs/Tasker/Telemetry/MetricTypes/Counter.html +1054 -0
  405. data/docs/Tasker/Telemetry/MetricTypes/Gauge.html +1270 -0
  406. data/docs/Tasker/Telemetry/MetricTypes/Histogram.html +1492 -0
  407. data/docs/Tasker/Telemetry/MetricTypes.html +153 -0
  408. data/docs/Tasker/Telemetry/MetricsBackend.html +2510 -0
  409. data/docs/Tasker/Telemetry/MetricsExportService.html +578 -0
  410. data/docs/Tasker/Telemetry/PluginRegistry.html +1774 -0
  411. data/docs/Tasker/Telemetry/Plugins/BaseExporter.html +1835 -0
  412. data/docs/Tasker/Telemetry/Plugins/CsvExporter.html +768 -0
  413. data/docs/Tasker/Telemetry/Plugins/JsonExporter.html +747 -0
  414. data/docs/Tasker/Telemetry/Plugins.html +117 -0
  415. data/docs/Tasker/Telemetry/PrometheusExporter.html +481 -0
  416. data/docs/Tasker/Telemetry/TraceBackend.html +891 -0
  417. data/docs/Tasker/Telemetry.html +130 -0
  418. data/docs/Tasker/Types/AuthConfig.html +886 -0
  419. data/docs/Tasker/Types/BackoffConfig.html +1063 -0
  420. data/docs/Tasker/Types/BaseConfig.html +227 -0
  421. data/docs/Tasker/Types/CacheConfig.html +1731 -0
  422. data/docs/Tasker/Types/DatabaseConfig.html +388 -0
  423. data/docs/Tasker/Types/DependencyGraph.html +526 -0
  424. data/docs/Tasker/Types/DependencyGraphConfig.html +753 -0
  425. data/docs/Tasker/Types/EngineConfig.html +1181 -0
  426. data/docs/Tasker/Types/ExecutionConfig.html +1963 -0
  427. data/docs/Tasker/Types/GraphEdge.html +517 -0
  428. data/docs/Tasker/Types/GraphMetadata.html +781 -0
  429. data/docs/Tasker/Types/GraphNode.html +694 -0
  430. data/docs/Tasker/Types/HealthConfig.html +784 -0
  431. data/docs/Tasker/Types/StepSequence.html +353 -0
  432. data/docs/Tasker/Types/StepTemplate.html +1193 -0
  433. data/docs/Tasker/Types/TaskRequest.html +1179 -0
  434. data/docs/Tasker/Types/TelemetryConfig.html +2746 -0
  435. data/docs/Tasker/Types.html +154 -0
  436. data/docs/Tasker/WorkflowStep/StepFinder.html +282 -0
  437. data/docs/Tasker/WorkflowStep.html +2724 -0
  438. data/docs/Tasker/WorkflowStepEdge.html +304 -0
  439. data/docs/Tasker/WorkflowStepSerializer.html +305 -0
  440. data/docs/Tasker/WorkflowStepTransition/TransitionDescriptionFormatter.html +282 -0
  441. data/docs/Tasker/WorkflowStepTransition.html +2201 -0
  442. data/docs/Tasker/WorkflowStepsController.html +462 -0
  443. data/docs/Tasker.html +452 -0
  444. data/docs/VISION.md +584 -0
  445. data/docs/WHY.md +21 -0
  446. data/docs/_index.html +2375 -0
  447. data/docs/class_list.html +54 -0
  448. data/docs/css/common.css +1 -0
  449. data/docs/css/full_list.css +58 -0
  450. data/docs/css/style.css +503 -0
  451. data/docs/events/migration_plan_outcomes.md +80 -0
  452. data/docs/file.README.html +541 -0
  453. data/docs/file_list.html +59 -0
  454. data/docs/frames.html +22 -0
  455. data/docs/index.html +541 -0
  456. data/docs/js/app.js +344 -0
  457. data/docs/js/full_list.js +242 -0
  458. data/docs/js/jquery.js +4 -0
  459. data/docs/method_list.html +9182 -0
  460. data/docs/top-level-namespace.html +110 -0
  461. data/lib/generators/tasker/authenticator_generator.rb +301 -0
  462. data/lib/generators/tasker/authorization_coordinator_generator.rb +139 -0
  463. data/lib/generators/tasker/events_generator.rb +91 -0
  464. data/lib/generators/tasker/subscriber_generator.rb +107 -0
  465. data/lib/generators/tasker/task_handler_generator.rb +138 -0
  466. data/lib/generators/tasker/templates/api_token_authenticator.rb.erb +113 -0
  467. data/lib/generators/tasker/templates/api_token_authenticator_spec.rb.erb +144 -0
  468. data/lib/generators/tasker/templates/authorization_coordinator.rb.erb +95 -0
  469. data/lib/generators/tasker/templates/authorization_coordinator_spec.rb.erb +142 -0
  470. data/lib/generators/tasker/templates/custom_authenticator.rb.erb +108 -0
  471. data/lib/generators/tasker/templates/custom_authenticator_spec.rb.erb +162 -0
  472. data/lib/generators/tasker/templates/custom_events.yml.erb +62 -0
  473. data/lib/generators/tasker/templates/custom_subscriber.rb.erb +72 -0
  474. data/lib/generators/tasker/templates/devise_authenticator.rb.erb +101 -0
  475. data/lib/generators/tasker/templates/devise_authenticator_spec.rb.erb +126 -0
  476. data/lib/generators/tasker/templates/initialize.rb.erb +202 -0
  477. data/lib/generators/tasker/templates/jwt_authenticator.rb.erb +144 -0
  478. data/lib/generators/tasker/templates/jwt_authenticator_spec.rb.erb +298 -0
  479. data/lib/generators/tasker/templates/metrics_subscriber.rb.erb +258 -0
  480. data/lib/generators/tasker/templates/metrics_subscriber_spec.rb.erb +308 -0
  481. data/lib/generators/tasker/templates/omniauth_authenticator.rb.erb +135 -0
  482. data/lib/generators/tasker/templates/omniauth_authenticator_spec.rb.erb +196 -0
  483. data/lib/generators/tasker/templates/opentelemetry_initializer.rb +52 -0
  484. data/lib/generators/tasker/templates/subscriber.rb.erb +64 -0
  485. data/lib/generators/tasker/templates/subscriber_spec.rb.erb +80 -0
  486. data/lib/generators/tasker/templates/task_config.yaml.erb +117 -0
  487. data/lib/generators/tasker/templates/task_handler.rb.erb +59 -0
  488. data/lib/generators/tasker/templates/task_handler_spec.rb.erb +159 -0
  489. data/lib/tasker/analysis/runtime_graph_analyzer.rb +1168 -0
  490. data/lib/tasker/analysis/template_graph_analyzer.rb +328 -0
  491. data/lib/tasker/authentication/coordinator.rb +78 -0
  492. data/lib/tasker/authentication/errors.rb +9 -0
  493. data/lib/tasker/authentication/interface.rb +36 -0
  494. data/lib/tasker/authentication/none_authenticator.rb +26 -0
  495. data/lib/tasker/authorization/base_coordinator.rb +112 -0
  496. data/lib/tasker/authorization/errors.rb +26 -0
  497. data/lib/tasker/authorization/resource_constants.rb +74 -0
  498. data/lib/tasker/authorization/resource_registry.rb +143 -0
  499. data/lib/tasker/authorization.rb +75 -0
  500. data/lib/tasker/cache_capabilities.rb +131 -0
  501. data/lib/tasker/cache_strategy.rb +469 -0
  502. data/lib/tasker/concerns/authenticatable.rb +41 -0
  503. data/lib/tasker/concerns/authorizable.rb +204 -0
  504. data/lib/tasker/concerns/controller_authorizable.rb +124 -0
  505. data/lib/tasker/concerns/event_publisher.rb +716 -0
  506. data/lib/tasker/concerns/idempotent_state_transitions.rb +128 -0
  507. data/lib/tasker/concerns/state_machine_base.rb +218 -0
  508. data/lib/tasker/concerns/structured_logging.rb +387 -0
  509. data/lib/tasker/configuration.rb +325 -0
  510. data/lib/tasker/constants/event_definitions.rb +147 -0
  511. data/lib/tasker/constants/registry_events.rb +54 -0
  512. data/lib/tasker/constants.rb +417 -0
  513. data/lib/tasker/engine.rb +90 -0
  514. data/lib/tasker/errors.rb +90 -0
  515. data/lib/tasker/events/catalog.rb +432 -0
  516. data/lib/tasker/events/custom_registry.rb +175 -0
  517. data/lib/tasker/events/definition_loader.rb +199 -0
  518. data/lib/tasker/events/event_payload_builder.rb +461 -0
  519. data/lib/tasker/events/publisher.rb +149 -0
  520. data/lib/tasker/events/subscribers/base_subscriber.rb +601 -0
  521. data/lib/tasker/events/subscribers/metrics_subscriber.rb +120 -0
  522. data/lib/tasker/events/subscribers/telemetry_subscriber.rb +462 -0
  523. data/lib/tasker/events/subscription_loader.rb +161 -0
  524. data/lib/tasker/events.rb +37 -0
  525. data/lib/tasker/functions/function_based_analytics_metrics.rb +103 -0
  526. data/lib/tasker/functions/function_based_dependency_levels.rb +54 -0
  527. data/lib/tasker/functions/function_based_slowest_steps.rb +84 -0
  528. data/lib/tasker/functions/function_based_slowest_tasks.rb +84 -0
  529. data/lib/tasker/functions/function_based_step_readiness_status.rb +183 -0
  530. data/lib/tasker/functions/function_based_system_health_counts.rb +94 -0
  531. data/lib/tasker/functions/function_based_task_execution_context.rb +148 -0
  532. data/lib/tasker/functions/function_wrapper.rb +42 -0
  533. data/lib/tasker/functions.rb +12 -0
  534. data/lib/tasker/handler_factory.rb +322 -0
  535. data/lib/tasker/health/readiness_checker.rb +186 -0
  536. data/lib/tasker/health/status_checker.rb +203 -0
  537. data/lib/tasker/identity_strategy.rb +38 -0
  538. data/lib/tasker/logging/correlation_id_generator.rb +120 -0
  539. data/lib/tasker/orchestration/backoff_calculator.rb +184 -0
  540. data/lib/tasker/orchestration/connection_builder.rb +122 -0
  541. data/lib/tasker/orchestration/connection_pool_intelligence.rb +177 -0
  542. data/lib/tasker/orchestration/coordinator.rb +119 -0
  543. data/lib/tasker/orchestration/future_state_analyzer.rb +137 -0
  544. data/lib/tasker/orchestration/plugin_integration.rb +124 -0
  545. data/lib/tasker/orchestration/response_processor.rb +168 -0
  546. data/lib/tasker/orchestration/retry_header_parser.rb +78 -0
  547. data/lib/tasker/orchestration/step_executor.rb +941 -0
  548. data/lib/tasker/orchestration/step_sequence_factory.rb +67 -0
  549. data/lib/tasker/orchestration/task_finalizer.rb +564 -0
  550. data/lib/tasker/orchestration/task_initializer.rb +140 -0
  551. data/lib/tasker/orchestration/task_reenqueuer.rb +71 -0
  552. data/lib/tasker/orchestration/viable_step_discovery.rb +65 -0
  553. data/lib/tasker/orchestration/workflow_coordinator.rb +294 -0
  554. data/lib/tasker/orchestration.rb +45 -0
  555. data/lib/tasker/railtie.rb +9 -0
  556. data/lib/tasker/registry/base_registry.rb +177 -0
  557. data/lib/tasker/registry/event_publisher.rb +91 -0
  558. data/lib/tasker/registry/interface_validator.rb +140 -0
  559. data/lib/tasker/registry/statistics_collector.rb +381 -0
  560. data/lib/tasker/registry/subscriber_registry.rb +285 -0
  561. data/lib/tasker/registry.rb +22 -0
  562. data/lib/tasker/state_machine/step_state_machine.rb +508 -0
  563. data/lib/tasker/state_machine/task_state_machine.rb +192 -0
  564. data/lib/tasker/state_machine.rb +83 -0
  565. data/lib/tasker/step_handler/api.rb +410 -0
  566. data/lib/tasker/step_handler/base.rb +206 -0
  567. data/lib/tasker/task_builder.rb +432 -0
  568. data/lib/tasker/task_handler/class_methods.rb +324 -0
  569. data/lib/tasker/task_handler/instance_methods.rb +293 -0
  570. data/lib/tasker/task_handler/step_group.rb +182 -0
  571. data/lib/tasker/task_handler.rb +43 -0
  572. data/lib/tasker/telemetry/event_mapping.rb +126 -0
  573. data/lib/tasker/telemetry/event_router.rb +318 -0
  574. data/lib/tasker/telemetry/events/export_events.rb +38 -0
  575. data/lib/tasker/telemetry/export_coordinator.rb +497 -0
  576. data/lib/tasker/telemetry/intelligent_cache_manager.rb +508 -0
  577. data/lib/tasker/telemetry/log_backend.rb +224 -0
  578. data/lib/tasker/telemetry/metric_types.rb +368 -0
  579. data/lib/tasker/telemetry/metrics_backend.rb +1227 -0
  580. data/lib/tasker/telemetry/metrics_export_service.rb +392 -0
  581. data/lib/tasker/telemetry/plugin_registry.rb +333 -0
  582. data/lib/tasker/telemetry/plugins/base_exporter.rb +246 -0
  583. data/lib/tasker/telemetry/plugins/csv_exporter.rb +198 -0
  584. data/lib/tasker/telemetry/plugins/json_exporter.rb +141 -0
  585. data/lib/tasker/telemetry/prometheus_exporter.rb +249 -0
  586. data/lib/tasker/telemetry/trace_backend.rb +186 -0
  587. data/lib/tasker/telemetry.rb +59 -0
  588. data/lib/tasker/types/auth_config.rb +81 -0
  589. data/lib/tasker/types/backoff_config.rb +142 -0
  590. data/lib/tasker/types/cache_config.rb +257 -0
  591. data/lib/tasker/types/database_config.rb +39 -0
  592. data/lib/tasker/types/dependency_graph.rb +225 -0
  593. data/lib/tasker/types/dependency_graph_config.rb +149 -0
  594. data/lib/tasker/types/engine_config.rb +131 -0
  595. data/lib/tasker/types/execution_config.rb +289 -0
  596. data/lib/tasker/types/health_config.rb +84 -0
  597. data/lib/tasker/types/step_sequence.rb +24 -0
  598. data/lib/tasker/types/step_template.rb +63 -0
  599. data/lib/tasker/types/task_request.rb +60 -0
  600. data/lib/tasker/types/telemetry_config.rb +273 -0
  601. data/lib/tasker/types.rb +64 -0
  602. data/lib/tasker/version.rb +7 -0
  603. data/lib/tasker.rb +82 -0
  604. data/lib/tasks/tasker_tasks.rake +302 -0
  605. metadata +958 -0
@@ -0,0 +1,116 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ class InitialTaskerSchema < ActiveRecord::Migration[7.2]
5
+ def up
6
+ # Load the complete schema from our init file
7
+ # This ensures we get the exact same database structure that has been tested
8
+ # Handle both engine context and standalone context
9
+ if defined?(Tasker::Engine)
10
+ # When running in engine context, look in the engine root
11
+ engine_root = Tasker::Engine.root
12
+ schema_path = engine_root.join('db', 'init', 'schema.sql')
13
+ else
14
+ # When running standalone, use Rails.root
15
+ schema_path = Rails.root.join('db/init/schema.sql')
16
+ end
17
+
18
+ unless File.exist?(schema_path)
19
+ raise "Schema file not found at #{schema_path}. Please ensure db/init/schema.sql exists."
20
+ end
21
+
22
+ # Read and execute the schema file
23
+ schema_sql = File.read(schema_path)
24
+
25
+ # Filter out Rails internal tables that conflict with Rails' automatic creation
26
+ # These tables are created automatically by Rails during db:create
27
+ filtered_sql = filter_rails_internal_tables(schema_sql)
28
+
29
+ # Execute the filtered schema
30
+ execute(filtered_sql)
31
+
32
+ # Ensure the migration version is recorded
33
+ # (This happens automatically but being explicit)
34
+ end
35
+
36
+ private
37
+
38
+ # Filter out Rails internal tables from the schema SQL
39
+ # These tables are automatically created by Rails and will conflict if we try to create them
40
+ def filter_rails_internal_tables(sql)
41
+ lines = sql.lines
42
+ filtered_lines = []
43
+ skip_table = false
44
+ current_table = nil
45
+
46
+ lines.each do |line|
47
+ # Detect table creation for Rails internal tables
48
+ if line =~ /CREATE TABLE (?:public\.)?(ar_internal_metadata|schema_migrations)/
49
+ current_table = ::Regexp.last_match(1)
50
+ skip_table = true
51
+ next
52
+ end
53
+
54
+ # Detect end of table creation (semicolon on its own line or other CREATE/ALTER statement)
55
+ if skip_table && (line.strip == ';' || line.match(/^(CREATE|ALTER|INSERT|COPY)/))
56
+ if line.strip == ';'
57
+ # Skip the semicolon that ends the table we're filtering
58
+ skip_table = false
59
+ current_table = nil
60
+ next
61
+ elsif /^(CREATE|ALTER|INSERT|COPY)/.match?(line)
62
+ # New statement starts, stop skipping
63
+ skip_table = false
64
+ current_table = nil
65
+ # Don't skip this line, it's a new statement
66
+ end
67
+ end
68
+
69
+ # Skip INSERT statements for Rails internal tables
70
+ if line =~ /INSERT INTO (?:public\.)?(ar_internal_metadata|schema_migrations)/
71
+ skip_table = true
72
+ current_table = ::Regexp.last_match(1)
73
+ next
74
+ end
75
+
76
+ # Skip COPY statements for Rails internal tables
77
+ if line =~ /COPY (?:public\.)?(ar_internal_metadata|schema_migrations)/
78
+ skip_table = true
79
+ current_table = ::Regexp.last_match(1)
80
+ next
81
+ end
82
+
83
+ # Add line if we're not skipping
84
+ filtered_lines << line unless skip_table
85
+ end
86
+
87
+ filtered_lines.join
88
+ end
89
+
90
+ def down
91
+ # Drop all Tasker tables in reverse dependency order
92
+ execute 'DROP TABLE IF EXISTS tasker_workflow_step_transitions CASCADE;'
93
+ execute 'DROP TABLE IF EXISTS tasker_task_transitions CASCADE;'
94
+ execute 'DROP TABLE IF EXISTS tasker_task_annotations CASCADE;'
95
+ execute 'DROP TABLE IF EXISTS tasker_workflow_step_edges CASCADE;'
96
+ execute 'DROP TABLE IF EXISTS tasker_workflow_steps CASCADE;'
97
+ execute 'DROP TABLE IF EXISTS tasker_tasks CASCADE;'
98
+ execute 'DROP TABLE IF EXISTS tasker_named_tasks_named_steps CASCADE;'
99
+ execute 'DROP TABLE IF EXISTS tasker_named_steps CASCADE;'
100
+ execute 'DROP TABLE IF EXISTS tasker_named_tasks CASCADE;'
101
+ execute 'DROP TABLE IF EXISTS tasker_dependent_system_object_maps CASCADE;'
102
+ execute 'DROP TABLE IF EXISTS tasker_dependent_systems CASCADE;'
103
+ execute 'DROP TABLE IF EXISTS tasker_task_namespaces CASCADE;'
104
+ execute 'DROP TABLE IF EXISTS tasker_annotation_types CASCADE;'
105
+
106
+ # Drop views
107
+ execute 'DROP VIEW IF EXISTS tasker_step_dag_relationships CASCADE;'
108
+
109
+ # Drop functions
110
+ execute 'DROP FUNCTION IF EXISTS public.get_step_readiness_status(bigint, bigint[]) CASCADE;'
111
+ execute 'DROP FUNCTION IF EXISTS public.get_step_readiness_status_batch(bigint[]) CASCADE;'
112
+ execute 'DROP FUNCTION IF EXISTS public.calculate_dependency_levels(bigint) CASCADE;'
113
+ execute 'DROP FUNCTION IF EXISTS public.get_system_health_counts_v01() CASCADE;'
114
+ execute 'DROP FUNCTION IF EXISTS public.get_analytics_metrics_v01(timestamp with time zone) CASCADE;'
115
+ end
116
+ end
@@ -0,0 +1,69 @@
1
+ SELECT
2
+ ws.workflow_step_id,
3
+ ws.task_id,
4
+ ws.named_step_id,
5
+
6
+ -- Parent/Child relationship data (pre-calculated as JSONB arrays)
7
+ COALESCE(parent_data.parent_ids, '[]'::jsonb) as parent_step_ids,
8
+ COALESCE(child_data.child_ids, '[]'::jsonb) as child_step_ids,
9
+ COALESCE(parent_data.parent_count, 0) as parent_count,
10
+ COALESCE(child_data.child_count, 0) as child_count,
11
+
12
+ -- DAG position information
13
+ CASE WHEN COALESCE(parent_data.parent_count, 0) = 0 THEN true ELSE false END as is_root_step,
14
+ CASE WHEN COALESCE(child_data.child_count, 0) = 0 THEN true ELSE false END as is_leaf_step,
15
+
16
+ -- Depth calculation for DAG traversal optimization
17
+ depth_info.min_depth_from_root
18
+
19
+ FROM tasker_workflow_steps ws
20
+
21
+ LEFT JOIN (
22
+ SELECT
23
+ to_step_id,
24
+ jsonb_agg(from_step_id ORDER BY from_step_id) as parent_ids,
25
+ count(*) as parent_count
26
+ FROM tasker_workflow_step_edges
27
+ GROUP BY to_step_id
28
+ ) parent_data ON parent_data.to_step_id = ws.workflow_step_id
29
+
30
+ LEFT JOIN (
31
+ SELECT
32
+ from_step_id,
33
+ jsonb_agg(to_step_id ORDER BY to_step_id) as child_ids,
34
+ count(*) as child_count
35
+ FROM tasker_workflow_step_edges
36
+ GROUP BY from_step_id
37
+ ) child_data ON child_data.from_step_id = ws.workflow_step_id
38
+
39
+ LEFT JOIN (
40
+ -- Recursive CTE for depth calculation (PostgreSQL-specific)
41
+ WITH RECURSIVE step_depths AS (
42
+ -- Base case: root steps (no parents)
43
+ SELECT
44
+ ws_inner.workflow_step_id,
45
+ 0 as depth_from_root,
46
+ ws_inner.task_id
47
+ FROM tasker_workflow_steps ws_inner
48
+ WHERE NOT EXISTS (
49
+ SELECT 1 FROM tasker_workflow_step_edges e
50
+ WHERE e.to_step_id = ws_inner.workflow_step_id
51
+ )
52
+
53
+ UNION ALL
54
+
55
+ -- Recursive case: steps with parents
56
+ SELECT
57
+ e.to_step_id,
58
+ sd.depth_from_root + 1,
59
+ sd.task_id
60
+ FROM step_depths sd
61
+ JOIN tasker_workflow_step_edges e ON e.from_step_id = sd.workflow_step_id
62
+ WHERE sd.depth_from_root < 50 -- Prevent infinite recursion
63
+ )
64
+ SELECT
65
+ workflow_step_id,
66
+ MIN(depth_from_root) as min_depth_from_root
67
+ FROM step_depths
68
+ GROUP BY workflow_step_id
69
+ ) depth_info ON depth_info.workflow_step_id = ws.workflow_step_id
@@ -0,0 +1,384 @@
1
+ # Tasker Application Template Generator
2
+
3
+ The Tasker Application Template Generator provides a one-line creation experience for building production-ready applications that leverage Tasker's enterprise workflow orchestration capabilities. Version 2.6.0 introduces Docker-based development environments and comprehensive dry-run validation.
4
+
5
+ ## Quick Start
6
+
7
+ ### One-Line Creation (Interactive)
8
+ ```bash
9
+ curl -fsSL https://raw.githubusercontent.com/tasker-systems/tasker/main/scripts/install-tasker-app.sh | bash
10
+ ```
11
+
12
+ This will:
13
+ 1. Check your system dependencies (Ruby 3.0+, Rails 7+, Git)
14
+ 2. Download the application generator and templates
15
+ 3. Run an interactive setup to customize your application
16
+ 4. Create a complete Rails application with Tasker integration
17
+
18
+ ### Docker-Based Development (NEW in v2.6.0)
19
+ ```bash
20
+ # Create a Docker-based development environment
21
+ curl -fsSL https://raw.githubusercontent.com/tasker-systems/tasker/main/scripts/install-tasker-app.sh | bash -s -- \
22
+ --app-name my-tasker-app \
23
+ --docker \
24
+ --with-observability
25
+ ```
26
+
27
+ This creates a complete Docker environment with:
28
+ - Rails application container with live code reloading
29
+ - PostgreSQL 15 with Tasker schema
30
+ - Redis 7 for caching and background jobs
31
+ - Jaeger distributed tracing (optional)
32
+ - Prometheus metrics collection (optional)
33
+
34
+ ### Non-Interactive Creation
35
+ ```bash
36
+ curl -fsSL https://raw.githubusercontent.com/tasker-systems/tasker/main/scripts/install-tasker-app.sh | bash -s -- \
37
+ --app-name my-tasker-app \
38
+ --tasks ecommerce,inventory \
39
+ --non-interactive
40
+ ```
41
+
42
+ ### With Custom Options
43
+ ```bash
44
+ curl -fsSL https://raw.githubusercontent.com/tasker-systems/tasker/main/scripts/install-tasker-app.sh | bash -s -- \
45
+ --app-name ecommerce-app \
46
+ --tasks ecommerce \
47
+ --output-dir ./my-applications \
48
+ --no-observability
49
+ ```
50
+
51
+ ## Available Options
52
+
53
+ | Option | Description | Default |
54
+ |--------|-------------|---------|
55
+ | `--app-name NAME` | Name of the Tasker application | `my-tasker-app` |
56
+ | `--tasks LIST` | Comma-separated application templates to include | `ecommerce,inventory,customer` |
57
+ | `--output-dir DIR` | Where to create the application | `./tasker-applications` |
58
+ | `--observability` | Include OpenTelemetry/Prometheus config | `true` |
59
+ | `--interactive` | Enable interactive prompts | `true` |
60
+ | `--api-base-url URL` | DummyJSON API base URL | `https://dummyjson.com` |
61
+ | `--docker` | Generate Docker-based development environment | `false` |
62
+ | `--with-observability` | Include Jaeger and Prometheus in Docker setup | `false` |
63
+
64
+ ## What Gets Created
65
+
66
+ The generator creates a complete Rails application featuring:
67
+
68
+ ### ๐Ÿ—๏ธ **Application Structure**
69
+ - Rails 7+ API application with Tasker integration
70
+ - Proper Gemfile with Tasker gem and dependencies
71
+ - Database setup with Tasker migrations
72
+ - Development and production configurations
73
+
74
+ ### ๐Ÿ“‹ **Application Templates**
75
+ Choose from three business domains:
76
+
77
+ **E-commerce (`ecommerce`)**
78
+ - Order processing workflow
79
+ - Cart validation โ†’ Inventory check โ†’ Pricing calculation โ†’ Order creation
80
+ - DummyJSON API integration for realistic data
81
+
82
+ **Inventory Management (`inventory`)**
83
+ - Stock monitoring and reorder management
84
+ - Threshold-based stock level monitoring
85
+ - Low stock identification and alerting
86
+
87
+ **Customer Onboarding (`customer`)**
88
+ - User registration and validation workflow
89
+ - Duplicate user detection
90
+ - Registration data validation
91
+
92
+ ### ๐ŸŽจ **Generated Components**
93
+
94
+ **YAML Configuration Files** (`config/tasker/tasks/`)
95
+ - Proper `Tasker::ConfiguredTask` format
96
+ - Environment-specific configurations
97
+ - Step templates with dependencies
98
+
99
+ **Step Handler Classes** (`app/tasks/`)
100
+ - API integration handlers using `Tasker::StepHandler::Api`
101
+ - Calculation handlers for business logic
102
+ - Database operation handlers
103
+ - Notification handlers (email, SMS, webhooks, Slack)
104
+
105
+ **Enhanced Configuration** (`config/initializers/tasker.rb`)
106
+ - Authentication setup
107
+ - Telemetry and metrics configuration
108
+ - Engine configuration with proper directories
109
+ - Health check configuration
110
+
111
+ ### ๐Ÿ“Š **Observability Stack**
112
+ - OpenTelemetry integration for distributed tracing
113
+ - Prometheus metrics collection
114
+ - Structured logging with correlation IDs
115
+ - Example configurations for Jaeger, Zipkin, and other OTLP backends
116
+
117
+ ### ๐Ÿ“š **Documentation**
118
+ - Comprehensive README with setup instructions
119
+ - API endpoint documentation
120
+ - Example GraphQL queries and REST API calls
121
+ - Observability setup guides
122
+
123
+ ## Architecture Benefits
124
+
125
+ ### ๐Ÿ”„ **Two-Layer Approach**
126
+ 1. **Shell Script Layer**: Environment validation, dependency checking, file downloads
127
+ 2. **Ruby Script Layer**: Complex application generation, template processing, Rails integration
128
+
129
+ ### โœจ **Why This Pattern Works**
130
+ - **Familiar**: Developers expect `curl | sh` for dev tools
131
+ - **Robust**: Ruby script provides comprehensive environment validation
132
+ - **Maintainable**: Complex logic stays in Ruby where it belongs
133
+ - **Flexible**: Easy to extend with new task types and configurations
134
+ - **Marketing**: Reduces friction for trying Tasker
135
+
136
+ ## Security Considerations
137
+
138
+ ### ๐Ÿ”’ **Safe Practices**
139
+ - Always review scripts before running: `curl -fsSL <url> | less`
140
+ - Use HTTPS URLs to prevent man-in-the-middle attacks
141
+ - Script uses temporary directories with cleanup
142
+ - No persistent system modifications outside project directory
143
+
144
+ ### ๐Ÿ›ก๏ธ **Transparency**
145
+ - All source code is public and reviewable
146
+ - No hidden downloads or external dependencies
147
+ - Clear logging of all operations
148
+ - Fail-fast error handling
149
+
150
+ ## Docker Development Environment (v2.6.0)
151
+
152
+ ### Quick Start with Docker
153
+ The Docker mode provides a complete containerized development environment, eliminating setup friction:
154
+
155
+ ```bash
156
+ # Generate application with Docker support
157
+ ruby scripts/create_tasker_app.rb build my-app --docker --with-observability
158
+
159
+ # Navigate to your app
160
+ cd tasker-applications/my-app
161
+
162
+ # Start the development environment
163
+ ./bin/docker-dev up # Core services only
164
+ ./bin/docker-dev up-full # Include observability stack
165
+ ```
166
+
167
+ ### Docker Development Commands
168
+ The `./bin/docker-dev` helper script provides 15+ commands for Docker management:
169
+
170
+ **Service Management**
171
+ ```bash
172
+ ./bin/docker-dev up # Start core services
173
+ ./bin/docker-dev up-full # Start with observability
174
+ ./bin/docker-dev down # Stop all services
175
+ ./bin/docker-dev restart # Restart app service
176
+ ./bin/docker-dev status # Show service status
177
+ ```
178
+
179
+ **Development Tools**
180
+ ```bash
181
+ ./bin/docker-dev console # Rails console
182
+ ./bin/docker-dev bash # Shell access
183
+ ./bin/docker-dev logs # View all logs
184
+ ./bin/docker-dev logs-app # View app logs only
185
+ ```
186
+
187
+ **Database Operations**
188
+ ```bash
189
+ ./bin/docker-dev migrate # Run migrations
190
+ ./bin/docker-dev setup # Run Tasker setup
191
+ ./bin/docker-dev reset-db # Reset database (destructive)
192
+ ```
193
+
194
+ **Testing & Validation**
195
+ ```bash
196
+ ./bin/docker-dev test # Run test suite
197
+ ./bin/docker-dev validate # Run integration validations
198
+ ```
199
+
200
+ ### Docker Architecture
201
+ - **Multi-stage Dockerfile**: Optimized for development and production
202
+ - **Service orchestration**: PostgreSQL, Redis, Rails app, and optional observability
203
+ - **Volume mounts**: Live code reloading with persistent data
204
+ - **Health checks**: Automatic service dependency management
205
+ - **Network isolation**: Secure bridge network for all services
206
+
207
+ ## Dry-Run Validation System (v2.6.0)
208
+
209
+ ### Overview
210
+ The generator includes a comprehensive dry-run validation system that tests template consistency without generating files:
211
+
212
+ ```bash
213
+ # Run all validations
214
+ ruby scripts/create_tasker_app.rb dry_run
215
+
216
+ # Run specific validation modes
217
+ ruby scripts/create_tasker_app.rb dry_run --mode=templates # File existence
218
+ ruby scripts/create_tasker_app.rb dry_run --mode=syntax # ERB/Ruby/YAML syntax
219
+ ruby scripts/create_tasker_app.rb dry_run --mode=cli # CLI option mapping
220
+ ruby scripts/create_tasker_app.rb dry_run --mode=bindings # Template variables
221
+
222
+ # Validate Docker templates
223
+ ruby scripts/create_tasker_app.rb dry_run --docker --with-observability
224
+ ```
225
+
226
+ ### Validation Categories
227
+
228
+ **1. Template File Existence**
229
+ - Verifies all required ERB templates exist
230
+ - Adapts to Docker/observability modes
231
+ - Reports missing templates with paths
232
+
233
+ **2. ERB Template Syntax**
234
+ - Parses all ERB templates for syntax errors
235
+ - Validates without executing templates
236
+ - Catches malformed Ruby blocks and expressions
237
+
238
+ **3. Generated Code Syntax**
239
+ - Renders templates with test data
240
+ - Validates Ruby syntax using RubyVM::InstructionSequence
241
+ - Validates YAML syntax using YAML.safe_load
242
+ - Tests actual generated output, not just templates
243
+
244
+ **4. CLI Options Mapping**
245
+ - Ensures all Thor options have corresponding instance variables
246
+ - Validates required methods exist
247
+ - Handles renamed variables (e.g., `--docker` โ†’ `@docker_mode`)
248
+
249
+ **5. Template Variable Bindings**
250
+ - Tests templates can render with expected contexts
251
+ - Validates all required variables are available
252
+ - Tests step handlers, configuration, and Docker bindings
253
+
254
+ ### Example Output
255
+ ```
256
+ ๐Ÿงช Starting Dry Run Validation...
257
+ ๐Ÿ“‹ Mode: all
258
+ ๐Ÿ—๏ธ Tasks: ecommerce, inventory, customer
259
+ ๐Ÿณ Docker mode: enabled
260
+ ๐Ÿ“Š Observability: enabled
261
+
262
+ ๐Ÿ“ Validating template files existence...
263
+ โœ… 14 templates found
264
+ ๐Ÿ”ง Validating ERB template syntax...
265
+ โœ… 19 ERB templates valid
266
+ ๐Ÿ’Ž Validating Ruby template output syntax...
267
+ โœ… 4 Ruby templates generate valid syntax
268
+ ๐Ÿ“„ Validating YAML template output syntax...
269
+ โœ… 4 YAML templates generate valid syntax
270
+ โš™๏ธ Validating CLI options mapping...
271
+ โœ… 17 CLI mappings valid
272
+ ๐Ÿ”— Validating template variable bindings...
273
+ โœ… 5 binding contexts valid
274
+
275
+ ๐ŸŽฏ Overall Result:
276
+ โœ… All validations passed! (63 checks)
277
+ ```
278
+
279
+ ### CI/CD Integration
280
+ The dry-run system is perfect for CI/CD pipelines:
281
+ - Zero file system impact
282
+ - Clear exit codes (0 for success, 1 for failure)
283
+ - Detailed error reporting
284
+ - Sub-second execution time
285
+
286
+ ## Development Setup
287
+
288
+ ### For Contributors
289
+
290
+ If you're developing or testing the installer:
291
+
292
+ ```bash
293
+ # Test locally without network
294
+ ./scripts/install-tasker-app.sh --help
295
+
296
+ # Test with local templates
297
+ ruby scripts/create_tasker_app.rb build test-app \
298
+ --templates-dir ./scripts/templates \
299
+ --non-interactive
300
+
301
+ # Run comprehensive validation
302
+ ruby scripts/create_tasker_app.rb dry_run --mode=all
303
+
304
+ # Test Docker generation
305
+ ruby scripts/create_tasker_app.rb build docker-app \
306
+ --docker --with-observability
307
+ ```
308
+
309
+ ### Repository Setup
310
+
311
+ To host this installer on your GitHub repository:
312
+
313
+ 1. **Update URLs** in `scripts/install-tasker-app.sh`:
314
+ ```bash
315
+ GITHUB_REPO="tasker-systems/tasker" # Your actual GitHub repo
316
+ BRANCH="main" # Your default branch
317
+ ```
318
+
319
+ 2. **Ensure Files Are Public**:
320
+ - `scripts/install-tasker-app.sh`
321
+ - `scripts/create_tasker_app.rb`
322
+ - All files in `scripts/templates/`
323
+
324
+ 3. **Test the URLs**:
325
+ ```bash
326
+ curl -fsSL https://raw.githubusercontent.com/tasker-systems/tasker/main/scripts/install-tasker-app.sh
327
+ ```
328
+
329
+ ## Example Usage Flows
330
+
331
+ ### Marketing/Conference Flow
332
+ ```bash
333
+ # Conference presentation or documentation
334
+ curl -fsSL https://install.tasker.dev | bash
335
+ ```
336
+
337
+ ### Developer Evaluation
338
+ ```bash
339
+ # Quick evaluation with specific use case
340
+ curl -fsSL https://install.tasker.dev | bash -s -- \
341
+ --app-name my-evaluation-app \
342
+ --tasks ecommerce \
343
+ --non-interactive
344
+ ```
345
+
346
+ ### Tutorial/Workshop
347
+ ```bash
348
+ # Guided setup for workshops
349
+ curl -fsSL https://install.tasker.dev | bash -s -- \
350
+ --app-name workshop-app \
351
+ --interactive
352
+ ```
353
+
354
+ ## Integration Examples
355
+
356
+ Once installed, developers can immediately:
357
+
358
+ ### ๐Ÿ” **Explore APIs**
359
+ - GraphQL Playground: `http://localhost:3000/tasker/graphql`
360
+ - REST API Docs: `http://localhost:3000/tasker/api-docs`
361
+ - Health Endpoints: `http://localhost:3000/tasker/health/status`
362
+
363
+ ### ๐Ÿš€ **Execute Workflows**
364
+ ```ruby
365
+ # Create and run an e-commerce order processing task
366
+ task = Tasker::HandlerFactory.instance.get(
367
+ 'order_processing',
368
+ namespace_name: 'ecommerce',
369
+ version: '1.0.0'
370
+ ).initialize_task!(
371
+ Tasker::Types::TaskRequest.new(
372
+ name: 'order_processing',
373
+ namespace: 'ecommerce',
374
+ context: { cart_id: 123, user_id: 456 }
375
+ )
376
+ )
377
+ ```
378
+
379
+ ### ๐Ÿ“ˆ **Monitor Observability**
380
+ - Metrics: `http://localhost:3000/tasker/metrics`
381
+ - Configure your observability backend via `OTEL_EXPORTER_OTLP_ENDPOINT`
382
+ - View structured logs with correlation IDs
383
+
384
+ This generator transforms Tasker from "interesting project" to "production application" in under 5 minutes, providing an exceptional developer experience that showcases enterprise-grade workflow orchestration capabilities.