cmdx 1.1.1 → 1.5.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 (193) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/.cursor/prompts/docs.md +4 -1
  4. data/.cursor/prompts/llms.md +20 -0
  5. data/.cursor/prompts/rspec.md +4 -1
  6. data/.cursor/prompts/yardoc.md +3 -2
  7. data/.cursor/rules/cursor-instructions.mdc +56 -1
  8. data/.irbrc +6 -0
  9. data/.rubocop.yml +29 -18
  10. data/.ruby-version +1 -1
  11. data/CHANGELOG.md +6 -128
  12. data/LLM.md +3317 -0
  13. data/README.md +68 -44
  14. data/docs/attributes/coercions.md +162 -0
  15. data/docs/attributes/defaults.md +90 -0
  16. data/docs/attributes/definitions.md +281 -0
  17. data/docs/attributes/naming.md +78 -0
  18. data/docs/attributes/validations.md +309 -0
  19. data/docs/basics/chain.md +56 -249
  20. data/docs/basics/context.md +56 -289
  21. data/docs/basics/execution.md +114 -0
  22. data/docs/basics/setup.md +37 -334
  23. data/docs/callbacks.md +89 -467
  24. data/docs/deprecation.md +91 -174
  25. data/docs/getting_started.md +212 -202
  26. data/docs/internationalization.md +11 -647
  27. data/docs/interruptions/exceptions.md +23 -198
  28. data/docs/interruptions/faults.md +71 -151
  29. data/docs/interruptions/halt.md +109 -186
  30. data/docs/logging.md +44 -256
  31. data/docs/middlewares.md +113 -426
  32. data/docs/outcomes/result.md +81 -228
  33. data/docs/outcomes/states.md +33 -221
  34. data/docs/outcomes/statuses.md +21 -311
  35. data/docs/tips_and_tricks.md +120 -70
  36. data/docs/workflows.md +99 -283
  37. data/lib/cmdx/.DS_Store +0 -0
  38. data/lib/cmdx/attribute.rb +229 -0
  39. data/lib/cmdx/attribute_registry.rb +94 -0
  40. data/lib/cmdx/attribute_value.rb +193 -0
  41. data/lib/cmdx/callback_registry.rb +69 -77
  42. data/lib/cmdx/chain.rb +56 -73
  43. data/lib/cmdx/coercion_registry.rb +52 -68
  44. data/lib/cmdx/coercions/array.rb +19 -18
  45. data/lib/cmdx/coercions/big_decimal.rb +20 -24
  46. data/lib/cmdx/coercions/boolean.rb +26 -25
  47. data/lib/cmdx/coercions/complex.rb +21 -22
  48. data/lib/cmdx/coercions/date.rb +25 -23
  49. data/lib/cmdx/coercions/date_time.rb +24 -25
  50. data/lib/cmdx/coercions/float.rb +25 -22
  51. data/lib/cmdx/coercions/hash.rb +31 -32
  52. data/lib/cmdx/coercions/integer.rb +30 -24
  53. data/lib/cmdx/coercions/rational.rb +29 -24
  54. data/lib/cmdx/coercions/string.rb +19 -22
  55. data/lib/cmdx/coercions/symbol.rb +37 -0
  56. data/lib/cmdx/coercions/time.rb +26 -25
  57. data/lib/cmdx/configuration.rb +49 -108
  58. data/lib/cmdx/context.rb +222 -44
  59. data/lib/cmdx/deprecator.rb +61 -0
  60. data/lib/cmdx/errors.rb +42 -252
  61. data/lib/cmdx/exceptions.rb +39 -0
  62. data/lib/cmdx/faults.rb +78 -39
  63. data/lib/cmdx/freezer.rb +51 -0
  64. data/lib/cmdx/identifier.rb +30 -0
  65. data/lib/cmdx/locale.rb +52 -0
  66. data/lib/cmdx/log_formatters/json.rb +21 -22
  67. data/lib/cmdx/log_formatters/key_value.rb +20 -22
  68. data/lib/cmdx/log_formatters/line.rb +15 -22
  69. data/lib/cmdx/log_formatters/logstash.rb +22 -23
  70. data/lib/cmdx/log_formatters/raw.rb +16 -22
  71. data/lib/cmdx/middleware_registry.rb +70 -74
  72. data/lib/cmdx/middlewares/correlate.rb +90 -54
  73. data/lib/cmdx/middlewares/runtime.rb +58 -0
  74. data/lib/cmdx/middlewares/timeout.rb +48 -68
  75. data/lib/cmdx/railtie.rb +12 -45
  76. data/lib/cmdx/result.rb +229 -314
  77. data/lib/cmdx/task.rb +194 -366
  78. data/lib/cmdx/utils/call.rb +49 -0
  79. data/lib/cmdx/utils/condition.rb +71 -0
  80. data/lib/cmdx/utils/format.rb +61 -0
  81. data/lib/cmdx/validator_registry.rb +63 -72
  82. data/lib/cmdx/validators/exclusion.rb +38 -67
  83. data/lib/cmdx/validators/format.rb +48 -49
  84. data/lib/cmdx/validators/inclusion.rb +43 -74
  85. data/lib/cmdx/validators/length.rb +91 -154
  86. data/lib/cmdx/validators/numeric.rb +87 -162
  87. data/lib/cmdx/validators/presence.rb +37 -50
  88. data/lib/cmdx/version.rb +1 -1
  89. data/lib/cmdx/worker.rb +178 -0
  90. data/lib/cmdx/workflow.rb +85 -81
  91. data/lib/cmdx.rb +19 -13
  92. data/lib/generators/cmdx/install_generator.rb +14 -13
  93. data/lib/generators/cmdx/task_generator.rb +25 -50
  94. data/lib/generators/cmdx/templates/install.rb +11 -46
  95. data/lib/generators/cmdx/templates/task.rb.tt +3 -2
  96. data/lib/locales/en.yml +18 -4
  97. data/src/cmdx-logo.png +0 -0
  98. metadata +32 -116
  99. data/docs/ai_prompts.md +0 -393
  100. data/docs/basics/call.md +0 -317
  101. data/docs/configuration.md +0 -344
  102. data/docs/parameters/coercions.md +0 -396
  103. data/docs/parameters/defaults.md +0 -335
  104. data/docs/parameters/definitions.md +0 -446
  105. data/docs/parameters/namespacing.md +0 -378
  106. data/docs/parameters/validations.md +0 -405
  107. data/docs/testing.md +0 -553
  108. data/lib/cmdx/callback.rb +0 -53
  109. data/lib/cmdx/chain_inspector.rb +0 -56
  110. data/lib/cmdx/chain_serializer.rb +0 -63
  111. data/lib/cmdx/coercion.rb +0 -57
  112. data/lib/cmdx/coercions/virtual.rb +0 -29
  113. data/lib/cmdx/core_ext/hash.rb +0 -83
  114. data/lib/cmdx/core_ext/module.rb +0 -98
  115. data/lib/cmdx/core_ext/object.rb +0 -125
  116. data/lib/cmdx/correlator.rb +0 -122
  117. data/lib/cmdx/error.rb +0 -60
  118. data/lib/cmdx/fault.rb +0 -140
  119. data/lib/cmdx/immutator.rb +0 -52
  120. data/lib/cmdx/lazy_struct.rb +0 -246
  121. data/lib/cmdx/log_formatters/pretty_json.rb +0 -40
  122. data/lib/cmdx/log_formatters/pretty_key_value.rb +0 -38
  123. data/lib/cmdx/log_formatters/pretty_line.rb +0 -41
  124. data/lib/cmdx/logger.rb +0 -49
  125. data/lib/cmdx/logger_ansi.rb +0 -68
  126. data/lib/cmdx/logger_serializer.rb +0 -116
  127. data/lib/cmdx/middleware.rb +0 -70
  128. data/lib/cmdx/parameter.rb +0 -312
  129. data/lib/cmdx/parameter_evaluator.rb +0 -231
  130. data/lib/cmdx/parameter_inspector.rb +0 -66
  131. data/lib/cmdx/parameter_registry.rb +0 -106
  132. data/lib/cmdx/parameter_serializer.rb +0 -59
  133. data/lib/cmdx/result_ansi.rb +0 -71
  134. data/lib/cmdx/result_inspector.rb +0 -71
  135. data/lib/cmdx/result_logger.rb +0 -59
  136. data/lib/cmdx/result_serializer.rb +0 -104
  137. data/lib/cmdx/rspec/matchers.rb +0 -28
  138. data/lib/cmdx/rspec/result_matchers/be_executed.rb +0 -42
  139. data/lib/cmdx/rspec/result_matchers/be_failed_task.rb +0 -94
  140. data/lib/cmdx/rspec/result_matchers/be_skipped_task.rb +0 -94
  141. data/lib/cmdx/rspec/result_matchers/be_state_matchers.rb +0 -59
  142. data/lib/cmdx/rspec/result_matchers/be_status_matchers.rb +0 -57
  143. data/lib/cmdx/rspec/result_matchers/be_successful_task.rb +0 -87
  144. data/lib/cmdx/rspec/result_matchers/have_bad_outcome.rb +0 -51
  145. data/lib/cmdx/rspec/result_matchers/have_caused_failure.rb +0 -58
  146. data/lib/cmdx/rspec/result_matchers/have_chain_index.rb +0 -59
  147. data/lib/cmdx/rspec/result_matchers/have_context.rb +0 -86
  148. data/lib/cmdx/rspec/result_matchers/have_empty_metadata.rb +0 -54
  149. data/lib/cmdx/rspec/result_matchers/have_good_outcome.rb +0 -52
  150. data/lib/cmdx/rspec/result_matchers/have_metadata.rb +0 -114
  151. data/lib/cmdx/rspec/result_matchers/have_preserved_context.rb +0 -66
  152. data/lib/cmdx/rspec/result_matchers/have_received_thrown_failure.rb +0 -64
  153. data/lib/cmdx/rspec/result_matchers/have_runtime.rb +0 -78
  154. data/lib/cmdx/rspec/result_matchers/have_thrown_failure.rb +0 -76
  155. data/lib/cmdx/rspec/task_matchers/be_well_formed_task.rb +0 -62
  156. data/lib/cmdx/rspec/task_matchers/have_callback.rb +0 -85
  157. data/lib/cmdx/rspec/task_matchers/have_cmd_setting.rb +0 -68
  158. data/lib/cmdx/rspec/task_matchers/have_executed_callbacks.rb +0 -92
  159. data/lib/cmdx/rspec/task_matchers/have_middleware.rb +0 -46
  160. data/lib/cmdx/rspec/task_matchers/have_parameter.rb +0 -181
  161. data/lib/cmdx/task_deprecator.rb +0 -52
  162. data/lib/cmdx/task_processor.rb +0 -246
  163. data/lib/cmdx/task_serializer.rb +0 -57
  164. data/lib/cmdx/utils/ansi_color.rb +0 -73
  165. data/lib/cmdx/utils/log_timestamp.rb +0 -36
  166. data/lib/cmdx/utils/monotonic_runtime.rb +0 -34
  167. data/lib/cmdx/utils/name_affix.rb +0 -52
  168. data/lib/cmdx/validator.rb +0 -57
  169. data/lib/generators/cmdx/templates/workflow.rb.tt +0 -7
  170. data/lib/generators/cmdx/workflow_generator.rb +0 -84
  171. data/lib/locales/ar.yml +0 -35
  172. data/lib/locales/cs.yml +0 -35
  173. data/lib/locales/da.yml +0 -35
  174. data/lib/locales/de.yml +0 -35
  175. data/lib/locales/el.yml +0 -35
  176. data/lib/locales/es.yml +0 -35
  177. data/lib/locales/fi.yml +0 -35
  178. data/lib/locales/fr.yml +0 -35
  179. data/lib/locales/he.yml +0 -35
  180. data/lib/locales/hi.yml +0 -35
  181. data/lib/locales/it.yml +0 -35
  182. data/lib/locales/ja.yml +0 -35
  183. data/lib/locales/ko.yml +0 -35
  184. data/lib/locales/nl.yml +0 -35
  185. data/lib/locales/no.yml +0 -35
  186. data/lib/locales/pl.yml +0 -35
  187. data/lib/locales/pt.yml +0 -35
  188. data/lib/locales/ru.yml +0 -35
  189. data/lib/locales/sv.yml +0 -35
  190. data/lib/locales/th.yml +0 -35
  191. data/lib/locales/tr.yml +0 -35
  192. data/lib/locales/vi.yml +0 -35
  193. data/lib/locales/zh.yml +0 -35
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2517b9b2e36f957800d10bf952bd8062fbcd4c66ff760574c741c96b5d76d925
4
- data.tar.gz: f52d86024e590060604c17da1ff31ed520d9f5d561367d6ef59b6df93ed01b45
3
+ metadata.gz: de49105a37f479ac8172f6329536b45a976adbb4e09c43b9351e329dbf662760
4
+ data.tar.gz: 7b100f2619d36ae0ac287c108bbab114168d87528beb1751951ac1282dbc37d3
5
5
  SHA512:
