hecks 7.0.0 → 7.1.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 (257) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hecks/adapters/driven/postgres_era/lineage/chain_sql.rb +2 -1
  3. data/lib/hecks/adapters/driven/postgres_era/lineage/provisioning.rb +4 -2
  4. data/lib/hecks/adapters/driven/postgres_era/lineage/split_sql.rb +16 -8
  5. data/lib/hecks/adapters/driven/postgres_era/lineage/transform_sql.rb +7 -3
  6. data/lib/hecks/adapters/driven/postgres_era/lineage_manager/era_resolver.rb +2 -1
  7. data/lib/hecks/adapters/driven/postgres_era/lineage_manager/mint_request.rb +2 -1
  8. data/lib/hecks/adapters/driven/postgres_era/lineage_manager/refusals.rb +2 -1
  9. data/lib/hecks/adapters/driving/cli_runner/bang_rule.rb +3 -0
  10. data/lib/hecks/adapters/driving/cli_runner/completion_words.rb +2 -0
  11. data/lib/hecks/adapters/driving/cli_runner/read_context.rb +6 -3
  12. data/lib/hecks/adapters/driving/cli_runner/renamed_names.rb +2 -1
  13. data/lib/hecks/adapters/driving/cli_runner/resolution.rb +2 -2
  14. data/lib/hecks/adapters/driving/cli_runner/resume_words.rb +1 -0
  15. data/lib/hecks/adapters/driving/cli_runner/run_reference.rb +6 -3
  16. data/lib/hecks/adapters/driving/cli_runner/search_words.rb +2 -0
  17. data/lib/hecks/adapters/driving/cli_runner/tour_words.rb +1 -0
  18. data/lib/hecks/adapters/driving/cli_runner/verb_names.rb +2 -1
  19. data/lib/hecks/adapters/driving/cli_runner/verbosity.rb +2 -0
  20. data/lib/hecks/adapters/driving/cli_runner/word_help.rb +40 -0
  21. data/lib/hecks/adapters/driving/cli_runner.rb +2 -0
  22. data/lib/hecks/adapters/driving/mcp/progress_sink.rb +4 -2
  23. data/lib/hecks/adapters/driving/mcp.rb +2 -1
  24. data/lib/hecks/adapters/driving/mcp_scope/argument_policy.rb +2 -1
  25. data/lib/hecks/adapters/driving/ruby/aggregate_module/hooks.rb +28 -14
  26. data/lib/hecks/adapters/driving/ruby/aggregate_module.rb +4 -2
  27. data/lib/hecks/assembly.rb +18 -4
  28. data/lib/hecks/behaviors/expectations/adapter_selection.rb +82 -0
  29. data/lib/hecks/behaviors/expectations/boot.rb +12 -5
  30. data/lib/hecks/bluebook/acknowledgements.rb +1 -1
  31. data/lib/hecks/bluebook/command.rb +3 -2
  32. data/lib/hecks/bluebook/declaration.rb +2 -1
  33. data/lib/hecks/bluebook/dsl/adapter_builder.rb +9 -1
  34. data/lib/hecks/bluebook/dsl/bluebook_builder/metadata.rb +6 -4
  35. data/lib/hecks/bluebook/dsl/bluebook_builder/modules.rb +6 -3
  36. data/lib/hecks/bluebook/dsl/bluebook_builder/validation/correlation_keys.rb +2 -1
  37. data/lib/hecks/bluebook/dsl/command_builder/folded_sets.rb +4 -2
  38. data/lib/hecks/bluebook/dsl/generic_dispatch.rb +2 -1
  39. data/lib/hecks/bluebook/hecksagon.rb +6 -3
  40. data/lib/hecks/bluebook/meta_validator/adapter_judge.rb +9 -2
  41. data/lib/hecks/bluebook/meta_validator.rb +1 -1
  42. data/lib/hecks/bluebook/model_check/aggregate_checks.rb +2 -1
  43. data/lib/hecks/bluebook/model_check/classification_checks.rb +51 -0
  44. data/lib/hecks/bluebook/model_check/context_checks.rb +2 -0
  45. data/lib/hecks/bluebook/model_check/redundant_relationships.rb +2 -1
  46. data/lib/hecks/ci_speed/adapters/shard_partitioner.adapter +7 -0
  47. data/lib/hecks/ci_speed/adapters/shard_partitioner.rb +66 -0
  48. data/lib/hecks/ci_speed/adapters/timings_source.adapter +7 -0
  49. data/lib/hecks/ci_speed/adapters/timings_source.rb +68 -0
  50. data/lib/hecks/ci_speed/ci_speed.bluebook +111 -0
  51. data/lib/hecks/ci_speed/ci_speed.ports.hecksagon +22 -0
  52. data/lib/hecks/ci_workflows/ci_workflows.bluebook +50 -6
  53. data/lib/hecks/coder/coder.bluebook +3 -1
  54. data/lib/hecks/command_names/index.rb +1 -1
  55. data/lib/hecks/command_names/resolution.rb +15 -5
  56. data/lib/hecks/composer/toolbox.rb +2 -1
  57. data/lib/hecks/corpus.rb +4 -0
  58. data/lib/hecks/doc/reference/readme.rb +1 -1
  59. data/lib/hecks/framework_bluebooks.rb +3 -2
  60. data/lib/hecks/fuzzing/differential.rb +1 -1
  61. data/lib/hecks/fuzzing/era_boundary.rb +1 -1
  62. data/lib/hecks/fuzzing/isolated_boot/postgres_scratch.rb +1 -1
  63. data/lib/hecks/fuzzing/persistence_parity.rb +1 -1
  64. data/lib/hecks/fuzzing/target_capabilities.rb +1 -1
  65. data/lib/hecks/hecks/adapters/ci_runs.adapter +7 -0
  66. data/lib/hecks/hecks/adapters/ci_runs.rb +80 -0
  67. data/lib/hecks/hecks/adapters/claude_agent_list.rb +43 -0
  68. data/lib/hecks/hecks/adapters/claude_agents.rb +50 -19
  69. data/lib/hecks/hecks/adapters/claude_jobs.rb +36 -0
  70. data/lib/hecks/hecks/adapters/codebase/corpus_queries.rb +2 -1
  71. data/lib/hecks/hecks/adapters/codebase/minitest_runs.rb +4 -2
  72. data/lib/hecks/hecks/adapters/codebase/run_options.rb +2 -1
  73. data/lib/hecks/hecks/adapters/codebase/test_suite.rb +3 -19
  74. data/lib/hecks/hecks/adapters/dispatching/brief_text.rb +5 -3
  75. data/lib/hecks/hecks/adapters/dispatching/launcher.rb +2 -1
  76. data/lib/hecks/hecks/adapters/dispatching/plan.rb +8 -4
  77. data/lib/hecks/hecks/adapters/dispatching/settings.rb +2 -1
  78. data/lib/hecks/hecks/adapters/dispatching/settler.rb +4 -2
  79. data/lib/hecks/hecks/adapters/dispatching.rb +6 -3
  80. data/lib/hecks/hecks/adapters/doctor_reading.rb +4 -2
  81. data/lib/hecks/hecks/adapters/git_landing/carried.rb +42 -0
  82. data/lib/hecks/hecks/adapters/git_landing/finisher.rb +2 -1
  83. data/lib/hecks/hecks/adapters/git_landing/flagged.rb +32 -0
  84. data/lib/hecks/hecks/adapters/git_landing/tidy.rb +27 -14
  85. data/lib/hecks/hecks/adapters/git_landing.rb +30 -13
  86. data/lib/hecks/hecks/adapters/git_leftovers.adapter +7 -0
  87. data/lib/hecks/hecks/adapters/git_leftovers.rb +49 -0
  88. data/lib/hecks/hecks/adapters/git_main_pull.rb +2 -2
  89. data/lib/hecks/hecks/adapters/git_train.rb +9 -5
  90. data/lib/hecks/hecks/adapters/git_worktree_add.rb +8 -4
  91. data/lib/hecks/hecks/adapters/github_pull_requests.rb +2 -1
  92. data/lib/hecks/hecks/adapters/in_process_operations.rb +2 -1
  93. data/lib/hecks/hecks/adapters/journal_store/edge_audit.rb +1 -1
  94. data/lib/hecks/hecks/adapters/journal_store/readings/composition.rb +2 -1
  95. data/lib/hecks/hecks/adapters/journal_store/translation_write/shape_edge.rb +4 -2
  96. data/lib/hecks/hecks/adapters/journal_store/translation_write.rb +4 -2
  97. data/lib/hecks/hecks/adapters/landed_branches.rb +38 -0
  98. data/lib/hecks/hecks/adapters/main_boarding.adapter +7 -0
  99. data/lib/hecks/hecks/adapters/main_boarding.rb +85 -0
  100. data/lib/hecks/hecks/adapters/main_integration/checks.rb +63 -0
  101. data/lib/hecks/hecks/adapters/main_integration/command_runner.rb +32 -0
  102. data/lib/hecks/hecks/adapters/main_integration/range_guard.rb +49 -0
  103. data/lib/hecks/hecks/adapters/main_integration/repository.rb +83 -0
  104. data/lib/hecks/hecks/adapters/main_integration/runs.rb +51 -0
  105. data/lib/hecks/hecks/adapters/main_integration/train.rb +74 -0
  106. data/lib/hecks/hecks/adapters/main_integration.adapter +7 -0
  107. data/lib/hecks/hecks/adapters/main_integration.rb +77 -0
  108. data/lib/hecks/hecks/adapters/main_verification.adapter +7 -0
  109. data/lib/hecks/hecks/adapters/main_verification.rb +89 -0
  110. data/lib/hecks/hecks/adapters/push_recorder.adapter +7 -0
  111. data/lib/hecks/hecks/adapters/push_recorder.rb +78 -0
  112. data/lib/hecks/hecks/adapters/red_flag_guard.rb +62 -0
  113. data/lib/hecks/hecks/adapters/red_flag_marker.rb +101 -0
  114. data/lib/hecks/hecks/adapters/red_flag_report.rb +59 -0
  115. data/lib/hecks/hecks/adapters/red_flag_survey.rb +65 -0
  116. data/lib/hecks/hecks/adapters/red_flagging.adapter +7 -0
  117. data/lib/hecks/hecks/adapters/red_flagging.rb +98 -0
  118. data/lib/hecks/hecks/adapters/rehearsal/inquiry.rb +6 -1
  119. data/lib/hecks/hecks/adapters/rehearsal/memory_store.rb +6 -3
  120. data/lib/hecks/hecks/adapters/settings_reading/event_tap_row.rb +33 -0
  121. data/lib/hecks/hecks/adapters/settings_reading.rb +3 -1
  122. data/lib/hecks/hecks/codebase.behaviors +0 -6
  123. data/lib/hecks/hecks/custodian.behaviors +22 -1
  124. data/lib/hecks/hecks/delegate/delegate.bluebook +128 -15
  125. data/lib/hecks/hecks/deliver/deliver.bluebook +450 -2
  126. data/lib/hecks/hecks/environments/memory.world +5 -0
  127. data/lib/hecks/hecks/hecks.contextmap +8 -0
  128. data/lib/hecks/hecks/hecks.hecksagon +106 -6
  129. data/lib/hecks/hecks/hecks.world +9 -1
  130. data/lib/hecks/hecks/migrate/migrate.bluebook +6 -1
  131. data/lib/hecks/hecks/redflag/redflag.bluebook +249 -0
  132. data/lib/hecks/hecks/test/test.bluebook +0 -19
  133. data/lib/hecks/language/adapter.bluebook +13 -0
  134. data/lib/hecks/language/bluebook/vocabulary.bluebook +8 -9
  135. data/lib/hecks/language/sentence/sentence.bluebook +2 -0
  136. data/lib/hecks/pipeline/pipeline.bluebook +251 -0
  137. data/lib/hecks/pipeline/pipeline.hecksagon +17 -0
  138. data/lib/hecks/pipeline_board/adapters/cache.rb +43 -0
  139. data/lib/hecks/pipeline_board/adapters/pipeline_fill.rb +56 -0
  140. data/lib/hecks/pipeline_board/adapters/pipeline_git.rb +82 -0
  141. data/lib/hecks/pipeline_board/adapters/pipeline_github/runs.rb +66 -0
  142. data/lib/hecks/pipeline_board/adapters/pipeline_github.adapter +7 -0
  143. data/lib/hecks/pipeline_board/adapters/pipeline_github.rb +70 -0
  144. data/lib/hecks/pipeline_board/adapters/pipeline_jobs.adapter +7 -0
  145. data/lib/hecks/pipeline_board/adapters/pipeline_jobs.rb +87 -0
  146. data/lib/hecks/pipeline_board/adapters/pipeline_journal/chain.rb +40 -0
  147. data/lib/hecks/pipeline_board/adapters/pipeline_journal/tap.rb +75 -0
  148. data/lib/hecks/pipeline_board/adapters/pipeline_journal.adapter +7 -0
  149. data/lib/hecks/pipeline_board/adapters/pipeline_journal.rb +83 -0
  150. data/lib/hecks/pipeline_board/adapters/pipeline_stages/ci_tiles.rb +85 -0
  151. data/lib/hecks/pipeline_board/adapters/pipeline_stages/fanout.rb +73 -0
  152. data/lib/hecks/pipeline_board/adapters/pipeline_stages/gather.rb +57 -0
  153. data/lib/hecks/pipeline_board/adapters/pipeline_stages/metrics.rb +36 -0
  154. data/lib/hecks/pipeline_board/adapters/pipeline_stages/strip.rb +102 -0
  155. data/lib/hecks/pipeline_board/adapters/pipeline_stages/tile_kit.rb +57 -0
  156. data/lib/hecks/pipeline_board/adapters/pipeline_stages/work_tiles.rb +59 -0
  157. data/lib/hecks/pipeline_board/adapters/pipeline_stages.adapter +7 -0
  158. data/lib/hecks/pipeline_board/adapters/pipeline_stages.rb +84 -0
  159. data/lib/hecks/pipeline_board/adapters/pipeline_tickets.adapter +7 -0
  160. data/lib/hecks/pipeline_board/adapters/pipeline_tickets.rb +77 -0
  161. data/lib/hecks/pipeline_board/adapters/pipeline_web/page.html +292 -0
  162. data/lib/hecks/pipeline_board/adapters/pipeline_web/sequence.html +190 -0
  163. data/lib/hecks/pipeline_board/adapters/pipeline_web/server.rb +105 -0
  164. data/lib/hecks/pipeline_board/adapters/pipeline_web/snapshot.rb +57 -0
  165. data/lib/hecks/pipeline_board/adapters/pipeline_web/stream.rb +59 -0
  166. data/lib/hecks/pipeline_board/adapters/pipeline_web/wiring.html +536 -0
  167. data/lib/hecks/pipeline_board/adapters/pipeline_web.adapter +7 -0
  168. data/lib/hecks/pipeline_board/adapters/pipeline_web.rb +80 -0
  169. data/lib/hecks/pipeline_board/adapters/pipeline_wiring/details.rb +85 -0
  170. data/lib/hecks/pipeline_board/adapters/pipeline_wiring/graph.rb +120 -0
  171. data/lib/hecks/pipeline_board/adapters/pipeline_wiring.adapter +7 -0
  172. data/lib/hecks/pipeline_board/adapters/pipeline_wiring.rb +36 -0
  173. data/lib/hecks/pipeline_board/adapters/probe.rb +48 -0
  174. data/lib/hecks/pipeline_board/pipeline_board.bluebook +144 -0
  175. data/lib/hecks/pipeline_board/pipeline_board.hecksagon +12 -0
  176. data/lib/hecks/pipeline_board/pipeline_board.ports.hecksagon +47 -0
  177. data/lib/hecks/ports/persistence/binding_policy.rb +2 -1
  178. data/lib/hecks/ports/persistence/plugins/era/translation/compose.rb +4 -3
  179. data/lib/hecks/ports/persistence/repository_factory.rb +2 -1
  180. data/lib/hecks/projections/ci_pipeline/table.rb +2 -1
  181. data/lib/hecks/projections/deploy/lambda/stack/recipes.rb +2 -2
  182. data/lib/hecks/projections/undo.rb +2 -1
  183. data/lib/hecks/projector/cli_projector/command_help.rb +5 -4
  184. data/lib/hecks/projector/cli_projector/renames.rb +4 -2
  185. data/lib/hecks/projector/cli_projector/usage.rb +4 -3
  186. data/lib/hecks/projector/exporter/adapters.rb +3 -2
  187. data/lib/hecks/projector/narrate_projector/use_cases.rb +74 -0
  188. data/lib/hecks/projector/narrate_projector.rb +10 -3
  189. data/lib/hecks/quality_control/adapters/main_maintenance.rb +9 -5
  190. data/lib/hecks/quality_control/adapters/qa_auto_mint.rb +21 -2
  191. data/lib/hecks/quality_control/cli/qa_concurrency_racer.rb +1 -1
  192. data/lib/hecks/quality_control/cli/qa_domain_novelty.rb +2 -1
  193. data/lib/hecks/quality_control/cli/qa_fix_main_bug/publishing.rb +8 -4
  194. data/lib/hecks/quality_control/cli/qa_fix_main_bug.rb +10 -8
  195. data/lib/hecks/quality_control/cli/qa_generated_domains/promotion.rb +2 -2
  196. data/lib/hecks/quality_control/cli/qa_main_gate/gate_run.rb +6 -3
  197. data/lib/hecks/quality_control/cli/qa_main_gate/logging.rb +8 -4
  198. data/lib/hecks/quality_control/cli/qa_main_gate/shell.rb +4 -2
  199. data/lib/hecks/quality_control/cli/qa_main_gate/sweeping.rb +8 -4
  200. data/lib/hecks/quality_control/cli/qa_main_gate/worktree.rb +3 -2
  201. data/lib/hecks/quality_control/cli/qa_main_gate.rb +10 -5
  202. data/lib/hecks/quality_control/cli/qa_sweep/all_mode/children.rb +1 -1
  203. data/lib/hecks/quality_control/cli/qa_sweep/checks.rb +1 -1
  204. data/lib/hecks/quality_control/cli/qa_sweep.rb +1 -1
  205. data/lib/hecks/quality_control/cli/qa_tick.rb +6 -3
  206. data/lib/hecks/quality_control/quality_control.bluebook +11 -11
  207. data/lib/hecks/quality_control/quality_control.ports.hecksagon +6 -3
  208. data/lib/hecks/query_ir/touchpoints.rb +2 -1
  209. data/lib/hecks/refused.rb +2 -1
  210. data/lib/hecks/release/approval.rb +4 -2
  211. data/lib/hecks/runtime/event_log.rb +27 -0
  212. data/lib/hecks/runtime/event_tap.rb +106 -0
  213. data/lib/hecks/runtime/loader/boot_steps.rb +1 -1
  214. data/lib/hecks/runtime/loader.rb +35 -19
  215. data/lib/hecks/runtime/registry/durability_warnings.rb +12 -5
  216. data/lib/hecks/runtime/registry/runtime_state.rb +4 -1
  217. data/lib/hecks/runtime/registry/saga_anchor.rb +54 -0
  218. data/lib/hecks/runtime/registry/saga_durability_rule.rb +66 -0
  219. data/lib/hecks/runtime/registry/saga_persistence.rb +58 -12
  220. data/lib/hecks/runtime/registry/verification.rb +7 -3
  221. data/lib/hecks/runtime/saga_interpreter/lifecycle.rb +2 -1
  222. data/lib/hecks/runtime/saga_interpreter.rb +1 -1
  223. data/lib/hecks/rust_format.rb +2 -1
  224. data/lib/hecks/shape_ledger/edge_hygiene.rb +10 -5
  225. data/lib/hecks/shape_ledger.rb +1 -1
  226. data/lib/hecks/storehouse/audit.rb +2 -1
  227. data/lib/hecks/storehouse/identity.rb +6 -3
  228. data/lib/hecks/storehouse.rb +2 -1
  229. data/lib/hecks/tickets/bluebook/tickets.bluebook +5 -4
  230. data/lib/hecks/tools/ci_workflows.rb +2 -1
  231. data/lib/hecks/tools/document.rb +12 -1
  232. data/lib/hecks/tools/downstream_model_check.rb +4 -2
  233. data/lib/hecks/tools/fuzz_sweep/shards.rb +9 -30
  234. data/lib/hecks/tools/model_check/examination.rb +25 -2
  235. data/lib/hecks/tools/move_disables.rb +4 -2
  236. data/lib/hecks/tools/regeneration_run/scratch.rb +2 -1
  237. data/lib/hecks/tools/rspec_shard_files.rb +12 -15
  238. data/lib/hecks/tools/sequence_script.rb +1 -1
  239. data/lib/hecks/tools/shard_planner.rb +65 -0
  240. data/lib/hecks/tools/stage_progress.rb +2 -1
  241. data/lib/hecks/tools/stress_concurrency_specs.rb +2 -1
  242. data/lib/hecks/version.rb +1 -1
  243. data/lib/hecks/vocabulary.rb +8 -9
  244. data/lib/hecks.rb +5 -2
  245. data/prebuilt/{13c04bdc5970295b310f0a980d397ba722232c8da99cc1a0cdb383249921e871.marshal → 4b81646f769ae5b1e7457f9b11c48d8bc1093e96a1dd6fb61864065121ca6f01.marshal} +0 -0
  246. data/prebuilt/{e3857b77f47d9ecc1787b2e1f5136364f3cb3444ef4aea5479f3b98167affea2.marshal → 681890632e3f4a99646623dcae44af36b1bad66c515f5abf67a2460372b9c6fd.marshal} +0 -0
  247. data/rust/host/HECKS_RELEASE +1 -1
  248. data/rust/parser/src/emit.rs +5 -1
  249. data/rust/parser/src/ir.rs +2 -0
  250. data/rust/parser/src/keywords.rs +12 -0
  251. data/rust/parser/src/main.rs +1 -0
  252. data/rust/parser/src/parse/adapter.rs +1 -0
  253. data/rust/parser/src/phrases.rs +16 -0
  254. data/rust/parser/src/sentence/examples.rs +93 -0
  255. data/rust/parser/src/sentence/mod.rs +1 -0
  256. metadata +89 -5
  257. data/lib/hecks/tools/refresh_rspec_runtime_baseline.rb +0 -166
