hecks 3.9.1 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (504) hide show
  1. checksums.yaml +4 -4
  2. data/examples/pizzas/bluebook/pizzas.bluebook +29 -0
  3. data/examples/pizzas/bluebook/pizzas.hecksagon +7 -0
  4. data/exe/hecks +4 -4
  5. data/lib/hecks/adapters/driven/d1.rb +2 -10
  6. data/lib/hecks/adapters/driven/heki.adapter +1 -1
  7. data/lib/hecks/adapters/driven/heki.rb +2 -12
  8. data/lib/hecks/adapters/driven/lambda.adapter +1 -1
  9. data/lib/hecks/adapters/driven/lambda.rb +3 -18
  10. data/lib/hecks/adapters/driven/postgres.rb +4 -11
  11. data/lib/hecks/adapters/driven/sqlite.adapter +1 -1
  12. data/lib/hecks/adapters/driven/sqlite.rb +2 -10
  13. data/lib/hecks/adapters/driving/admission.rb +46 -0
  14. data/lib/hecks/adapters/driving/cli/nesting.rb +36 -0
  15. data/lib/hecks/adapters/driving/cli/shorthand.rb +88 -0
  16. data/lib/hecks/adapters/driving/cli.rb +127 -0
  17. data/lib/hecks/adapters/driving/cli_runner/answers.rb +160 -0
  18. data/lib/hecks/adapters/driving/cli_runner/resolution.rb +155 -0
  19. data/lib/hecks/adapters/driving/cli_runner/settling.rb +120 -0
  20. data/lib/hecks/adapters/driving/cli_runner/streaming.rb +93 -0
  21. data/lib/hecks/adapters/driving/cli_runner/suggestions.rb +47 -0
  22. data/lib/hecks/adapters/driving/cli_runner.rb +69 -0
  23. data/lib/hecks/adapters/driving/command_request.rb +121 -0
  24. data/lib/hecks/adapters/driving/handle.rb +214 -0
  25. data/lib/hecks/adapters/driving/json.rb +136 -0
  26. data/lib/hecks/adapters/driving/launcher_options.rb +267 -0
  27. data/lib/hecks/adapters/driving/mcp/properties.rb +49 -0
  28. data/lib/hecks/adapters/driving/mcp/tool_calls.rb +116 -0
  29. data/lib/hecks/adapters/driving/mcp/tool_definitions/auditing.rb +53 -0
  30. data/lib/hecks/adapters/driving/mcp/tool_definitions/calling.rb +71 -0
  31. data/lib/hecks/adapters/driving/mcp/tool_definitions/reading.rb +99 -0
  32. data/lib/hecks/adapters/driving/mcp/tool_definitions.rb +18 -0
  33. data/lib/hecks/adapters/driving/mcp.rb +159 -0
  34. data/lib/hecks/adapters/driving/mcp_guide_cache.rb +78 -0
  35. data/lib/hecks/adapters/driving/mcp_scope/argument_policy.rb +97 -0
  36. data/lib/hecks/adapters/driving/mcp_scope/env_problems.rb +69 -0
  37. data/lib/hecks/adapters/driving/mcp_scope/presenter.rb +83 -0
  38. data/lib/hecks/adapters/driving/mcp_scope.rb +213 -0
  39. data/lib/hecks/adapters/driving/ruby/aggregate_module.rb +171 -0
  40. data/lib/hecks/adapters/driving/ruby/chapter.rb +91 -0
  41. data/lib/hecks/adapters/driving/ruby.rb +83 -0
  42. data/lib/hecks/adapters/driving/usage_cache.rb +144 -0
  43. data/lib/hecks/{doors.rb → adapters/driving.rb} +10 -6
  44. data/lib/hecks/behaviors/expectations/boot.rb +1 -1
  45. data/lib/hecks/bench/ruby_runner.rb +1 -1
  46. data/lib/hecks/bluebook/ask_resolution.rb +130 -0
  47. data/lib/hecks/bluebook/assembly/aggregate_assembly.rb +8 -2
  48. data/lib/hecks/bluebook/assembly/contracts/rules.rb +4 -2
  49. data/lib/hecks/bluebook/assembly/contracts/structure.rb +3 -1
  50. data/lib/hecks/bluebook/assembly/marks.rb +1 -0
  51. data/lib/hecks/bluebook/attribute.rb +1 -1
  52. data/lib/hecks/bluebook/behaviour/command.rb +13 -8
  53. data/lib/hecks/bluebook/behaviour/policy.rb +30 -0
  54. data/lib/hecks/bluebook/capabilities/attribute_values.rb +72 -0
  55. data/lib/hecks/bluebook/capabilities.rb +91 -9
  56. data/lib/hecks/bluebook/domain_port.rb +16 -4
  57. data/lib/hecks/bluebook/dsl/adapter_builder.rb +18 -6
  58. data/lib/hecks/bluebook/dsl/binding_proxy.rb +13 -0
  59. data/lib/hecks/bluebook/dsl/bluebook_builder/validation/computed_sources.rb +98 -0
  60. data/lib/hecks/bluebook/dsl/bluebook_builder/validation/fan_out_rows.rb +42 -0
  61. data/lib/hecks/bluebook/dsl/bluebook_builder/validation/projected_fields.rb +14 -2
  62. data/lib/hecks/bluebook/dsl/bluebook_builder/validation/provisions.rb +69 -3
  63. data/lib/hecks/bluebook/dsl/bluebook_builder/validation/with_projections.rb +17 -10
  64. data/lib/hecks/bluebook/dsl/bluebook_builder/validation.rb +5 -0
  65. data/lib/hecks/bluebook/dsl/bootstrap_table.rb +2 -0
  66. data/lib/hecks/bluebook/dsl/command_builder/mutations.rb +8 -1
  67. data/lib/hecks/bluebook/dsl/command_builder/operands.rb +121 -0
  68. data/lib/hecks/bluebook/dsl/command_builder.rb +2 -0
  69. data/lib/hecks/bluebook/dsl/hecksagon_builder.rb +10 -1
  70. data/lib/hecks/bluebook/dsl/lifecycle_builder.rb +45 -2
  71. data/lib/hecks/bluebook/dsl/policy_builder.rb +47 -10
  72. data/lib/hecks/bluebook/dsl/rule_reference.rb +7 -4
  73. data/lib/hecks/bluebook/dsl/world_builder.rb +1 -1
  74. data/lib/hecks/bluebook/expression/ast_json/emitters.rb +6 -0
  75. data/lib/hecks/bluebook/expression/ast_json.rb +9 -6
  76. data/lib/hecks/bluebook/expression/ast_reader.rb +14 -9
  77. data/lib/hecks/bluebook/expression/projection.json +36 -0
  78. data/lib/hecks/bluebook/expression/resolver/operations.rb +31 -0
  79. data/lib/hecks/bluebook/expression/resolver/parsing.rb +38 -5
  80. data/lib/hecks/bluebook/expression/resolver/scanning.rb +22 -5
  81. data/lib/hecks/bluebook/expression/resolver/values.rb +10 -0
  82. data/lib/hecks/bluebook/expression/resolver.rb +20 -1
  83. data/lib/hecks/bluebook/hecksagon.rb +23 -3
  84. data/lib/hecks/bluebook/lifecycle.rb +22 -3
  85. data/lib/hecks/bluebook/meta_validator/adapter_judge.rb +13 -1
  86. data/lib/hecks/bluebook/meta_validator/modes.rb +4 -1
  87. data/lib/hecks/bluebook/meta_validator/readings.rb +18 -1
  88. data/lib/hecks/bluebook/meta_validator/reconstruction/heads.rb +2 -1
  89. data/lib/hecks/bluebook/meta_validator/shapes.rb +5 -0
  90. data/lib/hecks/bluebook/meta_validator/verdict_cache.rb +1 -1
  91. data/lib/hecks/bluebook/meta_validator.rb +12 -12
  92. data/lib/hecks/bluebook/model_check/ask_checks.rb +71 -0
  93. data/lib/hecks/bluebook/model_check/policy_checks.rb +2 -1
  94. data/lib/hecks/bluebook/model_check/reference_checks.rb +70 -0
  95. data/lib/hecks/bluebook/model_check.rb +8 -2
  96. data/lib/hecks/bluebook/policy.rb +4 -2
  97. data/lib/hecks/bluebook/smoke_test.rb +1 -1
  98. data/lib/hecks/bluebook/synthesizer.rb +2 -0
  99. data/lib/hecks/bluebook.rb +1 -0
  100. data/lib/hecks/cli/command_table.rb +1 -1
  101. data/lib/hecks/cli/console.rb +2 -1
  102. data/lib/hecks/cli/document.rb +1 -1
  103. data/lib/hecks/cli/launcher_words.rb +4 -4
  104. data/lib/hecks/cli/mcp.rb +4 -4
  105. data/lib/hecks/cli/project_cli/launcher_source.rb +2 -2
  106. data/lib/hecks/cli/project_cli/templates.rb +5 -5
  107. data/lib/hecks/cli/project_cli.rb +9 -6
  108. data/lib/hecks/cli/run.rb +2 -2
  109. data/lib/hecks/cli/smoke_http/checks.rb +4 -1
  110. data/lib/hecks/cli/smoke_http/transport.rb +3 -3
  111. data/lib/hecks/cli/smoke_http.rb +3 -0
  112. data/lib/hecks/codemod.rb +5 -2
  113. data/lib/hecks/corpus/routes.rb +7 -0
  114. data/lib/hecks/corpus/rust.rb +3 -2
  115. data/lib/hecks/deploy/bluebook/deploy.bluebook +124 -2
  116. data/lib/hecks/deploy/bluebook/deploy.hecksagon +8 -0
  117. data/lib/hecks/deploy/oidc.json +16 -3
  118. data/lib/hecks/doc/reference/rendering.rb +6 -3
  119. data/lib/hecks/forms/app/commands.rb +8 -7
  120. data/lib/hecks/forms/app/queries.rb +2 -1
  121. data/lib/hecks/forms/app.rb +1 -1
  122. data/lib/hecks/forms/record_renderer.rb +1 -1
  123. data/lib/hecks/framework/bluebook/privacy.bluebook +11 -0
  124. data/lib/hecks/fuzzing/concurrent_dispatch.rb +4 -1
  125. data/lib/hecks/fuzzing/failure_triage.rb +2 -1
  126. data/lib/hecks/fuzzing/mutation/run.rb +11 -4
  127. data/lib/hecks/fuzzing/properties/catalog.rb +6 -4
  128. data/lib/hecks/fuzzing/properties/guaranteed_by_construction.rb +18 -11
  129. data/lib/hecks/fuzzing/properties/guards.rb +1 -1
  130. data/lib/hecks/fuzzing/self_consistency/saga_redelivery.rb +1 -1
  131. data/lib/hecks/fuzzing/self_consistency.rb +6 -2
  132. data/lib/hecks/fuzzing/shrinker.rb +3 -1
  133. data/lib/hecks/fuzzing/value_generator.rb +19 -5
  134. data/lib/hecks/gate/stages.yml +4 -10
  135. data/lib/hecks/grammar/evolve.rb +1 -1
  136. data/lib/hecks/grammar/expression_operators.json +372 -0
  137. data/lib/hecks/grammar/operators.rb +3 -1
  138. data/lib/hecks/hecks/adapters/codebase/corpus_tasks.rb +10 -10
  139. data/lib/hecks/hecks/adapters/codebase/inspection/rubycritic.rb +35 -0
  140. data/lib/hecks/hecks/adapters/codebase/inspection.rb +104 -0
  141. data/lib/hecks/hecks/adapters/codebase/publishing.rb +2 -1
  142. data/lib/hecks/hecks/adapters/codebase/release_facts.rb +12 -2
  143. data/lib/hecks/hecks/adapters/codebase/source_tree.rb +2 -1
  144. data/lib/hecks/hecks/adapters/codebase/test_runner.rb +1 -1
  145. data/lib/hecks/hecks/adapters/cost_explorer.rb +8 -5
  146. data/lib/hecks/hecks/adapters/deploy_toolchain/clearing.rb +51 -0
  147. data/lib/hecks/hecks/adapters/deploy_toolchain/statuses.rb +2 -1
  148. data/lib/hecks/hecks/adapters/deploy_toolchain.rb +2 -0
  149. data/lib/hecks/hecks/adapters/finding_github.rb +13 -6
  150. data/lib/hecks/hecks/adapters/first_admin.rb +2 -2
  151. data/lib/hecks/hecks/adapters/github_rulesets.rb +6 -3
  152. data/lib/hecks/hecks/adapters/in_process_boot.rb +1 -1
  153. data/lib/hecks/hecks/adapters/journal_store/compaction.rb +1 -1
  154. data/lib/hecks/hecks/adapters/journal_store/edge_audit.rb +10 -20
  155. data/lib/hecks/hecks/adapters/journal_store/held_domain.rb +28 -5
  156. data/lib/hecks/hecks/adapters/local_files.rb +2 -2
  157. data/lib/hecks/hecks/adapters/rehearsal/audit_report.rb +107 -0
  158. data/lib/hecks/hecks/adapters/rehearsal/census.rb +71 -0
  159. data/lib/hecks/hecks/adapters/rehearsal/declaration.rb +133 -0
  160. data/lib/hecks/hecks/adapters/rehearsal/environment.rb +83 -0
  161. data/lib/hecks/hecks/adapters/rehearsal/inquiry.rb +142 -0
  162. data/lib/hecks/hecks/adapters/rehearsal/memory_store.rb +96 -0
  163. data/lib/hecks/hecks/adapters/rehearsal/postgres_census.rb +100 -0
  164. data/lib/hecks/hecks/adapters/rehearsal/postgres_reading.rb +69 -0
  165. data/lib/hecks/hecks/adapters/rehearsal/postgres_store.rb +129 -0
  166. data/lib/hecks/hecks/adapters/rehearsal/rows.rb +41 -0
  167. data/lib/hecks/hecks/adapters/rehearsal/rust_audit.rb +83 -0
  168. data/lib/hecks/hecks/adapters/rehearsal/subject.rb +104 -0
  169. data/lib/hecks/hecks/adapters/rehearsal.rb +54 -0
  170. data/lib/hecks/hecks/adapters/rehearsal_store.adapter +7 -0
  171. data/lib/hecks/hecks/adapters/rehearsal_store.rb +81 -0
  172. data/lib/hecks/hecks/adapters/site_toolchain/role_prober.rb +78 -0
  173. data/lib/hecks/hecks/adapters/site_toolchain.rb +29 -4
  174. data/lib/hecks/hecks/adapters/terminal.rb +13 -11
  175. data/lib/hecks/hecks/adapters/world_clearing.rb +65 -0
  176. data/lib/hecks/hecks/codebase.behaviors +13 -1
  177. data/lib/hecks/hecks/codebase.bluebook +239 -5
  178. data/lib/hecks/hecks/custodian.behaviors +24 -6
  179. data/lib/hecks/hecks/custodian.bluebook +6 -1227
  180. data/lib/hecks/hecks/deploy.behaviors +1 -1
  181. data/lib/hecks/hecks/deploy.world +1 -3
  182. data/lib/hecks/hecks/hecks.behaviors +1 -1
  183. data/lib/hecks/hecks/hecks.hecksagon +61 -18
  184. data/lib/hecks/hecks/hecks.world +11 -10
  185. data/lib/hecks/hecks/rehearsal.bluebook +477 -0
  186. data/lib/hecks/hecks/site.behaviors +1 -1
  187. data/lib/hecks/hecks/site.world +0 -1
  188. data/lib/hecks/hecks/tooling.bluebook +1238 -0
  189. data/lib/hecks/indifferent_key.rb +20 -0
  190. data/lib/hecks/language/adapter.bluebook +13 -3
  191. data/lib/hecks/language/bluebook/aggregate.bluebook +23 -0
  192. data/lib/hecks/language/bluebook/bluebook.bluebook +15 -0
  193. data/lib/hecks/language/bluebook/entity.bluebook +18 -0
  194. data/lib/hecks/language/bluebook/policy.bluebook +9 -1
  195. data/lib/hecks/language/bluebook/query.bluebook +1 -1
  196. data/lib/hecks/language/bluebook/vocabulary.bluebook +11 -4
  197. data/lib/hecks/language/hecksagon/domain_port.bluebook +1 -1
  198. data/lib/hecks/language/hecksagon/hecksagon.bluebook +22 -0
  199. data/lib/hecks/language/oidc.json +10 -0
  200. data/lib/hecks/language/port.bluebook +4 -4
  201. data/lib/hecks/literal.rb +12 -3
  202. data/lib/hecks/ports/key_vault.rb +7 -2
  203. data/lib/hecks/ports/persistence/plugins/era/era_check.rb +21 -10
  204. data/lib/hecks/ports/persistence/plugins/era/postgres_era/boot.rb +4 -2
  205. data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/era_resolver.rb +2 -1
  206. data/lib/hecks/ports/persistence/repository_factory.rb +6 -3
  207. data/lib/hecks/projections/deploy/box/templates/deploy-box.sh.tmpl +29 -0
  208. data/lib/hecks/projections/deploy/box/templates/deploy-service.sh.tmpl +1 -1
  209. data/lib/hecks/projections/deploy/fargate/settings/tuning.rb +15 -0
  210. data/lib/hecks/projections/deploy/fargate/settings.rb +3 -1
  211. data/lib/hecks/projections/deploy/fargate/stack/readers.rb +1 -0
  212. data/lib/hecks/projections/deploy/preview/preview.sh.erb +1 -1
  213. data/lib/hecks/projections/deploy/shared.rb +5 -2
  214. data/lib/hecks/projections/deploy/templates/fargate/Makefile.tmpl +7 -4
  215. data/lib/hecks/projections/model/deviations.rb +2 -2
  216. data/lib/hecks/projections/model.rb +2 -2
  217. data/lib/hecks/projections/oidc.rb +13 -1
  218. data/lib/hecks/projections/shape.rb +5 -2
  219. data/lib/hecks/projections/site/cms_editor/attributes.rb +95 -0
  220. data/lib/hecks/projections/site/cms_editor/blocks.rb +157 -0
  221. data/lib/hecks/projections/site/cms_editor/checks.rb +77 -0
  222. data/lib/hecks/projections/site/cms_editor/clearing.rb +70 -0
  223. data/lib/hecks/projections/site/cms_editor/color.rb +124 -0
  224. data/lib/hecks/projections/site/cms_editor/composition.rb +42 -0
  225. data/lib/hecks/projections/site/cms_editor/destructive.rb +61 -0
  226. data/lib/hecks/projections/site/cms_editor/drafts.rb +102 -0
  227. data/lib/hecks/projections/site/cms_editor/hints.rb +74 -0
  228. data/lib/hecks/projections/site/cms_editor/icons.rb +86 -0
  229. data/lib/hecks/projections/site/cms_editor/key_kinds.rb +31 -0
  230. data/lib/hecks/projections/site/cms_editor/limits.rb +72 -0
  231. data/lib/hecks/projections/site/cms_editor/media.rb +85 -0
  232. data/lib/hecks/projections/site/cms_editor/moment.rb +34 -0
  233. data/lib/hecks/projections/site/cms_editor/palette.rb +115 -0
  234. data/lib/hecks/projections/site/cms_editor/pickers.rb +85 -0
  235. data/lib/hecks/projections/site/cms_editor/pretty.rb +40 -0
  236. data/lib/hecks/projections/site/cms_editor/preview.rb +91 -0
  237. data/lib/hecks/projections/site/cms_editor/relations.rb +92 -0
  238. data/lib/hecks/projections/site/cms_editor/scale_checks.rb +66 -0
  239. data/lib/hecks/projections/site/cms_editor/scheduling.rb +150 -0
  240. data/lib/hecks/projections/site/cms_editor/schema.rb +161 -0
  241. data/lib/hecks/projections/site/cms_editor/setting.rb +130 -0
  242. data/lib/hecks/projections/site/cms_editor/targets.rb +86 -0
  243. data/lib/hecks/projections/site/cms_editor/templates/package.json.tmpl +36 -0
  244. data/lib/hecks/projections/site/cms_editor/templates/src/app.ts.tmpl +370 -0
  245. data/lib/hecks/projections/site/cms_editor/templates/src/assets.ts.tmpl +98 -0
  246. data/lib/hecks/projections/site/cms_editor/templates/src/auth/membership.ts.tmpl +87 -0
  247. data/lib/hecks/projections/site/cms_editor/templates/src/auth/session.ts.tmpl +36 -0
  248. data/lib/hecks/projections/site/cms_editor/templates/src/auth/sso.ts.tmpl +20 -0
  249. data/lib/hecks/projections/site/cms_editor/templates/src/browser/app.css.tmpl +412 -0
  250. data/lib/hecks/projections/site/cms_editor/templates/src/browser/autosave.js.tmpl +144 -0
  251. data/lib/hecks/projections/site/cms_editor/templates/src/browser/blocks.js.tmpl +500 -0
  252. data/lib/hecks/projections/site/cms_editor/templates/src/browser/body_doc.js.tmpl +175 -0
  253. data/lib/hecks/projections/site/cms_editor/templates/src/browser/body_editor.js.tmpl +418 -0
  254. data/lib/hecks/projections/site/cms_editor/templates/src/browser/epoch.js.tmpl +61 -0
  255. data/lib/hecks/projections/site/cms_editor/templates/src/browser/forms.js.tmpl +210 -0
  256. data/lib/hecks/projections/site/cms_editor/templates/src/browser/lists.js.tmpl +40 -0
  257. data/lib/hecks/projections/site/cms_editor/templates/src/browser/main.js.tmpl +26 -0
  258. data/lib/hecks/projections/site/cms_editor/templates/src/browser/media_picker.js.tmpl +232 -0
  259. data/lib/hecks/projections/site/cms_editor/templates/src/browser/moments.js.tmpl +73 -0
  260. data/lib/hecks/projections/site/cms_editor/templates/src/browser/pickers.js.tmpl +152 -0
  261. data/lib/hecks/projections/site/cms_editor/templates/src/browser/preview.js.tmpl +98 -0
  262. data/lib/hecks/projections/site/cms_editor/templates/src/browser/shell.js.tmpl +140 -0
  263. data/lib/hecks/projections/site/cms_editor/templates/src/browser/toast.js.tmpl +66 -0
  264. data/lib/hecks/projections/site/cms_editor/templates/src/choices.ts.tmpl +99 -0
  265. data/lib/hecks/projections/site/cms_editor/templates/src/commands.ts.tmpl +133 -0
  266. data/lib/hecks/projections/site/cms_editor/templates/src/config.ts.tmpl +29 -0
  267. data/lib/hecks/projections/site/cms_editor/templates/src/flash.ts.tmpl +52 -0
  268. data/lib/hecks/projections/site/cms_editor/templates/src/host.ts.tmpl +43 -0
  269. data/lib/hecks/projections/site/cms_editor/templates/src/media/handler.ts.tmpl +177 -0
  270. data/lib/hecks/projections/site/cms_editor/templates/src/media/multipart.ts.tmpl +53 -0
  271. data/lib/hecks/projections/site/cms_editor/templates/src/media/sniff.ts.tmpl +94 -0
  272. data/lib/hecks/projections/site/cms_editor/templates/src/media/storage.ts.tmpl +50 -0
  273. data/lib/hecks/projections/site/cms_editor/templates/src/names.ts.tmpl +36 -0
  274. data/lib/hecks/projections/site/cms_editor/templates/src/schema.ts.tmpl +214 -0
  275. data/lib/hecks/projections/site/cms_editor/templates/src/server.ts.tmpl +65 -0
  276. data/lib/hecks/projections/site/cms_editor/templates/src/ui/availability.ts.tmpl +15 -0
  277. data/lib/hecks/projections/site/cms_editor/templates/src/ui/block_list.js.tmpl +213 -0
  278. data/lib/hecks/projections/site/cms_editor/templates/src/ui/blocks.ts.tmpl +275 -0
  279. data/lib/hecks/projections/site/cms_editor/templates/src/ui/body_model.js.tmpl +123 -0
  280. data/lib/hecks/projections/site/cms_editor/templates/src/ui/body_parse.js.tmpl +320 -0
  281. data/lib/hecks/projections/site/cms_editor/templates/src/ui/detail.ts.tmpl +88 -0
  282. data/lib/hecks/projections/site/cms_editor/templates/src/ui/dialogs.ts.tmpl +43 -0
  283. data/lib/hecks/projections/site/cms_editor/templates/src/ui/fields.ts.tmpl +275 -0
  284. data/lib/hecks/projections/site/cms_editor/templates/src/ui/html.ts.tmpl +61 -0
  285. data/lib/hecks/projections/site/cms_editor/templates/src/ui/icons.ts.tmpl +15 -0
  286. data/lib/hecks/projections/site/cms_editor/templates/src/ui/input.ts.tmpl +92 -0
  287. data/lib/hecks/projections/site/cms_editor/templates/src/ui/links.ts.tmpl +100 -0
  288. data/lib/hecks/projections/site/cms_editor/templates/src/ui/moments.ts.tmpl +44 -0
  289. data/lib/hecks/projections/site/cms_editor/templates/src/ui/outline.ts.tmpl +63 -0
  290. data/lib/hecks/projections/site/cms_editor/templates/src/ui/pages.ts.tmpl +213 -0
  291. data/lib/hecks/projections/site/cms_editor/templates/src/ui/paging.ts.tmpl +82 -0
  292. data/lib/hecks/projections/site/cms_editor/templates/src/ui/pickers.ts.tmpl +110 -0
  293. data/lib/hecks/projections/site/cms_editor/templates/src/ui/preview.ts.tmpl +87 -0
  294. data/lib/hecks/projections/site/cms_editor/templates/src/ui/related.ts.tmpl +97 -0
  295. data/lib/hecks/projections/site/cms_editor/templates/src/ui/schedule.ts.tmpl +160 -0
  296. data/lib/hecks/projections/site/cms_editor/templates/src/ui/shell.ts.tmpl +211 -0
  297. data/lib/hecks/projections/site/cms_editor/templates/src/ui/table.ts.tmpl +151 -0
  298. data/lib/hecks/projections/site/cms_editor/templates/src/ui/theme.js.tmpl +16 -0
  299. data/lib/hecks/projections/site/cms_editor/templates/src/ui/values.ts.tmpl +69 -0
  300. data/lib/hecks/projections/site/cms_editor/templates/src/ui/words.ts.tmpl +97 -0
  301. data/lib/hecks/projections/site/cms_editor/templates/src/ui/world.ts.tmpl +35 -0
  302. data/lib/hecks/projections/site/cms_editor/templates/tsconfig.json.tmpl +17 -0
  303. data/lib/hecks/projections/site/cms_editor/theme.rb +29 -0
  304. data/lib/hecks/projections/site/cms_editor/theme_checks.rb +57 -0
  305. data/lib/hecks/projections/site/cms_editor.rb +133 -0
  306. data/lib/hecks/projections/site/role_probe.rb +74 -0
  307. data/lib/hecks/projector/cli_audience.rb +2 -1
  308. data/lib/hecks/projector/cli_projector/listing.rb +1 -1
  309. data/lib/hecks/projector/cli_projector/option_specs.rb +1 -1
  310. data/lib/hecks/projector/docs_projector/closing.rb +1 -1
  311. data/lib/hecks/projector/docs_projector.rb +1 -1
  312. data/lib/hecks/projector/exporter/bindings.rb +40 -10
  313. data/lib/hecks/projector/exporter/capability_values.rb +55 -0
  314. data/lib/hecks/projector/narrate_projector/reactions.rb +1 -1
  315. data/lib/hecks/projector/target.rb +11 -0
  316. data/lib/hecks/projector.rb +32 -5
  317. data/lib/hecks/quality_control/adapters/github_checks.rb +12 -8
  318. data/lib/hecks/quality_control/adapters/github_issues.rb +8 -4
  319. data/lib/hecks/quality_control/cli/qa_open_pr.rb +2 -2
  320. data/lib/hecks/quality_control/cli/qa_sweep/checks/shrinking.rb +1 -1
  321. data/lib/hecks/quality_control/cli/qa_sweep/finding_report.rb +1 -1
  322. data/lib/hecks/quality_control/cli/qa_sweep.rb +1 -1
  323. data/lib/hecks/quality_control/quality_control.bluebook +6 -2
  324. data/lib/hecks/release/approval.rb +64 -0
  325. data/lib/hecks/router/{door.rb → aggregate_reader.rb} +5 -4
  326. data/lib/hecks/router/namespace_installer.rb +16 -16
  327. data/lib/hecks/router.rb +1 -1
  328. data/lib/hecks/runtime/best_effort.rb +22 -0
  329. data/lib/hecks/runtime/command_interpreter/mutation_applier.rb +12 -2
  330. data/lib/hecks/runtime/command_interpreter.rb +3 -2
  331. data/lib/hecks/runtime/command_rules/emission.rb +1 -1
  332. data/lib/hecks/runtime/dispatcher.rb +4 -4
  333. data/lib/hecks/runtime/entity_element/location.rb +1 -1
  334. data/lib/hecks/runtime/event.rb +5 -0
  335. data/lib/hecks/runtime/identity.rb +7 -6
  336. data/lib/hecks/runtime/interpreting.rb +2 -1
  337. data/lib/hecks/runtime/invocation_builder.rb +1 -1
  338. data/lib/hecks/runtime/loader/boot_steps.rb +8 -5
  339. data/lib/hecks/runtime/loader.rb +10 -10
  340. data/lib/hecks/runtime/policy_interpreter/arguments.rb +7 -4
  341. data/lib/hecks/runtime/policy_interpreter/fan_out.rb +3 -3
  342. data/lib/hecks/runtime/policy_interpreter.rb +6 -6
  343. data/lib/hecks/runtime/port_operation_interpreter.rb +1 -1
  344. data/lib/hecks/runtime/reaction_invocation.rb +1 -1
  345. data/lib/hecks/runtime/rebuild_sweep.rb +11 -1
  346. data/lib/hecks/runtime/registry/ask_verification.rb +35 -0
  347. data/lib/hecks/runtime/registry/hecksagon_rules.rb +10 -0
  348. data/lib/hecks/runtime/registry/merging.rb +1 -1
  349. data/lib/hecks/runtime/registry/providers.rb +16 -0
  350. data/lib/hecks/runtime/registry/read_repository.rb +6 -4
  351. data/lib/hecks/runtime/registry/verification.rb +4 -1
  352. data/lib/hecks/runtime/registry/world_defaults.rb +29 -0
  353. data/lib/hecks/runtime/registry.rb +1 -1
  354. data/lib/hecks/runtime/saga_interpreter/compensation.rb +1 -1
  355. data/lib/hecks/runtime/saga_interpreter/delivery.rb +4 -4
  356. data/lib/hecks/runtime/saga_interpreter/transitions.rb +1 -1
  357. data/lib/hecks/runtime/saga_interpreter.rb +3 -3
  358. data/lib/hecks/runtime/tenant_check.rb +5 -4
  359. data/lib/hecks/runtime/value/coercion.rb +2 -2
  360. data/lib/hecks/runtime/value/validation.rb +16 -4
  361. data/lib/hecks/runtime.rb +9 -9
  362. data/lib/hecks/rust_build/project_rust/target_ir.rb +1 -1
  363. data/lib/hecks/rust_build/wasm.rb +1 -1
  364. data/lib/hecks/rust_build/wasm_browser.rb +1 -1
  365. data/lib/hecks/rust_build.rb +11 -0
  366. data/lib/hecks/served_options.rb +53 -0
  367. data/lib/hecks/site/bluebook/site.bluebook +29 -1
  368. data/lib/hecks/site/bluebook/site.ports.hecksagon +6 -0
  369. data/lib/hecks/storehouse/audit.rb +1 -1
  370. data/lib/hecks/storehouse/dispatching.rb +8 -6
  371. data/lib/hecks/storehouse/introspection.rb +2 -2
  372. data/lib/hecks/storehouse/querying.rb +6 -4
  373. data/lib/hecks/storehouse.rb +4 -4
  374. data/lib/hecks/tools/comment_style/source_file.rb +4 -1
  375. data/lib/hecks/tools/deploy_recipe_lint/fixtures.rb +4 -1
  376. data/lib/hecks/tools/lanes/rows.rb +6 -0
  377. data/lib/hecks/tools/oidc_manifests.rb +4 -5
  378. data/lib/hecks/tools/regeneration_run.rb +11 -4
  379. data/lib/hecks/tools/site_routes/cli.rb +1 -1
  380. data/lib/hecks/tools/site_routes/editor_files.rb +45 -0
  381. data/lib/hecks/tools/site_routes.rb +14 -7
  382. data/lib/hecks/tools/tenant_provisioning.rb +2 -2
  383. data/lib/hecks/tools/tools_doc.rb +4 -4
  384. data/lib/hecks/version.rb +1 -1
  385. data/lib/hecks/vocabulary.rb +4 -4
  386. data/lib/hecks.rb +15 -15
  387. data/lib/rubocop/cop/hecks/env_dump.rb +69 -0
  388. data/lib/rubocop/cop/hecks/monotonic_duration.rb +53 -0
  389. data/lib/rubocop/cop/hecks/no_wall_clock_in_runtime.rb +34 -0
  390. data/lib/rubocop/cop/hecks/raw_shell_interpolation.rb +79 -0
  391. data/lib/rubocop/cop/hecks/sleep_in_spec.rb +34 -0
  392. data/lib/rubocop/cop/hecks/swallowed_rescue.rb +37 -0
  393. data/lib/rubocop/cop/hecks/symbol_string_key_mix.rb +50 -0
  394. data/lib/rubocop/cop/hecks/untyped_raise.rb +37 -0
  395. data/prebuilt/05c358d38d661a3774f813d49c66f5b68939af94432d66257a56f49ee2598994.marshal +0 -0
  396. data/prebuilt/26c40c61f09b09b11651c64668eda3ceb180f83cf2a3802d3033d2fd99ac841b.marshal +0 -0
  397. data/prebuilt/verdicts-230ac18c25abfd3d92ede032bee2661a4c2cd2773ab0cf0e2ae52546ba2f7af9.json +1 -0
  398. data/rust/.gitignore +6 -0
  399. data/rust/Cargo.toml +9 -1
  400. data/rust/build/src/binding_pass.rs +103 -0
  401. data/rust/build/src/cargo_sync.rs +6 -0
  402. data/rust/build/src/lineage_pass.rs +3 -3
  403. data/rust/build/src/main.rs +17 -5
  404. data/rust/build/src/pipeline.rs +48 -5
  405. data/rust/build/src/seams_pass.rs +123 -0
  406. data/rust/build/src/translation_pass.rs +167 -0
  407. data/rust/codegen/src/asks.rs +103 -0
  408. data/rust/codegen/src/bridging.rs +1 -1
  409. data/rust/codegen/src/commands.rs +13 -8
  410. data/rust/codegen/src/constraints.rs +25 -0
  411. data/rust/codegen/src/domain_generator.rs +11 -9
  412. data/rust/codegen/src/expr_emitter.rs +13 -0
  413. data/rust/codegen/src/json_codec.rs +54 -15
  414. data/rust/codegen/src/main.rs +2 -1
  415. data/rust/codegen/src/mutations.rs +174 -4
  416. data/rust/codegen/src/naming.rs +30 -0
  417. data/rust/codegen/src/queries.rs +11 -2
  418. data/rust/codegen/src/reactions.rs +1 -1
  419. data/rust/codegen/src/types.rs +166 -8
  420. data/rust/host/HECKS_RELEASE +1 -1
  421. data/rust/host/src/api.rs +4 -4
  422. data/rust/host/src/bin/validate_harness.rs +43 -0
  423. data/rust/host/src/boundary_fuzz/expr_json.rs +2 -2
  424. data/rust/host/src/boundary_fuzz/ir.rs +1 -0
  425. data/rust/host/src/boundary_fuzz/server.rs +1 -1
  426. data/rust/host/src/checkout.rs +35 -19
  427. data/rust/host/src/commerce_ir.rs +408 -2
  428. data/rust/host/src/expr_json.rs +118 -0
  429. data/rust/host/src/mint.rs +1 -1
  430. data/rust/host/src/payments/tests.rs +27 -1
  431. data/rust/host/src/payments.rs +12 -4
  432. data/rust/host/src/query_step.rs +22 -4
  433. data/rust/host/src/reference_validate.rs +653 -108
  434. data/rust/host/src/resend.rs +2 -0
  435. data/rust/host/src/server.rs +19 -6
  436. data/rust/host/src/ui_schema.rs +132 -5
  437. data/rust/host/src/web/newsletter.rs +7 -8
  438. data/rust/host/src/web/newsletter_send.rs +38 -13
  439. data/rust/host/src/web/registrations.rs +229 -26
  440. data/rust/host/src/web.rs +3 -3
  441. data/rust/parser/src/emit.rs +38 -6
  442. data/rust/parser/src/expr/ast_json.rs +7 -1
  443. data/rust/parser/src/expr/resolver.rs +171 -6
  444. data/rust/parser/src/ir.rs +7 -0
  445. data/rust/parser/src/keywords.rs +24 -0
  446. data/rust/parser/src/main.rs +3 -0
  447. data/rust/parser/src/parse/aggregate.rs +2 -1
  448. data/rust/parser/src/parse/chapter.rs +2 -2
  449. data/rust/parser/src/parse/command.rs +2 -0
  450. data/rust/parser/src/parse/hecksagon.rs +5 -2
  451. data/rust/parser/src/parse/lifecycle.rs +81 -0
  452. data/rust/parser/src/parse/mod.rs +15 -1
  453. data/rust/parser/src/parse/policy.rs +13 -2
  454. data/rust/parser/src/parse/value_object.rs +13 -8
  455. data/rust/parser/src/ruby_value.rs +1 -1
  456. data/rust/src/exemplar/commands.rs +4 -4
  457. data/rust/src/exemplar/constraints.rs +1 -1
  458. data/rust/src/exemplar/json.rs +43 -1
  459. data/rust/src/kernel/cli.rs +7 -5
  460. data/rust/src/kernel/dispatch.rs +2 -2
  461. data/rust/src/kernel/dispatch_guard_tests.rs +1 -1
  462. data/rust/src/kernel/expr.rs +73 -4
  463. data/rust/src/kernel/expression_operators/arithmetic.rs +130 -5
  464. data/rust/src/kernel/expression_operators/presence.rs +41 -3
  465. data/rust/src/kernel/expression_operators/text.rs +26 -2
  466. data/rust/src/kernel/json.rs +15 -0
  467. data/rust/src/kernel/mod.rs +1 -1
  468. data/rust/src/kernel/orchestrate.rs +54 -5
  469. data/rust/src/kernel/orchestrate_guard_tests.rs +67 -0
  470. data/rust/src/kernel/pattern.rs +60 -0
  471. data/rust/src/kernel/reference_lookup.rs +90 -7
  472. metadata +174 -36
  473. data/lib/hecks/doors/cli_door/nesting.rb +0 -34
  474. data/lib/hecks/doors/cli_door/shorthand.rb +0 -85
  475. data/lib/hecks/doors/cli_door.rb +0 -124
  476. data/lib/hecks/doors/cli_runner/answers.rb +0 -138
  477. data/lib/hecks/doors/cli_runner/resolution.rb +0 -146
  478. data/lib/hecks/doors/cli_runner/settling.rb +0 -115
  479. data/lib/hecks/doors/cli_runner/streaming.rb +0 -90
  480. data/lib/hecks/doors/cli_runner/suggestions.rb +0 -43
  481. data/lib/hecks/doors/cli_runner.rb +0 -66
  482. data/lib/hecks/doors/command_request.rb +0 -119
  483. data/lib/hecks/doors/handle.rb +0 -208
  484. data/lib/hecks/doors/json_door.rb +0 -132
  485. data/lib/hecks/doors/launcher_options.rb +0 -247
  486. data/lib/hecks/doors/mcp_door/properties.rb +0 -47
  487. data/lib/hecks/doors/mcp_door/tool_calls.rb +0 -113
  488. data/lib/hecks/doors/mcp_door/tool_definitions/auditing.rb +0 -51
  489. data/lib/hecks/doors/mcp_door/tool_definitions/calling.rb +0 -69
  490. data/lib/hecks/doors/mcp_door/tool_definitions/reading.rb +0 -97
  491. data/lib/hecks/doors/mcp_door/tool_definitions.rb +0 -15
  492. data/lib/hecks/doors/mcp_door.rb +0 -156
  493. data/lib/hecks/doors/mcp_door_scope/argument_policy.rb +0 -92
  494. data/lib/hecks/doors/mcp_door_scope/env_problems.rb +0 -55
  495. data/lib/hecks/doors/mcp_door_scope/presenter.rb +0 -78
  496. data/lib/hecks/doors/mcp_door_scope.rb +0 -201
  497. data/lib/hecks/doors/mcp_guide_cache.rb +0 -75
  498. data/lib/hecks/doors/ruby_door/aggregate_door.rb +0 -162
  499. data/lib/hecks/doors/ruby_door/chapter.rb +0 -89
  500. data/lib/hecks/doors/ruby_door.rb +0 -80
  501. data/lib/hecks/doors/usage_cache.rb +0 -139
  502. data/prebuilt/0ee7f83cba59ce7d1c45c65ba166b071779f70143449f584f33ff7989f64eccb.marshal +0 -0
  503. data/prebuilt/6e4a6bcf0aa880e2e6b056e1846b70e5a768090b9dc998bbadeaf5d6bcfd3db8.marshal +0 -0
  504. data/prebuilt/verdicts-91aaf93ce8981bd9a754948f075d95650dc2ec6435015376f5c60992b36a24b1.json +0 -1
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: 3.9.1
4
+ version: 3.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Young
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-10-07 00:00:00.000000000 Z
11
+ date: 2026-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prism
@@ -117,7 +117,38 @@ files:
117
117
  - lib/hecks/adapters/driven/system_clock.rb
