tasker-engine 1.0.3 → 1.0.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 (301) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/db/functions/get_step_readiness_status_single_and_batch_v02.sql +223 -0
  4. data/db/migrate/20250710110830_step_readiness_sql_functions_v02.rb +18 -0
  5. data/docs/Tasker/Analysis/RuntimeGraphAnalyzer.html +1 -1
  6. data/docs/Tasker/Analysis/TemplateGraphAnalyzer.html +1 -1
  7. data/docs/Tasker/Analysis.html +1 -1
  8. data/docs/Tasker/AnalyticsController.html +1 -1
  9. data/docs/Tasker/AnalyticsService/BottleneckAnalytics.html +1 -1
  10. data/docs/Tasker/AnalyticsService/PerformanceAnalytics.html +1 -1
  11. data/docs/Tasker/AnalyticsService.html +1 -1
  12. data/docs/Tasker/AnnotationType.html +1 -1
  13. data/docs/Tasker/AnnotationTypeSerializer.html +1 -1
  14. data/docs/Tasker/ApplicationController.html +1 -1
  15. data/docs/Tasker/ApplicationJob.html +1 -1
  16. data/docs/Tasker/ApplicationRecord.html +1 -1
  17. data/docs/Tasker/Authentication/AuthenticationError.html +1 -1
  18. data/docs/Tasker/Authentication/ConfigurationError.html +1 -1
  19. data/docs/Tasker/Authentication/Coordinator.html +1 -1
  20. data/docs/Tasker/Authentication/Interface.html +1 -1
  21. data/docs/Tasker/Authentication/InterfaceError.html +1 -1
  22. data/docs/Tasker/Authentication/NoneAuthenticator.html +1 -1
  23. data/docs/Tasker/Authentication.html +1 -1
  24. data/docs/Tasker/Authorization/AuthorizationError.html +1 -1
  25. data/docs/Tasker/Authorization/BaseCoordinator.html +1 -1
  26. data/docs/Tasker/Authorization/ConfigurationError.html +1 -1
  27. data/docs/Tasker/Authorization/ResourceConstants/ACTIONS.html +1 -1
  28. data/docs/Tasker/Authorization/ResourceConstants/RESOURCES.html +1 -1
  29. data/docs/Tasker/Authorization/ResourceConstants.html +1 -1
  30. data/docs/Tasker/Authorization/ResourceRegistry.html +1 -1
  31. data/docs/Tasker/Authorization/UnauthorizedError.html +1 -1
  32. data/docs/Tasker/Authorization.html +1 -1
  33. data/docs/Tasker/CacheCapabilities.html +1 -1
  34. data/docs/Tasker/CacheStrategy.html +1 -1
  35. data/docs/Tasker/Concerns/Authenticatable.html +1 -1
  36. data/docs/Tasker/Concerns/Authorizable/AdminStatusChecker.html +1 -1
  37. data/docs/Tasker/Concerns/Authorizable.html +1 -1
  38. data/docs/Tasker/Concerns/ControllerAuthorizable.html +1 -1
  39. data/docs/Tasker/Concerns/EventPublisher.html +1 -1
  40. data/docs/Tasker/Concerns/IdempotentStateTransitions.html +1 -1
  41. data/docs/Tasker/Concerns/StateMachineBase/ClassMethods.html +1 -1
  42. data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase/ClassMethods.html +1 -1
  43. data/docs/Tasker/Concerns/StateMachineBase/StateMachineBase.html +1 -1
  44. data/docs/Tasker/Concerns/StateMachineBase.html +1 -1
  45. data/docs/Tasker/Concerns/StructuredLogging.html +1 -1
  46. data/docs/Tasker/Concerns.html +1 -1
  47. data/docs/Tasker/Configuration/ConfigurationProxy.html +1 -1
  48. data/docs/Tasker/Configuration/TelemetryConfigurationProxy.html +1 -1
  49. data/docs/Tasker/Configuration.html +1 -1
  50. data/docs/Tasker/ConfigurationError.html +1 -1
  51. data/docs/Tasker/ConfiguredTask.html +1 -1
  52. data/docs/Tasker/Constants/EventDefinitions.html +1 -1
  53. data/docs/Tasker/Constants/ObservabilityEvents/Step.html +1 -1
  54. data/docs/Tasker/Constants/ObservabilityEvents/Task.html +1 -1
  55. data/docs/Tasker/Constants/ObservabilityEvents.html +1 -1
  56. data/docs/Tasker/Constants/RegistryEvents.html +1 -1
  57. data/docs/Tasker/Constants/StepEvents.html +1 -1
  58. data/docs/Tasker/Constants/TaskEvents.html +1 -1
  59. data/docs/Tasker/Constants/TaskExecution/ExecutionStatus.html +1 -1
  60. data/docs/Tasker/Constants/TaskExecution/HealthStatus.html +1 -1
  61. data/docs/Tasker/Constants/TaskExecution/RecommendedAction.html +1 -1
  62. data/docs/Tasker/Constants/TaskExecution.html +1 -1
  63. data/docs/Tasker/Constants/TaskFinalization/ErrorMessages.html +1 -1
  64. data/docs/Tasker/Constants/TaskFinalization/PendingReasons.html +1 -1
  65. data/docs/Tasker/Constants/TaskFinalization/ReenqueueReasons.html +1 -1
  66. data/docs/Tasker/Constants/TaskFinalization.html +1 -1
  67. data/docs/Tasker/Constants/TaskStatuses.html +1 -1
  68. data/docs/Tasker/Constants/TestEvents.html +1 -1
  69. data/docs/Tasker/Constants/WorkflowEvents.html +1 -1
  70. data/docs/Tasker/Constants/WorkflowStepStatuses.html +1 -1
  71. data/docs/Tasker/Constants.html +1 -1
  72. data/docs/Tasker/DependentSystem.html +1 -1
  73. data/docs/Tasker/DependentSystemObjectMap.html +1 -1
  74. data/docs/Tasker/DetectorRegistry.html +1 -1
  75. data/docs/Tasker/Engine.html +1 -1
  76. data/docs/Tasker/Error.html +1 -1
  77. data/docs/Tasker/Events/Catalog/CatalogPrinter.html +1 -1
  78. data/docs/Tasker/Events/Catalog/CustomEventRegistrar.html +1 -1
  79. data/docs/Tasker/Events/Catalog/ExamplePayloadGenerator.html +1 -1
  80. data/docs/Tasker/Events/Catalog.html +1 -1
  81. data/docs/Tasker/Events/CustomRegistry.html +1 -1
  82. data/docs/Tasker/Events/DefinitionLoader.html +1 -1
  83. data/docs/Tasker/Events/EventPayloadBuilder/ErrorInfoExtractor.html +1 -1
  84. data/docs/Tasker/Events/EventPayloadBuilder/StepPayloadBuilder.html +1 -1
  85. data/docs/Tasker/Events/EventPayloadBuilder.html +1 -1
  86. data/docs/Tasker/Events/Publisher.html +1 -1
  87. data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer/ErrorTypeClassifier.html +1 -1
  88. data/docs/Tasker/Events/Subscribers/BaseSubscriber/ErrorCategorizer.html +1 -1
  89. data/docs/Tasker/Events/Subscribers/BaseSubscriber/MetricTagsExtractor.html +1 -1
  90. data/docs/Tasker/Events/Subscribers/BaseSubscriber.html +1 -1
  91. data/docs/Tasker/Events/Subscribers/MetricsSubscriber.html +1 -1
  92. data/docs/Tasker/Events/Subscribers/TelemetrySubscriber.html +1 -1
  93. data/docs/Tasker/Events/Subscribers.html +1 -1
  94. data/docs/Tasker/Events/SubscriptionLoader.html +1 -1
  95. data/docs/Tasker/Events.html +1 -1
  96. data/docs/Tasker/EventsGenerator.html +1 -1
  97. data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics/AnalyticsMetrics.html +1 -1
  98. data/docs/Tasker/Functions/FunctionBasedAnalyticsMetrics.html +1 -1
  99. data/docs/Tasker/Functions/FunctionBasedDependencyLevels.html +1 -1
  100. data/docs/Tasker/Functions/FunctionBasedSlowestSteps/SlowestStep.html +1 -1
  101. data/docs/Tasker/Functions/FunctionBasedSlowestSteps.html +1 -1
  102. data/docs/Tasker/Functions/FunctionBasedSlowestTasks/SlowestTask.html +1 -1
  103. data/docs/Tasker/Functions/FunctionBasedSlowestTasks.html +1 -1
  104. data/docs/Tasker/Functions/FunctionBasedStepReadinessStatus.html +1 -1
  105. data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts/HealthMetrics.html +1 -1
  106. data/docs/Tasker/Functions/FunctionBasedSystemHealthCounts.html +1 -1
  107. data/docs/Tasker/Functions/FunctionBasedTaskExecutionContext.html +1 -1
  108. data/docs/Tasker/Functions/FunctionWrapper.html +1 -1
  109. data/docs/Tasker/Functions.html +1 -1
  110. data/docs/Tasker/Generators/AuthenticatorGenerator/UsageInstructionsFormatter.html +1 -1
  111. data/docs/Tasker/Generators/AuthenticatorGenerator.html +1 -1
  112. data/docs/Tasker/Generators/AuthorizationCoordinatorGenerator.html +1 -1
  113. data/docs/Tasker/Generators/SubscriberGenerator.html +1 -1
  114. data/docs/Tasker/Generators/TaskHandlerGenerator.html +1 -1
  115. data/docs/Tasker/Generators.html +1 -1
  116. data/docs/Tasker/GraphQLTypes/AnnotationType.html +1 -1
  117. data/docs/Tasker/GraphQLTypes/BaseArgument.html +1 -1
  118. data/docs/Tasker/GraphQLTypes/BaseConnection.html +1 -1
  119. data/docs/Tasker/GraphQLTypes/BaseEdge.html +1 -1
  120. data/docs/Tasker/GraphQLTypes/BaseEnum.html +1 -1
  121. data/docs/Tasker/GraphQLTypes/BaseField.html +1 -1
  122. data/docs/Tasker/GraphQLTypes/BaseInputObject.html +1 -1
  123. data/docs/Tasker/GraphQLTypes/BaseInterface.html +1 -1
  124. data/docs/Tasker/GraphQLTypes/BaseObject.html +1 -1
  125. data/docs/Tasker/GraphQLTypes/BaseScalar.html +1 -1
  126. data/docs/Tasker/GraphQLTypes/BaseUnion.html +1 -1
  127. data/docs/Tasker/GraphQLTypes/DependentSystemObjectMapType.html +1 -1
  128. data/docs/Tasker/GraphQLTypes/DependentSystemType.html +1 -1
  129. data/docs/Tasker/GraphQLTypes/MutationType.html +1 -1
  130. data/docs/Tasker/GraphQLTypes/NamedStepType.html +1 -1
  131. data/docs/Tasker/GraphQLTypes/NamedTaskType.html +1 -1
  132. data/docs/Tasker/GraphQLTypes/NamedTasksNamedStepType.html +1 -1
  133. data/docs/Tasker/GraphQLTypes/NodeType.html +1 -1
  134. data/docs/Tasker/GraphQLTypes/QueryType.html +1 -1
  135. data/docs/Tasker/GraphQLTypes/TaskAnnotationType.html +1 -1
  136. data/docs/Tasker/GraphQLTypes/TaskInterface.html +1 -1
  137. data/docs/Tasker/GraphQLTypes/TaskType.html +1 -1
  138. data/docs/Tasker/GraphQLTypes/WorkflowStepType.html +1 -1
  139. data/docs/Tasker/GraphQLTypes.html +1 -1
  140. data/docs/Tasker/GraphqlController.html +1 -1
  141. data/docs/Tasker/HandlerFactory.html +1 -1
  142. data/docs/Tasker/HandlerSerializer.html +1 -1
  143. data/docs/Tasker/HandlersController.html +1 -1
  144. data/docs/Tasker/HashIdentityStrategy.html +1 -1
  145. data/docs/Tasker/Health/ReadinessChecker.html +1 -1
  146. data/docs/Tasker/Health/StatusChecker.html +1 -1
  147. data/docs/Tasker/Health.html +1 -1
  148. data/docs/Tasker/HealthController.html +1 -1
  149. data/docs/Tasker/IdentityStrategy.html +1 -1
  150. data/docs/Tasker/InvalidTaskHandlerConfig.html +1 -1
  151. data/docs/Tasker/Logging/CorrelationIdGenerator.html +1 -1
  152. data/docs/Tasker/Logging.html +1 -1
  153. data/docs/Tasker/MetricsController.html +1 -1
  154. data/docs/Tasker/MetricsExportJob.html +1 -1
  155. data/docs/Tasker/Mutations/BaseMutation.html +1 -1
  156. data/docs/Tasker/Mutations/CancelStep.html +1 -1
  157. data/docs/Tasker/Mutations/CancelTask.html +1 -1
  158. data/docs/Tasker/Mutations/CreateTask.html +1 -1
  159. data/docs/Tasker/Mutations/UpdateStep.html +1 -1
  160. data/docs/Tasker/Mutations/UpdateTask.html +1 -1
  161. data/docs/Tasker/Mutations.html +1 -1
  162. data/docs/Tasker/NamedStep.html +1 -1
  163. data/docs/Tasker/NamedTask.html +1 -1
  164. data/docs/Tasker/NamedTasksNamedStep.html +1 -1
  165. data/docs/Tasker/Orchestration/BackoffCalculator.html +1 -1
  166. data/docs/Tasker/Orchestration/ConnectionBuilder/ConfigValidator.html +1 -1
  167. data/docs/Tasker/Orchestration/ConnectionBuilder.html +1 -1
  168. data/docs/Tasker/Orchestration/ConnectionPoolIntelligence.html +1 -1
  169. data/docs/Tasker/Orchestration/Coordinator.html +1 -1
  170. data/docs/Tasker/Orchestration/FutureStateAnalyzer.html +1 -1
  171. data/docs/Tasker/Orchestration/PluginIntegration.html +1 -1
  172. data/docs/Tasker/Orchestration/ResponseProcessor.html +1 -1
  173. data/docs/Tasker/Orchestration/RetryHeaderParser.html +1 -1
  174. data/docs/Tasker/Orchestration/StepExecutor.html +1 -1
  175. data/docs/Tasker/Orchestration/StepSequenceFactory.html +1 -1
  176. data/docs/Tasker/Orchestration/TaskFinalizer/BlockageChecker.html +1 -1
  177. data/docs/Tasker/Orchestration/TaskFinalizer/ContextManager.html +1 -1
  178. data/docs/Tasker/Orchestration/TaskFinalizer/DelayCalculator.html +1 -1
  179. data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationDecisionMaker.html +1 -1
  180. data/docs/Tasker/Orchestration/TaskFinalizer/FinalizationProcessor.html +1 -1
  181. data/docs/Tasker/Orchestration/TaskFinalizer/ReasonDeterminer.html +1 -1
  182. data/docs/Tasker/Orchestration/TaskFinalizer/ReenqueueManager.html +1 -1
  183. data/docs/Tasker/Orchestration/TaskFinalizer/UnclearStateHandler.html +1 -1
  184. data/docs/Tasker/Orchestration/TaskFinalizer.html +1 -1
  185. data/docs/Tasker/Orchestration/TaskInitializer.html +1 -1
  186. data/docs/Tasker/Orchestration/TaskReenqueuer.html +1 -1
  187. data/docs/Tasker/Orchestration/ViableStepDiscovery.html +1 -1
  188. data/docs/Tasker/Orchestration/WorkflowCoordinator.html +1 -1
  189. data/docs/Tasker/Orchestration.html +1 -1
  190. data/docs/Tasker/PageSort/PageSortParamsBuilder.html +1 -1
  191. data/docs/Tasker/PageSort.html +1 -1
  192. data/docs/Tasker/PermanentError.html +1 -1
  193. data/docs/Tasker/ProceduralError.html +1 -1
  194. data/docs/Tasker/Queries/AllAnnotationTypes.html +1 -1
  195. data/docs/Tasker/Queries/AllTasks.html +1 -1
  196. data/docs/Tasker/Queries/BaseQuery.html +1 -1
  197. data/docs/Tasker/Queries/Helpers.html +1 -1
  198. data/docs/Tasker/Queries/OneStep.html +1 -1
  199. data/docs/Tasker/Queries/OneTask.html +1 -1
  200. data/docs/Tasker/Queries/TasksByAnnotation.html +1 -1
  201. data/docs/Tasker/Queries/TasksByStatus.html +1 -1
  202. data/docs/Tasker/Queries.html +1 -1
  203. data/docs/Tasker/Railtie.html +1 -1
  204. data/docs/Tasker/Registry/BaseRegistry.html +1 -1
  205. data/docs/Tasker/Registry/EventPublisher.html +1 -1
  206. data/docs/Tasker/Registry/InterfaceValidator.html +1 -1
  207. data/docs/Tasker/Registry/RegistrationError.html +1 -1
  208. data/docs/Tasker/Registry/RegistryError.html +1 -1
  209. data/docs/Tasker/Registry/StatisticsCollector.html +1 -1
  210. data/docs/Tasker/Registry/SubscriberRegistry.html +1 -1
  211. data/docs/Tasker/Registry/ValidationError.html +1 -1
  212. data/docs/Tasker/Registry.html +1 -1
  213. data/docs/Tasker/RetryableError.html +1 -1
  214. data/docs/Tasker/StateMachine/Compatibility.html +1 -1
  215. data/docs/Tasker/StateMachine/InvalidStateTransition.html +1 -1
  216. data/docs/Tasker/StateMachine/StepStateMachine.html +1 -1
  217. data/docs/Tasker/StateMachine/TaskStateMachine.html +1 -1
  218. data/docs/Tasker/StateMachine.html +1 -1
  219. data/docs/Tasker/StepDagRelationship.html +1 -1
  220. data/docs/Tasker/StepHandler/Api/Config.html +1 -1
  221. data/docs/Tasker/StepHandler/Api.html +1 -1
  222. data/docs/Tasker/StepHandler/AutomaticEventPublishing.html +1 -1
  223. data/docs/Tasker/StepHandler/Base.html +1 -1
  224. data/docs/Tasker/StepHandler.html +1 -1
  225. data/docs/Tasker/StepReadinessStatus.html +1 -1
  226. data/docs/Tasker/Task.html +1 -1
  227. data/docs/Tasker/TaskAnnotation.html +1 -1
  228. data/docs/Tasker/TaskAnnotationSerializer.html +1 -1
  229. data/docs/Tasker/TaskBuilder/StepNameValidator.html +1 -1
  230. data/docs/Tasker/TaskBuilder/StepTemplateDefiner.html +1 -1
  231. data/docs/Tasker/TaskBuilder.html +1 -1
  232. data/docs/Tasker/TaskExecutionContext.html +1 -1
  233. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/ClassBasedEventRegistrar.html +1 -1
  234. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner/YamlEventRegistrar.html +1 -1
  235. data/docs/Tasker/TaskHandler/ClassMethods/StepTemplateDefiner.html +1 -1
  236. data/docs/Tasker/TaskHandler/ClassMethods.html +1 -1
  237. data/docs/Tasker/TaskHandler/InstanceMethods.html +1 -1
  238. data/docs/Tasker/TaskHandler/StepGroup.html +1 -1
  239. data/docs/Tasker/TaskHandler.html +1 -1
  240. data/docs/Tasker/TaskNamespace.html +1 -1
  241. data/docs/Tasker/TaskRunnerJob.html +1 -1
  242. data/docs/Tasker/TaskSerializer.html +1 -1
  243. data/docs/Tasker/TaskTransition.html +1 -1
  244. data/docs/Tasker/TaskerRailsSchema/InvalidObjectTypeError.html +1 -1
  245. data/docs/Tasker/TaskerRailsSchema/TypeResolutionError.html +1 -1
  246. data/docs/Tasker/TaskerRailsSchema/UnknownInterfaceError.html +1 -1
  247. data/docs/Tasker/TaskerRailsSchema.html +1 -1
  248. data/docs/Tasker/TasksController.html +1 -1
  249. data/docs/Tasker/Telemetry/EventMapping.html +1 -1
  250. data/docs/Tasker/Telemetry/EventRouter.html +1 -1
  251. data/docs/Tasker/Telemetry/Events/ExportEvents.html +1 -1
  252. data/docs/Tasker/Telemetry/Events.html +1 -1
  253. data/docs/Tasker/Telemetry/ExportCoordinator.html +1 -1
  254. data/docs/Tasker/Telemetry/IntelligentCacheManager.html +1 -1
  255. data/docs/Tasker/Telemetry/LogBackend.html +1 -1
  256. data/docs/Tasker/Telemetry/MetricTypes/Counter.html +1 -1
  257. data/docs/Tasker/Telemetry/MetricTypes/Gauge.html +1 -1
  258. data/docs/Tasker/Telemetry/MetricTypes/Histogram.html +1 -1
  259. data/docs/Tasker/Telemetry/MetricTypes.html +1 -1
  260. data/docs/Tasker/Telemetry/MetricsBackend.html +1 -1
  261. data/docs/Tasker/Telemetry/MetricsExportService.html +1 -1
  262. data/docs/Tasker/Telemetry/PluginRegistry.html +1 -1
  263. data/docs/Tasker/Telemetry/Plugins/BaseExporter.html +1 -1
  264. data/docs/Tasker/Telemetry/Plugins/CsvExporter.html +1 -1
  265. data/docs/Tasker/Telemetry/Plugins/JsonExporter.html +1 -1
  266. data/docs/Tasker/Telemetry/Plugins.html +1 -1
  267. data/docs/Tasker/Telemetry/PrometheusExporter.html +1 -1
  268. data/docs/Tasker/Telemetry/TraceBackend.html +1 -1
  269. data/docs/Tasker/Telemetry.html +1 -1
  270. data/docs/Tasker/Types/AuthConfig.html +1 -1
  271. data/docs/Tasker/Types/BackoffConfig.html +1 -1
  272. data/docs/Tasker/Types/BaseConfig.html +1 -1
  273. data/docs/Tasker/Types/CacheConfig.html +1 -1
  274. data/docs/Tasker/Types/DatabaseConfig.html +1 -1
  275. data/docs/Tasker/Types/DependencyGraph.html +1 -1
  276. data/docs/Tasker/Types/DependencyGraphConfig.html +1 -1
  277. data/docs/Tasker/Types/EngineConfig.html +1 -1
  278. data/docs/Tasker/Types/ExecutionConfig.html +1 -1
  279. data/docs/Tasker/Types/GraphEdge.html +1 -1
  280. data/docs/Tasker/Types/GraphMetadata.html +1 -1
  281. data/docs/Tasker/Types/GraphNode.html +1 -1
  282. data/docs/Tasker/Types/HealthConfig.html +1 -1
  283. data/docs/Tasker/Types/StepSequence.html +1 -1
  284. data/docs/Tasker/Types/StepTemplate.html +1 -1
  285. data/docs/Tasker/Types/TaskRequest.html +1 -1
  286. data/docs/Tasker/Types/TelemetryConfig.html +1 -1
  287. data/docs/Tasker/Types.html +1 -1
  288. data/docs/Tasker/WorkflowStep/StepFinder.html +1 -1
  289. data/docs/Tasker/WorkflowStep.html +1 -1
  290. data/docs/Tasker/WorkflowStepEdge.html +6 -4
  291. data/docs/Tasker/WorkflowStepSerializer.html +1 -1
  292. data/docs/Tasker/WorkflowStepTransition/TransitionDescriptionFormatter.html +1 -1
  293. data/docs/Tasker/WorkflowStepTransition.html +1 -1
  294. data/docs/Tasker/WorkflowStepsController.html +1 -1
  295. data/docs/Tasker.html +2 -2
  296. data/docs/_index.html +1 -1
  297. data/docs/file.README.html +2 -2
  298. data/docs/index.html +2 -2
  299. data/docs/top-level-namespace.html +1 -1
  300. data/lib/tasker/version.rb +1 -1
  301. metadata +4 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 624c1f88517d2faa0a17910fa016cb236dae08fb3a87b15d05880b54f5939482
