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
|
@@ -3,6 +3,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
3
3
|
# Closed sets the language admits, projected into matching Ruby and Rust
|
|
4
4
|
# tables (hecks project_vocabulary, hecks project_rust_vocabulary) so both runtimes agree.
|
|
5
5
|
description "The closed sets the language admits — the whole of what any runtime may accept, declared once."
|
|
6
|
+
acknowledges :no_command_surface, "the closed sets are declared once and projected into both runtimes; nothing changes them at runtime"
|
|
6
7
|
|
|
7
8
|
# Named only by itself; a vocabulary hangs under nothing else.
|
|
8
9
|
identified_by VocabularyName, as: :name
|
|
@@ -698,7 +699,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
698
699
|
# per row, answering `touched` from the diff of the change against its base.
|
|
699
700
|
# hecks project_ci_gates writes each row into the marked region of its
|
|
700
701
|
# `workflow` (.github/workflows/<workflow>), and the job it writes runs
|
|
701
|
-
# `hecks decide_ci_gate gate=<name>`, which makes the decision from the row.
|
|
702
|
+
# `hecks RegenerationRun.decide_ci_gate! gate=<name>`, which makes the decision from the row.
|
|
702
703
|
#
|
|
703
704
|
# `mode` is how `pattern` (an extended regex over changed paths) decides:
|
|
704
705
|
# `touches` runs the job when any changed path matches, `skips_unless` runs it
|
|
@@ -747,7 +748,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
747
748
|
member path: "packages/hecks-client/package-lock.json", lines: "^\\s*\"version\": \"[0-9]+\\.[0-9]+\\.[0-9]+\",?$"
|
|
748
749
|
end
|
|
749
750
|
|
|
750
|
-
# The checks a stage holds a change against before it is let through. `hecks gate_run.gate
|
|
751
|
+
# The checks a stage holds a change against before it is let through. `hecks gate_run.gate!`
|
|
751
752
|
# reads these rows, the git pre-push hook calls it, and the `ci` stage's checks are the ones
|
|
752
753
|
# `.github/workflows/ci-checks.yml` runs, so the list of checks lives here and nowhere else.
|
|
753
754
|
|
|
@@ -758,6 +759,10 @@ Hecks.bluebook "Bluebook" do
|
|
|
758
759
|
# separated by single spaces, with `{workers}` standing for half the machine's cores, at least
|
|
759
760
|
# one; `script` is a shell script run as `sh -ec` instead, when `argv` is empty; `blocked` is what
|
|
760
761
|
# a red check means and what to do about it.
|
|
762
|
+
#
|
|
763
|
+
# `runs_in` says where a check runs. `ci` marks a check that only CI runs: no local stage may
|
|
764
|
+
# list it, and the owner's decision is that the full spec suite runs in CI on production. Empty
|
|
765
|
+
# means a local stage may list the check.
|
|
761
766
|
value_object "GateCheck" do
|
|
762
767
|
attribute :name, String
|
|
763
768
|
attribute :id, String
|
|
@@ -765,9 +770,11 @@ Hecks.bluebook "Bluebook" do
|
|
|
765
770
|
attribute :argv, String
|
|
766
771
|
attribute :script, String
|
|
767
772
|
attribute :blocked, String
|
|
773
|
+
attribute :runs_in, String
|
|
768
774
|
|
|
769
775
|
member name: "rspec", id: "rspec",
|
|
770
776
|
title: "rspec (parallel)",
|
|
777
|
+
runs_in: "ci",
|
|
771
778
|
argv: "",
|
|
772
779
|
script: "# Workers are grouped by this machine's own last timings, kept under the git directory\n# (shared by every worktree, never committed). CI's committed baseline leaves out the io\n# specs this run includes, so it only seeds the first run; each run then rewrites the log.\nlog=\"$(git rev-parse --git-common-dir)/hecks_rspec_runtime.log\"\n[ -f \"$log\" ] || cp .github/rspec_runtime_baseline.log \"$log\"\nbundle exec parallel_rspec spec -n {workers} --group-by runtime --runtime-log \"$log\" --allowed-missing 100 \\\n -o \"--format progress --format ParallelTests::RSpec::RuntimeLogger --out $log\"\n",
|
|
773
780
|
blocked: "the suite is red."
|
|
@@ -783,22 +790,22 @@ Hecks.bluebook "Bluebook" do
|
|
|
783
790
|
blocked: "the engines disagree about a declared query; one of them is wrong, and a self-consistent adapter spec cannot tell which."
|
|
784
791
|
member name: "engine_agreement", id: "engine_agreement",
|
|
785
792
|
title: "engine agreement, every declared comparator on both engines",
|
|
786
|
-
argv: "bundle exec exe/hecks conformance_run.check_engine_agreement --wait",
|
|
793
|
+
argv: "bundle exec exe/hecks conformance_run.check_engine_agreement! --wait",
|
|
787
794
|
script: "",
|
|
788
795
|
blocked: "a comparator is missing a shared case or a cross-engine spec."
|
|
789
796
|
member name: "shape_ledger", id: "shape_ledger",
|
|
790
797
|
title: "shape ledger, every bluebook's storage shape held by the ledger or reached by a translation edge",
|
|
791
|
-
argv: "bundle exec exe/hecks conformance_run.check_shape_ledger --wait",
|
|
798
|
+
argv: "bundle exec exe/hecks conformance_run.check_shape_ledger! --wait",
|
|
792
799
|
script: "",
|
|
793
|
-
blocked: "a bluebook's storage shape moved with no translation edge from the shape the ledger holds; the failure prints the edge to commit. A change that only adds is settled in one step with `hecks conformance_run.check_shape_ledger --confirm --additive --wait`, which writes the empty edge and moves the ledger; a change that renames or reshapes data needs rules first."
|
|
800
|
+
blocked: "a bluebook's storage shape moved with no translation edge from the shape the ledger holds; the failure prints the edge to commit. A change that only adds is settled in one step with `hecks conformance_run.check_shape_ledger! --confirm --additive --wait`, which writes the empty edge and moves the ledger; a change that renames or reshapes data needs rules first."
|
|
794
801
|
member name: "model_check", id: "model_check",
|
|
795
802
|
title: "model check, unreachable states, dead transitions and orphaned handlers",
|
|
796
|
-
argv: "bundle exec exe/hecks model_check --wait",
|
|
803
|
+
argv: "bundle exec exe/hecks ModelCheckRun.model_check! --wait",
|
|
797
804
|
script: "",
|
|
798
805
|
blocked: "the model checker found something."
|
|
799
806
|
member name: "doc_coverage", id: "doc_coverage",
|
|
800
807
|
title: "docs coverage, words with no running example",
|
|
801
|
-
argv: "bundle exec exe/hecks conformance_run.measure_doc_coverage --wait",
|
|
808
|
+
argv: "bundle exec exe/hecks conformance_run.measure_doc_coverage! --wait",
|
|
802
809
|
script: "",
|
|
803
810
|
blocked: "the language ships something undocumented; write the missing sections and examples."
|
|
804
811
|
member name: "rubocop", id: "rubocop",
|
|
@@ -808,74 +815,143 @@ Hecks.bluebook "Bluebook" do
|
|
|
808
815
|
blocked: "rubocop found an offense."
|
|
809
816
|
member name: "codegen_drift", id: "codegen_drift",
|
|
810
817
|
title: "codegen drift, rust/src/generated/ must match a fresh regeneration",
|
|
811
|
-
argv: "bundle exec exe/hecks regeneration_run.regenerate_corpus --check --wait",
|
|
818
|
+
argv: "bundle exec exe/hecks regeneration_run.regenerate_corpus! --check --wait",
|
|
812
819
|
script: "",
|
|
813
|
-
blocked: "regenerating hits a diff.
|
|
820
|
+
blocked: "regenerating hits a diff. The whole generated tree is committed, so run `hecks regeneration_run.regenerate_corpus! --confirm` and commit what it changed."
|
|
814
821
|
member name: "comment_style", id: "comment_style",
|
|
815
822
|
title: "comment style, every comment under lib/hecks and spec against docs/COMMENT_STYLE_GUIDE.md",
|
|
816
|
-
argv: "bundle exec exe/hecks style_run.check_comments paths=lib/hecks spec --wait",
|
|
823
|
+
argv: "bundle exec exe/hecks style_run.check_comments! paths=lib/hecks spec --wait",
|
|
817
824
|
script: "",
|
|
818
|
-
blocked: "a comment breaks the style guide, such as a line past 100 characters; `hecks fix_comments
|
|
825
|
+
blocked: "a comment breaks the style guide, such as a line past 100 characters; `hecks StyleRun.fix_comments!` rewrites the mechanical ones, and the rest are shortened by hand. CI runs this same check."
|
|
819
826
|
member name: "comment_blocks", id: "comment_blocks",
|
|
820
827
|
title: "comment blocks, no run of comment lines past ADR 0075's cap",
|
|
821
|
-
argv: "bundle exec exe/hecks style_run.check_comments paths=lib,spec,examples only=long_block --wait",
|
|
828
|
+
argv: "bundle exec exe/hecks style_run.check_comments! paths=lib,spec,examples only=long_block --wait",
|
|
822
829
|
script: "",
|
|
823
830
|
blocked: "a comment block ran past the cap; shorten it."
|
|
831
|
+
member name: "command_names", id: "command_names",
|
|
832
|
+
title: "command names, every launcher name a workflow, hook, gate row, spec or guide invokes still resolves",
|
|
833
|
+
argv: "bundle exec exe/hecks conformance_run.check_command_names! --wait",
|
|
834
|
+
script: "",
|
|
835
|
+
blocked: "a file invokes a launcher name the launcher no longer accepts (a renamed command, or a write without its !), so what runs it runs nothing. The failure names each file:line and the nearest valid name. Mark an invocation that is shown and not run with `dead-name-check: skip` on its line or the one before, a fence with `skip`, `historical` or `illustrative` after its language, or a whole page with `dead-name-check: skip-file` in its first lines."
|
|
836
|
+
member name: "workflow_pagination", id: "workflow_pagination",
|
|
837
|
+
title: "workflow pagination, no step counts or waits for GitHub list items from the first page alone",
|
|
838
|
+
argv: "bundle exec exe/hecks conformance_run.check_workflow_pagination! --wait",
|
|
839
|
+
script: "",
|
|
840
|
+
blocked: "a workflow step counts or waits for the items of a list call (artifacts, runs, jobs, issues, releases, pulls, commits) and reads only the first 30. Add --paginate and count the lines it prints, or filter the path with ?name=."
|
|
841
|
+
member name: "secret_output", id: "secret_output",
|
|
842
|
+
title: "secret output, no value a world hands an adapter as a secret reaches what a launcher prints",
|
|
843
|
+
argv: "bundle exec rspec spec/secret_output_spec.rb",
|
|
844
|
+
script: "",
|
|
845
|
+
blocked: "a declared secret, or a database URL's password, reached a refusal, a note or a result. Hold it through `Hecks::Secrets` where the world hands it over, and print through a guarded stream."
|
|
846
|
+
member name: "adapter_words", id: "adapter_words",
|
|
847
|
+
title: "adapter words, no domain name equal to a technology word the adapters are named for",
|
|
848
|
+
argv: "bundle exec rspec spec/adapter_words_spec.rb",
|
|
849
|
+
script: "",
|
|
850
|
+
blocked: "a domain name (a module, aggregate, command or query) equals a technology word listed in lib/hecks/hecks/adapter_words.json. The failure names each one; rename the domain name, not the adapter."
|
|
824
851
|
member name: "rust_fmt", id: "rust_fmt",
|
|
825
852
|
title: "rustfmt, every Rust crate laid out as `cargo fmt` would",
|
|
826
853
|
argv: "",
|
|
827
854
|
script: "# The main crate's generated modules are not committed, so cargo fmt would stop at a\n# missing file on a fresh checkout; its hand-written entry points are named instead.\nrustfmt --check --edition 2021 rust/src/main.rs rust/src/kernel/mod.rs rust/tests/*.rs\nfor crate in parser codegen lsp host web build; do\n cargo fmt --check --manifest-path \"rust/$crate/Cargo.toml\"\ndone\n",
|
|
828
855
|
blocked: "a Rust file is not laid out as rustfmt has it; run `cargo fmt` in its crate (rust/src/exemplar is exempt, it is text templates). Generated Rust is laid out by its generators, so fix the generator, not the output."
|
|
829
856
|
member name: "rust_io", id: "rust_io",
|
|
830
|
-
title: "rust io specs, conformance, coercion, has_many, semantics corpus and feature exclusivity",
|
|
857
|
+
title: "rust io specs, conformance, coercion, has_many, semantics corpus, corpus regeneration and feature exclusivity",
|
|
831
858
|
argv: "",
|
|
832
|
-
script: "# Building the banking crate makes banking the default feature and rewrites the module\n# list, both tracked. They are put back on the way out, and the check will not start over\n# a person's uncommitted edits to them.\nrewritten=\"rust/Cargo.toml rust/src/generated/mod.rs\"\nif [ -n \"$(git status --porcelain -- $rewritten)\" ]; then\n echo \"uncommitted changes in $rewritten; commit or discard them first\" >&2\n exit 1\nfi\ntrap 'git checkout -q -- $rewritten' EXIT\nenv -u CARGO_TARGET_DIR bundle exec exe/hecks regeneration_run.regenerate_corpus --confirm --wait\nbundle exec exe/hecks build.project_rust domain=examples/banking --wait\nbundle exec rspec --tag io --profile 8 spec/rust_conformance_spec.rb spec/rust_conformance_fuzz_spec.rb spec/rust_numeric_coercion_spec.rb spec/rust_generated/has_many_spec.rb spec/semantics_corpus_spec.rb\nbundle exec rspec --tag io --profile 8 spec/rust_generated/domain_feature_exclusivity_spec.rb\n",
|
|
859
|
+
script: "# Building the banking crate makes banking the default feature and rewrites the module\n# list, both tracked. They are put back on the way out, and the check will not start over\n# a person's uncommitted edits to them.\nrewritten=\"rust/Cargo.toml rust/src/generated/mod.rs\"\nif [ -n \"$(git status --porcelain -- $rewritten)\" ]; then\n echo \"uncommitted changes in $rewritten; commit or discard them first\" >&2\n exit 1\nfi\ntrap 'git checkout -q -- $rewritten' EXIT\nenv -u CARGO_TARGET_DIR bundle exec exe/hecks regeneration_run.regenerate_corpus! --confirm --wait\nbundle exec exe/hecks build.project_rust! domain=examples/banking --wait\nbundle exec rspec --tag io --profile 8 spec/rust_conformance_spec.rb spec/rust_conformance_fuzz_spec.rb spec/rust_numeric_coercion_spec.rb spec/rust_generated/has_many_spec.rb spec/semantics_corpus_spec.rb\nbundle exec rspec --tag io --profile 8 spec/rust_generated/domain_feature_exclusivity_spec.rb\nbundle exec rspec --tag io --profile 8 spec/rust_build_regeneration_order_spec.rb spec/rust_build_regeneration_subset_spec.rb\n",
|
|
833
860
|
blocked: "a Rust io spec failed, or skipped; the crate it built is under rust/target."
|
|
834
861
|
member name: "ci_codegen_drift", id: "codegen_drift",
|
|
835
862
|
title: "codegen drift, the committed generated Rust must match the regeneration this job holds",
|
|
836
863
|
argv: "git diff --exit-code --stat -- rust/src/generated rust/Cargo.toml",
|
|
837
864
|
script: "",
|
|
838
|
-
blocked: "regenerating hits a diff.
|
|
865
|
+
blocked: "regenerating hits a diff. The whole generated tree is committed, so run `hecks regeneration_run.regenerate_corpus! --confirm` and commit what it changed."
|
|
866
|
+
# The rspec shards each hold only the domains they read, so the examples that read the whole
|
|
867
|
+
# generated tree are tagged `generated_all` and left out of them. This job holds every domain.
|
|
868
|
+
member name: "generated_tree", id: "generated_tree",
|
|
869
|
+
title: "whole-tree specs, the examples tagged generated_all against every domain's generated Rust",
|
|
870
|
+
argv: "bundle exec rspec --tag generated_all",
|
|
871
|
+
script: "",
|
|
872
|
+
blocked: "a spec that reads the whole generated tree failed; run `hecks regeneration_run.regenerate_corpus! --confirm` to materialize every domain, then `bundle exec rspec --tag generated_all`."
|
|
839
873
|
member name: "rust_clippy", id: "rust_clippy",
|
|
840
874
|
title: "clippy, every Rust crate with its warnings as errors",
|
|
841
875
|
argv: "",
|
|
842
876
|
script: "for crate in . parser codegen lsp host web build; do\n cargo clippy --all-targets --manifest-path \"rust/$crate/Cargo.toml\" -- -D warnings\ndone\n",
|
|
843
|
-
blocked: "clippy found a warning in a Rust crate, under the strict `[lints.clippy]` table of its Cargo.toml. The main crate needs rust/src/generated, so run `hecks regenerate_corpus --confirm` first on a fresh checkout. Fix the code, or allow a lint at the one site with a line saying why; a warning in generated Rust is fixed in its generator."
|
|
877
|
+
blocked: "clippy found a warning in a Rust crate, under the strict `[lints.clippy]` table of its Cargo.toml. The main crate needs rust/src/generated, so run `hecks regeneration_run.regenerate_corpus! --confirm` first on a fresh checkout. Fix the code, or allow a lint at the one site with a line saying why; a warning in generated Rust is fixed in its generator."
|
|
844
878
|
member name: "lint_deploy_recipes", id: "lint_deploy_recipes",
|
|
845
879
|
title: "generated deploy recipes, a command with no checked exit status or no echo",
|
|
846
|
-
argv: "bundle exec exe/hecks deploy
|
|
880
|
+
argv: "bundle exec exe/hecks deploy MakefileCheck.lint! --wait",
|
|
847
881
|
script: "",
|
|
848
882
|
blocked: "a generated deploy Makefile has an unchecked command, or real AWS or database work with no echo telling the person running it what is about to happen."
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
883
|
+
# The fuzz sweeps run as three shards each, one CI job leg apiece, so the corpus is swept in
|
|
884
|
+
# a third of the time. No unsharded row stays: no stage but `ci` ran the whole sweep, and a
|
|
885
|
+
# person who wants one run of it types `hecks fuzz_run.fuzz! --wait`. A shard is `shard=I/N`,
|
|
886
|
+
# and the matrix legs of `checks_fuzz` and `checks_fuzz_sqlite` in ci-checks.yml number 1 to
|
|
887
|
+
# N, which spec/ci_fuzz_shards_spec.rb holds to the N written here.
|
|
888
|
+
member name: "fuzz_1_of_3", id: "fuzz_1_of_3",
|
|
889
|
+
title: "fuzz, shard 1 of 3 of the example domains on the Memory adapter",
|
|
890
|
+
argv: "bundle exec exe/hecks fuzz_run.fuzz! shard=1/3 --wait",
|
|
891
|
+
script: "",
|
|
892
|
+
blocked: "a property, an interpreter crash or a determinism check failed on a replayed sequence; the seed is in the output."
|
|
893
|
+
member name: "fuzz_2_of_3", id: "fuzz_2_of_3",
|
|
894
|
+
title: "fuzz, shard 2 of 3 of the example domains on the Memory adapter",
|
|
895
|
+
argv: "bundle exec exe/hecks fuzz_run.fuzz! shard=2/3 --wait",
|
|
896
|
+
script: "",
|
|
897
|
+
blocked: "a property, an interpreter crash or a determinism check failed on a replayed sequence; the seed is in the output."
|
|
898
|
+
member name: "fuzz_3_of_3", id: "fuzz_3_of_3",
|
|
899
|
+
title: "fuzz, shard 3 of 3 of the example domains on the Memory adapter",
|
|
900
|
+
argv: "bundle exec exe/hecks fuzz_run.fuzz! shard=3/3 --wait",
|
|
852
901
|
script: "",
|
|
853
902
|
blocked: "a property, an interpreter crash or a determinism check failed on a replayed sequence; the seed is in the output."
|
|
854
|
-
member name: "
|
|
855
|
-
title: "fuzz on a real on-disk SQLite database",
|
|
856
|
-
argv: "bundle exec exe/hecks fuzz_run.fuzz adapter=sqlite seeds=6 --wait",
|
|
903
|
+
member name: "fuzz_sqlite_1_of_3", id: "fuzz_sqlite_1_of_3",
|
|
904
|
+
title: "fuzz, shard 1 of 3 on a real on-disk SQLite database",
|
|
905
|
+
argv: "bundle exec exe/hecks fuzz_run.fuzz! adapter=sqlite seeds=6 shard=1/3 --wait",
|
|
906
|
+
script: "",
|
|
907
|
+
blocked: "the SQLite adapter broke a property the Memory adapter held; seeds are 1..N, so the run repeats."
|
|
908
|
+
member name: "fuzz_sqlite_2_of_3", id: "fuzz_sqlite_2_of_3",
|
|
909
|
+
title: "fuzz, shard 2 of 3 on a real on-disk SQLite database",
|
|
910
|
+
argv: "bundle exec exe/hecks fuzz_run.fuzz! adapter=sqlite seeds=6 shard=2/3 --wait",
|
|
911
|
+
script: "",
|
|
912
|
+
blocked: "the SQLite adapter broke a property the Memory adapter held; seeds are 1..N, so the run repeats."
|
|
913
|
+
member name: "fuzz_sqlite_3_of_3", id: "fuzz_sqlite_3_of_3",
|
|
914
|
+
title: "fuzz, shard 3 of 3 on a real on-disk SQLite database",
|
|
915
|
+
argv: "bundle exec exe/hecks fuzz_run.fuzz! adapter=sqlite seeds=6 shard=3/3 --wait",
|
|
857
916
|
script: "",
|
|
858
917
|
blocked: "the SQLite adapter broke a property the Memory adapter held; seeds are 1..N, so the run repeats."
|
|
859
|
-
member name: "
|
|
860
|
-
title: "fuzz
|
|
861
|
-
argv: "bundle exec exe/hecks fuzz_run.fuzz
|
|
918
|
+
member name: "fuzz_shards", id: "fuzz_shards",
|
|
919
|
+
title: "fuzz shards, the three shards together hold every domain of the sweep once",
|
|
920
|
+
argv: "bundle exec exe/hecks fuzz_run.fuzz! list_shards=3 --wait",
|
|
921
|
+
script: "",
|
|
922
|
+
blocked: "the split of the fuzz sweep into three shards drops or repeats a domain, or cannot be listed; a shard would then sweep less than the sweep it stands for. Read the refusal, and fix lib/hecks/tools/fuzz_sweep/shards.rb or the cost table spec/fuzzing/fuzz_runtime_baseline.log."
|
|
923
|
+
# The Postgres sweep is two legs of its own, a runner and a database apiece: it is the slowest
|
|
924
|
+
# sweep, since every dispatch is a real round trip.
|
|
925
|
+
member name: "fuzz_postgres_1_of_2", id: "fuzz_postgres_1_of_2",
|
|
926
|
+
title: "fuzz, shard 1 of 2 on real Postgres (each run in its own scratch schema)",
|
|
927
|
+
argv: "bundle exec exe/hecks fuzz_run.fuzz! adapter=postgres seeds=3 steps=20 shard=1/2 --wait",
|
|
928
|
+
script: "",
|
|
929
|
+
blocked: "the Postgres adapter broke a property the Memory adapter held; it needs PGHOST, PGUSER and PGPASSWORD."
|
|
930
|
+
member name: "fuzz_postgres_2_of_2", id: "fuzz_postgres_2_of_2",
|
|
931
|
+
title: "fuzz, shard 2 of 2 on real Postgres (each run in its own scratch schema)",
|
|
932
|
+
argv: "bundle exec exe/hecks fuzz_run.fuzz! adapter=postgres seeds=3 steps=20 shard=2/2 --wait",
|
|
862
933
|
script: "",
|
|
863
934
|
blocked: "the Postgres adapter broke a property the Memory adapter held; it needs PGHOST, PGUSER and PGPASSWORD."
|
|
864
935
|
member name: "vocabulary_drift", id: "vocabulary_drift",
|
|
865
936
|
title: "vocabulary, the reserved-name tables regenerated must match the committed ones",
|
|
866
937
|
argv: "",
|
|
867
|
-
script: "bundle exec exe/hecks language_run.project_vocabulary --confirm --wait\nbundle exec exe/hecks language_run.project_reserved_names --confirm --wait\ngit diff --exit-code -- lib/hecks/vocabulary.rb rust/codegen/src/reserved_names.rs rust/build/src/reserved_names.rs\n",
|
|
938
|
+
script: "bundle exec exe/hecks language_run.project_vocabulary! --confirm --wait\nbundle exec exe/hecks language_run.project_reserved_names! --confirm --wait\ngit diff --exit-code -- lib/hecks/vocabulary.rb rust/codegen/src/reserved_names.rs rust/build/src/reserved_names.rs\n",
|
|
868
939
|
blocked: "a generated vocabulary file is stale; the check rewrote it, so commit the result."
|
|
869
940
|
member name: "ci_gates", id: "ci_gates",
|
|
870
941
|
title: "ci gates, the CiGate rows must match the marked regions of the workflows",
|
|
871
|
-
argv: "bundle exec exe/hecks regeneration_run.project_ci_gates --wait",
|
|
942
|
+
argv: "bundle exec exe/hecks regeneration_run.project_ci_gates! --wait",
|
|
943
|
+
script: "",
|
|
944
|
+
blocked: "a CiGate row changed with no projection, or a region was edited by hand; run `hecks regeneration_run.project_ci_gates! --confirm`."
|
|
945
|
+
member name: "ci_pipeline", id: "ci_pipeline",
|
|
946
|
+
title: "ci pipeline, the workflow rows must match the files they project",
|
|
947
|
+
argv: "bundle exec exe/hecks regeneration_run.project_ci_pipeline! --wait",
|
|
872
948
|
script: "",
|
|
873
|
-
blocked: "a
|
|
949
|
+
blocked: "a workflow row changed with no projection, or a projected workflow was edited by hand; run `hecks regeneration_run.project_ci_pipeline! --confirm`."
|
|
874
950
|
member name: "tools_doc", id: "tools_doc",
|
|
875
951
|
title: "tools doc, docs/tools.md must match the RetiredScript rows",
|
|
876
|
-
argv: "bundle exec exe/hecks regeneration_run.project_tools_doc --wait",
|
|
952
|
+
argv: "bundle exec exe/hecks regeneration_run.project_tools_doc! --wait",
|
|
877
953
|
script: "",
|
|
878
|
-
blocked: "a command's arguments changed with no regenerated doc; run `hecks regeneration_run.project_tools_doc --confirm`."
|
|
954
|
+
blocked: "a command's arguments changed with no regenerated doc; run `hecks regeneration_run.project_tools_doc! --confirm`."
|
|
879
955
|
member name: "rust_coverage", id: "rust_coverage",
|
|
880
956
|
title: "rust coverage, every generated module",
|
|
881
957
|
argv: "bundle exec exe/hecks query corpus_run.corpus_rust_coverage --wait",
|
|
@@ -888,13 +964,13 @@ Hecks.bluebook "Bluebook" do
|
|
|
888
964
|
blocked: "hecks-codegen generated nothing for a construct a domain declares."
|
|
889
965
|
member name: "kernel_coverage", id: "kernel_coverage",
|
|
890
966
|
title: "rust kernel coverage, every capability variant has a kernel file",
|
|
891
|
-
argv: "bundle exec exe/hecks kernel_run.measure_kernel_coverage --wait",
|
|
967
|
+
argv: "bundle exec exe/hecks kernel_run.measure_kernel_coverage! --wait",
|
|
892
968
|
script: "",
|
|
893
969
|
blocked: "a capability's enum variant has no rust/src/kernel file behind it."
|
|
894
970
|
member name: "rust_vocabulary_drift", id: "rust_vocabulary_drift",
|
|
895
971
|
title: "rust vocabulary, the kernel vocab tables regenerated must match the committed ones",
|
|
896
972
|
argv: "",
|
|
897
|
-
script: "bundle exec exe/hecks language_run.project_rust_vocabulary --confirm --wait\ngit diff --exit-code -- rust/src/kernel/vocab/\nuntracked=\"$(git status --porcelain --untracked-files=all -- rust/src/kernel/vocab/)\"\nif [ -n \"$untracked\" ]; then\n echo \"rust/src/kernel/vocab has uncommitted generated files:\" >&2\n echo \"$untracked\" >&2\n exit 1\nfi\n",
|
|
973
|
+
script: "bundle exec exe/hecks language_run.project_rust_vocabulary! --confirm --wait\ngit diff --exit-code -- rust/src/kernel/vocab/\nuntracked=\"$(git status --porcelain --untracked-files=all -- rust/src/kernel/vocab/)\"\nif [ -n \"$untracked\" ]; then\n echo \"rust/src/kernel/vocab has uncommitted generated files:\" >&2\n echo \"$untracked\" >&2\n exit 1\nfi\n",
|
|
898
974
|
blocked: "the generated kernel vocab tables are stale or untracked; the check rewrote them, so commit the result."
|
|
899
975
|
end
|
|
900
976
|
|
|
@@ -902,33 +978,61 @@ Hecks.bluebook "Bluebook" do
|
|
|
902
978
|
# the order they are reported. `env` is `NAME=value` words set only where the caller has not set
|
|
903
979
|
# the name: a push check has no use for the Hecks domain's database, so it runs on Memory, as a
|
|
904
980
|
# pull-request run does in CI. `HECKS_PROCESS_SPECS` keeps the examples tagged `process` (they
|
|
905
|
-
# start child processes, so a plain `rspec` leaves them out) in the suite `
|
|
981
|
+
# start child processes, so a plain `rspec` leaves them out) in the suite `ci_suite` runs.
|
|
906
982
|
|
|
907
|
-
# `
|
|
908
|
-
#
|
|
909
|
-
#
|
|
910
|
-
#
|
|
911
|
-
#
|
|
912
|
-
#
|
|
983
|
+
# `ci_suite` is the full spec suite. It is a `runs_in: "ci"` check: CI runs it on production, and
|
|
984
|
+
# no local stage, hook or push lists it. Owner decision: nobody runs the full suite locally; a
|
|
985
|
+
# change is checked locally by the quick gate, RuboCop, the shape ledger and the specs named for
|
|
986
|
+
# that change. A person runs `ci_suite` by hand only by asking for it.
|
|
987
|
+
#
|
|
988
|
+
# `quick` is what every push of `main` runs, and what a commit should have passed: the checks
|
|
989
|
+
# that finish in seconds and that only the author can fix cheaply (a storage shape with no edge,
|
|
990
|
+
# a style offense, a comment past the guide, a leaked secret, a syntax error RuboCop reads).
|
|
991
|
+
# Everything slower runs after the push, in CI (`ci`, `ci_suite`) and the nightly run, and holds
|
|
992
|
+
# `stable`, not `main`. `pre_push` is the whole suite for a person who asks for it
|
|
993
|
+
# (`full_gate.value=true`). `rust_io` is the Rust io specs
|
|
913
994
|
# `ci-rust-io.yml` runs in its `rspec_rust_io` job, for a push that wants their answer first; no
|
|
914
995
|
# hook or workflow runs it. `ci` is the checks `ci-checks.yml` runs, each step with
|
|
915
|
-
# `hecks gate_run.gate stage=ci only=<ids> --wait`; several of them write generated files and
|
|
996
|
+
# `hecks gate_run.gate! stage=ci only=<ids> --wait`; several of them write generated files and
|
|
916
997
|
# compare, so the stage is not meant to run whole in one checkout.
|
|
917
998
|
value_object "GateStage" do
|
|
918
999
|
attribute :name, String
|
|
919
1000
|
attribute :env, String
|
|
920
1001
|
attribute :checks, String
|
|
921
1002
|
|
|
922
|
-
member name: "pre_push", env: "HECKS_ENVIRONMENT=memory HECKS_PROCESS_SPECS=1", checks: "
|
|
923
|
-
member name: "
|
|
924
|
-
member name: "
|
|
1003
|
+
member name: "pre_push", env: "HECKS_ENVIRONMENT=memory HECKS_PROCESS_SPECS=1", checks: "fuzzing,query_agreement,engine_agreement,shape_ledger,model_check,doc_coverage,rubocop,codegen_drift,comment_style,comment_blocks,rust_fmt"
|
|
1004
|
+
member name: "ci_suite", env: "HECKS_ENVIRONMENT=memory HECKS_PROCESS_SPECS=1", checks: "rspec"
|
|
1005
|
+
member name: "quick", env: "HECKS_ENVIRONMENT=memory", checks: "shape_ledger,rubocop,comment_style,comment_blocks,secret_output,adapter_words"
|
|
925
1006
|
member name: "rust_io", env: "CI=true HECKS_ENVIRONMENT=memory", checks: "rust_io"
|
|
926
|
-
member name: "ci", env: "", checks: "model_check,shape_ledger,engine_agreement,doc_coverage,rubocop,comment_style,comment_blocks,ci_codegen_drift,rust_fmt,rust_clippy,lint_deploy_recipes,
|
|
1007
|
+
member name: "ci", env: "", checks: "model_check,shape_ledger,engine_agreement,doc_coverage,rubocop,comment_style,comment_blocks,ci_codegen_drift,generated_tree,rust_fmt,rust_clippy,lint_deploy_recipes,command_names,workflow_pagination,fuzz_1_of_3,fuzz_2_of_3,fuzz_3_of_3,fuzz_sqlite_1_of_3,fuzz_sqlite_2_of_3,fuzz_sqlite_3_of_3,fuzz_postgres_1_of_2,fuzz_postgres_2_of_2,fuzz_shards,vocabulary_drift,ci_gates,ci_pipeline,tools_doc,rust_coverage,rust_coverage_codegen,kernel_coverage,rust_vocabulary_drift"
|
|
1008
|
+
end
|
|
1009
|
+
|
|
1010
|
+
# What a push rehearsal runs, as data `GitRehearsal::Stages` reads. A `RehearsalStage` is one
|
|
1011
|
+
# step: `kind` is `gate` (the `GateStage` named by `argument` runs) or `impacted` (the specs
|
|
1012
|
+
# the push's changes touch, capped by the local spec limit). A `RehearsalScope` lists, in the order they run, the steps a rehearsal of
|
|
1013
|
+
# that scope runs. `quick` is what a landing asks for and the train's push gate; `deep` adds the
|
|
1014
|
+
# impacted specs and runs only when asked for (`scope.value=deep`). Owner decision: the full
|
|
1015
|
+
# spec suite runs only in CI, so no scope runs it and only `deep` runs any impacted specs.
|
|
1016
|
+
value_object "RehearsalStage" do
|
|
1017
|
+
attribute :name, String
|
|
1018
|
+
attribute :kind, String
|
|
1019
|
+
attribute :argument, String
|
|
1020
|
+
|
|
1021
|
+
member name: "quick", kind: "gate", argument: "quick"
|
|
1022
|
+
member name: "impacted", kind: "impacted", argument: ""
|
|
1023
|
+
end
|
|
1024
|
+
|
|
1025
|
+
value_object "RehearsalScope" do
|
|
1026
|
+
attribute :name, String
|
|
1027
|
+
attribute :stages, String
|
|
1028
|
+
|
|
1029
|
+
member name: "quick", stages: "quick"
|
|
1030
|
+
member name: "deep", stages: "quick,impacted"
|
|
927
1031
|
end
|
|
928
1032
|
|
|
929
1033
|
# The checks a commit must have passed before a `Promotion` moves it onto a guarded lane. Each
|
|
930
1034
|
# is the name of a job in .github/workflows that reports to a commit as a check run; a check
|
|
931
|
-
# that a path gate skipped reports `skipped`, which counts as passed. `hecks promote
|
|
1035
|
+
# that a path gate skipped reports `skipped`, which counts as passed. `hecks PromotionRun.promote!` reads
|
|
932
1036
|
# these rows, and hecks project_lanes writes them into the ruleset of any lane that requires
|
|
933
1037
|
# them, so the list lives here and nowhere else.
|
|
934
1038
|
#
|
|
@@ -953,7 +1057,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
953
1057
|
# The branches a change travels along. `main` takes pushes with no gate; `stable` takes only
|
|
954
1058
|
# what a `Promotion` moves onto it once every `CiGate` check is green on that commit.
|
|
955
1059
|
# hecks project_lanes writes each row's ruleset into .github/rulesets/<name>.json, and
|
|
956
|
-
# `hecks promote
|
|
1060
|
+
# `hecks PromotionRun.promote!` reads `follows` to know which lane a promotion fast-forwards.
|
|
957
1061
|
#
|
|
958
1062
|
# `guarded` says whether a ruleset restricts the branch. `pushers` says what it takes: `anyone`
|
|
959
1063
|
# (any commit), or `green` (only a commit on which every `RequiredCheck` has already passed,
|
|
@@ -981,7 +1085,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
981
1085
|
end
|
|
982
1086
|
|
|
983
1087
|
# A binary hecks builds once per change to its crate and publishes, so a client that needs the
|
|
984
|
-
# same binary downloads it instead of compiling it (ADR 0110). `hecks regeneration_run.project_lanes
|
|
1088
|
+
# same binary downloads it instead of compiling it (ADR 0110). `hecks regeneration_run.project_lanes!`
|
|
985
1089
|
# writes .github/workflows/publish-<name>.yml from each row; `Hecks::RustBuild::PrebuiltBinary`
|
|
986
1090
|
# reads the same rows to name what to download.
|
|
987
1091
|
#
|
|
@@ -1021,7 +1125,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
1021
1125
|
member name: "cadence_seconds", type: "Integer",
|
|
1022
1126
|
meaning: "Minimum gap in seconds between one tick's report and the next dispatch; 0 is immediately. Read by the `/loop hecks_qa` caller, not by any script."
|
|
1023
1127
|
member name: "pr_cap_per_day", type: "Integer",
|
|
1024
|
-
meaning: "Most PRs (Patch plus Improvement) `hecks quality_control
|
|
1128
|
+
meaning: "Most PRs (Patch plus Improvement) `hecks quality_control Patch.open!` opens per calendar day; 0 is uncapped."
|
|
1025
1129
|
member name: "widening_tiers", type: "Array",
|
|
1026
1130
|
meaning: "Fuzz depth by `Target.clean_streak`, in three discrete tiers, read by `SweepDepth.for_streak`. The last row (`upto: Float::INFINITY`) is the ceiling."
|
|
1027
1131
|
member name: "sweep_max_parallel", type: "Integer",
|
|
@@ -1029,9 +1133,9 @@ Hecks.bluebook "Bluebook" do
|
|
|
1029
1133
|
member name: "liveness_fallback_seconds", type: "Integer",
|
|
1030
1134
|
meaning: "How long the `/loop hecks_qa` caller waits for a tick's report before assuming it stalled."
|
|
1031
1135
|
member name: "draft_only", type: "Boolean",
|
|
1032
|
-
meaning: "Whether `hecks quality_control
|
|
1136
|
+
meaning: "Whether `hecks quality_control Patch.open!` opens its PR as a draft; false opens it ready for review."
|
|
1033
1137
|
member name: "auto_merge", type: "Boolean",
|
|
1034
|
-
meaning: "Whether `hecks quality_control
|
|
1138
|
+
meaning: "Whether `hecks quality_control Patch.open!` queues the PR for auto-merge once it is open."
|
|
1035
1139
|
member name: "adversarial_fraction", type: "Numeric",
|
|
1036
1140
|
meaning: "Fraction (0.0..1.0) of generated command steps mutated adversarially; 0 turns the layer off. Higher finds refusal-ordering splits sooner but reaches deep state less often."
|
|
1037
1141
|
member name: "guided_generation", type: "Boolean",
|
|
@@ -1076,6 +1180,18 @@ Hecks.bluebook "Bluebook" do
|
|
|
1076
1180
|
meaning: "Mutants that behave the same as the original code, by the name `cargo mutants --list` gives them without the file and line; never run, so they cannot be reported as survivors."
|
|
1077
1181
|
member name: "structural_refusal_boundary", type: "Array",
|
|
1078
1182
|
meaning: "Construct families a skipped query verb may belong to. A skip inside the list is logged Held, one outside it Surprised. Shrink-only: spec/fuzzing/rust_gap_manifest_spec.rb fails when a family here is declared by no committed manifest."
|
|
1183
|
+
member name: "red_main_check", type: "Boolean",
|
|
1184
|
+
meaning: "Whether each `hecks quality_control sweep.tick` runs the quick gate on local main as its last finding step, logging each red check as a bug and fixing the self-contained ones; false skips the step."
|
|
1185
|
+
member name: "event_pump", type: "Boolean",
|
|
1186
|
+
meaning: "Whether each `hecks quality_control sweep.tick` runs the event pump as its last step: each attached domain's policies react to the events past their cursors, and every refusal is named. false skips the step; `hecks quality_control event_pump.pump!` runs it regardless."
|
|
1187
|
+
member name: "push_nudge", type: "Boolean",
|
|
1188
|
+
meaning: "Whether each `hecks quality_control sweep.tick` checks once whether a push of local main is due and files, revises or finishes the one `push-due` Work row; false skips the check. The thresholds are the QualityControl world's `push_nudge` setting."
|
|
1189
|
+
member name: "quiesced", type: "Boolean",
|
|
1190
|
+
meaning: "Whether each `hecks quality_control sweep.tick` runs no step at all: every step prints `quiesced: skipped <step>` and the tick exits 0, so a mint window sees a quiet ledger. The setting is read once at the start of a tick; `hecks qa_quiesce.hold!` writes a marker file every step checks as well, which a tick already running notices before its next step."
|
|
1191
|
+
member name: "main_maintenance", type: "Boolean",
|
|
1192
|
+
meaning: "Whether each `hecks quality_control sweep.tick` runs the main-maintenance chain after the main-check step: the quick gate on main, the reconcile plan, and the push through the train when origin is behind. false skips the chain."
|
|
1193
|
+
member name: "maintenance_confirm", type: "Boolean",
|
|
1194
|
+
meaning: "Whether the main-maintenance chain's reconcile writes after its plan (`Era.Reconcile` with confirm); false leaves the reconcile a dry run that writes nothing."
|
|
1079
1195
|
end
|
|
1080
1196
|
|
|
1081
1197
|
# What each retired `bin/` script became in hecks 3.0.0 (ADR 0080, section 7): one row per
|
|
@@ -1129,7 +1245,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
1129
1245
|
member script: "heki_compact", section: "Custodian", aggregate: "Era", verb: "compact_heki"
|
|
1130
1246
|
member script: "vendor_bluebook", section: "Custodian", aggregate: "Package", verb: "vendor", note: "waits: a refusal exits 1 with its reason on stderr"
|
|
1131
1247
|
member script: "project_cli", section: "Custodian", aggregate: "Launch", verb: "project_cli"
|
|
1132
|
-
member script: "hecks_mcp_door", section: "Custodian", aggregate: "
|
|
1248
|
+
member script: "hecks_mcp_door", section: "Custodian", aggregate: "Server", verb: "serve_mcp"
|
|
1133
1249
|
member script: "project_rust", section: "Custodian", aggregate: "Build", verb: "project_rust"
|
|
1134
1250
|
member script: "project_wasm", section: "Custodian", aggregate: "Build", verb: "build_wasm"
|
|
1135
1251
|
member script: "project_host", section: "Custodian", aggregate: "Build", verb: "build_host"
|
|
@@ -1188,6 +1304,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
1188
1304
|
member script: "canonicalise", section: "Codebase", aggregate: "StyleRun", verb: "canonicalise"
|
|
1189
1305
|
member script: "codemod_hoist_local_givens", section: "Codebase", aggregate: "CodemodRun", verb: "hoist_local_givens"
|
|
1190
1306
|
member script: "codemod_implicit_append_fields", section: "Codebase", aggregate: "CodemodRun", verb: "drop_implicit_append_fields"
|
|
1307
|
+
member script: "codemod_move_former_name", section: "Codebase", aggregate: "CodemodRun", verb: "move_former_name"
|
|
1191
1308
|
member script: "rspec_shard_files", section: "Codebase", aggregate: "TestSuiteRun", verb: "shard_specs"
|
|
1192
1309
|
member script: "rspec_io_parallel_files", section: "Codebase", aggregate: "TestSuiteRun", verb: "list_io_parallel_specs"
|
|
1193
1310
|
member script: "rspec_io_parallel_files", section: "Codebase", aggregate: "TestSuiteRun", verb: "write_io_parallel_spec_list"
|
|
@@ -1203,12 +1320,13 @@ Hecks.bluebook "Bluebook" do
|
|
|
1203
1320
|
member script: "query_ir", section: "Codebase", aggregate: "CorpusRun", verb: "ir_constructs"
|
|
1204
1321
|
member script: "query_ir", section: "Codebase", aggregate: "CorpusRun", verb: "ir_duplicates"
|
|
1205
1322
|
member script: "query_ir", section: "Codebase", aggregate: "CorpusRun", verb: "ir_impact"
|
|
1206
|
-
member script: "hecks_query_ir_mcp", section: "Codebase", aggregate: "
|
|
1207
|
-
member script: "present", section: "Codebase", aggregate: "
|
|
1323
|
+
member script: "hecks_query_ir_mcp", section: "Codebase", aggregate: "Server", verb: "serve_query_ir_mcp"
|
|
1324
|
+
member script: "present", section: "Codebase", aggregate: "Server", verb: "present"
|
|
1208
1325
|
member script: "release", section: "Codebase", aggregate: "PublishingRun", verb: "publish", note: "without --confirm, the old --dry-run"
|
|
1209
1326
|
member script: "release_gem", section: "Codebase", aggregate: "PublishingRun", verb: "publish_gem"
|
|
1210
1327
|
member script: "(new)", section: "Codebase", aggregate: "GateRun", verb: "gate"
|
|
1211
1328
|
member script: "qa_tick", section: "QualityControl", aggregate: "Sweep", verb: "tick"
|
|
1329
|
+
member script: "qa_event_pump", section: "QualityControl", aggregate: "EventPump", verb: "pump"
|
|
1212
1330
|
member script: "qa_sweep", section: "QualityControl", aggregate: "Sweep", verb: "run", passes: "--all --seeds N --steps N --adversarial F --role-draw F --dry-run F --self-consistency BOOL --modes a,b --persistence-parity --no-parity"
|
|
1213
1331
|
member script: "qa_sweep", section: "QualityControl", aggregate: "Target", verb: "release"
|
|
1214
1332
|
member script: "qa_pr_check", section: "QualityControl", aggregate: "Clearance", verb: "check_pull_requests"
|
|
@@ -1224,6 +1342,8 @@ Hecks.bluebook "Bluebook" do
|
|
|
1224
1342
|
member script: "qa_discover_external_domains", section: "QualityControl", aggregate: "Target", verb: "discover_external_domains", passes: "--projects-dir ~/Projects --max-depth 3 --known-path PATH …"
|
|
1225
1343
|
member script: "qa_postgres_migrate", section: "QualityControl", aggregate: "Sweep", verb: "migrate_ledger_from_heki", passes: "[aggregate …] --force", note: "a dry run without --force"
|
|
1226
1344
|
member script: "qa_postgres_role", section: "QualityControl", aggregate: "Sweep", verb: "create_ledger_role"
|
|
1345
|
+
member script: "qa_main_gate", section: "QualityControl", aggregate: "MainCheck", verb: "check_main"
|
|
1346
|
+
member script: "qa_fix_main_bug", section: "QualityControl", aggregate: "Bug", verb: "fix_and_land", passes: "--bug BUG#n"
|
|
1227
1347
|
member script: "qa_concurrency_racer", section: "QualityControl", aggregate: "Sweep", verb: "race", note: "not user-facing; ProcessPool starts it"
|
|
1228
1348
|
end
|
|
1229
1349
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
Hecks.bluebook "Hecksagon" do
|
|
2
2
|
aggregate "DomainPort" do
|
|
3
3
|
description "A primary port — the boundary between a domain and its adapters, in hexagonal terms, is exactly what a hecksagon already IS for every other port. Root-level (belongs to the bluebook) or aggregate-scoped (reached the same way persisted_by is, through the open Const.verb(...) entry point). One of two shapes, never both: a list of operations translating an inbound fact into this domain's own events, or a bare verb naming a swappable resource port (the same Hecks.port a project's own .port file declares, reached from inside the hecksagon instead)."
|
|
4
|
+
acknowledges :no_command_surface, "a port is declared on the hecksagon and exposes translations; the commands they trigger do the changing"
|
|
4
5
|
|
|
5
6
|
identified_by PortName, as: :name
|
|
6
7
|
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
Hecks.bluebook "Hecksagon" do
|
|
2
2
|
aggregate "PortOperation" do
|
|
3
3
|
description "One operation a port exposes — the same shape a command's payload has (attributes in, an event out) with none of a command's given/ensures/sets : a port operation is the translation boundary itself, not a second place business rules live. Those stay on whichever command a policy triggers in reaction to the event it emits."
|
|
4
|
+
acknowledges :no_command_surface, "a port operation is the translation boundary itself; the command a policy triggers carries any change"
|
|
4
5
|
|
|
5
6
|
identified_by OperationName, as: :name
|
|
6
7
|
|
|
7
8
|
attribute :attributes, list_of(PortOperationField)
|
|
8
9
|
attribute :emits, list_of(EmittedEvent)
|
|
10
|
+
# Which value of which command this operation handles, declared beside the port that serves it.
|
|
11
|
+
# Recorded here only: nothing routes on it until the dispatch step reads it.
|
|
12
|
+
attribute :handles, list_of(CommandValueHandling)
|
|
9
13
|
|
|
10
14
|
# The two endings of an `asks`: what the adapter answered, or what it refused with.
|
|
11
15
|
# Singular because an ask has exactly one of each; empty on every `tells`, so no invariant.
|
|
@@ -27,6 +31,13 @@ Hecks.bluebook "Hecksagon" do
|
|
|
27
31
|
invariant("an emitted event is named") { !value.to_s.empty? }
|
|
28
32
|
end
|
|
29
33
|
|
|
34
|
+
value_object "CommandValueHandling" do
|
|
35
|
+
attribute :command, String
|
|
36
|
+
attribute :value, String
|
|
37
|
+
invariant("a handled command is named") { !command.to_s.empty? }
|
|
38
|
+
invariant("a handled value is named") { !value.to_s.empty? }
|
|
39
|
+
end
|
|
40
|
+
|
|
30
41
|
value_object "AnsweringEvent" do
|
|
31
42
|
attribute :value, String
|
|
32
43
|
end
|
|
@@ -53,6 +64,7 @@ Hecks.bluebook "Hecksagon" do
|
|
|
53
64
|
member word: "emits", context: "PortOperation", body: "none", inner: "", opens: "", fills: "emits"
|
|
54
65
|
member word: "answers", context: "PortOperation", body: "none", inner: "", opens: "", fills: "answers"
|
|
55
66
|
member word: "refuses", context: "PortOperation", body: "none", inner: "", opens: "", fills: "refuses"
|
|
67
|
+
member word: "handles", context: "PortOperation", body: "none", inner: "", opens: "", fills: "handles", calls: "handles_impl"
|
|
56
68
|
|
|
57
69
|
end
|
|
58
70
|
|
|
@@ -86,6 +98,8 @@ Hecks.bluebook "Hecksagon" do
|
|
|
86
98
|
member keyword: "emits", context: "PortOperation", at: "1", named: "", kind: "text", required: "true", fills: "emits"
|
|
87
99
|
member keyword: "answers", context: "PortOperation", at: "1", named: "", kind: "text", required: "true", fills: "answers"
|
|
88
100
|
member keyword: "refuses", context: "PortOperation", at: "1", named: "", kind: "text", required: "true", fills: "refuses"
|
|
101
|
+
member keyword: "handles", context: "PortOperation", at: "1", named: "", kind: "text", required: "true", fills: "command"
|
|
102
|
+
member keyword: "handles", context: "PortOperation", at: "", named: "value", kind: "text", required: "true", fills: "value"
|
|
89
103
|
|
|
90
104
|
end
|
|
91
105
|
end
|