118
118
  - lib/hecks/adapters/driven/tenant_provisioner.adapter
119
119
  - lib/hecks/adapters/driven/tenant_provisioner.rb
120
+ - lib/hecks/adapters/driving.rb
121
+ - lib/hecks/adapters/driving/admission.rb
122
+ - lib/hecks/adapters/driving/cli.rb
123
+ - lib/hecks/adapters/driving/cli/nesting.rb
124
+ - lib/hecks/adapters/driving/cli/shorthand.rb
125
+ - lib/hecks/adapters/driving/cli_runner.rb
126
+ - lib/hecks/adapters/driving/cli_runner/answers.rb
127
+ - lib/hecks/adapters/driving/cli_runner/resolution.rb
128
+ - lib/hecks/adapters/driving/cli_runner/settling.rb
129
+ - lib/hecks/adapters/driving/cli_runner/streaming.rb
130
+ - lib/hecks/adapters/driving/cli_runner/suggestions.rb
131
+ - lib/hecks/adapters/driving/command_request.rb
120
132
  - lib/hecks/adapters/driving/github_webhook.rb
133
+ - lib/hecks/adapters/driving/handle.rb
134
+ - lib/hecks/adapters/driving/json.rb
135
+ - lib/hecks/adapters/driving/launcher_options.rb
136
+ - lib/hecks/adapters/driving/mcp.rb
137
+ - lib/hecks/adapters/driving/mcp/properties.rb
138
+ - lib/hecks/adapters/driving/mcp/tool_calls.rb
139
+ - lib/hecks/adapters/driving/mcp/tool_definitions.rb
140
+ - lib/hecks/adapters/driving/mcp/tool_definitions/auditing.rb
141
+ - lib/hecks/adapters/driving/mcp/tool_definitions/calling.rb
142
+ - lib/hecks/adapters/driving/mcp/tool_definitions/reading.rb
143
+ - lib/hecks/adapters/driving/mcp_guide_cache.rb
144
+ - lib/hecks/adapters/driving/mcp_scope.rb
145
+ - lib/hecks/adapters/driving/mcp_scope/argument_policy.rb
146
+ - lib/hecks/adapters/driving/mcp_scope/env_problems.rb
147
+ - lib/hecks/adapters/driving/mcp_scope/presenter.rb
148
+ - lib/hecks/adapters/driving/ruby.rb
149
+ - lib/hecks/adapters/driving/ruby/aggregate_module.rb
150
+ - lib/hecks/adapters/driving/ruby/chapter.rb
151
+ - lib/hecks/adapters/driving/usage_cache.rb
121
152
  - lib/hecks/behaviors.rb
