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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +56 -1
  3. data/README.md +390 -46
  4. data/Rakefile +4 -0
  5. data/cliff.toml +62 -0
  6. data/docs/design/per-child-commit-overhead.md +213 -0
  7. data/docs/fanout-scale-test.md +247 -0
  8. data/docs/superpowers/plans/2026-06-25-chrono_forge-dashboard.md +1748 -0
  9. data/docs/superpowers/plans/2026-06-25-chrono_forge-dashboard.md.tasks.json +17 -0
  10. data/docs/superpowers/plans/2026-06-25-composite-retry-policies.md +930 -0
  11. data/docs/superpowers/plans/2026-06-25-composite-retry-policies.md.tasks.json +54 -0
  12. data/docs/superpowers/plans/2026-06-25-reserved-kwarg-guard.md +241 -0
  13. data/docs/superpowers/plans/2026-06-25-reserved-kwarg-guard.md.tasks.json +12 -0
  14. data/docs/superpowers/plans/2026-06-26-branches-spawn-merge.md +1378 -0
  15. data/docs/superpowers/plans/2026-06-26-branches-spawn-merge.md.tasks.json +67 -0
  16. data/docs/superpowers/plans/2026-06-26-deferral-continuation-race-and-catchup.md +709 -0
  17. data/docs/superpowers/plans/2026-06-26-deferral-continuation-race-and-catchup.md.tasks.json +19 -0
  18. data/docs/superpowers/plans/2026-06-30-poller-rekick-and-eta-cadence.md +205 -0
  19. data/docs/superpowers/plans/2026-06-30-poller-rekick-and-eta-cadence.md.tasks.json +33 -0
  20. data/docs/superpowers/plans/2026-07-01-workflow-definition-dag.md +1373 -0
  21. data/docs/superpowers/plans/2026-07-01-workflow-definition-dag.md.tasks.json +68 -0
  22. data/docs/superpowers/specs/2026-06-03-unified-retry-policy-design.md +226 -0
  23. data/docs/superpowers/specs/2026-06-25-chrono_forge-dashboard-design.md +190 -0
  24. data/docs/superpowers/specs/2026-06-25-composite-retry-policies-design.md +228 -0
  25. data/docs/superpowers/specs/2026-06-25-reserved-kwarg-guard-design.md +169 -0
  26. data/docs/superpowers/specs/2026-06-25-spawn-merge-branches-design.md +468 -0
  27. data/docs/superpowers/specs/2026-06-26-dashboard-branch-view-design.md +142 -0
  28. data/docs/superpowers/specs/2026-06-26-deferral-continuation-race-and-catchup-design.md +265 -0
  29. data/docs/superpowers/specs/2026-07-01-workflow-definition-dag-design.md +203 -0
  30. data/lib/chrono_forge/branch_merge_job.rb +275 -0
  31. data/lib/chrono_forge/branch_probe.rb +70 -0
  32. data/lib/chrono_forge/cleanup.rb +6 -0
  33. data/lib/chrono_forge/configuration.rb +25 -0
  34. data/lib/chrono_forge/definition.rb +37 -0
  35. data/lib/chrono_forge/definition_analyzer.rb +501 -0
  36. data/lib/chrono_forge/execution_log.rb +6 -0
  37. data/lib/chrono_forge/executor/composite_retry_policy.rb +47 -0
  38. data/lib/chrono_forge/executor/context.rb +23 -0
  39. data/lib/chrono_forge/executor/lock_strategy.rb +10 -3
  40. data/lib/chrono_forge/executor/methods/branch.rb +185 -0
  41. data/lib/chrono_forge/executor/methods/continue_if.rb +15 -6
  42. data/lib/chrono_forge/executor/methods/durably_execute.rb +36 -26
  43. data/lib/chrono_forge/executor/methods/durably_repeat.rb +148 -39
  44. data/lib/chrono_forge/executor/methods/merge_branches.rb +84 -0
  45. data/lib/chrono_forge/executor/methods/wait.rb +2 -4
  46. data/lib/chrono_forge/executor/methods/wait_until.rb +25 -25
  47. data/lib/chrono_forge/executor/methods/workflow_states.rb +50 -46
  48. data/lib/chrono_forge/executor/methods.rb +2 -0
  49. data/lib/chrono_forge/executor/retry_policy.rb +111 -0
  50. data/lib/chrono_forge/executor.rb +241 -28
  51. data/lib/chrono_forge/version.rb +1 -1
  52. data/lib/chrono_forge/workflow.rb +10 -1
  53. data/lib/chrono_forge.rb +8 -0
  54. data/lib/generators/chrono_forge/migration_actions.rb +1 -0
  55. data/lib/generators/chrono_forge/templates/add_chrono_forge_parent_execution_log.rb +38 -0
  56. data/lib/tasks/release.rake +212 -0
  57. metadata +67 -4
  58. 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.9.1
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-06-25 00:00:00.000000000 Z
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: zeitwerk
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/retry_strategy.rb
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