hecks 6.0.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/exe/hecks +19 -12
- data/lib/hecks/adapters/driven/claude_code.rb +2 -2
- data/lib/hecks/adapters/driven/folder.rb +10 -1
- data/lib/hecks/adapters/driven/folder_overlay.rb +15 -0
- data/lib/hecks/adapters/driven/heki.rb +1 -1
- data/lib/hecks/adapters/driven/in_process_key_vault.rb +1 -1
- data/lib/hecks/adapters/driven/memory/outbox_rows.rb +2 -2
- data/lib/hecks/adapters/driven/postgres/name_guard.rb +25 -0
- data/lib/hecks/adapters/driven/postgres/outbox.rb +3 -3
- data/lib/hecks/adapters/driven/postgres/repository.rb +1 -1
- data/lib/hecks/adapters/driven/postgres/shared_connection.rb +1 -1
- data/lib/hecks/adapters/driven/postgres.rb +3 -0
- data/lib/hecks/adapters/driven/postgres_era/boot.rb +28 -16
- data/lib/hecks/adapters/driven/postgres_era/class_methods.rb +27 -7
- data/lib/hecks/adapters/driven/postgres_era/dialect.rb +10 -5
- data/lib/hecks/adapters/driven/postgres_era/field_cache_provisioner.rb +39 -0
- data/lib/hecks/adapters/driven/postgres_era/journal.rb +52 -13
- data/lib/hecks/adapters/driven/postgres_era/lineage/chain_sql.rb +29 -49
- data/lib/hecks/adapters/driven/postgres_era/lineage/direct_sql.rb +73 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/direct_verified.json +10 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/direct_verified.rb +65 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/domain_rename.rb +77 -25
- data/lib/hecks/adapters/driven/postgres_era/lineage/domain_rename_state.rb +108 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/era_integrity.rb +11 -6
- data/lib/hecks/adapters/driven/postgres_era/lineage/era_store.rb +63 -5
- data/lib/hecks/adapters/driven/postgres_era/lineage/layered_sql.rb +64 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/ledger_reset.rb +150 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/mint_provisioning.rb +85 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/mint_transaction.rb +11 -7
- data/lib/hecks/adapters/driven/postgres_era/lineage/provisioning.rb +11 -5
- data/lib/hecks/adapters/driven/postgres_era/lineage/split_sql.rb +76 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/sql_templates.rb +9 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage.rb +10 -2
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/context.rb +23 -3
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/coverage_check.rb +3 -1
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/disposable_ledger.rb +119 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/era_resolution.rb +219 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/era_resolver.rb +68 -71
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/held_era.rb +68 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/ledger_change.rb +63 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/merge_coordinator.rb +1 -1
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/mint_decision.rb +163 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/mint_request.rb +24 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/minter.rb +59 -21
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/refusals.rb +24 -11
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager.rb +40 -6
- data/lib/hecks/adapters/driven/postgres_era/shared_tables.rb +32 -0
- data/lib/hecks/adapters/driven/postgres_era.adapter +12 -0
- data/lib/hecks/adapters/driven/postgres_era.rb +25 -10
- data/lib/hecks/adapters/driven/prism.rb +0 -1
- data/lib/hecks/adapters/driven/sql_query_builder.rb +1 -0
- data/lib/hecks/adapters/driven/sqlite/dispatch_claims.rb +1 -1
- data/lib/hecks/adapters/driven/sqlite/name_guard.rb +25 -0
- data/lib/hecks/adapters/driven/sqlite/outbox.rb +2 -2
- data/lib/hecks/adapters/driven/sqlite/repository.rb +1 -1
- data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +20 -0
- data/lib/hecks/adapters/driven/sqlite.rb +9 -1
- data/lib/hecks/adapters/driven/tenant_provisioner.rb +1 -1
- data/lib/hecks/adapters/driven/worktree_overlay.rb +117 -0
- data/lib/hecks/adapters/driving/cli/shorthand.rb +5 -1
- data/lib/hecks/adapters/driving/cli.rb +1 -1
- data/lib/hecks/adapters/driving/cli_runner/answers.rb +77 -22
- data/lib/hecks/adapters/driving/cli_runner/bang_rule.rb +35 -0
- data/lib/hecks/adapters/driving/cli_runner/completion_words.rb +36 -0
- data/lib/hecks/adapters/driving/cli_runner/json_words.rb +55 -0
- data/lib/hecks/adapters/driving/cli_runner/name_index.rb +63 -0
- data/lib/hecks/adapters/driving/cli_runner/read_context.rb +32 -0
- data/lib/hecks/adapters/driving/cli_runner/renamed_names.rb +49 -0
- data/lib/hecks/adapters/driving/cli_runner/resolution.rb +43 -17
- data/lib/hecks/adapters/driving/cli_runner/resume_words.rb +63 -0
- data/lib/hecks/adapters/driving/cli_runner/run_reference.rb +66 -0
- data/lib/hecks/adapters/driving/cli_runner/run_replay.rb +118 -0
- data/lib/hecks/adapters/driving/cli_runner/search_words.rb +35 -0
- data/lib/hecks/adapters/driving/cli_runner/settling.rb +6 -5
- data/lib/hecks/adapters/driving/cli_runner/streaming.rb +11 -10
- data/lib/hecks/adapters/driving/cli_runner/suggestions.rb +1 -1
- data/lib/hecks/adapters/driving/cli_runner/tour_words.rb +77 -0
- data/lib/hecks/adapters/driving/cli_runner/verb_names.rb +36 -4
- data/lib/hecks/adapters/driving/cli_runner/verbosity.rb +75 -0
- data/lib/hecks/adapters/driving/cli_runner.rb +106 -7
- data/lib/hecks/adapters/driving/context_line.rb +85 -0
- data/lib/hecks/adapters/driving/exit_status.rb +31 -0
- data/lib/hecks/adapters/driving/launcher_options.rb +7 -5
- data/lib/hecks/adapters/driving/mcp/progress_sink.rb +45 -0
- data/lib/hecks/adapters/driving/mcp/tool_calls.rb +7 -5
- data/lib/hecks/adapters/driving/mcp.rb +25 -5
- data/lib/hecks/adapters/driving/mcp_scope/argument_policy.rb +40 -7
- data/lib/hecks/adapters/driving/mcp_scope.rb +8 -7
- data/lib/hecks/adapters/driving/ruby/aggregate_module/hooks.rb +154 -0
- data/lib/hecks/adapters/driving/ruby/aggregate_module.rb +64 -93
- data/lib/hecks/adapters/driving/usage_log.rb +146 -0
- data/lib/hecks/adapters/driving/write_guard.rb +55 -0
- data/lib/hecks/adapters/driving.rb +0 -1
- data/lib/hecks/behaviors/dsl.rb +5 -1
- data/lib/hecks/behaviors/expectations/boot.rb +0 -1
- data/lib/hecks/bluebook/acknowledgements.rb +1 -1
- data/lib/hecks/bluebook/aggregate.rb +21 -18
- data/lib/hecks/bluebook/assembly/contracts/sagas.rb +2 -0
- data/lib/hecks/bluebook/assembly/contracts/structure.rb +18 -13
- data/lib/hecks/bluebook/behaviour/aggregate.rb +27 -3
- data/lib/hecks/bluebook/command.rb +16 -5
- data/lib/hecks/bluebook/declaration.rb +32 -4
- data/lib/hecks/bluebook/domain_port.rb +7 -3
- data/lib/hecks/bluebook/dsl/aggregate_builder/relationships.rb +0 -2
- data/lib/hecks/bluebook/dsl/aggregate_builder/renaming.rb +25 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder.rb +3 -0
- data/lib/hecks/bluebook/dsl/attribute_collector.rb +0 -1
- data/lib/hecks/bluebook/dsl/audience_word.rb +40 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/metadata.rb +56 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/modules.rb +80 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/correlation_keys.rb +51 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation.rb +1 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +17 -34
- data/lib/hecks/bluebook/dsl/bootstrap_table.rb +8 -0
- data/lib/hecks/bluebook/dsl/command_builder.rb +13 -3
- data/lib/hecks/bluebook/dsl/entity_builder.rb +0 -2
- data/lib/hecks/bluebook/dsl/generic_dispatch.rb +6 -4
- data/lib/hecks/bluebook/dsl/kinds.rb +53 -0
- data/lib/hecks/bluebook/dsl/port_operation_builder.rb +9 -2
- data/lib/hecks/bluebook/dsl/process_manager_builder.rb +25 -15
- data/lib/hecks/bluebook/dsl/translation_builder.rb +16 -1
- data/lib/hecks/bluebook/dsl/word_gate.rb +1 -1
- data/lib/hecks/bluebook/dsl.rb +1 -0
- data/lib/hecks/bluebook/meta_validator/judge/identity.rb +9 -4
- data/lib/hecks/bluebook/meta_validator/plan/category.rb +10 -2
- data/lib/hecks/bluebook/meta_validator/plan/verbs.rb +9 -0
- data/lib/hecks/bluebook/meta_validator/plan.rb +2 -1
- data/lib/hecks/bluebook/meta_validator/reconstruction/heads.rb +3 -1
- data/lib/hecks/bluebook/meta_validator/reconstruction/reading.rb +7 -0
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +7 -2
- data/lib/hecks/bluebook/meta_validator/shapes.rb +3 -0
- data/lib/hecks/bluebook/meta_validator/syntax_boot/disk_cache.rb +1 -1
- data/lib/hecks/bluebook/model_check/aggregate_checks.rb +27 -0
- data/lib/hecks/bluebook/model_check/ask_checks.rb +25 -0
- data/lib/hecks/bluebook/model_check/reaction_chains.rb +114 -0
- data/lib/hecks/bluebook/model_check/reaction_cycles.rb +53 -0
- data/lib/hecks/bluebook/model_check/reaction_depth_checks.rb +58 -0
- data/lib/hecks/bluebook/model_check/reaction_walk.rb +62 -0
- data/lib/hecks/bluebook/model_check.rb +5 -27
- data/lib/hecks/bluebook/process_manager.rb +20 -3
- data/lib/hecks/bluebook/translation.rb +5 -3
- data/lib/hecks/bluebook/translation_plan.rb +9 -2
- data/lib/hecks/ci_pipeline/adapters/ci_cache.adapter +7 -0
- data/lib/hecks/ci_pipeline/adapters/ci_cache.rb +39 -0
- data/lib/hecks/ci_pipeline/adapters/ci_runner.adapter +7 -0
- data/lib/hecks/ci_pipeline/adapters/ci_runner.rb +55 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.behaviors +322 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.bluebook +938 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.hecksagon +12 -0
- data/lib/hecks/ci_pipeline/ci_pipeline.ports.hecksagon +16 -0
- data/lib/hecks/ci_speed/adapters/ci_reader.adapter +7 -0
- data/lib/hecks/ci_speed/adapters/ci_reader.rb +141 -0
- data/lib/hecks/ci_speed/adapters/local_runner/answer.rb +41 -0
- data/lib/hecks/ci_speed/adapters/local_runner/catalog.rb +89 -0
- data/lib/hecks/ci_speed/adapters/local_runner/checkouts.rb +89 -0
- data/lib/hecks/ci_speed/adapters/local_runner/launcher.rb +69 -0
- data/lib/hecks/ci_speed/adapters/local_runner/load_average.rb +38 -0
- data/lib/hecks/ci_speed/adapters/local_runner/refs.rb +39 -0
- data/lib/hecks/ci_speed/adapters/local_runner/refused.rb +11 -0
- data/lib/hecks/ci_speed/adapters/local_runner/verdict.rb +71 -0
- data/lib/hecks/ci_speed/adapters/local_runner.adapter +7 -0
- data/lib/hecks/ci_speed/adapters/local_runner.rb +168 -0
- data/lib/hecks/ci_speed/adapters/replayed_runner.rb +39 -0
- data/lib/hecks/ci_speed/ci_speed.behaviors +341 -0
- data/lib/hecks/ci_speed/ci_speed.bluebook +1073 -0
- data/lib/hecks/ci_speed/ci_speed.hecksagon +11 -0
- data/lib/hecks/ci_speed/ci_speed.ports.hecksagon +21 -0
- data/lib/hecks/ci_workflows/ci_workflows.behaviors +13 -0
- data/lib/hecks/ci_workflows/ci_workflows.bluebook +173 -0
- data/lib/hecks/ci_workflows/ci_workflows.hecksagon +15 -0
- data/lib/hecks/coder/coder.bluebook +385 -0
- data/lib/hecks/coder/coder.hecksagon +12 -0
- data/lib/hecks/command_names/check.rb +39 -0
- data/lib/hecks/command_names/extractor.rb +67 -0
- data/lib/hecks/command_names/index.rb +40 -0
- data/lib/hecks/command_names/resolution.rb +81 -0
- data/lib/hecks/command_names/scan.rb +54 -0
- data/lib/hecks/command_names/sources.rb +73 -0
- data/lib/hecks/command_names.rb +26 -0
- data/lib/hecks/composer/jobs.rb +1 -1
- data/lib/hecks/composer/toolbox.rb +8 -1
- data/lib/hecks/corpus/generated_key.rb +205 -0
- data/lib/hecks/corpus/listing.rb +34 -0
- data/lib/hecks/corpus/rust.rb +27 -11
- data/lib/hecks/corpus/sources.rb +2 -1
- data/lib/hecks/corpus.rb +37 -42
- data/lib/hecks/deprecation.rb +23 -0
- data/lib/hecks/doc/reference/readme.rb +1 -1
- data/lib/hecks/doc/reference/rendering.rb +2 -2
- data/lib/hecks/doc/reference.rb +1 -1
- data/lib/hecks/embryonaut_bluebook/manifest.rb +1 -1
- data/lib/hecks/fixer/fixer.bluebook +240 -0
- data/lib/hecks/fixer/fixer.hecksagon +17 -0
- data/lib/hecks/framework_bluebooks.rb +32 -7
- data/lib/hecks/fuzzing/concurrent_dispatch/world_copy.rb +1 -0
- data/lib/hecks/fuzzing/isolated_boot/postgres_scratch.rb +11 -12
- data/lib/hecks/fuzzing/isolated_boot/worlds.rb +23 -5
- data/lib/hecks/fuzzing/isolated_boot.rb +1 -1
- data/lib/hecks/fuzzing/mutation/checks.rb +3 -3
- data/lib/hecks/grammar/translation.bluebook +1 -1
- data/lib/hecks/grammar/translation_rules.json +64 -0
- data/lib/hecks/hecks/adapter_words.json +7 -0
- data/lib/hecks/hecks/adapters/area_overlap.rb +156 -0
- data/lib/hecks/hecks/adapters/claude_agents.rb +8 -3
- data/lib/hecks/hecks/adapters/codebase/batch_runs.rb +60 -0
- data/lib/hecks/hecks/adapters/codebase/changed_specs.rb +52 -0
- data/lib/hecks/hecks/adapters/codebase/codemods.rb +3 -2
- data/lib/hecks/hecks/adapters/codebase/conformance.rb +14 -1
- data/lib/hecks/hecks/adapters/codebase/corpus_queries.rb +53 -0
- data/lib/hecks/hecks/adapters/codebase/generated_keys.rb +31 -0
- data/lib/hecks/hecks/adapters/codebase/impacted_specs.rb +110 -0
- data/lib/hecks/hecks/adapters/codebase/language.rb +2 -2
- data/lib/hecks/hecks/adapters/codebase/launcher_text.rb +39 -0
- data/lib/hecks/hecks/adapters/codebase/minitest_runs.rb +52 -0
- data/lib/hecks/hecks/adapters/codebase/regeneration.rb +51 -8
- data/lib/hecks/hecks/adapters/codebase/run_options.rb +35 -0
- data/lib/hecks/hecks/adapters/codebase/scripting.rb +39 -0
- data/lib/hecks/hecks/adapters/codebase/search.rb +1 -1
- data/lib/hecks/hecks/adapters/codebase/source_tree.rb +79 -51
- data/lib/hecks/hecks/adapters/codebase/spec_files/report.rb +71 -0
- data/lib/hecks/hecks/adapters/codebase/spec_files/shared_run.rb +73 -0
- data/lib/hecks/hecks/adapters/codebase/spec_files.rb +95 -0
- data/lib/hecks/hecks/adapters/codebase/test_runner.rb +53 -4
- data/lib/hecks/hecks/adapters/codebase/test_scope.rb +105 -0
- data/lib/hecks/hecks/adapters/codebase/test_suite.rb +48 -34
- data/lib/hecks/hecks/adapters/console_capture.rb +1 -1
- data/lib/hecks/hecks/adapters/cost_explorer.rb +9 -1
- data/lib/hecks/hecks/adapters/dispatching/brief_text.rb +51 -0
- data/lib/hecks/hecks/adapters/dispatching/launcher.rb +97 -0
- data/lib/hecks/hecks/adapters/dispatching/plan.rb +82 -0
- data/lib/hecks/hecks/adapters/dispatching/rows.rb +66 -0
- data/lib/hecks/hecks/adapters/dispatching/settings.rb +81 -0
- data/lib/hecks/hecks/adapters/dispatching/settler.rb +40 -0
- data/lib/hecks/hecks/adapters/dispatching.adapter +7 -0
- data/lib/hecks/hecks/adapters/dispatching.rb +93 -0
- data/lib/hecks/hecks/adapters/doctor_reading/report.rb +27 -0
- data/lib/hecks/hecks/adapters/doctor_reading.adapter +7 -0
- data/lib/hecks/hecks/adapters/doctor_reading.rb +161 -0
- data/lib/hecks/hecks/adapters/git_checkout.rb +1 -1
- data/lib/hecks/hecks/adapters/git_commit.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_commit.rb +61 -0
- data/lib/hecks/hecks/adapters/git_landing/finisher.rb +82 -0
- data/lib/hecks/hecks/adapters/git_landing/foreign_hold.rb +111 -0
- data/lib/hecks/hecks/adapters/git_landing/line.rb +171 -0
- data/lib/hecks/hecks/adapters/git_landing/lineup.rb +98 -0
- data/lib/hecks/hecks/adapters/git_landing/merger.rb +1 -1
- data/lib/hecks/hecks/adapters/git_landing/numbering.rb +54 -0
- data/lib/hecks/hecks/adapters/git_landing/rivals.rb +59 -0
- data/lib/hecks/hecks/adapters/git_landing/ticket.rb +156 -0
- data/lib/hecks/hecks/adapters/git_landing/tidy.rb +147 -0
- data/lib/hecks/hecks/adapters/git_landing/train.rb +104 -0
- data/lib/hecks/hecks/adapters/git_landing/verdict.rb +64 -0
- data/lib/hecks/hecks/adapters/git_landing/waiting.rb +120 -0
- data/lib/hecks/hecks/adapters/git_landing.rb +106 -20
- data/lib/hecks/hecks/adapters/git_main_pull.rb +99 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/bench.rb +82 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/due.rb +84 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/impacted/skips.rb +47 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/impacted/spec_run.rb +75 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/impacted.rb +181 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/line.rb +76 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/reading.rb +24 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/record.rb +146 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/spec_map/corpus.rb +25 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/spec_map/needles.rb +61 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/spec_map.rb +105 -0
- data/lib/hecks/hecks/adapters/git_rehearsal/stages.rb +118 -0
- data/lib/hecks/hecks/adapters/git_rehearsal.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_rehearsal.rb +141 -0
- data/lib/hecks/hecks/adapters/git_train/bench.rb +15 -15
- data/lib/hecks/hecks/adapters/git_train/branch_guard.rb +62 -0
- data/lib/hecks/hecks/adapters/git_train/carriage.rb +27 -28
- data/lib/hecks/hecks/adapters/git_train/launcher_shape.rb +75 -0
- data/lib/hecks/hecks/adapters/git_train/mint_step.rb +47 -0
- data/lib/hecks/hecks/adapters/git_train/settlement.rb +167 -0
- data/lib/hecks/hecks/adapters/git_train.rb +73 -15
- data/lib/hecks/hecks/adapters/git_worktree_add.adapter +7 -0
- data/lib/hecks/hecks/adapters/git_worktree_add.rb +68 -0
- data/lib/hecks/hecks/adapters/github_pull_requests.adapter +7 -0
- data/lib/hecks/hecks/adapters/github_pull_requests.rb +109 -0
- data/lib/hecks/hecks/adapters/host_http.rb +6 -6
- data/lib/hecks/hecks/adapters/in_process_boot.rb +10 -8
- data/lib/hecks/hecks/adapters/in_process_operations.rb +11 -17
- data/lib/hecks/hecks/adapters/in_process_undo.rb +17 -0
- data/lib/hecks/hecks/adapters/journal_store/changes.rb +13 -4
- data/lib/hecks/hecks/adapters/journal_store/edge_audit.rb +28 -15
- data/lib/hecks/hecks/adapters/journal_store/examination.rb +17 -1
- data/lib/hecks/hecks/adapters/journal_store/held_domain/renaming.rb +45 -0
- data/lib/hecks/hecks/adapters/journal_store/held_domain.rb +31 -5
- data/lib/hecks/hecks/adapters/journal_store/held_mint.rb +128 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/attestation.rb +1 -1
- data/lib/hecks/hecks/adapters/journal_store/readings/boot_status.rb +58 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/composition.rb +39 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/outcomes.rb +76 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/postgres_reader.rb +44 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/reader.rb +64 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/report.rb +102 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/sqlite_reader.rb +43 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/stores.rb +80 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/subscribers.rb +72 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace/summary.rb +39 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/event_trace.rb +39 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/command_line.rb +57 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/edge_guards.rb +107 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/inspection.rb +94 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/plan.rb +66 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/report.rb +72 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/store.rb +34 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/watermark_guards.rb +86 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan/world.rb +66 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/mint_plan.rb +36 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/projection_audit.rb +64 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/scaffolding.rb +3 -3
- data/lib/hecks/hecks/adapters/journal_store/readings/sqlite_status/database_reading.rb +113 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/sqlite_status/read_only.rb +33 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/sqlite_status.rb +32 -0
- data/lib/hecks/hecks/adapters/journal_store/readings.rb +13 -1
- data/lib/hecks/hecks/adapters/journal_store/reconcile_report.rb +60 -0
- data/lib/hecks/hecks/adapters/journal_store/reconciliation.rb +121 -0
- data/lib/hecks/hecks/adapters/journal_store/translation_write/shape_edge.rb +59 -0
- data/lib/hecks/hecks/adapters/journal_store/translation_write.rb +123 -0
- data/lib/hecks/hecks/adapters/journal_store.rb +16 -0
- data/lib/hecks/hecks/adapters/landed_work.adapter +7 -0
- data/lib/hecks/hecks/adapters/landed_work.rb +52 -0
- data/lib/hecks/hecks/adapters/local_files.rb +6 -6
- data/lib/hecks/hecks/adapters/process_pool.rb +3 -2
- data/lib/hecks/hecks/adapters/push_size.rb +57 -0
- data/lib/hecks/hecks/adapters/qa_quiescing.adapter +7 -0
- data/lib/hecks/hecks/adapters/qa_quiescing.rb +57 -0
- data/lib/hecks/hecks/adapters/rehearsal/inquiry.rb +30 -3
- data/lib/hecks/hecks/adapters/rehearsal/memory_store.rb +63 -3
- data/lib/hecks/hecks/adapters/rehearsal/postgres_reading.rb +29 -6
- data/lib/hecks/hecks/adapters/rehearsal/subject.rb +11 -5
- data/lib/hecks/hecks/adapters/rust_toolchain.rb +10 -1
- data/lib/hecks/hecks/adapters/rust_workspace.rb +1 -1
- data/lib/hecks/hecks/adapters/settings_reading/disposable_ledger.rb +32 -0
- data/lib/hecks/hecks/adapters/settings_reading/push_nudge.rb +26 -0
- data/lib/hecks/hecks/adapters/settings_reading/stores.rb +76 -0
- data/lib/hecks/hecks/adapters/settings_reading/test_scope.rb +28 -0
- data/lib/hecks/hecks/adapters/settings_reading.rb +28 -2
- data/lib/hecks/hecks/adapters/started_work.rb +42 -0
- data/lib/hecks/hecks/adapters/terminal.rb +12 -10
- data/lib/hecks/hecks/adapters/where_reading.adapter +7 -0
- data/lib/hecks/hecks/adapters/where_reading.rb +64 -0
- data/lib/hecks/hecks/adapters/work_areas.rb +57 -0
- data/lib/hecks/hecks/adapters/work_limits.rb +57 -0
- data/lib/hecks/hecks/build/build.bluebook +576 -0
- data/lib/hecks/hecks/check/check.bluebook +966 -0
- data/lib/hecks/hecks/codebase.behaviors +61 -5
- data/lib/hecks/hecks/composer.behaviors +1 -1
- data/lib/hecks/hecks/context_map.hecksagon +1 -1
- data/lib/hecks/hecks/custodian.behaviors +33 -7
- data/lib/hecks/hecks/delegate/delegate.bluebook +355 -0
- data/lib/hecks/hecks/deliver/deliver.bluebook +945 -0
- data/lib/hecks/hecks/deploy.behaviors +1 -1
- data/lib/hecks/hecks/evolve/evolve.bluebook +788 -0
- data/lib/hecks/hecks/find/find.bluebook +81 -0
- data/lib/hecks/hecks/hecks.behaviors +1 -1
- data/lib/hecks/hecks/hecks.bluebook +0 -133
- data/lib/hecks/hecks/hecks.contextmap +2 -0
- data/lib/hecks/hecks/hecks.hecksagon +185 -29
- data/lib/hecks/hecks/hecks.world +35 -9
- data/lib/hecks/hecks/implicit_moves.json +24 -0
- data/lib/hecks/hecks/migrate/migrate.bluebook +1066 -0
- data/lib/hecks/hecks/operate/operate.bluebook +695 -0
- data/lib/hecks/hecks/quiesce/quiesce.bluebook +117 -0
- data/lib/hecks/hecks/rehearse/rehearse.bluebook +133 -0
- data/lib/hecks/hecks/release/release.bluebook +916 -0
- data/lib/hecks/hecks/serve/serve.bluebook +134 -0
- data/lib/hecks/hecks/shapes.json +1 -15
- data/lib/hecks/hecks/site.behaviors +1 -1
- data/lib/hecks/hecks/start/start.bluebook +194 -0
- data/lib/hecks/hecks/test/test.bluebook +638 -0
- data/lib/hecks/hecks/tickets.world +14 -0
- data/lib/hecks/language/bluebook/aggregate.bluebook +22 -0
- data/lib/hecks/language/bluebook/bluebook.bluebook +34 -0
- data/lib/hecks/language/bluebook/command.bluebook +35 -0
- data/lib/hecks/language/bluebook/process_manager.bluebook +14 -1
- data/lib/hecks/language/bluebook/vocabulary.bluebook +174 -54
- data/lib/hecks/language/hecksagon/domain_port.bluebook +1 -0
- data/lib/hecks/language/hecksagon/port_operation.bluebook +14 -0
- data/lib/hecks/language/kinds/run.kind +120 -0
- data/lib/hecks/language/oidc.json +10 -0
- data/lib/hecks/language/translation/translation_aggregate.bluebook +24 -0
- data/lib/hecks/module_folders.rb +31 -0
- data/lib/hecks/ports/key_vault.rb +1 -1
- data/lib/hecks/ports/persistence/append_only.rb +26 -8
- data/lib/hecks/ports/persistence/binding_policy.rb +3 -1
- data/lib/hecks/ports/persistence/codec_boundary.rb +1 -1
- data/lib/hecks/ports/persistence/mint_door.rb +74 -0
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +6 -5
- data/lib/hecks/ports/persistence/plugins/era/era_guard/shape_diff.rb +5 -1
- data/lib/hecks/ports/persistence/plugins/era/era_status.rb +48 -0
- data/lib/hecks/ports/persistence/plugins/era/projected_bluebook.rb +127 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/additive_shape.rb +107 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/compose.rb +155 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/compose_render.rb +79 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/edge_files.rb +49 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/edge_route.rb +61 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/implicit_edge.rb +67 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/reconcile.rb +130 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/reconcile_files.rb +35 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/differ.rb +13 -5
- data/lib/hecks/ports/persistence/plugins/era/translation.rb +5 -0
- data/lib/hecks/ports/persistence/plugins/era.rb +1 -0
- data/lib/hecks/ports/persistence/repository_factory.rb +11 -3
- data/lib/hecks/ports/persistence/stored_name_guard.rb +36 -0
- data/lib/hecks/ports/persistence.rb +2 -0
- data/lib/hecks/projections/ci_pipeline/table/checks.rb +137 -0
- data/lib/hecks/projections/ci_pipeline/table/lookup.rb +59 -0
- data/lib/hecks/projections/ci_pipeline/table/refusals.rb +58 -0
- data/lib/hecks/projections/ci_pipeline/table/rows.rb +119 -0
- data/lib/hecks/projections/ci_pipeline/table/tree.rb +30 -0
- data/lib/hecks/projections/ci_pipeline/table/typing.rb +92 -0
- data/lib/hecks/projections/ci_pipeline/table.rb +112 -0
- data/lib/hecks/projections/ci_pipeline/workflows.rb +162 -0
- data/lib/hecks/projections/ci_pipeline/yaml_text.rb +104 -0
- data/lib/hecks/projections/deploy/box/hosting.rb +1 -1
- data/lib/hecks/projections/deploy/box/roll_recipe.rb +1 -1
- data/lib/hecks/projections/deploy/box/roll_scripts.rb +1 -1
- data/lib/hecks/projections/deploy/box.rb +1 -1
- data/lib/hecks/projections/deploy/templates/fargate/Makefile.tmpl +1 -1
- data/lib/hecks/projections/deploy/templates/lambda/Makefile.tmpl +3 -3
- data/lib/hecks/projections/undo.rb +46 -0
- data/lib/hecks/projections.rb +2 -0
- data/lib/hecks/projector/cli_projector/claims.rb +11 -0
- data/lib/hecks/projector/cli_projector/command_help.rb +6 -1
- data/lib/hecks/projector/cli_projector/command_specs.rb +11 -1
- data/lib/hecks/projector/cli_projector/completion.rb +87 -0
- data/lib/hecks/projector/cli_projector/everyday.rb +40 -0
- data/lib/hecks/projector/cli_projector/json_listing.rb +77 -0
- data/lib/hecks/projector/cli_projector/listing.rb +1 -1
- data/lib/hecks/projector/cli_projector/modules.rb +39 -0
- data/lib/hecks/projector/cli_projector/query_specs.rb +1 -0
- data/lib/hecks/projector/cli_projector/renames.rb +58 -0
- data/lib/hecks/projector/cli_projector/search.rb +74 -0
- data/lib/hecks/projector/cli_projector/usage.rb +23 -6
- data/lib/hecks/projector/cli_projector.rb +24 -1
- data/lib/hecks/quality_control/adapters/ci_head.adapter +8 -0
- data/lib/hecks/quality_control/adapters/image_roll.adapter +9 -0
- data/lib/hecks/quality_control/adapters/image_roll.rb +158 -0
- data/lib/hecks/quality_control/adapters/main_maintenance.adapter +8 -0
- data/lib/hecks/quality_control/adapters/main_maintenance.rb +275 -0
- data/lib/hecks/quality_control/adapters/pump_tools.adapter +7 -0
- data/lib/hecks/quality_control/adapters/pump_tools.rb +18 -0
- data/lib/hecks/quality_control/adapters/push_due_reader.adapter +8 -0
- data/lib/hecks/quality_control/adapters/push_due_reader.rb +99 -0
- data/lib/hecks/quality_control/adapters/qa_auto_mint.rb +183 -0
- data/lib/hecks/quality_control/adapters/qa_era_mint.rb +94 -0
- data/lib/hecks/quality_control/adapters/qa_quiesce_marker.rb +126 -0
- data/lib/hecks/quality_control/adapters/run_keys.rb +36 -0
- data/lib/hecks/quality_control/adapters/run_reader.adapter +7 -0
- data/lib/hecks/quality_control/adapters/run_reader.rb +188 -0
- data/lib/hecks/quality_control/cli/child.rb +1 -0
- data/lib/hecks/quality_control/cli/qa_discover_external_domains/scanning.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_domain_novelty.rb +3 -3
- data/lib/hecks/quality_control/cli/qa_event_pump/attached.rb +67 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/consumer.rb +103 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/cursors.rb +60 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/reactions.rb +46 -0
- data/lib/hecks/quality_control/cli/qa_event_pump/reader.rb +30 -0
- data/lib/hecks/quality_control/cli/qa_event_pump.rb +76 -0
- data/lib/hecks/quality_control/cli/qa_fix_main_bug/publishing.rb +79 -0
- data/lib/hecks/quality_control/cli/qa_fix_main_bug.rb +167 -0
- data/lib/hecks/quality_control/cli/qa_generated_domains/evaluation.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_generated_domains/promotion.rb +3 -3
- data/lib/hecks/quality_control/cli/qa_main_gate/gate_run.rb +52 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/logging.rb +70 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/shell.rb +47 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/sweeping.rb +59 -0
- data/lib/hecks/quality_control/cli/qa_main_gate/worktree.rb +62 -0
- data/lib/hecks/quality_control/cli/qa_main_gate.rb +135 -0
- data/lib/hecks/quality_control/cli/qa_postgres_role.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_pr_check/checking.rb +2 -3
- data/lib/hecks/quality_control/cli/qa_push_nudge.rb +48 -0
- data/lib/hecks/quality_control/cli/qa_seed_angles/seed.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_sweep/seat.rb +1 -1
- data/lib/hecks/quality_control/cli/qa_tick/event_pump_step.rb +34 -0
- data/lib/hecks/quality_control/cli/qa_tick/output.rb +16 -1
- data/lib/hecks/quality_control/cli/qa_tick/push_nudge_step.rb +28 -0
- data/lib/hecks/quality_control/cli/qa_tick/quiesce_guard.rb +51 -0
- data/lib/hecks/quality_control/cli/qa_tick.rb +36 -8
- data/lib/hecks/quality_control/quality_control.behaviors +65 -0
- data/lib/hecks/quality_control/quality_control.bluebook +1131 -11
- data/lib/hecks/quality_control/quality_control.hecksagon +11 -0
- data/lib/hecks/quality_control/quality_control.ports.hecksagon +138 -0
- data/lib/hecks/query_ir/touchpoints.rb +5 -7
- data/lib/hecks/refused.rb +21 -0
- data/lib/hecks/release/approval.rb +6 -3
- data/lib/hecks/release/conditions.rb +46 -0
- data/lib/hecks/release/runner/gem_publisher.rb +4 -4
- data/lib/hecks/release/version_commit.rb +48 -0
- data/lib/hecks/runtime/command_interpreter/hydration.rb +5 -4
- data/lib/hecks/runtime/command_interpreter/persisting.rb +11 -3
- data/lib/hecks/runtime/command_interpreter.rb +2 -2
- data/lib/hecks/runtime/command_rules/admissibility.rb +0 -2
- data/lib/hecks/runtime/command_rules/emission.rb +0 -1
- data/lib/hecks/runtime/dependency_planning/expression_reads.rb +0 -1
- data/lib/hecks/runtime/dispatcher/planning.rb +24 -0
- data/lib/hecks/runtime/dispatcher/routing.rb +6 -0
- data/lib/hecks/runtime/dispatcher/value_routing.rb +54 -0
- data/lib/hecks/runtime/dispatcher.rb +7 -1
- data/lib/hecks/runtime/dry_run_plan.rb +60 -0
- data/lib/hecks/runtime/entity_element/location.rb +0 -1
- data/lib/hecks/runtime/entity_element/mutations.rb +0 -1
- data/lib/hecks/runtime/entity_interpreter/locating.rb +5 -0
- data/lib/hecks/runtime/entity_interpreter.rb +0 -1
- data/lib/hecks/runtime/errors.rb +26 -0
- data/lib/hecks/runtime/instance.rb +0 -1
- data/lib/hecks/runtime/invocation_builder.rb +0 -1
- data/lib/hecks/runtime/outbox/consumer_runner.rb +9 -1
- data/lib/hecks/runtime/outbox/relay.rb +25 -4
- data/lib/hecks/runtime/outbox/runnable.rb +3 -1
- data/lib/hecks/runtime/outbox.rb +6 -2
- data/lib/hecks/runtime/policy_interpreter/fan_out.rb +18 -2
- data/lib/hecks/runtime/policy_interpreter.rb +17 -9
- data/lib/hecks/runtime/port_operation_interpreter.rb +21 -7
- data/lib/hecks/runtime/query_interpreter/arguments.rb +6 -5
- data/lib/hecks/runtime/reaction_invocation.rb +0 -1
- data/lib/hecks/runtime/refusal_wording.rb +12 -1
- data/lib/hecks/runtime/registry/context_maps.rb +1 -5
- data/lib/hecks/runtime/registry/declarations.rb +34 -4
- data/lib/hecks/runtime/registry/hecksagon_rules.rb +15 -1
- data/lib/hecks/runtime/registry/runtime_state.rb +10 -0
- data/lib/hecks/runtime/registry/world_defaults.rb +24 -2
- data/lib/hecks/runtime/registry/world_names.rb +99 -0
- data/lib/hecks/runtime/registry.rb +33 -27
- data/lib/hecks/runtime/saga_interpreter/compensation.rb +10 -0
- data/lib/hecks/runtime/saga_interpreter/correlation.rb +29 -3
- data/lib/hecks/runtime/saga_interpreter/delivery.rb +0 -1
- data/lib/hecks/runtime/saga_interpreter/lifecycle.rb +1 -1
- data/lib/hecks/runtime/saga_interpreter.rb +46 -2
- data/lib/hecks/runtime/value/coercion.rb +36 -8
- data/lib/hecks/rust_build/conformance.rb +16 -5
- data/lib/hecks/rust_build/parser.rb +25 -0
- data/lib/hecks/rust_build/project_rust/codegen_run.rb +45 -12
- data/lib/hecks/rust_build/project_rust/declared.rb +80 -0
- data/lib/hecks/rust_build/project_rust/features_header.rb +22 -0
- data/lib/hecks/rust_build/project_rust/manifest.rb +96 -0
- data/lib/hecks/rust_build/project_rust/meta.rb +36 -0
- data/lib/hecks/rust_build/project_rust.rb +28 -90
- data/lib/hecks/rust_build/write_if_changed.rb +19 -4
- data/lib/hecks/rust_build.rb +2 -1
- data/lib/hecks/rust_format.rb +32 -2
- data/lib/hecks/secrets.rb +111 -0
- data/lib/hecks/shape_ledger/edge_hygiene.rb +170 -0
- data/lib/hecks/shape_ledger/scope.rb +51 -0
- data/lib/hecks/shape_ledger/status.rb +89 -0
- data/lib/hecks/shape_ledger.rb +78 -33
- data/lib/hecks/site/bluebook/site.bluebook +1 -0
- data/lib/hecks/storehouse/audit.rb +34 -4
- data/lib/hecks/storehouse/callers.rb +8 -0
- data/lib/hecks/storehouse/dispatching.rb +14 -3
- data/lib/hecks/storehouse/identity.rb +41 -0
- data/lib/hecks/storehouse/querying.rb +7 -7
- data/lib/hecks/storehouse.rb +28 -10
- data/lib/hecks/tickets/bluebook/adapters/work_areas.adapter +7 -0
- data/lib/hecks/tickets/bluebook/adapters/work_limits.adapter +7 -0
- data/lib/hecks/tickets/bluebook/tickets.behaviors +70 -0
- data/lib/hecks/tickets/bluebook/tickets.bluebook +323 -28
- data/lib/hecks/tickets/bluebook/tickets.hecksagon +7 -0
- data/lib/hecks/tickets/bluebook/tickets.ports.hecksagon +17 -0
- data/lib/hecks/{cli → tools}/behaviors.rb +1 -1
- data/lib/hecks/{cli → tools}/canonicalise.rb +1 -1
- data/lib/hecks/{cli → tools}/check_engine_agreement.rb +1 -1
- data/lib/hecks/{cli → tools}/check_era.rb +6 -6
- data/lib/hecks/tools/ci_gates.rb +8 -2
- data/lib/hecks/tools/ci_workflows.rb +98 -0
- data/lib/hecks/{cli → tools}/console.rb +1 -1
- data/lib/hecks/{cli → tools}/deploy_template_diff.rb +1 -1
- data/lib/hecks/{cli → tools}/doc_coverage.rb +2 -2
- data/lib/hecks/{cli → tools}/document.rb +1 -1
- data/lib/hecks/{cli → tools}/domain_stub.rb +1 -1
- data/lib/hecks/{cli → tools}/domain_writer.rb +1 -1
- data/lib/hecks/tools/downstream_model_check.rb +122 -0
- data/lib/hecks/tools/evolve_run.rb +2 -2
- data/lib/hecks/{cli → tools}/expected_era.rb +1 -1
- data/lib/hecks/{cli → tools}/expression_projection.rb +1 -1
- data/lib/hecks/{cli → tools}/follow.rb +1 -1
- data/lib/hecks/tools/fuzz_sweep/options.rb +40 -5
- data/lib/hecks/tools/fuzz_sweep/pool.rb +12 -1
- data/lib/hecks/tools/fuzz_sweep/shards.rb +155 -0
- data/lib/hecks/tools/fuzz_sweep.rb +11 -5
- data/lib/hecks/tools/gate.rb +38 -29
- data/lib/hecks/tools/gate_memo/local_files.rb +33 -0
- data/lib/hecks/tools/gate_memo/rehearsal.rb +54 -0
- data/lib/hecks/tools/gate_memo/ruby_files.rb +152 -0
- data/lib/hecks/tools/gate_memo/session.rb +114 -0
- data/lib/hecks/tools/gate_memo/standalone.rb +67 -0
- data/lib/hecks/tools/gate_memo.rb +196 -0
- data/lib/hecks/tools/gate_report.rb +56 -0
- data/lib/hecks/{cli → tools}/history.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_agent.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_aggregate.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_draft.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_record.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_run.rb +2 -2
- data/lib/hecks/{cli → tools}/interview_session/agent_state.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session/catalog.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session/manual_findings.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session/proposals.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_session.rb +2 -2
- data/lib/hecks/{cli → tools}/interview_shape/lifecycle.rb +1 -1
- data/lib/hecks/{cli → tools}/interview_shape.rb +1 -1
- data/lib/hecks/{cli → tools}/ir.rb +1 -1
- data/lib/hecks/tools/lanes/files.rb +1 -1
- data/lib/hecks/tools/lanes/watch_workflow.rb +6 -8
- data/lib/hecks/tools/lanes/workflow.rb +1 -1
- data/lib/hecks/tools/lanes.rb +1 -1
- data/lib/hecks/{cli → tools}/mcp.rb +1 -1
- data/lib/hecks/{cli → tools}/model_check/examination.rb +1 -1
- data/lib/hecks/{cli → tools}/model_check/sources.rb +1 -1
- data/lib/hecks/{cli → tools}/model_check.rb +1 -1
- data/lib/hecks/tools/move_disables/reasons.rb +35 -0
- data/lib/hecks/tools/move_disables.rb +211 -0
- data/lib/hecks/tools/move_former_name.rb +105 -0
- data/lib/hecks/{cli → tools}/pattern_cases.rb +1 -1
- data/lib/hecks/{cli → tools}/persistence_notice.rb +1 -1
- data/lib/hecks/{cli → tools}/present.rb +1 -1
- data/lib/hecks/{cli → tools}/project_cli/launcher_source.rb +32 -22
- data/lib/hecks/{cli → tools}/project_cli/templates.rb +22 -15
- data/lib/hecks/{cli → tools}/project_cli.rb +11 -7
- data/lib/hecks/{cli → tools}/project_diagrams.rb +3 -3
- data/lib/hecks/{cli → tools}/project_glossary.rb +2 -2
- data/lib/hecks/{cli → tools}/reference.rb +2 -2
- data/lib/hecks/{cli → tools}/refresh_projections.rb +1 -1
- data/lib/hecks/{cli → tools}/refresh_rspec_runtime_baseline.rb +1 -1
- data/lib/hecks/tools/regeneration_run/pool.rb +148 -0
- data/lib/hecks/tools/regeneration_run/scratch.rb +76 -0
- data/lib/hecks/tools/regeneration_run.rb +125 -103
- data/lib/hecks/{cli → tools}/release.rb +1 -1
- data/lib/hecks/{cli → tools}/release_gem.rb +1 -1
- data/lib/hecks/{cli → tools}/rspec_io_parallel_files.rb +1 -1
- data/lib/hecks/{cli → tools}/rspec_shard_files.rb +1 -1
- data/lib/hecks/{cli → tools}/run.rb +9 -2
- data/lib/hecks/{cli → tools}/run_expectations.rb +1 -1
- data/lib/hecks/{cli → tools}/seed_semantics_corpus.rb +4 -4
- data/lib/hecks/{cli → tools}/serve_query_ir_mcp.rb +1 -1
- data/lib/hecks/{cli → tools}/shape.rb +3 -2
- data/lib/hecks/{cli → tools}/smoke_http/checks.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_http/settings.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_http/transport.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_http.rb +1 -1
- data/lib/hecks/{cli → tools}/smoke_test.rb +1 -1
- data/lib/hecks/{cli → tools}/spec_example.rb +1 -1
- data/lib/hecks/tools/stage_progress.rb +54 -0
- data/lib/hecks/{cli → tools}/statements.rb +1 -1
- data/lib/hecks/{cli → tools}/stores.rb +1 -1
- data/lib/hecks/{cli → tools}/stress_concurrency_specs/reporting.rb +1 -1
- data/lib/hecks/{cli → tools}/stress_concurrency_specs/usage.rb +4 -4
- data/lib/hecks/{cli → tools}/stress_concurrency_specs.rb +3 -3
- data/lib/hecks/tools/tenant_provisioning.rb +23 -0
- data/lib/hecks/tools/tools_doc.rb +10 -8
- data/lib/hecks/tools/translation_audit/edges.rb +21 -16
- data/lib/hecks/tools/translation_audit/verdicts.rb +1 -1
- data/lib/hecks/tools/translation_audit.rb +1 -1
- data/lib/hecks/tools/translation_scaffold.rb +1 -1
- data/lib/hecks/tools.rb +4 -1
- data/lib/hecks/version.rb +1 -1
- data/lib/hecks/vocabulary.rb +61 -31
- data/lib/hecks/workflow_pagination/judge.rb +48 -0
- data/lib/hecks/workflow_pagination/statement.rb +50 -0
- data/lib/hecks/workflow_pagination.rb +58 -0
- data/lib/hecks.rb +2 -0
- data/lib/rubocop/cop/hecks/bare_event_and_query_names.rb +58 -0
- data/lib/rubocop/cop/hecks/correlates_by_aggregate.rb +39 -0
- data/lib/rubocop/cop/hecks/creating_command_sets.rb +75 -0
- data/lib/rubocop/cop/hecks/invariant_expression_language.rb +47 -0
- data/lib/rubocop/cop/hecks/lifecycle_needs_attribute.rb +58 -0
- data/lib/rubocop/cop/hecks/no_id_string_attribute.rb +49 -0
- data/lib/rubocop/cop/hecks/one_terminal_mark_per_lifecycle.rb +47 -0
- data/lib/rubocop/cop/hecks/value_object_shorthand.rb +56 -0
- data/prebuilt/13c04bdc5970295b310f0a980d397ba722232c8da99cc1a0cdb383249921e871.marshal +0 -0
- data/prebuilt/e3857b77f47d9ecc1787b2e1f5136364f3cb3444ef4aea5479f3b98167affea2.marshal +0 -0
- data/qa/settings.yml +23 -0
- data/rust/.gitignore +0 -6
- data/rust/Cargo.toml +2 -1
- data/rust/build/Cargo.toml +1 -1
- data/rust/build/src/binding_pass.rs +57 -4
- data/rust/build/src/pipeline.rs +6 -4
- data/rust/build/src/resolve.rs +1 -0
- data/rust/codegen/Cargo.toml +1 -1
- data/rust/codegen/src/domain_generator.rs +3 -0
- data/rust/codegen/src/json_codec.rs +182 -23
- data/rust/codegen/src/one_of_references.rs +1 -0
- data/rust/codegen/src/queries.rs +20 -2
- data/rust/codegen/src/registry.rs +21 -5
- data/rust/expr/Cargo.toml +1 -1
- data/rust/host/Cargo.toml +1 -1
- data/rust/host/HECKS_RELEASE +1 -1
- data/rust/host/core/Cargo.toml +1 -1
- data/rust/host/src/bin/mint_harness.rs +1 -0
- data/rust/host/src/boot.rs +1 -0
- data/rust/host/src/store/mint.rs +40 -6
- data/rust/lsp/Cargo.toml +1 -1
- data/rust/parser/Cargo.toml +1 -1
- data/rust/parser/src/build/correlation_keys.rs +125 -0
- data/rust/parser/src/build/mod.rs +1 -0
- data/rust/parser/src/emit.rs +55 -3
- data/rust/parser/src/ir.rs +33 -1
- data/rust/parser/src/keywords.rs +289 -1
- data/rust/parser/src/main.rs +2 -0
- data/rust/parser/src/parse/aggregate.rs +10 -1
- data/rust/parser/src/parse/audience.rs +65 -0
- data/rust/parser/src/parse/command.rs +14 -0
- data/rust/parser/src/parse/declaration.rs +97 -0
- data/rust/parser/src/parse/domain_port.rs +6 -0
- data/rust/parser/src/parse/mod.rs +1 -0
- data/rust/parser/src/parse/process_manager.rs +17 -10
- data/rust/parser/src/parse/world.rs +12 -8
- data/rust/parser/src/render_ruby.rs +9 -0
- data/rust/parser/src/sentence/format.rs +3 -0
- data/rust/parser/src/sentence/process.rs +6 -2
- data/rust/src/exemplar/json.rs +17 -0
- data/rust/src/kernel/cli.rs +27 -3
- data/rust/src/kernel/dispatch.rs +4 -2
- data/rust/src/kernel/json.rs +62 -0
- data/rust/src/kernel/orchestrate.rs +28 -3
- data/rust/src/kernel/orchestrate_guard_tests.rs +12 -12
- data/rust/web/Cargo.toml +1 -1
- metadata +389 -96
- data/lib/hecks/cli/command_table.rb +0 -72
- data/lib/hecks/cli/launcher_words.rb +0 -168
- data/lib/hecks/cli.rb +0 -133
- data/lib/hecks/hecks/agents.bluebook +0 -246
- data/lib/hecks/hecks/codebase.bluebook +0 -3209
- data/lib/hecks/hecks/custodian.bluebook +0 -1300
- data/lib/hecks/hecks/ledger.bluebook +0 -190
- data/lib/hecks/hecks/rehearsal.bluebook +0 -437
- data/lib/hecks/hecks/tooling.bluebook +0 -1234
- data/lib/hecks/hecks/translations/2-148748.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-15a2e4.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-1b447c.bluebook +0 -5
- data/lib/hecks/hecks/translations/2-240474.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-44446d.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-46ca26.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-473eab.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-75cc28.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-781c07.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-84c18b.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-aa5fff.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-bfdb48.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-cd96d8.bluebook +0 -10
- data/lib/hecks/hecks/translations/2-d43f71.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-eea577.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-f53248.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-fbb677.bluebook +0 -2
- data/lib/hecks/hecks/translations/2-ffdf12.bluebook +0 -6
- data/lib/hecks/quality_control/adapters/clearance_recorder.rb +0 -36
- data/lib/hecks/quality_control/adapters/github_ci_webhook.rb +0 -56
- data/prebuilt/31cf81e12f16236ad26249be590cfea3799c9db67432e6a4ef54b801c355b6ae.marshal +0 -0
- data/prebuilt/68ecb2bd3abb1a221007db4f2b0375834c13aaccac8f2b99778e8517f11aa113.marshal +0 -0
- data/prebuilt/verdicts-0328c2403383837d780ad5ed81d1da351c56436b894cf9015b5d56b8f1f1bf10.json +0 -1
|
@@ -0,0 +1,966 @@
|
|
|
1
|
+
Hecks.bluebook "Hecks" do
|
|
2
|
+
domain_module "Check" do
|
|
3
|
+
vision "Is it right? Gate, model check, style, inspection and audit."
|
|
4
|
+
|
|
5
|
+
# Gate: the checks a stage holds a change against before it is let through. The checks are data
|
|
6
|
+
# (the Vocabulary gate rows), run together, and a red one faults the run, so `--wait` fails the
|
|
7
|
+
# push or the build that asked, and the journal keeps when the gate went red.
|
|
8
|
+
#
|
|
9
|
+
# Reuse rule (enforced by Tools::GateMemo): a check is skipped only when its inputs hash the
|
|
10
|
+
# same as the inputs of its last green run, and the skip is reported as "skipped", never as
|
|
11
|
+
# passed. The inputs are the files the check reads (GateMemo::INPUTS, by content hash), its
|
|
12
|
+
# command and its environment. A red result is never reused, and an unreadable or unwritable
|
|
13
|
+
# memo runs every check in full and says so. RuboCop reuses per file: the run is skipped only
|
|
14
|
+
# when the Ruby files and their hashes match the last green run; otherwise it lints the
|
|
15
|
+
# changed files and the files that require them, and runs in full when that set cannot be
|
|
16
|
+
# worked out (GateMemo::RubyFiles).
|
|
17
|
+
#
|
|
18
|
+
# The memo is kept outside the checkout, in the file `HECKS_GATE_MEMO` names, or else in
|
|
19
|
+
# gate_memo.json under the hecks-dev directory of the user's Claude directory.
|
|
20
|
+
aggregate "GateRun" do
|
|
21
|
+
description "One run of a stage's checks: every check of the stage, or the ones named."
|
|
22
|
+
|
|
23
|
+
attribute :run, RunKey
|
|
24
|
+
attribute :operation, Operation, optional: true
|
|
25
|
+
attribute :stage, Stage
|
|
26
|
+
attribute :only, CheckList, optional: true
|
|
27
|
+
attribute :checkout, Switch, optional: true
|
|
28
|
+
attribute :report, Report, optional: true
|
|
29
|
+
attribute :refusal, Report, optional: true
|
|
30
|
+
identified_by :run
|
|
31
|
+
|
|
32
|
+
value_object "RunKey" do
|
|
33
|
+
attribute :value, String, matches: :present
|
|
34
|
+
|
|
35
|
+
invariant("a run is named") { !value.to_s.empty? }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
value_object "Operation" do
|
|
39
|
+
attribute :value, String, matches: :present
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
value_object "Stage" do
|
|
43
|
+
attribute :value, String, matches: :snake_name
|
|
44
|
+
|
|
45
|
+
invariant("a stage is named") { !value.to_s.empty? }
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
value_object "CheckList" do
|
|
49
|
+
attribute :value, String, pattern: '^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$'
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
value_object "Switch" do
|
|
53
|
+
attribute :value, Boolean
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
value_object "Report" do
|
|
57
|
+
attribute :value, String
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
lifecycle :status, default: "requested" do
|
|
61
|
+
mark :failure, "faulted"
|
|
62
|
+
transition "Accept" => "accepted", from: "requested"
|
|
63
|
+
transition "Complete" => "completed", from: "accepted"
|
|
64
|
+
transition "Fault" => "faulted", from: %w[requested accepted]
|
|
65
|
+
mark :terminal, "completed", "faulted"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
command "Gate" do
|
|
69
|
+
role "Maintainer"
|
|
70
|
+
goal "Run every check of a stage, or the ones named, and keep whether the gate is green"
|
|
71
|
+
|
|
72
|
+
attribute :stage, Stage, sets: true
|
|
73
|
+
attribute :only, CheckList, optional: true, sets: true
|
|
74
|
+
attribute :run, RunKey, sets: true
|
|
75
|
+
|
|
76
|
+
sets :operation, to: "gate"
|
|
77
|
+
|
|
78
|
+
emits GateRequested
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
command "Accept" do
|
|
82
|
+
role "System"
|
|
83
|
+
goal "Let a request through only when the working tree is a hecks checkout"
|
|
84
|
+
|
|
85
|
+
reference_to GateRun
|
|
86
|
+
attribute :checkout, Switch, sets: true
|
|
87
|
+
|
|
88
|
+
given("needs a hecks checkout: hecks.gemspec stands beside lib/") { checkout.value }
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
emits GateAccepted
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
command "Complete" do
|
|
95
|
+
role "System"
|
|
96
|
+
goal "Record that every check passed, and which"
|
|
97
|
+
|
|
98
|
+
reference_to GateRun
|
|
99
|
+
attribute :report, Report, sets: true
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
emits GateCompleted
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
command "Fault" do
|
|
106
|
+
role "System"
|
|
107
|
+
goal "Record that a check was red or the run could not be made, and why"
|
|
108
|
+
|
|
109
|
+
reference_to GateRun
|
|
110
|
+
attribute :refusal, Report, sets: true
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
emits GateFaulted
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
query "GateOutcome" do
|
|
117
|
+
description "How one run ended: its status, and what it reported or why it failed."
|
|
118
|
+
attribute :run, RunKey
|
|
119
|
+
where(run: :run)
|
|
120
|
+
order_by :run
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
query "GateFaulted" do
|
|
124
|
+
description "Every run that went red or could not be made."
|
|
125
|
+
where(status: "faulted")
|
|
126
|
+
order_by :run
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
policy "ExamineWhenGateRequested" do
|
|
131
|
+
on "GateRun.GateRequested"
|
|
132
|
+
ask :examine, with: { run: :run }
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
policy "AcceptGateWhenExamined" do
|
|
136
|
+
on "GateRun.GateExamined"
|
|
137
|
+
trigger GateRun::Accept, with: { checkout: :checkout }
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
policy "FaultGateWhenNotAccepted" do
|
|
141
|
+
on "GateRun.GateExamined"
|
|
142
|
+
where { !checkout.value }
|
|
143
|
+
trigger GateRun::Fault, with: { refusal: "needs a hecks checkout: hecks.gemspec stands beside lib/" }
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
policy "PerformGateWhenAccepted" do
|
|
147
|
+
on "GateRun.GateAccepted"
|
|
148
|
+
ask :perform, with: { run: :run }
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
policy "RecordGateOutcome" do
|
|
152
|
+
on "GateRun.GateAnswered"
|
|
153
|
+
trigger GateRun::Complete, with: { report: :report }
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
policy "RecordGateFault" do
|
|
157
|
+
on "GateRun.GateRefused"
|
|
158
|
+
trigger GateRun::Fault, with: { refusal: :refusal }
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# A journaled command whose work happens outside the runtime (ADR 0080, section 11). Every
|
|
162
|
+
# command below that runs something follows this one shape, so later aggregates copy it:
|
|
163
|
+
#
|
|
164
|
+
# 1. A creating command records the request as a record in state "requested" and emits.
|
|
165
|
+
# 2. A policy on that event asks for the work by name (`ask :check`); the hecksagon says which
|
|
166
|
+
# port answers. The runtime hands the port's adapter the whole record, so the adapter does
|
|
167
|
+
# all the IO, and only there.
|
|
168
|
+
# 3. The adapter answers (a hash named like a command's arguments) or raises (its message
|
|
169
|
+
# is the refusal). One policy per outcome re-enters the record with a command that stores it.
|
|
170
|
+
#
|
|
171
|
+
# The ports are declared in hecks.hecksagon; each adapter is in adapters/.
|
|
172
|
+
|
|
173
|
+
aggregate "ModelCheckRun" do
|
|
174
|
+
description "One static analysis over domains' models, and what it found: a check's history."
|
|
175
|
+
|
|
176
|
+
attribute :run, RunKey
|
|
177
|
+
attribute :domains, DomainList, optional: true
|
|
178
|
+
attribute :profile, ProfileName, optional: true
|
|
179
|
+
attribute :strict, Switch, optional: true
|
|
180
|
+
attribute :report, Report, optional: true
|
|
181
|
+
attribute :checked, Checked, optional: true
|
|
182
|
+
attribute :refusal, Report, optional: true
|
|
183
|
+
identified_by :run
|
|
184
|
+
|
|
185
|
+
value_object "RunKey" do
|
|
186
|
+
attribute :value, String, matches: :present
|
|
187
|
+
|
|
188
|
+
invariant("a run is named") { !value.to_s.empty? }
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
value_object "DomainList" do
|
|
192
|
+
attribute :value, String, matches: :not_empty
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
value_object "ProfileName" do
|
|
196
|
+
attribute :value, String, pattern: '^client$'
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
value_object "Switch" do
|
|
200
|
+
attribute :value, Boolean
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
value_object "Report" do
|
|
204
|
+
attribute :value, String
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# How many domains the report examined, counted from its headers so a reader need not.
|
|
208
|
+
value_object "Checked" do
|
|
209
|
+
attribute :value, Integer
|
|
210
|
+
|
|
211
|
+
invariant("a count is not negative") { value >= 0 }
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
lifecycle :status, default: "requested" do
|
|
215
|
+
mark :failure, "flagged"
|
|
216
|
+
transition "Pass" => "clean", from: "requested"
|
|
217
|
+
transition "Flag" => "flagged", from: "requested"
|
|
218
|
+
mark :terminal, "clean", "flagged"
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
command "ModelCheck" do
|
|
222
|
+
role "Operator"
|
|
223
|
+
goal "Check domains for dead states and unreachable steps, and keep the verdict"
|
|
224
|
+
|
|
225
|
+
attribute :run, RunKey, sets: true
|
|
226
|
+
attribute :domains, DomainList, optional: true, sets: true
|
|
227
|
+
attribute :profile, ProfileName, optional: true, sets: true
|
|
228
|
+
attribute :strict, Switch, optional: true, sets: true
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
emits ModelCheckRequested
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
command "Pass" do
|
|
235
|
+
role "System"
|
|
236
|
+
goal "Record that the analysis left no error"
|
|
237
|
+
|
|
238
|
+
reference_to ModelCheckRun
|
|
239
|
+
attribute :report, Report, sets: true
|
|
240
|
+
attribute :checked, Checked, sets: true
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
emits ModelCheckPassed
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
command "Flag" do
|
|
247
|
+
role "System"
|
|
248
|
+
goal "Record that the analysis found something, or could not run, and what it said"
|
|
249
|
+
|
|
250
|
+
reference_to ModelCheckRun
|
|
251
|
+
attribute :refusal, Report, sets: true
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
emits ModelCheckFlagged
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
# `hecks model_check` answers once the request is recorded, so the verdict is read here.
|
|
258
|
+
query "Verdict" do
|
|
259
|
+
description "What one check found: its status, and the report or the reason it could not run."
|
|
260
|
+
attribute :run, RunKey
|
|
261
|
+
where(run: :run)
|
|
262
|
+
order_by :run
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
query "Flagged" do
|
|
266
|
+
description "Every check that left a finding or could not run."
|
|
267
|
+
where(status: "flagged")
|
|
268
|
+
order_by :run
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
policy "AnalyseWhenRequested" do
|
|
273
|
+
on "ModelCheckRun.ModelCheckRequested"
|
|
274
|
+
ask :check, with: { run: :run }
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
policy "RecordTheClean" do
|
|
278
|
+
on "ModelCheckRun.ModelCheckAnswered"
|
|
279
|
+
trigger ModelCheckRun::Pass, with: { report: :report, checked: :checked }
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
policy "RecordTheFlag" do
|
|
283
|
+
on "ModelCheckRun.ModelCheckRefused"
|
|
284
|
+
trigger ModelCheckRun::Flag, with: { refusal: :refusal }
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
# Conformance: the checks on the language itself. Each finds every disagreement and refuses with
|
|
288
|
+
# them all, so a check that fails is recorded as faulted with what it found. The argument-gate
|
|
289
|
+
# matrix rewrites a committed matrix and its fixtures, so it only reports unless it is confirmed.
|
|
290
|
+
aggregate "ConformanceRun", kind: "Run" do
|
|
291
|
+
description "One check that the engines, the reference docs and the argument gates agree with the language."
|
|
292
|
+
|
|
293
|
+
attribute :confirm, Switch, optional: true
|
|
294
|
+
attribute :additive, Switch, optional: true
|
|
295
|
+
|
|
296
|
+
command "CheckEngineAgreement" do
|
|
297
|
+
role "Maintainer"
|
|
298
|
+
goal "Check that the query engines route every comparator through the one shared implementation"
|
|
299
|
+
|
|
300
|
+
attribute :run, RunKey, sets: true
|
|
301
|
+
|
|
302
|
+
sets :operation, to: "check_engine_agreement"
|
|
303
|
+
|
|
304
|
+
emits CheckEngineAgreementRequested
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
command "MeasureDocCoverage" do
|
|
308
|
+
role "Maintainer"
|
|
309
|
+
goal "Check that every live word of the language has prose and a running example in the reference"
|
|
310
|
+
|
|
311
|
+
attribute :run, RunKey, sets: true
|
|
312
|
+
|
|
313
|
+
sets :operation, to: "measure_doc_coverage"
|
|
314
|
+
|
|
315
|
+
emits MeasureDocCoverageRequested
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
command "CheckShapeLedger" do
|
|
319
|
+
role "Maintainer"
|
|
320
|
+
goal "Check that no bluebook's storage shape moved without a translation edge, and rewrite the ledger when confirmed"
|
|
321
|
+
|
|
322
|
+
attribute :run, RunKey, sets: true
|
|
323
|
+
attribute :confirm, Switch, optional: true, sets: true
|
|
324
|
+
# With `confirm`: write the empty edge for a shape that moved with none, for a change that only adds.
|
|
325
|
+
attribute :additive, Switch, optional: true, sets: true
|
|
326
|
+
|
|
327
|
+
sets :operation, to: "check_shape_ledger"
|
|
328
|
+
|
|
329
|
+
emits CheckShapeLedgerRequested
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
command "CheckCommandNames" do
|
|
333
|
+
role "Maintainer"
|
|
334
|
+
goal "Check that every launcher name a workflow, hook, gate row, spec or guide invokes is one the launcher accepts"
|
|
335
|
+
|
|
336
|
+
attribute :run, RunKey, sets: true
|
|
337
|
+
|
|
338
|
+
sets :operation, to: "check_command_names"
|
|
339
|
+
|
|
340
|
+
emits CheckCommandNamesRequested
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
command "CheckWorkflowPagination" do
|
|
344
|
+
role "Maintainer"
|
|
345
|
+
goal "Check that no workflow counts or waits on the items of a GitHub list call that returns only its first page"
|
|
346
|
+
|
|
347
|
+
attribute :run, RunKey, sets: true
|
|
348
|
+
|
|
349
|
+
sets :operation, to: "check_workflow_pagination"
|
|
350
|
+
|
|
351
|
+
emits CheckWorkflowPaginationRequested
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
command "ArgumentGateMatrix" do
|
|
355
|
+
role "Maintainer"
|
|
356
|
+
goal "Generate the argument-gate ordering matrix; rewrite it and its fixtures only when confirmed"
|
|
357
|
+
|
|
358
|
+
attribute :run, RunKey, sets: true
|
|
359
|
+
attribute :confirm, Switch, optional: true, sets: true
|
|
360
|
+
|
|
361
|
+
sets :operation, to: "argument_gate_matrix"
|
|
362
|
+
|
|
363
|
+
emits ArgumentGateMatrixRequested
|
|
364
|
+
end
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
policy "ExamineWhenCheckEngineAgreementRequested" do
|
|
368
|
+
on "ConformanceRun.CheckEngineAgreementRequested"
|
|
369
|
+
ask :examine, with: { run: :run }
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
policy "ExamineWhenMeasureDocCoverageRequested" do
|
|
373
|
+
on "ConformanceRun.MeasureDocCoverageRequested"
|
|
374
|
+
ask :examine, with: { run: :run }
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
policy "ExamineWhenCheckShapeLedgerRequested" do
|
|
378
|
+
on "ConformanceRun.CheckShapeLedgerRequested"
|
|
379
|
+
ask :examine, with: { run: :run }
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
policy "ExamineWhenCheckCommandNamesRequested" do
|
|
383
|
+
on "ConformanceRun.CheckCommandNamesRequested"
|
|
384
|
+
ask :examine, with: { run: :run }
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
policy "ExamineWhenCheckWorkflowPaginationRequested" do
|
|
388
|
+
on "ConformanceRun.CheckWorkflowPaginationRequested"
|
|
389
|
+
ask :examine, with: { run: :run }
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
policy "ExamineWhenArgumentGateMatrixRequested" do
|
|
393
|
+
on "ConformanceRun.ArgumentGateMatrixRequested"
|
|
394
|
+
ask :examine, with: { run: :run }
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
# Style: the comment style guides (Ruby and Rust) and the canonical form of a JSON document. A
|
|
398
|
+
# check finds every violation; a fix rewrites files, so it lists what it would rewrite unless
|
|
399
|
+
# it is confirmed. The baseline of tolerated long blocks is written only when confirmed.
|
|
400
|
+
aggregate "StyleRun" do
|
|
401
|
+
description "One check or fix of comment style, or one document written with its keys in order."
|
|
402
|
+
|
|
403
|
+
attribute :run, RunKey
|
|
404
|
+
attribute :operation, Operation, optional: true
|
|
405
|
+
attribute :confirm, Switch, optional: true
|
|
406
|
+
attribute :paths, PathList, optional: true
|
|
407
|
+
attribute :only, CategoryList, optional: true
|
|
408
|
+
attribute :json, Switch, optional: true
|
|
409
|
+
attribute :top, Top, optional: true
|
|
410
|
+
attribute :ref, Ref, optional: true
|
|
411
|
+
attribute :file, FilePath, optional: true
|
|
412
|
+
attribute :checkout, Switch, optional: true
|
|
413
|
+
attribute :report, Report, optional: true
|
|
414
|
+
attribute :refusal, Report, optional: true
|
|
415
|
+
identified_by :run
|
|
416
|
+
|
|
417
|
+
value_object "RunKey" do
|
|
418
|
+
attribute :value, String, matches: :present
|
|
419
|
+
|
|
420
|
+
invariant("a run is named") { !value.to_s.empty? }
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
value_object "Operation" do
|
|
424
|
+
attribute :value, String, matches: :present
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
value_object "Switch" do
|
|
428
|
+
attribute :value, Boolean
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
value_object "Report" do
|
|
432
|
+
attribute :value, String
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
# Files or directories, comma separated.
|
|
436
|
+
value_object "PathList" do
|
|
437
|
+
attribute :value, String, matches: :csv_list
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
# Violation categories, comma separated.
|
|
441
|
+
value_object "CategoryList" do
|
|
442
|
+
attribute :value, String, pattern: '^[a-z_]+(,[a-z_]+)*$'
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
# How many rows a report lists.
|
|
446
|
+
value_object "Top" do
|
|
447
|
+
attribute :value, Integer
|
|
448
|
+
|
|
449
|
+
invariant("a count is positive") { value > 0 }
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
# A revision a code comparison is made against.
|
|
453
|
+
value_object "Ref" do
|
|
454
|
+
attribute :value, String, matches: :no_whitespace
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
# A JSON file.
|
|
458
|
+
value_object "FilePath" do
|
|
459
|
+
attribute :value, String, matches: :not_empty
|
|
460
|
+
|
|
461
|
+
invariant("a file is named") { !value.to_s.empty? }
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
lifecycle :status, default: "requested" do
|
|
465
|
+
mark :failure, "faulted"
|
|
466
|
+
transition "Accept" => "accepted", from: "requested"
|
|
467
|
+
transition "Complete" => "completed", from: "accepted"
|
|
468
|
+
transition "Fault" => "faulted", from: %w[requested accepted]
|
|
469
|
+
mark :terminal, "completed", "faulted"
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
command "CheckComments" do
|
|
473
|
+
role "Maintainer"
|
|
474
|
+
goal "List every comment that breaks the Ruby style guide"
|
|
475
|
+
|
|
476
|
+
attribute :paths, PathList, sets: true
|
|
477
|
+
attribute :only, CategoryList, optional: true, sets: true
|
|
478
|
+
attribute :run, RunKey, sets: true
|
|
479
|
+
|
|
480
|
+
sets :operation, to: "check_comments"
|
|
481
|
+
|
|
482
|
+
emits CheckCommentsRequested
|
|
483
|
+
end
|
|
484
|
+
|
|
485
|
+
command "FixComments" do
|
|
486
|
+
role "Maintainer"
|
|
487
|
+
goal "Rewrite the mechanical Ruby comment violations"
|
|
488
|
+
|
|
489
|
+
attribute :paths, PathList, sets: true
|
|
490
|
+
attribute :only, CategoryList, optional: true, sets: true
|
|
491
|
+
attribute :run, RunKey, sets: true
|
|
492
|
+
attribute :confirm, Switch, optional: true, sets: true
|
|
493
|
+
|
|
494
|
+
sets :operation, to: "fix_comments"
|
|
495
|
+
|
|
496
|
+
emits FixCommentsRequested
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
command "WriteCommentBaseline" do
|
|
500
|
+
role "Maintainer"
|
|
501
|
+
goal "Record every long comment block as tolerated, for lib/hecks unless paths are named"
|
|
502
|
+
|
|
503
|
+
attribute :paths, PathList, optional: true, sets: true
|
|
504
|
+
attribute :run, RunKey, sets: true
|
|
505
|
+
attribute :confirm, Switch, optional: true, sets: true
|
|
506
|
+
|
|
507
|
+
sets :operation, to: "write_comment_baseline"
|
|
508
|
+
|
|
509
|
+
emits WriteCommentBaselineRequested
|
|
510
|
+
end
|
|
511
|
+
|
|
512
|
+
command "CheckCommentsUnchanged" do
|
|
513
|
+
role "Maintainer"
|
|
514
|
+
goal "Prove an edit was comment-only: no file's code differs from the ref"
|
|
515
|
+
|
|
516
|
+
attribute :ref, Ref, sets: true
|
|
517
|
+
attribute :paths, PathList, optional: true, sets: true
|
|
518
|
+
attribute :run, RunKey, sets: true
|
|
519
|
+
|
|
520
|
+
sets :operation, to: "check_comments_unchanged"
|
|
521
|
+
|
|
522
|
+
emits CheckCommentsUnchangedRequested
|
|
523
|
+
end
|
|
524
|
+
|
|
525
|
+
command "CheckRustComments" do
|
|
526
|
+
role "Maintainer"
|
|
527
|
+
goal "List every comment that breaks the Rust style guide"
|
|
528
|
+
|
|
529
|
+
attribute :paths, PathList, sets: true
|
|
530
|
+
attribute :only, CategoryList, optional: true, sets: true
|
|
531
|
+
attribute :run, RunKey, sets: true
|
|
532
|
+
|
|
533
|
+
sets :operation, to: "check_rust_comments"
|
|
534
|
+
|
|
535
|
+
emits CheckRustCommentsRequested
|
|
536
|
+
end
|
|
537
|
+
|
|
538
|
+
command "FixRustComments" do
|
|
539
|
+
role "Maintainer"
|
|
540
|
+
goal "Rewrite the mechanical Rust comment violations"
|
|
541
|
+
|
|
542
|
+
attribute :paths, PathList, sets: true
|
|
543
|
+
attribute :only, CategoryList, optional: true, sets: true
|
|
544
|
+
attribute :run, RunKey, sets: true
|
|
545
|
+
attribute :confirm, Switch, optional: true, sets: true
|
|
546
|
+
|
|
547
|
+
sets :operation, to: "fix_rust_comments"
|
|
548
|
+
|
|
549
|
+
emits FixRustCommentsRequested
|
|
550
|
+
end
|
|
551
|
+
|
|
552
|
+
command "Canonicalise" do
|
|
553
|
+
role "Maintainer"
|
|
554
|
+
goal "Write a JSON document with every object's keys sorted"
|
|
555
|
+
|
|
556
|
+
attribute :file, FilePath, sets: true
|
|
557
|
+
attribute :run, RunKey, sets: true
|
|
558
|
+
|
|
559
|
+
sets :operation, to: "canonicalise"
|
|
560
|
+
|
|
561
|
+
emits CanonicaliseRequested
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
# What the tree reported about itself, held against every request: nothing here runs
|
|
565
|
+
# outside a hecks checkout (hecks.gemspec beside lib/).
|
|
566
|
+
command "Accept" do
|
|
567
|
+
role "System"
|
|
568
|
+
goal "Let a request through only when the working tree is a hecks checkout"
|
|
569
|
+
|
|
570
|
+
reference_to StyleRun
|
|
571
|
+
attribute :checkout, Switch, sets: true
|
|
572
|
+
|
|
573
|
+
given("needs a hecks checkout: hecks.gemspec stands beside lib/") { checkout.value }
|
|
574
|
+
|
|
575
|
+
|
|
576
|
+
emits StyleAccepted
|
|
577
|
+
end
|
|
578
|
+
|
|
579
|
+
command "Complete" do
|
|
580
|
+
role "System"
|
|
581
|
+
goal "Record that the request was carried out, and what it reported"
|
|
582
|
+
|
|
583
|
+
reference_to StyleRun
|
|
584
|
+
attribute :run, RunKey
|
|
585
|
+
attribute :report, Report, sets: true
|
|
586
|
+
|
|
587
|
+
|
|
588
|
+
emits StyleCompleted
|
|
589
|
+
end
|
|
590
|
+
|
|
591
|
+
command "Fault" do
|
|
592
|
+
role "System"
|
|
593
|
+
goal "Record that the request was refused or could not be carried out, and why"
|
|
594
|
+
|
|
595
|
+
reference_to StyleRun
|
|
596
|
+
attribute :refusal, Report, sets: true
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
emits StyleFaulted
|
|
600
|
+
end
|
|
601
|
+
|
|
602
|
+
query "StyleOutcome" do
|
|
603
|
+
description "How one request ended: its status, and what it reported or why it failed."
|
|
604
|
+
attribute :run, RunKey
|
|
605
|
+
where(run: :run)
|
|
606
|
+
order_by :run
|
|
607
|
+
end
|
|
608
|
+
|
|
609
|
+
query "StyleFaulted" do
|
|
610
|
+
description "Every request that was refused or could not be carried out."
|
|
611
|
+
where(status: "faulted")
|
|
612
|
+
order_by :run
|
|
613
|
+
end
|
|
614
|
+
|
|
615
|
+
# An answer that is one document of text, exactly as the tool that produced it wrote it.
|
|
616
|
+
value_object "Document" do
|
|
617
|
+
attribute :text, String
|
|
618
|
+
end
|
|
619
|
+
|
|
620
|
+
query "ReportComments" do
|
|
621
|
+
description "The Ruby comment violations, as summary tables, a list or JSON."
|
|
622
|
+
attribute :paths, PathList
|
|
623
|
+
attribute :only, CategoryList, optional: true
|
|
624
|
+
attribute :json, Switch, optional: true
|
|
625
|
+
attribute :top, Top, optional: true
|
|
626
|
+
returns Document
|
|
627
|
+
end
|
|
628
|
+
|
|
629
|
+
query "ReportRustComments" do
|
|
630
|
+
description "The Rust comment violations, as summary tables, a list or JSON."
|
|
631
|
+
attribute :paths, PathList
|
|
632
|
+
attribute :only, CategoryList, optional: true
|
|
633
|
+
attribute :json, Switch, optional: true
|
|
634
|
+
attribute :top, Top, optional: true
|
|
635
|
+
returns Document
|
|
636
|
+
end
|
|
637
|
+
end
|
|
638
|
+
|
|
639
|
+
# Inspection: ranking the Ruby by complexity, finding copied code, listing design smells and
|
|
640
|
+
# writing the combined report. A read of the tree: nothing is rewritten. The files the style
|
|
641
|
+
# config excludes (generated output, vendored code) are left out of every tool.
|
|
642
|
+
aggregate "InspectionRun" do
|
|
643
|
+
description "One inspection of the Ruby by flog, flay, reek or rubycritic."
|
|
644
|
+
|
|
645
|
+
attribute :run, RunKey
|
|
646
|
+
attribute :operation, Operation, optional: true
|
|
647
|
+
attribute :paths, PathList, optional: true
|
|
648
|
+
attribute :top, Top, optional: true
|
|
649
|
+
attribute :checkout, Switch, optional: true
|
|
650
|
+
attribute :report, Report, optional: true
|
|
651
|
+
attribute :refusal, Report, optional: true
|
|
652
|
+
identified_by :run
|
|
653
|
+
|
|
654
|
+
value_object "RunKey" do
|
|
655
|
+
attribute :value, String, matches: :present
|
|
656
|
+
|
|
657
|
+
invariant("a run is named") { !value.to_s.empty? }
|
|
658
|
+
end
|
|
659
|
+
|
|
660
|
+
value_object "Operation" do
|
|
661
|
+
attribute :value, String, matches: :present
|
|
662
|
+
end
|
|
663
|
+
|
|
664
|
+
value_object "Switch" do
|
|
665
|
+
attribute :value, Boolean
|
|
666
|
+
end
|
|
667
|
+
|
|
668
|
+
value_object "Report" do
|
|
669
|
+
attribute :value, String
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
# Files or directories, comma separated; lib when none is named.
|
|
673
|
+
value_object "PathList" do
|
|
674
|
+
attribute :value, String, matches: :csv_list
|
|
675
|
+
end
|
|
676
|
+
|
|
677
|
+
# How many lines of the report are kept.
|
|
678
|
+
value_object "Top" do
|
|
679
|
+
attribute :value, Integer
|
|
680
|
+
|
|
681
|
+
invariant("a count is positive") { value > 0 }
|
|
682
|
+
end
|
|
683
|
+
|
|
684
|
+
lifecycle :status, default: "requested" do
|
|
685
|
+
mark :failure, "faulted"
|
|
686
|
+
transition "Accept" => "accepted", from: "requested"
|
|
687
|
+
transition "Complete" => "completed", from: "accepted"
|
|
688
|
+
transition "Fault" => "faulted", from: %w[requested accepted]
|
|
689
|
+
mark :terminal, "completed", "faulted"
|
|
690
|
+
end
|
|
691
|
+
|
|
692
|
+
command "Flog" do
|
|
693
|
+
role "Maintainer"
|
|
694
|
+
goal "Rank the Ruby methods by complexity, worst first"
|
|
695
|
+
|
|
696
|
+
attribute :paths, PathList, optional: true, sets: true
|
|
697
|
+
attribute :top, Top, optional: true, sets: true
|
|
698
|
+
attribute :run, RunKey, sets: true
|
|
699
|
+
|
|
700
|
+
sets :operation, to: "flog"
|
|
701
|
+
|
|
702
|
+
emits FlogRequested
|
|
703
|
+
end
|
|
704
|
+
|
|
705
|
+
command "Flay" do
|
|
706
|
+
role "Maintainer"
|
|
707
|
+
goal "Find Ruby code that is copied or nearly copied"
|
|
708
|
+
|
|
709
|
+
attribute :paths, PathList, optional: true, sets: true
|
|
710
|
+
attribute :top, Top, optional: true, sets: true
|
|
711
|
+
attribute :run, RunKey, sets: true
|
|
712
|
+
|
|
713
|
+
sets :operation, to: "flay"
|
|
714
|
+
|
|
715
|
+
emits FlayRequested
|
|
716
|
+
end
|
|
717
|
+
|
|
718
|
+
command "Reek" do
|
|
719
|
+
role "Maintainer"
|
|
720
|
+
goal "List the design smells in the Ruby"
|
|
721
|
+
|
|
722
|
+
attribute :paths, PathList, optional: true, sets: true
|
|
723
|
+
attribute :top, Top, optional: true, sets: true
|
|
724
|
+
attribute :run, RunKey, sets: true
|
|
725
|
+
|
|
726
|
+
sets :operation, to: "reek"
|
|
727
|
+
|
|
728
|
+
emits ReekRequested
|
|
729
|
+
end
|
|
730
|
+
|
|
731
|
+
command "Rubycritic" do
|
|
732
|
+
role "Maintainer"
|
|
733
|
+
goal "Write the combined quality report, with git churn"
|
|
734
|
+
|
|
735
|
+
attribute :paths, PathList, optional: true, sets: true
|
|
736
|
+
attribute :top, Top, optional: true, sets: true
|
|
737
|
+
attribute :run, RunKey, sets: true
|
|
738
|
+
|
|
739
|
+
sets :operation, to: "rubycritic"
|
|
740
|
+
|
|
741
|
+
emits RubycriticRequested
|
|
742
|
+
end
|
|
743
|
+
|
|
744
|
+
# What the tree reported about itself, held against every request: nothing here runs
|
|
745
|
+
# outside a hecks checkout (hecks.gemspec beside lib/).
|
|
746
|
+
command "Accept" do
|
|
747
|
+
role "System"
|
|
748
|
+
goal "Let a request through only when the working tree is a hecks checkout"
|
|
749
|
+
|
|
750
|
+
reference_to InspectionRun
|
|
751
|
+
attribute :checkout, Switch, sets: true
|
|
752
|
+
|
|
753
|
+
given("needs a hecks checkout: hecks.gemspec stands beside lib/") { checkout.value }
|
|
754
|
+
|
|
755
|
+
|
|
756
|
+
emits InspectionAccepted
|
|
757
|
+
end
|
|
758
|
+
|
|
759
|
+
command "Complete" do
|
|
760
|
+
role "System"
|
|
761
|
+
goal "Record that the inspection was carried out, and what it reported"
|
|
762
|
+
|
|
763
|
+
reference_to InspectionRun
|
|
764
|
+
attribute :report, Report, sets: true
|
|
765
|
+
|
|
766
|
+
|
|
767
|
+
emits InspectionCompleted
|
|
768
|
+
end
|
|
769
|
+
|
|
770
|
+
command "Fault" do
|
|
771
|
+
role "System"
|
|
772
|
+
goal "Record that the inspection was refused or could not be carried out, and why"
|
|
773
|
+
|
|
774
|
+
reference_to InspectionRun
|
|
775
|
+
attribute :refusal, Report, sets: true
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
emits InspectionFaulted
|
|
779
|
+
end
|
|
780
|
+
|
|
781
|
+
query "InspectionOutcome" do
|
|
782
|
+
description "How one inspection ended: its status, and what it reported or why it failed."
|
|
783
|
+
attribute :run, RunKey
|
|
784
|
+
where(run: :run)
|
|
785
|
+
order_by :run
|
|
786
|
+
end
|
|
787
|
+
|
|
788
|
+
query "InspectionsFaulted" do
|
|
789
|
+
description "Every inspection that was refused or could not be carried out."
|
|
790
|
+
where(status: "faulted")
|
|
791
|
+
order_by :run
|
|
792
|
+
end
|
|
793
|
+
end
|
|
794
|
+
|
|
795
|
+
policy "ExamineWhenFlogRequested" do
|
|
796
|
+
on "InspectionRun.FlogRequested"
|
|
797
|
+
ask :examine, with: { run: :run }
|
|
798
|
+
end
|
|
799
|
+
|
|
800
|
+
policy "ExamineWhenFlayRequested" do
|
|
801
|
+
on "InspectionRun.FlayRequested"
|
|
802
|
+
ask :examine, with: { run: :run }
|
|
803
|
+
end
|
|
804
|
+
|
|
805
|
+
policy "ExamineWhenReekRequested" do
|
|
806
|
+
on "InspectionRun.ReekRequested"
|
|
807
|
+
ask :examine, with: { run: :run }
|
|
808
|
+
end
|
|
809
|
+
|
|
810
|
+
policy "ExamineWhenRubycriticRequested" do
|
|
811
|
+
on "InspectionRun.RubycriticRequested"
|
|
812
|
+
ask :examine, with: { run: :run }
|
|
813
|
+
end
|
|
814
|
+
|
|
815
|
+
policy "AcceptInspectionWhenExamined" do
|
|
816
|
+
on "InspectionRun.InspectionExamined"
|
|
817
|
+
trigger InspectionRun::Accept, with: { checkout: :checkout }
|
|
818
|
+
end
|
|
819
|
+
|
|
820
|
+
policy "FaultInspectionWhenNotAccepted" do
|
|
821
|
+
on "InspectionRun.InspectionExamined"
|
|
822
|
+
where { !checkout.value }
|
|
823
|
+
trigger InspectionRun::Fault, with: { refusal: "needs a hecks checkout: hecks.gemspec stands beside lib/" }
|
|
824
|
+
end
|
|
825
|
+
|
|
826
|
+
policy "PerformInspectionWhenAccepted" do
|
|
827
|
+
on "InspectionRun.InspectionAccepted"
|
|
828
|
+
ask :perform, with: { run: :run }
|
|
829
|
+
end
|
|
830
|
+
|
|
831
|
+
policy "RecordInspectionOutcome" do
|
|
832
|
+
on "InspectionRun.InspectionAnswered"
|
|
833
|
+
trigger InspectionRun::Complete, with: { report: :report }
|
|
834
|
+
end
|
|
835
|
+
|
|
836
|
+
policy "RecordInspectionFault" do
|
|
837
|
+
on "InspectionRun.InspectionRefused"
|
|
838
|
+
trigger InspectionRun::Fault, with: { refusal: :refusal }
|
|
839
|
+
end
|
|
840
|
+
|
|
841
|
+
aggregate "Audit" do
|
|
842
|
+
description "One walk of a domain's journal chain from its latest seal, and whether every digest held."
|
|
843
|
+
|
|
844
|
+
attribute :run, AuditKey
|
|
845
|
+
attribute :domain, AuditedDomain
|
|
846
|
+
attribute :checked, Count, optional: true
|
|
847
|
+
attribute :report, Finding, optional: true
|
|
848
|
+
identified_by :run
|
|
849
|
+
|
|
850
|
+
value_object "AuditKey" do
|
|
851
|
+
attribute :value, String, matches: :present
|
|
852
|
+
|
|
853
|
+
invariant("an audit is named") { !value.to_s.empty? }
|
|
854
|
+
end
|
|
855
|
+
|
|
856
|
+
value_object "AuditedDomain" do
|
|
857
|
+
attribute :value, String, matches: :not_empty
|
|
858
|
+
end
|
|
859
|
+
|
|
860
|
+
value_object "Count" do
|
|
861
|
+
attribute :value, Integer
|
|
862
|
+
end
|
|
863
|
+
|
|
864
|
+
value_object "Finding" do
|
|
865
|
+
attribute :value, String
|
|
866
|
+
end
|
|
867
|
+
|
|
868
|
+
lifecycle :status, default: "requested" do
|
|
869
|
+
mark :failure, "unproven"
|
|
870
|
+
transition "Confirm" => "verified", from: "requested"
|
|
871
|
+
transition "Fail" => "unproven", from: "requested"
|
|
872
|
+
mark :terminal, "unproven", "verified"
|
|
873
|
+
end
|
|
874
|
+
|
|
875
|
+
command "Verify" do
|
|
876
|
+
role "Auditor"
|
|
877
|
+
goal "Walk a domain's journal chain from its latest seal and say whether it was altered"
|
|
878
|
+
|
|
879
|
+
attribute :domain, AuditedDomain, sets: true
|
|
880
|
+
attribute :run, AuditKey, sets: true
|
|
881
|
+
|
|
882
|
+
|
|
883
|
+
emits VerificationRequested
|
|
884
|
+
end
|
|
885
|
+
|
|
886
|
+
command "Confirm" do
|
|
887
|
+
role "System"
|
|
888
|
+
goal "Record that every row's digest held, and how many were checked"
|
|
889
|
+
|
|
890
|
+
reference_to Audit
|
|
891
|
+
attribute :checked, Count, sets: true
|
|
892
|
+
attribute :report, Finding, sets: true
|
|
893
|
+
|
|
894
|
+
given("the walk checked a row") { checked.value > 0 }
|
|
895
|
+
|
|
896
|
+
|
|
897
|
+
emits ChainConfirmed
|
|
898
|
+
end
|
|
899
|
+
|
|
900
|
+
# A chain that cannot be shown intact is unproven, whether a digest failed or the walk could not
|
|
901
|
+
# run; the report names the row or the reason.
|
|
902
|
+
command "Fail" do
|
|
903
|
+
role "System"
|
|
904
|
+
goal "Record that the chain could not be shown intact, and why"
|
|
905
|
+
|
|
906
|
+
reference_to Audit
|
|
907
|
+
attribute :report, Finding, sets: true
|
|
908
|
+
|
|
909
|
+
|
|
910
|
+
emits ChainUnproven
|
|
911
|
+
end
|
|
912
|
+
|
|
913
|
+
query "Verdict" do
|
|
914
|
+
description "What one audit found."
|
|
915
|
+
attribute :run, AuditKey
|
|
916
|
+
where(run: :run)
|
|
917
|
+
order_by :run
|
|
918
|
+
end
|
|
919
|
+
|
|
920
|
+
query "Unproven" do
|
|
921
|
+
description "Every audit that could not show the chain intact."
|
|
922
|
+
where(status: "unproven")
|
|
923
|
+
order_by :run
|
|
924
|
+
end
|
|
925
|
+
end
|
|
926
|
+
|
|
927
|
+
# A compaction is applied only once the head it would erase is sealed.
|
|
928
|
+
policy "CaptureWhenCompactionPermitted" do
|
|
929
|
+
on "Era.EraPermitted"
|
|
930
|
+
where do
|
|
931
|
+
operation.value == "compact" || operation.value == "compact_heki"
|
|
932
|
+
end
|
|
933
|
+
ask :capture, with: { run: :run }
|
|
934
|
+
end
|
|
935
|
+
|
|
936
|
+
policy "RecordTheSeal" do
|
|
937
|
+
on "Era.HeadCaptured"
|
|
938
|
+
trigger Seal::Record, with: { run: :run, domain: :domain, through: :through, head: :head, previous: :previous }
|
|
939
|
+
end
|
|
940
|
+
|
|
941
|
+
policy "CompactWhenSealed" do
|
|
942
|
+
on "Era.HeadCaptured"
|
|
943
|
+
ask :apply, with: { run: :run }
|
|
944
|
+
end
|
|
945
|
+
|
|
946
|
+
policy "AbandonWhenNotSealed" do
|
|
947
|
+
on "Era.CaptureRefused"
|
|
948
|
+
trigger Era::Abandon, with: { refusal: :refusal }
|
|
949
|
+
end
|
|
950
|
+
|
|
951
|
+
policy "WalkWhenVerificationRequested" do
|
|
952
|
+
on "Audit.VerificationRequested"
|
|
953
|
+
ask :walk, with: { run: :run }
|
|
954
|
+
end
|
|
955
|
+
|
|
956
|
+
policy "ConfirmWhenChainWalked" do
|
|
957
|
+
on "Audit.ChainWalked"
|
|
958
|
+
trigger Audit::Confirm, with: { checked: :checked, report: :report }
|
|
959
|
+
end
|
|
960
|
+
|
|
961
|
+
policy "FailWhenWalkRefused" do
|
|
962
|
+
on "Audit.WalkRefused"
|
|
963
|
+
trigger Audit::Fail, with: { report: :refusal }
|
|
964
|
+
end
|
|
965
|
+
end
|
|
966
|
+
end
|