hecks 1.2.0 → 1.4.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 (358) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hecks/adapters/driven/claude_code.rb +7 -7
  3. data/lib/hecks/adapters/driven/d1.rb +187 -23
  4. data/lib/hecks/adapters/driven/folder.rb +10 -10
  5. data/lib/hecks/adapters/driven/google_authentication.rb +8 -8
  6. data/lib/hecks/adapters/driven/governance_authorization.rb +31 -13
  7. data/lib/hecks/adapters/driven/heki/journal.rb +60 -2
  8. data/lib/hecks/adapters/driven/heki/saga_store.rb +5 -5
  9. data/lib/hecks/adapters/driven/heki.rb +13 -7
  10. data/lib/hecks/adapters/driven/identity_registry.rb +2 -2
  11. data/lib/hecks/adapters/driven/in_memory_ordering.rb +3 -3
  12. data/lib/hecks/adapters/driven/lambda/client.rb +34 -9
  13. data/lib/hecks/adapters/driven/lambda.rb +39 -33
  14. data/lib/hecks/adapters/driven/local_storage.rb +17 -10
  15. data/lib/hecks/adapters/driven/memory.rb +205 -9
  16. data/lib/hecks/adapters/driven/mock_stripe_adapter.rb +1 -1
  17. data/lib/hecks/adapters/driven/postgres/codec.rb +27 -11
  18. data/lib/hecks/adapters/driven/postgres/outbox.rb +40 -2
  19. data/lib/hecks/adapters/driven/postgres/reconnect.rb +23 -7
  20. data/lib/hecks/adapters/driven/postgres/schema_builder.rb +14 -14
  21. data/lib/hecks/adapters/driven/postgres.rb +175 -28
  22. data/lib/hecks/adapters/driven/postgres_era.adapter +5 -0
  23. data/lib/hecks/adapters/driven/prism.rb +4 -4
  24. data/lib/hecks/adapters/driven/sql_query_builder.rb +34 -22
  25. data/lib/hecks/adapters/driven/sqlite/codec.rb +38 -10
  26. data/lib/hecks/adapters/driven/sqlite/projection.rb +60 -32
  27. data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +12 -12
  28. data/lib/hecks/adapters/driven/sqlite.rb +181 -21
  29. data/lib/hecks/adapters/driven.rb +4 -4
  30. data/lib/hecks/adapters/driving/github_webhook.rb +145 -0
  31. data/lib/hecks/behaviors/dsl.rb +2 -2
  32. data/lib/hecks/behaviors/expectations.rb +51 -23
  33. data/lib/hecks/behaviors/ir.rb +1 -1
  34. data/lib/hecks/behaviors/rspec.rb +1 -1
  35. data/lib/hecks/behaviors/runner.rb +2 -2
  36. data/lib/hecks/behaviors.rb +1 -1
  37. data/lib/hecks/bluebook/aggregate.rb +13 -13
  38. data/lib/hecks/bluebook/assembly/aggregate_assembly.rb +10 -10
  39. data/lib/hecks/bluebook/assembly/build.rb +1 -1
  40. data/lib/hecks/bluebook/assembly/contract.rb +39 -16
  41. data/lib/hecks/bluebook/assembly/contracts.rb +40 -38
  42. data/lib/hecks/bluebook/assembly/marks.rb +18 -18
  43. data/lib/hecks/bluebook/assembly/specializer.rb +19 -21
  44. data/lib/hecks/bluebook/assembly.rb +9 -9
  45. data/lib/hecks/bluebook/attribute.rb +9 -9
  46. data/lib/hecks/bluebook/behaviour/aggregate.rb +11 -11
  47. data/lib/hecks/bluebook/behaviour/attribute.rb +5 -5
  48. data/lib/hecks/bluebook/behaviour/chapter.rb +23 -5
  49. data/lib/hecks/bluebook/behaviour/command.rb +23 -23
  50. data/lib/hecks/bluebook/behaviour/domain_port.rb +27 -3
  51. data/lib/hecks/bluebook/behaviour/entity.rb +8 -8
  52. data/lib/hecks/bluebook/behaviour/hexagon.rb +4 -4
  53. data/lib/hecks/bluebook/behaviour/lifecycle.rb +5 -5
  54. data/lib/hecks/bluebook/behaviour/policy.rb +12 -12
  55. data/lib/hecks/bluebook/behaviour/process_manager.rb +7 -7
  56. data/lib/hecks/bluebook/behaviour/query.rb +1 -1
  57. data/lib/hecks/bluebook/behaviour/read_model.rb +8 -8
  58. data/lib/hecks/bluebook/behaviour/traits.rb +12 -12
  59. data/lib/hecks/bluebook/behaviour/value_object.rb +6 -6
  60. data/lib/hecks/bluebook/capabilities.rb +27 -0
  61. data/lib/hecks/bluebook/chapter.rb +28 -9
  62. data/lib/hecks/bluebook/command.rb +12 -12
  63. data/lib/hecks/bluebook/domain_port.rb +9 -9
  64. data/lib/hecks/bluebook/dsl/adapter_builder.rb +24 -0
  65. data/lib/hecks/bluebook/dsl/aggregate_builder/sealing.rb +49 -49
  66. data/lib/hecks/bluebook/dsl/aggregate_builder.rb +96 -96
  67. data/lib/hecks/bluebook/dsl/attribute_collector.rb +41 -41
  68. data/lib/hecks/bluebook/dsl/binding_proxy.rb +22 -2
  69. data/lib/hecks/bluebook/dsl/bluebook_builder/validation.rb +111 -74
  70. data/lib/hecks/bluebook/dsl/bluebook_builder.rb +48 -30
  71. data/lib/hecks/bluebook/dsl/bootstrap_table.rb +116 -0
  72. data/lib/hecks/bluebook/dsl/command_builder.rb +103 -103
  73. data/lib/hecks/bluebook/dsl/const_shim.rb +46 -15
  74. data/lib/hecks/bluebook/dsl/domain_port_builder.rb +90 -25
  75. data/lib/hecks/bluebook/dsl/entity_builder.rb +56 -56
  76. data/lib/hecks/bluebook/dsl/generic_dispatch.rb +148 -132
  77. data/lib/hecks/bluebook/dsl/hecksagon_builder.rb +89 -30
  78. data/lib/hecks/bluebook/dsl/identity_declaration.rb +17 -17
  79. data/lib/hecks/bluebook/dsl/lifecycle_builder.rb +27 -4
  80. data/lib/hecks/bluebook/dsl/policy_builder.rb +30 -21
  81. data/lib/hecks/bluebook/dsl/port_builder.rb +38 -7
  82. data/lib/hecks/bluebook/dsl/port_operation_builder.rb +56 -22
  83. data/lib/hecks/bluebook/dsl/process_manager_builder.rb +35 -35
  84. data/lib/hecks/bluebook/dsl/query_builder.rb +5 -5
  85. data/lib/hecks/bluebook/dsl/read_model_builder.rb +34 -34
  86. data/lib/hecks/bluebook/dsl/rule_reference.rb +41 -39
  87. data/lib/hecks/bluebook/dsl/translation_builder.rb +9 -9
  88. data/lib/hecks/bluebook/dsl/value_object_builder.rb +16 -16
  89. data/lib/hecks/bluebook/dsl/word_gate.rb +59 -53
  90. data/lib/hecks/bluebook/dsl/world_builder.rb +51 -8
  91. data/lib/hecks/bluebook/entity.rb +11 -11
  92. data/lib/hecks/bluebook/expression/ast_json.rb +20 -20
  93. data/lib/hecks/bluebook/expression/ast_reader.rb +3 -3
  94. data/lib/hecks/bluebook/expression/canonical_form.rb +9 -9
  95. data/lib/hecks/bluebook/expression/evaluator.rb +18 -18
  96. data/lib/hecks/bluebook/expression/resolver/block_predicates.rb +18 -18
  97. data/lib/hecks/bluebook/expression/resolver.rb +60 -62
  98. data/lib/hecks/bluebook/hexagon.rb +1 -1
  99. data/lib/hecks/bluebook/lifecycle.rb +1 -1
  100. data/lib/hecks/bluebook/meta_validator/adapter_judge.rb +1 -1
  101. data/lib/hecks/bluebook/meta_validator/judge.rb +122 -86
  102. data/lib/hecks/bluebook/meta_validator/plan.rb +39 -39
  103. data/lib/hecks/bluebook/meta_validator/port_judge.rb +2 -2
  104. data/lib/hecks/bluebook/meta_validator/readings.rb +43 -43
  105. data/lib/hecks/bluebook/meta_validator/reconstruction.rb +44 -37
  106. data/lib/hecks/bluebook/meta_validator/shapes.rb +25 -21
  107. data/lib/hecks/bluebook/meta_validator/syntax_boot.rb +145 -31
  108. data/lib/hecks/bluebook/meta_validator/translation_judge.rb +6 -6
  109. data/lib/hecks/bluebook/meta_validator/world_judge.rb +5 -5
  110. data/lib/hecks/bluebook/meta_validator.rb +70 -70
  111. data/lib/hecks/bluebook/model_check.rb +301 -84
  112. data/lib/hecks/bluebook/pattern_subset.rb +9 -9
  113. data/lib/hecks/bluebook/policy.rb +15 -13
  114. data/lib/hecks/bluebook/process_manager.rb +14 -14
  115. data/lib/hecks/bluebook/project_register.rb +6 -6
  116. data/lib/hecks/bluebook/query.rb +4 -4
  117. data/lib/hecks/bluebook/read_model.rb +14 -14
  118. data/lib/hecks/bluebook/reference.rb +8 -8
  119. data/lib/hecks/bluebook/smoke_test.rb +19 -19
  120. data/lib/hecks/bluebook/synthesizer.rb +12 -12
  121. data/lib/hecks/bluebook/translation.rb +4 -4
  122. data/lib/hecks/bluebook/value_object.rb +6 -6
  123. data/lib/hecks/bluebook.rb +2 -2
  124. data/lib/hecks/codemod/legacy_dispatch_args.rb +299 -0
  125. data/lib/hecks/codemod/legacy_dispatch_recorder.rb +186 -0
  126. data/lib/hecks/codemod.rb +36 -35
  127. data/lib/hecks/construct.rb +6 -6
  128. data/lib/hecks/corpus.rb +317 -0
  129. data/lib/hecks/deprecation.rb +95 -0
  130. data/lib/hecks/doc/reference.rb +19 -19
  131. data/lib/hecks/embryonaut_bluebook.rb +11 -11
  132. data/lib/hecks/facade/cli_door.rb +69 -10
  133. data/lib/hecks/facade/cli_runner.rb +105 -24
  134. data/lib/hecks/facade/command_request.rb +23 -0
  135. data/lib/hecks/facade/handle.rb +79 -32
  136. data/lib/hecks/facade/json_door.rb +106 -25
  137. data/lib/hecks/facade/surface/aggregate_door.rb +42 -27
  138. data/lib/hecks/facade/surface/chapter.rb +26 -17
  139. data/lib/hecks/facade/surface.rb +16 -3
  140. data/lib/hecks/facade.rb +15 -4
  141. data/lib/hecks/forms/app.rb +46 -30
  142. data/lib/hecks/forms/command_form_renderer.rb +70 -9
  143. data/lib/hecks/forms/field_renderer.rb +142 -6
  144. data/lib/hecks/forms/field_shape.rb +183 -20
  145. data/lib/hecks/forms/html.rb +51 -7
  146. data/lib/hecks/forms/index_renderer.rb +14 -2
  147. data/lib/hecks/forms/params.rb +120 -23
  148. data/lib/hecks/forms/port_argument.rb +2 -2
  149. data/lib/hecks/forms/query_form_renderer.rb +2 -2
  150. data/lib/hecks/forms/record_renderer.rb +2 -2
  151. data/lib/hecks/forms/record_table.rb +1 -1
  152. data/lib/hecks/forms/value_object_shape.rb +3 -3
  153. data/lib/hecks/forms.rb +24 -4
  154. data/lib/hecks/fqn.rb +1 -1
  155. data/lib/hecks/framework/bluebook/governance.bluebook +9 -0
  156. data/lib/hecks/framework.rb +48 -17
  157. data/lib/hecks/freezer.rb +11 -11
  158. data/lib/hecks/fuzzing/bounded_exhaustive_expressions.rb +90 -90
  159. data/lib/hecks/fuzzing/combination_miner.rb +119 -0
  160. data/lib/hecks/fuzzing/concurrent_dispatch.rb +361 -0
  161. data/lib/hecks/fuzzing/coverage_campaign.rb +118 -0
  162. data/lib/hecks/fuzzing/differential.rb +158 -0
  163. data/lib/hecks/fuzzing/domain_generator.rb +694 -0
  164. data/lib/hecks/fuzzing/era_boundary.rb +124 -0
  165. data/lib/hecks/fuzzing/form_census.rb +199 -0
  166. data/lib/hecks/fuzzing/generated_domain_check.rb +95 -0
  167. data/lib/hecks/fuzzing/invalid_value_generator.rb +6 -6
  168. data/lib/hecks/fuzzing/isolated_boot.rb +226 -38
  169. data/lib/hecks/fuzzing/nondeterministic.rb +67 -0
  170. data/lib/hecks/fuzzing/persistence_parity.rb +161 -0
  171. data/lib/hecks/fuzzing/properties/corrections.rb +100 -0
  172. data/lib/hecks/fuzzing/properties/dispatch_and_mutations.rb +321 -41
  173. data/lib/hecks/fuzzing/properties/guards.rb +129 -26
  174. data/lib/hecks/fuzzing/properties/invariants_and_aggregation.rb +32 -32
  175. data/lib/hecks/fuzzing/properties/lifecycle_and_replay.rb +31 -11
  176. data/lib/hecks/fuzzing/properties/outbox.rb +142 -0
  177. data/lib/hecks/fuzzing/properties/querying.rb +17 -17
  178. data/lib/hecks/fuzzing/properties.rb +84 -39
  179. data/lib/hecks/fuzzing/qa_settings.rb +152 -0
  180. data/lib/hecks/fuzzing/replay.rb +224 -114
  181. data/lib/hecks/fuzzing/rotation_priority.rb +94 -0
  182. data/lib/hecks/fuzzing/rust_gap_manifest.rb +113 -0
  183. data/lib/hecks/fuzzing/self_consistency.rb +676 -0
  184. data/lib/hecks/fuzzing/sequence_generator/adversary.rb +526 -0
  185. data/lib/hecks/fuzzing/sequence_generator/catalog.rb +101 -30
  186. data/lib/hecks/fuzzing/sequence_generator/outcome_tracker.rb +55 -8
  187. data/lib/hecks/fuzzing/sequence_generator/picker.rb +31 -11
  188. data/lib/hecks/fuzzing/sequence_generator/step_builder.rb +123 -32
  189. data/lib/hecks/fuzzing/sequence_generator.rb +152 -31
  190. data/lib/hecks/fuzzing/shrinker.rb +197 -0
  191. data/lib/hecks/fuzzing/structural_skips.rb +39 -0
  192. data/lib/hecks/fuzzing/sweep_depth.rb +53 -0
  193. data/lib/hecks/fuzzing/target_capabilities.rb +180 -0
  194. data/lib/hecks/fuzzing/value_generator.rb +66 -14
  195. data/lib/hecks/fuzzing.rb +11 -0
  196. data/lib/hecks/grammar/evolve.rb +10 -10
  197. data/lib/hecks/grammar.rb +7 -7
  198. data/lib/hecks/ir.rb +13 -13
  199. data/lib/hecks/language/bluebook/bluebook.bluebook +41 -0
  200. data/lib/hecks/language/bluebook/policy.bluebook +11 -1
  201. data/lib/hecks/language/bluebook/vocabulary.bluebook +365 -15
  202. data/lib/hecks/language/oidc.json +5 -0
  203. data/lib/hecks/literal.rb +9 -9
  204. data/lib/hecks/naming.rb +89 -21
  205. data/lib/hecks/ports/access_control.rb +58 -2
  206. data/lib/hecks/ports/agent/answers.rb +83 -6
  207. data/lib/hecks/ports/agent.rb +119 -35
  208. data/lib/hecks/ports/authentication.rb +44 -4
  209. data/lib/hecks/ports/authorization.rb +53 -11
  210. data/lib/hecks/ports/clock.rb +42 -23
  211. data/lib/hecks/ports/extraction.rb +16 -0
  212. data/lib/hecks/ports/identity_assignment.rb +24 -2
  213. data/lib/hecks/ports/identity_generation.rb +17 -3
  214. data/lib/hecks/ports/identity_resolution.rb +18 -1
  215. data/lib/hecks/ports/loading.rb +4 -0
  216. data/lib/hecks/ports/persistence/append_only.rb +172 -8
  217. data/lib/hecks/ports/persistence/binding_policy.rb +34 -0
  218. data/lib/hecks/ports/persistence/codec_boundary.rb +178 -0
  219. data/lib/hecks/ports/persistence/execution.rb +4 -0
  220. data/lib/hecks/ports/persistence/null_saga_store.rb +12 -1
  221. data/lib/hecks/ports/persistence/plugin.rb +42 -4
  222. data/lib/hecks/ports/persistence/plugins/era/era_check.rb +218 -25
  223. data/lib/hecks/ports/persistence/plugins/era/era_guard/shape_diff.rb +77 -9
  224. data/lib/hecks/ports/persistence/plugins/era/era_guard.rb +81 -24
  225. data/lib/hecks/ports/persistence/plugins/era/era_tamper.rb +29 -18
  226. data/lib/hecks/ports/persistence/plugins/era/lineage.rb +144 -60
  227. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/era_store.rb +103 -8
  228. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/field_cache.rb +98 -23
  229. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/head_compiler.rb +282 -109
  230. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/mint_transaction.rb +63 -25
  231. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/provisioning.rb +160 -58
  232. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/resumable_backfill.rb +51 -28
  233. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/tail_merge.rb +28 -5
  234. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/transform_installer.rb +25 -12
  235. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage.rb +129 -34
  236. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/coverage_check.rb +51 -6
  237. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/era_resolver.rb +44 -6
  238. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/merge_coordinator.rb +16 -0
  239. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/minter.rb +57 -4
  240. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager.rb +25 -2
  241. data/lib/hecks/ports/persistence/plugins/era/postgres_era.rb +338 -83
  242. data/lib/hecks/ports/persistence/plugins/era/storage_shape.rb +68 -10
  243. data/lib/hecks/ports/persistence/plugins/era/translation/audit/approval_digest.rb +9 -3
  244. data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_one.rb +9 -2
  245. data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_two.rb +42 -8
  246. data/lib/hecks/ports/persistence/plugins/era/translation/audit/unfed_report.rb +16 -1
  247. data/lib/hecks/ports/persistence/plugins/era/translation/audit.rb +36 -5
  248. data/lib/hecks/ports/persistence/plugins/era/translation/reattest.rb +23 -3
  249. data/lib/hecks/ports/persistence/plugins/era/translation/rule_compiler.rb +18 -19
  250. data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/differ.rb +5 -5
  251. data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/writer.rb +1 -1
  252. data/lib/hecks/ports/persistence/plugins/era/translation/scaffold.rb +2 -2
  253. data/lib/hecks/ports/persistence/plugins/era.rb +12 -2
  254. data/lib/hecks/ports/persistence/remote_runtime.rb +9 -2
  255. data/lib/hecks/ports/persistence/repository_factory.rb +29 -6
  256. data/lib/hecks/ports/persistence/state_codec.rb +319 -0
  257. data/lib/hecks/ports/persistence.rb +36 -1
  258. data/lib/hecks/ports/projection.rb +61 -7
  259. data/lib/hecks/ports/query/in_memory.rb +3 -3
  260. data/lib/hecks/ports/query/ordering.rb +6 -6
  261. data/lib/hecks/ports/query.rb +35 -0
  262. data/lib/hecks/projections/bootstrap_table.rb +112 -0
  263. data/lib/hecks/projections/diagrams.rb +75 -75
  264. data/lib/hecks/projections/glossary/html.rb +250 -0
  265. data/lib/hecks/projections/glossary/markdown.rb +105 -0
  266. data/lib/hecks/projections/glossary/mermaid.rb +110 -0
  267. data/lib/hecks/projections/glossary/page.css +271 -0
  268. data/lib/hecks/projections/glossary/page.js +72 -0
  269. data/lib/hecks/projections/glossary/sections.rb +17 -0
  270. data/lib/hecks/projections/glossary/sentences.rb +205 -0
  271. data/lib/hecks/projections/glossary.rb +214 -286
  272. data/lib/hecks/projections/ir.rb +1 -1
  273. data/lib/hecks/projections/model/deviations.rb +18 -17
  274. data/lib/hecks/projections/model.rb +25 -21
  275. data/lib/hecks/projections/oidc.rb +7 -7
  276. data/lib/hecks/projections/parser_table.rb +5 -5
  277. data/lib/hecks/projections/reference.rb +3 -3
  278. data/lib/hecks/projections/rust_vocabulary.rb +443 -0
  279. data/lib/hecks/projections/shape.rb +2 -2
  280. data/lib/hecks/projections/statements.rb +11 -11
  281. data/lib/hecks/projections/vocabulary.rb +9 -9
  282. data/lib/hecks/projections.rb +5 -3
  283. data/lib/hecks/projector/cli_projector.rb +29 -29
  284. data/lib/hecks/projector/docs_projector.rb +13 -13
  285. data/lib/hecks/projector/exporter.rb +42 -21
  286. data/lib/hecks/projector/ir_projector.rb +1 -1
  287. data/lib/hecks/projector/narrate_projector.rb +15 -22
  288. data/lib/hecks/projector/target.rb +13 -13
  289. data/lib/hecks/projector.rb +15 -15
  290. data/lib/hecks/query_ir.rb +47 -47
  291. data/lib/hecks/query_specification/common/comparators.rb +19 -3
  292. data/lib/hecks/query_specification/common/comparison.rb +132 -24
  293. data/lib/hecks/query_specification/common/dsl.rb +65 -9
  294. data/lib/hecks/query_specification/common/null_policy.rb +57 -13
  295. data/lib/hecks/query_specification/common/null_semantics.rb +4 -0
  296. data/lib/hecks/query_specification/common/options.rb +25 -0
  297. data/lib/hecks/query_specification/field_path.rb +69 -15
  298. data/lib/hecks/query_specification/hop_path.rb +57 -20
  299. data/lib/hecks/query_specification/read_model/specification.rb +4 -0
  300. data/lib/hecks/rendering.rb +3 -3
  301. data/lib/hecks/router/namespace_installer.rb +3 -3
  302. data/lib/hecks/router.rb +1 -1
  303. data/lib/hecks/runtime/aggregate_lock.rb +11 -11
  304. data/lib/hecks/runtime/boot_gates.rb +3 -3
  305. data/lib/hecks/runtime/caller.rb +8 -8
  306. data/lib/hecks/runtime/capability_graph.rb +2 -2
  307. data/lib/hecks/runtime/command_interpreter/argument_gate.rb +22 -25
  308. data/lib/hecks/runtime/command_interpreter/mutation_applier.rb +64 -67
  309. data/lib/hecks/runtime/command_interpreter.rb +159 -102
  310. data/lib/hecks/runtime/command_rules/admissibility.rb +69 -69
  311. data/lib/hecks/runtime/command_rules/arithmetic.rb +137 -91
  312. data/lib/hecks/runtime/command_rules/authorization.rb +38 -17
  313. data/lib/hecks/runtime/command_rules/emission.rb +18 -1
  314. data/lib/hecks/runtime/command_rules/references.rb +94 -19
  315. data/lib/hecks/runtime/command_rules.rb +3 -0
  316. data/lib/hecks/runtime/dependency_planning.rb +11 -11
  317. data/lib/hecks/runtime/dispatcher.rb +283 -90
  318. data/lib/hecks/runtime/entity_element.rb +282 -46
  319. data/lib/hecks/runtime/entity_interpreter.rb +160 -69
  320. data/lib/hecks/runtime/errors.rb +19 -19
  321. data/lib/hecks/runtime/event.rb +6 -6
  322. data/lib/hecks/runtime/identity.rb +22 -22
  323. data/lib/hecks/runtime/instance.rb +39 -14
  324. data/lib/hecks/runtime/interpreting.rb +12 -12
  325. data/lib/hecks/runtime/invocation.rb +276 -0
  326. data/lib/hecks/runtime/loader.rb +14 -14
  327. data/lib/hecks/runtime/outbox.rb +23 -23
  328. data/lib/hecks/runtime/policy_interpreter.rb +54 -54
  329. data/lib/hecks/runtime/port_operation_interpreter.rb +22 -19
  330. data/lib/hecks/runtime/query_interpreter.rb +111 -56
  331. data/lib/hecks/runtime/reaction_invocation.rb +76 -9
  332. data/lib/hecks/runtime/read_model_interpreter.rb +40 -40
  333. data/lib/hecks/runtime/rebuild_sweep.rb +4 -4
  334. data/lib/hecks/runtime/reference_hop.rb +6 -6
  335. data/lib/hecks/runtime/refusal_wording.rb +92 -112
  336. data/lib/hecks/runtime/registry/saga_persistence.rb +21 -21
  337. data/lib/hecks/runtime/registry/verification.rb +36 -26
  338. data/lib/hecks/runtime/registry.rb +56 -27
  339. data/lib/hecks/runtime/remote_dispatcher.rb +38 -23
  340. data/lib/hecks/runtime/routing.rb +10 -88
  341. data/lib/hecks/runtime/saga_interpreter/correlation.rb +17 -17
  342. data/lib/hecks/runtime/saga_interpreter.rb +93 -56
  343. data/lib/hecks/runtime/saga_pending_dispatch.rb +12 -12
  344. data/lib/hecks/runtime/tenant_check.rb +9 -9
  345. data/lib/hecks/runtime/tenant_scope.rb +5 -5
  346. data/lib/hecks/runtime/value/admission.rb +75 -30
  347. data/lib/hecks/runtime/value/coercion.rb +379 -226
  348. data/lib/hecks/runtime/value/entity_list_coercion.rb +248 -0
  349. data/lib/hecks/runtime/value.rb +28 -23
  350. data/lib/hecks/runtime.rb +7 -7
  351. data/lib/hecks/storehouse.rb +64 -64
  352. data/lib/hecks/version.rb +3 -3
  353. data/lib/hecks/vocabulary.rb +207 -5
  354. data/lib/hecks.rb +13 -11
  355. data/lib/rubocop/cop/hecks/fallback_hash_lookup.rb +11 -11
  356. data/lib/rubocop/cop/hecks/sequential_hash_rename_in_loop.rb +14 -12
  357. data/lib/rubocop/cop/hecks/thread_shared_ivar_mutation.rb +11 -11
  358. metadata +43 -2