@@ -5,7 +5,7 @@ Hecks.hecksagon "Hecks" do
5
5
  # Expression, Tenancy, Deploy, Site, Tickets, Composer and QualityControl (the last three bring
6
6
  # their own ports), and Coder and Fixer, whose events Tickets and QualityControl react to.
7
7
  %w[Bluebook Hecksagon World Adapter Port Translation Expression Tenancy Deploy Site Tickets Composer QualityControl
8
- Coder Fixer]
8
+ Coder Fixer PipelineBoard Pipeline]
9
9
  .each { |declaration| attaches declaration }
10
10
  # Persistence is not bound here, so the domain is in Memory. A copy opts in with a
11
11
  # hecks.local.hecksagon whose `persisted_by` the attached bluebooks inherit (ADR 0136).
@@ -96,6 +96,16 @@ Hecks.hecksagon "Hecks" do
96
96
  end
97
97
  end
98
98
 
99
+ # Where a boarding's outcome is recorded: the boarded checkout's own launcher records it in that
100
+ # checkout's store. The train's own store stays Memory.
101
+ Hecks::SendTrain.port "PushRecords" do
102
+ asks "RecordOutcome", to: SendTrain do
103
+ attribute :run, RunKey
104
+ answers "OutcomeRecorded"
105
+ refuses "OutcomeUnrecorded"
106
+ end
107
+ end
108
+
99
109
  Hecks::PushRehearsal.port "Rehearsing" do