122
153
  - lib/hecks/behaviors/dsl.rb
123
154
  - lib/hecks/behaviors/expectations.rb
@@ -141,6 +172,7 @@ files:
141
172
  - lib/hecks/bench/workload.rb
142
173
  - lib/hecks/bluebook.rb
143
174
  - lib/hecks/bluebook/aggregate.rb
175
+ - lib/hecks/bluebook/ask_resolution.rb
144
176
  - lib/hecks/bluebook/assembly.rb
145
177
  - lib/hecks/bluebook/assembly/aggregate_assembly.rb
146
178
  - lib/hecks/bluebook/assembly/build.rb
@@ -168,6 +200,7 @@ files:
168
200
  - lib/hecks/bluebook/behaviour/traits.rb
169
201
  - lib/hecks/bluebook/behaviour/value_object.rb
170
202
  - lib/hecks/bluebook/capabilities.rb
203
+ - lib/hecks/bluebook/capabilities/attribute_values.rb
171
204
  - lib/hecks/bluebook/chapter.rb
172
205
  - lib/hecks/bluebook/command.rb
173
206
  - lib/hecks/bluebook/domain_port.rb
@@ -187,8 +220,10 @@ files:
187
220
  - lib/hecks/bluebook/dsl/bluebook_builder.rb
