hecks 2.9.0 → 3.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 +51 -6
- data/lib/hecks/adapters/driven/heki/journal.rb +1 -1
- data/lib/hecks/adapters/driven/lambda/client.rb +1 -1
- data/lib/hecks/adapters/driven/lambda.rb +1 -1
- data/lib/hecks/adapters/driven/memory.rb +16 -3
- data/lib/hecks/adapters/driven/postgres/reconnect.rb +6 -2
- data/lib/hecks/adapters/driven/postgres/shared_connection.rb +180 -0
- data/lib/hecks/adapters/driven/postgres.rb +4 -2
- data/lib/hecks/adapters/driven/prism.rb +41 -8
- data/lib/hecks/adapters/driven/tenant_provisioner.rb +73 -16
- data/lib/hecks/behaviors/expectations.rb +1 -1
- data/lib/hecks/behaviors.rb +1 -1
- data/lib/hecks/bench/cli.rb +62 -0
- data/lib/hecks/bench/environment.rb +71 -0
- data/lib/hecks/bench/postgres_probe.rb +30 -0
- data/lib/hecks/bench/report.rb +76 -0
- data/lib/hecks/bench/ruby_runner.rb +93 -0
- data/lib/hecks/bench/run.rb +55 -0
- data/lib/hecks/bench/rust_runner.rb +101 -0
- data/lib/hecks/bench/stats.rb +46 -0
- data/lib/hecks/bench/suite.rb +98 -0
- data/lib/hecks/bench/workload.rb +89 -0
- data/lib/hecks/bench.rb +17 -0
- data/lib/hecks/bluebook/assembly/contracts.rb +2 -0
- data/lib/hecks/bluebook/attribute.rb +1 -1
- data/lib/hecks/bluebook/behaviour/aggregate.rb +30 -1
- data/lib/hecks/bluebook/behaviour/domain_port.rb +7 -0
- data/lib/hecks/bluebook/chapter.rb +6 -2
- data/lib/hecks/bluebook/domain_port.rb +36 -5
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation.rb +10 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +8 -0
- data/lib/hecks/bluebook/dsl/bootstrap_table.rb +2 -1
- data/lib/hecks/bluebook/dsl/domain_port_builder.rb +31 -3
- data/lib/hecks/bluebook/dsl/hecksagon_builder.rb +122 -3
- data/lib/hecks/bluebook/dsl/lifecycle_builder.rb +1 -1
- data/lib/hecks/bluebook/dsl/query_builder.rb +27 -1
- data/lib/hecks/bluebook/dsl/rule_reference.rb +1 -1
- data/lib/hecks/bluebook/dsl/world_builder.rb +29 -2
- data/lib/hecks/bluebook/expression/canonical_form.rb +1 -1
- data/lib/hecks/bluebook/expression/resolver.rb +3 -2
- data/lib/hecks/bluebook/hexagon.rb +13 -5
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +1 -0
- data/lib/hecks/bluebook/meta_validator/syntax_boot.rb +4 -1
- data/lib/hecks/bluebook/meta_validator/verdict_cache.rb +246 -0
- data/lib/hecks/bluebook/meta_validator.rb +9 -4
- data/lib/hecks/bluebook/model_check.rb +23 -0
- data/lib/hecks/bluebook/pattern_subset.rb +38 -0
- data/lib/hecks/bluebook/query.rb +20 -5
- data/lib/hecks/bluebook/smoke_test.rb +1 -1
- data/lib/hecks/canonical_json.rb +30 -0
- data/lib/hecks/chapters.rb +102 -0
- data/lib/hecks/cli/behaviors.rb +61 -0
- data/lib/hecks/cli/canonicalise.rb +25 -0
- data/lib/hecks/cli/check_engine_agreement.rb +32 -0
- data/lib/hecks/cli/check_era.rb +88 -0
- data/lib/hecks/cli/console.rb +66 -0
- data/lib/hecks/cli/deploy_template_diff.rb +40 -0
- data/lib/hecks/cli/doc_coverage.rb +32 -0
- data/lib/hecks/cli/document.rb +2 -2
- data/lib/hecks/cli/expression_projection.rb +41 -0
- data/lib/hecks/cli/follow.rb +88 -0
- data/lib/hecks/cli/history.rb +44 -0
- data/lib/hecks/cli/ir.rb +1 -1
- data/lib/hecks/cli/mcp.rb +3 -3
- data/lib/hecks/cli/model_check.rb +7 -4
- data/lib/hecks/cli/pattern_cases.rb +47 -0
- data/lib/hecks/cli/present.rb +39 -0
- data/lib/hecks/cli/project_cli.rb +224 -32
- data/lib/hecks/cli/project_diagrams.rb +4 -3
- data/lib/hecks/cli/project_glossary.rb +44 -0
- data/lib/hecks/cli/reference.rb +46 -0
- data/lib/hecks/cli/refresh_projections.rb +44 -0
- data/lib/hecks/cli/refresh_rspec_runtime_baseline.rb +150 -0
- data/lib/hecks/cli/release.rb +70 -0
- data/lib/hecks/cli/release_gem.rb +59 -0
- data/lib/hecks/cli/rspec_io_parallel_files.rb +137 -0
- data/lib/hecks/cli/rspec_shard_files.rb +66 -0
- data/lib/hecks/cli/run.rb +3 -3
- data/lib/hecks/cli/seed_semantics_corpus.rb +71 -0
- data/lib/hecks/cli/serve_query_ir_mcp.rb +30 -0
- data/lib/hecks/cli/shape.rb +70 -0
- data/lib/hecks/cli/smoke_http.rb +230 -0
- data/lib/hecks/cli/smoke_test.rb +5 -3
- data/lib/hecks/cli/spec_example.rb +27 -0
- data/lib/hecks/cli/statements.rb +32 -0
- data/lib/hecks/cli/stores.rb +4 -5
- data/lib/hecks/cli/stress_concurrency_specs.rb +177 -0
- data/lib/hecks/cli.rb +201 -52
- data/lib/hecks/codemod.rb +324 -0
- data/lib/hecks/corpus.rb +423 -0
- data/lib/hecks/deploy/bluebook/deploy.bluebook +591 -23
- data/lib/hecks/deploy/bluebook/deploy.hecksagon +41 -4
- data/lib/hecks/deploy/oidc.json +82 -2
- data/lib/hecks/doc/reference.rb +351 -0
- data/lib/hecks/doors/cli_door.rb +196 -0
- data/lib/hecks/doors/cli_runner.rb +297 -0
- data/lib/hecks/{facade → doors}/command_request.rb +1 -1
- data/lib/hecks/{facade → doors}/handle.rb +2 -2
- data/lib/hecks/{facade → doors}/json_door.rb +4 -4
- data/lib/hecks/doors/launcher_options.rb +129 -0
- data/lib/hecks/{cli → doors}/mcp_door.rb +7 -7
- data/lib/hecks/doors/mcp_door_scope.rb +97 -0
- data/lib/hecks/{facade/surface → doors/ruby_door}/aggregate_door.rb +8 -3
- data/lib/hecks/{facade/surface → doors/ruby_door}/chapter.rb +3 -3
- data/lib/hecks/{facade/surface.rb → doors/ruby_door.rb} +36 -5
- data/lib/hecks/doors.rb +61 -0
- data/lib/hecks/embryonaut_bluebook/vendor_cli.rb +1 -1
- data/lib/hecks/embryonaut_bluebook.rb +1 -1
- data/lib/hecks/engine_agreement.rb +156 -0
- data/lib/hecks/facade.rb +24 -37
- data/lib/hecks/forms/app.rb +6 -6
- data/lib/hecks/forms/banking_presentation.rb +50 -0
- data/lib/hecks/forms/field_shape.rb +2 -1
- data/lib/hecks/forms/port_argument.rb +1 -1
- data/lib/hecks/fuzzing/bounded_exhaustive_expressions.rb +393 -0
- data/lib/hecks/fuzzing/combination_miner.rb +86 -0
- data/lib/hecks/fuzzing/concurrent_dispatch.rb +214 -0
- data/lib/hecks/fuzzing/coverage_campaign.rb +143 -0
- data/lib/hecks/fuzzing/differential.rb +156 -0
- data/lib/hecks/fuzzing/domain_generator.rb +615 -0
- data/lib/hecks/fuzzing/era_boundary.rb +71 -0
- data/lib/hecks/fuzzing/form_census.rb +136 -0
- data/lib/hecks/fuzzing/generated_domain_check.rb +93 -0
- data/lib/hecks/fuzzing/invalid_value_generator.rb +64 -0
- data/lib/hecks/fuzzing/isolated_boot.rb +301 -0
- data/lib/hecks/fuzzing/nondeterministic.rb +51 -0
- data/lib/hecks/fuzzing/outside_world.rb +45 -0
- data/lib/hecks/fuzzing/persistence_parity.rb +102 -0
- data/lib/hecks/fuzzing/properties/corrections.rb +88 -0
- data/lib/hecks/fuzzing/properties/dispatch_and_mutations.rb +314 -0
- data/lib/hecks/fuzzing/properties/guards.rb +190 -0
- data/lib/hecks/fuzzing/properties/invariants_and_aggregation.rb +300 -0
- data/lib/hecks/fuzzing/properties/lifecycle_and_replay.rb +93 -0
- data/lib/hecks/fuzzing/properties/outbox.rb +89 -0
- data/lib/hecks/fuzzing/properties/querying.rb +175 -0
- data/lib/hecks/fuzzing/properties.rb +162 -0
- data/lib/hecks/fuzzing/qa_settings.rb +123 -0
- data/lib/hecks/fuzzing/replay.rb +505 -0
- data/lib/hecks/fuzzing/rotation_priority.rb +48 -0
- data/lib/hecks/fuzzing/rust_gap_manifest.rb +108 -0
- data/lib/hecks/fuzzing/self_consistency.rb +339 -0
- data/lib/hecks/fuzzing/sequence_generator/adversary.rb +385 -0
- data/lib/hecks/fuzzing/sequence_generator/catalog.rb +132 -0
- data/lib/hecks/fuzzing/sequence_generator/outcome_tracker.rb +95 -0
- data/lib/hecks/fuzzing/sequence_generator/picker.rb +77 -0
- data/lib/hecks/fuzzing/sequence_generator/query_binding.rb +109 -0
- data/lib/hecks/fuzzing/sequence_generator/step_builder.rb +237 -0
- data/lib/hecks/fuzzing/sequence_generator.rb +189 -0
- data/lib/hecks/fuzzing/shrinker.rb +166 -0
- data/lib/hecks/fuzzing/structural_skips.rb +33 -0
- data/lib/hecks/fuzzing/sweep_depth.rb +43 -0
- data/lib/hecks/fuzzing/target_capabilities.rb +163 -0
- data/lib/hecks/fuzzing/value_generator.rb +216 -0
- data/lib/hecks/fuzzing.rb +23 -0
- data/lib/hecks/grammar/evolve.rb +336 -0
- data/lib/hecks/hecks/adapters/codebase/codemods.rb +45 -0
- data/lib/hecks/hecks/adapters/codebase/conformance.rb +71 -0
- data/lib/hecks/hecks/adapters/codebase/corpus_tasks.rb +202 -0
- data/lib/hecks/hecks/adapters/codebase/gem_registry.rb +80 -0
- data/lib/hecks/hecks/adapters/codebase/kernel_tables.rb +54 -0
- data/lib/hecks/hecks/adapters/codebase/language.rb +240 -0
- data/lib/hecks/hecks/adapters/codebase/npm_registry.rb +102 -0
- data/lib/hecks/hecks/adapters/codebase/publishing.rb +142 -0
- data/lib/hecks/hecks/adapters/codebase/regeneration.rb +67 -0
- data/lib/hecks/hecks/adapters/codebase/release_facts.rb +90 -0
- data/lib/hecks/hecks/adapters/codebase/ruby_child.rb +83 -0
- data/lib/hecks/hecks/adapters/codebase/secret_vault.rb +36 -0
- data/lib/hecks/hecks/adapters/codebase/source_tree.adapter +7 -0
- data/lib/hecks/hecks/adapters/codebase/source_tree.rb +189 -0
- data/lib/hecks/hecks/adapters/codebase/sqlite_fixture.rb +71 -0
- data/lib/hecks/hecks/adapters/codebase/style.rb +171 -0
- data/lib/hecks/hecks/adapters/codebase/test_runner.rb +55 -0
- data/lib/hecks/hecks/adapters/codebase/test_suite.rb +165 -0
- data/lib/hecks/hecks/adapters/codebase/tree.rb +111 -0
- data/lib/hecks/hecks/adapters/console_capture.rb +79 -0
- data/lib/hecks/hecks/adapters/deploy_toolchain.adapter +7 -0
- data/lib/hecks/hecks/adapters/deploy_toolchain.rb +108 -0
- data/lib/hecks/hecks/adapters/git.adapter +7 -0
- data/lib/hecks/hecks/adapters/git.rb +102 -0
- data/lib/hecks/hecks/adapters/host_http.adapter +7 -0
- data/lib/hecks/hecks/adapters/host_http.rb +65 -0
- data/lib/hecks/hecks/adapters/in_process_boot.adapter +7 -0
- data/lib/hecks/hecks/adapters/in_process_boot.rb +197 -0
- data/lib/hecks/hecks/adapters/in_process_operations.rb +202 -0
- data/lib/hecks/hecks/adapters/journal_store/changes.rb +143 -0
- data/lib/hecks/hecks/adapters/journal_store/compaction.rb +145 -0
- data/lib/hecks/hecks/adapters/journal_store/edge_audit.rb +132 -0
- data/lib/hecks/hecks/adapters/journal_store/examination.rb +135 -0
- data/lib/hecks/hecks/adapters/journal_store/held_domain.rb +163 -0
- data/lib/hecks/hecks/adapters/journal_store/readings.rb +187 -0
- data/lib/hecks/hecks/adapters/journal_store.adapter +7 -0
- data/lib/hecks/hecks/adapters/journal_store.rb +64 -0
- data/lib/hecks/hecks/adapters/local_files.adapter +7 -0
- data/lib/hecks/hecks/adapters/local_files.rb +46 -0
- data/lib/hecks/hecks/adapters/pg_admin.adapter +7 -0
- data/lib/hecks/hecks/adapters/pg_admin.rb +245 -0
- data/lib/hecks/hecks/adapters/process_pool.adapter +7 -0
- data/lib/hecks/hecks/adapters/process_pool.rb +119 -0
- data/lib/hecks/hecks/adapters/rust_toolchain.adapter +7 -0
- data/lib/hecks/hecks/adapters/rust_toolchain.rb +179 -0
- data/lib/hecks/hecks/adapters/rust_workspace.rb +150 -0
- data/lib/hecks/hecks/adapters/shell.adapter +7 -0
- data/lib/hecks/hecks/adapters/shell.rb +49 -0
- data/lib/hecks/hecks/adapters/terminal.adapter +7 -0
- data/lib/hecks/hecks/adapters/terminal.rb +74 -0
- data/lib/hecks/hecks/codebase.behaviors +172 -0
- data/lib/hecks/hecks/codebase.bluebook +2453 -0
- data/lib/hecks/hecks/context_map.hecksagon +13 -0
- data/lib/hecks/hecks/custodian.behaviors +179 -0
- data/lib/hecks/hecks/custodian.bluebook +1847 -0
- data/lib/hecks/hecks/deploy.behaviors +74 -0
- data/lib/hecks/hecks/deploy.world +12 -0
- data/lib/hecks/hecks/environments/memory.world +10 -0
- data/lib/hecks/hecks/governance.world +7 -0
- data/lib/hecks/hecks/hecks.behaviors +62 -0
- data/lib/hecks/hecks/hecks.bluebook +124 -0
- data/lib/hecks/hecks/hecks.hecksagon +390 -0
- data/lib/hecks/hecks/hecks.world +42 -0
- data/lib/hecks/kernel_capabilities.rb +194 -0
- data/lib/hecks/language/bluebook/bluebook.bluebook +11 -0
- data/lib/hecks/language/bluebook/query.bluebook +7 -0
- data/lib/hecks/language/bluebook/vocabulary.bluebook +4 -4
- data/lib/hecks/language/hecksagon/domain_port.bluebook +10 -0
- data/lib/hecks/language/hecksagon/hecksagon.bluebook +20 -0
- data/lib/hecks/mcp_stdio_guard.rb +2 -2
- data/lib/hecks/persistence_legacy_fixture/regenerate.rb +161 -0
- data/lib/hecks/persistence_legacy_fixture.rb +113 -0
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +8 -5
- data/lib/hecks/ports/persistence/plugins/era/era_guard.rb +4 -1
- data/lib/hecks/ports/persistence/plugins/era/expected_era.rb +15 -2
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/era_store.rb +1 -1
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/tail_merge.rb +1 -1
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/merge_coordinator.rb +1 -1
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/minter.rb +32 -15
- data/lib/hecks/ports/persistence/plugins/era/postgres_era.rb +6 -3
- data/lib/hecks/ports/persistence/plugins/era/translation/approval_file.rb +227 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/approval_digest.rb +1 -1
- data/lib/hecks/ports/persistence/plugins/era/translation/reattest.rb +43 -24
- data/lib/hecks/ports/persistence/plugins/era/translation.rb +1 -0
- data/lib/hecks/ports/persistence/state_codec.rb +24 -5
- data/lib/hecks/projection_files.rb +285 -0
- data/lib/hecks/projections/bootstrap_table.rb +1 -1
- data/lib/hecks/projections/deploy/fargate.rb +5 -5
- data/lib/hecks/projections/deploy/lambda.rb +43 -32
- data/lib/hecks/projections/deploy/preview/preview.sh.erb +1 -1
- data/lib/hecks/projections/deploy/preview/template.rb +1 -1
- data/lib/hecks/projections/deploy/scripts/deploy-service.sh.tmpl +1 -1
- data/lib/hecks/projections/deploy/scripts/expected-era.header +1 -1
- data/lib/hecks/projections/deploy/scripts/hosting.mk.tmpl +3 -3
- data/lib/hecks/projections/deploy/scripts/smoke-after-deploy.sh.tmpl +1 -1
- data/lib/hecks/projections/deploy/shared.rb +1 -1
- data/lib/hecks/projections/diagrams.rb +3 -3
- data/lib/hecks/projections/model/deviations.rb +1 -1
- data/lib/hecks/projections/parser_table.rb +4 -4
- data/lib/hecks/projections/reference.rb +2 -3
- data/lib/hecks/projections/rust_vocabulary.rb +1 -1
- data/lib/hecks/projector/cli_projector.rb +106 -37
- data/lib/hecks/projector.rb +1 -1
- data/lib/hecks/quality_control/adapters/agent.adapter +7 -0
- data/lib/hecks/quality_control/adapters/agent.rb +58 -0
- data/lib/hecks/quality_control/adapters/angle_tools.adapter +7 -0
- data/lib/hecks/quality_control/adapters/angle_tools.rb +15 -0
- data/lib/hecks/quality_control/adapters/clearance_recorder.rb +36 -0
- data/lib/hecks/quality_control/adapters/clearance_tools.adapter +7 -0
- data/lib/hecks/quality_control/adapters/clearance_tools.rb +17 -0
- data/lib/hecks/quality_control/adapters/git_pr.adapter +7 -0
- data/lib/hecks/quality_control/adapters/git_pr.rb +226 -0
- data/lib/hecks/quality_control/adapters/github_checks.adapter +9 -0
- data/lib/hecks/quality_control/adapters/github_checks.rb +83 -0
- data/lib/hecks/quality_control/adapters/github_ci_webhook.rb +56 -0
- data/lib/hecks/quality_control/adapters/github_issues.adapter +7 -0
- data/lib/hecks/quality_control/adapters/github_issues.rb +49 -0
- data/lib/hecks/quality_control/adapters/qa_tool.rb +59 -0
- data/lib/hecks/quality_control/adapters/sweep_tools.adapter +7 -0
- data/lib/hecks/quality_control/adapters/sweep_tools.rb +51 -0
- data/lib/hecks/quality_control/adapters/target_tools.adapter +7 -0
- data/lib/hecks/quality_control/adapters/target_tools.rb +43 -0
- data/lib/hecks/quality_control/cli/child.rb +45 -0
- data/lib/hecks/quality_control/cli/qa_concurrency_racer.rb +45 -0
- data/lib/hecks/quality_control/cli/qa_discover_external_domains.rb +248 -0
- data/lib/hecks/quality_control/cli/qa_domain_novelty.rb +163 -0
- data/lib/hecks/quality_control/cli/qa_generated_domains.rb +450 -0
- data/lib/hecks/quality_control/cli/qa_log_bug.rb +195 -0
- data/lib/hecks/quality_control/cli/qa_mine_combinations.rb +220 -0
- data/lib/hecks/quality_control/cli/qa_open_pr.rb +305 -0
- data/lib/hecks/quality_control/cli/qa_postgres_migrate.rb +154 -0
- data/lib/hecks/quality_control/cli/qa_postgres_role.rb +159 -0
- data/lib/hecks/quality_control/cli/qa_pr_check.rb +232 -0
- data/lib/hecks/quality_control/cli/qa_seed_angles.rb +142 -0
- data/lib/hecks/quality_control/cli/qa_seed_targets.rb +69 -0
- data/lib/hecks/quality_control/cli/qa_sweep/all_mode.rb +280 -0
- data/lib/hecks/quality_control/cli/qa_sweep/checks.rb +329 -0
- data/lib/hecks/quality_control/cli/qa_sweep/dials.rb +92 -0
- data/lib/hecks/quality_control/cli/qa_sweep/finding_report.rb +117 -0
- data/lib/hecks/quality_control/cli/qa_sweep/parsing.rb +175 -0
- data/lib/hecks/quality_control/cli/qa_sweep/release_mode.rb +60 -0
- data/lib/hecks/quality_control/cli/qa_sweep.rb +611 -0
- data/lib/hecks/quality_control/cli/qa_tick.rb +274 -0
- data/lib/hecks/quality_control/quality_control.bluebook +2224 -0
- data/lib/hecks/quality_control/quality_control.hecksagon +13 -0
- data/lib/hecks/quality_control/quality_control.ports.hecksagon +54 -0
- data/lib/hecks/query_ir.rb +346 -0
- data/lib/hecks/query_ir_mcp.rb +198 -0
- data/lib/hecks/release/runner/ci_publisher.rb +2 -2
- data/lib/hecks/release/runner/clean_tree.rb +42 -0
- data/lib/hecks/release/runner/console.rb +6 -0
- data/lib/hecks/release/runner/gem_publisher.rb +14 -7
- data/lib/hecks/release/runner/npm_publisher.rb +6 -36
- data/lib/hecks/release/runner/preflight.rb +26 -2
- data/lib/hecks/release/runner/published.rb +8 -26
- data/lib/hecks/release/runner/tagger.rb +30 -15
- data/lib/hecks/release/runner.rb +57 -6
- data/lib/hecks/router/namespace_installer.rb +3 -3
- data/lib/hecks/runtime/adapter_lookup.rb +124 -0
- data/lib/hecks/runtime/command_interpreter/mutation_applier.rb +4 -0
- data/lib/hecks/runtime/dependency_planning.rb +20 -2
- data/lib/hecks/runtime/dispatcher.rb +53 -3
- data/lib/hecks/runtime/interpreting.rb +3 -0
- data/lib/hecks/runtime/loader.rb +65 -12
- data/lib/hecks/runtime/outbox.rb +1 -1
- data/lib/hecks/runtime/policy_interpreter.rb +5 -2
- data/lib/hecks/runtime/port_operation_interpreter.rb +2 -10
- data/lib/hecks/runtime/query_interpreter.rb +77 -0
- data/lib/hecks/runtime/reaction_outcome.rb +89 -0
- data/lib/hecks/runtime/refusal_wording.rb +23 -1
- data/lib/hecks/runtime/registry/verification.rb +163 -4
- data/lib/hecks/runtime/registry.rb +57 -3
- data/lib/hecks/runtime/remote_dispatcher.rb +31 -2
- data/lib/hecks/runtime/value/coercion.rb +23 -135
- data/lib/hecks/runtime/value/field_checks.rb +172 -0
- data/lib/hecks/runtime/value.rb +4 -1
- data/lib/hecks/runtime.rb +20 -6
- data/lib/hecks/rust_build/conformance.rb +158 -0
- data/lib/hecks/rust_build/conformance_fuzz.rb +71 -0
- data/lib/hecks/rust_build/coverage.rb +218 -0
- data/lib/hecks/rust_build/native_build.rb +124 -0
- data/lib/hecks/rust_build/project_rust/root_mod.rb +120 -0
- data/lib/hecks/rust_build/project_rust.rb +332 -0
- data/lib/hecks/rust_build/wasm.rb +105 -0
- data/lib/hecks/rust_build/wasm_browser.rb +113 -0
- data/lib/hecks/rust_build.rb +144 -0
- data/lib/hecks/storehouse.rb +16 -16
- data/lib/hecks/tenancy/bluebook/tenancy.bluebook +2 -2
- data/lib/hecks/tenancy/bluebook/tenancy.hecksagon +1 -1
- data/lib/hecks/three_zero/forms.yml +127 -0
- data/lib/hecks/three_zero.rb +12 -0
- data/lib/hecks/tools/argument_gate_matrix.rb +316 -0
- data/lib/hecks/tools/comment_style.rb +1070 -0
- data/lib/hecks/tools/corpus_report.rb +87 -0
- data/lib/hecks/tools/deploy_recipe.rb +255 -0
- data/lib/hecks/tools/deploy_recipe_lint.rb +282 -0
- data/lib/hecks/tools/drop_implicit_append_fields.rb +95 -0
- data/lib/hecks/tools/era_projection_backfill.rb +94 -0
- data/lib/hecks/tools/era_reattest.rb +146 -0
- data/lib/hecks/tools/evolve_run.rb +189 -0
- data/lib/hecks/tools/fuzz_sweep.rb +373 -0
- data/lib/hecks/tools/heki_compaction.rb +100 -0
- data/lib/hecks/tools/hoist_local_givens.rb +246 -0
- data/lib/hecks/tools/journal_compaction.rb +89 -0
- data/lib/hecks/tools/oidc_manifests.rb +70 -0
- data/lib/hecks/tools/query_ir_run.rb +81 -0
- data/lib/hecks/tools/regeneration_run.rb +166 -0
- data/lib/hecks/tools/rust_comment_style.rb +642 -0
- data/lib/hecks/tools/sequence_script.rb +62 -0
- data/lib/hecks/tools/tail_merge.rb +117 -0
- data/lib/hecks/tools/tenant_provisioning.rb +142 -0
- data/lib/hecks/tools/translation_audit.rb +208 -0
- data/lib/hecks/tools/translation_scaffold.rb +131 -0
- data/lib/hecks/tools.rb +86 -0
- data/lib/hecks/version.rb +1 -1
- data/lib/hecks.rb +32 -15
- data/qa/settings.yml +66 -0
- data/rust/.cargo/config.toml +6 -0
- data/rust/.gitignore +2 -0
- data/rust/Cargo.lock +54 -0
- data/rust/Cargo.toml +61 -0
- data/rust/build/.cargo/config.toml +3 -0
- data/rust/build/.gitignore +1 -0
- data/rust/build/Cargo.lock +7 -0
- data/rust/build/Cargo.toml +19 -0
- data/rust/build/src/build_artifact.rs +47 -0
- data/rust/build/src/cargo_sync.rs +248 -0
- data/rust/build/src/json.rs +421 -0
- data/rust/build/src/lineage_pass.rs +285 -0
- data/rust/build/src/main.rs +51 -0
- data/rust/build/src/optional_pass.rs +150 -0
- data/rust/build/src/pipeline.rs +264 -0
- data/rust/build/src/reserved_names.rs +76 -0
- data/rust/build/src/resolve.rs +124 -0
- data/rust/build/src/root.rs +25 -0
- data/rust/build/src/sidecars.rs +73 -0
- data/rust/build/src/subprocess.rs +51 -0
- data/rust/build/src/tmp.rs +31 -0
- data/rust/codegen/.cargo/config.toml +3 -0
- data/rust/codegen/.gitignore +1 -0
- data/rust/codegen/Cargo.lock +7 -0
- data/rust/codegen/Cargo.toml +20 -0
- data/rust/codegen/src/attr.rs +32 -0
- data/rust/codegen/src/bridging.rs +481 -0
- data/rust/codegen/src/commands.rs +1226 -0
- data/rust/codegen/src/constraints.rs +109 -0
- data/rust/codegen/src/dependency_planning.rs +209 -0
- data/rust/codegen/src/domain_generator.rs +1288 -0
- data/rust/codegen/src/exemplar.rs +230 -0
- data/rust/codegen/src/expr_emitter.rs +87 -0
- data/rust/codegen/src/fielded.rs +192 -0
- data/rust/codegen/src/hecks_naming.rs +33 -0
- data/rust/codegen/src/json.rs +335 -0
- data/rust/codegen/src/json_codec.rs +697 -0
- data/rust/codegen/src/literal.rs +207 -0
- data/rust/codegen/src/main.rs +290 -0
- data/rust/codegen/src/manifest.rs +227 -0
- data/rust/codegen/src/mutations.rs +784 -0
- data/rust/codegen/src/naming.rs +286 -0
- data/rust/codegen/src/ports.rs +208 -0
- data/rust/codegen/src/prelude.rs +116 -0
- data/rust/codegen/src/queries.rs +786 -0
- data/rust/codegen/src/reactions.rs +532 -0
- data/rust/codegen/src/read_models.rs +697 -0
- data/rust/codegen/src/reference_specs.rs +40 -0
- data/rust/codegen/src/registry.rs +966 -0
- data/rust/codegen/src/reserved_names.rs +76 -0
- data/rust/codegen/src/shared.rs +93 -0
- data/rust/codegen/src/skip_reason.rs +25 -0
- data/rust/codegen/src/types.rs +362 -0
- data/rust/host/.cargo/config.toml +3 -0
- data/rust/host/.gitignore +1 -0
- data/rust/host/Cargo.lock +4297 -0
- data/rust/host/Cargo.toml +61 -0
- data/rust/host/HECKS_RELEASE +1 -0
- data/rust/host/rds-ca-bundle.pem +2736 -0
- data/rust/host/src/api.rs +1596 -0
- data/rust/host/src/approval.rs +652 -0
- data/rust/host/src/auth.rs +1287 -0
- data/rust/host/src/bin/expr_harness.rs +46 -0
- data/rust/host/src/bin/lineage_harness.rs +119 -0
- data/rust/host/src/bin/mint_harness.rs +135 -0
- data/rust/host/src/checkout.rs +265 -0
- data/rust/host/src/dispatch.rs +1443 -0
- data/rust/host/src/expr_json.rs +1117 -0
- data/rust/host/src/field_hints.rs +52 -0
- data/rust/host/src/ir.rs +733 -0
- data/rust/host/src/journal.rs +874 -0
- data/rust/host/src/lambda_client.rs +378 -0
- data/rust/host/src/log.rs +147 -0
- data/rust/host/src/main.rs +474 -0
- data/rust/host/src/mint.rs +1865 -0
- data/rust/host/src/payments/keystore.rs +330 -0
- data/rust/host/src/payments/tests.rs +1400 -0
- data/rust/host/src/payments.rs +767 -0
- data/rust/host/src/presentation.rs +698 -0
- data/rust/host/src/presentation_write.rs +1431 -0
- data/rust/host/src/query_step.rs +149 -0
- data/rust/host/src/rate_limit.rs +904 -0
- data/rust/host/src/reference_transform.rs +241 -0
- data/rust/host/src/reference_validate.rs +338 -0
- data/rust/host/src/resend.rs +296 -0
- data/rust/host/src/secrets.rs +106 -0
- data/rust/host/src/server.rs +663 -0
- data/rust/host/src/storage_shape.rs +175 -0
- data/rust/host/src/test_pg.rs +40 -0
- data/rust/host/src/ui_schema.rs +1351 -0
- data/rust/host/src/wasm_runner.rs +191 -0
- data/rust/host/src/web/newsletter/cooldown.rs +126 -0
- data/rust/host/src/web/newsletter/tests.rs +104 -0
- data/rust/host/src/web/newsletter.rs +310 -0
- data/rust/host/src/web/newsletter_send.rs +357 -0
- data/rust/host/src/web/registrations.rs +1505 -0
- data/rust/host/src/web.rs +2937 -0
- data/rust/lsp/.gitignore +1 -0
- data/rust/lsp/Cargo.lock +7 -0
- data/rust/lsp/Cargo.toml +16 -0
- data/rust/lsp/README.md +133 -0
- data/rust/lsp/src/diagnostics.rs +165 -0
- data/rust/lsp/src/json.rs +385 -0
- data/rust/lsp/src/main.rs +399 -0
- data/rust/lsp/src/outline.rs +177 -0
- data/rust/lsp/src/rpc.rs +67 -0
- data/rust/parser/.cargo/config.toml +5 -0
- data/rust/parser/.gitignore +1 -0
- data/rust/parser/Cargo.lock +7 -0
- data/rust/parser/Cargo.toml +21 -0
- data/rust/parser/src/build/closed_sets.rs +27 -0
- data/rust/parser/src/build/identity.rs +276 -0
- data/rust/parser/src/build/mod.rs +12 -0
- data/rust/parser/src/build/naming.rs +141 -0
- data/rust/parser/src/build/pattern_subset.rs +161 -0
- data/rust/parser/src/build/query_derive.rs +72 -0
- data/rust/parser/src/build/query_inference.rs +269 -0
- data/rust/parser/src/build/query_options.rs +100 -0
- data/rust/parser/src/build/read_model.rs +94 -0
- data/rust/parser/src/build/references.rs +32 -0
- data/rust/parser/src/canonical.rs +114 -0
- data/rust/parser/src/diag.rs +55 -0
- data/rust/parser/src/emit.rs +953 -0
- data/rust/parser/src/expr/ast_json.rs +147 -0
- data/rust/parser/src/expr/evaluator.rs +81 -0
- data/rust/parser/src/expr/mod.rs +84 -0
- data/rust/parser/src/expr/resolver.rs +497 -0
- data/rust/parser/src/ir.rs +387 -0
- data/rust/parser/src/keywords.rs +585 -0
- data/rust/parser/src/lex.rs +662 -0
- data/rust/parser/src/main.rs +252 -0
- data/rust/parser/src/parse/aggregate.rs +612 -0
- data/rust/parser/src/parse/chapter.rs +517 -0
- data/rust/parser/src/parse/command.rs +637 -0
- data/rust/parser/src/parse/domain_port.rs +127 -0
- data/rust/parser/src/parse/entity.rs +527 -0
- data/rust/parser/src/parse/file.rs +67 -0
- data/rust/parser/src/parse/hecksagon.rs +231 -0
- data/rust/parser/src/parse/lifecycle.rs +162 -0
- data/rust/parser/src/parse/mod.rs +1262 -0
- data/rust/parser/src/parse/policy.rs +87 -0
- data/rust/parser/src/parse/process_manager.rs +305 -0
- data/rust/parser/src/parse/query.rs +100 -0
- data/rust/parser/src/parse/read_model.rs +214 -0
- data/rust/parser/src/parse/value_object.rs +250 -0
- data/rust/parser/src/ruby_value.rs +422 -0
- data/rust/project/bridging.rb +257 -0
- data/rust/project/commands.rb +877 -0
- data/rust/project/constraints.rb +86 -0
- data/rust/project/dependency_planning.rb +178 -0
- data/rust/project/domain_generator.rb +980 -0
- data/rust/project/exemplar.rb +148 -0
- data/rust/project/expr_emitter.rb +72 -0
- data/rust/project/fielded.rb +141 -0
- data/rust/project/json_codec.rb +641 -0
- data/rust/project/mutations.rb +721 -0
- data/rust/project/naming.rb +205 -0
- data/rust/project/ports.rb +65 -0
- data/rust/project/queries.rb +493 -0
- data/rust/project/reactions.rb +317 -0
- data/rust/project/read_models.rb +690 -0
- data/rust/project/reference_specs.rb +27 -0
- data/rust/project/registry.rb +396 -0
- data/rust/project/skip_reason.rb +29 -0
- data/rust/project/types.rb +225 -0
- data/rust/project/write_if_changed.rb +83 -0
- data/rust/project.rb +30 -0
- data/rust/project_rust_pipeline.rb +383 -0
- data/rust/src/exemplar/commands.rs +279 -0
- data/rust/src/exemplar/constraints.rs +18 -0
- data/rust/src/exemplar/fielded.rs +280 -0
- data/rust/src/exemplar/json.rs +277 -0
- data/rust/src/exemplar/mod.rs +17 -0
- data/rust/src/exemplar/mutations.rs +80 -0
- data/rust/src/exemplar/queries.rs +33 -0
- data/rust/src/exemplar/reactions.rs +88 -0
- data/rust/src/exemplar/read_models.rs +48 -0
- data/rust/src/exemplar/registry.rs +166 -0
- data/rust/src/exemplar/types.rs +44 -0
- data/rust/src/kernel/attribute_shapes/composite.rs +88 -0
- data/rust/src/kernel/attribute_shapes/list.rs +18 -0
- data/rust/src/kernel/attribute_shapes/mod.rs +44 -0
- data/rust/src/kernel/attribute_shapes/optional.rs +9 -0
- data/rust/src/kernel/attribute_shapes/scalar.rs +39 -0
- data/rust/src/kernel/cli.rs +585 -0
- data/rust/src/kernel/dispatch.rs +1090 -0
- data/rust/src/kernel/expr.rs +458 -0
- data/rust/src/kernel/expression_operators/arithmetic.rs +128 -0
- data/rust/src/kernel/expression_operators/comparison.rs +48 -0
- data/rust/src/kernel/expression_operators/enumeration.rs +232 -0
- data/rust/src/kernel/expression_operators/logical.rs +13 -0
- data/rust/src/kernel/expression_operators/membership.rs +18 -0
- data/rust/src/kernel/expression_operators/mod.rs +68 -0
- data/rust/src/kernel/expression_operators/pattern_match.rs +73 -0
- data/rust/src/kernel/expression_operators/positional.rs +126 -0
- data/rust/src/kernel/expression_operators/presence.rs +101 -0
- data/rust/src/kernel/expression_operators/sign_test.rs +16 -0
- data/rust/src/kernel/expression_operators/sized.rs +35 -0
- data/rust/src/kernel/expression_operators/text.rs +79 -0
- data/rust/src/kernel/expression_operators/to_string.rs +18 -0
- data/rust/src/kernel/json.rs +779 -0
- data/rust/src/kernel/mod.rs +133 -0
- data/rust/src/kernel/named_query.rs +219 -0
- data/rust/src/kernel/orchestrate.rs +1810 -0
- data/rust/src/kernel/pattern.rs +307 -0
- data/rust/src/kernel/query_comparators.rs +206 -0
- data/rust/src/kernel/query_ordering.rs +103 -0
- data/rust/src/kernel/read_model.rs +914 -0
- data/rust/src/kernel/reference_lookup.rs +149 -0
- data/rust/src/kernel/repository.rs +468 -0
- data/rust/src/kernel/routing.rs +612 -0
- data/rust/src/kernel/vocab/aggregate_dispatch_order.rs +118 -0
- data/rust/src/kernel/vocab/entity_dispatch_order.rs +114 -0
- data/rust/src/kernel/vocab/field_hint.rs +70 -0
- data/rust/src/kernel/vocab/mod.rs +20 -0
- data/rust/src/kernel/vocab/query_comparator.rs +65 -0
- data/rust/src/kernel/vocab/refusal_template.rs +1592 -0
- data/rust/src/lib.rs +8 -0
- data/rust/src/main.rs +16 -0
- data/rust/web/.gitignore +1 -0
- data/rust/web/Cargo.lock +119 -0
- data/rust/web/Cargo.toml +18 -0
- data/rust/web/src/lib.rs +8 -0
- metadata +477 -12
- data/lib/hecks/facade/cli_door.rb +0 -96
- data/lib/hecks/facade/cli_runner.rb +0 -127
- data/lib/hecks/mcp_door_scope.rb +0 -95
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "monitor"
|
|
4
|
+
require "tempfile"
|
|
5
|
+
require_relative "hecks/adapters/console_capture"
|
|
6
|
+
|
|
7
|
+
module Hecks
|
|
8
|
+
# The tools that generate a domain's Rust source, compile it and check the build against the Ruby
|
|
9
|
+
# engine, carried in the gem so a caller reaches them in this process.
|
|
10
|
+
#
|
|
11
|
+
# Each tool is a module with `call(argv) -> Integer`: it reads its arguments as a command line
|
|
12
|
+
# would give them, prints its report to `$stdout` and its complaints to `$stderr`, reads
|
|
13
|
+
# `ENV` for its settings, and answers an exit status. `run` and `capture` are the entry points:
|
|
14
|
+
# they hand a tool the streams and environment it is asked to use for the length of one call,
|
|
15
|
+
# and turn a refusal (`Failure`, `abort`, an unexpected error) into a status and a message. The
|
|
16
|
+
# `hecks project_rust` family of verbs runs them through `run`.
|
|
17
|
+
module RustBuild
|
|
18
|
+
# The gem's root directory, where `lib/` and `rust/` live.
|
|
19
|
+
ROOT = File.expand_path("../..", __dir__)
|
|
20
|
+
|
|
21
|
+
# Raised by a tool to refuse, with the reason as the message.
|
|
22
|
+
class Failure < StandardError; end
|
|
23
|
+
|
|
24
|
+
# What one captured call did: `out` and `err` (what the tool printed) and its exit `status`.
|
|
25
|
+
Result = Struct.new(:out, :err, :status) do
|
|
26
|
+
# @return [Boolean] whether the tool succeeded
|
|
27
|
+
def ok? = status.zero?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Tool name to the file that defines it and the constant it defines.
|
|
31
|
+
TOOLS = {
|
|
32
|
+
"project_rust" => ["rust_build/project_rust", :ProjectRust],
|
|
33
|
+
"project_wasm" => ["rust_build/wasm", :Wasm],
|
|
34
|
+
"project_wasm_browser" => ["rust_build/wasm_browser", :WasmBrowser],
|
|
35
|
+
"rust_conformance" => ["rust_build/conformance", :Conformance],
|
|
36
|
+
"rust_conformance_fuzz" => ["rust_build/conformance_fuzz", :ConformanceFuzz],
|
|
37
|
+
"rust_coverage" => ["rust_build/coverage", :Coverage]
|
|
38
|
+
}.freeze
|
|
39
|
+
|
|
40
|
+
# The process-wide lock a call holds while it swaps `ENV`, `$stdout` and `$stderr`; the same
|
|
41
|
+
# lock `ConsoleCapture` holds, so a build and a capture never interleave.
|
|
42
|
+
LOCK = Hecks::Adapters::ConsoleCapture::LOCK
|
|
43
|
+
private_constant :LOCK
|
|
44
|
+
|
|
45
|
+
class << self
|
|
46
|
+
# The workspace tools build in: `HECKS_RUST_DIR`, or the gem's own `rust/`.
|
|
47
|
+
#
|
|
48
|
+
# @return [String] the directory
|
|
49
|
+
def rust_dir = ENV.fetch("HECKS_RUST_DIR", File.join(ROOT, "rust"))
|
|
50
|
+
|
|
51
|
+
# Runs a tool with the given environment, writing to the given streams.
|
|
52
|
+
#
|
|
53
|
+
# The process's `ENV`, `$stdout` and `$stderr` are replaced for the length of the call, so
|
|
54
|
+
# calls are serialized.
|
|
55
|
+
#
|
|
56
|
+
# @param tool [String] a key of `TOOLS`
|
|
57
|
+
# @param argv [Array<String>] the tool's arguments
|
|
58
|
+
# @param env [Hash{String => String, nil}] variables to set for the call (nil removes one)
|
|
59
|
+
# @param out [IO] where the tool's stdout goes; must be a real IO (a file or the terminal)
|
|
60
|
+
# @param err [IO] where the tool's stderr goes
|
|
61
|
+
# @return [Integer] the exit status
|
|
62
|
+
def run(tool, argv, env: {}, out: $stdout, err: $stderr)
|
|
63
|
+
LOCK.synchronize do
|
|
64
|
+
with_env(env) do
|
|
65
|
+
with_streams(out, err) { finish(tool, argv) }
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Runs a program, its output going where the running tool's output goes.
|
|
71
|
+
#
|
|
72
|
+
# @param command [Array<String>] the program and its arguments
|
|
73
|
+
# @param chdir [String, nil] the directory to run it in
|
|
74
|
+
# @param env [Hash{String => String}] variables to set for it
|
|
75
|
+
# @return [void]
|
|
76
|
+
# @raise [Failure] when it cannot start or ends non-zero
|
|
77
|
+
def command!(*command, chdir: nil, env: {})
|
|
78
|
+
options = { out: $stdout, err: $stderr }
|
|
79
|
+
options[:chdir] = chdir if chdir
|
|
80
|
+
return if system(env, *command, **options)
|
|
81
|
+
|
|
82
|
+
raise Failure, "`#{command.join(' ')}` failed#{" in #{chdir}" if chdir}"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Runs a tool and holds what it printed.
|
|
86
|
+
#
|
|
87
|
+
# @param tool [String] a key of `TOOLS`
|
|
88
|
+
# @param argv [Array<String>] the tool's arguments
|
|
89
|
+
# @param env [Hash{String => String, nil}] variables to set for the call
|
|
90
|
+
# @return [Result] what it printed, and how it ended
|
|
91
|
+
def capture(tool, argv, env: {})
|
|
92
|
+
Tempfile.create("rust_build_out") do |out|
|
|
93
|
+
Tempfile.create("rust_build_err") do |err|
|
|
94
|
+
status = run(tool, argv, env: env, out: out, err: err)
|
|
95
|
+
[out, err].each(&:flush)
|
|
96
|
+
Result.new(File.read(out.path), File.read(err.path), status)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Sets variables for the block and puts them back after, for a nested tool call.
|
|
102
|
+
#
|
|
103
|
+
# @param env [Hash{String => String, nil}] variables to set (nil removes one)
|
|
104
|
+
# @yield the work to do under those variables
|
|
105
|
+
# @return [Object] the block's value
|
|
106
|
+
def with_env(env)
|
|
107
|
+
LOCK.synchronize do
|
|
108
|
+
saved = env.keys.to_h { |key| [key, ENV.fetch(key, nil)] }
|
|
109
|
+
begin
|
|
110
|
+
env.each { |key, value| ENV[key] = value }
|
|
111
|
+
yield
|
|
112
|
+
ensure
|
|
113
|
+
saved.each { |key, value| ENV[key] = value }
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
private
|
|
119
|
+
|
|
120
|
+
def with_streams(out, err)
|
|
121
|
+
saved = [$stdout, $stderr]
|
|
122
|
+
$stdout = out
|
|
123
|
+
$stderr = err
|
|
124
|
+
yield
|
|
125
|
+
ensure
|
|
126
|
+
$stdout, $stderr = saved
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def finish(tool, argv)
|
|
130
|
+
file, constant = TOOLS.fetch(tool)
|
|
131
|
+
require_relative file
|
|
132
|
+
RustBuild.const_get(constant).call(argv)
|
|
133
|
+
rescue Failure => e
|
|
134
|
+
warn e.message
|
|
135
|
+
1
|
|
136
|
+
rescue SystemExit => e
|
|
137
|
+
e.status
|
|
138
|
+
rescue StandardError, ScriptError => e
|
|
139
|
+
warn "#{tool}: #{e.class}: #{e.message}"
|
|
140
|
+
1
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
data/lib/hecks/storehouse.rb
CHANGED
|
@@ -2,8 +2,8 @@ require "json"
|
|
|
2
2
|
require "fileutils"
|
|
3
3
|
require "time"
|
|
4
4
|
require_relative "cache_dir"
|
|
5
|
-
require_relative "
|
|
6
|
-
require_relative "
|
|
5
|
+
require_relative "doors/command_request"
|
|
6
|
+
require_relative "doors/json_door"
|
|
7
7
|
require_relative "naming"
|
|
8
8
|
require_relative "projector"
|
|
9
9
|
require_relative "runtime/errors"
|
|
@@ -56,7 +56,7 @@ module Hecks
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
# The same alias table CliRunner resolves against, kept here so dispatch
|
|
59
|
-
# and query never drift from what a human typing
|
|
59
|
+
# and query never drift from what a human typing hecks run sees.
|
|
60
60
|
# :nodoc:
|
|
61
61
|
def resolve!(cli, name, asking:)
|
|
62
62
|
pool = asking ? cli[:questions] : cli[:verbs]
|
|
@@ -185,9 +185,9 @@ module Hecks
|
|
|
185
185
|
cli = Projector.call(:cli, bluebook: bluebook, options: { program: "mcp" })
|
|
186
186
|
spec = resolve!(cli, command, asking: false)
|
|
187
187
|
require_caller_for_role_gated!(spec, role)
|
|
188
|
-
envelope =
|
|
189
|
-
|
|
190
|
-
|
|
188
|
+
envelope = Doors::CommandRequest.normalize(Doors::JsonDoor.deep_symbolize(args),
|
|
189
|
+
receiver: spec[:receiver],
|
|
190
|
+
legacy_receiver: spec[:legacy_receiver])
|
|
191
191
|
|
|
192
192
|
result = with_caller(role, actor_id) do
|
|
193
193
|
dry_run ? dry_run_outcome(runtime, spec, envelope, summary: summary) : real_dispatch(runtime, spec, envelope, summary)
|
|
@@ -200,8 +200,8 @@ module Hecks
|
|
|
200
200
|
result = runtime.dispatch_flat(spec[:verb], envelope)
|
|
201
201
|
ok(summary: summary,
|
|
202
202
|
id: result.id,
|
|
203
|
-
state: result.state.nil? ? nil :
|
|
204
|
-
events: result.events.map { |event| { name: event.name, payload:
|
|
203
|
+
state: result.state.nil? ? nil : Doors::JsonDoor.materialize(result.state),
|
|
204
|
+
events: result.events.map { |event| { name: event.name, payload: Doors::JsonDoor.materialize(event.payload) } })
|
|
205
205
|
end
|
|
206
206
|
|
|
207
207
|
# :nodoc:
|
|
@@ -228,7 +228,7 @@ module Hecks
|
|
|
228
228
|
def dispatch_batch(runtime:, steps:, summary:, source: nil, role: nil, actor_id: nil)
|
|
229
229
|
require_summary!(summary)
|
|
230
230
|
results = Array(steps).map do |raw|
|
|
231
|
-
step =
|
|
231
|
+
step = Doors::JsonDoor.deep_symbolize(raw)
|
|
232
232
|
dispatch(runtime: runtime, command: step[:command], args: step[:args] || {},
|
|
233
233
|
summary: summary, source: source, role: role, actor_id: actor_id)
|
|
234
234
|
end
|
|
@@ -268,9 +268,9 @@ module Hecks
|
|
|
268
268
|
valid_caller!(role, actor_id)
|
|
269
269
|
cli = Projector.call(:cli, bluebook: bluebook, options: { program: "mcp" })
|
|
270
270
|
spec = resolve!(cli, question, asking: true)
|
|
271
|
-
rows = with_caller(role, actor_id) { runtime.query(spec[:verb], **
|
|
271
|
+
rows = with_caller(role, actor_id) { runtime.query(spec[:verb], **Doors::JsonDoor.deep_symbolize(args)) }
|
|
272
272
|
|
|
273
|
-
ok(summary: summary, rows: rows.map { |row|
|
|
273
|
+
ok(summary: summary, rows: rows.map { |row| Doors::JsonDoor.materialize(row) }).merge(verb: spec[:verb])
|
|
274
274
|
end
|
|
275
275
|
|
|
276
276
|
# Reads one aggregate's stored records directly, bypassing any declared
|
|
@@ -303,9 +303,9 @@ module Hecks
|
|
|
303
303
|
if id
|
|
304
304
|
instance = repository.find(id) or
|
|
305
305
|
raise Runtime::NotFound, "no #{ir.hecks_name} found for id #{id.inspect}"
|
|
306
|
-
ok(summary: summary, record:
|
|
306
|
+
ok(summary: summary, record: Doors::JsonDoor.materialize(instance.to_h))
|
|
307
307
|
else
|
|
308
|
-
records = repository.all.map { |instance|
|
|
308
|
+
records = repository.all.map { |instance| Doors::JsonDoor.materialize(instance.to_h) }
|
|
309
309
|
ok(summary: summary, count: records.length, records: records)
|
|
310
310
|
end
|
|
311
311
|
end
|
|
@@ -346,7 +346,7 @@ module Hecks
|
|
|
346
346
|
end
|
|
347
347
|
|
|
348
348
|
# One aggregate's (or the whole chapter's) full usage documentation — the
|
|
349
|
-
# same document
|
|
349
|
+
# same document hecks docs renders for a human.
|
|
350
350
|
#
|
|
351
351
|
# @param runtime [Runtime::Registry] the booted domain to describe
|
|
352
352
|
# @param aggregate [String, Symbol, nil] one aggregate's name, or nil for the
|
|
@@ -373,7 +373,7 @@ module Hecks
|
|
|
373
373
|
# @return [Hash] {ok: true, domain:, valid: true} plus :findings when deep;
|
|
374
374
|
# {ok: false, domain:, valid: false, error:} if the boot itself failed
|
|
375
375
|
def validate(domain:, deep: false)
|
|
376
|
-
runtime = Hecks.boot(confine!(domain, "domain"),
|
|
376
|
+
runtime = Hecks.boot(confine!(domain, "domain"), install_doors: false)
|
|
377
377
|
result = { ok: true, domain: domain, valid: true }
|
|
378
378
|
|
|
379
379
|
if deep
|
|
@@ -407,7 +407,7 @@ module Hecks
|
|
|
407
407
|
|
|
408
408
|
# :nodoc:
|
|
409
409
|
def journal_entries(repository)
|
|
410
|
-
repository.entries.map { |entry| { operation: entry.operation, id: entry.id, state:
|
|
410
|
+
repository.entries.map { |entry| { operation: entry.operation, id: entry.id, state: Doors::JsonDoor.materialize(entry.state) } }
|
|
411
411
|
end
|
|
412
412
|
|
|
413
413
|
# Runs a domain's hand-curated .behaviors examples and reports the results.
|
|
@@ -17,7 +17,7 @@ Hecks.bluebook "Tenancy" do
|
|
|
17
17
|
attribute :status, Status, default: { value: "Active" }
|
|
18
18
|
|
|
19
19
|
value_object "Slug" do
|
|
20
|
-
attribute :value, String, pattern: '
|
|
20
|
+
attribute :value, String, pattern: '\A[a-z][a-z0-9_]*\z'
|
|
21
21
|
invariant("a tenant slug is named") { !value.to_s.empty? }
|
|
22
22
|
end
|
|
23
23
|
|
|
@@ -32,7 +32,7 @@ Hecks.bluebook "Tenancy" do
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
value_object "Schema" do
|
|
35
|
-
attribute :value, String, pattern: '
|
|
35
|
+
attribute :value, String, pattern: '\A[a-z][a-z0-9_]*\z'
|
|
36
36
|
invariant("a schema is named") { !value.to_s.empty? }
|
|
37
37
|
end
|
|
38
38
|
|
|
@@ -6,7 +6,7 @@ Hecks.hecksagon "Tenancy" do
|
|
|
6
6
|
# `with:` is required: the event payload also carries the port's dispatch-time args, which
|
|
7
7
|
# `Register` does not declare and would refuse.
|
|
8
8
|
#
|
|
9
|
-
# Check with `
|
|
9
|
+
# Check with `hecks model_check lib/hecks/deploy lib/hecks/tenancy` in one run; alone, the
|
|
10
10
|
# reaction to a foreign event reads as a deaf policy.
|
|
11
11
|
translates "RegisterProvisionedTenant" do
|
|
12
12
|
on Tenant::TenantProvisioned
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Each bin/ script and exe/hecks route, and the hecks 3.0 form that replaces it: the verb spelling the
|
|
2
|
+
# 3.0 launcher answers to (ADR 0080, section 7), with QualityControl verbs after `hecks quality_control`.
|
|
3
|
+
---
|
|
4
|
+
argument_gate_matrix: hecks argument_gate_matrix [--confirm] (writes only with --confirm)
|
|
5
|
+
backfill_era_projections: hecks backfill_projections <domain>
|
|
6
|
+
behaviors: hecks run_behaviors subject=<path>
|
|
7
|
+
bench: hecks bench [domains=pizzas,banking] [targets=] [iterations=1000] [warmup=200]
|
|
8
|
+
[runs=3] [rust_binary=] [format=markdown] [output=]
|
|
9
|
+
canonicalise: hecks canonicalise <file.json>
|
|
10
|
+
check_engine_agreement: hecks check_engine_agreement
|
|
11
|
+
check_era: hecks check_era <url> expected=era-file [timeout=10]
|
|
12
|
+
codemod_hoist_local_givens: hecks hoist_local_givens --confirm
|
|
13
|
+
codemod_implicit_append_fields: hecks drop_implicit_append_fields --confirm
|
|
14
|
+
compact: hecks compact <domain> [aggregates=A,B] --confirm
|
|
15
|
+
console: hecks console [subject=<domain>]
|
|
16
|
+
corpus: hecks rust_domains; hecks regen_order; hecks corpus_rust_coverage
|
|
17
|
+
deploy_template_diff: hecks deploy diff before=a.yaml after=b.yaml [--json] [--strict]
|
|
18
|
+
doc_coverage: hecks measure_doc_coverage
|
|
19
|
+
docs: hecks docs [domain-path] [aggregate]
|
|
20
|
+
evolve: hecks word_status; hecks propose <word> context=X [body=none] [inner=] [opens=]
|
|
21
|
+
[fills=]; hecks admit|deprecate|retire <word> context=X; hecks rename <word> context=X
|
|
22
|
+
new_name=Y; hecks propose_argument <word> context=X kind=K [required=false] [at=N]
|
|
23
|
+
[named=] [fills=] [pairs_shape=]; hecks admit_argument|deprecate_argument|retire_argument
|
|
24
|
+
<word> context=X [at=N] [named=]
|
|
25
|
+
expression_projection: hecks project_expression_tables [--stdout]
|
|
26
|
+
follow: hecks follow <domain> [aggregate=Name] [since=N] [interval=0.5] [wait=N] [--from-now]
|
|
27
|
+
fuzz: hecks fuzz [domain] [seeds=20] [steps=30] [workers=] [adapter=memory]
|
|
28
|
+
generate: hecks generate_sequence <domain> [seed=1] [steps=30] [adversarial=0.0]
|
|
29
|
+
hecks_mcp_door: hecks mcp [--stdio]
|
|
30
|
+
hecks_query_ir_mcp: hecks serve_query_ir_mcp
|
|
31
|
+
heki_compact: hecks compact_heki <domain> [aggregates=A,B] --confirm
|
|
32
|
+
history: hecks history <domain>
|
|
33
|
+
ir: hecks ir <domain> [--translations] | hecks ir --meta
|
|
34
|
+
lint_deploy_recipes: hecks deploy lint [makefiles=a,b]
|
|
35
|
+
merge_tail: hecks merge_tail <domain> winners=id:old,id:new --confirm
|
|
36
|
+
model_check: hecks model_check [--strict] [--profile client] [<domain> …]
|
|
37
|
+
narrate: hecks narrate [domain-path] [aggregate]
|
|
38
|
+
pattern-cases: hecks record_pattern_cases
|
|
39
|
+
present: hecks present [port=4567]
|
|
40
|
+
project: hecks refresh_projections subject=<domain>
|
|
41
|
+
project_bootstrap_table: hecks project_bootstrap_table
|
|
42
|
+
project_cli: hecks project_cli [domain-path …]
|
|
43
|
+
project_deploy: hecks deploy project <domain> [tenant=] [schema=] [out=] [environment=]
|
|
44
|
+
project_diagrams: hecks project_diagrams <domain-path> <ChapterName>
|
|
45
|
+
project_field_hints: hecks project_field_hints
|
|
46
|
+
project_glossary: hecks glossary <domain> chapter=Name
|
|
47
|
+
project_kernel_capabilities: hecks project_kernel_capabilities
|
|
48
|
+
project_model: hecks project_model
|
|
49
|
+
project_oidc: hecks deploy project_oidc [domains=a,b]
|
|
50
|
+
project_parser_table: hecks project_parser_table
|
|
51
|
+
project_refusal_wording: hecks project_refusal_wording
|
|
52
|
+
project_reserved_names: hecks project_reserved_names
|
|
53
|
+
project_rust: hecks project_rust <domain>
|
|
54
|
+
project_rust_vocabulary: hecks project_rust_vocabulary
|
|
55
|
+
project_tenant: hecks deploy provision <domain_dir> slug=s domain= realm= schema=
|
|
56
|
+
database= [adapter=PostgresEra]; hecks deploy reprovision <tenant> directory= database=
|
|
57
|
+
[adapter=PostgresEra]
|
|
58
|
+
project_vocabulary: hecks project_vocabulary
|
|
59
|
+
project_wasm: hecks build_wasm <domain>
|
|
60
|
+
project_wasm_browser: hecks build_browser_wasm <domain>
|
|
61
|
+
qa_concurrency_racer: not user-facing; ProcessPool starts it as hecks quality_control
|
|
62
|
+
race domain= database= schema= verb= step_arguments=
|
|
63
|
+
qa_discover_external_domains: hecks quality_control discover_external_domains [arguments="--projects-dir
|
|
64
|
+
~/Projects --max-depth 3 --known-path PATH …"]
|
|
65
|
+
qa_domain_novelty: hecks quality_control judge_novelty <domain> [arguments="--against
|
|
66
|
+
PATH …"]
|
|
67
|
+
qa_generated_domains: hecks quality_control check_generated_domains [arguments="--domains
|
|
68
|
+
3 --start N --forms a,b --seeds 5 --steps 25 --adversarial 0.3 --rust --shrink-budget
|
|
69
|
+
200 --domain-shrink-budget 40 --promote dir --name N --from-dials --blueprint F
|
|
70
|
+
--source F"]
|
|
71
|
+
qa_log_bug: hecks quality_control log sweep=<sweep id> reference= sequence=N title=
|
|
72
|
+
demonstration= symptom= expectation= submitter= [tags=a,b] [name=] [reproduced=yes|no]
|
|
73
|
+
qa_mine_combinations: hecks quality_control mine_combinations [arguments="--candidates
|
|
74
|
+
3 --rust --seeds 5 --steps 25 --adversarial 0.3 --repair-rounds 1 --agent CMD --from
|
|
75
|
+
DIR --against PATH --brief"]
|
|
76
|
+
qa_open_pr: hecks quality_control patch.open bug=BUG#n number=N url=… branch=… commit=SHA
|
|
77
|
+
title=… [now=]; hecks quality_control improvement.open [angle=ANGLE-n] number=N
|
|
78
|
+
url=… branch=… title=… [now=]
|
|
79
|
+
qa_postgres_migrate: hecks quality_control migrate_ledger_from_heki domain=<domain_dir>
|
|
80
|
+
data=<heki_dir> [arguments="[aggregate …] --force"] (a dry run without --force)
|
|
81
|
+
qa_postgres_role: hecks quality_control create_ledger_role <database> [role=hecks_qa]
|
|
82
|
+
qa_pr_check: hecks quality_control check_pull_requests
|
|
83
|
+
qa_seed_angles: hecks quality_control angle.seed
|
|
84
|
+
qa_seed_targets: hecks quality_control target.seed
|
|
85
|
+
qa_sweep: hecks quality_control ask run [target=] [arguments="--all --seeds N --steps
|
|
86
|
+
N --adversarial F --role-draw F --dry-run F --self-consistency BOOL --modes a,b
|
|
87
|
+
--persistence-parity --no-parity"]; hecks quality_control release <target> [now=]
|
|
88
|
+
[next_streak=] [capabilities=] [yield_score=]
|
|
89
|
+
qa_tick: hecks quality_control tick
|
|
90
|
+
query_ir: hecks ir_constructs [names=a,b]; hecks ir_duplicates [domains=a,b] [--meta];
|
|
91
|
+
hecks ir_impact name=N field=F
|
|
92
|
+
reattest_era: hecks reattest <domain> era=N --confirm
|
|
93
|
+
reference: hecks project_reference
|
|
94
|
+
refresh_rspec_runtime_baseline: hecks refresh_runtime_baseline [workers=6] [from_run=ID]
|
|
95
|
+
regen_codegen_domains: hecks regenerate_corpus [--check]
|
|
96
|
+
regenerate_persistence_legacy_fixtures: hecks regenerate_legacy_fixtures --confirm
|
|
97
|
+
release: hecks publish [--gem-only] [--npm-only] [--npm-local] [--no-wait] --confirm
|
|
98
|
+
(without --confirm, the old --dry-run)
|
|
99
|
+
release_gem: hecks publish_gem --confirm
|
|
100
|
+
rspec_io_parallel_files: hecks list_io_parallel_specs exclude=REGEX [tags=] [check=file];
|
|
101
|
+
hecks write_io_parallel_spec_list exclude=REGEX [tags=] write=file --confirm
|
|
102
|
+
rspec_shard_files: hecks shard_specs group=1 groups=N [runtime_log=]
|
|
103
|
+
run: hecks run [domain] <verb [name=value …] | script.json | - | '{"steps":[…]}'>
|
|
104
|
+
rust_conformance: hecks check_conformance <domain> script=steps.json [artifact=native]
|
|
105
|
+
rust_conformance_fuzz: hecks fuzz_conformance <domain> artifact=native [seeds=10]
|
|
106
|
+
[steps=25]
|
|
107
|
+
rust_coverage: hecks rust_coverage <module> [codegen=ruby]; hecks check_coverage_allowlist
|
|
108
|
+
rust_kernel_coverage: hecks measure_kernel_coverage
|
|
109
|
+
scaffold_translation: hecks scaffold_translation <domain>
|
|
110
|
+
seed_semantics_corpus: hecks seed_semantics_corpus [fixture=name]
|
|
111
|
+
shape: hecks shape <domain>
|
|
112
|
+
smoke_http: hecks smoke_http path=/p [url=] [header=] [scheme=timestamped]
|
|
113
|
+
[payload=] [payload_file=] [health_path=] [state_path=]
|
|
114
|
+
smoke_test: hecks smoke_test [domain]
|
|
115
|
+
spec_example: hecks run_spec_example file=path example=text
|
|
116
|
+
standardize_comments: hecks report_comments paths=a,b [only=] [--json] [top=20]; hecks
|
|
117
|
+
check_comments paths=…; hecks fix_comments paths=… --confirm; hecks write_comment_baseline
|
|
118
|
+
--confirm; hecks check_comments_unchanged ref=REF
|
|
119
|
+
standardize_comments_rust: hecks report_rust_comments paths=a,b [only=] [--json] [top=N];
|
|
120
|
+
hecks check_rust_comments paths=… [only=]; hecks fix_rust_comments paths=… [only=]
|
|
121
|
+
--confirm
|
|
122
|
+
statements: hecks statements <domain> chapter=Name
|
|
123
|
+
stores: hecks stores <domain>
|
|
124
|
+
stress_concurrency_specs: hecks stress_concurrency [runs=30] [parallel=] [seed_start=1]
|
|
125
|
+
translation_audit: hecks audit_translation <domain>; hecks approve_translation <domain>
|
|
126
|
+
[snapshot=] [host_version=] [rehearsal=pass|fail] [rehearsed_at=] --confirm
|
|
127
|
+
vendor_bluebook: hecks vendor <package[@version]> [from=path] [root=path]
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "yaml"
|
|
4
|
+
|
|
5
|
+
module Hecks
|
|
6
|
+
# The table of what each retired `bin/` script became in hecks 3.0.0 (ADR 0080): a command on
|
|
7
|
+
# the Hecks domain, run through `exe/hecks`. `docs/tools.md` is pinned to it.
|
|
8
|
+
module ThreeZero
|
|
9
|
+
# Each retired script's name mapped to the 3.0 form that replaced it.
|
|
10
|
+
FORMS = YAML.safe_load_file(File.join(__dir__, "three_zero/forms.yml")).freeze
|
|
11
|
+
end
|
|
12
|
+
end
|