4
- data.tar.gz: aa5c6de2b2c8266e8485ea0957bd8dff5314497295fd9d9f31c466b6b8af190f
3
+ metadata.gz: 3fbb4817144137a8ccd1a9635aa9b18da5a326079132176a9163722557369c1a
4
+ data.tar.gz: 4334556479c34a5dda97707490727139f11fd88960cda236c0f3421a21eaaebd
5
5
  SHA512:
6
- metadata.gz: 6f44ef59cdac7092dc8ea7fb66b6ccd688af301757b4ddb35f896867fe32847a3c822141052442dcaaae8d2272ccde209141ae24bf107a70c3405dbbcf405a01
7
- data.tar.gz: 5e2490fb3e72e9588fb1e443254539c41f39610cb4d0cb86b0b21acde9825e4d0bae464b4653adf18c71275266dd5550477d158d92936f2a8e74d28ecf965368
6
+ metadata.gz: 766d4da99906b244ea0c91dae4b1d0d154bf8600639771025e072cd527e2c3806253878759d3a646ca69d53641519c79dfaf7f59713b8b8fe68362d4eea589c5
7
+ data.tar.gz: a7fde71e54c41e83812249ade41b7b34afa0c2e5849d1b27d4d05440903025ab5558b7ee85ea4d6ff01b82de422f424228dd3bcd09a3bed56d91ae2b8b515646
data/README.md CHANGED
@@ -28,7 +28,7 @@ Perfect for processes that involve multiple interdependent steps, require automa
28
28
  Add Tasker to your Rails app's `Gemfile`:
29
29
 
30
30
  ```ruby
31
- gem 'tasker-engine', '~> 1.0.3'
31
+ gem 'tasker-engine', '~> 1.0.4'
32
32
  ```
33
33
 
34
34
  Install and run the migrations:
@@ -0,0 +1,223 @@
1
+ -- Fix step readiness logic for NULL attempts
2
+ -- When attempts is NULL, it should be treated as 0 for comparison purposes
3
+
4
+ -- Update get_step_readiness_status function
5
+ CREATE OR REPLACE FUNCTION public.get_step_readiness_status(input_task_id bigint, step_ids bigint[] DEFAULT NULL::bigint[]) RETURNS TABLE(workflow_step_id bigint, task_id bigint, named_step_id integer, name text, current_state text, dependencies_satisfied boolean, retry_eligible boolean, ready_for_execution boolean, last_failure_at timestamp without time zone, next_retry_at timestamp without time zone, total_parents integer, completed_parents integer, attempts integer, retry_limit integer, backoff_request_seconds integer, last_attempted_at timestamp without time zone)
6
+ LANGUAGE plpgsql STABLE
7
+ AS $$
8
+ BEGIN
9
+ RETURN QUERY
10
+ SELECT
11
+ ws.workflow_step_id,
12
+ ws.task_id,
13
+ ws.named_step_id,
14
+ ns.name::TEXT,
15
+
16
+ -- Current State Information (optimized using most_recent flag)
17
+ COALESCE(current_state.to_state, 'pending')::TEXT as current_state,
18
+
19
+ -- Dependency Satisfaction Analysis
20
+ CASE
21
+ WHEN dep_edges.to_step_id IS NULL OR
22
+ COUNT(dep_edges.from_step_id) = 0 THEN true
23
+ ELSE
24
+ COUNT(CASE WHEN parent_states.to_state IN ('complete', 'resolved_manually') THEN 1 END) = COUNT(dep_edges.from_step_id)
25
+ END as dependencies_satisfied,
26
+
27
+ -- Retry Eligibility
28
+ CASE
29
+ WHEN COALESCE(ws.attempts, 0) < COALESCE(ws.retry_limit, 3) THEN true
30
+ ELSE false
31
+ END as retry_eligible,
32
+
33
+ -- Overall Ready for Execution (complex business logic)
34
+ CASE
35
+ WHEN COALESCE(current_state.to_state, 'pending') IN ('pending', 'error')
36
+ AND (ws.processed = false OR ws.processed IS NULL) -- CRITICAL: Only unprocessed steps can be ready
37
+ AND (dep_edges.to_step_id IS NULL OR
38
+ COUNT(dep_edges.from_step_id) = 0 OR
39
+ COUNT(CASE WHEN parent_states.to_state IN ('complete', 'resolved_manually') THEN 1 END) = COUNT(dep_edges.from_step_id))
40
+ AND (COALESCE(ws.attempts, 0) < COALESCE(ws.retry_limit, 3)) -- FIXED: Handle NULL attempts
41
+ AND (COALESCE(ws.retryable, true) = true)
42
+ AND (ws.in_process = false OR ws.in_process IS NULL)
43
+ AND (
44
+ -- Check explicit backoff timing (most restrictive)
45
+ -- If backoff is set, the backoff period must have expired
46
+ CASE
47
+ WHEN ws.backoff_request_seconds IS NOT NULL AND ws.last_attempted_at IS NOT NULL THEN
48
+ ws.last_attempted_at + (ws.backoff_request_seconds * interval '1 second') <= NOW()
49
+ ELSE true -- No explicit backoff set
50
+ END
51
+ AND
52
+ -- Then check failure-based backoff
53
+ (last_failure.created_at IS NULL OR
54
+ last_failure.created_at + (LEAST(power(2, COALESCE(ws.attempts, 1)) * interval '1 second', interval '30 seconds')) <= NOW())
55
+ )
56
+ THEN true
57
+ ELSE false
58
+ END as ready_for_execution,
59
+
60
+ -- Timing Information
61
+ last_failure.created_at as last_failure_at,
62
+ CASE
63
+ WHEN ws.backoff_request_seconds IS NOT NULL AND ws.last_attempted_at IS NOT NULL THEN
64
+ ws.last_attempted_at + (ws.backoff_request_seconds * interval '1 second')
65
+ WHEN last_failure.created_at IS NOT NULL THEN
66
+ last_failure.created_at + (LEAST(power(2, COALESCE(ws.attempts, 1)) * interval '1 second', interval '30 seconds'))
67
+ ELSE NULL
68
+ END as next_retry_at,
69
+
70
+ -- Dependency Context (calculated from joins)
71
+ COALESCE(COUNT(dep_edges.from_step_id), 0)::INTEGER as total_parents,
72
+ COALESCE(COUNT(CASE WHEN parent_states.to_state IN ('complete', 'resolved_manually') THEN 1 END), 0)::INTEGER as completed_parents,
73
+
74
+ -- Retry Context
75
+ COALESCE(ws.attempts, 0)::INTEGER as attempts, -- FIXED: Return 0 instead of NULL
76
+ COALESCE(ws.retry_limit, 3) as retry_limit,
77
+ ws.backoff_request_seconds,
78
+ ws.last_attempted_at
79
+
80
+ FROM tasker_workflow_steps ws
81
+ JOIN tasker_named_steps ns ON ns.named_step_id = ws.named_step_id
82
+
83
+ -- OPTIMIZED: Current State using most_recent flag instead of DISTINCT ON
84
+ LEFT JOIN tasker_workflow_step_transitions current_state
85
+ ON current_state.workflow_step_id = ws.workflow_step_id
86
+ AND current_state.most_recent = true
87
+
88
+ -- OPTIMIZED: Dependency check using direct joins (no subquery)
89
+ LEFT JOIN tasker_workflow_step_edges dep_edges
90
+ ON dep_edges.to_step_id = ws.workflow_step_id
91
+ LEFT JOIN tasker_workflow_step_transitions parent_states
92
+ ON parent_states.workflow_step_id = dep_edges.from_step_id
93
+ AND parent_states.most_recent = true
94
+
95
+ -- OPTIMIZED: Last failure using index-optimized approach
96
+ LEFT JOIN tasker_workflow_step_transitions last_failure
97
+ ON last_failure.workflow_step_id = ws.workflow_step_id
98
+ AND last_failure.to_state = 'error'
99
+ AND last_failure.most_recent = true
100
+
101
+ -- KEY PERFORMANCE IMPROVEMENT: Filter by task first, then optionally by step IDs
102
+ -- CRITICAL FIX: Include ALL steps for task execution context calculation
103
+ -- Only filter by processed status when specifically querying for ready steps
104
+ WHERE ws.task_id = input_task_id
105
+ AND (step_ids IS NULL OR ws.workflow_step_id = ANY(step_ids))
106
+
107
+ GROUP BY
108
+ ws.workflow_step_id, ws.task_id, ws.named_step_id, ns.name,
109
+ current_state.to_state, last_failure.created_at,
110
+ ws.attempts, ws.retry_limit, ws.backoff_request_seconds, ws.last_attempted_at,
111
+ ws.in_process, ws.processed, ws.retryable, dep_edges.to_step_id,
112
+ current_state.workflow_step_id, last_failure.workflow_step_id;
113
+ END;
114
+ $$;
115
+
116
+ -- Also update the batch version
117
+ CREATE OR REPLACE FUNCTION public.get_step_readiness_status_batch(input_task_ids bigint[]) RETURNS TABLE(workflow_step_id bigint, task_id bigint, named_step_id integer, name text, current_state text, dependencies_satisfied boolean, retry_eligible boolean, ready_for_execution boolean, last_failure_at timestamp without time zone, next_retry_at timestamp without time zone, total_parents integer, completed_parents integer, attempts integer, retry_limit integer, backoff_request_seconds integer, last_attempted_at timestamp without time zone)
118
+ LANGUAGE plpgsql STABLE
119
+ AS $$
120
+ BEGIN
121
+ RETURN QUERY
122
+ SELECT
123
+ ws.workflow_step_id,
124
+ ws.task_id,
125
+ ws.named_step_id,
126
+ ns.name::TEXT,
127
+
128
+ -- Current State Information (optimized using most_recent flag)
129
+ COALESCE(current_state.to_state, 'pending')::TEXT as current_state,
130
+
131
+ -- Dependency Satisfaction Analysis
132
+ CASE
133
+ WHEN dep_edges.to_step_id IS NULL OR
134
+ COUNT(dep_edges.from_step_id) = 0 THEN true
135
+ ELSE
136
+ COUNT(CASE WHEN parent_states.to_state IN ('complete', 'resolved_manually') THEN 1 END) = COUNT(dep_edges.from_step_id)
137
+ END as dependencies_satisfied,
138
+
139
+ -- Retry Eligibility
140
+ CASE
141
+ WHEN COALESCE(ws.attempts, 0) < COALESCE(ws.retry_limit, 3) THEN true
142
+ ELSE false
143
+ END as retry_eligible,
144
+
145
+ -- Overall Ready for Execution (complex business logic)
146
+ CASE
147
+ WHEN COALESCE(current_state.to_state, 'pending') IN ('pending', 'error')
148
+ AND (ws.processed = false OR ws.processed IS NULL)
149
+ AND (dep_edges.to_step_id IS NULL OR
150
+ COUNT(dep_edges.from_step_id) = 0 OR
151
+ COUNT(CASE WHEN parent_states.to_state IN ('complete', 'resolved_manually') THEN 1 END) = COUNT(dep_edges.from_step_id))
152
+ AND (COALESCE(ws.attempts, 0) < COALESCE(ws.retry_limit, 3)) -- FIXED: Handle NULL attempts
153
+ AND (COALESCE(ws.retryable, true) = true)
154
+ AND (ws.in_process = false OR ws.in_process IS NULL)
155
+ AND (
156
+ -- Check explicit backoff timing (most restrictive)
157
+ -- If backoff is set, the backoff period must have expired
158
+ CASE
159
+ WHEN ws.backoff_request_seconds IS NOT NULL AND ws.last_attempted_at IS NOT NULL THEN
160
+ ws.last_attempted_at + (ws.backoff_request_seconds * interval '1 second') <= NOW()
161
+ ELSE true -- No explicit backoff set
162
+ END
163
+ AND
164
+ -- Then check failure-based backoff
165
+ (last_failure.created_at IS NULL OR
166
+ last_failure.created_at + (LEAST(power(2, COALESCE(ws.attempts, 1)) * interval '1 second', interval '30 seconds')) <= NOW())
167
+ )
168
+ THEN true
169
+ ELSE false
170
+ END as ready_for_execution,
171
+
172
+ -- Timing Information
173
+ last_failure.created_at as last_failure_at,
174
+ CASE
175
+ WHEN ws.backoff_request_seconds IS NOT NULL AND ws.last_attempted_at IS NOT NULL THEN
176
+ ws.last_attempted_at + (ws.backoff_request_seconds * interval '1 second')
177
+ WHEN last_failure.created_at IS NOT NULL THEN
178
+ last_failure.created_at + (LEAST(power(2, COALESCE(ws.attempts, 1)) * interval '1 second', interval '30 seconds'))
179
+ ELSE NULL
180
+ END as next_retry_at,
181
+
182
+ -- Dependency Context (calculated from joins)
183
+ COALESCE(COUNT(dep_edges.from_step_id), 0)::INTEGER as total_parents,
184
+ COALESCE(COUNT(CASE WHEN parent_states.to_state IN ('complete', 'resolved_manually') THEN 1 END), 0)::INTEGER as completed_parents,
185
+
186
+ -- Retry Context
187
+ COALESCE(ws.attempts, 0)::INTEGER as attempts, -- FIXED: Return 0 instead of NULL
188
+ COALESCE(ws.retry_limit, 3) as retry_limit,
189
+ ws.backoff_request_seconds,
190
+ ws.last_attempted_at
191
+
192
+ FROM tasker_workflow_steps ws
193
+ JOIN tasker_named_steps ns ON ns.named_step_id = ws.named_step_id
194
+
195
+ -- OPTIMIZED: Current State using most_recent flag instead of DISTINCT ON
196
+ LEFT JOIN tasker_workflow_step_transitions current_state
197
+ ON current_state.workflow_step_id = ws.workflow_step_id
198
+ AND current_state.most_recent = true
199
+
200
+ -- OPTIMIZED: Dependency check using direct joins (no subquery)
201
+ LEFT JOIN tasker_workflow_step_edges dep_edges
202
+ ON dep_edges.to_step_id = ws.workflow_step_id
203
+ LEFT JOIN tasker_workflow_step_transitions parent_states
204
+ ON parent_states.workflow_step_id = dep_edges.from_step_id
205
+ AND parent_states.most_recent = true
206
+
207
+ -- OPTIMIZED: Last failure using index-optimized approach
208
+ LEFT JOIN tasker_workflow_step_transitions last_failure
209
+ ON last_failure.workflow_step_id = ws.workflow_step_id
210
+ AND last_failure.to_state = 'error'
211
+ AND last_failure.most_recent = true
212
+
213
+ -- KEY PERFORMANCE IMPROVEMENT: Filter by task first, then optionally by step IDs
214
+ WHERE ws.task_id = ANY(input_task_ids)
215
+
216
+ GROUP BY
217
+ ws.workflow_step_id, ws.task_id, ws.named_step_id, ns.name,
218
+ current_state.to_state, last_failure.created_at,
219
+ ws.attempts, ws.retry_limit, ws.backoff_request_seconds, ws.last_attempted_at,
220
+ ws.in_process, ws.processed, ws.retryable, dep_edges.to_step_id,
221
+ current_state.workflow_step_id, last_failure.workflow_step_id;
222
+ END;
223
+ $$;
@@ -0,0 +1,18 @@
1
+ class StepReadinessSqlFunctionsV02 < ActiveRecord::Migration[7.2]
2
+ def up
3
+ sql_file = File.read(Rails.root.join('db', 'functions', 'get_step_readiness_status_single_and_batch_v02.sql'))
4
+ execute(sql_file)
5
+ end
6
+
7
+ def down
8
+ original_sql_files = [
9
+ 'get_step_readiness_status_v01.sql',
10
+ 'get_step_readiness_status_batch_v01.sql'
11
+ ]
12
+
13
+ original_sql_files.each do |file|
14
+ sql_file = File.read(Rails.root.join('db', 'functions', file))
15
+ execute(sql_file)
16
+ end
17
+ end
18
+ end
@@ -897,7 +897,7 @@
897
897
  </div>