188
221
  - lib/hecks/bluebook/dsl/bluebook_builder/pending_givens.rb
189
222
  - lib/hecks/bluebook/dsl/bluebook_builder/validation.rb
223
+ - lib/hecks/bluebook/dsl/bluebook_builder/validation/computed_sources.rb
190
224
  - lib/hecks/bluebook/dsl/bluebook_builder/validation/correlation_keys.rb
191
225
  - lib/hecks/bluebook/dsl/bluebook_builder/validation/event_shapes.rb
226
+ - lib/hecks/bluebook/dsl/bluebook_builder/validation/fan_out_rows.rb
192
227
  - lib/hecks/bluebook/dsl/bluebook_builder/validation/hop_tails.rb
193
228
  - lib/hecks/bluebook/dsl/bluebook_builder/validation/projected_fields.rb
194
229
  - lib/hecks/bluebook/dsl/bluebook_builder/validation/provisions.rb
@@ -199,6 +234,7 @@ files:
199
234
  - lib/hecks/bluebook/dsl/command_builder.rb
200
235
  - lib/hecks/bluebook/dsl/command_builder/implicit_attributes.rb
201
236
  - lib/hecks/bluebook/dsl/command_builder/mutations.rb
237
+ - lib/hecks/bluebook/dsl/command_builder/operands.rb
202
238
  - lib/hecks/bluebook/dsl/command_builder/owner.rb
