hecks 6.0.0 → 7.0.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.
- checksums.yaml +4 -4
- data/exe/hecks +19 -12
- data/lib/hecks/adapters/driven/claude_code.rb +2 -2
- data/lib/hecks/adapters/driven/folder.rb +10 -1
- data/lib/hecks/adapters/driven/folder_overlay.rb +15 -0
- data/lib/hecks/adapters/driven/heki.rb +1 -1
- data/lib/hecks/adapters/driven/in_process_key_vault.rb +1 -1
- data/lib/hecks/adapters/driven/memory/outbox_rows.rb +2 -2
- data/lib/hecks/adapters/driven/postgres/name_guard.rb +25 -0
- data/lib/hecks/adapters/driven/postgres/outbox.rb +3 -3
- data/lib/hecks/adapters/driven/postgres/repository.rb +1 -1
- data/lib/hecks/adapters/driven/postgres/shared_connection.rb +1 -1
- data/lib/hecks/adapters/driven/postgres.rb +3 -0
- data/lib/hecks/adapters/driven/postgres_era/boot.rb +28 -16
- data/lib/hecks/adapters/driven/postgres_era/class_methods.rb +27 -7
- data/lib/hecks/adapters/driven/postgres_era/dialect.rb +10 -5
- data/lib/hecks/adapters/driven/postgres_era/field_cache_provisioner.rb +39 -0
- data/lib/hecks/adapters/driven/postgres_era/journal.rb +52 -13
- data/lib/hecks/adapters/driven/postgres_era/lineage/chain_sql.rb +29 -49
- data/lib/hecks/adapters/driven/postgres_era/lineage/direct_sql.rb +73 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/direct_verified.json +10 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/direct_verified.rb +65 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/domain_rename.rb +77 -25
- data/lib/hecks/adapters/driven/postgres_era/lineage/domain_rename_state.rb +108 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/era_integrity.rb +11 -6
- data/lib/hecks/adapters/driven/postgres_era/lineage/era_store.rb +63 -5
- data/lib/hecks/adapters/driven/postgres_era/lineage/layered_sql.rb +64 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/ledger_reset.rb +150 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/mint_provisioning.rb +85 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/mint_transaction.rb +11 -7
- data/lib/hecks/adapters/driven/postgres_era/lineage/provisioning.rb +11 -5
- data/lib/hecks/adapters/driven/postgres_era/lineage/split_sql.rb +76 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/sql_templates.rb +9 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage.rb +10 -2
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/context.rb +23 -3
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/coverage_check.rb +3 -1
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/disposable_ledger.rb +119 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/era_resolution.rb +219 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/era_resolver.rb +68 -71
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/held_era.rb +68 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/ledger_change.rb +63 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/merge_coordinator.rb +1 -1
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/mint_decision.rb +163 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/mint_request.rb +24 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/minter.rb +59 -21
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/refusals.rb +24 -11
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager.rb +40 -6
- data/lib/hecks/adapters/driven/postgres_era/shared_tables.rb +32 -0
- data/lib/hecks/adapters/driven/postgres_era.adapter +12 -0
- data/lib/hecks/adapters/driven/postgres_era.rb +25 -10
- data/lib/hecks/adapters/driven/prism.rb +0 -1
- data/lib/hecks/adapters/driven/sql_query_builder.rb +1 -0
- data/lib/hecks/adapters/driven/sqlite/dispatch_claims.rb +1 -1
- data/lib/hecks/adapters/driven/sqlite/name_guard.rb +25 -0
- data/lib/hecks/adapters/driven/sqlite/outbox.rb +2 -2
- data/lib/hecks/adapters/driven/sqlite/repository.rb +1 -1
- data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +20 -0
- data/lib/hecks/adapters/driven/sqlite.rb +9 -1
- data/lib/hecks/adapters/driven/tenant_provisioner.rb +1 -1
- data/lib/hecks/adapters/driven/worktree_overlay.rb +117 -0
- data/lib/hecks/adapters/driving/cli/shorthand.rb +5 -1
- data/lib/hecks/adapters/driving/cli.rb +1 -1
- data/lib/hecks/adapters/driving/cli_runner/answers.rb +77 -22
- data/lib/hecks/adapters/driving/cli_runner/bang_rule.rb +35 -0
- data/lib/hecks/adapters/driving/cli_runner/completion_words.rb +36 -0
- data/lib/hecks/adapters/driving/cli_runner/json_words.rb +55 -0
- data/lib/hecks/adapters/driving/cli_runner/name_index.rb +63 -0
- data/lib/hecks/adapters/driving/cli_runner/read_context.rb +32 -0
- data/lib/hecks/adapters/driving/cli_runner/renamed_names.rb +49 -0
- data/lib/hecks/adapters/driving/cli_runner/resolution.rb +43 -17
- data/lib/hecks/adapters/driving/cli_runner/resume_words.rb +63 -0
- data/lib/hecks/adapters/driving/cli_runner/run_reference.rb +66 -0
- data/lib/hecks/adapters/driving/cli_runner/run_replay.rb +118 -0
- data/lib/hecks/adapters/driving/cli_runner/search_words.rb +35 -0
- data/lib/hecks/adapters/driving/cli_runner/settling.rb +6 -5
- data/lib/hecks/adapters/driving/cli_runner/streaming.rb +11 -10
- data/lib/hecks/adapters/driving/cli_runner/suggestions.rb +1 -1
- data/lib/hecks/adapters/driving/cli_runner/tour_words.rb +77 -0
- data/lib/hecks/adapters/driving/cli_runner/verb_names.rb +36 -4
- data/lib/hecks/adapters/driving/cli_runner/verbosity.rb +75 -0
- data/lib/hecks/adapters/driving/cli_runner.rb +106 -7
- data/lib/hecks/adapters/driving/context_line.rb +85 -0
- data/lib/hecks/adapters/driving/exit_status.rb +31 -0
- data/lib/hecks/adapters/driving/launcher_options.rb +7 -5
- data/lib/hecks/adapters/driving/mcp/progress_sink.rb +45 -0
- data/lib/hecks/adapters/driving/mcp/tool_calls.rb +7 -5
- data/lib/hecks/adapters/driving/mcp.rb +25 -5
- data/lib/hecks/adapters/driving/mcp_scope/argument_policy.rb +40 -7
- data/lib/hecks/adapters/driving/mcp_scope.rb +8 -7
- data/lib/hecks/adapters/driving/ruby/aggregate_module/hooks.rb +154 -0
- data/lib/hecks/adapters/driving/ruby/aggregate_module.rb +64 -93
- data/lib/hecks/adapters/driving/usage_log.rb +146 -0
- data/lib/hecks/adapters/driving/write_guard.rb +55 -0
- data/lib/hecks/adapters/driving.rb +0 -1
- data/lib/hecks/behaviors/dsl.rb +5 -1
- data/lib/hecks/behaviors/expectations/boot.rb +0 -1
- data/lib/hecks/bluebook/acknowledgements.rb +1 -1
- data/lib/hecks/bluebook/aggregate.rb +21 -18
- data/lib/hecks/bluebook/assembly/contracts/sagas.rb +2 -0
- data/lib/hecks/bluebook/assembly/contracts/structure.rb +18 -13
- data/lib/hecks/bluebook/behaviour/aggregate.rb +27 -3
- data/lib/hecks/bluebook/command.rb +16 -5
- data/lib/hecks/bluebook/declaration.rb +32 -4
- data/lib/hecks/bluebook/domain_port.rb +7 -3
- data/lib/hecks/bluebook/dsl/aggregate_builder/relationships.rb +0 -2
- data/lib/hecks/bluebook/dsl/aggregate_builder/renaming.rb +25 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder.rb +3 -0
- data/lib/hecks/bluebook/dsl/attribute_collector.rb +0 -1
- data/lib/hecks/bluebook/dsl/audience_word.rb +40 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/metadata.rb +56 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/modules.rb +80 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/correlation_keys.rb +51 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation.rb +1 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +17 -34
- data/lib/hecks/bluebook/dsl/bootstrap_table.rb +8 -0
- data/lib/hecks/bluebook/dsl/command_builder.rb +13 -3
- data/lib/hecks/bluebook/dsl/entity_builder.rb +0 -2
- data/lib/hecks/bluebook/dsl/generic_dispatch.rb +6 -4
- data/lib/hecks/bluebook/dsl/kinds.rb +53 -0
- data/lib/hecks/bluebook/dsl/port_operation_builder.rb +9 -2
- data/lib/hecks/bluebook/dsl/process_manager_builder.rb +25 -15
- data/lib/hecks/bluebook/dsl/translation_builder.rb +16 -1
- data/lib/hecks/bluebook/dsl/word_gate.rb +1 -1
- data/lib/hecks/bluebook/dsl.rb +1 -0
- data/lib/hecks/bluebook/meta_validator/judge/identity.rb +9 -4
- data/lib/hecks/bluebook/meta_validator/plan/category.rb +10 -2
- data/lib/hecks/bluebook/meta_validator/plan/verbs.rb +9 -0
- data/lib/hecks/bluebook/meta_validator/plan.rb +2 -1
- data/lib/hecks/bluebook/meta_validator/reconstruction/heads.rb +3 -1
- data/lib/hecks/bluebook/meta_validator/reconstruction/reading.rb +7 -0
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +7 -2
- data/lib/hecks/bluebook/meta_validator/shapes.rb +3 -0
- data/lib/hecks/bluebook/meta_validator/syntax_boot/disk_cache.rb +1 -1
- data/lib/hecks/bluebook/model_check/aggregate_checks.rb +27 -0
- data/lib/hecks/bluebook/model_check/ask_checks.rb +25 -0
- data/lib/hecks/bluebook/model_check/reaction_chains.rb +114 -0
- data/lib/hecks/bluebook/model_check/reaction_cycles.rb +53 -0
- data/lib/hecks/bluebook/model_check/reaction_depth_checks.rb +58 -0
- data/lib/hecks/bluebook/model_check/reaction_walk.rb +62 -0
- data/lib/hecks/bluebook/model_check.rb +5 -27
- data/lib/hecks/bluebook/process_manager.rb +20 -3
- data/lib/hecks/bluebook/translation.rb +5 -3
- data/lib/hecks/bluebook/translation_plan.rb +9 -2
- data/lib/hecks/ci_pipeline/adapters/ci_cache.adapter +7 -0
- data/lib/hecks/ci_pipeline/adapters/ci_cache.rb +39 -0
- data/lib/hecks/ci_pipeline/adapters/ci_runner.adapter +7 -0
- data/lib/hecks/ci_pipeline/adapters/ci_runner.rb +55 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.behaviors +322 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.bluebook +938 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.hecksagon +12 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.ports.hecksagon +16 -0
- data/lib/hecks/ci_speed/adapters/ci_reader.adapter +7 -0
- data/lib/hecks/ci_speed/adapters/ci_reader.rb +141 -0
- data/lib/hecks/ci_speed/adapters/local_runner/answer.rb +41 -0
- data/lib/hecks/ci_speed/adapters/local_runner/catalog.rb +89 -0
- data/lib/hecks/ci_speed/adapters/local_runner/checkouts.rb +89 -0
- data/lib/hecks/ci_speed/adapters/local_runner/launcher.rb +69 -0
- data/lib/hecks/ci_speed/adapters/local_runner/load_average.rb +38 -0
- data/lib/hecks/ci_speed/adapters/local_runner/refs.rb +39 -0
- data/lib/hecks/ci_speed/adapters/local_runner/refused.rb +11 -0
- data/lib/hecks/ci_speed/adapters/local_runner/verdict.rb +71 -0
- data/lib/hecks/ci_speed/adapters/local_runner.adapter +7 -0
- data/lib/hecks/ci_speed/adapters/local_runner.rb +168 -0
- data/lib/hecks/ci_speed/adapters/replayed_runner.rb +39 -0
- data/lib/hecks/ci_speed/ci_speed.behaviors +341 -0
- data/lib/hecks/ci_speed/ci_speed.bluebook +1073 -0
- data/lib/hecks/ci_speed/ci_speed.hecksagon +11 -0
- data/lib/hecks/ci_speed/ci_speed.ports.hecksagon +21 -0
- data/lib/hecks/ci_workflows/ci_workflows.behaviors +13 -0
- data/lib/hecks/ci_workflows/ci_workflows.bluebook +173 -0
- data/lib/hecks/ci_workflows/ci_workflows.hecksagon +15 -0
- data/lib/hecks/coder/coder.bluebook +385 -0
- data/lib/hecks/coder/coder.hecksagon +12 -0
- data/lib/hecks/command_names/check.rb +39 -0
- data/lib/hecks/command_names/extractor.rb +67 -0
- data/lib/hecks/command_names/index.rb +40 -0
- data/lib/hecks/command_names/resolution.rb +81 -0
- data/lib/hecks/command_names/scan.rb +54 -0
- data/lib/hecks/command_names/sources.rb +73 -0
- data/lib/hecks/command_names.rb +26 -0
- data/lib/hecks/composer/jobs.rb +1 -1
- data/lib/hecks/composer/toolbox.rb +8 -1
- data/lib/hecks/corpus/generated_key.rb +205 -0
- data/lib/hecks/corpus/listing.rb +34 -0
- data/lib/hecks/corpus/rust.rb +27 -11
- data/lib/hecks/corpus/sources.rb +2 -1
- data/lib/hecks/corpus.rb +37 -42
- data/lib/hecks/deprecation.rb +23 -0
- data/lib/hecks/doc/reference/readme.rb +1 -1
- data/lib/hecks/doc/reference/rendering.rb +2 -2
- data/lib/hecks/doc/reference.rb +1 -1
- data/lib/hecks/embryonaut_bluebook/manifest.rb +1 -1
- data/lib/hecks/fixer/fixer.bluebook +240 -0
- data/lib/hecks/fixer/fixer.hecksagon +17 -0
- data/lib/hecks/framework_bluebooks.rb +32 -7
- data/lib/hecks/fuzzing/concurrent_dispatch/world_copy.rb +1 -0
- data/lib/hecks/fuzzing/isolated_boot/postgres_scratch.rb +11 -12
- data/lib/hecks/fuzzing/isolated_boot/worlds.rb +23 -5
- data/lib/hecks/fuzzing/isolated_boot.rb +1 -1
- data/lib/hecks/fuzzing/mutation/checks.rb +3 -3
- data/lib/hecks/grammar/translation.bluebook +1 -1
- data/lib/hecks/grammar/translation_rules.json +64 -0
- data/lib/hecks/hecks/adapter_words.json +7 -0
- data/lib/hecks/hecks/adapters/area_overlap.rb +156 -0
- data/lib/hecks/hecks/adapters/claude_agents.rb +8 -3
- data/lib/hecks/hecks/adapters/codebase/batch_runs.rb +60 -0
- data/lib/hecks/hecks/adapters/codebase/changed_specs.rb +52 -0
- data/lib/hecks/hecks/adapters/codebase/codemods.rb +3 -2
- data/lib/hecks/hecks/adapters/codebase/conformance.rb +14 -1
- data/lib/hecks/hecks/adapters/codebase/corpus_queries.rb +53 -0
- data/lib/hecks/hecks/adapters/codebase/generated_keys.rb +31 -0
- data/lib/hecks/hecks/adapters/codebase/impacted_specs.rb +110 -0
- data/lib/hecks/hecks/adapters/codebase/language.rb +2 -2
- data/lib/hecks/hecks/adapters/codebase/launcher_text.rb +39 -0
- data/lib/hecks/hecks/adapters/codebase/minitest_runs.rb +52 -0
- data/lib/hecks/hecks/adapters/codebase/regeneration.rb +51 -8
- data/lib/hecks/hecks/adapters/codebase/run_options.rb +35 -0
- data/lib/hecks/hecks/adapters/codebase/scripting.rb +39 -0
- data/lib/hecks/hecks/adapters/codebase/search.rb +1 -1
- data/lib/hecks/hecks/adapters/codebase/source_tree.rb +79 -51
- data/lib/hecks/hecks/adapters/codebase/spec_files/report.rb +71 -0
- data/lib/hecks/hecks/adapters/codebase/spec_files/shared_run.rb +73 -0
- data/lib/hecks/hecks/adapters/codebase/spec_files.rb +95 -0
- data/lib/hecks/hecks/adapters/codebase/test_runner.rb +53 -4
- data/lib/hecks/hecks/adapters/codebase/test_scope.rb +105 -0
- data/lib/hecks/hecks/adapters/codebase/test_suite.rb +48 -34
- data/lib/hecks/hecks/adapters/console_capture.rb +1 -1
- data/lib/hecks/hecks/adapters/cost_explorer.rb +9 -1
- data/lib/hecks/hecks/adapters/dispatching/brief_text.rb +51 -0
- data/lib/hecks/hecks/adapters/dispatching/launcher.rb +97 -0
- data/lib/hecks/hecks/adapters/dispatching/plan.rb +82 -0
- data/lib/hecks/hecks/adapters/dispatching/rows.rb +66 -0
- data/lib/hecks/hecks/adapters/dispatching/settings.rb +81 -0
- data/lib/hecks/hecks/adapters/dispatching/settler.rb +40 -0
- data/lib/hecks/hecks/adapters/dispatching.adapter +7 -0
- data/lib/hecks/hecks/adapters/dispatching.rb +93 -0
- data/lib/hecks/hecks/adapters/doctor_reading/report.rb +27 -0
- data/lib/hecks/hecks/adapters/doctor_reading.adapter +7 -0
- data/lib/hecks/hecks/adapters/doctor_reading.rb +161 -0
- data/lib/hecks/hecks/adapters/git_checkout.rb +1 -1
- data/lib/hecks/hecks/adapters/git_commit.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_commit.rb +61 -0
- data/lib/hecks/hecks/adapters/git_landing/finisher.rb +82 -0
- data/lib/hecks/hecks/adapters/git_landing/foreign_hold.rb +111 -0
- data/lib/hecks/hecks/adapters/git_landing/line.rb +171 -0
- data/lib/hecks/hecks/adapters/git_landing/lineup.rb +98 -0
- data/lib/hecks/hecks/adapters/git_landing/merger.rb +1 -1
- data/lib/hecks/hecks/adapters/git_landing/numbering.rb +54 -0
- data/lib/hecks/hecks/adapters/git_landing/rivals.rb +59 -0
- data/lib/hecks/hecks/adapters/git_landing/ticket.rb +156 -0
- data/lib/hecks/hecks/adapters/git_landing/tidy.rb +147 -0
- data/lib/hecks/hecks/adapters/git_landing/train.rb +104 -0
- data/lib/hecks/hecks/adapters/git_landing/verdict.rb +64 -0
- data/lib/hecks/hecks/adapters/git_landing/waiting.rb +120 -0
- data/lib/hecks/hecks/adapters/git_landing.rb +106 -20
- data/lib/hecks/hecks/adapters/git_main_pull.rb +99 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/bench.rb +82 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/due.rb +84 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/impacted/skips.rb +47 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/impacted/spec_run.rb +75 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/impacted.rb +181 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/line.rb +76 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/reading.rb +24 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/record.rb +146 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/spec_map/corpus.rb +25 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/spec_map/needles.rb +61 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/spec_map.rb +105 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/stages.rb +118 -0
- data/lib/hecks/hecks/adapters/git_rehearsal.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_rehearsal.rb +141 -0
- data/lib/hecks/hecks/adapters/git_train/bench.rb +15 -15
- data/lib/hecks/hecks/adapters/git_train/branch_guard.rb +62 -0
- data/lib/hecks/hecks/adapters/git_train/carriage.rb +27 -28
- data/lib/hecks/hecks/adapters/git_train/launcher_shape.rb +75 -0
- data/lib/hecks/hecks/adapters/git_train/mint_step.rb +47 -0
- data/lib/hecks/hecks/adapters/git_train/settlement.rb +167 -0
- data/lib/hecks/hecks/adapters/git_train.rb +73 -15
- data/lib/hecks/hecks/adapters/git_worktree_add.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_worktree_add.rb +68 -0
- data/lib/hecks/hecks/adapters/github_pull_requests.adapter +7 -0
- data/lib/hecks/hecks/adapters/github_pull_requests.rb +109 -0
- data/lib/hecks/hecks/adapters/host_http.rb +6 -6
- data/lib/hecks/hecks/adapters/in_process_boot.rb +10 -8
- data/lib/hecks/hecks/adapters/in_process_operations.rb +11 -17
- data/lib/hecks/hecks/adapters/in_process_undo.rb +17 -0
- data/lib/hecks/hecks/adapters/journal_store/changes.rb +13 -4
- data/lib/hecks/hecks/adapters/journal_store/edge_audit.rb +28 -15
- data/lib/hecks/hecks/adapters/journal_store/examination.rb +17 -1
- data/lib/hecks/hecks/adapters/journal_store/held_domain/renaming.rb +45 -0
- data/lib/hecks/hecks/adapters/journal_store/held_domain.rb +31 -5
- data/lib/hecks/hecks/adapters/journal_store/held_mint.rb +128 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/attestation.rb +1 -1
- data/lib/hecks/hecks/adapters/journal_store/readings/boot_status.rb +58 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/composition.rb +39 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/outcomes.rb +76 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/postgres_reader.rb +44 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/reader.rb +64 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/report.rb +102 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/sqlite_reader.rb +43 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/stores.rb +80 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/subscribers.rb +72 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/summary.rb +39 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace.rb +39 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/command_line.rb +57 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/edge_guards.rb +107 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/inspection.rb +94 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/plan.rb +66 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/report.rb +72 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/store.rb +34 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/watermark_guards.rb +86 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/world.rb +66 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan.rb +36 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/projection_audit.rb +64 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/scaffolding.rb +3 -3
- data/lib/hecks/hecks/adapters/journal_store/readings/sqlite_status/database_reading.rb +113 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/sqlite_status/read_only.rb +33 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/sqlite_status.rb +32 -0
- data/lib/hecks/hecks/adapters/journal_store/readings.rb +13 -1
- data/lib/hecks/hecks/adapters/journal_store/reconcile_report.rb +60 -0
- data/lib/hecks/hecks/adapters/journal_store/reconciliation.rb +121 -0
- data/lib/hecks/hecks/adapters/journal_store/translation_write/shape_edge.rb +59 -0
- data/lib/hecks/hecks/adapters/journal_store/translation_write.rb +123 -0
- data/lib/hecks/hecks/adapters/journal_store.rb +16 -0
- data/lib/hecks/hecks/adapters/landed_work.adapter +7 -0
- data/lib/hecks/hecks/adapters/landed_work.rb +52 -0
- data/lib/hecks/hecks/adapters/local_files.rb +6 -6
- data/lib/hecks/hecks/adapters/process_pool.rb +3 -2
- data/lib/hecks/hecks/adapters/push_size.rb +57 -0
- data/lib/hecks/hecks/adapters/qa_quiescing.adapter +7 -0
- data/lib/hecks/hecks/adapters/qa_quiescing.rb +57 -0
- data/lib/hecks/hecks/adapters/rehearsal/inquiry.rb +30 -3
- data/lib/hecks/hecks/adapters/rehearsal/memory_store.rb +63 -3
- data/lib/hecks/hecks/adapters/rehearsal/postgres_reading.rb +29 -6
- data/lib/hecks/hecks/adapters/rehearsal/subject.rb +11 -5
- data/lib/hecks/hecks/adapters/rust_toolchain.rb +10 -1
- data/lib/hecks/hecks/adapters/rust_workspace.rb +1 -1
- data/lib/hecks/hecks/adapters/settings_reading/disposable_ledger.rb +32 -0
- data/lib/hecks/hecks/adapters/settings_reading/push_nudge.rb +26 -0
- data/lib/hecks/hecks/adapters/settings_reading/stores.rb +76 -0
- data/lib/hecks/hecks/adapters/settings_reading/test_scope.rb +28 -0
- data/lib/hecks/hecks/adapters/settings_reading.rb +28 -2
- data/lib/hecks/hecks/adapters/started_work.rb +42 -0
- data/lib/hecks/hecks/adapters/terminal.rb +12 -10
- data/lib/hecks/hecks/adapters/where_reading.adapter +7 -0
- data/lib/hecks/hecks/adapters/where_reading.rb +64 -0
- data/lib/hecks/hecks/adapters/work_areas.rb +57 -0
- data/lib/hecks/hecks/adapters/work_limits.rb +57 -0
- data/lib/hecks/hecks/build/build.bluebook +576 -0
- data/lib/hecks/hecks/check/check.bluebook +966 -0
- data/lib/hecks/hecks/codebase.behaviors +61 -5
- data/lib/hecks/hecks/composer.behaviors +1 -1
- data/lib/hecks/hecks/context_map.hecksagon +1 -1
- data/lib/hecks/hecks/custodian.behaviors +33 -7
- data/lib/hecks/hecks/delegate/delegate.bluebook +355 -0
- data/lib/hecks/hecks/deliver/deliver.bluebook +945 -0
- data/lib/hecks/hecks/deploy.behaviors +1 -1
- data/lib/hecks/hecks/evolve/evolve.bluebook +788 -0
- data/lib/hecks/hecks/find/find.bluebook +81 -0
- data/lib/hecks/hecks/hecks.behaviors +1 -1
- data/lib/hecks/hecks/hecks.bluebook +0 -133
- data/lib/hecks/hecks/hecks.contextmap +2 -0
- data/lib/hecks/hecks/hecks.hecksagon +185 -29
- data/lib/hecks/hecks/hecks.world +35 -9
- data/lib/hecks/hecks/implicit_moves.json +24 -0
- data/lib/hecks/hecks/migrate/migrate.bluebook +1066 -0
- data/lib/hecks/hecks/operate/operate.bluebook +695 -0
- data/lib/hecks/hecks/quiesce/quiesce.bluebook +117 -0
- data/lib/hecks/hecks/rehearse/rehearse.bluebook +133 -0
- data/lib/hecks/hecks/release/release.bluebook +916 -0
- data/lib/hecks/hecks/serve/serve.bluebook +134 -0
- data/lib/hecks/hecks/shapes.json +1 -15
- data/lib/hecks/hecks/site.behaviors +1 -1
- data/lib/hecks/hecks/start/start.bluebook +194 -0
- data/lib/hecks/hecks/test/test.bluebook +638 -0
- data/lib/hecks/hecks/tickets.world +14 -0
- data/lib/hecks/language/bluebook/aggregate.bluebook +22 -0
- data/lib/hecks/language/bluebook/bluebook.bluebook +34 -0
- data/lib/hecks/language/bluebook/command.bluebook +35 -0
- data/lib/hecks/language/bluebook/process_manager.bluebook +14 -1
- data/lib/hecks/language/bluebook/vocabulary.bluebook +174 -54
- data/lib/hecks/language/hecksagon/domain_port.bluebook +1 -0
- data/lib/hecks/language/hecksagon/port_operation.bluebook +14 -0
- data/lib/hecks/language/kinds/run.kind +120 -0
- data/lib/hecks/language/oidc.json +10 -0
- data/lib/hecks/language/translation/translation_aggregate.bluebook +24 -0
- data/lib/hecks/module_folders.rb +31 -0
- data/lib/hecks/ports/key_vault.rb +1 -1
- data/lib/hecks/ports/persistence/append_only.rb +26 -8
- data/lib/hecks/ports/persistence/binding_policy.rb +3 -1
- data/lib/hecks/ports/persistence/codec_boundary.rb +1 -1
- data/lib/hecks/ports/persistence/mint_door.rb +74 -0
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +6 -5
- data/lib/hecks/ports/persistence/plugins/era/era_guard/shape_diff.rb +5 -1
- data/lib/hecks/ports/persistence/plugins/era/era_status.rb +48 -0
- data/lib/hecks/ports/persistence/plugins/era/projected_bluebook.rb +127 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/additive_shape.rb +107 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/compose.rb +155 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/compose_render.rb +79 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/edge_files.rb +49 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/edge_route.rb +61 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/implicit_edge.rb +67 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/reconcile.rb +130 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/reconcile_files.rb +35 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/differ.rb +13 -5
- data/lib/hecks/ports/persistence/plugins/era/translation.rb +5 -0
- data/lib/hecks/ports/persistence/plugins/era.rb +1 -0
- data/lib/hecks/ports/persistence/repository_factory.rb +11 -3
- data/lib/hecks/ports/persistence/stored_name_guard.rb +36 -0
- data/lib/hecks/ports/persistence.rb +2 -0
- data/lib/hecks/projections/ci_pipeline/table/checks.rb +137 -0
- data/lib/hecks/projections/ci_pipeline/table/lookup.rb +59 -0
- data/lib/hecks/projections/ci_pipeline/table/refusals.rb +58 -0
- data/lib/hecks/projections/ci_pipeline/table/rows.rb +119 -0
- data/lib/hecks/projections/ci_pipeline/table/tree.rb +30 -0
- data/lib/hecks/projections/ci_pipeline/table/typing.rb +92 -0
- data/lib/hecks/projections/ci_pipeline/table.rb +112 -0
- data/lib/hecks/projections/ci_pipeline/workflows.rb +162 -0
- data/lib/hecks/projections/ci_pipeline/yaml_text.rb +104 -0
- data/lib/hecks/projections/deploy/box/hosting.rb +1 -1
- data/lib/hecks/projections/deploy/box/roll_recipe.rb +1 -1
- data/lib/hecks/projections/deploy/box/roll_scripts.rb +1 -1
- data/lib/hecks/projections/deploy/box.rb +1 -1
- data/lib/hecks/projections/deploy/templates/fargate/Makefile.tmpl +1 -1
- data/lib/hecks/projections/deploy/templates/lambda/Makefile.tmpl +3 -3
- data/lib/hecks/projections/undo.rb +46 -0
- data/lib/hecks/projections.rb +2 -0
- data/lib/hecks/projector/cli_projector/claims.rb +11 -0
- data/lib/hecks/projector/cli_projector/command_help.rb +6 -1
- data/lib/hecks/projector/cli_projector/command_specs.rb +11 -1
- data/lib/hecks/projector/cli_projector/completion.rb +87 -0
- data/lib/hecks/projector/cli_projector/everyday.rb +40 -0
- data/lib/hecks/projector/cli_projector/json_listing.rb +77 -0
- data/lib/hecks/projector/cli_projector/listing.rb +1 -1
- data/lib/hecks/projector/cli_projector/modules.rb +39 -0
- data/lib/hecks/projector/cli_projector/query_specs.rb +1 -0
- data/lib/hecks/projector/cli_projector/renames.rb +58 -0
- data/lib/hecks/projector/cli_projector/search.rb +74 -0
- data/lib/hecks/projector/cli_projector/usage.rb +23 -6
- data/lib/hecks/projector/cli_projector.rb +24 -1
- data/lib/hecks/quality_control/adapters/ci_head.adapter +8 -0
- data/lib/hecks/quality_control/adapters/image_roll.adapter +9 -0
- data/lib/hecks/quality_control/adapters/image_roll.rb +158 -0
- data/lib/hecks/quality_control/adapters/main_maintenance.adapter +8 -0
- data/lib/hecks/quality_control/adapters/main_maintenance.rb +275 -0
- data/lib/hecks/quality_control/adapters/pump_tools.adapter +7 -0
- data/lib/hecks/quality_control/adapters/pump_tools.rb +18 -0
- data/lib/hecks/quality_control/adapters/push_due_reader.adapter +8 -0
- data/lib/hecks/quality_control/adapters/push_due_reader.rb +99 -0
- data/lib/hecks/quality_control/adapters/qa_auto_mint.rb +183 -0
- data/lib/hecks/quality_control/adapters/qa_era_mint.rb +94 -0
- data/lib/hecks/quality_control/adapters/qa_quiesce_marker.rb +126 -0
- data/lib/hecks/quality_control/adapters/run_keys.rb +36 -0
- data/lib/hecks/quality_control/adapters/run_reader.adapter +7 -0
- data/lib/hecks/quality_control/adapters/run_reader.rb +188 -0
- data/lib/hecks/quality_control/cli/child.rb +1 -0
- data/lib/hecks/quality_control/cli/qa_discover_external_domains/scanning.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_domain_novelty.rb +3 -3
- data/lib/hecks/quality_control/cli/qa_event_pump/attached.rb +67 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/consumer.rb +103 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/cursors.rb +60 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/reactions.rb +46 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/reader.rb +30 -0
- data/lib/hecks/quality_control/cli/qa_event_pump.rb +76 -0
- data/lib/hecks/quality_control/cli/qa_fix_main_bug/publishing.rb +79 -0
- data/lib/hecks/quality_control/cli/qa_fix_main_bug.rb +167 -0
- data/lib/hecks/quality_control/cli/qa_generated_domains/evaluation.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_generated_domains/promotion.rb +3 -3
- data/lib/hecks/quality_control/cli/qa_main_gate/gate_run.rb +52 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/logging.rb +70 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/shell.rb +47 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/sweeping.rb +59 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/worktree.rb +62 -0
- data/lib/hecks/quality_control/cli/qa_main_gate.rb +135 -0
- data/lib/hecks/quality_control/cli/qa_postgres_role.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_pr_check/checking.rb +2 -3
- data/lib/hecks/quality_control/cli/qa_push_nudge.rb +48 -0
- data/lib/hecks/quality_control/cli/qa_seed_angles/seed.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_sweep/seat.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_tick/event_pump_step.rb +34 -0
- data/lib/hecks/quality_control/cli/qa_tick/output.rb +16 -1
- data/lib/hecks/quality_control/cli/qa_tick/push_nudge_step.rb +28 -0
- data/lib/hecks/quality_control/cli/qa_tick/quiesce_guard.rb +51 -0
- data/lib/hecks/quality_control/cli/qa_tick.rb +36 -8
- data/lib/hecks/quality_control/quality_control.behaviors +65 -0
- data/lib/hecks/quality_control/quality_control.bluebook +1131 -11
- data/lib/hecks/quality_control/quality_control.hecksagon +11 -0
- data/lib/hecks/quality_control/quality_control.ports.hecksagon +138 -0
- data/lib/hecks/query_ir/touchpoints.rb +5 -7
- data/lib/hecks/refused.rb +21 -0
- data/lib/hecks/release/approval.rb +6 -3
- data/lib/hecks/release/conditions.rb +46 -0
- data/lib/hecks/release/runner/gem_publisher.rb +4 -4
- data/lib/hecks/release/version_commit.rb +48 -0
- data/lib/hecks/runtime/command_interpreter/hydration.rb +5 -4
- data/lib/hecks/runtime/command_interpreter/persisting.rb +11 -3
- data/lib/hecks/runtime/command_interpreter.rb +2 -2
- data/lib/hecks/runtime/command_rules/admissibility.rb +0 -2
- data/lib/hecks/runtime/command_rules/emission.rb +0 -1
- data/lib/hecks/runtime/dependency_planning/expression_reads.rb +0 -1
- data/lib/hecks/runtime/dispatcher/planning.rb +24 -0
- data/lib/hecks/runtime/dispatcher/routing.rb +6 -0
- data/lib/hecks/runtime/dispatcher/value_routing.rb +54 -0
- data/lib/hecks/runtime/dispatcher.rb +7 -1
- data/lib/hecks/runtime/dry_run_plan.rb +60 -0
- data/lib/hecks/runtime/entity_element/location.rb +0 -1
- data/lib/hecks/runtime/entity_element/mutations.rb +0 -1
- data/lib/hecks/runtime/entity_interpreter/locating.rb +5 -0
- data/lib/hecks/runtime/entity_interpreter.rb +0 -1
- data/lib/hecks/runtime/errors.rb +26 -0
- data/lib/hecks/runtime/instance.rb +0 -1
- data/lib/hecks/runtime/invocation_builder.rb +0 -1
- data/lib/hecks/runtime/outbox/consumer_runner.rb +9 -1
- data/lib/hecks/runtime/outbox/relay.rb +25 -4
- data/lib/hecks/runtime/outbox/runnable.rb +3 -1
- data/lib/hecks/runtime/outbox.rb +6 -2
- data/lib/hecks/runtime/policy_interpreter/fan_out.rb +18 -2
- data/lib/hecks/runtime/policy_interpreter.rb +17 -9
- data/lib/hecks/runtime/port_operation_interpreter.rb +21 -7
- data/lib/hecks/runtime/query_interpreter/arguments.rb +6 -5
- data/lib/hecks/runtime/reaction_invocation.rb +0 -1
- data/lib/hecks/runtime/refusal_wording.rb +12 -1
- data/lib/hecks/runtime/registry/context_maps.rb +1 -5
- data/lib/hecks/runtime/registry/declarations.rb +34 -4
- data/lib/hecks/runtime/registry/hecksagon_rules.rb +15 -1
- data/lib/hecks/runtime/registry/runtime_state.rb +10 -0
- data/lib/hecks/runtime/registry/world_defaults.rb +24 -2
- data/lib/hecks/runtime/registry/world_names.rb +99 -0
- data/lib/hecks/runtime/registry.rb +33 -27
- data/lib/hecks/runtime/saga_interpreter/compensation.rb +10 -0
- data/lib/hecks/runtime/saga_interpreter/correlation.rb +29 -3
- data/lib/hecks/runtime/saga_interpreter/delivery.rb +0 -1
- data/lib/hecks/runtime/saga_interpreter/lifecycle.rb +1 -1
- data/lib/hecks/runtime/saga_interpreter.rb +46 -2
- data/lib/hecks/runtime/value/coercion.rb +36 -8
- data/lib/hecks/rust_build/conformance.rb +16 -5
- data/lib/hecks/rust_build/parser.rb +25 -0
- data/lib/hecks/rust_build/project_rust/codegen_run.rb +45 -12
- data/lib/hecks/rust_build/project_rust/declared.rb +80 -0
- data/lib/hecks/rust_build/project_rust/features_header.rb +22 -0
- data/lib/hecks/rust_build/project_rust/manifest.rb +96 -0
- data/lib/hecks/rust_build/project_rust/meta.rb +36 -0
- data/lib/hecks/rust_build/project_rust.rb +28 -90
- data/lib/hecks/rust_build/write_if_changed.rb +19 -4
- data/lib/hecks/rust_build.rb +2 -1
- data/lib/hecks/rust_format.rb +32 -2
- data/lib/hecks/secrets.rb +111 -0
- data/lib/hecks/shape_ledger/edge_hygiene.rb +170 -0
- data/lib/hecks/shape_ledger/scope.rb +51 -0
- data/lib/hecks/shape_ledger/status.rb +89 -0
- data/lib/hecks/shape_ledger.rb +78 -33
- data/lib/hecks/site/bluebook/site.bluebook +1 -0
- data/lib/hecks/storehouse/audit.rb +34 -4
- data/lib/hecks/storehouse/callers.rb +8 -0
- data/lib/hecks/storehouse/dispatching.rb +14 -3
- data/lib/hecks/storehouse/identity.rb +41 -0
- data/lib/hecks/storehouse/querying.rb +7 -7
- data/lib/hecks/storehouse.rb +28 -10
- data/lib/hecks/tickets/bluebook/adapters/work_areas.adapter +7 -0
- data/lib/hecks/tickets/bluebook/adapters/work_limits.adapter +7 -0
- data/lib/hecks/tickets/bluebook/tickets.behaviors +70 -0
- data/lib/hecks/tickets/bluebook/tickets.bluebook +323 -28
- data/lib/hecks/tickets/bluebook/tickets.hecksagon +7 -0
- data/lib/hecks/tickets/bluebook/tickets.ports.hecksagon +17 -0
- data/lib/hecks/{cli → tools}/behaviors.rb +1 -1
- data/lib/hecks/{cli → tools}/canonicalise.rb +1 -1
- data/lib/hecks/{cli → tools}/check_engine_agreement.rb +1 -1
- data/lib/hecks/{cli → tools}/check_era.rb +6 -6
- data/lib/hecks/tools/ci_gates.rb +8 -2
- data/lib/hecks/tools/ci_workflows.rb +98 -0
- data/lib/hecks/{cli → tools}/console.rb +1 -1
- data/lib/hecks/{cli → tools}/deploy_template_diff.rb +1 -1
- data/lib/hecks/{cli → tools}/doc_coverage.rb +2 -2
- data/lib/hecks/{cli → tools}/document.rb +1 -1
- data/lib/hecks/{cli → tools}/domain_stub.rb +1 -1
- data/lib/hecks/{cli → tools}/domain_writer.rb +1 -1
- data/lib/hecks/tools/downstream_model_check.rb +122 -0
- data/lib/hecks/tools/evolve_run.rb +2 -2
- data/lib/hecks/{cli → tools}/expected_era.rb +1 -1
- data/lib/hecks/{cli → tools}/expression_projection.rb +1 -1
- data/lib/hecks/{cli → tools}/follow.rb +1 -1
- data/lib/hecks/tools/fuzz_sweep/options.rb +40 -5
- data/lib/hecks/tools/fuzz_sweep/pool.rb +12 -1
- data/lib/hecks/tools/fuzz_sweep/shards.rb +155 -0
- data/lib/hecks/tools/fuzz_sweep.rb +11 -5
- data/lib/hecks/tools/gate.rb +38 -29
- data/lib/hecks/tools/gate_memo/local_files.rb +33 -0
- data/lib/hecks/tools/gate_memo/rehearsal.rb +54 -0
- data/lib/hecks/tools/gate_memo/ruby_files.rb +152 -0
- data/lib/hecks/tools/gate_memo/session.rb +114 -0
- data/lib/hecks/tools/gate_memo/standalone.rb +67 -0
- data/lib/hecks/tools/gate_memo.rb +196 -0
- data/lib/hecks/tools/gate_report.rb +56 -0
- data/lib/hecks/{cli → tools}/history.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_agent.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_aggregate.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_draft.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_record.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_run.rb +2 -2
- data/lib/hecks/{cli → tools}/interview_session/agent_state.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session/catalog.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session/manual_findings.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session/proposals.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session.rb +2 -2
- data/lib/hecks/{cli → tools}/interview_shape/lifecycle.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_shape.rb +1 -1
- data/lib/hecks/{cli → tools}/ir.rb +1 -1
- data/lib/hecks/tools/lanes/files.rb +1 -1
- data/lib/hecks/tools/lanes/watch_workflow.rb +6 -8
- data/lib/hecks/tools/lanes/workflow.rb +1 -1
- data/lib/hecks/tools/lanes.rb +1 -1
- data/lib/hecks/{cli → tools}/mcp.rb +1 -1
- data/lib/hecks/{cli → tools}/model_check/examination.rb +1 -1
- data/lib/hecks/{cli → tools}/model_check/sources.rb +1 -1
- data/lib/hecks/{cli → tools}/model_check.rb +1 -1
- data/lib/hecks/tools/move_disables/reasons.rb +35 -0
- data/lib/hecks/tools/move_disables.rb +211 -0
- data/lib/hecks/tools/move_former_name.rb +105 -0
- data/lib/hecks/{cli → tools}/pattern_cases.rb +1 -1
- data/lib/hecks/{cli → tools}/persistence_notice.rb +1 -1
- data/lib/hecks/{cli → tools}/present.rb +1 -1
- data/lib/hecks/{cli → tools}/project_cli/launcher_source.rb +32 -22
- data/lib/hecks/{cli → tools}/project_cli/templates.rb +22 -15
- data/lib/hecks/{cli → tools}/project_cli.rb +11 -7
- data/lib/hecks/{cli → tools}/project_diagrams.rb +3 -3
- data/lib/hecks/{cli → tools}/project_glossary.rb +2 -2
- data/lib/hecks/{cli → tools}/reference.rb +2 -2
- data/lib/hecks/{cli → tools}/refresh_projections.rb +1 -1
- data/lib/hecks/{cli → tools}/refresh_rspec_runtime_baseline.rb +1 -1
- data/lib/hecks/tools/regeneration_run/pool.rb +148 -0
- data/lib/hecks/tools/regeneration_run/scratch.rb +76 -0
- data/lib/hecks/tools/regeneration_run.rb +125 -103
- data/lib/hecks/{cli → tools}/release.rb +1 -1
- data/lib/hecks/{cli → tools}/release_gem.rb +1 -1
- data/lib/hecks/{cli → tools}/rspec_io_parallel_files.rb +1 -1
- data/lib/hecks/{cli → tools}/rspec_shard_files.rb +1 -1
- data/lib/hecks/{cli → tools}/run.rb +9 -2
- data/lib/hecks/{cli → tools}/run_expectations.rb +1 -1
- data/lib/hecks/{cli → tools}/seed_semantics_corpus.rb +4 -4
- data/lib/hecks/{cli → tools}/serve_query_ir_mcp.rb +1 -1
- data/lib/hecks/{cli → tools}/shape.rb +3 -2
- data/lib/hecks/{cli → tools}/smoke_http/checks.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_http/settings.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_http/transport.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_http.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_test.rb +1 -1
- data/lib/hecks/{cli → tools}/spec_example.rb +1 -1
- data/lib/hecks/tools/stage_progress.rb +54 -0
- data/lib/hecks/{cli → tools}/statements.rb +1 -1
- data/lib/hecks/{cli → tools}/stores.rb +1 -1
- data/lib/hecks/{cli → tools}/stress_concurrency_specs/reporting.rb +1 -1
- data/lib/hecks/{cli → tools}/stress_concurrency_specs/usage.rb +4 -4
- data/lib/hecks/{cli → tools}/stress_concurrency_specs.rb +3 -3
- data/lib/hecks/tools/tenant_provisioning.rb +23 -0
- data/lib/hecks/tools/tools_doc.rb +10 -8
- data/lib/hecks/tools/translation_audit/edges.rb +21 -16
- data/lib/hecks/tools/translation_audit/verdicts.rb +1 -1
- data/lib/hecks/tools/translation_audit.rb +1 -1
- data/lib/hecks/tools/translation_scaffold.rb +1 -1
- data/lib/hecks/tools.rb +4 -1
- data/lib/hecks/version.rb +1 -1
- data/lib/hecks/vocabulary.rb +61 -31
- data/lib/hecks/workflow_pagination/judge.rb +48 -0
- data/lib/hecks/workflow_pagination/statement.rb +50 -0
- data/lib/hecks/workflow_pagination.rb +58 -0
- data/lib/hecks.rb +2 -0
- data/lib/rubocop/cop/hecks/bare_event_and_query_names.rb +58 -0
- data/lib/rubocop/cop/hecks/correlates_by_aggregate.rb +39 -0
- data/lib/rubocop/cop/hecks/creating_command_sets.rb +75 -0
- data/lib/rubocop/cop/hecks/invariant_expression_language.rb +47 -0
- data/lib/rubocop/cop/hecks/lifecycle_needs_attribute.rb +58 -0
- data/lib/rubocop/cop/hecks/no_id_string_attribute.rb +49 -0
- data/lib/rubocop/cop/hecks/one_terminal_mark_per_lifecycle.rb +47 -0
- data/lib/rubocop/cop/hecks/value_object_shorthand.rb +56 -0
- data/prebuilt/13c04bdc5970295b310f0a980d397ba722232c8da99cc1a0cdb383249921e871.marshal +0 -0
- data/prebuilt/e3857b77f47d9ecc1787b2e1f5136364f3cb3444ef4aea5479f3b98167affea2.marshal +0 -0
- data/qa/settings.yml +23 -0
- data/rust/.gitignore +0 -6
- data/rust/Cargo.toml +2 -1
- data/rust/build/Cargo.toml +1 -1
- data/rust/build/src/binding_pass.rs +57 -4
- data/rust/build/src/pipeline.rs +6 -4
- data/rust/build/src/resolve.rs +1 -0
- data/rust/codegen/Cargo.toml +1 -1
- data/rust/codegen/src/domain_generator.rs +3 -0
- data/rust/codegen/src/json_codec.rs +182 -23
- data/rust/codegen/src/one_of_references.rs +1 -0
- data/rust/codegen/src/queries.rs +20 -2
- data/rust/codegen/src/registry.rs +21 -5
- data/rust/expr/Cargo.toml +1 -1
- data/rust/host/Cargo.toml +1 -1
- data/rust/host/HECKS_RELEASE +1 -1
- data/rust/host/core/Cargo.toml +1 -1
- data/rust/host/src/bin/mint_harness.rs +1 -0
- data/rust/host/src/boot.rs +1 -0
- data/rust/host/src/store/mint.rs +40 -6
- data/rust/lsp/Cargo.toml +1 -1
- data/rust/parser/Cargo.toml +1 -1
- data/rust/parser/src/build/correlation_keys.rs +125 -0
- data/rust/parser/src/build/mod.rs +1 -0
- data/rust/parser/src/emit.rs +55 -3
- data/rust/parser/src/ir.rs +33 -1
- data/rust/parser/src/keywords.rs +289 -1
- data/rust/parser/src/main.rs +2 -0
- data/rust/parser/src/parse/aggregate.rs +10 -1
- data/rust/parser/src/parse/audience.rs +65 -0
- data/rust/parser/src/parse/command.rs +14 -0
- data/rust/parser/src/parse/declaration.rs +97 -0
- data/rust/parser/src/parse/domain_port.rs +6 -0
- data/rust/parser/src/parse/mod.rs +1 -0
- data/rust/parser/src/parse/process_manager.rs +17 -10
- data/rust/parser/src/parse/world.rs +12 -8
- data/rust/parser/src/render_ruby.rs +9 -0
- data/rust/parser/src/sentence/format.rs +3 -0
- data/rust/parser/src/sentence/process.rs +6 -2
- data/rust/src/exemplar/json.rs +17 -0
- data/rust/src/kernel/cli.rs +27 -3
- data/rust/src/kernel/dispatch.rs +4 -2
- data/rust/src/kernel/json.rs +62 -0
- data/rust/src/kernel/orchestrate.rs +28 -3
- data/rust/src/kernel/orchestrate_guard_tests.rs +12 -12
- data/rust/web/Cargo.toml +1 -1
- metadata +389 -96
- data/lib/hecks/cli/command_table.rb +0 -72
- data/lib/hecks/cli/launcher_words.rb +0 -168
- data/lib/hecks/cli.rb +0 -133
- data/lib/hecks/hecks/agents.bluebook +0 -246
- data/lib/hecks/hecks/codebase.bluebook +0 -3209
- data/lib/hecks/hecks/custodian.bluebook +0 -1300
- data/lib/hecks/hecks/ledger.bluebook +0 -190
- data/lib/hecks/hecks/rehearsal.bluebook +0 -437
- data/lib/hecks/hecks/tooling.bluebook +0 -1234
- data/lib/hecks/hecks/translations/2-148748.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-15a2e4.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-1b447c.bluebook +0 -5
- data/lib/hecks/hecks/translations/2-240474.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-44446d.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-46ca26.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-473eab.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-75cc28.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-781c07.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-84c18b.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-aa5fff.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-bfdb48.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-cd96d8.bluebook +0 -10
- data/lib/hecks/hecks/translations/2-d43f71.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-eea577.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-f53248.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-fbb677.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-ffdf12.bluebook +0 -6
- data/lib/hecks/quality_control/adapters/clearance_recorder.rb +0 -36
- data/lib/hecks/quality_control/adapters/github_ci_webhook.rb +0 -56
- data/prebuilt/31cf81e12f16236ad26249be590cfea3799c9db67432e6a4ef54b801c355b6ae.marshal +0 -0
- data/prebuilt/68ecb2bd3abb1a221007db4f2b0375834c13aaccac8f2b99778e8517f11aa113.marshal +0 -0
- data/prebuilt/verdicts-0328c2403383837d780ad5ed81d1da351c56436b894cf9015b5d56b8f1f1bf10.json +0 -1
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "etc"
|
|
3
4
|
require "fileutils"
|
|
4
|
-
require "open3"
|
|
5
|
-
require "tmpdir"
|
|
6
5
|
require_relative "../tools"
|
|
7
6
|
require_relative "../corpus"
|
|
7
|
+
require_relative "regeneration_run/scratch"
|
|
8
|
+
require_relative "regeneration_run/pool"
|
|
8
9
|
|
|
9
10
|
module Hecks
|
|
10
11
|
module Tools
|
|
11
12
|
# Regenerates every corpus domain's Rust output with `hecks project_rust`, or checks that the
|
|
12
|
-
# output on disk is what that would write.
|
|
13
|
+
# output on disk is what that would write. The whole tree and `Cargo.toml` are committed.
|
|
13
14
|
#
|
|
14
|
-
# The domain list comes from `Hecks::Corpus.rust_regen_order`, never a hand-kept list
|
|
15
|
-
#
|
|
16
|
-
# Cargo
|
|
17
|
-
#
|
|
15
|
+
# The domain list comes from `Hecks::Corpus.rust_regen_order`, never a hand-kept list, and is
|
|
16
|
+
# handed to every run as the declared domains: a domain's files, `generated/mod.rs` and
|
|
17
|
+
# Cargo's features come out the same in whatever order the domains run. The domains run side
|
|
18
|
+
# by side, one child per core unless `workers=` says otherwise (see `Pool`).
|
|
18
19
|
#
|
|
19
20
|
# hecks regenerate_corpus # discover, regenerate, print the plan
|
|
20
|
-
# hecks regenerate_corpus --check #
|
|
21
|
-
#
|
|
22
|
-
#
|
|
21
|
+
# hecks regenerate_corpus --check # a scratch crate, never the tree; fail on any difference
|
|
22
|
+
# hecks regenerate_corpus domains=a,b # only those; `mod.rs` and Cargo's features stay put
|
|
23
|
+
# hecks regenerate_corpus workers=1 # one domain at a time
|
|
23
24
|
module RegenerationRun
|
|
24
25
|
# The refusal when no domain is found.
|
|
25
26
|
NO_DOMAINS = "hecks regenerate_corpus: discovered ZERO domains with committed rust/src/generated/ " \
|
|
@@ -27,44 +28,84 @@ module Hecks
|
|
|
27
28
|
"wrong directory, or something upstream deleted rust/src/generated/ entirely. Refusing " \
|
|
28
29
|
"to silently treat that as \"nothing to regenerate.\""
|
|
29
30
|
|
|
30
|
-
# The
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
# The argument naming the domains to regenerate, comma-separated, as the launcher passes it.
|
|
32
|
+
DOMAINS_ARG = "domains="
|
|
33
|
+
|
|
34
|
+
# The argument saying how many domains are generated at once, as the launcher passes it.
|
|
35
|
+
WORKERS_ARG = "workers="
|
|
36
|
+
|
|
37
|
+
# What a count of workers looks like: a whole number above zero.
|
|
38
|
+
POSITIVE_WHOLE_NUMBER = /\A[1-9][0-9]*\z/
|
|
34
39
|
|
|
35
|
-
# The
|
|
36
|
-
|
|
40
|
+
# The job that generates `meta`, the self-hosted language's Rust. It is the same whichever
|
|
41
|
+
# domain is projected, so a run does it once, first and beside the first domains, and tells
|
|
42
|
+
# every domain to skip it. A run of some domains does it too: a fresh workspace needs it.
|
|
43
|
+
META_JOB = "meta"
|
|
44
|
+
|
|
45
|
+
# What a child of the pool does with its arguments: generate `meta` for the `META_JOB`, and
|
|
46
|
+
# otherwise run `hecks project_rust` on the domain. Runs in the child, whose output streams
|
|
47
|
+
# are real descriptors.
|
|
48
|
+
CORPUS_JOB = lambda do |argv|
|
|
49
|
+
next Pool::PROJECT_RUST.call(argv) unless argv.first == META_JOB
|
|
50
|
+
|
|
51
|
+
Hecks::RustBuild::ProjectRust::Meta.generate
|
|
52
|
+
0
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# The scratch crate of a check: `scratch_crate`, `verdict` and `matches_scratch?`.
|
|
56
|
+
extend Scratch
|
|
37
57
|
|
|
38
58
|
module_function
|
|
39
59
|
|
|
40
60
|
# Regenerates the corpus, or checks it.
|
|
41
61
|
#
|
|
42
|
-
# @param argv [Array<String>] `--check` to project into a scratch crate and compare
|
|
62
|
+
# @param argv [Array<String>] `--check` to project into a scratch crate and compare, and
|
|
63
|
+
# `domains=a,b` to run only those domains, `workers=n` to generate n at once
|
|
43
64
|
# @param root [String] the checkout
|
|
44
65
|
# @return [Integer] 0, or 1 when a check finds a difference
|
|
45
|
-
# @raise [SystemExit] when no corpus domain is found
|
|
66
|
+
# @raise [SystemExit] when no corpus domain is found, a named domain is not one, the workers
|
|
67
|
+
# are not a positive number, or a domain fails to regenerate
|
|
46
68
|
def main(argv, root: Tools::ROOT)
|
|
47
69
|
Dir.chdir(root) do
|
|
48
|
-
|
|
70
|
+
names = named(argv)
|
|
71
|
+
workers = workers_in(argv)
|
|
72
|
+
domains = plan(root, names)
|
|
49
73
|
# A check projects into a scratch copy of the crate; the forked children inherit the
|
|
50
74
|
# workspace with the process.
|
|
51
75
|
scratch = argv.include?("--check") && scratch_crate(root)
|
|
52
|
-
run_plan(domains, scratch)
|
|
76
|
+
run_plan(domains, scratch, names, workers, root)
|
|
53
77
|
end
|
|
54
78
|
end
|
|
55
79
|
|
|
56
|
-
# Regenerates the domains, then judges the scratch crate when there is one.
|
|
80
|
+
# Regenerates the domains, then judges the scratch crate when there is one. A check of some
|
|
81
|
+
# domains judges only the modules those domains own: the rest, shared bluebooks and the
|
|
82
|
+
# grammar, are what the corpus's last writer left, so they are put back as the tree has them.
|
|
57
83
|
#
|
|
58
84
|
# @param domains [Array<String>] the domains, in run order
|
|
59
85
|
# @param scratch [String, false] the scratch crate of a check, removed here
|
|
86
|
+
# @param names [Array<String>, nil] the features of some of the corpus's domains, nil for all
|
|
87
|
+
# @param workers [Integer] how many domains are generated at once
|
|
88
|
+
# @param root [String] the checkout
|
|
60
89
|
# @return [Integer] 0, or 1 when a check finds a difference
|
|
61
|
-
def run_plan(domains, scratch)
|
|
62
|
-
with_rust_dir(scratch) { regenerate(domains) }
|
|
90
|
+
def run_plan(domains, scratch, names, workers, root)
|
|
91
|
+
with_rust_dir(scratch) { regenerate(domains, partial: !names.nil?, workers: workers) }
|
|
92
|
+
restore_shared(scratch, root, names) if scratch && names
|
|
63
93
|
scratch ? verdict(scratch) : 0
|
|
64
94
|
ensure
|
|
65
95
|
FileUtils.rm_rf(scratch) if scratch
|
|
66
96
|
end
|
|
67
97
|
|
|
98
|
+
# @param argv [Array<String>] the arguments of the run
|
|
99
|
+
# @return [Integer] what `workers=` gives, one child per core when it is not given
|
|
100
|
+
# @raise [SystemExit] when it is not a positive whole number
|
|
101
|
+
def workers_in(argv)
|
|
102
|
+
given = argv.find { |arg| arg.start_with?(WORKERS_ARG) }&.delete_prefix(WORKERS_ARG)
|
|
103
|
+
return default_workers unless given
|
|
104
|
+
return Integer(given) if given.match?(POSITIVE_WHOLE_NUMBER)
|
|
105
|
+
|
|
106
|
+
abort "hecks regenerate_corpus: workers=#{given} is not a positive whole number"
|
|
107
|
+
end
|
|
108
|
+
|
|
68
109
|
# Builds in `scratch` while the block runs; with none, in the workspace already chosen.
|
|
69
110
|
def with_rust_dir(scratch, &)
|
|
70
111
|
require "hecks/rust_build"
|
|
@@ -73,14 +114,24 @@ module Hecks
|
|
|
73
114
|
Hecks::RustBuild.in_workspace(scratch, &)
|
|
74
115
|
end
|
|
75
116
|
|
|
117
|
+
# @param argv [Array<String>] the arguments of the run
|
|
118
|
+
# @return [Array<String>, nil] the feature names `domains=` lists, nil when it is not given
|
|
119
|
+
def named(argv)
|
|
120
|
+
list = argv.find { |arg| arg.start_with?(DOMAINS_ARG) }
|
|
121
|
+
list&.delete_prefix(DOMAINS_ARG)&.split(",")
|
|
122
|
+
end
|
|
123
|
+
|
|
76
124
|
# `meta` is never in the list: `Hecks::Corpus::RUST_ELSEWHERE` routes it to the check that
|
|
77
125
|
# owns it instead.
|
|
78
126
|
#
|
|
79
127
|
# @param root [String] the checkout
|
|
128
|
+
# @param names [Array<String>, nil] the features to regenerate; nil for every domain
|
|
80
129
|
# @return [Array<String>] the domains to regenerate, relative to `root`, in run order
|
|
81
|
-
# @raise [SystemExit] when there are none
|
|
82
|
-
|
|
83
|
-
|
|
130
|
+
# @raise [SystemExit] when there are none, or a name is not a domain: the message lists the
|
|
131
|
+
# valid ones
|
|
132
|
+
def plan(root, names = nil)
|
|
133
|
+
chosen = Hecks::Corpus.rust_domains_named(names, root: root)
|
|
134
|
+
domains = chosen.map { |domain| domain.dir.delete_prefix("#{root}/") }
|
|
84
135
|
|
|
85
136
|
abort NO_DOMAINS if domains.empty?
|
|
86
137
|
|
|
@@ -88,104 +139,75 @@ module Hecks
|
|
|
88
139
|
domains.each { |d| puts " #{d}" }
|
|
89
140
|
puts
|
|
90
141
|
domains
|
|
142
|
+
rescue Hecks::Corpus::UnknownDomain => e
|
|
143
|
+
abort "hecks regenerate_corpus: #{e.message}"
|
|
91
144
|
end
|
|
92
145
|
|
|
93
|
-
# Builds the memoized grammar registry once
|
|
94
|
-
#
|
|
146
|
+
# Builds the memoized grammar registry once, then forks `hecks project_rust` for each domain,
|
|
147
|
+
# `workers` at a time (see `Pool`). Every child is told the declared domains and that it is
|
|
148
|
+
# partial, so none of them writes `mod.rs` or Cargo's features: a whole run writes them once
|
|
149
|
+
# here, after the last domain, from the declared list, so they come out the same however the
|
|
150
|
+
# children interleave. A run of some of the domains leaves them alone. `meta` is generated by
|
|
151
|
+
# the pool's first job, beside the first domains, and every child is told to skip it.
|
|
95
152
|
#
|
|
96
153
|
# @param domains [Array<String>] the domains, in run order
|
|
154
|
+
# @param partial [Boolean] whether these are some of the corpus's domains, not all
|
|
155
|
+
# @param workers [Integer] how many domains are generated at once
|
|
97
156
|
# @return [void]
|
|
98
|
-
|
|
157
|
+
# @raise [SystemExit] when a domain fails
|
|
158
|
+
def regenerate(domains, partial: false, workers: default_workers)
|
|
99
159
|
require "hecks"
|
|
100
160
|
require "hecks/bluebook/meta_validator"
|
|
101
161
|
require "hecks/rust_build"
|
|
162
|
+
require "hecks/rust_build/project_rust"
|
|
102
163
|
Hecks::Bluebook::MetaValidator.grammar_registry
|
|
103
|
-
|
|
104
|
-
|
|
164
|
+
run_pool(domains, workers)
|
|
165
|
+
write_manifest unless partial
|
|
105
166
|
end
|
|
106
167
|
|
|
107
|
-
#
|
|
108
|
-
#
|
|
109
|
-
# process's stdout.
|
|
168
|
+
# Runs the pool with the generator already built, so no child runs Cargo (see
|
|
169
|
+
# `CodegenRun.prebuilt`).
|
|
110
170
|
#
|
|
111
|
-
# @param
|
|
112
|
-
# @param
|
|
171
|
+
# @param domains [Array<String>] the domains, in run order
|
|
172
|
+
# @param workers [Integer] how many domains are generated at once
|
|
113
173
|
# @return [void]
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
argv = skip_meta ? [domain, SKIP_META] : [domain]
|
|
119
|
-
pid = fork { run_child(reader, writer, argv) }
|
|
120
|
-
writer.close
|
|
121
|
-
$stdout.write(reader.read)
|
|
122
|
-
reader.close
|
|
123
|
-
_, status = Process.wait2(pid)
|
|
124
|
-
abort "hecks regenerate_corpus: hecks project_rust #{domain} failed (#{status.inspect})" unless status.success?
|
|
125
|
-
puts
|
|
174
|
+
def run_pool(domains, workers)
|
|
175
|
+
Hecks::RustBuild::ProjectRust::CodegenRun.prebuilt(Hecks::RustBuild.rust_dir) do
|
|
176
|
+
Pool.new([META_JOB, *domains], child_flags, workers, runner: CORPUS_JOB).call
|
|
177
|
+
end
|
|
126
178
|
end
|
|
127
179
|
|
|
128
|
-
# @
|
|
129
|
-
#
|
|
130
|
-
|
|
131
|
-
# @return [void] never returns: the child leaves without the parent's exit handlers
|
|
132
|
-
def run_child(reader, writer, argv)
|
|
133
|
-
reader.close
|
|
134
|
-
# The real descriptors, not the globals: a caller may have swapped those for a buffer.
|
|
135
|
-
STDOUT.reopen(writer) # rubocop:disable Style/GlobalStdStream
|
|
136
|
-
STDERR.reopen(writer) # rubocop:disable Style/GlobalStdStream
|
|
137
|
-
$stdout = STDOUT
|
|
138
|
-
$stderr = STDERR
|
|
139
|
-
status = child_status(argv)
|
|
140
|
-
$stdout.flush
|
|
141
|
-
exit!(status)
|
|
142
|
-
end
|
|
180
|
+
# @return [Array<String>] what every child is told: the declared domains, that it is partial,
|
|
181
|
+
# and that `meta` is already generated
|
|
182
|
+
def child_flags = declared(partial: true).flags + [Hecks::RustBuild::ProjectRust::Meta::SKIP_FLAG]
|
|
143
183
|
|
|
144
|
-
# @return [Integer]
|
|
145
|
-
def
|
|
146
|
-
Hecks::RustBuild.run("project_rust", argv, out: STDOUT, err: STDERR) # rubocop:disable Style/GlobalStdStream
|
|
147
|
-
rescue SystemExit => e
|
|
148
|
-
e.status
|
|
149
|
-
rescue StandardError => e
|
|
150
|
-
warn "#{e.class}: #{e.message}"
|
|
151
|
-
1
|
|
152
|
-
end
|
|
184
|
+
# @return [Integer] how many domains a run generates at once unless told: one per core
|
|
185
|
+
def default_workers = Etc.nprocessors
|
|
153
186
|
|
|
154
|
-
#
|
|
155
|
-
# writes.
|
|
187
|
+
# `mod.rs` and Cargo's features for the whole corpus, written once in the workspace.
|
|
156
188
|
#
|
|
157
|
-
# @
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
scratch = Dir.mktmpdir("regen-codegen-check")
|
|
163
|
-
FileUtils.mkdir_p(File.join(scratch, "src"))
|
|
164
|
-
FileUtils.cp_r(File.join(root, "rust/src/generated"), File.join(scratch, "src/generated"))
|
|
165
|
-
FileUtils.cp(File.join(root, "rust/Cargo.toml"), scratch)
|
|
166
|
-
scratch
|
|
189
|
+
# @return [void]
|
|
190
|
+
def write_manifest
|
|
191
|
+
declared = declared(partial: false)
|
|
192
|
+
Hecks::RustBuild::ProjectRust::Manifest.new(Hecks::RustBuild.rust_dir, declared, declared.default).call
|
|
167
193
|
end
|
|
168
194
|
|
|
169
|
-
# The
|
|
195
|
+
# The corpus's declared domains as `hecks project_rust` flags: the domains of the regeneration
|
|
196
|
+
# order, and the features the corpus routes elsewhere (`meta`, which every run generates).
|
|
197
|
+
# Cargo's `default` stays on the feature the tracked `rust/Cargo.toml` names, or on the last
|
|
198
|
+
# declared domain when it names none.
|
|
170
199
|
#
|
|
171
|
-
# @param
|
|
172
|
-
# @return [
|
|
173
|
-
def
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
pairs = [["rust/src/generated", File.join(scratch, "src/generated")],
|
|
183
|
-
["rust/Cargo.toml", File.join(scratch, "Cargo.toml")]]
|
|
184
|
-
pairs.map do |on_disk, projected|
|
|
185
|
-
out, status = Open3.capture2e("git", "diff", "--no-index", "--exit-code", "--", on_disk, projected)
|
|
186
|
-
print out
|
|
187
|
-
status.success?
|
|
188
|
-
end.all?
|
|
200
|
+
# @param partial [Boolean] whether the run is of some domains: it is told so
|
|
201
|
+
# @return [Array<String>] the flags
|
|
202
|
+
def declared_flags(partial: false) = declared(partial: partial).flags
|
|
203
|
+
|
|
204
|
+
# @param partial [Boolean] whether the run is of some domains
|
|
205
|
+
# @return [Hecks::RustBuild::ProjectRust::Declared] the corpus's declared domains
|
|
206
|
+
def declared(partial: false)
|
|
207
|
+
require "hecks/rust_build/project_rust"
|
|
208
|
+
features = Hecks::Corpus.rust_regen_order.map(&:feature)
|
|
209
|
+
default = Hecks::Corpus.cargo_default || features.last
|
|
210
|
+
Hecks::RustBuild::ProjectRust::Declared.new(features + Hecks::Corpus::RUST_ELSEWHERE.keys, default, partial: partial)
|
|
189
211
|
end
|
|
190
212
|
end
|
|
191
213
|
end
|
|
@@ -4,7 +4,7 @@ require "optparse"
|
|
|
4
4
|
require_relative "../release/runner"
|
|
5
5
|
|
|
6
6
|
module Hecks
|
|
7
|
-
module
|
|
7
|
+
module Tools
|
|
8
8
|
# The command behind `hecks publish`: tags the merged release commit, publishes the gem, and
|
|
9
9
|
# gets `@hecks/client` published to npm. See "Releasing" in CONTRIBUTING.md for the release PR.
|
|
10
10
|
#
|
|
@@ -6,7 +6,7 @@ require_relative "../hecks/adapters/codebase/gem_registry"
|
|
|
6
6
|
require_relative "../version"
|
|
7
7
|
|
|
8
8
|
module Hecks
|
|
9
|
-
module
|
|
9
|
+
module Tools
|
|
10
10
|
# The command behind `hecks publish_gem` and the release runner's gem step: builds the hecks
|
|
11
11
|
# gem and pushes it to rubygems.org, using a push-scoped API key from 1Password instead of
|
|
12
12
|
# `~/.gem/credentials`. It pushes the version it is given, `Hecks::VERSION` by default.
|
|
@@ -4,7 +4,7 @@ require "json"
|
|
|
4
4
|
require "open3"
|
|
5
5
|
|
|
6
6
|
module Hecks
|
|
7
|
-
module
|
|
7
|
+
module Tools
|
|
8
8
|
# The command behind `hecks list_io_parallel_specs`: prints, one per line, the spec files with
|
|
9
9
|
# at least one example matching an RSpec tag filter. ci.yml hands the list to `parallel_rspec`
|
|
10
10
|
# instead of the whole `spec` directory.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
require "parallel_tests/test/runner"
|
|
4
4
|
|
|
5
5
|
module Hecks
|
|
6
|
-
module
|
|
6
|
+
module Tools
|
|
7
7
|
# The command behind `hecks shard_specs`: prints the spec files assigned to one group
|
|
8
8
|
# (1-indexed) of a runtime-balanced N-way split. `rspec_shard` in ci-rspec.yml passes the
|
|
9
9
|
# committed runtime baseline so every leg agrees.
|
|
@@ -6,7 +6,7 @@ require_relative "../ports/persistence/plugins/era"
|
|
|
6
6
|
require_relative "run_expectations"
|
|
7
7
|
|
|
8
8
|
module Hecks
|
|
9
|
-
module
|
|
9
|
+
module Tools
|
|
10
10
|
# The command behind `hecks run`: dispatches one verb from the
|
|
11
11
|
# command line, or executes a JSON step list and reports instances, events,
|
|
12
12
|
# refusals, reactions, sagas and query rows.
|
|
@@ -88,10 +88,17 @@ module Hecks
|
|
|
88
88
|
# No fall-through: reached only when the argument is not script-shaped, so a
|
|
89
89
|
# near miss deserves the runner's "did you mean" rather than the step-list
|
|
90
90
|
# form's "no such script".
|
|
91
|
+
# A verb always writes, so its word carries the bang the launcher requires.
|
|
92
|
+
def writing(argv)
|
|
93
|
+
return argv if argv.empty? || argv.first.end_with?("!")
|
|
94
|
+
|
|
95
|
+
["#{argv.first}!", *argv.drop(1)]
|
|
96
|
+
end
|
|
97
|
+
|
|
91
98
|
def cli_form(domain, argv, program)
|
|
92
99
|
runtime = Hecks.boot(domain, install_driving: false)
|
|
93
100
|
Assembly.bind_ported_runtime(runtime)
|
|
94
|
-
text, status = Adapters::Driving::CliRunner.call(runtime: runtime, argv: argv, program: program)
|
|
101
|
+
text, status = Adapters::Driving::CliRunner.call(runtime: runtime, argv: writing(argv), program: program)
|
|
95
102
|
status.zero? ? puts(text) : abort(text)
|
|
96
103
|
exit 0
|
|
97
104
|
end
|
|
@@ -5,16 +5,16 @@ require_relative "../../hecks"
|
|
|
5
5
|
require_relative "../fuzzing"
|
|
6
6
|
|
|
7
7
|
module Hecks
|
|
8
|
-
module
|
|
9
|
-
# The command behind `hecks test_suite_run.seed_semantics_corpus
|
|
8
|
+
module Tools
|
|
9
|
+
# The command behind `hecks test_suite_run.seed_semantics_corpus!`: seeds (or re-seeds) the
|
|
10
10
|
# `expect` block of corpus fixtures from the Ruby runtime. Review the result
|
|
11
11
|
# against `docs/semantics/bluebook-semantics.md` before committing.
|
|
12
12
|
#
|
|
13
13
|
# Seeds `spec/corpus/semantics/` and the conformance corpus ({FULL_SCRIPTS} plus
|
|
14
14
|
# `spec/corpus/rust_conformance/`, whose `expect` also freezes more).
|
|
15
15
|
#
|
|
16
|
-
# hecks test_suite_run.seed_semantics_corpus # fill what lacks an expect
|
|
17
|
-
# SEED=refusal_kind_lifecycle hecks test_suite_run.seed_semantics_corpus # re-seed one
|
|
16
|
+
# hecks test_suite_run.seed_semantics_corpus! # fill what lacks an expect
|
|
17
|
+
# SEED=refusal_kind_lifecycle hecks test_suite_run.seed_semantics_corpus! # re-seed one
|
|
18
18
|
#
|
|
19
19
|
# The seeded expectation is the definition, not a recording: both runtimes are compared to it.
|
|
20
20
|
# `occurred_at` is stripped from events (C7.3/C9.1); refusals keep verb, error and kind (C8.2).
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
require_relative "../mcp_stdio_guard"
|
|
4
4
|
|
|
5
5
|
module Hecks
|
|
6
|
-
module
|
|
6
|
+
module Tools
|
|
7
7
|
# The command behind `hecks serve_query_ir_mcp` and `hecks serve_query_ir_mcp`: an MCP server
|
|
8
8
|
# exposing `Hecks::QueryIR`'s queries as tools, over newline-delimited JSON-RPC on stdio.
|
|
9
9
|
#
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
require "json"
|
|
4
4
|
require_relative "../../hecks"
|
|
5
|
+
require_relative "../module_folders"
|
|
5
6
|
# The `:shape` projection reads `Runtime::StorageShape`, which lives in the era persistence plugin
|
|
6
7
|
# core does not load by default (ADR 0033).
|
|
7
8
|
require_relative "../ports/persistence/plugins/era"
|
|
8
9
|
|
|
9
10
|
module Hecks
|
|
10
|
-
module
|
|
11
|
+
module Tools
|
|
11
12
|
# The command behind `hecks shape` and `hecks shape`: a bluebook's storage-shape projection, the
|
|
12
13
|
# same hash PostgresEra mints an era's label from, so two runs diff to show whether a bluebook
|
|
13
14
|
# change would bump an era.
|
|
@@ -36,7 +37,7 @@ module Hecks
|
|
|
36
37
|
raise Runtime::NotFound, "#{target} does not exist" unless File.exist?(target)
|
|
37
38
|
|
|
38
39
|
directory = File.directory?(target)
|
|
39
|
-
files = directory ?
|
|
40
|
+
files = directory ? ModuleFolders.all(target) : [target]
|
|
40
41
|
raise Runtime::NotFound, "no *.bluebook files in #{target}" if files.empty?
|
|
41
42
|
|
|
42
43
|
registry = load_files(files)
|
|
@@ -9,7 +9,7 @@ require_relative "smoke_http/checks"
|
|
|
9
9
|
require_relative "smoke_http/transport"
|
|
10
10
|
|
|
11
11
|
module Hecks
|
|
12
|
-
module
|
|
12
|
+
module Tools
|
|
13
13
|
# One run of the checks against one service.
|
|
14
14
|
class SmokeHttp
|
|
15
15
|
# Raised when a smoke check's request gets an answer other than the one it expects.
|
|
@@ -2,7 +2,7 @@ require_relative "../../hecks"
|
|
|
2
2
|
require_relative "../bluebook/smoke_test"
|
|
3
3
|
|
|
4
4
|
module Hecks
|
|
5
|
-
module
|
|
5
|
+
module Tools
|
|
6
6
|
# The command behind `hecks smoke_test`: boots a real domain
|
|
7
7
|
# and dispatches one synthesized call per declared command and report
|
|
8
8
|
# (`Bluebook::SmokeTest`), printing every failure rather than the first.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
require "rspec/core"
|
|
4
4
|
|
|
5
5
|
module Hecks
|
|
6
|
-
module
|
|
6
|
+
module Tools
|
|
7
7
|
# The command behind `hecks run_spec_example`: runs one spec file filtered to one example
|
|
8
8
|
# through `RSpec::Core::Runner`, so a `hecks quality_control bug.log --demonstration` string
|
|
9
9
|
# needs no `-e` quoting.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Hecks
|
|
4
|
+
module Tools
|
|
5
|
+
# Streams one line per check as the check starts and as it ends, so a long stage shows its
|
|
6
|
+
# progress before its verdict. Each line is written and flushed as it happens.
|
|
7
|
+
#
|
|
8
|
+
# Lines go to the real standard error by default, not to `$stderr`: a recorded run captures
|
|
9
|
+
# `$stderr` into its journal, and the progress would be swallowed there. The verdict stays on
|
|
10
|
+
# standard output, so a pipe still receives only the result.
|
|
11
|
+
class StageProgress
|
|
12
|
+
class << self
|
|
13
|
+
# Whether the lines are left out, as `-q` asks: set by the launcher for the length of a line.
|
|
14
|
+
# @return [Boolean]
|
|
15
|
+
attr_accessor :quiet
|
|
16
|
+
end
|
|
17
|
+
self.quiet = false
|
|
18
|
+
|
|
19
|
+
# @param io [#puts, #flush] where the lines are written; the process's own standard error
|
|
20
|
+
# (file descriptor 2), whatever `$stderr` is redirected to at the time
|
|
21
|
+
def initialize(io = IO.new(2, "w", autoclose: false))
|
|
22
|
+
@io = io
|
|
23
|
+
@lock = Mutex.new
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# @param id [String] the check's id
|
|
27
|
+
# @return [void] the line saying the check has started
|
|
28
|
+
def start(id)
|
|
29
|
+
line("start #{id}")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# @param id [String] the check's id
|
|
33
|
+
# @param passed [Boolean] whether the check exited 0
|
|
34
|
+
# @param seconds [Float] how long it ran
|
|
35
|
+
# @return [void] the line saying how the check ended
|
|
36
|
+
def finish(id, passed, seconds)
|
|
37
|
+
line("#{passed ? "ok" : "fail"} #{id} #{format("%.1fs", seconds)}")
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
# @param text [String] one line, written and flushed under a lock so threads do not interleave
|
|
43
|
+
# @return [void]
|
|
44
|
+
def line(text)
|
|
45
|
+
return if self.class.quiet
|
|
46
|
+
|
|
47
|
+
@lock.synchronize do
|
|
48
|
+
@io.puts(text)
|
|
49
|
+
@io.flush
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -3,7 +3,7 @@ require_relative "../../hecks"
|
|
|
3
3
|
require_relative "persistence_notice"
|
|
4
4
|
|
|
5
5
|
module Hecks
|
|
6
|
-
module
|
|
6
|
+
module Tools
|
|
7
7
|
# The command behind `hecks stores`: every aggregate's current
|
|
8
8
|
# records as JSON (the head, not the journal — see `hecks history` for that).
|
|
9
9
|
module Stores
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
module Hecks
|
|
2
|
-
module
|
|
2
|
+
module Tools
|
|
3
3
|
module StressConcurrencySpecs
|
|
4
4
|
USAGE = <<~TEXT.freeze
|
|
5
|
-
Usage: hecks stress_concurrency [--runs N] [--parallel N] [--seed-start N]
|
|
5
|
+
Usage: hecks test_suite_run.stress_concurrency! [--runs N] [--parallel N] [--seed-start N]
|
|
6
6
|
|
|
7
7
|
--runs N How many times to run EACH group below. Each run uses
|
|
8
8
|
a different --seed (seed-start + run index).
|
|
@@ -16,8 +16,8 @@ module Hecks
|
|
|
16
16
|
--seed-start N First --seed value; runs use seed_start,
|
|
17
17
|
seed_start + 1, ... seed_start + runs - 1.
|
|
18
18
|
|
|
19
|
-
`hecks stress_concurrency
|
|
20
|
-
bluebook declares (`hecks stress_concurrency --help` shows them).
|
|
19
|
+
`hecks test_suite_run.stress_concurrency!` fills --runs and --seed-start from the defaults its
|
|
20
|
+
bluebook declares (`hecks test_suite_run.stress_concurrency! --help` shows them).
|
|
21
21
|
|
|
22
22
|
Exits 0 if every run's every example passed, 1 if anything failed -
|
|
23
23
|
failing runs' full output is saved under tmp/stress-failures/
|
|
@@ -7,8 +7,8 @@ require_relative "stress_concurrency_specs/usage"
|
|
|
7
7
|
require_relative "stress_concurrency_specs/reporting"
|
|
8
8
|
|
|
9
9
|
module Hecks
|
|
10
|
-
module
|
|
11
|
-
# The command behind `hecks stress_concurrency
|
|
10
|
+
module Tools
|
|
11
|
+
# The command behind `hecks test_suite_run.stress_concurrency!`: reruns the thread-safety specs under many
|
|
12
12
|
# seeds, several OS processes at a time. A clean run shows only "not in this many tries", never
|
|
13
13
|
# "impossible".
|
|
14
14
|
#
|
|
@@ -65,7 +65,7 @@ module Hecks
|
|
|
65
65
|
return false if missing.empty?
|
|
66
66
|
|
|
67
67
|
warn "missing #{missing.map { |name| "--#{name.to_s.tr("_", "-")}" }.join(", ")}: " \
|
|
68
|
-
"`hecks stress_concurrency
|
|
68
|
+
"`hecks test_suite_run.stress_concurrency!` supplies the defaults its bluebook declares (--help for usage)"
|
|
69
69
|
true
|
|
70
70
|
end
|
|
71
71
|
|