898
898
 
899
899
  <div id="footer">
900
- Generated on Tue Jul 8 17:57:07 2025 by
900
+ Generated on Thu Jul 10 08:40:46 2025 by
901
901
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
902
902
  0.9.37 (ruby-3.2.4).
903
903
  </div>
@@ -1226,7 +1226,7 @@
1226
1226
  </div>
1227
1227
 
1228
1228
  <div id="footer">
1229
- Generated on Tue Jul 8 17:57:07 2025 by
1229
+ Generated on Thu Jul 10 08:40:47 2025 by
1230
1230
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1231
1231
  0.9.37 (ruby-3.2.4).
1232
1232
  </div>
@@ -107,7 +107,7 @@
107
107
  </div>
108
108
 
109
109
  <div id="footer">
110
- Generated on Tue Jul 8 17:57:02 2025 by
110
+ Generated on Thu Jul 10 08:40:41 2025 by
111
111
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
112
112
  0.9.37 (ruby-3.2.4).
113
113
  </div>
@@ -440,7 +440,7 @@
440
440
  </div>
441
441
 
442
442
  <div id="footer">
443
- Generated on Tue Jul 8 17:57:07 2025 by
443
+ Generated on Thu Jul 10 08:40:47 2025 by
444
444
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
445
445
  0.9.37 (ruby-3.2.4).