203
239
  - lib/hecks/bluebook/dsl/command_builder/rules.rb
204
240
  - lib/hecks/bluebook/dsl/const_shim.rb
@@ -275,9 +311,11 @@ files:
275
311
  - lib/hecks/bluebook/meta_validator/verdict_cache/tagging.rb
276
312
  - lib/hecks/bluebook/meta_validator/world_judge.rb
277
313
  - lib/hecks/bluebook/model_check.rb
314
+ - lib/hecks/bluebook/model_check/ask_checks.rb
278
315
  - lib/hecks/bluebook/model_check/client_profile.rb
279
316
  - lib/hecks/bluebook/model_check/lifecycle_checks.rb
280
317
  - lib/hecks/bluebook/model_check/policy_checks.rb
318
+ - lib/hecks/bluebook/model_check/reference_checks.rb
281
319
  - lib/hecks/bluebook/model_check/saga_checks.rb
282
320
  - lib/hecks/bluebook/model_check/verbs.rb
283
321
  - lib/hecks/bluebook/pattern_subset.rb
@@ -376,36 +414,6 @@ files:
376
414
  - lib/hecks/doc/reference/harvester.rb
377
415
  - lib/hecks/doc/reference/readme.rb
378
416
  - lib/hecks/doc/reference/rendering.rb
379
- - lib/hecks/doors.rb
380
- - lib/hecks/doors/cli_door.rb
381
- - lib/hecks/doors/cli_door/nesting.rb
382
- - lib/hecks/doors/cli_door/shorthand.rb
383
- - lib/hecks/doors/cli_runner.rb
384
- - lib/hecks/doors/cli_runner/answers.rb
385
- - lib/hecks/doors/cli_runner/resolution.rb
386
- - lib/hecks/doors/cli_runner/settling.rb
387
- - lib/hecks/doors/cli_runner/streaming.rb
388
- - lib/hecks/doors/cli_runner/suggestions.rb
389
- - lib/hecks/doors/command_request.rb
390
- - lib/hecks/doors/handle.rb
391
- - lib/hecks/doors/json_door.rb
392
- - lib/hecks/doors/launcher_options.rb
393
- - lib/hecks/doors/mcp_door.rb
394
- - lib/hecks/doors/mcp_door/properties.rb
395
- - lib/hecks/doors/mcp_door/tool_calls.rb
396
- - lib/hecks/doors/mcp_door/tool_definitions.rb
397
- - lib/hecks/doors/mcp_door/tool_definitions/auditing.rb
398
- - lib/hecks/doors/mcp_door/tool_definitions/calling.rb
399
- - lib/hecks/doors/mcp_door/tool_definitions/reading.rb
400
- - lib/hecks/doors/mcp_door_scope.rb
401
- - lib/hecks/doors/mcp_door_scope/argument_policy.rb
402
- - lib/hecks/doors/mcp_door_scope/env_problems.rb
403
- - lib/hecks/doors/mcp_door_scope/presenter.rb
404
- - lib/hecks/doors/mcp_guide_cache.rb
405
- - lib/hecks/doors/ruby_door.rb
406
- - lib/hecks/doors/ruby_door/aggregate_door.rb
407
- - lib/hecks/doors/ruby_door/chapter.rb
408
- - lib/hecks/doors/usage_cache.rb
409
417
  - lib/hecks/embryonaut_bluebook.rb