100
110
  asks "Trial", to: PushRehearsal do
101
111
  attribute :run, RunKey
@@ -106,6 +116,18 @@ Hecks.hecksagon "Hecks" do
106
116
  answers_query "Due"
107
117
  end
108
118
 
119
+ Hecks::RedFlag.port "Flagging" do
120
+ %w[Hoist SignIn Lower Survey].each do |step|
121
+ asks step, to: RedFlag do
122
+ attribute :run, RunKey
123
+ answers "FlagAnswered"
124
+ refuses "FlagRefused"
125
+ end
126
+ end
127
+
128
+ answers_query "Status"
129
+ end
130
+
109
131
  Hecks::QaQuiesce.port "Quiescing" do
110
132
  asks "Mark", to: QaQuiesce do
111
133
  attribute :run, RunKey
@@ -131,6 +153,15 @@ Hecks.hecksagon "Hecks" do
131
153
  end
132
154
  end
133
155
 
156
+ Hecks::SendTrain.port "Leftovers" do
157
+ asks "Leftovers", to: SendTrain do
158
+ attribute :run, RunKey
159
+ attribute :pushed, Word
160
+ answers "LeftoversListed"
161
+ refuses "LeftoversRefused"
162
+ end
163
+ end
164
+
134
165
  Hecks::Workspace.port "Reading" do