446
446
  </div>
@@ -806,7 +806,7 @@
806
806
  </div>
807
807
 
808
808
  <div id="footer">
809
- Generated on Tue Jul 8 17:57:05 2025 by
809
+ Generated on Thu Jul 10 08:40:45 2025 by
810
810
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
811
811
  0.9.37 (ruby-3.2.4).
812
812
  </div>
@@ -576,7 +576,7 @@
576
576
  </div>
577
577
 
578
578
  <div id="footer">
579
- Generated on Tue Jul 8 17:57:05 2025 by
579
+ Generated on Thu Jul 10 08:40:45 2025 by
580
580
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
581
581
  0.9.37 (ruby-3.2.4).
582
582
  </div>
@@ -2211,7 +2211,7 @@
2211
2211
  </div>
2212
2212
 
2213
2213
  <div id="footer">
2214
- Generated on Tue Jul 8 17:57:05 2025 by
2214
+ Generated on Thu Jul 10 08:40:45 2025 by
2215
2215
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
2216
2216
  0.9.37 (ruby-3.2.4).
2217
2217
  </div>
@@ -127,7 +127,7 @@
127
127
  </div>
128
128
 
129
129
  <div id="footer">
130
- Generated on Tue Jul 8 17:57:04 2025 by
130
+ Generated on Thu Jul 10 08:40:43 2025 by
131
131
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
132
132
  0.9.37 (ruby-3.2.4).