410
418
  - lib/hecks/embryonaut_bluebook/lock.rb
411
419
  - lib/hecks/embryonaut_bluebook/manifest.rb
@@ -575,6 +583,8 @@ files:
575
583
  - lib/hecks/hecks/adapters/codebase/corpus_tasks.rb
576
584
  - lib/hecks/hecks/adapters/codebase/gate.rb
577
585
  - lib/hecks/hecks/adapters/codebase/gem_registry.rb
586
+ - lib/hecks/hecks/adapters/codebase/inspection.rb
587
+ - lib/hecks/hecks/adapters/codebase/inspection/rubycritic.rb
578
588
  - lib/hecks/hecks/adapters/codebase/kernel_tables.rb
579
589
  - lib/hecks/hecks/adapters/codebase/language.rb
580
590
  - lib/hecks/hecks/adapters/codebase/language/edits.rb
@@ -604,6 +614,7 @@ files:
604
614
  - lib/hecks/hecks/adapters/deploy_toolchain.adapter
605
615
  - lib/hecks/hecks/adapters/deploy_toolchain.rb
606
616
  - lib/hecks/hecks/adapters/deploy_toolchain/answers.rb
617
+ - lib/hecks/hecks/adapters/deploy_toolchain/clearing.rb
607
618
  - lib/hecks/hecks/adapters/deploy_toolchain/scripts.rb
608
619
  - lib/hecks/hecks/adapters/deploy_toolchain/statuses.rb
609
620
  - lib/hecks/hecks/adapters/finding_github.adapter
@@ -637,6 +648,21 @@ files:
637
648
  - lib/hecks/hecks/adapters/pg_admin/ownership.rb
638
649
  - lib/hecks/hecks/adapters/process_pool.adapter
639
650
  - lib/hecks/hecks/adapters/process_pool.rb
651
+ - lib/hecks/hecks/adapters/rehearsal.rb
652
+ - lib/hecks/hecks/adapters/rehearsal/audit_report.rb
653
+ - lib/hecks/hecks/adapters/rehearsal/census.rb
654
+ - lib/hecks/hecks/adapters/rehearsal/declaration.rb
655
+ - lib/hecks/hecks/adapters/rehearsal/environment.rb
656
+ - lib/hecks/hecks/adapters/rehearsal/inquiry.rb
657
+ - lib/hecks/hecks/adapters/rehearsal/memory_store.rb
658
+ - lib/hecks/hecks/adapters/rehearsal/postgres_census.rb
659
+ - lib/hecks/hecks/adapters/rehearsal/postgres_reading.rb
660
+ - lib/hecks/hecks/adapters/rehearsal/postgres_store.rb
661
+ - lib/hecks/hecks/adapters/rehearsal/rows.rb
662
+ - lib/hecks/hecks/adapters/rehearsal/rust_audit.rb
663
+ - lib/hecks/hecks/adapters/rehearsal/subject.rb
664
+ - lib/hecks/hecks/adapters/rehearsal_store.adapter
665
+ - lib/hecks/hecks/adapters/rehearsal_store.rb
640
666
  - lib/hecks/hecks/adapters/rust_toolchain.adapter
641
667
  - lib/hecks/hecks/adapters/rust_toolchain.rb
642
668
  - lib/hecks/hecks/adapters/rust_workspace.rb
@@ -645,8 +671,10 @@ files:
645
671
  - lib/hecks/hecks/adapters/site_toolchain.adapter
646
672
  - lib/hecks/hecks/adapters/site_toolchain.rb
647
673
  - lib/hecks/hecks/adapters/site_toolchain/prober.rb
674
+ - lib/hecks/hecks/adapters/site_toolchain/role_prober.rb
648
675
  - lib/hecks/hecks/adapters/terminal.adapter
649
676
  - lib/hecks/hecks/adapters/terminal.rb
677
+ - lib/hecks/hecks/adapters/world_clearing.rb
650
678
  - lib/hecks/hecks/codebase.behaviors
651
679
  - lib/hecks/hecks/codebase.bluebook
652
680
  - lib/hecks/hecks/context_map.hecksagon
@@ -660,8 +688,11 @@ files:
660
688
  - lib/hecks/hecks/hecks.bluebook
661
689
  - lib/hecks/hecks/hecks.hecksagon
662
690
  - lib/hecks/hecks/hecks.world
691
+ - lib/hecks/hecks/rehearsal.bluebook
663
692
  - lib/hecks/hecks/site.behaviors
664
693
  - lib/hecks/hecks/site.world
694
+ - lib/hecks/hecks/tooling.bluebook
695
+ - lib/hecks/indifferent_key.rb
665
696
  - lib/hecks/ir.rb
666
697
  - lib/hecks/kernel_capabilities.rb
667
698
  - lib/hecks/kernel_capabilities/templates.rb
@@ -1043,6 +1074,93 @@ files:
1043
1074
  - lib/hecks/projections/site/admin_cms/templates/sso.rb
1044
1075
  - lib/hecks/projections/site/admin_cms/templates/sso_tail.rb
1045
1076
  - lib/hecks/projections/site/admin_cms/templates/users.rb
1077
+ - lib/hecks/projections/site/cms_editor.rb
1078
+ - lib/hecks/projections/site/cms_editor/attributes.rb
1079
+ - lib/hecks/projections/site/cms_editor/blocks.rb
1080
+ - lib/hecks/projections/site/cms_editor/checks.rb
1081
+ - lib/hecks/projections/site/cms_editor/clearing.rb
1082
+ - lib/hecks/projections/site/cms_editor/color.rb
1083
+ - lib/hecks/projections/site/cms_editor/composition.rb
1084
+ - lib/hecks/projections/site/cms_editor/destructive.rb
1085
+ - lib/hecks/projections/site/cms_editor/drafts.rb
1086
+ - lib/hecks/projections/site/cms_editor/hints.rb
1087
+ - lib/hecks/projections/site/cms_editor/icons.rb
1088
+ - lib/hecks/projections/site/cms_editor/key_kinds.rb
1089
+ - lib/hecks/projections/site/cms_editor/limits.rb
1090
+ - lib/hecks/projections/site/cms_editor/media.rb
1091
+ - lib/hecks/projections/site/cms_editor/moment.rb
1092
+ - lib/hecks/projections/site/cms_editor/palette.rb
1093
+ - lib/hecks/projections/site/cms_editor/pickers.rb
1094
+ - lib/hecks/projections/site/cms_editor/pretty.rb
1095
+ - lib/hecks/projections/site/cms_editor/preview.rb
1096
+ - lib/hecks/projections/site/cms_editor/relations.rb
1097
+ - lib/hecks/projections/site/cms_editor/scale_checks.rb
1098
+ - lib/hecks/projections/site/cms_editor/scheduling.rb
1099
+ - lib/hecks/projections/site/cms_editor/schema.rb
1100
+ - lib/hecks/projections/site/cms_editor/setting.rb
1101
+ - lib/hecks/projections/site/cms_editor/targets.rb
1102
+ - lib/hecks/projections/site/cms_editor/templates/package.json.tmpl
1103
+ - lib/hecks/projections/site/cms_editor/templates/src/app.ts.tmpl
1104
+ - lib/hecks/projections/site/cms_editor/templates/src/assets.ts.tmpl
1105
+ - lib/hecks/projections/site/cms_editor/templates/src/auth/membership.ts.tmpl
1106
+ - lib/hecks/projections/site/cms_editor/templates/src/auth/session.ts.tmpl
1107
+ - lib/hecks/projections/site/cms_editor/templates/src/auth/sso.ts.tmpl
1108
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/app.css.tmpl
1109
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/autosave.js.tmpl
1110
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/blocks.js.tmpl
1111
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/body_doc.js.tmpl
1112
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/body_editor.js.tmpl
1113
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/epoch.js.tmpl
1114
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/forms.js.tmpl
1115
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/lists.js.tmpl
1116
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/main.js.tmpl
1117
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/media_picker.js.tmpl
1118
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/moments.js.tmpl
1119
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/pickers.js.tmpl
1120
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/preview.js.tmpl
1121
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/shell.js.tmpl
1122
+ - lib/hecks/projections/site/cms_editor/templates/src/browser/toast.js.tmpl
1123
+ - lib/hecks/projections/site/cms_editor/templates/src/choices.ts.tmpl
1124
+ - lib/hecks/projections/site/cms_editor/templates/src/commands.ts.tmpl
1125
+ - lib/hecks/projections/site/cms_editor/templates/src/config.ts.tmpl
1126
+ - lib/hecks/projections/site/cms_editor/templates/src/flash.ts.tmpl
1127
+ - lib/hecks/projections/site/cms_editor/templates/src/host.ts.tmpl
1128
+ - lib/hecks/projections/site/cms_editor/templates/src/media/handler.ts.tmpl
1129
+ - lib/hecks/projections/site/cms_editor/templates/src/media/multipart.ts.tmpl
1130
+ - lib/hecks/projections/site/cms_editor/templates/src/media/sniff.ts.tmpl
1131
+ - lib/hecks/projections/site/cms_editor/templates/src/media/storage.ts.tmpl
1132
+ - lib/hecks/projections/site/cms_editor/templates/src/names.ts.tmpl
1133
+ - lib/hecks/projections/site/cms_editor/templates/src/schema.ts.tmpl
1134
+ - lib/hecks/projections/site/cms_editor/templates/src/server.ts.tmpl
1135
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/availability.ts.tmpl
1136
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/block_list.js.tmpl
1137
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/blocks.ts.tmpl
1138
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/body_model.js.tmpl
1139
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/body_parse.js.tmpl
1140
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/detail.ts.tmpl
1141
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/dialogs.ts.tmpl
1142
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/fields.ts.tmpl
1143
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/html.ts.tmpl
1144
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/icons.ts.tmpl
1145
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/input.ts.tmpl
1146
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/links.ts.tmpl
1147
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/moments.ts.tmpl
1148
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/outline.ts.tmpl
1149
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/pages.ts.tmpl
1150
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/paging.ts.tmpl
1151
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/pickers.ts.tmpl
1152
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/preview.ts.tmpl
1153
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/related.ts.tmpl
1154
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/schedule.ts.tmpl
1155
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/shell.ts.tmpl
1156
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/table.ts.tmpl
1157
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/theme.js.tmpl
1158
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/values.ts.tmpl
1159
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/words.ts.tmpl
1160
+ - lib/hecks/projections/site/cms_editor/templates/src/ui/world.ts.tmpl
1161
+ - lib/hecks/projections/site/cms_editor/templates/tsconfig.json.tmpl
1162
+ - lib/hecks/projections/site/cms_editor/theme.rb
1163
+ - lib/hecks/projections/site/cms_editor/theme_checks.rb
1046
1164
  - lib/hecks/projections/site/edge.rb
