hecks 6.0.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/exe/hecks +19 -12
- data/lib/hecks/adapters/driven/claude_code.rb +2 -2
- data/lib/hecks/adapters/driven/folder.rb +10 -1
- data/lib/hecks/adapters/driven/folder_overlay.rb +15 -0
- data/lib/hecks/adapters/driven/heki.rb +1 -1
- data/lib/hecks/adapters/driven/in_process_key_vault.rb +1 -1
- data/lib/hecks/adapters/driven/memory/outbox_rows.rb +2 -2
- data/lib/hecks/adapters/driven/postgres/name_guard.rb +25 -0
- data/lib/hecks/adapters/driven/postgres/outbox.rb +3 -3
- data/lib/hecks/adapters/driven/postgres/repository.rb +1 -1
- data/lib/hecks/adapters/driven/postgres/shared_connection.rb +1 -1
- data/lib/hecks/adapters/driven/postgres.rb +3 -0
- data/lib/hecks/adapters/driven/postgres_era/boot.rb +28 -16
- data/lib/hecks/adapters/driven/postgres_era/class_methods.rb +27 -7
- data/lib/hecks/adapters/driven/postgres_era/dialect.rb +10 -5
- data/lib/hecks/adapters/driven/postgres_era/field_cache_provisioner.rb +39 -0
- data/lib/hecks/adapters/driven/postgres_era/journal.rb +52 -13
- data/lib/hecks/adapters/driven/postgres_era/lineage/chain_sql.rb +29 -49
- data/lib/hecks/adapters/driven/postgres_era/lineage/direct_sql.rb +73 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/direct_verified.json +10 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/direct_verified.rb +65 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/domain_rename.rb +77 -25
- data/lib/hecks/adapters/driven/postgres_era/lineage/domain_rename_state.rb +108 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/era_integrity.rb +11 -6
- data/lib/hecks/adapters/driven/postgres_era/lineage/era_store.rb +63 -5
- data/lib/hecks/adapters/driven/postgres_era/lineage/layered_sql.rb +64 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/ledger_reset.rb +150 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/mint_provisioning.rb +85 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/mint_transaction.rb +11 -7
- data/lib/hecks/adapters/driven/postgres_era/lineage/provisioning.rb +11 -5
- data/lib/hecks/adapters/driven/postgres_era/lineage/split_sql.rb +76 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/sql_templates.rb +9 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage.rb +10 -2
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/context.rb +23 -3
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/coverage_check.rb +3 -1
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/disposable_ledger.rb +119 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/era_resolution.rb +219 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/era_resolver.rb +68 -71
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/held_era.rb +68 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/ledger_change.rb +63 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/merge_coordinator.rb +1 -1
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/mint_decision.rb +163 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/mint_request.rb +24 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/minter.rb +59 -21
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/refusals.rb +24 -11
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager.rb +40 -6
- data/lib/hecks/adapters/driven/postgres_era/shared_tables.rb +32 -0
- data/lib/hecks/adapters/driven/postgres_era.adapter +12 -0
- data/lib/hecks/adapters/driven/postgres_era.rb +25 -10
- data/lib/hecks/adapters/driven/prism.rb +0 -1
- data/lib/hecks/adapters/driven/sql_query_builder.rb +1 -0
- data/lib/hecks/adapters/driven/sqlite/dispatch_claims.rb +1 -1
- data/lib/hecks/adapters/driven/sqlite/name_guard.rb +25 -0
- data/lib/hecks/adapters/driven/sqlite/outbox.rb +2 -2
- data/lib/hecks/adapters/driven/sqlite/repository.rb +1 -1
- data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +20 -0
- data/lib/hecks/adapters/driven/sqlite.rb +9 -1
- data/lib/hecks/adapters/driven/tenant_provisioner.rb +1 -1
- data/lib/hecks/adapters/driven/worktree_overlay.rb +117 -0
- data/lib/hecks/adapters/driving/cli/shorthand.rb +5 -1
- data/lib/hecks/adapters/driving/cli.rb +1 -1
- data/lib/hecks/adapters/driving/cli_runner/answers.rb +77 -22
- data/lib/hecks/adapters/driving/cli_runner/bang_rule.rb +35 -0
- data/lib/hecks/adapters/driving/cli_runner/completion_words.rb +36 -0
- data/lib/hecks/adapters/driving/cli_runner/json_words.rb +55 -0
- data/lib/hecks/adapters/driving/cli_runner/name_index.rb +63 -0
- data/lib/hecks/adapters/driving/cli_runner/read_context.rb +32 -0
- data/lib/hecks/adapters/driving/cli_runner/renamed_names.rb +49 -0
- data/lib/hecks/adapters/driving/cli_runner/resolution.rb +43 -17
- data/lib/hecks/adapters/driving/cli_runner/resume_words.rb +63 -0
- data/lib/hecks/adapters/driving/cli_runner/run_reference.rb +66 -0
- data/lib/hecks/adapters/driving/cli_runner/run_replay.rb +118 -0
- data/lib/hecks/adapters/driving/cli_runner/search_words.rb +35 -0
- data/lib/hecks/adapters/driving/cli_runner/settling.rb +6 -5
- data/lib/hecks/adapters/driving/cli_runner/streaming.rb +11 -10
- data/lib/hecks/adapters/driving/cli_runner/suggestions.rb +1 -1
- data/lib/hecks/adapters/driving/cli_runner/tour_words.rb +77 -0
- data/lib/hecks/adapters/driving/cli_runner/verb_names.rb +36 -4
- data/lib/hecks/adapters/driving/cli_runner/verbosity.rb +75 -0
- data/lib/hecks/adapters/driving/cli_runner.rb +106 -7
- data/lib/hecks/adapters/driving/context_line.rb +85 -0
- data/lib/hecks/adapters/driving/exit_status.rb +31 -0
- data/lib/hecks/adapters/driving/launcher_options.rb +7 -5
- data/lib/hecks/adapters/driving/mcp/progress_sink.rb +45 -0
- data/lib/hecks/adapters/driving/mcp/tool_calls.rb +7 -5
- data/lib/hecks/adapters/driving/mcp.rb +25 -5
- data/lib/hecks/adapters/driving/mcp_scope/argument_policy.rb +40 -7
- data/lib/hecks/adapters/driving/mcp_scope.rb +8 -7
- data/lib/hecks/adapters/driving/ruby/aggregate_module/hooks.rb +154 -0
- data/lib/hecks/adapters/driving/ruby/aggregate_module.rb +64 -93
- data/lib/hecks/adapters/driving/usage_log.rb +146 -0
- data/lib/hecks/adapters/driving/write_guard.rb +55 -0
- data/lib/hecks/adapters/driving.rb +0 -1
- data/lib/hecks/behaviors/dsl.rb +5 -1
- data/lib/hecks/behaviors/expectations/boot.rb +0 -1
- data/lib/hecks/bluebook/acknowledgements.rb +1 -1
- data/lib/hecks/bluebook/aggregate.rb +21 -18
- data/lib/hecks/bluebook/assembly/contracts/sagas.rb +2 -0
- data/lib/hecks/bluebook/assembly/contracts/structure.rb +18 -13
- data/lib/hecks/bluebook/behaviour/aggregate.rb +27 -3
- data/lib/hecks/bluebook/command.rb +16 -5
- data/lib/hecks/bluebook/declaration.rb +32 -4
- data/lib/hecks/bluebook/domain_port.rb +7 -3
- data/lib/hecks/bluebook/dsl/aggregate_builder/relationships.rb +0 -2
- data/lib/hecks/bluebook/dsl/aggregate_builder/renaming.rb +25 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder.rb +3 -0
- data/lib/hecks/bluebook/dsl/attribute_collector.rb +0 -1
- data/lib/hecks/bluebook/dsl/audience_word.rb +40 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/metadata.rb +56 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/modules.rb +80 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/correlation_keys.rb +51 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation.rb +1 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +17 -34
- data/lib/hecks/bluebook/dsl/bootstrap_table.rb +8 -0
- data/lib/hecks/bluebook/dsl/command_builder.rb +13 -3
- data/lib/hecks/bluebook/dsl/entity_builder.rb +0 -2
- data/lib/hecks/bluebook/dsl/generic_dispatch.rb +6 -4
- data/lib/hecks/bluebook/dsl/kinds.rb +53 -0
- data/lib/hecks/bluebook/dsl/port_operation_builder.rb +9 -2
- data/lib/hecks/bluebook/dsl/process_manager_builder.rb +25 -15
- data/lib/hecks/bluebook/dsl/translation_builder.rb +16 -1
- data/lib/hecks/bluebook/dsl/word_gate.rb +1 -1
- data/lib/hecks/bluebook/dsl.rb +1 -0
- data/lib/hecks/bluebook/meta_validator/judge/identity.rb +9 -4
- data/lib/hecks/bluebook/meta_validator/plan/category.rb +10 -2
- data/lib/hecks/bluebook/meta_validator/plan/verbs.rb +9 -0
- data/lib/hecks/bluebook/meta_validator/plan.rb +2 -1
- data/lib/hecks/bluebook/meta_validator/reconstruction/heads.rb +3 -1
- data/lib/hecks/bluebook/meta_validator/reconstruction/reading.rb +7 -0
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +7 -2
- data/lib/hecks/bluebook/meta_validator/shapes.rb +3 -0
- data/lib/hecks/bluebook/meta_validator/syntax_boot/disk_cache.rb +1 -1
- data/lib/hecks/bluebook/model_check/aggregate_checks.rb +27 -0
- data/lib/hecks/bluebook/model_check/ask_checks.rb +25 -0
- data/lib/hecks/bluebook/model_check/reaction_chains.rb +114 -0
- data/lib/hecks/bluebook/model_check/reaction_cycles.rb +53 -0
- data/lib/hecks/bluebook/model_check/reaction_depth_checks.rb +58 -0
- data/lib/hecks/bluebook/model_check/reaction_walk.rb +62 -0
- data/lib/hecks/bluebook/model_check.rb +5 -27
- data/lib/hecks/bluebook/process_manager.rb +20 -3
- data/lib/hecks/bluebook/translation.rb +5 -3
- data/lib/hecks/bluebook/translation_plan.rb +9 -2
- data/lib/hecks/ci_pipeline/adapters/ci_cache.adapter +7 -0
- data/lib/hecks/ci_pipeline/adapters/ci_cache.rb +39 -0
- data/lib/hecks/ci_pipeline/adapters/ci_runner.adapter +7 -0
- data/lib/hecks/ci_pipeline/adapters/ci_runner.rb +55 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.behaviors +322 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.bluebook +938 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.hecksagon +12 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.ports.hecksagon +16 -0
- data/lib/hecks/ci_speed/adapters/ci_reader.adapter +7 -0
- data/lib/hecks/ci_speed/adapters/ci_reader.rb +141 -0
- data/lib/hecks/ci_speed/adapters/local_runner/answer.rb +41 -0
- data/lib/hecks/ci_speed/adapters/local_runner/catalog.rb +89 -0
- data/lib/hecks/ci_speed/adapters/local_runner/checkouts.rb +89 -0
- data/lib/hecks/ci_speed/adapters/local_runner/launcher.rb +69 -0
- data/lib/hecks/ci_speed/adapters/local_runner/load_average.rb +38 -0
- data/lib/hecks/ci_speed/adapters/local_runner/refs.rb +39 -0
- data/lib/hecks/ci_speed/adapters/local_runner/refused.rb +11 -0
- data/lib/hecks/ci_speed/adapters/local_runner/verdict.rb +71 -0
- data/lib/hecks/ci_speed/adapters/local_runner.adapter +7 -0
- data/lib/hecks/ci_speed/adapters/local_runner.rb +168 -0
- data/lib/hecks/ci_speed/adapters/replayed_runner.rb +39 -0
- data/lib/hecks/ci_speed/ci_speed.behaviors +341 -0
- data/lib/hecks/ci_speed/ci_speed.bluebook +1073 -0
- data/lib/hecks/ci_speed/ci_speed.hecksagon +11 -0
- data/lib/hecks/ci_speed/ci_speed.ports.hecksagon +21 -0
- data/lib/hecks/ci_workflows/ci_workflows.behaviors +13 -0
- data/lib/hecks/ci_workflows/ci_workflows.bluebook +173 -0
- data/lib/hecks/ci_workflows/ci_workflows.hecksagon +15 -0
- data/lib/hecks/coder/coder.bluebook +385 -0
- data/lib/hecks/coder/coder.hecksagon +12 -0
- data/lib/hecks/command_names/check.rb +39 -0
- data/lib/hecks/command_names/extractor.rb +67 -0
- data/lib/hecks/command_names/index.rb +40 -0
- data/lib/hecks/command_names/resolution.rb +81 -0
- data/lib/hecks/command_names/scan.rb +54 -0
- data/lib/hecks/command_names/sources.rb +73 -0
- data/lib/hecks/command_names.rb +26 -0
- data/lib/hecks/composer/jobs.rb +1 -1
- data/lib/hecks/composer/toolbox.rb +8 -1
- data/lib/hecks/corpus/generated_key.rb +205 -0
- data/lib/hecks/corpus/listing.rb +34 -0
- data/lib/hecks/corpus/rust.rb +27 -11
- data/lib/hecks/corpus/sources.rb +2 -1
- data/lib/hecks/corpus.rb +37 -42
- data/lib/hecks/deprecation.rb +23 -0
- data/lib/hecks/doc/reference/readme.rb +1 -1
- data/lib/hecks/doc/reference/rendering.rb +2 -2
- data/lib/hecks/doc/reference.rb +1 -1
- data/lib/hecks/embryonaut_bluebook/manifest.rb +1 -1
- data/lib/hecks/fixer/fixer.bluebook +240 -0
- data/lib/hecks/fixer/fixer.hecksagon +17 -0
- data/lib/hecks/framework_bluebooks.rb +32 -7
- data/lib/hecks/fuzzing/concurrent_dispatch/world_copy.rb +1 -0
- data/lib/hecks/fuzzing/isolated_boot/postgres_scratch.rb +11 -12
- data/lib/hecks/fuzzing/isolated_boot/worlds.rb +23 -5
- data/lib/hecks/fuzzing/isolated_boot.rb +1 -1
- data/lib/hecks/fuzzing/mutation/checks.rb +3 -3
- data/lib/hecks/grammar/translation.bluebook +1 -1
- data/lib/hecks/grammar/translation_rules.json +64 -0
- data/lib/hecks/hecks/adapter_words.json +7 -0
- data/lib/hecks/hecks/adapters/area_overlap.rb +156 -0
- data/lib/hecks/hecks/adapters/claude_agents.rb +8 -3
- data/lib/hecks/hecks/adapters/codebase/batch_runs.rb +60 -0
- data/lib/hecks/hecks/adapters/codebase/changed_specs.rb +52 -0
- data/lib/hecks/hecks/adapters/codebase/codemods.rb +3 -2
- data/lib/hecks/hecks/adapters/codebase/conformance.rb +14 -1
- data/lib/hecks/hecks/adapters/codebase/corpus_queries.rb +53 -0
- data/lib/hecks/hecks/adapters/codebase/generated_keys.rb +31 -0
- data/lib/hecks/hecks/adapters/codebase/impacted_specs.rb +110 -0
- data/lib/hecks/hecks/adapters/codebase/language.rb +2 -2
- data/lib/hecks/hecks/adapters/codebase/launcher_text.rb +39 -0
- data/lib/hecks/hecks/adapters/codebase/minitest_runs.rb +52 -0
- data/lib/hecks/hecks/adapters/codebase/regeneration.rb +51 -8
- data/lib/hecks/hecks/adapters/codebase/run_options.rb +35 -0
- data/lib/hecks/hecks/adapters/codebase/scripting.rb +39 -0
- data/lib/hecks/hecks/adapters/codebase/search.rb +1 -1
- data/lib/hecks/hecks/adapters/codebase/source_tree.rb +79 -51
- data/lib/hecks/hecks/adapters/codebase/spec_files/report.rb +71 -0
- data/lib/hecks/hecks/adapters/codebase/spec_files/shared_run.rb +73 -0
- data/lib/hecks/hecks/adapters/codebase/spec_files.rb +95 -0
- data/lib/hecks/hecks/adapters/codebase/test_runner.rb +53 -4
- data/lib/hecks/hecks/adapters/codebase/test_scope.rb +105 -0
- data/lib/hecks/hecks/adapters/codebase/test_suite.rb +48 -34
- data/lib/hecks/hecks/adapters/console_capture.rb +1 -1
- data/lib/hecks/hecks/adapters/cost_explorer.rb +9 -1
- data/lib/hecks/hecks/adapters/dispatching/brief_text.rb +51 -0
- data/lib/hecks/hecks/adapters/dispatching/launcher.rb +97 -0
- data/lib/hecks/hecks/adapters/dispatching/plan.rb +82 -0
- data/lib/hecks/hecks/adapters/dispatching/rows.rb +66 -0
- data/lib/hecks/hecks/adapters/dispatching/settings.rb +81 -0
- data/lib/hecks/hecks/adapters/dispatching/settler.rb +40 -0
- data/lib/hecks/hecks/adapters/dispatching.adapter +7 -0
- data/lib/hecks/hecks/adapters/dispatching.rb +93 -0
- data/lib/hecks/hecks/adapters/doctor_reading/report.rb +27 -0
- data/lib/hecks/hecks/adapters/doctor_reading.adapter +7 -0
- data/lib/hecks/hecks/adapters/doctor_reading.rb +161 -0
- data/lib/hecks/hecks/adapters/git_checkout.rb +1 -1
- data/lib/hecks/hecks/adapters/git_commit.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_commit.rb +61 -0
- data/lib/hecks/hecks/adapters/git_landing/finisher.rb +82 -0
- data/lib/hecks/hecks/adapters/git_landing/foreign_hold.rb +111 -0
- data/lib/hecks/hecks/adapters/git_landing/line.rb +171 -0
- data/lib/hecks/hecks/adapters/git_landing/lineup.rb +98 -0
- data/lib/hecks/hecks/adapters/git_landing/merger.rb +1 -1
- data/lib/hecks/hecks/adapters/git_landing/numbering.rb +54 -0
- data/lib/hecks/hecks/adapters/git_landing/rivals.rb +59 -0
- data/lib/hecks/hecks/adapters/git_landing/ticket.rb +156 -0
- data/lib/hecks/hecks/adapters/git_landing/tidy.rb +147 -0
- data/lib/hecks/hecks/adapters/git_landing/train.rb +104 -0
- data/lib/hecks/hecks/adapters/git_landing/verdict.rb +64 -0
- data/lib/hecks/hecks/adapters/git_landing/waiting.rb +120 -0
- data/lib/hecks/hecks/adapters/git_landing.rb +106 -20
- data/lib/hecks/hecks/adapters/git_main_pull.rb +99 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/bench.rb +82 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/due.rb +84 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/impacted/skips.rb +47 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/impacted/spec_run.rb +75 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/impacted.rb +181 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/line.rb +76 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/reading.rb +24 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/record.rb +146 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/spec_map/corpus.rb +25 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/spec_map/needles.rb +61 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/spec_map.rb +105 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/stages.rb +118 -0
- data/lib/hecks/hecks/adapters/git_rehearsal.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_rehearsal.rb +141 -0
- data/lib/hecks/hecks/adapters/git_train/bench.rb +15 -15
- data/lib/hecks/hecks/adapters/git_train/branch_guard.rb +62 -0
- data/lib/hecks/hecks/adapters/git_train/carriage.rb +27 -28
- data/lib/hecks/hecks/adapters/git_train/launcher_shape.rb +75 -0
- data/lib/hecks/hecks/adapters/git_train/mint_step.rb +47 -0
- data/lib/hecks/hecks/adapters/git_train/settlement.rb +167 -0
- data/lib/hecks/hecks/adapters/git_train.rb +73 -15
- data/lib/hecks/hecks/adapters/git_worktree_add.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_worktree_add.rb +68 -0
- data/lib/hecks/hecks/adapters/github_pull_requests.adapter +7 -0
- data/lib/hecks/hecks/adapters/github_pull_requests.rb +109 -0
- data/lib/hecks/hecks/adapters/host_http.rb +6 -6
- data/lib/hecks/hecks/adapters/in_process_boot.rb +10 -8
- data/lib/hecks/hecks/adapters/in_process_operations.rb +11 -17
- data/lib/hecks/hecks/adapters/in_process_undo.rb +17 -0
- data/lib/hecks/hecks/adapters/journal_store/changes.rb +13 -4
- data/lib/hecks/hecks/adapters/journal_store/edge_audit.rb +28 -15
- data/lib/hecks/hecks/adapters/journal_store/examination.rb +17 -1
- data/lib/hecks/hecks/adapters/journal_store/held_domain/renaming.rb +45 -0
- data/lib/hecks/hecks/adapters/journal_store/held_domain.rb +31 -5
- data/lib/hecks/hecks/adapters/journal_store/held_mint.rb +128 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/attestation.rb +1 -1
- data/lib/hecks/hecks/adapters/journal_store/readings/boot_status.rb +58 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/composition.rb +39 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/outcomes.rb +76 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/postgres_reader.rb +44 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/reader.rb +64 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/report.rb +102 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/sqlite_reader.rb +43 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/stores.rb +80 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/subscribers.rb +72 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/summary.rb +39 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace.rb +39 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/command_line.rb +57 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/edge_guards.rb +107 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/inspection.rb +94 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/plan.rb +66 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/report.rb +72 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/store.rb +34 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/watermark_guards.rb +86 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/world.rb +66 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan.rb +36 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/projection_audit.rb +64 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/scaffolding.rb +3 -3
- data/lib/hecks/hecks/adapters/journal_store/readings/sqlite_status/database_reading.rb +113 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/sqlite_status/read_only.rb +33 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/sqlite_status.rb +32 -0
- data/lib/hecks/hecks/adapters/journal_store/readings.rb +13 -1
- data/lib/hecks/hecks/adapters/journal_store/reconcile_report.rb +60 -0
- data/lib/hecks/hecks/adapters/journal_store/reconciliation.rb +121 -0
- data/lib/hecks/hecks/adapters/journal_store/translation_write/shape_edge.rb +59 -0
- data/lib/hecks/hecks/adapters/journal_store/translation_write.rb +123 -0
- data/lib/hecks/hecks/adapters/journal_store.rb +16 -0
- data/lib/hecks/hecks/adapters/landed_work.adapter +7 -0
- data/lib/hecks/hecks/adapters/landed_work.rb +52 -0
- data/lib/hecks/hecks/adapters/local_files.rb +6 -6
- data/lib/hecks/hecks/adapters/process_pool.rb +3 -2
- data/lib/hecks/hecks/adapters/push_size.rb +57 -0
- data/lib/hecks/hecks/adapters/qa_quiescing.adapter +7 -0
- data/lib/hecks/hecks/adapters/qa_quiescing.rb +57 -0
- data/lib/hecks/hecks/adapters/rehearsal/inquiry.rb +30 -3
- data/lib/hecks/hecks/adapters/rehearsal/memory_store.rb +63 -3
- data/lib/hecks/hecks/adapters/rehearsal/postgres_reading.rb +29 -6
- data/lib/hecks/hecks/adapters/rehearsal/subject.rb +11 -5
- data/lib/hecks/hecks/adapters/rust_toolchain.rb +10 -1
- data/lib/hecks/hecks/adapters/rust_workspace.rb +1 -1
- data/lib/hecks/hecks/adapters/settings_reading/disposable_ledger.rb +32 -0
- data/lib/hecks/hecks/adapters/settings_reading/push_nudge.rb +26 -0
- data/lib/hecks/hecks/adapters/settings_reading/stores.rb +76 -0
- data/lib/hecks/hecks/adapters/settings_reading/test_scope.rb +28 -0
- data/lib/hecks/hecks/adapters/settings_reading.rb +28 -2
- data/lib/hecks/hecks/adapters/started_work.rb +42 -0
- data/lib/hecks/hecks/adapters/terminal.rb +12 -10
- data/lib/hecks/hecks/adapters/where_reading.adapter +7 -0
- data/lib/hecks/hecks/adapters/where_reading.rb +64 -0
- data/lib/hecks/hecks/adapters/work_areas.rb +57 -0
- data/lib/hecks/hecks/adapters/work_limits.rb +57 -0
- data/lib/hecks/hecks/build/build.bluebook +576 -0
- data/lib/hecks/hecks/check/check.bluebook +966 -0
- data/lib/hecks/hecks/codebase.behaviors +61 -5
- data/lib/hecks/hecks/composer.behaviors +1 -1
- data/lib/hecks/hecks/context_map.hecksagon +1 -1
- data/lib/hecks/hecks/custodian.behaviors +33 -7
- data/lib/hecks/hecks/delegate/delegate.bluebook +355 -0
- data/lib/hecks/hecks/deliver/deliver.bluebook +945 -0
- data/lib/hecks/hecks/deploy.behaviors +1 -1
- data/lib/hecks/hecks/evolve/evolve.bluebook +788 -0
- data/lib/hecks/hecks/find/find.bluebook +81 -0
- data/lib/hecks/hecks/hecks.behaviors +1 -1
- data/lib/hecks/hecks/hecks.bluebook +0 -133
- data/lib/hecks/hecks/hecks.contextmap +2 -0
- data/lib/hecks/hecks/hecks.hecksagon +185 -29
- data/lib/hecks/hecks/hecks.world +35 -9
- data/lib/hecks/hecks/implicit_moves.json +24 -0
- data/lib/hecks/hecks/migrate/migrate.bluebook +1066 -0
- data/lib/hecks/hecks/operate/operate.bluebook +695 -0
- data/lib/hecks/hecks/quiesce/quiesce.bluebook +117 -0
- data/lib/hecks/hecks/rehearse/rehearse.bluebook +133 -0
- data/lib/hecks/hecks/release/release.bluebook +916 -0
- data/lib/hecks/hecks/serve/serve.bluebook +134 -0
- data/lib/hecks/hecks/shapes.json +1 -15
- data/lib/hecks/hecks/site.behaviors +1 -1
- data/lib/hecks/hecks/start/start.bluebook +194 -0
- data/lib/hecks/hecks/test/test.bluebook +638 -0
- data/lib/hecks/hecks/tickets.world +14 -0
- data/lib/hecks/language/bluebook/aggregate.bluebook +22 -0
- data/lib/hecks/language/bluebook/bluebook.bluebook +34 -0
- data/lib/hecks/language/bluebook/command.bluebook +35 -0
- data/lib/hecks/language/bluebook/process_manager.bluebook +14 -1
- data/lib/hecks/language/bluebook/vocabulary.bluebook +174 -54
- data/lib/hecks/language/hecksagon/domain_port.bluebook +1 -0
- data/lib/hecks/language/hecksagon/port_operation.bluebook +14 -0
- data/lib/hecks/language/kinds/run.kind +120 -0
- data/lib/hecks/language/oidc.json +10 -0
- data/lib/hecks/language/translation/translation_aggregate.bluebook +24 -0
- data/lib/hecks/module_folders.rb +31 -0
- data/lib/hecks/ports/key_vault.rb +1 -1
- data/lib/hecks/ports/persistence/append_only.rb +26 -8
- data/lib/hecks/ports/persistence/binding_policy.rb +3 -1
- data/lib/hecks/ports/persistence/codec_boundary.rb +1 -1
- data/lib/hecks/ports/persistence/mint_door.rb +74 -0
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +6 -5
- data/lib/hecks/ports/persistence/plugins/era/era_guard/shape_diff.rb +5 -1
- data/lib/hecks/ports/persistence/plugins/era/era_status.rb +48 -0
- data/lib/hecks/ports/persistence/plugins/era/projected_bluebook.rb +127 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/additive_shape.rb +107 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/compose.rb +155 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/compose_render.rb +79 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/edge_files.rb +49 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/edge_route.rb +61 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/implicit_edge.rb +67 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/reconcile.rb +130 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/reconcile_files.rb +35 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/differ.rb +13 -5
- data/lib/hecks/ports/persistence/plugins/era/translation.rb +5 -0
- data/lib/hecks/ports/persistence/plugins/era.rb +1 -0
- data/lib/hecks/ports/persistence/repository_factory.rb +11 -3
- data/lib/hecks/ports/persistence/stored_name_guard.rb +36 -0
- data/lib/hecks/ports/persistence.rb +2 -0
- data/lib/hecks/projections/ci_pipeline/table/checks.rb +137 -0
- data/lib/hecks/projections/ci_pipeline/table/lookup.rb +59 -0
- data/lib/hecks/projections/ci_pipeline/table/refusals.rb +58 -0
- data/lib/hecks/projections/ci_pipeline/table/rows.rb +119 -0
- data/lib/hecks/projections/ci_pipeline/table/tree.rb +30 -0
- data/lib/hecks/projections/ci_pipeline/table/typing.rb +92 -0
- data/lib/hecks/projections/ci_pipeline/table.rb +112 -0
- data/lib/hecks/projections/ci_pipeline/workflows.rb +162 -0
- data/lib/hecks/projections/ci_pipeline/yaml_text.rb +104 -0
- data/lib/hecks/projections/deploy/box/hosting.rb +1 -1
- data/lib/hecks/projections/deploy/box/roll_recipe.rb +1 -1
- data/lib/hecks/projections/deploy/box/roll_scripts.rb +1 -1
- data/lib/hecks/projections/deploy/box.rb +1 -1
- data/lib/hecks/projections/deploy/templates/fargate/Makefile.tmpl +1 -1
- data/lib/hecks/projections/deploy/templates/lambda/Makefile.tmpl +3 -3
- data/lib/hecks/projections/undo.rb +46 -0
- data/lib/hecks/projections.rb +2 -0
- data/lib/hecks/projector/cli_projector/claims.rb +11 -0
- data/lib/hecks/projector/cli_projector/command_help.rb +6 -1
- data/lib/hecks/projector/cli_projector/command_specs.rb +11 -1
- data/lib/hecks/projector/cli_projector/completion.rb +87 -0
- data/lib/hecks/projector/cli_projector/everyday.rb +40 -0
- data/lib/hecks/projector/cli_projector/json_listing.rb +77 -0
- data/lib/hecks/projector/cli_projector/listing.rb +1 -1
- data/lib/hecks/projector/cli_projector/modules.rb +39 -0
- data/lib/hecks/projector/cli_projector/query_specs.rb +1 -0
- data/lib/hecks/projector/cli_projector/renames.rb +58 -0
- data/lib/hecks/projector/cli_projector/search.rb +74 -0
- data/lib/hecks/projector/cli_projector/usage.rb +23 -6
- data/lib/hecks/projector/cli_projector.rb +24 -1
- data/lib/hecks/quality_control/adapters/ci_head.adapter +8 -0
- data/lib/hecks/quality_control/adapters/image_roll.adapter +9 -0
- data/lib/hecks/quality_control/adapters/image_roll.rb +158 -0
- data/lib/hecks/quality_control/adapters/main_maintenance.adapter +8 -0
- data/lib/hecks/quality_control/adapters/main_maintenance.rb +275 -0
- data/lib/hecks/quality_control/adapters/pump_tools.adapter +7 -0
- data/lib/hecks/quality_control/adapters/pump_tools.rb +18 -0
- data/lib/hecks/quality_control/adapters/push_due_reader.adapter +8 -0
- data/lib/hecks/quality_control/adapters/push_due_reader.rb +99 -0
- data/lib/hecks/quality_control/adapters/qa_auto_mint.rb +183 -0
- data/lib/hecks/quality_control/adapters/qa_era_mint.rb +94 -0
- data/lib/hecks/quality_control/adapters/qa_quiesce_marker.rb +126 -0
- data/lib/hecks/quality_control/adapters/run_keys.rb +36 -0
- data/lib/hecks/quality_control/adapters/run_reader.adapter +7 -0
- data/lib/hecks/quality_control/adapters/run_reader.rb +188 -0
- data/lib/hecks/quality_control/cli/child.rb +1 -0
- data/lib/hecks/quality_control/cli/qa_discover_external_domains/scanning.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_domain_novelty.rb +3 -3
- data/lib/hecks/quality_control/cli/qa_event_pump/attached.rb +67 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/consumer.rb +103 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/cursors.rb +60 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/reactions.rb +46 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/reader.rb +30 -0
- data/lib/hecks/quality_control/cli/qa_event_pump.rb +76 -0
- data/lib/hecks/quality_control/cli/qa_fix_main_bug/publishing.rb +79 -0
- data/lib/hecks/quality_control/cli/qa_fix_main_bug.rb +167 -0
- data/lib/hecks/quality_control/cli/qa_generated_domains/evaluation.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_generated_domains/promotion.rb +3 -3
- data/lib/hecks/quality_control/cli/qa_main_gate/gate_run.rb +52 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/logging.rb +70 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/shell.rb +47 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/sweeping.rb +59 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/worktree.rb +62 -0
- data/lib/hecks/quality_control/cli/qa_main_gate.rb +135 -0
- data/lib/hecks/quality_control/cli/qa_postgres_role.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_pr_check/checking.rb +2 -3
- data/lib/hecks/quality_control/cli/qa_push_nudge.rb +48 -0
- data/lib/hecks/quality_control/cli/qa_seed_angles/seed.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_sweep/seat.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_tick/event_pump_step.rb +34 -0
- data/lib/hecks/quality_control/cli/qa_tick/output.rb +16 -1
- data/lib/hecks/quality_control/cli/qa_tick/push_nudge_step.rb +28 -0
- data/lib/hecks/quality_control/cli/qa_tick/quiesce_guard.rb +51 -0
- data/lib/hecks/quality_control/cli/qa_tick.rb +36 -8
- data/lib/hecks/quality_control/quality_control.behaviors +65 -0
- data/lib/hecks/quality_control/quality_control.bluebook +1131 -11
- data/lib/hecks/quality_control/quality_control.hecksagon +11 -0
- data/lib/hecks/quality_control/quality_control.ports.hecksagon +138 -0
- data/lib/hecks/query_ir/touchpoints.rb +5 -7
- data/lib/hecks/refused.rb +21 -0
- data/lib/hecks/release/approval.rb +6 -3
- data/lib/hecks/release/conditions.rb +46 -0
- data/lib/hecks/release/runner/gem_publisher.rb +4 -4
- data/lib/hecks/release/version_commit.rb +48 -0
- data/lib/hecks/runtime/command_interpreter/hydration.rb +5 -4
- data/lib/hecks/runtime/command_interpreter/persisting.rb +11 -3
- data/lib/hecks/runtime/command_interpreter.rb +2 -2
- data/lib/hecks/runtime/command_rules/admissibility.rb +0 -2
- data/lib/hecks/runtime/command_rules/emission.rb +0 -1
- data/lib/hecks/runtime/dependency_planning/expression_reads.rb +0 -1
- data/lib/hecks/runtime/dispatcher/planning.rb +24 -0
- data/lib/hecks/runtime/dispatcher/routing.rb +6 -0
- data/lib/hecks/runtime/dispatcher/value_routing.rb +54 -0
- data/lib/hecks/runtime/dispatcher.rb +7 -1
- data/lib/hecks/runtime/dry_run_plan.rb +60 -0
- data/lib/hecks/runtime/entity_element/location.rb +0 -1
- data/lib/hecks/runtime/entity_element/mutations.rb +0 -1
- data/lib/hecks/runtime/entity_interpreter/locating.rb +5 -0
- data/lib/hecks/runtime/entity_interpreter.rb +0 -1
- data/lib/hecks/runtime/errors.rb +26 -0
- data/lib/hecks/runtime/instance.rb +0 -1
- data/lib/hecks/runtime/invocation_builder.rb +0 -1
- data/lib/hecks/runtime/outbox/consumer_runner.rb +9 -1
- data/lib/hecks/runtime/outbox/relay.rb +25 -4
- data/lib/hecks/runtime/outbox/runnable.rb +3 -1
- data/lib/hecks/runtime/outbox.rb +6 -2
- data/lib/hecks/runtime/policy_interpreter/fan_out.rb +18 -2
- data/lib/hecks/runtime/policy_interpreter.rb +17 -9
- data/lib/hecks/runtime/port_operation_interpreter.rb +21 -7
- data/lib/hecks/runtime/query_interpreter/arguments.rb +6 -5
- data/lib/hecks/runtime/reaction_invocation.rb +0 -1
- data/lib/hecks/runtime/refusal_wording.rb +12 -1
- data/lib/hecks/runtime/registry/context_maps.rb +1 -5
- data/lib/hecks/runtime/registry/declarations.rb +34 -4
- data/lib/hecks/runtime/registry/hecksagon_rules.rb +15 -1
- data/lib/hecks/runtime/registry/runtime_state.rb +10 -0
- data/lib/hecks/runtime/registry/world_defaults.rb +24 -2
- data/lib/hecks/runtime/registry/world_names.rb +99 -0
- data/lib/hecks/runtime/registry.rb +33 -27
- data/lib/hecks/runtime/saga_interpreter/compensation.rb +10 -0
- data/lib/hecks/runtime/saga_interpreter/correlation.rb +29 -3
- data/lib/hecks/runtime/saga_interpreter/delivery.rb +0 -1
- data/lib/hecks/runtime/saga_interpreter/lifecycle.rb +1 -1
- data/lib/hecks/runtime/saga_interpreter.rb +46 -2
- data/lib/hecks/runtime/value/coercion.rb +36 -8
- data/lib/hecks/rust_build/conformance.rb +16 -5
- data/lib/hecks/rust_build/parser.rb +25 -0
- data/lib/hecks/rust_build/project_rust/codegen_run.rb +45 -12
- data/lib/hecks/rust_build/project_rust/declared.rb +80 -0
- data/lib/hecks/rust_build/project_rust/features_header.rb +22 -0
- data/lib/hecks/rust_build/project_rust/manifest.rb +96 -0
- data/lib/hecks/rust_build/project_rust/meta.rb +36 -0
- data/lib/hecks/rust_build/project_rust.rb +28 -90
- data/lib/hecks/rust_build/write_if_changed.rb +19 -4
- data/lib/hecks/rust_build.rb +2 -1
- data/lib/hecks/rust_format.rb +32 -2
- data/lib/hecks/secrets.rb +111 -0
- data/lib/hecks/shape_ledger/edge_hygiene.rb +170 -0
- data/lib/hecks/shape_ledger/scope.rb +51 -0
- data/lib/hecks/shape_ledger/status.rb +89 -0
- data/lib/hecks/shape_ledger.rb +78 -33
- data/lib/hecks/site/bluebook/site.bluebook +1 -0
- data/lib/hecks/storehouse/audit.rb +34 -4
- data/lib/hecks/storehouse/callers.rb +8 -0
- data/lib/hecks/storehouse/dispatching.rb +14 -3
- data/lib/hecks/storehouse/identity.rb +41 -0
- data/lib/hecks/storehouse/querying.rb +7 -7
- data/lib/hecks/storehouse.rb +28 -10
- data/lib/hecks/tickets/bluebook/adapters/work_areas.adapter +7 -0
- data/lib/hecks/tickets/bluebook/adapters/work_limits.adapter +7 -0
- data/lib/hecks/tickets/bluebook/tickets.behaviors +70 -0
- data/lib/hecks/tickets/bluebook/tickets.bluebook +323 -28
- data/lib/hecks/tickets/bluebook/tickets.hecksagon +7 -0
- data/lib/hecks/tickets/bluebook/tickets.ports.hecksagon +17 -0
- data/lib/hecks/{cli → tools}/behaviors.rb +1 -1
- data/lib/hecks/{cli → tools}/canonicalise.rb +1 -1
- data/lib/hecks/{cli → tools}/check_engine_agreement.rb +1 -1
- data/lib/hecks/{cli → tools}/check_era.rb +6 -6
- data/lib/hecks/tools/ci_gates.rb +8 -2
- data/lib/hecks/tools/ci_workflows.rb +98 -0
- data/lib/hecks/{cli → tools}/console.rb +1 -1
- data/lib/hecks/{cli → tools}/deploy_template_diff.rb +1 -1
- data/lib/hecks/{cli → tools}/doc_coverage.rb +2 -2
- data/lib/hecks/{cli → tools}/document.rb +1 -1
- data/lib/hecks/{cli → tools}/domain_stub.rb +1 -1
- data/lib/hecks/{cli → tools}/domain_writer.rb +1 -1
- data/lib/hecks/tools/downstream_model_check.rb +122 -0
- data/lib/hecks/tools/evolve_run.rb +2 -2
- data/lib/hecks/{cli → tools}/expected_era.rb +1 -1
- data/lib/hecks/{cli → tools}/expression_projection.rb +1 -1
- data/lib/hecks/{cli → tools}/follow.rb +1 -1
- data/lib/hecks/tools/fuzz_sweep/options.rb +40 -5
- data/lib/hecks/tools/fuzz_sweep/pool.rb +12 -1
- data/lib/hecks/tools/fuzz_sweep/shards.rb +155 -0
- data/lib/hecks/tools/fuzz_sweep.rb +11 -5
- data/lib/hecks/tools/gate.rb +38 -29
- data/lib/hecks/tools/gate_memo/local_files.rb +33 -0
- data/lib/hecks/tools/gate_memo/rehearsal.rb +54 -0
- data/lib/hecks/tools/gate_memo/ruby_files.rb +152 -0
- data/lib/hecks/tools/gate_memo/session.rb +114 -0
- data/lib/hecks/tools/gate_memo/standalone.rb +67 -0
- data/lib/hecks/tools/gate_memo.rb +196 -0
- data/lib/hecks/tools/gate_report.rb +56 -0
- data/lib/hecks/{cli → tools}/history.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_agent.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_aggregate.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_draft.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_record.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_run.rb +2 -2
- data/lib/hecks/{cli → tools}/interview_session/agent_state.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session/catalog.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session/manual_findings.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session/proposals.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session.rb +2 -2
- data/lib/hecks/{cli → tools}/interview_shape/lifecycle.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_shape.rb +1 -1
- data/lib/hecks/{cli → tools}/ir.rb +1 -1
- data/lib/hecks/tools/lanes/files.rb +1 -1
- data/lib/hecks/tools/lanes/watch_workflow.rb +6 -8
- data/lib/hecks/tools/lanes/workflow.rb +1 -1
- data/lib/hecks/tools/lanes.rb +1 -1
- data/lib/hecks/{cli → tools}/mcp.rb +1 -1
- data/lib/hecks/{cli → tools}/model_check/examination.rb +1 -1
- data/lib/hecks/{cli → tools}/model_check/sources.rb +1 -1
- data/lib/hecks/{cli → tools}/model_check.rb +1 -1
- data/lib/hecks/tools/move_disables/reasons.rb +35 -0
- data/lib/hecks/tools/move_disables.rb +211 -0
- data/lib/hecks/tools/move_former_name.rb +105 -0
- data/lib/hecks/{cli → tools}/pattern_cases.rb +1 -1
- data/lib/hecks/{cli → tools}/persistence_notice.rb +1 -1
- data/lib/hecks/{cli → tools}/present.rb +1 -1
- data/lib/hecks/{cli → tools}/project_cli/launcher_source.rb +32 -22
- data/lib/hecks/{cli → tools}/project_cli/templates.rb +22 -15
- data/lib/hecks/{cli → tools}/project_cli.rb +11 -7
- data/lib/hecks/{cli → tools}/project_diagrams.rb +3 -3
- data/lib/hecks/{cli → tools}/project_glossary.rb +2 -2
- data/lib/hecks/{cli → tools}/reference.rb +2 -2
- data/lib/hecks/{cli → tools}/refresh_projections.rb +1 -1
- data/lib/hecks/{cli → tools}/refresh_rspec_runtime_baseline.rb +1 -1
- data/lib/hecks/tools/regeneration_run/pool.rb +148 -0
- data/lib/hecks/tools/regeneration_run/scratch.rb +76 -0
- data/lib/hecks/tools/regeneration_run.rb +125 -103
- data/lib/hecks/{cli → tools}/release.rb +1 -1
- data/lib/hecks/{cli → tools}/release_gem.rb +1 -1
- data/lib/hecks/{cli → tools}/rspec_io_parallel_files.rb +1 -1
- data/lib/hecks/{cli → tools}/rspec_shard_files.rb +1 -1
- data/lib/hecks/{cli → tools}/run.rb +9 -2
- data/lib/hecks/{cli → tools}/run_expectations.rb +1 -1
- data/lib/hecks/{cli → tools}/seed_semantics_corpus.rb +4 -4
- data/lib/hecks/{cli → tools}/serve_query_ir_mcp.rb +1 -1
- data/lib/hecks/{cli → tools}/shape.rb +3 -2
- data/lib/hecks/{cli → tools}/smoke_http/checks.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_http/settings.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_http/transport.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_http.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_test.rb +1 -1
- data/lib/hecks/{cli → tools}/spec_example.rb +1 -1
- data/lib/hecks/tools/stage_progress.rb +54 -0
- data/lib/hecks/{cli → tools}/statements.rb +1 -1
- data/lib/hecks/{cli → tools}/stores.rb +1 -1
- data/lib/hecks/{cli → tools}/stress_concurrency_specs/reporting.rb +1 -1
- data/lib/hecks/{cli → tools}/stress_concurrency_specs/usage.rb +4 -4
- data/lib/hecks/{cli → tools}/stress_concurrency_specs.rb +3 -3
- data/lib/hecks/tools/tenant_provisioning.rb +23 -0
- data/lib/hecks/tools/tools_doc.rb +10 -8
- data/lib/hecks/tools/translation_audit/edges.rb +21 -16
- data/lib/hecks/tools/translation_audit/verdicts.rb +1 -1
- data/lib/hecks/tools/translation_audit.rb +1 -1
- data/lib/hecks/tools/translation_scaffold.rb +1 -1
- data/lib/hecks/tools.rb +4 -1
- data/lib/hecks/version.rb +1 -1
- data/lib/hecks/vocabulary.rb +61 -31
- data/lib/hecks/workflow_pagination/judge.rb +48 -0
- data/lib/hecks/workflow_pagination/statement.rb +50 -0
- data/lib/hecks/workflow_pagination.rb +58 -0
- data/lib/hecks.rb +2 -0
- data/lib/rubocop/cop/hecks/bare_event_and_query_names.rb +58 -0
- data/lib/rubocop/cop/hecks/correlates_by_aggregate.rb +39 -0
- data/lib/rubocop/cop/hecks/creating_command_sets.rb +75 -0
- data/lib/rubocop/cop/hecks/invariant_expression_language.rb +47 -0
- data/lib/rubocop/cop/hecks/lifecycle_needs_attribute.rb +58 -0
- data/lib/rubocop/cop/hecks/no_id_string_attribute.rb +49 -0
- data/lib/rubocop/cop/hecks/one_terminal_mark_per_lifecycle.rb +47 -0
- data/lib/rubocop/cop/hecks/value_object_shorthand.rb +56 -0
- data/prebuilt/13c04bdc5970295b310f0a980d397ba722232c8da99cc1a0cdb383249921e871.marshal +0 -0
- data/prebuilt/e3857b77f47d9ecc1787b2e1f5136364f3cb3444ef4aea5479f3b98167affea2.marshal +0 -0
- data/qa/settings.yml +23 -0
- data/rust/.gitignore +0 -6
- data/rust/Cargo.toml +2 -1
- data/rust/build/Cargo.toml +1 -1
- data/rust/build/src/binding_pass.rs +57 -4
- data/rust/build/src/pipeline.rs +6 -4
- data/rust/build/src/resolve.rs +1 -0
- data/rust/codegen/Cargo.toml +1 -1
- data/rust/codegen/src/domain_generator.rs +3 -0
- data/rust/codegen/src/json_codec.rs +182 -23
- data/rust/codegen/src/one_of_references.rs +1 -0
- data/rust/codegen/src/queries.rs +20 -2
- data/rust/codegen/src/registry.rs +21 -5
- data/rust/expr/Cargo.toml +1 -1
- data/rust/host/Cargo.toml +1 -1
- data/rust/host/HECKS_RELEASE +1 -1
- data/rust/host/core/Cargo.toml +1 -1
- data/rust/host/src/bin/mint_harness.rs +1 -0
- data/rust/host/src/boot.rs +1 -0
- data/rust/host/src/store/mint.rs +40 -6
- data/rust/lsp/Cargo.toml +1 -1
- data/rust/parser/Cargo.toml +1 -1
- data/rust/parser/src/build/correlation_keys.rs +125 -0
- data/rust/parser/src/build/mod.rs +1 -0
- data/rust/parser/src/emit.rs +55 -3
- data/rust/parser/src/ir.rs +33 -1
- data/rust/parser/src/keywords.rs +289 -1
- data/rust/parser/src/main.rs +2 -0
- data/rust/parser/src/parse/aggregate.rs +10 -1
- data/rust/parser/src/parse/audience.rs +65 -0
- data/rust/parser/src/parse/command.rs +14 -0
- data/rust/parser/src/parse/declaration.rs +97 -0
- data/rust/parser/src/parse/domain_port.rs +6 -0
- data/rust/parser/src/parse/mod.rs +1 -0
- data/rust/parser/src/parse/process_manager.rs +17 -10
- data/rust/parser/src/parse/world.rs +12 -8
- data/rust/parser/src/render_ruby.rs +9 -0
- data/rust/parser/src/sentence/format.rs +3 -0
- data/rust/parser/src/sentence/process.rs +6 -2
- data/rust/src/exemplar/json.rs +17 -0
- data/rust/src/kernel/cli.rs +27 -3
- data/rust/src/kernel/dispatch.rs +4 -2
- data/rust/src/kernel/json.rs +62 -0
- data/rust/src/kernel/orchestrate.rs +28 -3
- data/rust/src/kernel/orchestrate_guard_tests.rs +12 -12
- data/rust/web/Cargo.toml +1 -1
- metadata +389 -96
- data/lib/hecks/cli/command_table.rb +0 -72
- data/lib/hecks/cli/launcher_words.rb +0 -168
- data/lib/hecks/cli.rb +0 -133
- data/lib/hecks/hecks/agents.bluebook +0 -246
- data/lib/hecks/hecks/codebase.bluebook +0 -3209
- data/lib/hecks/hecks/custodian.bluebook +0 -1300
- data/lib/hecks/hecks/ledger.bluebook +0 -190
- data/lib/hecks/hecks/rehearsal.bluebook +0 -437
- data/lib/hecks/hecks/tooling.bluebook +0 -1234
- data/lib/hecks/hecks/translations/2-148748.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-15a2e4.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-1b447c.bluebook +0 -5
- data/lib/hecks/hecks/translations/2-240474.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-44446d.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-46ca26.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-473eab.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-75cc28.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-781c07.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-84c18b.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-aa5fff.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-bfdb48.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-cd96d8.bluebook +0 -10
- data/lib/hecks/hecks/translations/2-d43f71.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-eea577.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-f53248.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-fbb677.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-ffdf12.bluebook +0 -6
- data/lib/hecks/quality_control/adapters/clearance_recorder.rb +0 -36
- data/lib/hecks/quality_control/adapters/github_ci_webhook.rb +0 -56
- data/prebuilt/31cf81e12f16236ad26249be590cfea3799c9db67432e6a4ef54b801c355b6ae.marshal +0 -0
- data/prebuilt/68ecb2bd3abb1a221007db4f2b0375834c13aaccac8f2b99778e8517f11aa113.marshal +0 -0
- data/prebuilt/verdicts-0328c2403383837d780ad5ed81d1da351c56436b894cf9015b5d56b8f1f1bf10.json +0 -1
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
Hecks.bluebook "Hecks" do
|
|
2
|
-
# Ledger: a journal that proves it was not rewritten. A seal records the head a journal chain has,
|
|
3
|
-
# kept beside the journal itself; an Audit recomputes the chain from the seals and compares. Compaction
|
|
4
|
-
# is the one sanctioned way rows leave a journal, so it seals first: the capture is one ask on the Era
|
|
5
|
-
# being changed (the reaction depth is bounded, so the seal cannot be a chain of its own), and a
|
|
6
|
-
# compaction whose head cannot be captured is abandoned, not applied.
|
|
7
|
-
|
|
8
|
-
aggregate "Seal" do
|
|
9
|
-
description "The head a domain's journal chain had when the rows before it were compacted away."
|
|
10
|
-
|
|
11
|
-
attribute :run, SealKey
|
|
12
|
-
attribute :domain, Domain
|
|
13
|
-
attribute :through, Ordinal
|
|
14
|
-
attribute :head, ChainDigest
|
|
15
|
-
attribute :previous, ChainDigest
|
|
16
|
-
identified_by :run
|
|
17
|
-
|
|
18
|
-
value_object "SealKey" do
|
|
19
|
-
attribute :value, String, matches: :present
|
|
20
|
-
|
|
21
|
-
invariant("a seal is named") { !value.to_s.empty? }
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# The domain whose journal is sealed: its directory.
|
|
25
|
-
value_object "Domain" do
|
|
26
|
-
attribute :value, String, matches: :not_empty
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# The last journal ordinal the seal covers.
|
|
30
|
-
value_object "Ordinal" do
|
|
31
|
-
attribute :value, Integer
|
|
32
|
-
|
|
33
|
-
invariant("a seal covers at least one row") { value > 0 }
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# A SHA-256 digest, lowercase hexadecimal.
|
|
37
|
-
value_object "ChainDigest" do
|
|
38
|
-
attribute :value, String, pattern: '^[0-9a-f]{64}$'
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# `previous` is the head of the seal before this one, so seals chain too; the first seal
|
|
42
|
-
# of a domain carries the genesis digest, sixty-four zeros.
|
|
43
|
-
command "Record" do
|
|
44
|
-
role "System"
|
|
45
|
-
goal "Keep the head the chain had, and the seal it followed"
|
|
46
|
-
|
|
47
|
-
attribute :domain, Domain, sets: true
|
|
48
|
-
attribute :run, SealKey, sets: true
|
|
49
|
-
attribute :through, Ordinal, sets: true
|
|
50
|
-
attribute :head, ChainDigest, sets: true
|
|
51
|
-
attribute :previous, ChainDigest, sets: true
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
emits SealRecorded
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
query "Latest" do
|
|
58
|
-
description "The newest seal a domain holds."
|
|
59
|
-
attribute :domain, Domain
|
|
60
|
-
where(domain: :domain)
|
|
61
|
-
order_by :through
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
aggregate "Audit" do
|
|
67
|
-
description "One walk of a domain's journal chain from its latest seal, and whether every digest held."
|
|
68
|
-
|
|
69
|
-
attribute :run, AuditKey
|
|
70
|
-
attribute :domain, AuditedDomain
|
|
71
|
-
attribute :checked, Count, optional: true
|
|
72
|
-
attribute :report, Finding, optional: true
|
|
73
|
-
identified_by :run
|
|
74
|
-
|
|
75
|
-
value_object "AuditKey" do
|
|
76
|
-
attribute :value, String, matches: :present
|
|
77
|
-
|
|
78
|
-
invariant("an audit is named") { !value.to_s.empty? }
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
value_object "AuditedDomain" do
|
|
82
|
-
attribute :value, String, matches: :not_empty
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
value_object "Count" do
|
|
86
|
-
attribute :value, Integer
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
value_object "Finding" do
|
|
90
|
-
attribute :value, String
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
lifecycle :status, default: "requested" do
|
|
94
|
-
mark :failure, "unproven"
|
|
95
|
-
transition "Confirm" => "verified", from: "requested"
|
|
96
|
-
transition "Fail" => "unproven", from: "requested"
|
|
97
|
-
mark :terminal, "unproven", "verified"
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
command "Verify" do
|
|
101
|
-
role "Auditor"
|
|
102
|
-
goal "Walk a domain's journal chain from its latest seal and say whether it was altered"
|
|
103
|
-
|
|
104
|
-
attribute :domain, AuditedDomain, sets: true
|
|
105
|
-
attribute :run, AuditKey, sets: true
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
emits VerificationRequested
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
command "Confirm" do
|
|
112
|
-
role "System"
|
|
113
|
-
goal "Record that every row's digest held, and how many were checked"
|
|
114
|
-
|
|
115
|
-
reference_to Audit
|
|
116
|
-
attribute :checked, Count, sets: true
|
|
117
|
-
attribute :report, Finding, sets: true
|
|
118
|
-
|
|
119
|
-
given("the walk checked a row") { checked.value > 0 }
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
emits ChainConfirmed
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
# A chain that cannot be shown intact is unproven, whether a digest failed or the walk could not
|
|
126
|
-
# run; the report names the row or the reason.
|
|
127
|
-
command "Fail" do
|
|
128
|
-
role "System"
|
|
129
|
-
goal "Record that the chain could not be shown intact, and why"
|
|
130
|
-
|
|
131
|
-
reference_to Audit
|
|
132
|
-
attribute :report, Finding, sets: true
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
emits ChainUnproven
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
query "Verdict" do
|
|
139
|
-
description "What one audit found."
|
|
140
|
-
attribute :run, AuditKey
|
|
141
|
-
where(run: :run)
|
|
142
|
-
order_by :run
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
query "Unproven" do
|
|
146
|
-
description "Every audit that could not show the chain intact."
|
|
147
|
-
where(status: "unproven")
|
|
148
|
-
order_by :run
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
# A compaction is applied only once the head it would erase is sealed.
|
|
153
|
-
policy "CaptureWhenCompactionPermitted" do
|
|
154
|
-
on "Era.EraPermitted"
|
|
155
|
-
where do
|
|
156
|
-
operation.value == "compact" || operation.value == "compact_heki"
|
|
157
|
-
end
|
|
158
|
-
ask :capture, with: { run: :run }
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
policy "RecordTheSeal" do
|
|
162
|
-
on "Era.HeadCaptured"
|
|
163
|
-
trigger Seal::Record, with: { run: :run, domain: :domain, through: :through, head: :head, previous: :previous }
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
policy "CompactWhenSealed" do
|
|
167
|
-
on "Era.HeadCaptured"
|
|
168
|
-
ask :apply, with: { run: :run }
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
policy "AbandonWhenNotSealed" do
|
|
172
|
-
on "Era.CaptureRefused"
|
|
173
|
-
trigger Era::Abandon, with: { refusal: :refusal }
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
policy "WalkWhenVerificationRequested" do
|
|
177
|
-
on "Audit.VerificationRequested"
|
|
178
|
-
ask :walk, with: { run: :run }
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
policy "ConfirmWhenChainWalked" do
|
|
182
|
-
on "Audit.ChainWalked"
|
|
183
|
-
trigger Audit::Confirm, with: { checked: :checked, report: :report }
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
policy "FailWhenWalkRefused" do
|
|
187
|
-
on "Audit.WalkRefused"
|
|
188
|
-
trigger Audit::Fail, with: { report: :refusal }
|
|
189
|
-
end
|
|
190
|
-
end
|
|
@@ -1,437 +0,0 @@
|
|
|
1
|
-
Hecks.bluebook "Hecks" do
|
|
2
|
-
# Rehearsal: operating a domain, in the Operations module (ADR 0096). Whether a domain at a pin
|
|
3
|
-
# would mint its next era against a copy of its real data, and what the mint would refuse.
|
|
4
|
-
#
|
|
5
|
-
# A rehearsal is a run like the Codebase `*Run`s: it is requested, the outside is asked, and the
|
|
6
|
-
# facts it brought back are judged by the givens and reactions below. It differs from them in
|
|
7
|
-
# two ways. It acts on a client's domain, not on this checkout, so it needs no hecks checkout
|
|
8
|
-
# and sits with Custodian, not Codebase. And it keeps nothing: the aggregate is bound to Memory
|
|
9
|
-
# in hecks.hecksagon, and what it found is its report, returned to the caller.
|
|
10
|
-
#
|
|
11
|
-
# Where the data it reads comes from is the subject's own `.world` (`rehearsed_by`), never an
|
|
12
|
-
# argument. The RehearsalStore port prepares that copy, loads the domain against it, runs the
|
|
13
|
-
# mint's audit over it without writing an era, and drops it, so the copy never outlives the run
|
|
14
|
-
# whichever way the chain of reactions ends.
|
|
15
|
-
|
|
16
|
-
aggregate "RehearsalRun" do
|
|
17
|
-
description "One rehearsal of a domain's next era against a copy of its data: what a mint would do, and what it would refuse."
|
|
18
|
-
|
|
19
|
-
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",
|
|
20
|
-
of: :domain
|
|
21
|
-
|
|
22
|
-
attribute :run, RunKey
|
|
23
|
-
attribute :domain, DomainPath
|
|
24
|
-
attribute :pin, Pin, optional: true
|
|
25
|
-
attribute :host_version, HostVersion, optional: true
|
|
26
|
-
attribute :store, StoreKind, optional: true
|
|
27
|
-
attribute :mode, StoreMode, optional: true
|
|
28
|
-
attribute :environment_loaded, EnvironmentLoaded, optional: true
|
|
29
|
-
attribute :schema_used, SchemaRead, optional: true
|
|
30
|
-
attribute :eras_held, Count, optional: true
|
|
31
|
-
attribute :journal_entries, Count, optional: true
|
|
32
|
-
attribute :head_rows, Count, optional: true
|
|
33
|
-
attribute :census, list_of(HeldCount), optional: true
|
|
34
|
-
attribute :copy_empty, Switch, optional: true
|
|
35
|
-
attribute :copy_note, Report, optional: true
|
|
36
|
-
attribute :booted, Switch, optional: true
|
|
37
|
-
attribute :before, ShapeLabel, optional: true
|
|
38
|
-
attribute :after, ShapeLabel, optional: true
|
|
39
|
-
attribute :minting, Minting, optional: true
|
|
40
|
-
attribute :edge_present, Switch, optional: true
|
|
41
|
-
attribute :refused_rows, list_of(RefusedRow), optional: true
|
|
42
|
-
attribute :refusal_total, Count, optional: true
|
|
43
|
-
attribute :audited, Switch, optional: true
|
|
44
|
-
attribute :rows_examined, Count, optional: true
|
|
45
|
-
attribute :rust_rows_examined, Count, optional: true
|
|
46
|
-
attribute :aggregates_examined, Count, optional: true
|
|
47
|
-
attribute :reason, Report, optional: true
|
|
48
|
-
attribute :parity, Parity, optional: true
|
|
49
|
-
attribute :unchecked, list_of(Limit), optional: true
|
|
50
|
-
attribute :verdict, Verdict, optional: true
|
|
51
|
-
attribute :released, Switch, optional: true
|
|
52
|
-
attribute :kept, Report, optional: true
|
|
53
|
-
attribute :boot_error, Report, optional: true
|
|
54
|
-
attribute :refusal, Report, optional: true
|
|
55
|
-
identified_by :run
|
|
56
|
-
|
|
57
|
-
value_object "RunKey" do
|
|
58
|
-
attribute :value, String, matches: :present
|
|
59
|
-
|
|
60
|
-
invariant("a rehearsal is named") { !value.to_s.empty? }
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# The domain's directory: where its bluebooks and its `.world` stand.
|
|
64
|
-
value_object "DomainPath" do
|
|
65
|
-
attribute :value, String, matches: :not_empty
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# The Hecks the rehearsal must run on: a release (`3.9.0`) or a commit, whole or a prefix.
|
|
69
|
-
value_object "Pin" do
|
|
70
|
-
attribute :value, String, pattern: '^[0-9a-f]{7,40}$|^[0-9]+[.][0-9]+[.][0-9]+'
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
value_object "HostVersion" do
|
|
74
|
-
attribute :value, String, matches: :present
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# Which strategy the subject's world named for the copy of its data.
|
|
78
|
-
value_object "StoreKind" do
|
|
79
|
-
attribute :value, String, one_of: ["memory", "postgres"]
|
|
80
|
-
|
|
81
|
-
invariant("a store is one the language names") { ["memory", "postgres"].include?(value) }
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
# What the copy holds: nothing, a restored dump, or a copy somebody else made, read as it is.
|
|
85
|
-
value_object "StoreMode" do
|
|
86
|
-
attribute :value, String, one_of: ["empty", "dump", "readonly_copy"]
|
|
87
|
-
|
|
88
|
-
invariant("a mode is empty, dump or readonly_copy") { ["empty", "dump", "readonly_copy"].include?(value) }
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
# The environment overlay the subject was loaded under and where that was decided: `world`
|
|
92
|
-
# (its `rehearsed_by` named one), `HECKS_PROJECT_ENVIRONMENT`, `default` (production, because
|
|
93
|
-
# its overlay exists, as the host build does) or `none`. A domain's binds are usually declared
|
|
94
|
-
# in that overlay, so a rehearsal that loaded another one rehearsed another domain.
|
|
95
|
-
value_object "EnvironmentLoaded" do
|
|
96
|
-
attribute :name, String
|
|
97
|
-
attribute :source, String, pattern: '^(world|HECKS_PROJECT_ENVIRONMENT|default|none)$'
|
|
98
|
-
attribute :file, String
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# The Postgres schema the copy was read in, where that was decided (`world`, `HECKS_SCHEMA`,
|
|
102
|
-
# `derived` from the domain's name, `default` public, or `memory` for a document) and whether
|
|
103
|
-
# the copy has it.
|
|
104
|
-
value_object "SchemaRead" do
|
|
105
|
-
attribute :name, String
|
|
106
|
-
attribute :source, String, pattern: '^(world|HECKS_SCHEMA|derived|default|memory)$'
|
|
107
|
-
attribute :present, Boolean
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
# One aggregate's rows in the copy: what its head table holds and the records its journal's
|
|
111
|
-
# latest entries hold. The audit reads the journal, so a difference is shown, not refused.
|
|
112
|
-
value_object "HeldCount" do
|
|
113
|
-
attribute :aggregate, String
|
|
114
|
-
attribute :head, Integer
|
|
115
|
-
attribute :journal, Integer
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
value_object "Switch" do
|
|
119
|
-
attribute :value, Boolean
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
value_object "Count" do
|
|
123
|
-
attribute :value, Integer
|
|
124
|
-
|
|
125
|
-
invariant("a count is not negative") { value >= 0 }
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
# The first six hex digits of a storage shape's digest, or `none` when no era is held.
|
|
129
|
-
value_object "ShapeLabel" do
|
|
130
|
-
attribute :value, String, pattern: '^[0-9a-f]{6}$|^none$'
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
# Which era a mint would hold: none (the shape stands), the first, or the next.
|
|
134
|
-
value_object "Minting" do
|
|
135
|
-
attribute :value, String, one_of: ["none", "first", "next"]
|
|
136
|
-
|
|
137
|
-
invariant("a mint is none, first or next") { ["none", "first", "next"].include?(value) }
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
# One stored record the mint's audit would refuse, named `Aggregate#id`, with the rule that
|
|
141
|
-
# refused it (a value the new types or invariants refuse, a state the lifecycle never reaches,
|
|
142
|
-
# a reference the edge cannot carry) and the audit's own wording.
|
|
143
|
-
value_object "RefusedRow" do
|
|
144
|
-
attribute :aggregate, String
|
|
145
|
-
attribute :id, String
|
|
146
|
-
attribute :rule, String, pattern: '^(value|lifecycle|reference)$'
|
|
147
|
-
attribute :wording, String
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
# How the other engine's audit stood: not run, in agreement with this one, or not.
|
|
151
|
-
value_object "Parity" do
|
|
152
|
-
attribute :engine, String
|
|
153
|
-
attribute :status, String, pattern: '^(not_run|agree|differ)$'
|
|
154
|
-
attribute :note, String
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
# One thing a rehearsal did not check, and why. A rehearsal states its limits.
|
|
158
|
-
value_object "Limit" do
|
|
159
|
-
attribute :what, String
|
|
160
|
-
attribute :why, String
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
# The five things a rehearsal can conclude. A would_mint of `minting: none` says the shape
|
|
164
|
-
# stands and nothing would be minted at all. `empty_copy` says the copy held no row of the
|
|
165
|
-
# domain, so nothing was rehearsed and no answer about the data is given.
|
|
166
|
-
value_object "Verdict" do
|
|
167
|
-
attribute :value, String, one_of: ["would_mint", "would_refuse", "needs_edge", "cannot_boot", "empty_copy"]
|
|
168
|
-
|
|
169
|
-
invariant("a verdict is one the rehearsal names") do
|
|
170
|
-
["would_mint", "would_refuse", "needs_edge", "cannot_boot", "empty_copy"].include?(value)
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
value_object "Report" do
|
|
175
|
-
attribute :value, String
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
# Only the first rows are held, so a domain with a million stale rows is a report, not a
|
|
179
|
-
# flood; the total says how many there were.
|
|
180
|
-
invariant("no more than fifty refused rows are held") { refused_rows.unset? || refused_rows.size <= 50 }
|
|
181
|
-
invariant("the total counts at least the rows held") do
|
|
182
|
-
refused_rows.unset? || refusal_total.unset? || refusal_total.value >= refused_rows.size
|
|
183
|
-
end
|
|
184
|
-
invariant("a rehearsal that would mint holds no refused row") do
|
|
185
|
-
verdict.unset? || verdict.value != "would_mint" || refusal_total.unset? || refusal_total.value == 0
|
|
186
|
-
end
|
|
187
|
-
invariant("only a domain that booted would mint") do
|
|
188
|
-
verdict.unset? || verdict.value != "would_mint" || booted.unset? || booted.value
|
|
189
|
-
end
|
|
190
|
-
invariant("a copy that holds nothing is never judged to mint") do
|
|
191
|
-
verdict.unset? || verdict.value != "would_mint" || copy_empty.unset? || !copy_empty.value
|
|
192
|
-
end
|
|
193
|
-
invariant("an empty_copy verdict is given for a copy that holds nothing") do
|
|
194
|
-
verdict.unset? || verdict.value != "empty_copy" || (!copy_empty.unset? && copy_empty.value)
|
|
195
|
-
end
|
|
196
|
-
invariant("only a mint of the next era audits stored rows") do
|
|
197
|
-
audited.unset? || !audited.value || minting.unset? || minting.value == "next"
|
|
198
|
-
end
|
|
199
|
-
invariant("a mint of the next era that would go through states how many rows were examined") do
|
|
200
|
-
verdict.unset? || verdict.value != "would_mint" || minting.unset? || minting.value != "next" || !rows_examined.unset?
|
|
201
|
-
end
|
|
202
|
-
invariant("a clean verdict that examined no row says so in what it did not check") do
|
|
203
|
-
verdict.unset? || verdict.value != "would_mint" || audited.unset? || audited.value ||
|
|
204
|
-
(!unchecked.unset? && unchecked.any? { |limit| limit.what == "the stored rows" })
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
# `requested` is the rehearsal and its store being prepared; `booted` the domain loaded and
|
|
208
|
-
# its shape read; `audited` the mint's audit run over the data. `judged` is a rehearsal whose
|
|
209
|
-
# answer is that the mint would go through, `withheld` one whose answer is that it would not
|
|
210
|
-
# (the verdict says which way), `refused` one that was never run because the request or the
|
|
211
|
-
# store was not admitted, and `failed` one that broke after it began.
|
|
212
|
-
lifecycle :status, default: "requested" do
|
|
213
|
-
mark :failure, "withheld", "refused", "failed"
|
|
214
|
-
transition "Boot" => "booted", from: "requested"
|
|
215
|
-
transition "Audit" => "audited", from: "booted"
|
|
216
|
-
transition "Judge" => "judged", from: "audited"
|
|
217
|
-
transition "Withhold" => "withheld", from: %w[requested booted audited]
|
|
218
|
-
transition "Refuse" => "refused", from: "requested"
|
|
219
|
-
transition "Fail" => "failed", from: %w[requested booted audited]
|
|
220
|
-
mark :terminal, "failed", "judged", "refused", "withheld"
|
|
221
|
-
end
|
|
222
|
-
|
|
223
|
-
command "Request" do
|
|
224
|
-
role "Operator"
|
|
225
|
-
goal "Rehearse a domain's next era against the copy of its data its world names, say whether a mint would go through, and print the whole outcome"
|
|
226
|
-
|
|
227
|
-
attribute :run, RunKey, sets: true
|
|
228
|
-
attribute :domain, DomainPath, sets: true
|
|
229
|
-
attribute :pin, Pin, optional: true, sets: true
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
emits RehearsalRequested
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
# What the subject reported once it was loaded against the prepared copy.
|
|
236
|
-
command "Boot" do
|
|
237
|
-
role "System"
|
|
238
|
-
goal "Record that the domain loaded, the shape it stands at and the era a mint would hold"
|
|
239
|
-
|
|
240
|
-
reference_to RehearsalRun
|
|
241
|
-
attribute :booted, Switch, sets: true
|
|
242
|
-
attribute :host_version, HostVersion, sets: true
|
|
243
|
-
attribute :store, StoreKind, sets: true
|
|
244
|
-
attribute :mode, StoreMode, sets: true
|
|
245
|
-
attribute :before, ShapeLabel, sets: true
|
|
246
|
-
attribute :after, ShapeLabel, sets: true
|
|
247
|
-
attribute :minting, Minting, sets: true
|
|
248
|
-
attribute :environment_loaded, EnvironmentLoaded, sets: true
|
|
249
|
-
attribute :schema_used, SchemaRead, sets: true
|
|
250
|
-
attribute :eras_held, Count, sets: true
|
|
251
|
-
attribute :journal_entries, Count, sets: true
|
|
252
|
-
attribute :head_rows, Count, sets: true
|
|
253
|
-
attribute :census, list_of(HeldCount), sets: true
|
|
254
|
-
attribute :copy_empty, Switch, sets: true
|
|
255
|
-
attribute :copy_note, Report, sets: true
|
|
256
|
-
attribute :released, Switch, optional: true, sets: true
|
|
257
|
-
attribute :kept, Report, optional: true, sets: true
|
|
258
|
-
|
|
259
|
-
given("the domain loaded") { booted.value }
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
emits RehearsalBooted
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
# The mint's own three layers and its edge and coverage rules, run over the copy.
|
|
266
|
-
command "Audit" do
|
|
267
|
-
role "System"
|
|
268
|
-
goal "Record whether an edge leads to the shape, and every row the mint's audit would refuse"
|
|
269
|
-
|
|
270
|
-
reference_to RehearsalRun
|
|
271
|
-
attribute :minting, Minting, sets: true
|
|
272
|
-
attribute :edge_present, Switch, sets: true
|
|
273
|
-
attribute :refused_rows, list_of(RefusedRow), optional: true, sets: true
|
|
274
|
-
attribute :refusal_total, Count, sets: true
|
|
275
|
-
attribute :audited, Switch, sets: true
|
|
276
|
-
attribute :rows_examined, Count, sets: true
|
|
277
|
-
attribute :rust_rows_examined, Count, sets: true
|
|
278
|
-
attribute :aggregates_examined, Count, sets: true
|
|
279
|
-
attribute :reason, Report, sets: true
|
|
280
|
-
attribute :parity, Parity, sets: true
|
|
281
|
-
attribute :unchecked, list_of(Limit), sets: true
|
|
282
|
-
attribute :released, Switch, sets: true
|
|
283
|
-
attribute :kept, Report, optional: true, sets: true
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
emits RehearsalAudited
|
|
287
|
-
end
|
|
288
|
-
|
|
289
|
-
command "Judge" do
|
|
290
|
-
role "System"
|
|
291
|
-
goal "Record that the mint would go through: the domain booted, an edge leads on where one is needed, and nothing is refused"
|
|
292
|
-
|
|
293
|
-
reference_to RehearsalRun
|
|
294
|
-
attribute :verdict, Verdict, sets: true
|
|
295
|
-
attribute :refusal_total, Count
|
|
296
|
-
attribute :edge_present, Switch
|
|
297
|
-
|
|
298
|
-
given("a rehearsal that finds a refused row would not mint") { refusal_total.value == 0 }
|
|
299
|
-
given("a rehearsal judged to mint names that verdict") { verdict.value == "would_mint" }
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
emits RehearsalJudged
|
|
303
|
-
end
|
|
304
|
-
|
|
305
|
-
command "Withhold" do
|
|
306
|
-
role "System"
|
|
307
|
-
goal "Record that the mint would not go through, which of the three ways, and what it would say"
|
|
308
|
-
|
|
309
|
-
reference_to RehearsalRun
|
|
310
|
-
attribute :verdict, Verdict, sets: true
|
|
311
|
-
attribute :refusal, Report, sets: true
|
|
312
|
-
|
|
313
|
-
given("a withheld rehearsal names how the mint would stop") { verdict.value != "would_mint" }
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
emits RehearsalWithheld
|
|
317
|
-
end
|
|
318
|
-
|
|
319
|
-
command "Refuse" do
|
|
320
|
-
role "System"
|
|
321
|
-
goal "Record that the rehearsal was not run: the subject, the pin or the store was not admitted, and why"
|
|
322
|
-
|
|
323
|
-
reference_to RehearsalRun
|
|
324
|
-
attribute :refusal, Report, sets: true
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
emits RehearsalRefused
|
|
328
|
-
end
|
|
329
|
-
|
|
330
|
-
command "Fail" do
|
|
331
|
-
role "System"
|
|
332
|
-
goal "Record that the rehearsal broke after it began, and why"
|
|
333
|
-
|
|
334
|
-
reference_to RehearsalRun
|
|
335
|
-
attribute :refusal, Report, sets: true
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
emits RehearsalFailed
|
|
339
|
-
end
|
|
340
|
-
|
|
341
|
-
query "RehearsalOutcome" do
|
|
342
|
-
description "How one rehearsal ended: its status and verdict, and every fact it brought back. A run is kept by the process that made it, so a run this process does not hold is refused as unknown; `request` waits for its reactions and prints the whole outcome."
|
|
343
|
-
attribute :run, RunKey
|
|
344
|
-
where(run: :run)
|
|
345
|
-
order_by :run
|
|
346
|
-
end
|
|
347
|
-
|
|
348
|
-
query "Withheld" do
|
|
349
|
-
description "Every rehearsal of this process whose answer was that the mint would not go through."
|
|
350
|
-
where(status: "withheld")
|
|
351
|
-
order_by :run
|
|
352
|
-
end
|
|
353
|
-
end
|
|
354
|
-
|
|
355
|
-
policy "SurveyWhenRehearsalRequested" do
|
|
356
|
-
on "RehearsalRun.RehearsalRequested"
|
|
357
|
-
ask :survey, with: { run: :run }
|
|
358
|
-
end
|
|
359
|
-
|
|
360
|
-
policy "RefuseWhenStoreNotAdmitted" do
|
|
361
|
-
on "RehearsalRun.StoreRefused"
|
|
362
|
-
trigger RehearsalRun::Refuse, with: { refusal: :refusal }
|
|
363
|
-
end
|
|
364
|
-
policy "RecordBootWhenStoreSurveyed" do
|
|
365
|
-
on "RehearsalRun.StoreSurveyed"
|
|
366
|
-
where { booted.value }
|
|
367
|
-
trigger RehearsalRun::Boot, with: { booted: :booted, host_version: :host_version, store: :store, mode: :mode,
|
|
368
|
-
before: :before, after: :after, minting: :minting,
|
|
369
|
-
environment_loaded: :environment_loaded, schema_used: :schema_used,
|
|
370
|
-
eras_held: :eras_held, journal_entries: :journal_entries,
|
|
371
|
-
head_rows: :head_rows, census: :census, copy_empty: :copy_empty,
|
|
372
|
-
copy_note: :copy_note, released: :released, kept: :kept }
|
|
373
|
-
end
|
|
374
|
-
|
|
375
|
-
# A copy that holds none of the domain's rows is not rehearsed: there is nothing to audit, and a
|
|
376
|
-
# clean answer over it would be a confident wrong one. The survey has already dropped it.
|
|
377
|
-
policy "WithholdWhenTheCopyHoldsNothing" do
|
|
378
|
-
on "RehearsalRun.RehearsalBooted"
|
|
379
|
-
where { copy_empty.value }
|
|
380
|
-
trigger RehearsalRun::Withhold, with: { verdict: "empty_copy", refusal: :copy_note }
|
|
381
|
-
end
|
|
382
|
-
|
|
383
|
-
# A domain that does not load is an answer, not a breakdown: it is what the mint would be
|
|
384
|
-
# stopped by, so it is judged, not failed.
|
|
385
|
-
policy "WithholdWhenSubjectDoesNotBoot" do
|
|
386
|
-
on "RehearsalRun.StoreSurveyed"
|
|
387
|
-
where { !booted.value }
|
|
388
|
-
trigger RehearsalRun::Withhold, with: { verdict: "cannot_boot", refusal: :boot_error }
|
|
389
|
-
end
|
|
390
|
-
|
|
391
|
-
policy "FailWhenExaminationRefused" do
|
|
392
|
-
on "RehearsalRun.ExamineRefused"
|
|
393
|
-
trigger RehearsalRun::Fail, with: { refusal: :refusal }
|
|
394
|
-
end
|
|
395
|
-
|
|
396
|
-
policy "ExamineWhenBooted" do
|
|
397
|
-
on "RehearsalRun.RehearsalBooted"
|
|
398
|
-
where { !copy_empty.value }
|
|
399
|
-
ask :examine, with: { run: :run }
|
|
400
|
-
end
|
|
401
|
-
|
|
402
|
-
policy "RecordAuditWhenStoreExamined" do
|
|
403
|
-
on "RehearsalRun.StoreExamined"
|
|
404
|
-
trigger RehearsalRun::Audit, with: { minting: :minting, edge_present: :edge_present,
|
|
405
|
-
refused_rows: :refused_rows, refusal_total: :refusal_total,
|
|
406
|
-
audited: :audited, rows_examined: :rows_examined,
|
|
407
|
-
rust_rows_examined: :rust_rows_examined,
|
|
408
|
-
aggregates_examined: :aggregates_examined, reason: :reason,
|
|
409
|
-
parity: :parity, unchecked: :unchecked,
|
|
410
|
-
released: :released, kept: :kept }
|
|
411
|
-
end
|
|
412
|
-
|
|
413
|
-
policy "JudgeWhenNothingWouldStopTheMint" do
|
|
414
|
-
on "RehearsalRun.RehearsalAudited"
|
|
415
|
-
where do
|
|
416
|
-
(minting.value != "next" || edge_present.value) && refusal_total.value == 0
|
|
417
|
-
end
|
|
418
|
-
trigger RehearsalRun::Judge, with: { verdict: "would_mint", refusal_total: :refusal_total,
|
|
419
|
-
edge_present: :edge_present }
|
|
420
|
-
end
|
|
421
|
-
|
|
422
|
-
policy "WithholdWhenNoEdgeLeadsOn" do
|
|
423
|
-
on "RehearsalRun.RehearsalAudited"
|
|
424
|
-
where { minting.value == "next" && !edge_present.value }
|
|
425
|
-
trigger RehearsalRun::Withhold, with: { verdict: "needs_edge",
|
|
426
|
-
refusal: "no translation edge leads the held era to this shape" }
|
|
427
|
-
end
|
|
428
|
-
|
|
429
|
-
policy "WithholdWhenTheMintWouldRefuse" do
|
|
430
|
-
on "RehearsalRun.RehearsalAudited"
|
|
431
|
-
where do
|
|
432
|
-
(minting.value != "next" || edge_present.value) && refusal_total.value > 0
|
|
433
|
-
end
|
|
434
|
-
trigger RehearsalRun::Withhold, with: { verdict: "would_refuse",
|
|
435
|
-
refusal: "the mint would refuse: see the refused rows" }
|
|
436
|
-
end
|
|
437
|
-
end
|