135
166
  answers_query "Status"
136
167
  answers_query "Changes"
@@ -196,6 +227,12 @@ Hecks.hecksagon "Hecks" do
196
227
  refuses "RemovalRefused"
197
228
  end
198
229
 
230
+ asks "DropBranch", to: Landing do
231
+ attribute :run, RunKey
232
+ answers "DiscardAnswered"
233
+ refuses "DiscardRefused"
234
+ end
235
+
199
236
  answers_query "Unlanded"
200
237
  end
201
238
 
@@ -209,6 +246,43 @@ Hecks.hecksagon "Hecks" do
209
246
  end
210
247
  end
211
248
 
249
+ # The outside an integration of main reaches: the open runs an advance steps, a clean copy of
250
+ # main for a verification, the push train's own copy for a boarding, and GitHub's CI runs.
251
+ Hecks::Integration.port "Integrating" do
252
+ asks "Step", to: Integration do
253
+ attribute :run, RunKey
254
+ answers "AdvanceAnswered"
255
+ refuses "AdvanceRefused"
256
+ end
257
+ end
258
+
259
+ Hecks::Integration.port "MainVerifying" do
260
+ asks "Check", to: Integration do
261
+ attribute :run, RunKey
262
+ attribute :landed, Word
263
+ answers "VerifyAnswered"
264
+ refuses "VerifyRefused"
265
+ end
266
+ end
267
+
268
+ Hecks::Integration.port "MainBoarding" do
269
+ asks "Embark", to: Integration do
270
+ attribute :run, RunKey
271
+ attribute :landed, Word
272
+ answers "BoardAnswered"
273
+ refuses "BoardRefused"
274
+ end
275
+ end
276
+
277
+ Hecks::Integration.port "CiRuns" do
278
+ asks "Watch", to: Integration do
279
+ attribute :run, RunKey
280
+ attribute :landed, Word
281
+ answers "ObserveAnswered"
282
+ refuses "ObserveRefused"
283
+ end
284
+ end
285
+
212
286
  Hecks::ReviewRequest.port "GitHubPullRequests" do
213
287
  asks "Create", to: ReviewRequest do
214
288
  attribute :run, RunKey
@@ -240,8 +314,8 @@ Hecks.hecksagon "Hecks" do
240
314
  end
241
315
  end
242
316
 
243
- # The outside an agent run reaches: it finds the directory, starts the background session, and
244
- # reports the state the session is in. The state is judged in the bluebook, not here.
317
+ # The outside an agent run reaches: it finds the directory and the agents, starts the background
318
+ # session, and reports the state its job is in. The state is judged in the bluebook, not here.
245
319
  Hecks::AgentRun.port "Agents" do
246
320
  asks "Locate", to: AgentRun do
247
321
  attribute :run, RunKey
@@ -255,10 +329,18 @@ Hecks.hecksagon "Hecks" do
255
329
  refuses "StartRefused"
256
330
  end
257
331
 
258
- asks "Examine", to: AgentRun do
332
+ # The state a session's job is in, with the state the run last recorded beside it.
333
+ asks "ReadJob", to: AgentRun do
259
334
  attribute :run, RunKey
260
- answers "SessionChecked"
261
- refuses "CheckRefused"
335
+ answers "JobRead"
336
+ refuses "JobUnread"
337
+ end
338
+
339
+ # The same reading, taken once a just-started session has had a few seconds to fail.
340
+ asks "AwaitJob", to: AgentRun do
341
+ attribute :run, RunKey
342
+ answers "JobRead"
343
+ refuses "JobUnread"
262
344
  end
263
345
 
264
346
  # Whether a person took the session over is a fact about its transcript; the bluebook judges it.
@@ -866,3 +948,21 @@ Hecks.hecksagon "Tenancy" do
866
948
  trigger Tenant::Register, with: { slug: :slug, domain: :domain, realm: :realm, schema: :schema }
867
949
  end
868
950
  end