@@ -1,7 +1,7 @@
1
1
  module RuboCop
2
2
  module Cop
3
3
  module Hecks
4
- # FLAGS PLAIN `@ivar` MUTATION inside a class this codebase already
4
+ # Flags plain `@ivar` mutation inside a class this codebase already
5
5
  # knows is a thread-shared singleton — one `Dispatcher`/`Registry`
6
6
  # instance lives for the life of a boot and is dispatched through
7
7
  # from every thread of a Puma worker pool (or any other multi-
@@ -9,29 +9,29 @@ module RuboCop
9
9
  # shared, mutable state with no per-thread or mutex-guarded
10
10
  # isolation at all.
11
11
  #
12
- # THIS IS THE MECHANICAL FOLLOW-UP to a real bug already fixed here
12
+ # This is the mechanical follow-up to a real bug already fixed here
13
13
  # (see `dispatcher.rb`'s own `#reenter` comment, and
14
14
  # `spec/runtime/dispatcher_spec.rb`): `@reaction_depth` used to be a
15
15
  # plain ivar on `Dispatcher`, so two threads' concurrent top-level
16
16
  # dispatches corrupted each other's view of "how deep into a
17
17
  # reaction cascade am I". The fix moved that one ivar to
18
18
  # `Thread.current[:hecks_reaction_depth]`. This cop exists so the