133
133
  </div>
@@ -114,7 +114,7 @@
114
114
  </div>
115
115
 
116
116
  <div id="footer">
117
- Generated on Tue Jul 8 17:57:08 2025 by
117
+ Generated on Thu Jul 10 08:40:48 2025 by
118
118
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
119
119
  0.9.37 (ruby-3.2.4).
120
120
  </div>
@@ -137,7 +137,7 @@
137
137
  </div>
138
138
 
139
139
  <div id="footer">
140
- Generated on Tue Jul 8 17:57:07 2025 by
140
+ Generated on Thu Jul 10 08:40:47 2025 by
141
141
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
142
142
  0.9.37 (ruby-3.2.4).
143
143
  </div>
@@ -118,7 +118,7 @@
118
118
  </div>
119
119
 
120
120
  <div id="footer">
121
- Generated on Tue Jul 8 17:57:03 2025 by
121
+ Generated on Thu Jul 10 08:40:43 2025 by
122
122
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
123
123
  0.9.37 (ruby-3.2.4).
124
124
  </div>
@@ -368,7 +368,7 @@ production:
368
368
  </div>
369
369
 
370
370
  <div id="footer">
371
- Generated on Tue Jul 8 17:57:05 2025 by
371
+ Generated on Thu Jul 10 08:40:44 2025 by
372
372
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
373
373
  0.9.37 (ruby-3.2.4).