1047
1165
  - lib/hecks/projections/site/edge/behaviours.rb
1048
1166
  - lib/hecks/projections/site/edge/checks.rb
@@ -1064,6 +1182,7 @@ files:
1064
1182
  - lib/hecks/projections/site/payload_driver.rb
1065
1183
  - lib/hecks/projections/site/probe.rb
1066
1184
  - lib/hecks/projections/site/regions.rb
1185
+ - lib/hecks/projections/site/role_probe.rb
1067
1186
  - lib/hecks/projections/site/root_rows.rb
1068
1187
  - lib/hecks/projections/site/routes_ts.rb
1069
1188
  - lib/hecks/projections/site/routes_ts/helpers.rb
@@ -1102,6 +1221,7 @@ files:
1102
1221
  - lib/hecks/projector/docs_projector/closing.rb
1103
1222
  - lib/hecks/projector/exporter.rb
1104
1223
  - lib/hecks/projector/exporter/bindings.rb
1224
+ - lib/hecks/projector/exporter/capability_values.rb
1105
1225
  - lib/hecks/projector/exporter/translations.rb
1106
1226
  - lib/hecks/projector/ir_projector.rb
1107
1227
  - lib/hecks/projector/narrate_projector.rb
@@ -1215,6 +1335,7 @@ files:
1215
1335
  - lib/hecks/query_specification/field_path.rb
1216
1336
  - lib/hecks/query_specification/hop_path.rb
1217
1337
  - lib/hecks/query_specification/read_model/specification.rb
1338
+ - lib/hecks/release/approval.rb
1218
1339
  - lib/hecks/release/gem_pin.rb
1219
1340
  - lib/hecks/release/gem_pin/published_versions.rb
1220
1341
  - lib/hecks/release/lane.rb
@@ -1233,12 +1354,13 @@ files:
1233
1354
  - lib/hecks/release/runner/tagger.rb
1234
1355
  - lib/hecks/rendering.rb
1235
1356
  - lib/hecks/router.rb
1236
- - lib/hecks/router/door.rb
1357
+ - lib/hecks/router/aggregate_reader.rb
1237
1358
  - lib/hecks/router/namespace_installer.rb
1238
1359
  - lib/hecks/router/options_proxy.rb
1239
1360
  - lib/hecks/runtime.rb
1240
1361
  - lib/hecks/runtime/adapter_lookup.rb
1241
1362
  - lib/hecks/runtime/aggregate_lock.rb
1363
+ - lib/hecks/runtime/best_effort.rb
1242
1364
  - lib/hecks/runtime/boot_gates.rb
1243
1365
  - lib/hecks/runtime/caller.rb
1244
1366
  - lib/hecks/runtime/capability_graph.rb
@@ -1313,6 +1435,7 @@ files:
1313
1435
  - lib/hecks/runtime/reference_hop.rb
1314
1436
  - lib/hecks/runtime/refusal_wording.rb
1315
1437
  - lib/hecks/runtime/registry.rb
1438
+ - lib/hecks/runtime/registry/ask_verification.rb
1316
1439
  - lib/hecks/runtime/registry/chapter_verification.rb
1317
1440
  - lib/hecks/runtime/registry/declarations.rb
1318
1441
  - lib/hecks/runtime/registry/durability_warnings.rb
@@ -1367,6 +1490,7 @@ files:
1367
1490
  - lib/hecks/rust_build/wasm.rb
1368
1491
  - lib/hecks/rust_build/wasm_browser.rb
1369
1492
  - lib/hecks/rust_build/write_if_changed.rb
1493
+ - lib/hecks/served_options.rb
1370
1494
  - lib/hecks/site/bluebook/site.bluebook
1371
1495
  - lib/hecks/site/bluebook/site.hecksagon
1372
1496
  - lib/hecks/site/bluebook/site.ports.hecksagon
@@ -1455,6 +1579,7 @@ files:
1455
1579
  - lib/hecks/tools/sequence_script.rb
1456
1580
  - lib/hecks/tools/site_routes.rb
1457
1581
  - lib/hecks/tools/site_routes/cli.rb
1582
+ - lib/hecks/tools/site_routes/editor_files.rb
1458
1583
  - lib/hecks/tools/site_routes/root_files.rb
1459
1584
  - lib/hecks/tools/site_routes/templates.rb
1460
1585
  - lib/hecks/tools/tail_merge.rb
@@ -1471,12 +1596,20 @@ files:
1471
1596
  - lib/hecks/vendoring/git_source.rb
1472
1597
  - lib/hecks/version.rb
1473
1598
  - lib/hecks/vocabulary.rb
1599
+ - lib/rubocop/cop/hecks/env_dump.rb
1474
1600
  - lib/rubocop/cop/hecks/fallback_hash_lookup.rb
1601
+ - lib/rubocop/cop/hecks/monotonic_duration.rb
1602
+ - lib/rubocop/cop/hecks/no_wall_clock_in_runtime.rb
1603
+ - lib/rubocop/cop/hecks/raw_shell_interpolation.rb
1475
1604
  - lib/rubocop/cop/hecks/sequential_hash_rename_in_loop.rb
1605
+ - lib/rubocop/cop/hecks/sleep_in_spec.rb
1606
+ - lib/rubocop/cop/hecks/swallowed_rescue.rb
1607
+ - lib/rubocop/cop/hecks/symbol_string_key_mix.rb
1476
1608
  - lib/rubocop/cop/hecks/thread_shared_ivar_mutation.rb
1477
- - prebuilt/0ee7f83cba59ce7d1c45c65ba166b071779f70143449f584f33ff7989f64eccb.marshal
1478
- - prebuilt/6e4a6bcf0aa880e2e6b056e1846b70e5a768090b9dc998bbadeaf5d6bcfd3db8.marshal
1479
- - prebuilt/verdicts-91aaf93ce8981bd9a754948f075d95650dc2ec6435015376f5c60992b36a24b1.json
1609
+ - lib/rubocop/cop/hecks/untyped_raise.rb
1610
+ - prebuilt/05c358d38d661a3774f813d49c66f5b68939af94432d66257a56f49ee2598994.marshal
1611
+ - prebuilt/26c40c61f09b09b11651c64668eda3ceb180f83cf2a3802d3033d2fd99ac841b.marshal
1612
+ - prebuilt/verdicts-230ac18c25abfd3d92ede032bee2661a4c2cd2773ab0cf0e2ae52546ba2f7af9.json
1480
1613
  - qa/settings.yml
1481
1614
  - rust/.cargo/config.toml
1482
1615
  - rust/.cargo/mutants.toml
@@ -1487,6 +1620,7 @@ files:
1487
1620
  - rust/build/.gitignore
1488
1621
  - rust/build/Cargo.lock
1489
1622
  - rust/build/Cargo.toml
1623
+ - rust/build/src/binding_pass.rs
1490
1624
  - rust/build/src/build_artifact.rs
1491
1625
  - rust/build/src/cargo_sync.rs
1492
1626
  - rust/build/src/lineage_pass.rs
@@ -1495,12 +1629,15 @@ files:
1495
1629
  - rust/build/src/reserved_names.rs
1496
1630
  - rust/build/src/resolve.rs
1497
1631
  - rust/build/src/root.rs
1632
+ - rust/build/src/seams_pass.rs
1498
1633
  - rust/build/src/subprocess.rs
1499
1634
  - rust/build/src/tmp.rs
1635
+ - rust/build/src/translation_pass.rs
1500
1636
  - rust/codegen/.cargo/config.toml
1501
1637
  - rust/codegen/.gitignore
1502
1638
  - rust/codegen/Cargo.lock
1503
1639
  - rust/codegen/Cargo.toml
1640
+ - rust/codegen/src/asks.rs
1504
1641
  - rust/codegen/src/attr.rs
1505
1642
  - rust/codegen/src/bridging.rs
1506
1643
  - rust/codegen/src/commands.rs
@@ -1543,6 +1680,7 @@ files:
1543
1680
  - rust/host/src/bin/expr_harness.rs
1544
1681
  - rust/host/src/bin/lineage_harness.rs
1545
1682
  - rust/host/src/bin/mint_harness.rs
1683
+ - rust/host/src/bin/validate_harness.rs
1546
1684
  - rust/host/src/boot.rs
1547
1685
  - rust/host/src/boundary_fuzz/api.rs
1548
1686
  - rust/host/src/boundary_fuzz/auth.rs