19
- # NEXT plain ivar someone adds to either class gets flagged before
19
+ # next plain ivar someone adds to either class gets flagged before
20
20
  # it becomes the next instance of the same bug, rather than after.
21
21
  #
22
- # SCOPED NARROWLY ON PURPOSE — by class name
22
+ # **Scoped narrowly on purpose** — by class name
23
23
  # (`Hecks::Runtime::Dispatcher`/`Hecks::Runtime::Registry`), not by
24
24
  # blanket-flagging every ivar mutation in the codebase. Most classes
25
- # in this codebase are NOT shared across threads (a fresh value
25
+ # in this codebase are not shared across threads (a fresh value
26
26
  # object per call, a builder used once at boot) and ivar mutation
27
27
  # there is completely ordinary Ruby with no hazard behind it at
28
28
  # all — flagging it everywhere would be noise nobody trusts, the
29
29
  # same reasoning `.rubocop.yml`'s own header gives for every other
30
30
  # cop in this repo.
31
31
  #
32
- # WHAT COUNTS AS "PLAIN": `@ivar = ...`, `@ivar ||= ...`, `@ivar +=
32
+ # What counts as "PLAIN": `@ivar = ...`, `@ivar ||= ...`, `@ivar +=
33
33
  # ...`, `@ivar << ...`, `@ivar[k] = v`. `initialize` is exempt — an