374
374
  </div>
@@ -114,7 +114,7 @@
114
114
  </div>
115
115
 
116
116
  <div id="footer">
117
- Generated on Tue Jul 8 17:57:04 2025 by
117
+ Generated on Thu Jul 10 08:40:43 2025 by
118
118
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
119
119
  0.9.37 (ruby-3.2.4).
120
120
  </div>
@@ -114,7 +114,7 @@
114
114
  </div>
115
115
 
116
116
  <div id="footer">
117
- Generated on Tue Jul 8 17:57:04 2025 by
117
+ Generated on Thu Jul 10 08:40:43 2025 by
118
118
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
119
119
  0.9.37 (ruby-3.2.4).
120
120
  </div>
@@ -232,7 +232,7 @@
232
232
  </div>
233
233
 
234
234
  <div id="footer">
235
- Generated on Tue Jul 8 17:57:05 2025 by
235
+ Generated on Thu Jul 10 08:40:45 2025 by
236
236
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
237
237
  0.9.37 (ruby-3.2.4).
238
238
  </div>
@@ -550,7 +550,7 @@
550
550
  </div>
551
551
 
552
552
  <div id="footer">
553
- Generated on Tue Jul 8 17:57:01 2025 by
553
+ Generated on Thu Jul 10 08:40:41 2025 by
554
554
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
555
555
  0.9.37 (ruby-3.2.4).
556
556
  </div>
@@ -114,7 +114,7 @@
114
114
  </div>
115
115
 
116
116
  <div id="footer">
117
- Generated on Tue Jul 8 17:57:04 2025 by
117
+ Generated on Thu Jul 10 08:40:43 2025 by
118
118
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
119
119
  0.9.37 (ruby-3.2.4).