951
+
952
+ # A rehearsal that would mint is the record a mint reads: QualityControl's Maintenance keeps the verdict and
953
+ # the watermark the copy held, so Maintenance.MintEra finds it by this run (the mint plan's watermark guard).
954
+ # QualityControl is attached here, so the seam is its translation of the migrate bluebook's audit, not an
955
+ # `across` dispatch. It listens beside Judge, on the same audit and the same condition, because the rehearsal
956
+ # is already five reactions deep at Judge and a reaction to RehearsalJudged would pass the dispatcher's depth bound.
957
+ Hecks.hecksagon "QualityControl" do
958
+ subscribe "Hecks.RehearsalAudited"
959
+
960
+ translates "RecordVerdictWhenNothingWouldStopTheMint" do
961
+ on RehearsalRun::RehearsalAudited
962
+ where do
963
+ (minting.value != "next" || edge_present.value) && refusal_total.value == 0
964
+ end
965
+ trigger Maintenance::RecordRehearsalVerdict, with: { run: :run, domain: :rehearsed_domain,
966
+ watermark: :watermark, rehearsal_verdict: "would_mint" }
967
+ end
968
+ end
@@ -45,6 +45,9 @@
45
45
  # **test_scope** `suite_runs_in` names where the full suite runs ("ci": a local run of it is refused by name) and
46
46
  # `spec_files_limit` is the most spec files one local `run_spec_files!` or `run_impacted_specs!` call runs.
47
47
  #
48
+ # **event_log** `path` is the append-only file the runtime writes events and policy deliveries to (one JSON line each,
49
+ # names and outcomes, never payloads) and `max_bytes` the size at which it moves to `<path>.1`; absent, nothing is written.
50
+ #
48
51
  # **landing** `stale_minutes` is how long a landing's ticket may go without a heartbeat before the next one treats
49
52
  # it as abandoned and removes it (30 when absent); `wait_minutes` is how long a landing waits for its turn in the
50
53
  # line before it gives up (40 when absent); `shell_lock` names a lock directory an older brief makes by hand,
@@ -64,6 +67,10 @@ Hecks.world "Hecks" do
64
67
  # Locally `test_suite_run.run_suite!` is refused, and `run_spec_files!` and `run_impacted_specs!` run at
65
68
  # most `spec_files_limit` files per call; CI is detected by the environment (`CI`, `GITHUB_ACTIONS`).
66
69
  test_scope "Local", suite_runs_in: "ci", spec_files_limit: 25
70
+ # The runtime appends one JSON line per event and per policy delivery here, so a reader such as the
71
+ # PipelineBoard sees the domains that persist nothing (the push train runs in Memory). A client's
72
+ # world declares no `event_log`, so a client writes no file. The file rotates at `max_bytes`.
73
+ event_log "EventTap", path: "~/.claude/hecks-dev/events.jsonl", max_bytes: 5_000_000
67
74
  launcher "Launcher", run_keys: true,
68
75
  settled: %w[package.vendor package.revendor package.release
69
76
  operation.bootstrap_admin smoke_run.run
@@ -72,11 +79,12 @@ Hecks.world "Hecks" do
72
79
  preview_run.url preview_run.list preview_run.deploy
73
80
  preview_run.destroy preview_run.login companion_roll.run
74
81
  handover.clear rehearsal_run.request send_train.board
75
- landing.land landing.train landing.retire agent_run.dispatch agent_run.check],
82
+ landing.land landing.train landing.retire landing.discard agent_run.dispatch agent_run.check],
76
83
  unknown_runs: %w[rehearsal_run.rehearsal_outcome],
77
84
  renamed: { "push_train.push" => "send_train.send", "pull_request.merge" => "review_request.take", "checkout.log" => "workspace.history" },
78
85
  names: { "config" => "workspace.settings", "doctor" => "workspace.doctor", "mcp" => "server.serve_mcp", "console" => "operation.open_console", "init" => "launch.init",
79
86
  "interview" => "launch.interview", "package.check" => "registry.check",
87
+ "agent_run.check_all" => "session_sweep.check_all",
80
88
  "package.digest" => "registry.digest",
81
89
  "package.release" => "registry.release" },
82
90
  streams: %w[Follow],
@@ -908,6 +908,10 @@ Hecks.bluebook "Hecks" do
908
908
  attribute :unchecked, list_of(Limit), sets: true
909
909
  attribute :released, Switch, sets: true
910
910
  attribute :kept, Report, optional: true, sets: true
911
+ # Carried, not kept: the rehearsed bluebook's name and the ledger watermark the copy held, plain, as
912
+ # Maintenance.RecordRehearsalVerdict takes them.
913
+ attribute :rehearsed_domain, String
914
+ attribute :watermark, Integer
911
915
 
912
916
 
913
917
  emits RehearsalAudited
@@ -1035,7 +1039,8 @@ Hecks.bluebook "Hecks" do
1035
1039
  rust_rows_examined: :rust_rows_examined,
1036
1040
  aggregates_examined: :aggregates_examined, reason: :reason,
1037
1041
  parity: :parity, unchecked: :unchecked,
1038
- released: :released, kept: :kept }
1042
+ released: :released, kept: :kept,
1043
+ rehearsed_domain: :rehearsed_domain, watermark: :watermark }
1039
1044
  end
1040
1045
 
1041
1046
  policy "JudgeWhenNothingWouldStopTheMint" do
