hecks 0.2.0 → 0.3.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 (408) hide show
  1. checksums.yaml +5 -5
  2. data/lib/hecks/adapters/driven/claude_code.adapter +3 -0
  3. data/lib/hecks/adapters/driven/claude_code.rb +127 -0
  4. data/lib/hecks/adapters/driven/d1.adapter +12 -0
  5. data/lib/hecks/adapters/driven/d1.rb +403 -0
  6. data/lib/hecks/adapters/driven/folder.adapter +3 -0
  7. data/lib/hecks/adapters/driven/folder.rb +199 -0
  8. data/lib/hecks/adapters/driven/google_authentication.adapter +3 -0
  9. data/lib/hecks/adapters/driven/google_authentication.rb +100 -0
  10. data/lib/hecks/adapters/driven/governance_authorization.adapter +3 -0
  11. data/lib/hecks/adapters/driven/governance_authorization.rb +62 -0
  12. data/lib/hecks/adapters/driven/heki/journal.rb +51 -0
  13. data/lib/hecks/adapters/driven/heki/saga_store.rb +0 -0
  14. data/lib/hecks/adapters/driven/heki/snapshot.rb +38 -0
  15. data/lib/hecks/adapters/driven/heki.adapter +4 -0
  16. data/lib/hecks/adapters/driven/heki.rb +148 -0
  17. data/lib/hecks/adapters/driven/identity_registry.adapter +3 -0
  18. data/lib/hecks/adapters/driven/identity_registry.rb +26 -0
  19. data/lib/hecks/adapters/driven/in_memory_ordering.rb +51 -0
  20. data/lib/hecks/adapters/driven/lambda/client.rb +63 -0
  21. data/lib/hecks/adapters/driven/lambda.adapter +4 -0
  22. data/lib/hecks/adapters/driven/lambda.rb +131 -0
  23. data/lib/hecks/adapters/driven/memory.adapter +3 -0
  24. data/lib/hecks/adapters/driven/memory.rb +103 -0
  25. data/lib/hecks/adapters/driven/mock_stripe_adapter.adapter +3 -0
  26. data/lib/hecks/adapters/driven/mock_stripe_adapter.rb +28 -0
  27. data/lib/hecks/adapters/driven/postgres/codec.rb +80 -0
  28. data/lib/hecks/adapters/driven/postgres/schema_builder.rb +168 -0
  29. data/lib/hecks/adapters/driven/postgres.adapter +5 -0
  30. data/lib/hecks/adapters/driven/postgres.rb +391 -0
  31. data/lib/hecks/adapters/driven/postgres_era/lineage/era_store.rb +171 -0
  32. data/lib/hecks/adapters/driven/postgres_era/lineage/field_cache.rb +190 -0
  33. data/lib/hecks/adapters/driven/postgres_era/lineage/head_compiler.rb +429 -0
  34. data/lib/hecks/adapters/driven/postgres_era/lineage/mint_transaction.rb +166 -0
  35. data/lib/hecks/adapters/driven/postgres_era/lineage/provisioning.rb +286 -0
  36. data/lib/hecks/adapters/driven/postgres_era/lineage/resumable_backfill.rb +168 -0
  37. data/lib/hecks/adapters/driven/postgres_era/lineage/tail_merge.rb +163 -0
  38. data/lib/hecks/adapters/driven/postgres_era/lineage/transform_installer.rb +114 -0
  39. data/lib/hecks/adapters/driven/postgres_era/lineage.rb +137 -0
  40. data/lib/hecks/adapters/driven/postgres_era/lineage_manager/coverage_check.rb +89 -0
  41. data/lib/hecks/adapters/driven/postgres_era/lineage_manager/era_resolver.rb +82 -0
  42. data/lib/hecks/adapters/driven/postgres_era/lineage_manager/merge_coordinator.rb +43 -0
  43. data/lib/hecks/adapters/driven/postgres_era/lineage_manager/minter.rb +132 -0
  44. data/lib/hecks/adapters/driven/postgres_era/lineage_manager.rb +74 -0
  45. data/lib/hecks/adapters/driven/postgres_era.adapter +6 -0
  46. data/lib/hecks/adapters/driven/postgres_era.rb +671 -0
  47. data/lib/hecks/adapters/driven/prism.adapter +3 -0
  48. data/lib/hecks/adapters/driven/prism.rb +80 -0
  49. data/lib/hecks/adapters/driven/secure_random_identity.adapter +3 -0
  50. data/lib/hecks/adapters/driven/secure_random_identity.rb +14 -0
  51. data/lib/hecks/adapters/driven/sql_query_builder.rb +221 -0
  52. data/lib/hecks/adapters/driven/sqlite/codec.rb +63 -0
  53. data/lib/hecks/adapters/driven/sqlite/projection.rb +105 -0
  54. data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +180 -0
  55. data/lib/hecks/adapters/driven/sqlite.adapter +9 -0
  56. data/lib/hecks/adapters/driven/sqlite.rb +285 -0
  57. data/lib/hecks/adapters/driven/system_clock.adapter +3 -0
  58. data/lib/hecks/adapters/driven/system_clock.rb +14 -0
  59. data/lib/hecks/adapters/driven.rb +36 -0
  60. data/lib/hecks/adapters.rb +6 -0
  61. data/lib/hecks/behaviors/dsl.rb +96 -0
  62. data/lib/hecks/behaviors/expectations.rb +280 -0
  63. data/lib/hecks/behaviors/ir.rb +31 -0
  64. data/lib/hecks/behaviors/rspec.rb +42 -0
  65. data/lib/hecks/behaviors/runner.rb +96 -0
  66. data/lib/hecks/behaviors.rb +25 -0
  67. data/lib/hecks/bluebook/aggregate.rb +108 -0
  68. data/lib/hecks/bluebook/assembly/aggregate_assembly.rb +134 -0
  69. data/lib/hecks/bluebook/assembly/build.rb +48 -0
  70. data/lib/hecks/bluebook/assembly/contract.rb +112 -0
  71. data/lib/hecks/bluebook/assembly/contracts.rb +409 -0
  72. data/lib/hecks/bluebook/assembly/marks.rb +227 -0
  73. data/lib/hecks/bluebook/assembly/specializer.rb +70 -0
  74. data/lib/hecks/bluebook/assembly.rb +78 -0
  75. data/lib/hecks/bluebook/attribute.rb +96 -0
  76. data/lib/hecks/bluebook/behaviour/aggregate.rb +83 -0
  77. data/lib/hecks/bluebook/behaviour/attribute.rb +27 -0
  78. data/lib/hecks/bluebook/behaviour/chapter.rb +72 -0
  79. data/lib/hecks/bluebook/behaviour/command.rb +116 -0
  80. data/lib/hecks/bluebook/behaviour/domain_port.rb +25 -0
  81. data/lib/hecks/bluebook/behaviour/entity.rb +59 -0
  82. data/lib/hecks/bluebook/behaviour/hexagon.rb +50 -0
  83. data/lib/hecks/bluebook/behaviour/lifecycle.rb +51 -0
  84. data/lib/hecks/bluebook/behaviour/policy.rb +52 -0
  85. data/lib/hecks/bluebook/behaviour/process_manager.rb +38 -0
  86. data/lib/hecks/bluebook/behaviour/query.rb +10 -0
  87. data/lib/hecks/bluebook/behaviour/read_model.rb +29 -0
  88. data/lib/hecks/bluebook/behaviour/traits.rb +81 -0
  89. data/lib/hecks/bluebook/behaviour/value_object.rb +33 -0
  90. data/lib/hecks/bluebook/chapter.rb +68 -0
  91. data/lib/hecks/bluebook/command.rb +124 -0
  92. data/lib/hecks/bluebook/domain_port.rb +102 -0
  93. data/lib/hecks/bluebook/dsl/adapter_builder.rb +34 -0
  94. data/lib/hecks/bluebook/dsl/aggregate_builder.rb +906 -0
  95. data/lib/hecks/bluebook/dsl/attribute_collector.rb +327 -0
  96. data/lib/hecks/bluebook/dsl/binding_proxy.rb +71 -0
  97. data/lib/hecks/bluebook/dsl/bluebook_builder.rb +1018 -0
  98. data/lib/hecks/bluebook/dsl/command_builder.rb +626 -0
  99. data/lib/hecks/bluebook/dsl/const_shim.rb +81 -0
  100. data/lib/hecks/bluebook/dsl/domain_port_builder.rb +79 -0
  101. data/lib/hecks/bluebook/dsl/entity_builder.rb +305 -0
  102. data/lib/hecks/bluebook/dsl/generic_dispatch.rb +366 -0
  103. data/lib/hecks/bluebook/dsl/hecksagon_builder.rb +163 -0
  104. data/lib/hecks/bluebook/dsl/identity_declaration.rb +191 -0
  105. data/lib/hecks/bluebook/dsl/lifecycle_builder.rb +44 -0
  106. data/lib/hecks/bluebook/dsl/malformed.rb +7 -0
  107. data/lib/hecks/bluebook/dsl/policy_builder.rb +120 -0
  108. data/lib/hecks/bluebook/dsl/port_builder.rb +30 -0
  109. data/lib/hecks/bluebook/dsl/port_operation_builder.rb +142 -0
  110. data/lib/hecks/bluebook/dsl/process_manager_builder.rb +207 -0
  111. data/lib/hecks/bluebook/dsl/query_builder.rb +113 -0
  112. data/lib/hecks/bluebook/dsl/read_model_builder.rb +233 -0
  113. data/lib/hecks/bluebook/dsl/rule_reference.rb +172 -0
  114. data/lib/hecks/bluebook/dsl/translation_builder.rb +243 -0
  115. data/lib/hecks/bluebook/dsl/value_object_builder.rb +178 -0
  116. data/lib/hecks/bluebook/dsl/word_gate.rb +221 -0
  117. data/lib/hecks/bluebook/dsl/world_builder.rb +77 -0
  118. data/lib/hecks/bluebook/dsl.rb +45 -0
  119. data/lib/hecks/bluebook/entity.rb +103 -0
  120. data/lib/hecks/bluebook/expression/canonical_form.rb +55 -0
  121. data/lib/hecks/bluebook/expression/evaluator.rb +261 -0
  122. data/lib/hecks/bluebook/expression/projection.json +170 -0
  123. data/lib/hecks/bluebook/expression/resolver/block_predicates.rb +233 -0
  124. data/lib/hecks/bluebook/expression/resolver.rb +630 -0
  125. data/lib/hecks/bluebook/expression.rb +13 -0
  126. data/lib/hecks/bluebook/hexagon.rb +60 -0
  127. data/lib/hecks/bluebook/lifecycle.rb +42 -0
  128. data/lib/hecks/bluebook/meta_validator/adapter_judge.rb +54 -0
  129. data/lib/hecks/bluebook/meta_validator/judge.rb +559 -0
  130. data/lib/hecks/bluebook/meta_validator/plan.rb +332 -0
  131. data/lib/hecks/bluebook/meta_validator/port_judge.rb +47 -0
  132. data/lib/hecks/bluebook/meta_validator/readings.rb +350 -0
  133. data/lib/hecks/bluebook/meta_validator/reconstruction.rb +312 -0
  134. data/lib/hecks/bluebook/meta_validator/shapes.rb +246 -0
  135. data/lib/hecks/bluebook/meta_validator/syntax_boot.rb +255 -0
  136. data/lib/hecks/bluebook/meta_validator/translation_judge.rb +138 -0
  137. data/lib/hecks/bluebook/meta_validator/world_judge.rb +78 -0
  138. data/lib/hecks/bluebook/meta_validator.rb +452 -0
  139. data/lib/hecks/bluebook/model_check.rb +318 -0
  140. data/lib/hecks/bluebook/pattern_subset.rb +120 -0
  141. data/lib/hecks/bluebook/policy.rb +41 -0
  142. data/lib/hecks/bluebook/process_manager.rb +86 -0
  143. data/lib/hecks/bluebook/project_discovery.rb +30 -0
  144. data/lib/hecks/bluebook/project_loader.rb +40 -0
  145. data/lib/hecks/bluebook/project_register.rb +82 -0
  146. data/lib/hecks/bluebook/query.rb +61 -0
  147. data/lib/hecks/bluebook/read_model.rb +109 -0
  148. data/lib/hecks/bluebook/reference.rb +74 -0
  149. data/lib/hecks/bluebook/smoke_test.rb +166 -0
  150. data/lib/hecks/bluebook/synthesizer.rb +95 -0
  151. data/lib/hecks/bluebook/translation.rb +92 -0
  152. data/lib/hecks/bluebook/value_object.rb +58 -0
  153. data/lib/hecks/bluebook.rb +74 -0
  154. data/lib/hecks/codemod.rb +342 -0
  155. data/lib/hecks/construct.rb +71 -0
  156. data/lib/hecks/deploy/bluebook/deploy.bluebook +219 -0
  157. data/lib/hecks/deploy/bluebook/deploy.hecksagon +4 -0
  158. data/lib/hecks/deploy/oidc.json +18 -0
  159. data/lib/hecks/doc/reference.rb +389 -0
  160. data/lib/hecks/embryonaut_bluebook.rb +75 -0
  161. data/lib/hecks/facade/cli_door.rb +116 -0
  162. data/lib/hecks/facade/cli_runner.rb +190 -0
  163. data/lib/hecks/facade/command_request.rb +105 -0
  164. data/lib/hecks/facade/handle.rb +173 -0
  165. data/lib/hecks/facade/json_door.rb +154 -0
  166. data/lib/hecks/facade/surface/aggregate_door.rb +185 -0
  167. data/lib/hecks/facade/surface/chapter.rb +107 -0
  168. data/lib/hecks/facade/surface.rb +48 -0
  169. data/lib/hecks/facade.rb +44 -0
  170. data/lib/hecks/forms/app.rb +300 -0
  171. data/lib/hecks/forms/command_form_renderer.rb +113 -0
  172. data/lib/hecks/forms/examples/banking_console.bluebook +3 -0
  173. data/lib/hecks/forms/field_renderer.rb +170 -0
  174. data/lib/hecks/forms/field_shape.rb +232 -0
  175. data/lib/hecks/forms/html.rb +53 -0
  176. data/lib/hecks/forms/index_renderer.rb +35 -0
  177. data/lib/hecks/forms/page.rb +157 -0
  178. data/lib/hecks/forms/params.rb +132 -0
  179. data/lib/hecks/forms/query_form_renderer.rb +114 -0
  180. data/lib/hecks/forms/record_renderer.rb +115 -0
  181. data/lib/hecks/forms/record_table.rb +63 -0
  182. data/lib/hecks/forms/reference_options.rb +30 -0
  183. data/lib/hecks/forms/value_object_shape.rb +46 -0
  184. data/lib/hecks/forms.rb +54 -0
  185. data/lib/hecks/fqn.rb +94 -0
  186. data/lib/hecks/framework/bluebook/compliance.bluebook +1 -0
  187. data/lib/hecks/framework/bluebook/console_settings.bluebook +489 -0
  188. data/lib/hecks/framework/bluebook/framework.hecksagon +32 -0
  189. data/lib/hecks/framework/bluebook/governance.bluebook +130 -0
  190. data/lib/hecks/framework/bluebook/identity.bluebook +90 -0
  191. data/lib/hecks/framework/oidc.json +39 -0
  192. data/lib/hecks/framework.rb +90 -0
  193. data/lib/hecks/freezer.rb +67 -0
  194. data/lib/hecks/fuzzing/invalid_value_generator.rb +86 -0
  195. data/lib/hecks/fuzzing/isolated_boot.rb +92 -0
  196. data/lib/hecks/fuzzing/properties.rb +1146 -0
  197. data/lib/hecks/fuzzing/replay.rb +635 -0
  198. data/lib/hecks/fuzzing/sequence_generator/catalog.rb +93 -0
  199. data/lib/hecks/fuzzing/sequence_generator/outcome_tracker.rb +54 -0
  200. data/lib/hecks/fuzzing/sequence_generator/picker.rb +96 -0
  201. data/lib/hecks/fuzzing/sequence_generator/step_builder.rb +185 -0
  202. data/lib/hecks/fuzzing/sequence_generator.rb +130 -0
  203. data/lib/hecks/fuzzing/value_generator.rb +177 -0
  204. data/lib/hecks/fuzzing.rb +12 -0
  205. data/lib/hecks/grammar/evolve.rb +291 -0
  206. data/lib/hecks/grammar/expression.bluebook +417 -0
  207. data/lib/hecks/grammar/expression_operators.json +1152 -0
  208. data/lib/hecks/grammar/grammar.hecksagon +20 -0
  209. data/lib/hecks/grammar/oidc.json +69 -0
  210. data/lib/hecks/grammar/translation.bluebook +203 -0
  211. data/lib/hecks/grammar.rb +178 -0
  212. data/lib/hecks/ir.rb +126 -0
  213. data/lib/hecks/language/adapter.bluebook +116 -0
  214. data/lib/hecks/language/bluebook/aggregate.bluebook +581 -0
  215. data/lib/hecks/language/bluebook/attaches/paging.bluebook +76 -0
  216. data/lib/hecks/language/bluebook/bluebook.bluebook +256 -0
  217. data/lib/hecks/language/bluebook/bluebook.hecksagon +24 -0
  218. data/lib/hecks/language/bluebook/command.bluebook +437 -0
  219. data/lib/hecks/language/bluebook/entity.bluebook +316 -0
  220. data/lib/hecks/language/bluebook/policy.bluebook +172 -0
  221. data/lib/hecks/language/bluebook/process_manager.bluebook +264 -0
  222. data/lib/hecks/language/bluebook/projection.bluebook +267 -0
  223. data/lib/hecks/language/bluebook/query.bluebook +245 -0
  224. data/lib/hecks/language/bluebook/shape.bluebook +292 -0
  225. data/lib/hecks/language/bluebook/syntax.bluebook +447 -0
  226. data/lib/hecks/language/bluebook/vocabulary.bluebook +364 -0
  227. data/lib/hecks/language/hecksagon/adapter_binding.bluebook +51 -0
  228. data/lib/hecks/language/hecksagon/domain_port.bluebook +76 -0
  229. data/lib/hecks/language/hecksagon/hecksagon.bluebook +131 -0
  230. data/lib/hecks/language/hecksagon/port_operation.bluebook +102 -0
  231. data/lib/hecks/language/oidc.json +313 -0
  232. data/lib/hecks/language/port.bluebook +92 -0
  233. data/lib/hecks/language/translation/translation.bluebook +110 -0
  234. data/lib/hecks/language/translation/translation_aggregate.bluebook +267 -0
  235. data/lib/hecks/language/world/wiring.bluebook +62 -0
  236. data/lib/hecks/language/world/world.bluebook +84 -0
  237. data/lib/hecks/literal.rb +125 -0
  238. data/lib/hecks/naming.rb +121 -0
  239. data/lib/hecks/ports/access_control.port +4 -0
  240. data/lib/hecks/ports/access_control.rb +62 -0
  241. data/lib/hecks/ports/agent/answers.rb +104 -0
  242. data/lib/hecks/ports/agent.port +4 -0
  243. data/lib/hecks/ports/agent.rb +167 -0
  244. data/lib/hecks/ports/authentication.port +4 -0
  245. data/lib/hecks/ports/authentication.rb +50 -0
  246. data/lib/hecks/ports/authorization.port +4 -0
  247. data/lib/hecks/ports/authorization.rb +59 -0
  248. data/lib/hecks/ports/clock.port +4 -0
  249. data/lib/hecks/ports/clock.rb +62 -0
  250. data/lib/hecks/ports/extraction.port +4 -0
  251. data/lib/hecks/ports/extraction.rb +37 -0
  252. data/lib/hecks/ports/identity_assignment.port +4 -0
  253. data/lib/hecks/ports/identity_assignment.rb +45 -0
  254. data/lib/hecks/ports/identity_generation.port +4 -0
  255. data/lib/hecks/ports/identity_generation.rb +49 -0
  256. data/lib/hecks/ports/identity_resolution.port +4 -0
  257. data/lib/hecks/ports/identity_resolution.rb +40 -0
  258. data/lib/hecks/ports/loading.port +4 -0
  259. data/lib/hecks/ports/loading.rb +13 -0
  260. data/lib/hecks/ports/persistence/append_only.rb +102 -0
  261. data/lib/hecks/ports/persistence/binding_policy.rb +56 -0
  262. data/lib/hecks/ports/persistence/execution.rb +18 -0
  263. data/lib/hecks/ports/persistence/lineage.rb +277 -0
  264. data/lib/hecks/ports/persistence/null_saga_store.rb +25 -0
  265. data/lib/hecks/ports/persistence/remote_runtime.rb +42 -0
  266. data/lib/hecks/ports/persistence/repository_factory.rb +30 -0
  267. data/lib/hecks/ports/persistence.port +4 -0
  268. data/lib/hecks/ports/persistence.rb +39 -0
  269. data/lib/hecks/ports/projection.port +4 -0
  270. data/lib/hecks/ports/projection.rb +76 -0
  271. data/lib/hecks/ports/query/in_memory.rb +60 -0
  272. data/lib/hecks/ports/query/ordering.rb +41 -0
  273. data/lib/hecks/ports/query.rb +36 -0
  274. data/lib/hecks/ports.rb +27 -0
  275. data/lib/hecks/projections/diagrams.rb +413 -0
  276. data/lib/hecks/projections/ir.rb +18 -0
  277. data/lib/hecks/projections/model/deviations.rb +98 -0
  278. data/lib/hecks/projections/model.rb +145 -0
  279. data/lib/hecks/projections/oidc.rb +110 -0
  280. data/lib/hecks/projections/parser_table.rb +159 -0
  281. data/lib/hecks/projections/reference.rb +38 -0
  282. data/lib/hecks/projections/shape.rb +31 -0
  283. data/lib/hecks/projections/statements.rb +110 -0
  284. data/lib/hecks/projections/vocabulary.rb +100 -0
  285. data/lib/hecks/projections.rb +32 -0
  286. data/lib/hecks/projector/cli_projector.rb +437 -0
  287. data/lib/hecks/projector/docs_projector.rb +321 -0
  288. data/lib/hecks/projector/exporter.rb +141 -0
  289. data/lib/hecks/projector/ir_projector.rb +18 -0
  290. data/lib/hecks/projector/narrate_projector.rb +243 -0
  291. data/lib/hecks/projector/target.rb +97 -0
  292. data/lib/hecks/projector.rb +186 -0
  293. data/lib/hecks/query_ir.rb +392 -0
  294. data/lib/hecks/query_specification/common/authorization_spec.rb +9 -0
  295. data/lib/hecks/query_specification/common/comparators.rb +25 -0
  296. data/lib/hecks/query_specification/common/comparison.rb +174 -0
  297. data/lib/hecks/query_specification/common/cursor_spec.rb +9 -0
  298. data/lib/hecks/query_specification/common/dsl.rb +58 -0
  299. data/lib/hecks/query_specification/common/inspection_spec.rb +9 -0
  300. data/lib/hecks/query_specification/common/limit_spec.rb +9 -0
  301. data/lib/hecks/query_specification/common/null_policy.rb +80 -0
  302. data/lib/hecks/query_specification/common/null_semantics.rb +11 -0
  303. data/lib/hecks/query_specification/common/offset_spec.rb +9 -0
  304. data/lib/hecks/query_specification/common/options.rb +32 -0
  305. data/lib/hecks/query_specification/common/order_by.rb +9 -0
  306. data/lib/hecks/query_specification/common/specification.rb +10 -0
  307. data/lib/hecks/query_specification/common/where_clause.rb +9 -0
  308. data/lib/hecks/query_specification/field_path.rb +89 -0
  309. data/lib/hecks/query_specification/hop_path.rb +130 -0
  310. data/lib/hecks/query_specification/read_model/specification.rb +18 -0
  311. data/lib/hecks/query_specification.rb +14 -0
  312. data/lib/hecks/rendering.rb +48 -0
  313. data/lib/hecks/router/namespace_installer.rb +157 -0
  314. data/lib/hecks/router.rb +70 -0
  315. data/lib/hecks/runtime/caller.rb +50 -0
  316. data/lib/hecks/runtime/capability_graph.rb +44 -0
  317. data/lib/hecks/runtime/command_interpreter/argument_gate.rb +124 -0
  318. data/lib/hecks/runtime/command_interpreter/mutation_applier.rb +248 -0
  319. data/lib/hecks/runtime/command_interpreter.rb +413 -0
  320. data/lib/hecks/runtime/command_rules/admissibility.rb +307 -0
  321. data/lib/hecks/runtime/command_rules/arithmetic.rb +254 -0
  322. data/lib/hecks/runtime/command_rules/authorization.rb +64 -0
  323. data/lib/hecks/runtime/command_rules/emission.rb +34 -0
  324. data/lib/hecks/runtime/command_rules/references.rb +181 -0
  325. data/lib/hecks/runtime/command_rules.rb +28 -0
  326. data/lib/hecks/runtime/dependency_planning.rb +231 -0
  327. data/lib/hecks/runtime/dispatcher.rb +286 -0
  328. data/lib/hecks/runtime/entity_element.rb +253 -0
  329. data/lib/hecks/runtime/entity_interpreter.rb +228 -0
  330. data/lib/hecks/runtime/era_check.rb +136 -0
  331. data/lib/hecks/runtime/era_guard/shape_diff.rb +128 -0
  332. data/lib/hecks/runtime/era_guard.rb +193 -0
  333. data/lib/hecks/runtime/era_tamper.rb +61 -0
  334. data/lib/hecks/runtime/errors.rb +100 -0
  335. data/lib/hecks/runtime/event.rb +51 -0
  336. data/lib/hecks/runtime/identity.rb +128 -0
  337. data/lib/hecks/runtime/instance.rb +120 -0
  338. data/lib/hecks/runtime/interpreting.rb +69 -0
  339. data/lib/hecks/runtime/loader.rb +143 -0
  340. data/lib/hecks/runtime/policy_interpreter.rb +366 -0
  341. data/lib/hecks/runtime/port_operation_interpreter.rb +210 -0
  342. data/lib/hecks/runtime/query_interpreter.rb +254 -0
  343. data/lib/hecks/runtime/reaction_invocation.rb +245 -0
  344. data/lib/hecks/runtime/read_model_interpreter.rb +266 -0
  345. data/lib/hecks/runtime/rebuild_sweep.rb +74 -0
  346. data/lib/hecks/runtime/reference_hop.rb +99 -0
  347. data/lib/hecks/runtime/refusal_wording.rb +124 -0
  348. data/lib/hecks/runtime/registry/saga_persistence.rb +70 -0
  349. data/lib/hecks/runtime/registry/verification.rb +158 -0
  350. data/lib/hecks/runtime/registry.rb +218 -0
  351. data/lib/hecks/runtime/remote_dispatcher.rb +143 -0
  352. data/lib/hecks/runtime/routing.rb +96 -0
  353. data/lib/hecks/runtime/saga_interpreter/correlation.rb +97 -0
  354. data/lib/hecks/runtime/saga_interpreter.rb +301 -0
  355. data/lib/hecks/runtime/storage_shape.rb +120 -0
  356. data/lib/hecks/runtime/tenant_check.rb +84 -0
  357. data/lib/hecks/runtime/tenant_scope.rb +55 -0
  358. data/lib/hecks/runtime/value/admission.rb +112 -0
  359. data/lib/hecks/runtime/value/coercion.rb +500 -0
  360. data/lib/hecks/runtime/value/invariant_violation.rb +5 -0
  361. data/lib/hecks/runtime/value.rb +125 -0
  362. data/lib/hecks/runtime.rb +95 -0
  363. data/lib/hecks/translation/audit/approval_digest.rb +31 -0
  364. data/lib/hecks/translation/audit/layer_one.rb +37 -0
  365. data/lib/hecks/translation/audit/layer_two.rb +77 -0
  366. data/lib/hecks/translation/audit/unfed_report.rb +42 -0
  367. data/lib/hecks/translation/audit.rb +70 -0
  368. data/lib/hecks/translation/reattest.rb +72 -0
  369. data/lib/hecks/translation/rule_compiler.rb +120 -0
  370. data/lib/hecks/translation/scaffold/differ.rb +183 -0
  371. data/lib/hecks/translation/scaffold/renderer.rb +41 -0
  372. data/lib/hecks/translation/scaffold/writer.rb +28 -0
  373. data/lib/hecks/translation/scaffold.rb +30 -0
  374. data/lib/hecks/translation.rb +11 -0
  375. data/lib/hecks/version.rb +16 -0
  376. data/lib/hecks/vocabulary.rb +213 -0
  377. data/lib/hecks.rb +118 -6
  378. metadata +401 -222
  379. data/bin/hecks +0 -7
  380. data/bin/hecks-package +0 -65
  381. data/bin/hecks_console +0 -12
  382. data/bin/hecks_serverless +0 -6
  383. data/lib/cli/build.rb +0 -14
  384. data/lib/cli/command_runner.rb +0 -28
  385. data/lib/cli/console.rb +0 -10
  386. data/lib/cli/generate.rb +0 -37
  387. data/lib/cli/hecks-cli.rb +0 -27
  388. data/lib/cli/test.rb +0 -57
  389. data/lib/console/commands.rb +0 -8
  390. data/lib/console/hecks-console.rb +0 -1
  391. data/lib/packager/README.md +0 -0
  392. data/lib/packager/app_runner.rb +0 -21
  393. data/lib/packager/args.rb +0 -26
  394. data/lib/packager/compatibility/fixnum.rb +0 -6
  395. data/lib/packager/hecks.rb +0 -39
  396. data/lib/packager/query_runner.rb +0 -21
  397. data/lib/packager/resources/Dockerfile +0 -11
  398. data/lib/packager/resources/app_binary +0 -7
  399. data/lib/packager/resources/bundle_config +0 -3
  400. data/lib/packager/resources/traveling-ruby-20150715-2.2.2-linux-x86_64.tar.gz +0 -0
  401. data/lib/packager/resources/traveling-ruby-20150715-2.2.2-osx.tar.gz +0 -0
  402. data/lib/serverless/Domain +0 -32
  403. data/lib/serverless/cli.rb +0 -75
  404. data/lib/serverless/resources/command_name.js +0 -5
  405. data/lib/serverless/resources/environment.js +0 -7
  406. data/lib/serverless/resources/handler.js.tt +0 -28
  407. data/lib/serverless/resources/run_binary.js +0 -22
  408. data/lib/serverless/resources/serverless.yml +0 -20