6
- metadata.gz: b260acf4cf76fa11cb9af6fd498536c8260b813880fb46dca0569162eda32d08f67c9a3ccd06611a84fc75067b7b49c8365beebeafc766b6098961cf2fa46830
7
- data.tar.gz: 7fe5dd38adfdee7db0b54f2748f19a74bbe34da632288275fd012a4ea15216ad8bc35a8e189e9274463797511d59f260063dab2903d9052968fbb69653bb93ef
6
+ metadata.gz: becbfc6dcc4657b16697559c91bac79a2416610655f2831cef74745d30720ac6e0f64991b442229384c8c98259f3b9dc0df706b60c988c01462a8a02eb8ee097
7
+ data.tar.gz: e0dc0122625d710048768d0a31b39a1081ef800206e331f7e842b483c4639108177dbe83a6e1b47cbd08328ddfc5899e5d5b682ce65ec90287035b8e17a7d8f3
data/.DS_Store CHANGED
Binary file
@@ -1,4 +1,6 @@
1
- Update the file in context using the following guidelines:
1
+ You are a senior Ruby developer with expert knowledge of CMDx and writing documentation.
2
+
3
+ Update the active tab using the following guidelines:
2
4
 
3
5
  - Follow best practices and implementation
4
6
  - Use a consistent professional voice