34
- # ivar being SET UP for the first time, before any other thread can
34
+ # ivar being set up for the first time, before any other thread can
35
35
  # possibly hold a reference to this object, is not the hazard (see
36
36
  # `Registry#initialize`'s own `@saga_mutex = Mutex.new`, which this
37
37
  # cop must not flag). `Thread.current[...]`-backed state and a
@@ -68,8 +68,8 @@ module RuboCop
68
68
  RESTRICT_ON_SEND = [:<<, :[]=].freeze
69
69
 
70
70
  def on_ivasgn(node)
71
- # A PLAIN `@x = 1` parses as `(ivasgn :@x (int 1))` — two
72
- # children. The commissioner also visits the BARE `(ivasgn :@x)`
71
+ # A plain `@x = 1` parses as `(ivasgn :@x (int 1))` — two
72
+ # children. The commissioner also visits the bare `(ivasgn :@x)`
73
73
  # node nested one level inside an `op_asgn`/`or_asgn` (`@x += 1`,
74
74
  # `@x ||= 1`) as its own `ivasgn` node with only one child — that
75
75
  # one is handled by `on_op_asgn`/`on_or_asgn` below instead, so
@@ -81,7 +81,7 @@ module RuboCop
81
81
 
82
82
  def on_op_asgn(node)
