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
|
@@ -0,0 +1,638 @@
|
|
|
1
|
+
Hecks.bluebook "Hecks" do
|
|
2
|
+
domain_module "Test" do
|
|
3
|
+
vision "Run the specs and fuzzers."
|
|
4
|
+
|
|
5
|
+
# TestSuite: the tooling around this repository's specs. Listings of which files a shard or a
|
|
6
|
+
# job runs are pure reads; refreshing the committed timings, rewriting the persistence fixtures
|
|
7
|
+
# and writing the committed spec list change tracked files and need --confirm; a stress run
|
|
8
|
+
# and a single example only run specs and write nothing tracked.
|
|
9
|
+
aggregate "TestSuiteRun", kind: "Run" do
|
|
10
|
+
description "One piece of work on the test suite: a listing, a baseline, a run or a fixture rewrite."
|
|
11
|
+
|
|
12
|
+
# The folder the specs live in; this checkout when none is named.
|
|
13
|
+
attribute :root, FilePath, optional: true
|
|
14
|
+
# The git ref the changed-file run compares against.
|
|
15
|
+
attribute :base, FilePath, optional: true
|
|
16
|
+
attribute :confirm, Switch, optional: true
|
|
17
|
+
attribute :workers, Count, optional: true
|
|
18
|
+
attribute :from_run, RunId, optional: true
|
|
19
|
+
attribute :file, FilePath, optional: true
|
|
20
|
+
attribute :example, ExampleText, optional: true
|
|
21
|
+
attribute :runs, Count, optional: true
|
|
22
|
+
attribute :parallel, Count, optional: true
|
|
23
|
+
attribute :seed_start, Count, optional: true
|
|
24
|
+
attribute :fixture, FixtureName, optional: true
|
|
25
|
+
attribute :exclude, ExcludePattern, optional: true
|
|
26
|
+
attribute :tags, TagArguments, optional: true
|
|
27
|
+
attribute :strict, Switch, optional: true
|
|
28
|
+
attribute :seeds, Count, optional: true
|
|
29
|
+
attribute :environment, EnvironmentName, optional: true
|
|
30
|
+
attribute :declaration_cache, Switch, optional: true
|
|
31
|
+
attribute :crate, CrateName, optional: true
|
|
32
|
+
attribute :write, FilePath, optional: true
|
|
33
|
+
attribute :group, Count, optional: true
|
|
34
|
+
attribute :groups, Count, optional: true
|
|
35
|
+
attribute :runtime_log, FilePath, optional: true
|
|
36
|
+
attribute :check, FilePath, optional: true
|
|
37
|
+
# Several spec files, separated by whitespace, run in one launcher boot.
|
|
38
|
+
attribute :files, SpecFiles, optional: true
|
|
39
|
+
# Whether each file gets a process of its own or all share one.
|
|
40
|
+
attribute :isolation, Isolation, optional: true
|
|
41
|
+
# The most spec files an impacted run takes.
|
|
42
|
+
attribute :cap, Count, optional: true
|
|
43
|
+
# Whether an impacted run only lists the specs it would run.
|
|
44
|
+
attribute :dry, Switch, optional: true
|
|
45
|
+
|
|
46
|
+
# How many, always at least one.
|
|
47
|
+
value_object "Count" do
|
|
48
|
+
attribute :value, Integer
|
|
49
|
+
|
|
50
|
+
invariant("a count is positive") { value > 0 }
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# A CI run's number.
|
|
54
|
+
value_object "RunId" do
|
|
55
|
+
attribute :value, String, matches: :digits
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# A file, relative to the checkout or absolute.
|
|
59
|
+
value_object "FilePath" do
|
|
60
|
+
attribute :value, String, matches: :not_empty
|
|
61
|
+
|
|
62
|
+
invariant("a file is named") { !value.to_s.empty? }
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Part of an example's description.
|
|
66
|
+
value_object "ExampleText" do
|
|
67
|
+
attribute :value, String, matches: :not_empty
|
|
68
|
+
|
|
69
|
+
invariant("an example is named") { !value.to_s.empty? }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# The name of a semantics-corpus fixture.
|
|
73
|
+
value_object "FixtureName" do
|
|
74
|
+
attribute :value, String, pattern: '^[a-z0-9_]+$'
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Spec files separated by whitespace or newlines, relative to the checkout or absolute.
|
|
78
|
+
value_object "SpecFiles" do
|
|
79
|
+
attribute :value, String, matches: :not_empty
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# How a run of several spec files keeps them apart: `process` gives each file a new process
|
|
83
|
+
# (nothing leaks between files); `shared` runs all in one process, faster, and may expose an
|
|
84
|
+
# order dependence between files.
|
|
85
|
+
value_object "Isolation" do
|
|
86
|
+
attribute :value, String, pattern: '^(process|shared)$'
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# A regular expression naming the specs to leave out.
|
|
90
|
+
value_object "ExcludePattern" do
|
|
91
|
+
attribute :value, String, matches: :not_empty
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# The tag filter, as the test runner spells it.
|
|
95
|
+
value_object "TagArguments" do
|
|
96
|
+
attribute :value, String, pattern: '^[^\t\n\r]+$'
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# An environment overlay's name, as `environments/<name>.world` spells it.
|
|
100
|
+
value_object "EnvironmentName" do
|
|
101
|
+
attribute :value, String, pattern: '^[a-z][a-z0-9_]*$'
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# A Rust test target whose fuzzers take their seed counts as arguments: the host, the parser,
|
|
105
|
+
# or the JSON parse fuzzer of the root crate.
|
|
106
|
+
value_object "CrateName" do
|
|
107
|
+
attribute :value, String, pattern: '^(host|parser|json)$'
|
|
108
|
+
end
|
|
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
|
+
command "RunSpecExample" do
|
|
125
|
+
role "Maintainer"
|
|
126
|
+
goal "Run one spec file filtered to one example, through the test runner in this process"
|
|
127
|
+
|
|
128
|
+
attribute :file, FilePath, sets: true
|
|
129
|
+
attribute :example, ExampleText, sets: true
|
|
130
|
+
attribute :run, RunKey, sets: true
|
|
131
|
+
# Run the specs as CI does: the slow io, process and fuzzing groups included, and a Postgres
|
|
132
|
+
# that is not reachable a failure, not a skip.
|
|
133
|
+
attribute :strict, Switch, optional: true, sets: true
|
|
134
|
+
# How many seeds the property specs try, where they default to a few.
|
|
135
|
+
attribute :seeds, Count, optional: true, sets: true
|
|
136
|
+
# The environment overlay the example boots its domains on, such as `memory`.
|
|
137
|
+
attribute :environment, EnvironmentName, optional: true, sets: true
|
|
138
|
+
# RSpec tag filters, such as `cloudfront` for the examples that call a real AWS account.
|
|
139
|
+
attribute :tags, TagArguments, optional: true, sets: true
|
|
140
|
+
# Whether specs share the loaded declarations of an unchanged domain directory; false loads each
|
|
141
|
+
# boot afresh.
|
|
142
|
+
attribute :declaration_cache, Switch, default: true, sets: true
|
|
143
|
+
attribute :root, FilePath, optional: true, sets: true
|
|
144
|
+
|
|
145
|
+
sets :operation, to: "run_spec_example"
|
|
146
|
+
|
|
147
|
+
emits RunSpecExampleRequested
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
command "RunSpecFiles" do
|
|
151
|
+
role "Maintainer"
|
|
152
|
+
goal "Run several spec files in one launcher boot, each in a new process or all in one, and report each file"
|
|
153
|
+
|
|
154
|
+
attribute :files, SpecFiles, sets: true
|
|
155
|
+
attribute :example, ExampleText, optional: true, sets: true
|
|
156
|
+
attribute :isolation, Isolation, default: "process", sets: true
|
|
157
|
+
attribute :run, RunKey, sets: true
|
|
158
|
+
attribute :strict, Switch, optional: true, sets: true
|
|
159
|
+
attribute :seeds, Count, optional: true, sets: true
|
|
160
|
+
attribute :environment, EnvironmentName, optional: true, sets: true
|
|
161
|
+
attribute :tags, TagArguments, optional: true, sets: true
|
|
162
|
+
attribute :declaration_cache, Switch, default: true, sets: true
|
|
163
|
+
attribute :root, FilePath, optional: true, sets: true
|
|
164
|
+
|
|
165
|
+
sets :operation, to: "run_spec_files"
|
|
166
|
+
|
|
167
|
+
emits RunSpecFilesRequested
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# The specs the push rehearsal's map names for this branch's changes (against local main unless a base is
|
|
171
|
+
# named), run as the rehearsal runs them: capped, leaving out specs that need cargo, gh or the network.
|
|
172
|
+
command "RunImpactedSpecs" do
|
|
173
|
+
role "Maintainer"
|
|
174
|
+
goal "Map the branch's changed files to the specs they touch and run them, or list them when dry"
|
|
175
|
+
|
|
176
|
+
attribute :base, FilePath, default: "main", sets: true
|
|
177
|
+
attribute :cap, Count, default: 60, sets: true
|
|
178
|
+
attribute :dry, Switch, optional: true, sets: true
|
|
179
|
+
attribute :isolation, Isolation, default: "process", sets: true
|
|
180
|
+
attribute :example, ExampleText, optional: true, sets: true
|
|
181
|
+
attribute :run, RunKey, sets: true
|
|
182
|
+
attribute :strict, Switch, optional: true, sets: true
|
|
183
|
+
attribute :seeds, Count, optional: true, sets: true
|
|
184
|
+
attribute :environment, EnvironmentName, optional: true, sets: true
|
|
185
|
+
attribute :tags, TagArguments, optional: true, sets: true
|
|
186
|
+
attribute :root, FilePath, optional: true, sets: true
|
|
187
|
+
|
|
188
|
+
sets :operation, to: "run_impacted_specs"
|
|
189
|
+
|
|
190
|
+
emits RunImpactedSpecsRequested
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# Every spec of a folder, in one process: the project's own suite, or this checkout's when no folder is named.
|
|
194
|
+
command "RunSuite" do
|
|
195
|
+
role "Maintainer"
|
|
196
|
+
goal "Run every spec of a folder through the test runner in this process"
|
|
197
|
+
|
|
198
|
+
attribute :root, FilePath, optional: true, sets: true
|
|
199
|
+
attribute :strict, Switch, optional: true, sets: true
|
|
200
|
+
attribute :seeds, Count, optional: true, sets: true
|
|
201
|
+
attribute :environment, EnvironmentName, optional: true, sets: true
|
|
202
|
+
attribute :tags, TagArguments, optional: true, sets: true
|
|
203
|
+
attribute :run, RunKey, sets: true
|
|
204
|
+
|
|
205
|
+
sets :operation, to: "run_suite"
|
|
206
|
+
|
|
207
|
+
emits RunSuiteRequested
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# The specs the files changed since a git ref map to, found by name: a changed spec runs itself, and a changed
|
|
211
|
+
# source file runs the spec of the same name. A change that maps to no spec runs nothing and says so.
|
|
212
|
+
command "RunChanged" do
|
|
213
|
+
role "Maintainer"
|
|
214
|
+
goal "Run the specs that the files changed since a git ref map to, in a folder"
|
|
215
|
+
|
|
216
|
+
attribute :root, FilePath, optional: true, sets: true
|
|
217
|
+
attribute :base, FilePath, default: "origin/main", sets: true
|
|
218
|
+
attribute :strict, Switch, optional: true, sets: true
|
|
219
|
+
attribute :seeds, Count, optional: true, sets: true
|
|
220
|
+
attribute :environment, EnvironmentName, optional: true, sets: true
|
|
221
|
+
attribute :tags, TagArguments, optional: true, sets: true
|
|
222
|
+
attribute :run, RunKey, sets: true
|
|
223
|
+
|
|
224
|
+
sets :operation, to: "run_changed"
|
|
225
|
+
|
|
226
|
+
emits RunChangedRequested
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
command "StressConcurrency" do
|
|
230
|
+
role "Maintainer"
|
|
231
|
+
goal "Rerun the thread-safety specs under many seeds, several processes at a time"
|
|
232
|
+
|
|
233
|
+
attribute :runs, Count, default: 30, sets: true
|
|
234
|
+
# The machine's own core count when none is named, which no fixed default can say.
|
|
235
|
+
attribute :parallel, Count, optional: true, sets: true
|
|
236
|
+
attribute :seed_start, Count, default: 1, sets: true
|
|
237
|
+
attribute :run, RunKey, sets: true
|
|
238
|
+
|
|
239
|
+
sets :operation, to: "stress_concurrency"
|
|
240
|
+
|
|
241
|
+
emits StressConcurrencyRequested
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
command "RunCargoTests" do
|
|
245
|
+
role "Maintainer"
|
|
246
|
+
goal "Run the cargo tests of the host, the parser or the JSON fuzzer, with the seed counts their fuzzers take"
|
|
247
|
+
|
|
248
|
+
attribute :crate, CrateName, sets: true
|
|
249
|
+
attribute :seeds, Count, optional: true, sets: true
|
|
250
|
+
attribute :seed_start, Count, optional: true, sets: true
|
|
251
|
+
attribute :run, RunKey, sets: true
|
|
252
|
+
|
|
253
|
+
sets :operation, to: "run_cargo_tests"
|
|
254
|
+
|
|
255
|
+
emits RunCargoTestsRequested
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
# The caches key on a digest of what they were built from, so a stale entry is never read; this
|
|
259
|
+
# is for ruling a cache out as the cause of a surprise, which turning it off used to do.
|
|
260
|
+
command "ClearCaches" do
|
|
261
|
+
role "Maintainer"
|
|
262
|
+
goal "Delete the on-disk syntax-boot and verdict caches, so the next boot builds and judges afresh"
|
|
263
|
+
|
|
264
|
+
attribute :run, RunKey, sets: true
|
|
265
|
+
|
|
266
|
+
sets :operation, to: "clear_caches"
|
|
267
|
+
|
|
268
|
+
emits ClearCachesRequested
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
command "RegenerateLegacyFixtures" do
|
|
272
|
+
role "Maintainer"
|
|
273
|
+
goal "Regenerate the persistence legacy fixtures through the real adapters"
|
|
274
|
+
|
|
275
|
+
attribute :run, RunKey, sets: true
|
|
276
|
+
attribute :confirm, Switch, optional: true, sets: true
|
|
277
|
+
|
|
278
|
+
sets :operation, to: "regenerate_legacy_fixtures"
|
|
279
|
+
|
|
280
|
+
emits RegenerateLegacyFixturesRequested
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
command "SeedSemanticsCorpus" do
|
|
284
|
+
role "Maintainer"
|
|
285
|
+
goal "Fill the expected outcome of every semantics fixture that lacks one, or re-seed one"
|
|
286
|
+
|
|
287
|
+
attribute :fixture, FixtureName, optional: true, sets: true
|
|
288
|
+
attribute :run, RunKey, sets: true
|
|
289
|
+
|
|
290
|
+
sets :operation, to: "seed_semantics_corpus"
|
|
291
|
+
|
|
292
|
+
emits SeedSemanticsCorpusRequested
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
command "WriteIoParallelSpecList" do
|
|
296
|
+
role "Maintainer"
|
|
297
|
+
goal "Write the committed list of the spec files a tag filter selects"
|
|
298
|
+
|
|
299
|
+
attribute :exclude, ExcludePattern, sets: true
|
|
300
|
+
attribute :tags, TagArguments, optional: true, sets: true
|
|
301
|
+
attribute :write, FilePath, sets: true
|
|
302
|
+
attribute :run, RunKey, sets: true
|
|
303
|
+
attribute :confirm, Switch, optional: true, sets: true
|
|
304
|
+
|
|
305
|
+
sets :operation, to: "write_io_parallel_spec_list"
|
|
306
|
+
|
|
307
|
+
emits WriteIoParallelSpecListRequested
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
# An answer that is one document of text, exactly as the tool that produced it wrote it.
|
|
311
|
+
value_object "Document" do
|
|
312
|
+
attribute :text, String
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
query "ShardSpecs" do
|
|
316
|
+
description "The spec files one group of a runtime-balanced split runs."
|
|
317
|
+
attribute :group, Count
|
|
318
|
+
attribute :groups, Count
|
|
319
|
+
attribute :runtime_log, FilePath, optional: true
|
|
320
|
+
returns Document
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
query "ListIoParallelSpecs" do
|
|
324
|
+
description "The spec files with an example a tag filter selects."
|
|
325
|
+
attribute :exclude, ExcludePattern
|
|
326
|
+
attribute :tags, TagArguments, optional: true
|
|
327
|
+
attribute :check, FilePath, optional: true
|
|
328
|
+
returns Document
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
query "RecordPatternCases" do
|
|
332
|
+
description "The expected match results of the pattern cases, as JSON."
|
|
333
|
+
returns Document
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
policy "ExamineWhenRefreshRuntimeBaselineRequested" do
|
|
338
|
+
on "TestSuiteRun.RefreshRuntimeBaselineRequested"
|
|
339
|
+
ask :examine, with: { run: :run }
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
policy "ExamineWhenRunSpecExampleRequested" do
|
|
343
|
+
on "TestSuiteRun.RunSpecExampleRequested"
|
|
344
|
+
ask :examine, with: { run: :run }
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
policy "ExamineWhenRunSpecFilesRequested" do
|
|
348
|
+
on "TestSuiteRun.RunSpecFilesRequested"
|
|
349
|
+
ask :examine, with: { run: :run }
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
policy "ExamineWhenRunImpactedSpecsRequested" do
|
|
353
|
+
on "TestSuiteRun.RunImpactedSpecsRequested"
|
|
354
|
+
ask :examine, with: { run: :run }
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
policy "ExamineWhenRunSuiteRequested" do
|
|
358
|
+
on "TestSuiteRun.RunSuiteRequested"
|
|
359
|
+
ask :examine, with: { run: :run }
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
policy "ExamineWhenRunChangedRequested" do
|
|
363
|
+
on "TestSuiteRun.RunChangedRequested"
|
|
364
|
+
ask :examine, with: { run: :run }
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
policy "ExamineWhenStressConcurrencyRequested" do
|
|
368
|
+
on "TestSuiteRun.StressConcurrencyRequested"
|
|
369
|
+
ask :examine, with: { run: :run }
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
policy "ExamineWhenRunCargoTestsRequested" do
|
|
373
|
+
on "TestSuiteRun.RunCargoTestsRequested"
|
|
374
|
+
ask :examine, with: { run: :run }
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
policy "ExamineWhenClearCachesRequested" do
|
|
378
|
+
on "TestSuiteRun.ClearCachesRequested"
|
|
379
|
+
ask :examine, with: { run: :run }
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
policy "ExamineWhenRegenerateLegacyFixturesRequested" do
|
|
383
|
+
on "TestSuiteRun.RegenerateLegacyFixturesRequested"
|
|
384
|
+
ask :examine, with: { run: :run }
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
policy "ExamineWhenSeedSemanticsCorpusRequested" do
|
|
388
|
+
on "TestSuiteRun.SeedSemanticsCorpusRequested"
|
|
389
|
+
ask :examine, with: { run: :run }
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
policy "ExamineWhenWriteIoParallelSpecListRequested" do
|
|
393
|
+
on "TestSuiteRun.WriteIoParallelSpecListRequested"
|
|
394
|
+
ask :examine, with: { run: :run }
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
# Named for the run, as ModelCheckRun is: `Hecks::Fuzzing` is the fuzzing toolkit's own module,
|
|
398
|
+
# so a hecksagon could not spell an aggregate of that name.
|
|
399
|
+
aggregate "FuzzRun" do
|
|
400
|
+
description "One fuzz sweep or benchmark, and how it ended; and the generated sequences it replays."
|
|
401
|
+
|
|
402
|
+
acknowledges :key_by_value, "the domain's path, and Introspection declares queries only, so it holds no records and a reference would be refused on every write",
|
|
403
|
+
of: :domain
|
|
404
|
+
|
|
405
|
+
attribute :domain, DomainPath, optional: true
|
|
406
|
+
attribute :run, FuzzKey
|
|
407
|
+
attribute :seeds, Count, optional: true
|
|
408
|
+
attribute :steps, Count, optional: true
|
|
409
|
+
attribute :workers, Count, optional: true
|
|
410
|
+
attribute :budget, Count, optional: true
|
|
411
|
+
attribute :adapter, Persistence, optional: true
|
|
412
|
+
attribute :persist_regressions, RegressionSwitch, optional: true
|
|
413
|
+
attribute :shard, ShardOf, optional: true
|
|
414
|
+
attribute :list_shards, Count, optional: true
|
|
415
|
+
attribute :domains, NameList, optional: true
|
|
416
|
+
attribute :targets, NameList, optional: true
|
|
417
|
+
attribute :iterations, Count, optional: true
|
|
418
|
+
attribute :warmup, Warmup, optional: true
|
|
419
|
+
attribute :runs, Count, optional: true
|
|
420
|
+
attribute :rust_binary, BinaryPath, optional: true
|
|
421
|
+
attribute :format, Format, optional: true
|
|
422
|
+
attribute :output, OutputPath, optional: true
|
|
423
|
+
attribute :report, Report, optional: true
|
|
424
|
+
attribute :refusal, Report, optional: true
|
|
425
|
+
identified_by :run
|
|
426
|
+
|
|
427
|
+
value_object "FuzzKey" do
|
|
428
|
+
attribute :value, String, matches: :present
|
|
429
|
+
|
|
430
|
+
invariant("a sweep is named") { !value.to_s.empty? }
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
# A domain directory; a sweep with none covers every domain of a hecks checkout.
|
|
434
|
+
value_object "DomainPath" do
|
|
435
|
+
attribute :value, String, matches: :not_empty
|
|
436
|
+
|
|
437
|
+
invariant("a domain is named by its path") { !value.to_s.empty? }
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
value_object "Count" do
|
|
441
|
+
attribute :value, Integer
|
|
442
|
+
|
|
443
|
+
invariant("a count is positive") { value > 0 }
|
|
444
|
+
end
|
|
445
|
+
|
|
446
|
+
value_object "Warmup" do
|
|
447
|
+
attribute :value, Integer
|
|
448
|
+
|
|
449
|
+
invariant("a warmup is not negative") { value >= 0 }
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
# Which persistence every ephemeral boot of a sweep uses.
|
|
453
|
+
value_object "Persistence" do
|
|
454
|
+
attribute :value, String, pattern: '^(memory|sqlite|postgres)$'
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
# Whether each distinct finding's minimized repro is also kept under `spec/corpus/regressions/`.
|
|
458
|
+
value_object "RegressionSwitch" do
|
|
459
|
+
attribute :value, Boolean
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
# One share of a sweep, as `I/N`: shard I of N, which sweeps only its own domains so that N
|
|
463
|
+
# jobs together sweep every domain once. The sweep refuses an I past N.
|
|
464
|
+
value_object "ShardOf" do
|
|
465
|
+
attribute :value, String, pattern: '^[1-9][0-9]*/[1-9][0-9]*$'
|
|
466
|
+
end
|
|
467
|
+
|
|
468
|
+
# Names, comma separated: benchmark domains, or the targets to measure.
|
|
469
|
+
value_object "NameList" do
|
|
470
|
+
attribute :value, String, matches: :csv_list
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
value_object "BinaryPath" do
|
|
474
|
+
attribute :value, String, matches: :not_empty
|
|
475
|
+
end
|
|
476
|
+
|
|
477
|
+
value_object "Format" do
|
|
478
|
+
attribute :value, String, pattern: '^(markdown|json)$'
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
value_object "OutputPath" do
|
|
482
|
+
attribute :value, String, matches: :not_empty
|
|
483
|
+
end
|
|
484
|
+
|
|
485
|
+
value_object "Report" do
|
|
486
|
+
attribute :value, String
|
|
487
|
+
end
|
|
488
|
+
|
|
489
|
+
lifecycle :status, default: "requested" do
|
|
490
|
+
mark :failure, "halted"
|
|
491
|
+
transition "Conclude" => "concluded", from: "requested"
|
|
492
|
+
transition "Halt" => "halted", from: "requested"
|
|
493
|
+
mark :terminal, "concluded", "halted"
|
|
494
|
+
end
|
|
495
|
+
|
|
496
|
+
# A sweep replays generated command and query sequences and checks properties over each.
|
|
497
|
+
# A finding is shrunk and saved under `tmp/fuzz-failures/`, and ends the run as halted, with
|
|
498
|
+
# what was found. Sweeping every domain of a checkout needs a hecks checkout; a client names
|
|
499
|
+
# the domain. The sweep runs in child processes started through the ProcessPool adapter, so an
|
|
500
|
+
# interrupt reaches the workers. `shard` sweeps one share of the domains, as `I/N`;
|
|
501
|
+
# `list_shards` sweeps nothing and answers which shard of that many each domain falls in,
|
|
502
|
+
# one line each.
|
|
503
|
+
command "Fuzz" do
|
|
504
|
+
role "Operator"
|
|
505
|
+
goal "Fuzz a domain with generated sequences and keep whether anything broke a property"
|
|
506
|
+
|
|
507
|
+
attribute :domain, DomainPath, optional: true, sets: true
|
|
508
|
+
attribute :run, FuzzKey, sets: true
|
|
509
|
+
attribute :seeds, Count, optional: true, sets: true
|
|
510
|
+
attribute :steps, Count, optional: true, sets: true
|
|
511
|
+
attribute :workers, Count, optional: true, sets: true
|
|
512
|
+
attribute :adapter, Persistence, optional: true, sets: true
|
|
513
|
+
attribute :persist_regressions, RegressionSwitch, optional: true, sets: true
|
|
514
|
+
attribute :shard, ShardOf, optional: true, sets: true
|
|
515
|
+
attribute :list_shards, Count, optional: true, sets: true
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
emits FuzzRequested
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
# Mutation-tests a domain's own checks: changes its bluebooks in small ways and keeps which
|
|
522
|
+
# changes the fuzz properties, the corpus script and the domain's behaviors tests let through.
|
|
523
|
+
# A survivor is a hole in those checks. `budget` caps how many mutants are tried. The run is a
|
|
524
|
+
# child process started through the ProcessPool adapter, as a sweep is.
|
|
525
|
+
command "Mutate" do
|
|
526
|
+
role "Operator"
|
|
527
|
+
goal "Mutate a domain's rules and keep whether its checks noticed each change"
|
|
528
|
+
|
|
529
|
+
attribute :domain, DomainPath, sets: true
|
|
530
|
+
attribute :run, FuzzKey, sets: true
|
|
531
|
+
attribute :seeds, Count, optional: true, sets: true
|
|
532
|
+
attribute :steps, Count, optional: true, sets: true
|
|
533
|
+
attribute :budget, Count, optional: true, sets: true
|
|
534
|
+
|
|
535
|
+
|
|
536
|
+
emits MutateRequested
|
|
537
|
+
end
|
|
538
|
+
|
|
539
|
+
# Measures each persistence adapter, and the Rust binary when there is one to build or use.
|
|
540
|
+
# The report is kept in this record, which the Hecks domain binds to Memory: keeping a
|
|
541
|
+
# domain's benchmark history beside it, in Sqlite under the project's `.hecks/`, is decided
|
|
542
|
+
# with the persistence binding for Custodian, not here. `output` also writes the full JSON.
|
|
543
|
+
command "Bench" do
|
|
544
|
+
role "Operator"
|
|
545
|
+
goal "Measure command throughput and latency for each target, and keep the report"
|
|
546
|
+
|
|
547
|
+
attribute :run, FuzzKey, sets: true
|
|
548
|
+
attribute :domains, NameList, optional: true, sets: true
|
|
549
|
+
attribute :targets, NameList, optional: true, sets: true
|
|
550
|
+
attribute :iterations, Count, optional: true, sets: true
|
|
551
|
+
attribute :warmup, Warmup, optional: true, sets: true
|
|
552
|
+
attribute :runs, Count, optional: true, sets: true
|
|
553
|
+
attribute :rust_binary, BinaryPath, optional: true, sets: true
|
|
554
|
+
attribute :format, Format, optional: true, sets: true
|
|
555
|
+
attribute :output, OutputPath, optional: true, sets: true
|
|
556
|
+
|
|
557
|
+
|
|
558
|
+
emits BenchRequested
|
|
559
|
+
end
|
|
560
|
+
|
|
561
|
+
command "Conclude" do
|
|
562
|
+
role "System"
|
|
563
|
+
goal "Record that the sweep or benchmark ended well, and what it reported"
|
|
564
|
+
|
|
565
|
+
reference_to FuzzRun
|
|
566
|
+
attribute :report, Report, sets: true
|
|
567
|
+
|
|
568
|
+
|
|
569
|
+
emits FuzzConcluded
|
|
570
|
+
end
|
|
571
|
+
|
|
572
|
+
command "Halt" do
|
|
573
|
+
role "System"
|
|
574
|
+
goal "Record that the sweep found something or the benchmark could not run, and what it said"
|
|
575
|
+
|
|
576
|
+
reference_to FuzzRun
|
|
577
|
+
attribute :refusal, Report, sets: true
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
emits FuzzHalted
|
|
581
|
+
end
|
|
582
|
+
|
|
583
|
+
query "Conclusion" do
|
|
584
|
+
description "How one sweep or benchmark ended: its status, and what it reported or found."
|
|
585
|
+
attribute :run, FuzzKey
|
|
586
|
+
where(run: :run)
|
|
587
|
+
order_by :run
|
|
588
|
+
end
|
|
589
|
+
|
|
590
|
+
query "Halted" do
|
|
591
|
+
description "Every sweep that found something and every benchmark that could not run."
|
|
592
|
+
where(status: "halted")
|
|
593
|
+
order_by :run
|
|
594
|
+
end
|
|
595
|
+
|
|
596
|
+
# An answer that is one document of text, exactly as the tool that produced it wrote it.
|
|
597
|
+
value_object "Document" do
|
|
598
|
+
attribute :text, String
|
|
599
|
+
end
|
|
600
|
+
|
|
601
|
+
# The generator `hecks fuzz` draws from, on its own: one valid dispatch sequence as a
|
|
602
|
+
# replayable script. `adversarial` is the fraction of steps mutated to be refused; 0 is off.
|
|
603
|
+
query "GenerateSequence" do
|
|
604
|
+
description "One generated, valid dispatch sequence for a domain, as a script `hecks run` replays."
|
|
605
|
+
attribute :domain, DomainPath
|
|
606
|
+
attribute :seed, Integer, optional: true
|
|
607
|
+
attribute :steps, Integer, optional: true
|
|
608
|
+
attribute :adversarial, Float, optional: true
|
|
609
|
+
returns Document
|
|
610
|
+
end
|
|
611
|
+
end
|
|
612
|
+
|
|
613
|
+
policy "SweepWhenRequested" do
|
|
614
|
+
on "FuzzRun.FuzzRequested"
|
|
615
|
+
ask :sweep, with: { run: :run }
|
|
616
|
+
end
|
|
617
|
+
|
|
618
|
+
policy "MutateWhenRequested" do
|
|
619
|
+
on "FuzzRun.MutateRequested"
|
|
620
|
+
ask :probe, with: { run: :run }
|
|
621
|
+
end
|
|
622
|
+
|
|
623
|
+
policy "MeasureWhenRequested" do
|
|
624
|
+
on "FuzzRun.BenchRequested"
|
|
625
|
+
ask :measure, with: { run: :run }
|
|
626
|
+
end
|
|
627
|
+
|
|
628
|
+
policy "RecordTheSweep" do
|
|
629
|
+
on "FuzzRun.FuzzAnswered"
|
|
630
|
+
trigger FuzzRun::Conclude, with: { report: :report }
|
|
631
|
+
end
|
|
632
|
+
|
|
633
|
+
policy "RecordTheFinding" do
|
|
634
|
+
on "FuzzRun.FuzzRefused"
|
|
635
|
+
trigger FuzzRun::Halt, with: { refusal: :refusal }
|
|
636
|
+
end
|
|
637
|
+
end
|
|
638
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# The Tickets domain's settings. `work_limit` caps how many Work rows may be started at once:
|
|
2
|
+
# a start that would make one more is sent back to the plan, naming the cap, the count and the
|
|
3
|
+
# holders. Without this line the cap is `Hecks::Adapters::WorkLimits::DEFAULT_CAP`, the same number.
|
|
4
|
+
#
|
|
5
|
+
# `frozen_shapes` (not `freeze`, which every Ruby object already answers) names the areas and aggregates whose persisted shape may not move: a brief tells its session
|
|
6
|
+
# to commit and hold a change that moves one, and `Dispatch.Fill` starts no row in a frozen area.
|
|
7
|
+
# `dispatch_max_load` is the 1-minute load above which `Dispatch.Fill` starts no session (the CPU count
|
|
8
|
+
# when absent). `session_environment` is what every dispatched session starts with: a shared cargo
|
|
9
|
+
# target directory and a `nice` increment.
|
|
10
|
+
Hecks.world "Tickets" do
|
|
11
|
+
work_limit "WorkLimits", cap: 8
|
|
12
|
+
frozen_shapes "PersistedShapes", areas: []
|
|
13
|
+
session_environment "Sessions", cargo_target_dir: "~/.cache/hecks/cargo-target", nice: 15
|
|
14
|
+
end
|