@@ -0,0 +1,249 @@
1
+ Hecks.bluebook "Hecks" do
2
+ domain_module "Redflag" do
3
+ vision "Main red is a red flag: everyone working hears it, checks in to help, and stops landing until CI is green again."
4
+
5
+ # One request against the standing flag of the repository: raise it, note another red run on it,
6
+ # check in to help, or lower it. The flag itself is a marker in the repository's git directory, so
7
+ # Landing and SendTrain read it from every worktree. A CI run of main that completes red raises it
8
+ # (Integration.CiFailed, or `RedFlag.sync!`), and one that completes green lowers it. One flag
9
+ # stands at a time: a second red run is recorded on it. Anything can listen to the events
10
+ # RedFlagRaised, RedFlagRunNoted, RedFlagCheckedIn and RedFlagCleared through the ordinary journal.
11
+ aggregate "RedFlag" do
12
+ description "One request against main's red flag: raised, noted, checked in to, lowered, or refused."
13
+ created_by "RedFlag.raise!"
14
+
15
+ attribute :run, RunKey
16
+ attribute :commit, Word, optional: true
17
+ attribute :detail, Report, optional: true
18
+ attribute :rows, Report, optional: true
19
+ attribute :session, Word, optional: true
20
+ attribute :taking, Word, optional: true
21
+ attribute :checkout, Word, optional: true
22
+ attribute :flag, Word, optional: true
23
+ attribute :ci_run, Report, optional: true
24
+ attribute :jobs, Report, optional: true
25
+ attribute :output, Report, optional: true
26
+ attribute :refusal, Report, optional: true
27
+ identified_by :run
28
+
29
+ value_object "RunKey" do
30
+ attribute :value, String, matches: :present
31
+ end
32
+
33
+ value_object "Word" do
34
+ attribute :value, String, matches: :present
35
+ end
36
+
37
+ value_object "Report" do
38
+ attribute :value, String
39
+ end
40
+
41
+ value_object "Document" do
42
+ attribute :text, String
43
+ end
44
+
45
+ lifecycle :status, default: "requested" do
46
+ mark :failure, "refused"
47
+ transition "Record" => "raised", from: "requested"
48
+ transition "Note" => "noted", from: "requested"
49
+ transition "Welcome" => "checked_in", from: "requested"
50
+ transition "Lift" => "cleared", from: "requested"
51
+ transition "Settle" => "idle", from: "requested"
52
+ transition "Decline" => "refused", from: "requested"
53
+ mark :terminal, "raised", "noted", "checked_in", "cleared", "idle", "refused"
54
+ end
55
+
56
+ command "Raise" do
57
+ role "System"
58
+ goal "Raise main's red flag for a red CI run, or record the run on the flag already standing"
59
+
60
+ attribute :run, RunKey, sets: true
61
+ attribute :commit, Word, sets: true
62
+ attribute :detail, Report, optional: true, sets: true
63
+ attribute :rows, Report, optional: true, sets: true
64
+ attribute :checkout, Word, optional: true, sets: true
65
+
66
+ emits RaiseRequested
67
+ end
68
+
69
+ command "CheckIn" do
70
+ role "Operator"
71
+ goal "Say who is helping with the red flag and what they take (a red-* Work row or a cause), so nobody fixes the same thing twice"
72
+
73
+ attribute :run, RunKey, sets: true
74
+ attribute :session, Word, sets: true
75
+ attribute :taking, Word, sets: true
76
+ attribute :checkout, Word, optional: true, sets: true
77
+
78
+ emits CheckInRequested
79
+ end
80
+
81
+ command "Clear" do
82
+ role "System"
83
+ goal "Lower main's red flag for a green CI run, which lets landing and the push train resume"
84
+
85
+ attribute :run, RunKey, sets: true
86
+ attribute :commit, Word, optional: true, sets: true
87
+ attribute :checkout, Word, optional: true, sets: true
88
+
89
+ emits ClearRequested
90
+ end
91
+
92
+ command "Sync" do
93
+ role "Operator"
94
+ goal "Read main's newest CI run on GitHub and raise or lower the red flag to match it"
95
+
96
+ attribute :run, RunKey, sets: true
97
+ attribute :checkout, Word, optional: true, sets: true
98
+
99
+ emits SyncRequested
100
+ end
101
+
102
+ command "Record" do
103
+ role "System"
104
+ goal "Record that the red flag was raised, with the main commit, CI run, failed jobs and red Work rows"
105
+
106
+ reference_to RedFlag
107
+ attribute :flag, Word, sets: true
108
+ attribute :commit, Word, sets: true
109
+ attribute :ci_run, Report, optional: true, sets: true
110
+ attribute :jobs, Report, optional: true, sets: true
111
+ attribute :rows, Report, optional: true, sets: true
112
+
113
+ emits RedFlagRaised
114
+ end
115
+
116
+ command "Note" do
117
+ role "System"
118
+ goal "Record another red run on the flag that already stands"
119
+
120
+ reference_to RedFlag
121
+ attribute :flag, Word, sets: true
122
+ attribute :commit, Word, sets: true
123
+ attribute :ci_run, Report, optional: true, sets: true
124
+ attribute :jobs, Report, optional: true, sets: true
125
+
126
+ emits RedFlagRunNoted
127
+ end
128
+
129
+ command "Welcome" do
130
+ role "System"
131
+ goal "Record that a session checked in to help, and what it takes"
132
+
133
+ reference_to RedFlag
134
+ attribute :flag, Word, sets: true
135
+ attribute :session, Word, sets: true
136
+ attribute :taking, Word, sets: true
137
+
138
+ emits RedFlagCheckedIn
139
+ end
140
+
141
+ command "Lift" do
142
+ role "System"
143
+ goal "Record that the red flag was lowered by a green run"
144
+
145
+ reference_to RedFlag
146
+ attribute :flag, Word, sets: true
147
+ attribute :commit, Word, optional: true, sets: true
148
+
149
+ emits RedFlagCleared
150
+ end
151
+
152
+ command "Settle" do
153
+ role "System"
154
+ goal "Record that there was nothing to change: no flag stood to lower, or CI is still running"
155
+
156
+ reference_to RedFlag
157
+ attribute :output, Report, sets: true
158
+
159
+ emits RedFlagUnchanged
160
+ end
161
+
162
+ command "Decline" do
163
+ role "System"
164
+ goal "Record why a request against the flag was refused"
165
+
166
+ reference_to RedFlag
167
+ attribute :refusal, Report, sets: true
168
+
169
+ emits RedFlagDeclined
170
+ end
171
+
172
+ query "Status" do
173
+ description "Whether main is flagged: the flag, its commit, red time, failed jobs and who is helping."
174
+ attribute :run, RunKey, optional: true
175
+ returns Document
176
+ end
177
+ end
178
+
179
+ policy "HoistWhenRaised" do
180
+ on "RedFlag.RaiseRequested"
181
+ ask :hoist, with: { run: :run }
182
+ end
183
+
184
+ policy "SignInWhenCheckedIn" do
185
+ on "RedFlag.CheckInRequested"
186
+ ask :sign_in, with: { run: :run }
187
+ end
188
+
189
+ policy "LowerWhenCleared" do
190
+ on "RedFlag.ClearRequested"
191
+ ask :lower, with: { run: :run }
192
+ end
193
+
194
+ policy "SurveyWhenSynced" do
195
+ on "RedFlag.SyncRequested"
196
+ ask :survey, with: { run: :run }
197
+ end
198
+
199
+ policy "RecordTheRaisedFlag" do
200
+ on "RedFlag.FlagAnswered"
201
+ where { outcome.value == "raised" }
202
+ trigger RedFlag::Record, with: { flag: :flag, commit: :commit, ci_run: :ci_run, jobs: :jobs, rows: :rows }
203
+ end
204
+
205
+ policy "RecordTheNotedRun" do
206
+ on "RedFlag.FlagAnswered"
207
+ where { outcome.value == "noted" }
208
+ trigger RedFlag::Note, with: { flag: :flag, commit: :commit, ci_run: :ci_run, jobs: :jobs }
209
+ end
210
+
211
+ policy "RecordTheCheckIn" do
212
+ on "RedFlag.FlagAnswered"
213
+ where { outcome.value == "checked_in" }
214
+ trigger RedFlag::Welcome, with: { flag: :flag, session: :session, taking: :taking }
215
+ end
216
+
217
+ policy "RecordTheClearedFlag" do
218
+ on "RedFlag.FlagAnswered"
219
+ where { outcome.value == "cleared" }
220
+ trigger RedFlag::Lift, with: { flag: :flag, commit: :commit }
221
+ end
222
+
223
+ policy "RecordTheUnchangedFlag" do
224
+ on "RedFlag.FlagAnswered"
225
+ where { outcome.value == "idle" }
226
+ trigger RedFlag::Settle, with: { output: :output }
227
+ end
228
+
229
+ policy "RecordTheRefusedFlag" do
230
+ on "RedFlag.FlagRefused"
231
+ trigger RedFlag::Decline, with: { refusal: :refusal }
232
+ end
233
+
234
+ # A CI observation that ends red raises the flag; one that ends green lowers it. The policies hear
235
+ # the observation's answer, beside the ones that record it, so the chain stays within the
236
+ # reaction depth bound. The landed commit keys the request.
237
+ policy "RaiseTheFlagWhenCiFails" do
238
+ on "Integration.ObserveAnswered"
239
+ where { outcome.value == "failed" }
240
+ trigger RedFlag::Raise, with: { run: :landed, commit: :landed, detail: :report, checkout: :checkout }
241
+ end
242
+
243
+ policy "LowerTheFlagWhenCiPasses" do
244
+ on "Integration.ObserveAnswered"
245
+ where { outcome.value == "passed" }
246
+ trigger RedFlag::Clear, with: { run: :landed, commit: :landed, checkout: :checkout }
247
+ end
248
+ end
249
+ end
@@ -107,20 +107,6 @@ Hecks.bluebook "Hecks" do
107
107
  attribute :value, String, pattern: '^(host|parser|json)$'