83
83
  # `@x += 1` parses as `(op_asgn (ivasgn :@x) :+ (int 1))` — the
84
- # target is an `ivasgn` node carrying JUST the name (no value
84
+ # target is an `ivasgn` node carrying just the name (no value
85
85
  # child, unlike a plain `@x = 1`), not an `ivar` node.
86
86
  ivar_node = node.children.first
87
87
  return unless ivar_node.is_a?(RuboCop::AST::Node) && ivar_node.ivasgn_type?
@@ -99,7 +99,7 @@ module RuboCop
99
99
  receiver = node.receiver
100
100
  return unless receiver
101
101
 
102
- # `@ivar << x` — the receiver IS the ivar.
102
+ # `@ivar << x` — the receiver is the ivar.
103
103
  # `@ivar[k] = v` — the receiver is a `send(@ivar, :[], k)`, whose
104
104
  # own receiver is the ivar (`node.receiver.receiver`).
105
105
  ivar_node = if receiver.ivar_type?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hecks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Young
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-09-09 00:00:00.000000000 Z
11
+ date: 2026-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prism
@@ -83,6 +83,7 @@ files:
83
83
  - lib/hecks/adapters/driven/sqlite/schema_builder.rb
84
84
  - lib/hecks/adapters/driven/system_clock.adapter