@@ -7,3 +9,4 @@ Update the file in context using the following guidelines:
7
9
  - Examples should not cross boundaries or focus
8
10
  - Docs must cover both typical use cases, including invalid inputs and error conditions
9
11
  - Use GitHub flavored markdown, including alerts to emphasize critical information (https://github.com/orgs/community/discussions/16925)
12
+ - Optimize for LLM's including coding and AI agents
@@ -0,0 +1,20 @@
1
+ Process the following instructions in the order given:
2
+
3
+ 1. Create an `LLM.md` file
4
+ 2. Append all files within `docs/**/*.md` into @LLM.md
5
+ 2a. Use order outlined in the table of contents of @README.md
6
+ 2b. Process one file at a time faster performance and improved accuracy
7
+ 2c. Remove the table of contents from the chunk
8
+ 2c. Remove the navigations below `---` from the chunk
9
+ 2d. Wrap the chunk the files GitHub url the top and a spacer at the bottom like so:
10
+ ```
11
+
12
+ ---
13
+ url: https://github.com/drexed/cmdx/blob/main/docs/callbacks.md
14
+ ---
15
+
16
+ {{ chunk }}
17
+
18
+ ---
19
+
20
+ ```
@@ -1,4 +1,6 @@
1
- Add tests for the file in context using the following guidelines:
1
+ You are a senior Ruby developer with expert knowledge of RSpec.
2
+
3
+ Add tests for the active tab using the following guidelines:
2
4
 
3
5
  - Expectations should be concise, non-repetitive, and realistic (how it would be used in the real world)
4
6
  - Follow best practices and implementation
@@ -18,4 +20,5 @@ Add tests for the file in context using the following guidelines:
18
20
  - Keep test code concise; avoid unnecessary complexity or duplication
19
21
  - Tests must cover both typical cases and edge cases, including invalid inputs and error conditions
20
22
  - Consider all possible scenarios for each method or behavior and ensure they are tested
23
+ - Do NOT include integration or real world examples
21
24
  - Verify all specs are passing
@@ -1,10 +1,11 @@
1
- Add yardoc to the file in context using the following guidelines:
1
+ You are a senior Ruby developer with expert knowledge of YARDoc.
2
+
3
+ Add yardoc to the active tab using the following guidelines:
2
4
 
3
5
  - Follow best practices and implementation
4
6
  - New documentation should be consistent with current `lib/cmdx` documentation
5
7
  - Examples should be concise, non-repetitive, and realistic
6
8
  - Avoid unnecessary complexity or duplication
7
- - Consider all possible scenarios for each method or behavior and ensure they are tested.
8
9
  - Update any pre-existing documentation to match stated rules
9
10
  - Do NOT include `CMDx` module level docs
10
11
  - Module level docs description should NOT include `@example`
@@ -3,4 +3,59 @@ description:
3
3
  globs:
4
4
  alwaysApply: true
5
5
  ---
6
- Use instructions found in [copilot-instructions.md](mdc:.github/copilot-instructions.md)
6
+
7
+ # Ruby Coding Standards
8
+
9
+ Follow the official Ruby gem guides for best practices.
10
+ Reference the guides outlined in https://guides.rubygems.org
11
+
12
+ ## Project Context
13
+ CMDx provides a framework for designing and executing complex
14
+ business logic within service/command objects.
15
+
16
+ ## Technology Stack
17
+ - Ruby 3.4+
18
+ - RSpec 3.1+
19
+
20
+ ## Code Style and Structure
21
+ - Write concise, idiomatic Ruby code with accurate examples
22
+ - Follow Ruby conventions and best practices
23
+ - Use object-oriented and functional programming patterns as appropriate
24
+ - Prefer iteration and modularization over code duplication
25
+ - Use descriptive variable and method names (e.g., user_signed_in?, calculate_total)
26
+ - Write comprehensive code documentation using the Yardoc format
27
+
28
+ ## Naming Conventions
29
+ - Use snake_case for file names, method names, and variables
30
+ - Use CamelCase for class and module names
31
+
32
+ ## Syntax and Formatting
33
+ - Follow the Ruby Style Guide (https://rubystyle.guide/)
34
+ - Follow Ruby style conventions (2-space indentation, snake_case methods)
35
+ - Use Ruby's expressive syntax (e.g., unless, ||=, &.)
36
+ - Prefer double quotes for strings
37
+ - Respect my Rubocop options
38
+
39
+ ## Performance Optimization
40
+ - Use memoization for expensive operations
41
+
42
+ ## Testing
43
+ - Follow the RSpec Style Guide (https://rspec.rubystyle.guide/)
44
+ - Write comprehensive tests using RSpec
45
+ - It's ok to put multiple assertions in the same example
46
+ - Include both BDD and TDD based tests
47
+ - Create test objects to share across tests
48
+ - Do NOT make tests for obvious or reflective expectations
49
+ - Prefer real objects over mocks. Use `instance_double` if necessary; never `double`
50
+ - Don't test declarative configuration
51
+ - Use appropriate matchers
52
+ - Update tests and update Yardocs after you write code
53
+
54
+ ## Documentation
55
+ - Utilize the YARDoc format when documenting Ruby code
56
+ - Follow these best practices:
57
+ - Avoid redundant comments that merely restate the code
58
+ - Keep comments up-to-date with code changes
59
+ - Keep documentation consistent
60
+ - Update CHANGELOG.md with any changes
61
+
data/.irbrc ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pp"
4
+
5
+ # To reload the gem, you must exit and restart the IRB session
6
+ require_relative "lib/cmdx" unless defined?(CMDx)
data/.rubocop.yml CHANGED
@@ -6,6 +6,7 @@ AllCops:
6
6
  NewCops: enable
7
7
  DisplayCopNames: true
8
8
  DisplayStyleGuide: true
9
+ TargetRubyVersion: 3.1
9
10
  Gemspec/DevelopmentDependencies:
10
11
  EnforcedStyle: gemspec
11
12
  Layout/EmptyLinesAroundAttributeAccessor:
@@ -14,22 +15,25 @@ Layout/EmptyLinesAroundClassBody:
14
15
  EnforcedStyle: empty_lines_except_namespace
15
16
  Layout/EmptyLinesAroundModuleBody:
16
17
  EnforcedStyle: empty_lines_except_namespace
17
- Layout/ExtraSpacing:
18
- Exclude:
19
- - 'lib/generators/cmdx/templates/install.rb'
18
+ Layout/FirstHashElementIndentation:
19
+ EnforcedStyle: consistent
20
20
  Layout/LineLength:
21
21
  Enabled: false
22
22
  Lint/MissingSuper:
23
23
  Exclude:
24
- - 'lib/cmdx/middlewares/**/*'
25
24
  - 'spec/**/**/*'
25
+ Lint/ShadowedException:
26
+ Enabled: false
27
+ Lint/UnusedMethodArgument:
28
+ Exclude:
29
+ - 'lib/cmdx/coercions/**/*'
30
+ - 'lib/cmdx/log_formatters/**/*'
31
+ - 'lib/cmdx/middlewares/**/*'
32
+ - 'lib/cmdx/validators/**/*'
26
33
  Metrics/AbcSize:
27
34
  Enabled: false
28
35
  Metrics/BlockLength:
29
- Exclude:
30
- - 'lib/cmdx/rspec/**/*'
31
- - 'spec/**/**/*'
32
- - '*.gemspec'
36
+ Enabled: false
33
37
  Metrics/ClassLength:
34
38
  Enabled: false
35
39
  Metrics/CyclomaticComplexity:
@@ -42,43 +46,50 @@ Metrics/PerceivedComplexity:
42
46
  Enabled: false
43
47
  Naming/MethodParameterName:
44
48
  Enabled: false
45
- RSpec/AnyInstance:
46
- Enabled: false
47
49
  RSpec/DescribeClass:
48
50
  Exclude:
49
51
  - 'spec/integrations/**/*'
50
52
  RSpec/ExampleLength:
51
53
  Enabled: false
54
+ RSpec/IndexedLet:
55
+ Enabled: false
52
56
  RSpec/MessageSpies:
57
+ EnforcedStyle: receive
58
+ RSpec/MultipleExpectations:
53
59
  Enabled: false
54
60
  RSpec/MultipleMemoizedHelpers:
55
61
  Enabled: false
56
- RSpec/MultipleExpectations:
57
- Enabled: false
58
62
  RSpec/NestedGroups:
59
63
  Enabled: false
60
64
  RSpec/SpecFilePathFormat:
61
65
  CustomTransform:
62
66
  CMDx: cmdx
63
- RSpec/StubbedMock:
64
- Enabled: false
65
67
  RSpec/SubjectStub:
66
68
  Enabled: false
67
- RSpec/VerifiedDoubles:
69
+ RSpec/StubbedMock:
68
70
  Enabled: false
69
71
  RSpec/VerifiedDoubleReference:
70
72
  Enabled: false
73
+ Style/ArgumentsForwarding:
74
+ Exclude:
75
+ - 'lib/cmdx/utils/call.rb'
76
+ Style/CaseEquality:
77
+ Enabled: false
78
+ Style/DocumentDynamicEvalDefinition:
79
+ Enabled: false
71
80
  Style/Documentation:
72
81
  Enabled: false
73
- Style/FormatStringToken:
82
+ Style/DoubleNegation:
74
83
  Enabled: false
75
84
  Style/FrozenStringLiteralComment:
76
85
  Enabled: true
77
86
  EnforcedStyle: always_true
78
87
  SafeAutoCorrect: true
79
- Style/OpenStructUse:
80
- Enabled: false
88
+ Style/ModuleFunction:
89
+ EnforcedStyle: extend_self
81
90
  Style/OptionalBooleanParameter:
82
91
  Enabled: false
92
+ Style/StringConcatenation:
93
+ Enabled: false
83
94
  Style/StringLiterals:
84
95
  EnforcedStyle: double_quotes
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.4.4
1
+ 3.4.5
data/CHANGELOG.md CHANGED
@@ -2,141 +2,19 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
6
 
8
7
  ## [TODO]
9
8
 
10
- - Rebuild parameters to use a less magical approach
11
- - Validators to add errors directly instead of raising errors
12
- - Coercions to add errors directly instead of raising errors
13
- - Update procs to call with object as first item
9
+ ## [1.5.0] - 2025-08-21
14
10
 
15
- ## [Unreleased]
11
+ ### Changes
12
+ - BREAKING - Revamp CMDx for clarity, transparency, and higher performance
16
13
 
17
- ## [1.1.1] - 2025-07-20
14
+ ## [1.1.2] - 2025-07-20
18
15
 
19
16
  ### Changed
20
- - Updated all docs and specs
21
- - Update deprecation key words
22
-
23
- ## [1.1.0] - 2025-07-17
24
-
25
- ### Added
26
- - Added `CoercionRegistry` class for managing parameter coercions with support for custom type registration
27
- - Added `ValidatorRegistry` class for managing parameter validators with support for custom validator registration
28
- - Added `CallbackRegistry` class to take uninstantiated callback classes
29
- - Added `Validator` and `Coercion` classes to build their respective handlers
30
- - Added deprecation setting
31
-
32
- ### Changed
33
- - Moved `Task::CALLBACKS` constant to `CallbackRegistry::TYPES`
34
- - Updated `ParameterRegistry` class to not inherit from `Hash`
35
- - Updated `MiddlewareRegistry` class to not inherit from `Hash`
36
- - Updated `CallbackRegistry` class to not inherit from `Hash`
37
-
38
- ### Removed
39
- - Removed task `register` class method
40
- - Removed `Custom` validator since users can create and register a custom one
41
-
42
- ## [1.0.1] - 2025-07-07
43
-
44
- ### Added
45
- - Added comprehensive internationalization support with 24 language locales
46
- - Arabic, Chinese, Czech, Danish, Dutch, English, Finnish, French, German, Greek
47
- - Hebrew, Hindi, Italian, Japanese, Korean, Norwegian, Polish, Portuguese
48
- - Russian, Spanish, Swedish, Thai, Turkish, Vietnamese
49
- - Added TLDR sections to documentation for improved accessibility
50
-
51
- ### Changed
52
- - Improved configuration template with better defaults and examples
53
-
54
- ## [1.0.0] - 2025-07-03
55
-
56
- ### Added
57
- - Added `Hook` class for flexible callback management
58
- - Added `perform!` and `perform` method aliases for class-level `call!` and `call` methods
59
- - Added comprehensive YARDoc documentation throughout codebase
60
- - Added configuration-based hook registration system
61
- - Added Cursor and GitHub Copilot configuration files for enhanced IDE support
62
- - Added middleware support for tasks enabling extensible request/response processing
63
- - Added pattern matching support for result objects
64
- - Added support for direct instantiation of Task and Workflow objects
65
- - Added Zeitwerk-based gem loading for improved performance and reliability
66
-
67
- ### Changed
68
- - Changed `ArgumentError` to `TypeError` for type validation consistency
69
- - Changed configuration from hash-based to PORO (Plain Old Ruby Object) class structure
70
- - Improved documentation readability, consistency, and completeness
71
- - Improved test suite readability, consistency, and coverage
72
- - Renamed `Batch` to `Workflow` to better reflect functionality
73
- - Renamed `Hook` to `Callback` for naming consistency
74
- - Renamed `Parameters` to `ParameterRegistry` for clarity
75
- - Renamed `Run` and associated components to `Chain` for better semantic meaning
76
- - Updated `Chain` to use thread-based execution instead of context passing
77
- - Updated `Immutator` to use `SKIP_CMDX_FREEZING` environment variable instead of `RACK_ENV`/`RAILS_ENV`
78
- - Updated hooks from a hash structure to registry pattern
79
-
80
- ### Removed
81
- - Removed deprecated `task_timeout` and `batch_timeout` configuration settings
82
-
83
- ## [0.5.0] - 2025-03-21
84
-
85
- ### Added
86
- - Added `on_[state]` and `on_[status]` based result callback handlers
87
- - Added `on_executed` state hook for task completion tracking
88
- - Added `on_good` and `on_bad` status hooks for success/failure handling
89
- - Added `state`, `status`, `outcome`, and `runtime` fields to run serializer
90
- - Added `to_a` alias for array of hashes serializers
91
-
92
- ### Changed
93
- - Reordered status and state hook execution for more predictable behavior
94
-
95
- ## [0.4.0] - 2025-03-17
96
-
97
- ### Added
98
- - Added ANSI color utility for enhanced terminal output
99
- - Added JSON string parsing support in array coercion
100
- - Added JSON string parsing support in hash coercion
101
-
102
- ### Changed
103
- - Improved ANSI escape sequence handling
104
- - Improved run inspector output formatting
105
-
106
- ### Fixed
107
- - Fixed log settings assignment when logger is nil to prevent errors
108
-
109
- ## [0.3.0] - 2025-03-14
110
-
111
- ### Added
112
- - Added `LoggerSerializer` for standardized log output formatting
113
- - Added `progname` support for logger instances
114
-
115
- ### Changed
116
- - Removed `pid` (process ID) from result serializer output
117
- - Reverted default log formatter from `PrettyLine` back to `Line`
118
-
119
- ### Fixed
120
- - Fixed `call!` method not properly marking failure state as interrupted
121
- - Fixed serialization issues with frozen run objects
122
-
123
- ## [0.2.0] - 2025-03-12
124
-
125
- ### Added
126
- - Added `PrettyJson` log formatter for structured JSON output
127
- - Added `PrettyKeyValue` log formatter for key-value pair output
128
- - Added `PrettyLine` log formatter for enhanced line-based output
129
-
130
- ### Changed
131
- - Renamed `DatetimeFormatter` utility to `LogTimestamp` for better clarity
132
- - Renamed `MethodName` utility to `NameAffix` for better clarity
133
- - Renamed `Runtime` utility to `MonotonicRuntime` for better clarity
134
- - Updated `PrettyLine` to be the default log formatter
135
- - Updated result logger to be wrapped in `Logger#with_logger` block for better context
136
-
137
- ### Fixed
138
- - Fixed error when logging non-hash values
139
- - Fixed fault bubbling behavior with nested halted calls
17
+ - All items between versions `0.1.0` and `1.1.2` should be reviewed within its own tag
140
18
 
141
19
  ## [0.1.0] - 2025-03-07
142
20