@@ -1,34 +0,0 @@
1
- module Hecks
2
- module Doors
3
- module CliDoor
4
- # Sets values into the nested argument Hash a dotted path names, creating the intermediate
5
- # Hashes on the way.
6
- module Nesting
7
- module_function
8
-
9
- # Appends one element to a list argument, creating the list on first use.
10
- #
11
- # Repeats must grow the list (`bury` would silently keep only the last), and a single
12
- # element is still a one-item list, since a `list_of` attribute must never see a bare
13
- # object. Multi-field elements are left to `JsonDoor`: a flat command line cannot say
14
- # which `a.x=` pairs with which `a.y=`.
15
- def append(hash, path, value)
16
- *branches, leaf = path.map(&:to_sym)
17
- holder = branches[0..-2].reduce(hash) { |node, key| node[key] ||= {} }
18
- list = holder[branches.last] ||= []
19
-
20
- list << { leaf => value }
21
- hash
22
- end
23
-
24
- # Sets one value at a nested path, creating intermediate Hashes and overwriting the leaf.
25
- def bury(hash, path, value)
26
- *branches, leaf = path.map(&:to_sym)
27
- target = branches.reduce(hash) { |node, key| node[key] ||= {} }
28
- target[leaf] = value
29
- hash
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,85 +0,0 @@
1
- module Hecks
2
- module Doors
3
- module CliDoor
4
- # Rewrites the shorthand spellings of a command line into plain `name=value` words.
5
- module Shorthand
6
- module_function
7
-
8
- # Rewrites the short forms into `name=value`: `--name` for a Boolean (a following `yes`,
9
- # `no`, `true`, `false`, `on`, `off`, `1` or `0` is that flag's value, not an argument),
10
- # `--name=value` as `name=value`, and one bare word as the command's first argument
11
- # (`to` for a command on an existing aggregate, the first attribute for one that creates).
12
- def normalize(spec, words, options)
13
- pairs, bare = collect(words, options)
14
- raise Runtime::NotFound, too_many_bare(bare) if bare.length > 1
15
-
16
- pairs.map { |pair| bare.include?(pair) && !pair.include?("=") ? positional(pair, spec) : pair }
17
- end
18
-
19
- # Every word as a pair, and the words that were neither a flag nor a pair.
20
- def collect(words, options)
21
- queue = words.dup
22
- pairs = []
23
- bare = []
24
- until queue.empty?
25
- word = queue.shift
26
- pairs << pair_for(word, queue, options)
27
- bare << word if bare_word?(word)
28
- end
29
- [pairs, bare]
30
- end
31
-
32
- # A word that is neither a `--flag` nor a `name=value` pair.
33
- def bare_word?(word)
34
- !word.start_with?("--") && !word.include?("=")
35
- end
36
-
37
- # One word as a `name=value` pair; a `--flag` takes the Boolean word that follows it from
38
- # `queue`.
39
- def pair_for(word, queue, options)
40
- return word unless word.start_with?("--")
41
- return underscored(word.delete_prefix("--"), options) if word.include?("=")
42
-
43
- path = flag(word.delete_prefix("--"), options)
44
- value = BOOLEAN_WORDS.key?(queue.first.to_s.downcase) ? queue.shift : "true"
45
- "#{path}=#{value}"
46
- end
47
-
48
- # A `name=value` pair whose name is spelled with dashes (`seed-start=3`), as the argument
49
- # spelled with underscores, unless an argument is named with the dashes.
50
- def underscored(pair, options)
51
- name, value = pair.split("=", 2)
52
- options.key?(name) ? pair : "#{name.tr("-", "_")}=#{value}"
53
- end
54
-
55
- # A `--name` flag, as the path of the Boolean argument it stands for. A dashed name
56
- # (`--gem-only`) is the argument spelled with underscores (`gem_only`).
57
- def flag(name, options)
58
- name = name.tr("-", "_") unless options.key?(name) || options.keys.any? { |key| key.start_with?("#{name}.") }
59
- path = options.key?(name) ? name : CliDoor.expand(name, options)
60
- return path if options.dig(path, :type) == "Boolean"
61
-
62
- raise Runtime::NotFound, "--#{name} is a flag, but this command has no Boolean argument #{name.inspect}"
63
- end
64
-
65
- # The one bare word, as a pair for the command's first argument the launcher does not mint.
66
- def positional(word, spec)
67
- first = spec[:arguments].find { |argument| !argument[:minted] }
68
- return "#{first[:path]}=#{word}" if first
69
-
70
- if spec[:arguments].any?
71
- raise Runtime::NotFound, "#{word.inspect} is not name=value; this command's only argument is its run " \
72
- "key, which is minted when omitted (run=<key> names one)"
73
- end
74
-
75
- raise Runtime::NotFound, "#{word.inspect} is not name=value, and this command takes no arguments"
76
- end
77
-
78
- # Words the refusal for more than one unnamed argument.
79
- def too_many_bare(bare)
80
- "only one argument may go unnamed, not #{bare.map(&:inspect).join(", ")}; name the rest as name=value"
81
- end
82
- end
83
- end
84
- end
85
- end
@@ -1,124 +0,0 @@
1
- require_relative "../runtime/errors"
2
-
3
- module Hecks
4
- module Doors
5
- # Turns `path=value` command-line words into a nested, typed argument Hash.
6
- # Types come from the projection, never from guessing at the value ("99" may be a String).
7
- module CliDoor
8
- # The words a Boolean is spelled with, and what each means.
9
- BOOLEAN_WORDS = { "true" => true, "yes" => true, "1" => true, "on" => true,
10
- "false" => false, "no" => false, "0" => false, "off" => false }.freeze
11
-
12
- module_function
13
-
14
- # Builds a command's nested, typed argument Hash from its `name=value` words.
15
- #
16
- # arguments(spec, ["reference.value=A-1", "sequence.value=99"])
17
- # # => { reference: { value: "A-1" }, sequence: { value: 99 } }
18
- #
19
- # @param spec [Hash{Symbol => Object}] one command's entry from `Projector::CliProjector`
20
- # @param pairs [Array<String>] the words after the command: `name=value` pairs, where a path
21
- # may be the short form of a single-field value object (`reference` for `reference.value`);
22
- # `--name` for a Boolean; and at most one bare word, which fills the first argument
23
- # @return [Hash{Symbol => Object}] the arguments nested by path, leaves cast to type
24
- # @raise [Runtime::NotFound] if a path, flag or bare word does not fit the command
25
- # @raise [Runtime::TypeMismatch] if a value does not parse as its Integer or Float
26
- def arguments(spec, pairs)
27
- options = declared_options(spec)
28
- Shorthand.normalize(spec, pairs, options).each_with_object({}) { |pair, args| store(args, pair, options) }
29
- end
30
-
31
- # Every argument the command accepts, by path. Extra accepted arguments stay out of help,
32
- # which teaches only to=....
33
- def declared_options(spec)
34
- (spec[:arguments] + Array(spec[:legacy_arguments])).to_h { |argument| [argument[:path], argument] }
35
- end
36
-
37
- # Casts the value of one `name=value` pair and sets it into `args` at its path.
38
- def store(args, pair, options)
39
- path, value = split(pair)
40
- full, argument = declared_argument(path, options)
41
- keys = full.split(".")
42
- return words(args, keys, value, argument[:type]) if argument[:words]
43
- return Nesting.append(args, keys, cast(value, argument[:type])) if argument[:list]
44
-
45
- Nesting.bury(args, keys, cast(value, argument[:type]))
46
- end
47
-
48
- # The full path and declaration of the argument `path` names, expanding a value object's
49
- # short form. `key?` rather than `||`, so the lookup honors the same spelling `full` chose.
50
- def declared_argument(path, options)
51
- full = options.key?(path) ? path : expand(path, options)
52
- return [full, options[full]] if options.key?(full)
53
-
54
- raise Runtime::NotFound, unknown(path, options.keys)
55
- end
56
-
57
- # Cuts one word at its first `=`, so a value may itself contain `=`.
58
- def split(pair)
59
- name, value = pair.split("=", 2)
60
- raise Runtime::NotFound, "#{pair.inspect} is not name=value" if value.nil?
61
-
62
- [name, value]
63
- end
64
-
65
- # Expands a bare value-object name into the path of its only field.
66
- # Left unchanged when several fields match, since guessing which was meant is worse.
67
- def expand(path, options)
68
- candidates = options.keys.select { |key| key.start_with?("#{path}.") }
69
- candidates.length == 1 ? candidates.first : path
70
- end
71
-
72
- # Converts one value to its declared type; only Integer, Float and Boolean convert.
73
- def cast(value, type)
74
- case type
75
- when "Integer" then Integer(value)
76
- when "Float" then Float(value)
77
- when "Boolean" then boolean(value)
78
- else value
79
- end
80
- rescue ArgumentError
81
- raise Runtime::TypeMismatch, "#{value.inspect} is not #{type} — the chapter declares this field as #{type}"
82
- end
83
-
84
- # Reads a Boolean word: `true`, `yes`, `1` or `on` is true; `false`, `no`, `0` or `off` is
85
- # false; case does not matter. Anything else is refused, since guessing would turn a typo
86
- # (`dry_run=ture`) into a silent false.
87
- #
88
- # @param value [String] the word
89
- # @return [Boolean]
90
- # @raise [Runtime::TypeMismatch] if the word is not one of those eight
91
- def boolean(value)
92
- BOOLEAN_WORDS.fetch(value.to_s.downcase) do
93
- raise Runtime::TypeMismatch,
94
- "#{value.inspect} is not Boolean — use true, false, yes, no, 1, 0, on or off"
95
- end
96
- end
97
-
98
- # Adds the words of a `list_of` scalar argument to its Array: a comma-separated value is
99
- # several elements and a repeated name adds more, each cast to the element type. The
100
- # runtime refuses a lone scalar for a list, so the door is where every spelling becomes an
101
- # Array.
102
- #
103
- # @param hash [Hash{Symbol => Object}] the arguments built so far
104
- # @param path [Array<String>] the argument's dotted path
105
- # @param value [String] the word after `=`
106
- # @param type [String] the element type
107
- # @return [Hash{Symbol => Object}] `hash`
108
- def words(hash, path, value, type)
109
- *branches, leaf = path.map(&:to_sym)
110
- holder = branches.reduce(hash) { |node, key| node[key] ||= {} }
111
- list = holder[leaf] ||= []
112
- list.concat(value.split(",").map { |word| cast(word.strip, type) })
113
- hash
114
- end
115
-
116
- # Words the refusal for an argument the command does not take, listing what it does.
117
- def unknown(path, known)
118
- "no argument #{path.inspect} — this command takes #{known.sort.join(", ")}"
119
- end
120
- end
121
- end
122
- end
123
- require_relative "cli_door/nesting"
124
- require_relative "cli_door/shorthand"