85
85
  - lib/hecks/adapters/driven/system_clock.rb
86
+ - lib/hecks/adapters/driving/github_webhook.rb
86
87
  - lib/hecks/behaviors.rb
87
88
  - lib/hecks/behaviors/dsl.rb
88
89
  - lib/hecks/behaviors/expectations.rb
@@ -113,6 +114,7 @@ files:
113
114
  - lib/hecks/bluebook/behaviour/read_model.rb
114
115
  - lib/hecks/bluebook/behaviour/traits.rb
115
116
  - lib/hecks/bluebook/behaviour/value_object.rb
117
+ - lib/hecks/bluebook/capabilities.rb
116
118
  - lib/hecks/bluebook/chapter.rb
117
119
  - lib/hecks/bluebook/command.rb
118
120
  - lib/hecks/bluebook/domain_port.rb
@@ -124,6 +126,7 @@ files:
124
126
  - lib/hecks/bluebook/dsl/binding_proxy.rb
125
127
  - lib/hecks/bluebook/dsl/bluebook_builder.rb
126
128
  - lib/hecks/bluebook/dsl/bluebook_builder/validation.rb
129
+ - lib/hecks/bluebook/dsl/bootstrap_table.rb
127
130
  - lib/hecks/bluebook/dsl/command_builder.rb