108
108
  end
109
109
 
110
- command "RefreshRuntimeBaseline" do
111
- role "Maintainer"
112
- goal "Regenerate the committed runtime baselines the sharded jobs group from"
113
-
114
- attribute :workers, Count, default: 6, sets: true
115
- attribute :from_run, RunId, optional: true, sets: true
116
- attribute :run, RunKey, sets: true
117
- attribute :confirm, Switch, optional: true, sets: true
118
-
119
- sets :operation, to: "refresh_runtime_baseline"
120
-
121
- emits RefreshRuntimeBaselineRequested
122
- end
123
-
124
110
  command "RunSpecExample" do
125
111
  role "Maintainer"
126
112
  goal "Run one spec file filtered to one example, through the test runner in this process"
@@ -334,11 +320,6 @@ Hecks.bluebook "Hecks" do
334
320
  end
335
321
  end
336
322
 
337
- policy "ExamineWhenRefreshRuntimeBaselineRequested" do
338
- on "TestSuiteRun.RefreshRuntimeBaselineRequested"
339
- ask :examine, with: { run: :run }
340
- end
341
-
342
323
  policy "ExamineWhenRunSpecExampleRequested" do
343
324
  on "TestSuiteRun.RunSpecExampleRequested"
344
325
  ask :examine, with: { run: :run }
@@ -15,6 +15,9 @@ Hecks.bluebook "Adapter" do
15
15
  # What this adapter can do beyond its port's contract, such as `set_transform`. Absent is
16
16
  # not empty: most adapters provide nothing more.
17
17
  attribute :provides, list_of(AdapterCapability)
18
+ # Whether this adapter stays inside: it reaches no network, model or host beyond the process
19
+ # and the checkout, so a behaviors suite may load it (ADR 0171). Absent means it reaches outside.
20
+ attribute :stays_inside, Containment, optional: true
18
21
 
19
22
  # **A plugin answers named queries** — one that `runs` a wasm module says which queries it
20
23
  # answers, each qualified by bluebook and aggregate, and the runtime binds them to it.
@@ -48,6 +51,12 @@ Hecks.bluebook "Adapter" do
48
51
  attribute :value, String, matches: :snake_name
49
52
  end
50
53
 
54
+ # What `stays_inside` records: the one claim an adapter can make about its reach.
55
+ value_object "Containment" do
56
+ attribute :value, String
57
+ invariant("an adapter that says where it reaches stays inside") { value.to_s == "inside" }
58
+ end
59
+
51
60
  # The wasm module a plugin runs: a file beside its `.adapter`, never a path out of it.
52
61
  value_object "PluginModule" do
53
62
  attribute :value, String, pattern: '^[a-z0-9_-]+\.wasm$'
@@ -69,10 +78,13 @@ Hecks.bluebook "Adapter" do
69
78
  attribute :port, AdapterPortName, optional: true
70
79
  # Optional: only a plugin runs a wasm module.
71
80
  attribute :runs, PluginModule, optional: true
81
+ # Optional: only an adapter that says `stays_inside` holds it.
82
+ attribute :stays_inside, Containment, optional: true
72
83
 
73
84
  sets :name
74
85
  sets :port
75
86
  sets :runs
87
+ sets :stays_inside
76
88
 
77
89
  emits "AdapterDeclared"
78
90
  end
@@ -148,6 +160,7 @@ Hecks.bluebook "Adapter" do
148
160
 
149
161
 
150
162
  member word: "provides", context: "Adapter", body: "none", inner: "", opens: "", fills: "provides"
163
+ member word: "stays_inside", context: "Adapter", body: "none", inner: "", opens: "", fills: "stays_inside"
151
164
  end
152
165
 
153
166
  value_object "ArgumentSeed" do
@@ -776,7 +776,7 @@ Hecks.bluebook "Bluebook" do
776
776
  title: "rspec (parallel)",
777
777
  runs_in: "ci",
778
778
  argv: "",
779
- script: "# Workers are grouped by this machine's own last timings, kept under the git directory\n# (shared by every worktree, never committed). CI's committed baseline leaves out the io\n# specs this run includes, so it only seeds the first run; each run then rewrites the log.\nlog=\"$(git rev-parse --git-common-dir)/hecks_rspec_runtime.log\"\n[ -f \"$log\" ] || cp .github/rspec_runtime_baseline.log \"$log\"\nbundle exec parallel_rspec spec -n {workers} --group-by runtime --runtime-log \"$log\" --allowed-missing 100 \\\n -o \"--format progress --format ParallelTests::RSpec::RuntimeLogger --out $log\"\n",
779
+ script: "# Workers are grouped by this machine's own last timings, kept under the git directory\n# (shared by every worktree, never committed); the first run, with none, groups by file size and\n# writes the log.\nlog=\"$(git rev-parse --git-common-dir)/hecks_rspec_runtime.log\"\nif [ -f \"$log\" ]; then grouping=(--group-by runtime --runtime-log \"$log\" --allowed-missing 100); else grouping=(--group-by filesize); fi\nbundle exec parallel_rspec spec -n {workers} \"${grouping[@]}\" \\\n -o \"--format progress --format ParallelTests::RSpec::RuntimeLogger --out $log\"\n",
780
780
  blocked: "the suite is red."
781
781
  member name: "fuzzing", id: "fuzzing",
782
782
  title: "spec/fuzzing, which the parallel run above excludes",
@@ -954,13 +954,13 @@ Hecks.bluebook "Bluebook" do
954
954
  blocked: "a command's arguments changed with no regenerated doc; run `hecks regeneration_run.project_tools_doc! --confirm`."
955
955
  member name: "rust_coverage", id: "rust_coverage",
956
956
  title: "rust coverage, every generated module",
957
- argv: "bundle exec exe/hecks query corpus_run.corpus_rust_coverage --wait",
957
+ argv: "bundle exec exe/hecks corpus_run.corpus_rust_coverage --wait",
958
958
  script: "",
959
959
  blocked: "a construct a domain declares has no generated Rust, or an entry on RUST_COVERAGE_PENDING is now fixed and must be deleted."
960
960
  member name: "rust_coverage_codegen", id: "rust_coverage_codegen",
961
961
  title: "rust coverage against hecks-codegen's own manifest, pizzas governance identity banking meta",
962
962
  argv: "",
963
- script: "for module in pizzas governance identity banking meta; do\n bundle exec exe/hecks query build.rust_coverage module_name=$module codegen=rust --wait\ndone\n",
963
+ script: "for module in pizzas governance identity banking meta; do\n bundle exec exe/hecks build.rust_coverage module_name=$module codegen=rust --wait\ndone\n",
964
964
  blocked: "hecks-codegen generated nothing for a construct a domain declares."
