chrono_forge 0.9.1 → 0.11.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +56 -1
- data/README.md +390 -46
- data/Rakefile +4 -0
- data/cliff.toml +62 -0
- data/docs/design/per-child-commit-overhead.md +213 -0
- data/docs/fanout-scale-test.md +247 -0
- data/docs/superpowers/plans/2026-06-25-chrono_forge-dashboard.md +1748 -0
- data/docs/superpowers/plans/2026-06-25-chrono_forge-dashboard.md.tasks.json +17 -0
- data/docs/superpowers/plans/2026-06-25-composite-retry-policies.md +930 -0
- data/docs/superpowers/plans/2026-06-25-composite-retry-policies.md.tasks.json +54 -0
- data/docs/superpowers/plans/2026-06-25-reserved-kwarg-guard.md +241 -0
- data/docs/superpowers/plans/2026-06-25-reserved-kwarg-guard.md.tasks.json +12 -0
- data/docs/superpowers/plans/2026-06-26-branches-spawn-merge.md +1378 -0
- data/docs/superpowers/plans/2026-06-26-branches-spawn-merge.md.tasks.json +67 -0
- data/docs/superpowers/plans/2026-06-26-deferral-continuation-race-and-catchup.md +709 -0
- data/docs/superpowers/plans/2026-06-26-deferral-continuation-race-and-catchup.md.tasks.json +19 -0
- data/docs/superpowers/plans/2026-06-30-poller-rekick-and-eta-cadence.md +205 -0
- data/docs/superpowers/plans/2026-06-30-poller-rekick-and-eta-cadence.md.tasks.json +33 -0
- data/docs/superpowers/plans/2026-07-01-workflow-definition-dag.md +1373 -0
- data/docs/superpowers/plans/2026-07-01-workflow-definition-dag.md.tasks.json +68 -0
- data/docs/superpowers/specs/2026-06-03-unified-retry-policy-design.md +226 -0
- data/docs/superpowers/specs/2026-06-25-chrono_forge-dashboard-design.md +190 -0
- data/docs/superpowers/specs/2026-06-25-composite-retry-policies-design.md +228 -0
- data/docs/superpowers/specs/2026-06-25-reserved-kwarg-guard-design.md +169 -0
- data/docs/superpowers/specs/2026-06-25-spawn-merge-branches-design.md +468 -0
- data/docs/superpowers/specs/2026-06-26-dashboard-branch-view-design.md +142 -0
- data/docs/superpowers/specs/2026-06-26-deferral-continuation-race-and-catchup-design.md +265 -0
- data/docs/superpowers/specs/2026-07-01-workflow-definition-dag-design.md +203 -0
- data/lib/chrono_forge/branch_merge_job.rb +275 -0
- data/lib/chrono_forge/branch_probe.rb +70 -0
- data/lib/chrono_forge/cleanup.rb +6 -0
- data/lib/chrono_forge/configuration.rb +25 -0
- data/lib/chrono_forge/definition.rb +37 -0
- data/lib/chrono_forge/definition_analyzer.rb +501 -0
- data/lib/chrono_forge/execution_log.rb +6 -0
- data/lib/chrono_forge/executor/composite_retry_policy.rb +47 -0
- data/lib/chrono_forge/executor/context.rb +23 -0
- data/lib/chrono_forge/executor/lock_strategy.rb +10 -3
- data/lib/chrono_forge/executor/methods/branch.rb +185 -0
- data/lib/chrono_forge/executor/methods/continue_if.rb +15 -6
- data/lib/chrono_forge/executor/methods/durably_execute.rb +36 -26
- data/lib/chrono_forge/executor/methods/durably_repeat.rb +148 -39
- data/lib/chrono_forge/executor/methods/merge_branches.rb +84 -0
- data/lib/chrono_forge/executor/methods/wait.rb +2 -4
- data/lib/chrono_forge/executor/methods/wait_until.rb +25 -25
- data/lib/chrono_forge/executor/methods/workflow_states.rb +50 -46
- data/lib/chrono_forge/executor/methods.rb +2 -0
- data/lib/chrono_forge/executor/retry_policy.rb +111 -0
- data/lib/chrono_forge/executor.rb +241 -28
- data/lib/chrono_forge/version.rb +1 -1
- data/lib/chrono_forge/workflow.rb +10 -1
- data/lib/chrono_forge.rb +8 -0
- data/lib/generators/chrono_forge/migration_actions.rb +1 -0
- data/lib/generators/chrono_forge/templates/add_chrono_forge_parent_execution_log.rb +38 -0
- data/lib/tasks/release.rake +212 -0
- metadata +67 -4
- data/lib/chrono_forge/executor/retry_strategy.rb +0 -29
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: chrono_forge
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.11.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Stefan Froelich
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-07-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -26,6 +26,20 @@ dependencies:
|
|
|
26
26
|
version: '0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: activejob
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '7.1'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '7.1'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: zeitwerk
|
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
|
30
44
|
requirements:
|
|
31
45
|
- - ">="
|
|
@@ -39,7 +53,7 @@ dependencies:
|
|
|
39
53
|
- !ruby/object:Gem::Version
|
|
40
54
|
version: '0'
|
|
41
55
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
56
|
+
name: prism
|
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
|
44
58
|
requirements:
|
|
45
59
|
- - ">="
|
|
@@ -164,6 +178,20 @@ dependencies:
|
|
|
164
178
|
- - ">="
|
|
165
179
|
- !ruby/object:Gem::Version
|
|
166
180
|
version: '0'
|
|
181
|
+
- !ruby/object:Gem::Dependency
|
|
182
|
+
name: strong_migrations
|
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
|
184
|
+
requirements:
|
|
185
|
+
- - ">="
|
|
186
|
+
- !ruby/object:Gem::Version
|
|
187
|
+
version: '0'
|
|
188
|
+
type: :development
|
|
189
|
+
prerelease: false
|
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
+
requirements:
|
|
192
|
+
- - ">="
|
|
193
|
+
- !ruby/object:Gem::Version
|
|
194
|
+
version: '0'
|
|
167
195
|
description: ChronoForge provides a robust framework for building durable, distributed
|
|
168
196
|
workflows in Ruby on Rails applications. It offers reliable state management, error
|
|
169
197
|
recovery, and workflow orchestration through features like durable execution, wait
|
|
@@ -180,37 +208,72 @@ files:
|
|
|
180
208
|
- LICENSE.txt
|
|
181
209
|
- README.md
|
|
182
210
|
- Rakefile
|
|
211
|
+
- cliff.toml
|
|
183
212
|
- config.ru
|
|
213
|
+
- docs/design/per-child-commit-overhead.md
|
|
214
|
+
- docs/fanout-scale-test.md
|
|
215
|
+
- docs/superpowers/plans/2026-06-25-chrono_forge-dashboard.md
|
|
216
|
+
- docs/superpowers/plans/2026-06-25-chrono_forge-dashboard.md.tasks.json
|
|
217
|
+
- docs/superpowers/plans/2026-06-25-composite-retry-policies.md
|
|
218
|
+
- docs/superpowers/plans/2026-06-25-composite-retry-policies.md.tasks.json
|
|
219
|
+
- docs/superpowers/plans/2026-06-25-reserved-kwarg-guard.md
|
|
220
|
+
- docs/superpowers/plans/2026-06-25-reserved-kwarg-guard.md.tasks.json
|
|
221
|
+
- docs/superpowers/plans/2026-06-26-branches-spawn-merge.md
|
|
222
|
+
- docs/superpowers/plans/2026-06-26-branches-spawn-merge.md.tasks.json
|
|
223
|
+
- docs/superpowers/plans/2026-06-26-deferral-continuation-race-and-catchup.md
|
|
224
|
+
- docs/superpowers/plans/2026-06-26-deferral-continuation-race-and-catchup.md.tasks.json
|
|
225
|
+
- docs/superpowers/plans/2026-06-30-poller-rekick-and-eta-cadence.md
|
|
226
|
+
- docs/superpowers/plans/2026-06-30-poller-rekick-and-eta-cadence.md.tasks.json
|
|
227
|
+
- docs/superpowers/plans/2026-07-01-workflow-definition-dag.md
|
|
228
|
+
- docs/superpowers/plans/2026-07-01-workflow-definition-dag.md.tasks.json
|
|
229
|
+
- docs/superpowers/specs/2026-06-03-unified-retry-policy-design.md
|
|
230
|
+
- docs/superpowers/specs/2026-06-25-chrono_forge-dashboard-design.md
|
|
231
|
+
- docs/superpowers/specs/2026-06-25-composite-retry-policies-design.md
|
|
232
|
+
- docs/superpowers/specs/2026-06-25-reserved-kwarg-guard-design.md
|
|
233
|
+
- docs/superpowers/specs/2026-06-25-spawn-merge-branches-design.md
|
|
234
|
+
- docs/superpowers/specs/2026-06-26-dashboard-branch-view-design.md
|
|
235
|
+
- docs/superpowers/specs/2026-06-26-deferral-continuation-race-and-catchup-design.md
|
|
236
|
+
- docs/superpowers/specs/2026-07-01-workflow-definition-dag-design.md
|
|
184
237
|
- examples/continue_if_webhook_example.rb
|
|
185
238
|
- gemfiles/rails_7.1.gemfile
|
|
186
239
|
- gemfiles/rails_7.1.gemfile.lock
|
|
187
240
|
- lib/chrono_forge.rb
|
|
241
|
+
- lib/chrono_forge/branch_merge_job.rb
|
|
242
|
+
- lib/chrono_forge/branch_probe.rb
|
|
188
243
|
- lib/chrono_forge/cleanup.rb
|
|
189
244
|
- lib/chrono_forge/cleanup_job.rb
|
|
245
|
+
- lib/chrono_forge/configuration.rb
|
|
246
|
+
- lib/chrono_forge/definition.rb
|
|
247
|
+
- lib/chrono_forge/definition_analyzer.rb
|
|
190
248
|
- lib/chrono_forge/error_log.rb
|
|
191
249
|
- lib/chrono_forge/execution_log.rb
|
|
192
250
|
- lib/chrono_forge/executor.rb
|
|
251
|
+
- lib/chrono_forge/executor/composite_retry_policy.rb
|
|
193
252
|
- lib/chrono_forge/executor/context.rb
|
|
194
253
|
- lib/chrono_forge/executor/execution_tracker.rb
|
|
195
254
|
- lib/chrono_forge/executor/lock_strategy.rb
|
|
196
255
|
- lib/chrono_forge/executor/methods.rb
|
|
256
|
+
- lib/chrono_forge/executor/methods/branch.rb
|
|
197
257
|
- lib/chrono_forge/executor/methods/continue_if.rb
|
|
198
258
|
- lib/chrono_forge/executor/methods/durably_execute.rb
|
|
199
259
|
- lib/chrono_forge/executor/methods/durably_repeat.rb
|
|
260
|
+
- lib/chrono_forge/executor/methods/merge_branches.rb
|
|
200
261
|
- lib/chrono_forge/executor/methods/wait.rb
|
|
201
262
|
- lib/chrono_forge/executor/methods/wait_until.rb
|
|
202
263
|
- lib/chrono_forge/executor/methods/workflow_states.rb
|
|
203
|
-
- lib/chrono_forge/executor/
|
|
264
|
+
- lib/chrono_forge/executor/retry_policy.rb
|
|
204
265
|
- lib/chrono_forge/version.rb
|
|
205
266
|
- lib/chrono_forge/workflow.rb
|
|
206
267
|
- lib/generators/chrono_forge/install/USAGE
|
|
207
268
|
- lib/generators/chrono_forge/install/install_generator.rb
|
|
208
269
|
- lib/generators/chrono_forge/migration_actions.rb
|
|
209
270
|
- lib/generators/chrono_forge/templates/add_chrono_forge_error_log_step_context.rb
|
|
271
|
+
- lib/generators/chrono_forge/templates/add_chrono_forge_parent_execution_log.rb
|
|
210
272
|
- lib/generators/chrono_forge/templates/add_chrono_forge_workflow_state_index.rb
|
|
211
273
|
- lib/generators/chrono_forge/templates/install_chrono_forge.rb
|
|
212
274
|
- lib/generators/chrono_forge/upgrade/USAGE
|
|
213
275
|
- lib/generators/chrono_forge/upgrade/upgrade_generator.rb
|
|
276
|
+
- lib/tasks/release.rake
|
|
214
277
|
- sig/chrono_forge.rbs
|
|
215
278
|
homepage: https://github.com/radioactive-labs/chrono_forge
|
|
216
279
|
licenses:
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
module ChronoForge
|
|
2
|
-
module Executor
|
|
3
|
-
class RetryStrategy
|
|
4
|
-
BACKOFF_STRATEGY = [
|
|
5
|
-
1.second, # Initial retry
|
|
6
|
-
5.seconds, # Second retry
|
|
7
|
-
30.seconds, # Third retry
|
|
8
|
-
2.minutes, # Fourth retry
|
|
9
|
-
10.minutes # Final retry
|
|
10
|
-
]
|
|
11
|
-
|
|
12
|
-
def self.schedule_retry(workflow, attempt: 0)
|
|
13
|
-
wait_duration = BACKOFF_STRATEGY[attempt] || BACKOFF_STRATEGY.last
|
|
14
|
-
|
|
15
|
-
# Schedule with exponential backoff
|
|
16
|
-
workflow.job_klass
|
|
17
|
-
.set(wait: wait_duration)
|
|
18
|
-
.perform_later(
|
|
19
|
-
workflow.key,
|
|
20
|
-
attempt: attempt + 1
|
|
21
|
-
)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def self.max_attempts
|
|
25
|
-
BACKOFF_STRATEGY.length
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|