128
131
  - lib/hecks/bluebook/dsl/const_shim.rb
129
132
  - lib/hecks/bluebook/dsl/domain_port_builder.rb
@@ -181,10 +184,14 @@ files:
181
184
  - lib/hecks/bluebook/translation.rb
182
185
  - lib/hecks/bluebook/value_object.rb
183
186
  - lib/hecks/codemod.rb
187
+ - lib/hecks/codemod/legacy_dispatch_args.rb
188
+ - lib/hecks/codemod/legacy_dispatch_recorder.rb
184
189
  - lib/hecks/construct.rb
190
+ - lib/hecks/corpus.rb
185
191
  - lib/hecks/deploy/bluebook/deploy.bluebook
186
192
  - lib/hecks/deploy/bluebook/deploy.hecksagon
187
193
  - lib/hecks/deploy/oidc.json
194
+ - lib/hecks/deprecation.rb
188
195
  - lib/hecks/doc/reference.rb
189
196
  - lib/hecks/embryonaut_bluebook.rb
190
197
  - lib/hecks/facade.rb
@@ -223,20 +230,41 @@ files:
223
230
  - lib/hecks/freezer.rb
224
231
  - lib/hecks/fuzzing.rb
225
232
  - lib/hecks/fuzzing/bounded_exhaustive_expressions.rb
233
+ - lib/hecks/fuzzing/combination_miner.rb
234
+ - lib/hecks/fuzzing/concurrent_dispatch.rb
235
+ - lib/hecks/fuzzing/coverage_campaign.rb
236
+ - lib/hecks/fuzzing/differential.rb
237
+ - lib/hecks/fuzzing/domain_generator.rb
238
+ - lib/hecks/fuzzing/era_boundary.rb
239
+ - lib/hecks/fuzzing/form_census.rb
240
+ - lib/hecks/fuzzing/generated_domain_check.rb
226
241
  - lib/hecks/fuzzing/invalid_value_generator.rb
227
242
  - lib/hecks/fuzzing/isolated_boot.rb
243
+ - lib/hecks/fuzzing/nondeterministic.rb
244
+ - lib/hecks/fuzzing/persistence_parity.rb
228
245
  - lib/hecks/fuzzing/properties.rb