965
965
  member name: "kernel_coverage", id: "kernel_coverage",
966
966
  title: "rust kernel coverage, every capability variant has a kernel file",
@@ -1129,7 +1129,7 @@ Hecks.bluebook "Bluebook" do
1129
1129
  member name: "widening_tiers", type: "Array",
1130
1130
  meaning: "Fuzz depth by `Target.clean_streak`, in three discrete tiers, read by `SweepDepth.for_streak`. The last row (`upto: Float::INFINITY`) is the ceiling."
1131
1131
  member name: "sweep_max_parallel", type: "Integer",
1132
- meaning: "How many `hecks quality_control query sweep.run <target>` children `--all` keeps running at once."
1132
+ meaning: "How many `hecks quality_control sweep.run <target>` children `--all` keeps running at once."
1133
1133
  member name: "liveness_fallback_seconds", type: "Integer",
1134
1134
  meaning: "How long the `/loop hecks_qa` caller waits for a tick's report before assuming it stalled."
1135
1135
  member name: "draft_only", type: "Boolean",
@@ -1147,9 +1147,9 @@ Hecks.bluebook "Bluebook" do
1147
1147
  member name: "runtime_coverage_feedback", type: "Boolean",
1148
1148
  meaning: "Whether guided generation also admits a seed to the corpus for reaching a new line or branch of the Ruby runtime (`Hecks::Fuzzing::RuntimeCoverage`), not only a new (verb, kind, state, mutation, outcome) tuple. Off by default: tracing every line slows each seed."
1149
1149
  member name: "self_consistency_checks", type: "Boolean",
1150
- meaning: "Whether `hecks quality_control query sweep.run` also runs the self-consistency pass (cold rehydration, replay idempotency, value-object JSON round trip) on the same generated sequence."
1150
+ meaning: "Whether `hecks quality_control sweep.run` also runs the self-consistency pass (cold rehydration, replay idempotency, value-object JSON round trip) on the same generated sequence."
1151
1151
  member name: "shrink_budget", type: "Integer",
1152
- meaning: "Candidate replays `hecks quality_control query sweep.run` may spend shrinking one surprised check; 0 turns shrinking off. `concurrency` is never shrunk: a race does not reproduce on demand."
1152
+ meaning: "Candidate replays `hecks quality_control sweep.run` may spend shrinking one surprised check; 0 turns shrinking off. `concurrency` is never shrunk: a race does not reproduce on demand."
1153
1153
  member name: "yield_weight_seconds", type: "Integer",
1154
1154
  meaning: "Seconds of staleness that one point of yield score is worth in `RotationPriority.pick`. Zero would make yield invisible, so pick a number that lets it matter."
1155
1155
  member name: "yield_decay_percent", type: "Integer",
@@ -1157,13 +1157,13 @@ Hecks.bluebook "Bluebook" do
1157
1157
  member name: "rotation_stale_floor_seconds", type: "Integer",
1158
1158
  meaning: "Once a waiting target is this stale, `RotationPriority.pick` takes it whatever its yield score, so a quiet target cannot starve."
1159
1159
  member name: "persistence_parity_seed_cap", type: "Integer",
1160
- meaning: "Ceiling on `--seeds` for `--persistence-parity`, which pays for real Postgres per dispatch. `hecks quality_control query sweep.run` clamps down, never up, and prints a note."
1160
+ meaning: "Ceiling on `--seeds` for `--persistence-parity`, which pays for real Postgres per dispatch. `hecks quality_control sweep.run` clamps down, never up, and prints a note."
1161
1161
  member name: "concurrency_seed_cap", type: "Integer",
1162
1162
  meaning: "Ceiling on `--seeds` for the concurrency mode, which needs two disposable schemas per seed."
1163
1163
  member name: "adapter_parity_pairs", type: "Hash",
1164
1164
  meaning: "The two adapters each adapter-parity mode compares, by mode name; a new pairing is a new entry. `adapter_parity_sqlite` needs no `database:`/`schema:` because sqlite has no disposable database."
1165
1165
  member name: "modes", type: "Hash",
1166
- meaning: "Which comparison modes `hecks quality_control query sweep.run` may run: the enabled ones intersected with what `TargetCapabilities.infer(path)` finds in the target. `--modes a,b,c` overrides for one run. `wasm_front` and `adapter_parity_postgres` are off because nothing runs them; the others are built and off because their I/O cost across the rotation is unmeasured. `hecks quality_control query sweep.run` refuses to start when a mode outside `TargetCapabilities::RUNNABLE_MODES` is enabled."
1166
+ meaning: "Which comparison modes `hecks quality_control sweep.run` may run: the enabled ones intersected with what `TargetCapabilities.infer(path)` finds in the target. `--modes a,b,c` overrides for one run. `wasm_front` and `adapter_parity_postgres` are off because nothing runs them; the others are built and off because their I/O cost across the rotation is unmeasured. `hecks quality_control sweep.run` refuses to start when a mode outside `TargetCapabilities::RUNNABLE_MODES` is enabled."
1167
1167
  member name: "role_draw_probability", type: "Numeric",
1168
1168
  meaning: "How often a generated role-gated command step carries a drawn caller (`role:`/`actor_id:`); 0 turns the draw off."
1169
1169
  member name: "dry_run_fraction", type: "Numeric",
@@ -1308,7 +1308,6 @@ Hecks.bluebook "Bluebook" do
1308
1308
  member script: "rspec_shard_files", section: "Codebase", aggregate: "TestSuiteRun", verb: "shard_specs"
1309
1309
  member script: "rspec_io_parallel_files", section: "Codebase", aggregate: "TestSuiteRun", verb: "list_io_parallel_specs"
1310
1310
  member script: "rspec_io_parallel_files", section: "Codebase", aggregate: "TestSuiteRun", verb: "write_io_parallel_spec_list"
1311
- member script: "refresh_rspec_runtime_baseline", section: "Codebase", aggregate: "TestSuiteRun", verb: "refresh_runtime_baseline"
1312
1311
  member script: "spec_example", section: "Codebase", aggregate: "TestSuiteRun", verb: "run_spec_example"
1313
1312
  member script: "stress_concurrency_specs", section: "Codebase", aggregate: "TestSuiteRun", verb: "stress_concurrency"
1314
1313
  member script: "regenerate_persistence_legacy_fixtures", section: "Codebase", aggregate: "TestSuiteRun", verb: "regenerate_legacy_fixtures"
@@ -187,6 +187,8 @@ Hecks.bluebook "Sentence" do
187
187
  member id: "examples_for", context: "ExamplesFile", pattern: "Examples for: {name:words}", opens: "Examples"
188
188
  member id: "background", context: "Examples", pattern: "Background:", opens: "Background"
189
189
  member id: "example", context: "Examples", pattern: "Example: {title:rest}", opens: "Example"
190
+ member id: "examples_goal", context: "Examples", pattern: "Goal: {goal:rest}", opens: "Goal"
191
+ member id: "goal_example", context: "Goal", pattern: "Example: {title:rest}", opens: "Example"
190
192
  member id: "person_role", context: "Background", pattern: "{person:words} is (a|an) {role:words}", opens: ""
191
193
  member id: "given_step", context: "Example", pattern: "Given {step:rest}", opens: ""
192
194
  member id: "when_step", context: "Example", pattern: "When {step:rest}", opens: ""