120
120
  </div>
@@ -328,7 +328,7 @@
328
328
  </div>
329
329
 
330
330
  <div id="footer">
331
- Generated on Tue Jul 8 17:57:07 2025 by
331
+ Generated on Thu Jul 10 08:40:47 2025 by
332
332
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
333
333
  0.9.37 (ruby-3.2.4).
334
334
  </div>
@@ -109,7 +109,7 @@
109
109
  </div>
110
110
 
111
111
  <div id="footer">
112
- Generated on Tue Jul 8 17:57:01 2025 by
112
+ Generated on Thu Jul 10 08:40:41 2025 by
113
113
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
114
114
  0.9.37 (ruby-3.2.4).
115
115
  </div>
@@ -129,7 +129,7 @@
129
129
  </div>
130
130
 
131
131
  <div id="footer">
132
- Generated on Tue Jul 8 17:57:03 2025 by
132
+ Generated on Thu Jul 10 08:40:43 2025 by
133
133
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
134
134
  0.9.37 (ruby-3.2.4).
135
135
  </div>
@@ -917,7 +917,7 @@
917
917
  </div>
918
918
 
919
919
  <div id="footer">
920
- Generated on Tue Jul 8 17:57:06 2025 by
920
+ Generated on Thu Jul 10 08:40:46 2025 by
921
921
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
922
922
  0.9.37 (ruby-3.2.4).
923
923
  </div>
@@ -143,7 +143,7 @@
143
143
  </div>
144
144
 
145
145
  <div id="footer">
146
- Generated on Tue Jul 8 17:57:04 2025 by
146
+ Generated on Thu Jul 10 08:40:43 2025 by
147
147
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
148
148
  0.9.37 (ruby-3.2.4).
149
149
  </div>
@@ -418,7 +418,7 @@
418
418
  </div>
419
419
 
420
420
  <div id="footer">
421
- Generated on Tue Jul 8 17:57:02 2025 by
421
+ Generated on Thu Jul 10 08:40:41 2025 by
422
422
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
423
423
  0.9.37 (ruby-3.2.4).
424
424
  </div>
@@ -350,7 +350,7 @@
350
350
  </div>
351
351
 
352
352
  <div id="footer">
353
- Generated on Tue Jul 8 17:57:02 2025 by
353
+ Generated on Thu Jul 10 08:40:41 2025 by
354
354
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
355
355
  0.9.37 (ruby-3.2.4).
356
356
  </div>
@@ -136,7 +136,7 @@
136
136
  </div>
137
137
 
138
138
  <div id="footer">
139
- Generated on Tue Jul 8 17:57:02 2025 by
139
+ Generated on Thu Jul 10 08:40:41 2025 by
140
140
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
141
141
  0.9.37 (ruby-3.2.4).
142
142
  </div>
@@ -865,7 +865,7 @@
865
865
  </div>
866
866
 
867
867
  <div id="footer">
868
- Generated on Tue Jul 8 17:57:07 2025 by
868
+ Generated on Thu Jul 10 08:40:46 2025 by
869
869
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
870
870
  0.9.37 (ruby-3.2.4).
871
871
  </div>
@@ -143,7 +143,7 @@
143
143
  </div>
144
144
 
145
145
  <div id="footer">
146
- Generated on Tue Jul 8 17:57:03 2025 by
146
+ Generated on Thu Jul 10 08:40:43 2025 by
147
147
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
148
148
  0.9.37 (ruby-3.2.4).
149
149
  </div>
@@ -572,7 +572,7 @@
572
572
  </div>
573
573
 
574
574
  <div id="footer">
575
- Generated on Tue Jul 8 17:57:01 2025 by
575
+ Generated on Thu Jul 10 08:40:41 2025 by
576
576
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
577
577
  0.9.37 (ruby-3.2.4).
578
578
  </div>
@@ -157,7 +157,7 @@
157
157
  </div>
158
158
 
159
159
  <div id="footer">
160
- Generated on Tue Jul 8 17:57:01 2025 by
160
+ Generated on Thu Jul 10 08:40:41 2025 by
161
161
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
162
162
  0.9.37 (ruby-3.2.4).
163
163
  </div>
@@ -1287,7 +1287,7 @@
1287
1287
  </div>
1288
1288
 
1289
1289
  <div id="footer">
1290
- Generated on Tue Jul 8 17:57:02 2025 by
1290
+ Generated on Thu Jul 10 08:40:42 2025 by
1291
1291
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1292
1292
  0.9.37 (ruby-3.2.4).
1293
1293
  </div>
@@ -106,7 +106,7 @@
106
106
  </div>
107
107
 
108
108
  <div id="footer">
109
- Generated on Tue Jul 8 17:57:01 2025 by
109
+ Generated on Thu Jul 10 08:40:41 2025 by
110
110
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
111
111
  0.9.37 (ruby-3.2.4).
112
112
  </div>
@@ -246,7 +246,7 @@
246
246
  </div>
247
247
 
248
248
  <div id="footer">
249
- Generated on Tue Jul 8 17:57:04 2025 by
249
+ Generated on Thu Jul 10 08:40:43 2025 by
250
250
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
251
251
  0.9.37 (ruby-3.2.4).
252
252
  </div>
@@ -806,7 +806,7 @@
806
806
  </div>
807
807
 
808
808
  <div id="footer">
809
- Generated on Tue Jul 8 17:57:01 2025 by
809
+ Generated on Thu Jul 10 08:40:41 2025 by
810
810
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
811
811
  0.9.37 (ruby-3.2.4).
812
812
  </div>
@@ -147,7 +147,7 @@
147
147
  </div>
148
148
 
149
149
  <div id="footer">
150
- Generated on Tue Jul 8 17:57:02 2025 by
150
+ Generated on Thu Jul 10 08:40:41 2025 by
151
151
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
152
152
  0.9.37 (ruby-3.2.4).
153
153
  </div>
@@ -4013,7 +4013,7 @@
4013
4013
  </div>
4014
4014
 
4015
4015
  <div id="footer">
4016
- Generated on Tue Jul 8 17:57:02 2025 by
4016
+ Generated on Thu Jul 10 08:40:41 2025 by
4017
4017
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
4018
4018
  0.9.37 (ruby-3.2.4).
4019
4019
  </div>
@@ -796,7 +796,7 @@
796
796
  </div>
797
797
 
798
798
  <div id="footer">
799
- Generated on Tue Jul 8 17:57:02 2025 by
799
+ Generated on Thu Jul 10 08:40:41 2025 by
800
800
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
801
801
  0.9.37 (ruby-3.2.4).
802
802
  </div>