246
+ - lib/hecks/fuzzing/properties/corrections.rb
229
247
  - lib/hecks/fuzzing/properties/dispatch_and_mutations.rb
230
248
  - lib/hecks/fuzzing/properties/guards.rb
231
249
  - lib/hecks/fuzzing/properties/invariants_and_aggregation.rb
232
250
  - lib/hecks/fuzzing/properties/lifecycle_and_replay.rb
251
+ - lib/hecks/fuzzing/properties/outbox.rb
233
252
  - lib/hecks/fuzzing/properties/querying.rb
253
+ - lib/hecks/fuzzing/qa_settings.rb
234
254
  - lib/hecks/fuzzing/replay.rb
255
+ - lib/hecks/fuzzing/rotation_priority.rb
256
+ - lib/hecks/fuzzing/rust_gap_manifest.rb
257
+ - lib/hecks/fuzzing/self_consistency.rb
235
258
  - lib/hecks/fuzzing/sequence_generator.rb
259
+ - lib/hecks/fuzzing/sequence_generator/adversary.rb
236
260
  - lib/hecks/fuzzing/sequence_generator/catalog.rb
237
261
  - lib/hecks/fuzzing/sequence_generator/outcome_tracker.rb
238
262
  - lib/hecks/fuzzing/sequence_generator/picker.rb
239
263
  - lib/hecks/fuzzing/sequence_generator/step_builder.rb
264
+ - lib/hecks/fuzzing/shrinker.rb
265
+ - lib/hecks/fuzzing/structural_skips.rb
266
+ - lib/hecks/fuzzing/sweep_depth.rb
267
+ - lib/hecks/fuzzing/target_capabilities.rb
240
268
  - lib/hecks/fuzzing/value_generator.rb
241
269
  - lib/hecks/grammar.rb
242
270
  - lib/hecks/grammar/evolve.rb
@@ -298,6 +326,7 @@ files:
298
326
  - lib/hecks/ports/persistence.rb
299
327
  - lib/hecks/ports/persistence/append_only.rb
300
328
  - lib/hecks/ports/persistence/binding_policy.rb
329
+ - lib/hecks/ports/persistence/codec_boundary.rb
301
330
  - lib/hecks/ports/persistence/execution.rb
302
331
  - lib/hecks/ports/persistence/null_saga_store.rb
303
332
  - lib/hecks/ports/persistence/plugin.rb
@@ -337,20 +366,30 @@ files:
337
366
  - lib/hecks/ports/persistence/plugins/era/translation/scaffold/writer.rb
338
367
  - lib/hecks/ports/persistence/remote_runtime.rb
339
368
  - lib/hecks/ports/persistence/repository_factory.rb
369
+ - lib/hecks/ports/persistence/state_codec.rb
340
370
  - lib/hecks/ports/projection.port
341
371
  - lib/hecks/ports/projection.rb
342
372
  - lib/hecks/ports/query.rb
343
373
  - lib/hecks/ports/query/in_memory.rb
344
374
  - lib/hecks/ports/query/ordering.rb
345
375
  - lib/hecks/projections.rb
376
+ - lib/hecks/projections/bootstrap_table.rb
346
377
  - lib/hecks/projections/diagrams.rb
347
378
  - lib/hecks/projections/glossary.rb
379
+ - lib/hecks/projections/glossary/html.rb
380
+ - lib/hecks/projections/glossary/markdown.rb
381
+ - lib/hecks/projections/glossary/mermaid.rb
382
+ - lib/hecks/projections/glossary/page.css
383
+ - lib/hecks/projections/glossary/page.js
384
+ - lib/hecks/projections/glossary/sections.rb
385
+ - lib/hecks/projections/glossary/sentences.rb
348
386
  - lib/hecks/projections/ir.rb
349
387
  - lib/hecks/projections/model.rb
350
388
  - lib/hecks/projections/model/deviations.rb
351
389
  - lib/hecks/projections/oidc.rb
352
390
  - lib/hecks/projections/parser_table.rb
353
391
  - lib/hecks/projections/reference.rb
392
+ - lib/hecks/projections/rust_vocabulary.rb
354
393
  - lib/hecks/projections/shape.rb
355
394
  - lib/hecks/projections/statements.rb
356
395
  - lib/hecks/projections/vocabulary.rb
@@ -406,6 +445,7 @@ files:
406
445
  - lib/hecks/runtime/identity.rb
407
446
  - lib/hecks/runtime/instance.rb
408
447
  - lib/hecks/runtime/interpreting.rb
448
+ - lib/hecks/runtime/invocation.rb
409
449
  - lib/hecks/runtime/loader.rb
410
450
  - lib/hecks/runtime/outbox.rb
411
451
  - lib/hecks/runtime/policy_interpreter.rb
@@ -429,6 +469,7 @@ files:
429
469
  - lib/hecks/runtime/value.rb
430
470
  - lib/hecks/runtime/value/admission.rb
431
471
  - lib/hecks/runtime/value/coercion.rb
472
+ - lib/hecks/runtime/value/entity_list_coercion.rb
432
473
  - lib/hecks/runtime/value/invariant_violation.rb
433
474
  - lib/hecks/storehouse.rb
434
475
  - lib/hecks/version.rb