@@ -0,0 +1,417 @@
1
+
2
+ Hecks.bluebook "Expression" do
3
+ vision "The subset of regular Ruby a predicate is allowed to be — small enough that every target can evaluate it, and carried as canonical text so no two readers can disagree about what was said."
4
+ generic
5
+
6
+ aggregate "Operator" do
7
+ description "One admitted operation — its symbol, its precedence, and how it reads in every target that must evaluate it."
8
+
9
+ # WHAT IS NOT HERE, on purpose. The outer grammar
10
+ # has two rules that are not operators: parenthesization (a structural
11
+ # strip-and-recurse, no symbol of its own) and the bare-leaf fallback
12
+ # (whatever matches nothing else falls through to the inner grammar).
13
+ # Its inner grammar has three more: integer/float/string/bool/nil
14
+ # literals and the dotted-lookup fallback are TERMINAL productions —
15
+ # they recognize text, they do not combine operands, and they have
16
+ # nothing meaningful to render per target (a literal's spelling does
17
+ # not differ between targets the way an operation's might).
18
+ # Forcing them into this shape would stretch `renderings` and the
19
+ # Arity invariant past what they mean. They stay declared only in
20
+ # prose — named here rather than silently left out.
21
+ identified_by :symbol
22
+
23
+ attribute :symbol, OperatorSymbol
24
+ attribute :category, Category
25
+ attribute :precedence, Precedence
26
+ attribute :arity, Arity
27
+ attribute :grammar, Grammar
28
+ attribute :strategy, Strategy
29
+ attribute :position, Position
30
+ attribute :renderings, list_of(Rendering)
31
+
32
+ lifecycle :status, default: "proposed" do
33
+ transition "Admit" => "admitted", from: "proposed"
34
+ transition "Retire" => "retired", from: "admitted"
35
+ end
36
+
37
+ value_object "OperatorSymbol" do
38
+ attribute :value, String
39
+ invariant("an operator is written as something") { !value.to_s.empty? }
40
+ end
41
+
42
+ value_object "Category" do
43
+ attribute :value, String
44
+ invariant("an operator belongs to a category") { !value.to_s.empty? }
45
+ end
46
+
47
+ value_object "Precedence" do
48
+ attribute :value, Integer
49
+ invariant("precedence binds at some level") { value > 0 }
50
+ end
51
+
52
+ value_object "Arity" do
53
+ attribute :value, Integer
54
+ # WRITTEN ACROSS LINES ON PURPOSE, and this is the only predicate in the
55
+ # corpus that is. A CONTINUATION line is where extraction used to break:
56
+ # a naive line join reads `value > 0 && && value <= 3` — a different
57
+ # canonical form for the same source, waiting for the first multi-line
58
+ # rule anyone wrote. Every predicate here was kept on one line to dodge
59
+ # that. The join is continuation-aware now, so this case holds the fix:
60
+ # if it regresses, the canonical text of THIS invariant changes and the
61
+ # golden IR goes red.
62
+ invariant("an operator takes one, two or three operands") do
63
+ value > 0 &&
64
+ value <= 3
65
+ end
66
+ end
67
+
68
+ # OUTER checks a leaf against `.include?`/comparators/`!` before falling
69
+ # through to INNER's arithmetic/dotted-lookup grammar — two stacked
70
+ # grammars. Which one an operator belongs
71
+ # to is not derivable from its symbol alone (`+` reads like it could be
72
+ # either), so it is its own column rather than inferred.
73
+ value_object "Grammar" do
74
+ attribute :value, String
75
+ invariant("an operator belongs to one of the two stacked grammars") { !value.to_s.empty? }
76
+ end
77
+
78
+ # HOW the check recognizes this operator's text, not WHERE it binds
79
+ # (that's precedence) or WHEN it's tried (that's position). Four shapes
80
+ # cover every admitted operator: split at a top-level occurrence
81
+ # (`||`, comparators), strip a leading marker (`!`), strip a trailing
82
+ # suffix (`.empty?`), or match a call-with-argument pattern
83
+ # (`.include?(needle)`).
84
+ value_object "Strategy" do
85
+ attribute :value, String
86
+ invariant("an operator names how its check recognizes it") { !value.to_s.empty? }
87
+ end
88
+
89
+ # THE WITHIN-GRAMMAR CHECK ORDER — what precedence alone cannot say,
90
+ # since the six comparators all share one precedence tier and something
91
+ # still has to break the tie (grammar.md: `>=` before `<=` before `<`
92
+ # before `>` before `==` before `!=`, so `<` splitting does not fire
93
+ # inside `>=`). Scoped per `grammar`, mirroring Normalisation's own
94
+ # Position column below — each grammar starts its own count at 1.
95
+ value_object "Position" do
96
+ attribute :value, Integer
97
+ invariant("an operator sits somewhere in its grammar's check order") { value > 0 }
98
+ end
99
+
100
+ value_object "Target" do
101
+ attribute :value, String
102
+ end
103
+
104
+ value_object "Form" do
105
+ attribute :value, String
106
+ end
107
+
108
+ value_object "Rendering" do
109
+ attribute :target, String
110
+ attribute :form, String
111
+
112
+ invariant("a rendering must name its target") { !target.to_s.empty? }
113
+ invariant("a rendering must have a form") { !form.to_s.empty? }
114
+ end
115
+
116
+ command "Propose" do
117
+ role "Language designer"
118
+ goal "Put an operation forward for the sublanguage"
119
+
120
+ attribute :symbol, OperatorSymbol
121
+ attribute :category, Category
122
+ attribute :precedence, Precedence
123
+ attribute :arity, Arity
124
+ attribute :grammar, Grammar
125
+ attribute :strategy, Strategy
126
+ attribute :position, Position
127
+
128
+ given("an operator belongs to the outer or the inner grammar") do
129
+ grammar.value == "outer" || grammar.value == "inner"
130
+ end
131
+
132
+ given("an operator's check strategy is one the parser actually has") { strategy.value == "top_level_split" || strategy.value == "prefix_match" || strategy.value == "suffix_match" || strategy.value == "call_pattern_match" || strategy.value == "block_pattern_match" }
133
+
134
+ emits "OperatorProposed"
135
+ end
136
+
137
+ command "Render" do
138
+ role "Language designer"
139
+ goal "Declare how this operator reads in one target"
140
+
141
+ reference_to Operator
142
+ attribute :target, Target
143
+ attribute :form, Form
144
+
145
+ given("a retired operator takes no new renderings") { status != "retired" }
146
+
147
+ sets :renderings, append: { target: :target, form: :form }
148
+
149
+ emits "OperatorRendered"
150
+ end
151
+
152
+ command "Admit" do
153
+ role "Language designer"
154
+ goal "Accept the operation into the sublanguage"
155
+
156
+ reference_to Operator
157
+
158
+ given("an operator must read in every target before it is admitted") { renderings.size >= 1 }
159
+
160
+ emits "OperatorAdmitted"
161
+ end
162
+
163
+ command "Retire" do
164
+ role "Language designer"
165
+ goal "Remove an operation from the sublanguage"
166
+
167
+ reference_to Operator
168
+
169
+ emits "OperatorRetired"
170
+ end
171
+ end
172
+
173
+ aggregate "Normalisation" do
174
+ description "One rule that turns written source into canonical text — its boundary condition, where it sits in the order, and how it reads in every target that must apply it."
175
+
176
+ identified_by :name
177
+
178
+ attribute :name, RuleName
179
+ attribute :strategy, Strategy
180
+ attribute :source_token, SourceToken
181
+ attribute :replacement, Replacement
182
+ attribute :boundary, Boundary
183
+ attribute :position, Position
184
+ attribute :readings, list_of(Reading)
185
+
186
+ lifecycle :status, default: "proposed" do
187
+ transition "Admit" => "admitted", from: "proposed"
188
+ transition "Retire" => "retired", from: "admitted"
189
+ end
190
+
191
+ value_object "RuleName" do
192
+ attribute :value, String
193
+ invariant("a rule is named") { !value.to_s.empty? }
194
+ end
195
+
196
+ value_object "Strategy" do
197
+ attribute :value, String
198
+ invariant("a rule names a strategy") { !value.to_s.empty? }
199
+ end
200
+
201
+ value_object "SourceToken" do
202
+ attribute :value, String
203
+ end
204
+
205
+ value_object "Replacement" do
206
+ attribute :value, String
207
+ end
208
+
209
+ value_object "Boundary" do
210
+ attribute :value, String, default: "none"
211
+ invariant("a boundary condition is named") { !value.to_s.empty? }
212
+ end
213
+
214
+ value_object "Position" do
215
+ attribute :value, Integer
216
+ invariant("a rule sits somewhere in the order") { value > 0 }
217
+ end
218
+
219
+ value_object "Target" do
220
+ attribute :value, String
221
+ end
222
+
223
+ value_object "Form" do
224
+ attribute :value, String
225
+ end
226
+
227
+ value_object "Rule" do
228
+ attribute :strategy, String
229
+ attribute :source_token, String
230
+ attribute :replacement, String
231
+ attribute :boundary, String
232
+ attribute :position, Integer
233
+
234
+ member strategy: "collapse_whitespace", source_token: "", replacement: "", boundary: "none", position: 1
235
+ member strategy: "replace", source_token: ".length", replacement: ".size", boundary: "word", position: 2
236
+ end
237
+
238
+ value_object "Reading" do
239
+ attribute :target, String
240
+ attribute :form, String
241
+
242
+ invariant("a reading must name its target") { !target.to_s.empty? }
243
+ invariant("a reading must have a form") { !form.to_s.empty? }
244
+ end
245
+
246
+ command "Propose" do
247
+ role "Language designer"
248
+ goal "Put a normalisation rule forward for the canonical form"
249
+
250
+ attribute :name, RuleName
251
+ attribute :strategy, Strategy
252
+ attribute :source_token, SourceToken
253
+ attribute :replacement, Replacement
254
+ attribute :boundary, Boundary
255
+ attribute :position, Position, optional: true
256
+
257
+ given("a rule must name a linked strategy") do
258
+ strategy.value == "collapse_whitespace" || strategy.value == "replace"
259
+ end
260
+
261
+ given("a rule must state its boundary") { boundary.value == "none" || boundary.value == "word" }
262
+
263
+ emits "NormalisationProposed"
264
+ end
265
+
266
+ command "Read" do
267
+ role "Language designer"
268
+ goal "Declare how this rule reads in one target"
269
+
270
+ reference_to Normalisation
271
+ attribute :target, Target
272
+ attribute :form, Form
273
+
274
+ given("a retired rule takes no new readings") { status != "retired" }
275
+
276
+ sets :readings, append: { target: :target, form: :form }
277
+
278
+ emits "NormalisationRead"
279
+ end
280
+
281
+ command "Admit" do
282
+ role "Language designer"
283
+ goal "Accept the rule into the canonical form"
284
+
285
+ reference_to Normalisation
286
+
287
+ given("a rule must read in every target before it is admitted") { readings.size >= 1 }
288
+
289
+ emits "NormalisationAdmitted"
290
+ end
291
+
292
+ command "Retire" do
293
+ role "Language designer"
294
+ goal "Remove a rule from the canonical form"
295
+
296
+ reference_to Normalisation
297
+
298
+ emits "NormalisationRetired"
299
+ end
300
+ end
301
+
302
+ aggregate "Expression" do
303
+ description "One predicate extracted from regular Ruby — the source as written, the canonical text the evaluator runs, and the subject it reads against."
304
+
305
+ identified_by :canonical
306
+
307
+ attribute :description, Description
308
+ attribute :source, Source
309
+ attribute :canonical, Canonical
310
+ attribute :subject, Subject
311
+ attribute :role, ExpressionRole
312
+ attribute :references, list_of(Reference)
313
+
314
+ lifecycle :status, default: "extracted" do
315
+ transition "Admit" => "admitted", from: "extracted"
316
+ transition "Reject" => "rejected", from: "extracted"
317
+ end
318
+
319
+ value_object "Description" do
320
+ attribute :value, String
321
+ invariant("a predicate says what it is for") { !value.to_s.empty? }
322
+ end
323
+
324
+ value_object "Source" do
325
+ attribute :value, String
326
+ end
327
+
328
+ value_object "Canonical" do
329
+ attribute :value, String
330
+ end
331
+
332
+ value_object "Subject" do
333
+ attribute :value, String
334
+ invariant("a predicate reads against something") { !value.to_s.empty? }
335
+ end
336
+
337
+ value_object "ExpressionRole" do
338
+ attribute :value, String, default: "given"
339
+ invariant("a predicate plays a role") { !value.to_s.empty? }
340
+ end
341
+
342
+ value_object "ReferenceName" do
343
+ attribute :value, String
344
+ invariant("a reference must be named") { !value.to_s.empty? }
345
+ end
346
+
347
+ value_object "Kind" do
348
+ attribute :value, String
349
+ invariant("a reference is either an attribute or an argument") do
350
+ value.to_s == "attribute" || value.to_s == "argument"
351
+ end
352
+ end
353
+
354
+ value_object "Reason" do
355
+ attribute :value, String
356
+ invariant("a refusal gives a reason") { !value.to_s.empty? }
357
+ end
358
+
359
+ value_object "Reference" do
360
+ attribute :name, String
361
+ attribute :kind, String
362
+
363
+ invariant("a reference must be named") { !name.to_s.empty? }
364
+ invariant("a reference is either an attribute or an argument") do
365
+ kind.to_s == "attribute" || kind.to_s == "argument"
366
+ end
367
+ end
368
+
369
+ command "Extract" do
370
+ role "System"
371
+ goal "Lower a real Ruby predicate into the sublanguage"
372
+
373
+ attribute :description, Description, optional: true
374
+ attribute :source, Source
375
+ attribute :canonical, Canonical
376
+ attribute :subject, Subject
377
+
378
+ emits "ExpressionExtracted"
379
+ end
380
+
381
+ command "Note" do
382
+ role "System"
383
+ goal "Record a name the expression reads"
384
+
385
+ reference_to Expression
386
+ attribute :name, ReferenceName
387
+ attribute :kind, Kind
388
+
389
+ sets :references, append: { name: :name, kind: :kind }
390
+
391
+ emits "ReferenceNoted"
392
+ end
393
+
394
+ command "Admit" do
395
+ role "System"
396
+ goal "Accept the expression as evaluable by every target"
397
+
398
+ reference_to Expression
399
+
400
+ given("an expression must have canonical text") { !canonical.value.to_s.empty? }
401
+ given("an expression must know its subject") { !subject.value.to_s.empty? }
402
+
403
+ emits "ExpressionAdmitted"
404
+ end
405
+
406
+ command "Reject" do
407
+ role "System"
408
+ goal "Refuse a predicate that leaves the sublanguage"
409
+
410
+ reference_to Expression
411
+ attribute :reason, Reason
412
+
413
+ emits "ExpressionRejected"
414
+ end
415
+ end
416
+
417
+ end