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,74 @@
|
|
|
1
|
+
Hecks.behaviors "Deploy" do
|
|
2
|
+
vision "A recipe, a lint, a comparison or a projection is recorded as requested before anything outside is asked."
|
|
3
|
+
|
|
4
|
+
loads "hecks.bluebook", "custodian.bluebook", "codebase.bluebook", "context_map.hecksagon", "hecks.hecksagon", "deploy.world", "environments/memory.world"
|
|
5
|
+
|
|
6
|
+
test "Project keeps a domain that has no world file as a faulted recipe" do
|
|
7
|
+
tests "Project", on: "Recipe"
|
|
8
|
+
input run: { value: "stack" }, domain: { value: "/tmp/hecks-behaviors-absent/domain" }
|
|
9
|
+
expect emits: %w[ProjectionRequested RecipeRefused RecipeFaulted]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
test "Project refuses a tenant slug that is not lowercase" do
|
|
13
|
+
tests "Project", on: "Recipe"
|
|
14
|
+
input run: { value: "stack" }, domain: { value: "examples/pizzas" }, tenant: { value: "Not A Slug" }
|
|
15
|
+
expect refused: "must match"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
test "Lint keeps a Makefile that is not there as a flagged lint" do
|
|
19
|
+
tests "Lint", on: "MakefileCheck"
|
|
20
|
+
input run: { value: "recipes" }, makefiles: { value: "/tmp/hecks-behaviors-absent/Makefile" }
|
|
21
|
+
expect emits: %w[LintRequested LintRefused LintFlagged]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
test "Diff keeps a template that is not there as a refused comparison" do
|
|
25
|
+
tests "Diff", on: "TemplateComparison"
|
|
26
|
+
input run: { value: "stacks" }, before: { value: "/tmp/hecks-behaviors-absent/before.yaml" }, after: { value: "/tmp/hecks-behaviors-absent/after.yaml" }
|
|
27
|
+
expect emits: %w[ComparisonRequested ComparisonUnreadable ComparisonRefused]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
test "Diff refuses a template with no path" do
|
|
31
|
+
tests "Diff", on: "TemplateComparison"
|
|
32
|
+
input run: { value: "stacks" }, before: { value: "" }, after: { value: "/tmp/hecks-behaviors-absent/after.yaml" }
|
|
33
|
+
expect refused: "must match"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
test "ProjectOidc keeps a domain it cannot boot out of the manifests and answers" do
|
|
37
|
+
tests "ProjectOidc", on: "OidcManifest"
|
|
38
|
+
input run: { value: "manifests" }, domains: { value: "/tmp/hecks-behaviors-absent/domain" }
|
|
39
|
+
expect emits: %w[OidcProjectionRequested ManifestAnswered OidcProjected]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
test "Provision refuses a slug that is not lowercase, and writes nothing" do
|
|
43
|
+
tests "Provision", on: "Tenant"
|
|
44
|
+
input directory: { value: "/tmp/hecks-behaviors-absent/domain" }, slug: { value: "Not A Slug" }, domain: { value: "Scratch" },
|
|
45
|
+
realm: { value: "Acme" }, schema: { value: "acme" }, database: { value: "hecks_tenants" }
|
|
46
|
+
expect refused: "must match"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
test "Provision refuses a tenant with no realm" do
|
|
50
|
+
tests "Provision", on: "Tenant"
|
|
51
|
+
input directory: { value: "/tmp/hecks-behaviors-absent/domain" }, slug: { value: "acme" }, domain: { value: "Scratch" },
|
|
52
|
+
realm: { value: "" }, schema: { value: "acme" }, database: { value: "hecks_tenants" }
|
|
53
|
+
expect refused: "a tenant realm is named"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
test "Provision on a slug that is already recorded is refused as AlreadyExists" do
|
|
57
|
+
tests "Provision", on: "Tenant"
|
|
58
|
+
setup "Deploy::Tenant.Provision", directory: { value: "/tmp/hecks-behaviors-absent/domain" }, slug: { value: "acme" }, domain: { value: "Scratch" },
|
|
59
|
+
realm: { value: "Acme" }, schema: { value: "acme" }, database: { value: "hecks_tenants" }
|
|
60
|
+
input directory: { value: "/tmp/hecks-behaviors-absent/domain" }, slug: { value: "acme" }, domain: { value: "Scratch" },
|
|
61
|
+
realm: { value: "Acme" }, schema: { value: "acme" }, database: { value: "hecks_tenants" }
|
|
62
|
+
expect refused: "already"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# A directory that is not there is refused, so no overlay is written and the test creates
|
|
66
|
+
# nothing; the writing path runs against a real tmpdir in spec/adapters/driven/tenant_provisioner_spec.rb.
|
|
67
|
+
test "Reprovision keeps a directory that is not there as a refused provisioning" do
|
|
68
|
+
tests "Reprovision", on: "Tenant"
|
|
69
|
+
setup "Deploy::Tenant.Provision", directory: { value: "/tmp/hecks-behaviors-absent/domain" }, slug: { value: "acme" }, domain: { value: "Scratch" },
|
|
70
|
+
realm: { value: "Acme" }, schema: { value: "acme" }, database: { value: "hecks_tenants" }
|
|
71
|
+
input tenant: "acme", directory: { value: "/tmp/hecks-behaviors-absent/domain" }, database: { value: "hecks_tenants" }
|
|
72
|
+
expect emits: %w[TenantReprovisionRequested ProvisioningRefused ProvisioningAbandoned]
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# The Deploy chapter's launcher when the Hecks domain attaches it: `hecks deploy <verb>` reads the
|
|
2
|
+
# world named for the chapter, as `hecks.world` does for the Hecks chapter's own verbs. Its store
|
|
3
|
+
# is not set here: hecks.world's `default_adapter` fills the gap, so the memory overlay swaps it
|
|
4
|
+
# with the rest.
|
|
5
|
+
#
|
|
6
|
+
# `run_keys` mints the `run` key of a recipe, a lint, a comparison or a manifest projection, and
|
|
7
|
+
# `--wait` reports a faulted, flagged, drifted or refused run as exit 1.
|
|
8
|
+
Hecks.world "Deploy" do
|
|
9
|
+
launcher "Launcher", run_keys: true,
|
|
10
|
+
failure_states: %w[flagged failed drifted unreachable refused faulted halted stopped
|
|
11
|
+
abandoned red needs_fix]
|
|
12
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# The Memory selection for the Hecks domain: nothing is written to a database. Specs and
|
|
2
|
+
# pull-request runs use it (`HECKS_ENVIRONMENT=memory`); a real run keeps the PostgresEra
|
|
3
|
+
# journal named in hecks.world. The overlay's `default_adapter` wins over the base's.
|
|
4
|
+
Hecks.world "Hecks" do
|
|
5
|
+
default_adapter "Memory"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
Hecks.world "Governance" do
|
|
9
|
+
default_adapter "Memory"
|
|
10
|
+
end
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# The Governance chapter's connection when the Hecks domain attaches it: boot reads a world
|
|
2
|
+
# named for the chapter, not for the consuming domain. It is the same database hecks.world
|
|
3
|
+
# names, so one journal holds both; environments/memory.world swaps it to Memory too.
|
|
4
|
+
Hecks.world "Governance" do
|
|
5
|
+
default_adapter "PostgresEra"
|
|
6
|
+
default_database ENV.fetch("HECKS_DATABASE", "postgres://hecks@localhost/hecks")
|
|
7
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
Hecks.behaviors "Hecks" do
|
|
2
|
+
vision "A release moves tagged, published, verified; the grammar cache moves fresh, stale, fresh."
|
|
3
|
+
|
|
4
|
+
loads "hecks.bluebook", "custodian.bluebook", "codebase.bluebook", "context_map.hecksagon", "hecks.hecksagon", "environments/memory.world"
|
|
5
|
+
|
|
6
|
+
test "Tag records a version as tagged" do
|
|
7
|
+
tests "Tag", on: "Release"
|
|
8
|
+
input version: { value: "3.0.0" }, ir_version: { value: "1.0.0" }, ships_from: { path: "/work/hecks" }
|
|
9
|
+
expect state: "tagged"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
test "MarkPublished advances a tagged release" do
|
|
13
|
+
# The setup is spelled in full: the attached QualityControl chapter also has a `Tag` command.
|
|
14
|
+
tests "MarkPublished", on: "Release"
|
|
15
|
+
setup "Hecks::Release.Tag", version: { value: "3.0.0" }, ir_version: { value: "1.0.0" }, ships_from: { path: "/work/hecks" }
|
|
16
|
+
input version: { value: "3.0.0" }
|
|
17
|
+
expect emits: ["Published"]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
test "Verify advances a published release" do
|
|
21
|
+
tests "Verify", on: "Release"
|
|
22
|
+
setup "Hecks::Release.Tag", version: { value: "3.0.0" }, ir_version: { value: "1.0.0" }, ships_from: { path: "/work/hecks" }
|
|
23
|
+
setup "Hecks::Release.MarkPublished", version: { value: "3.0.0" }
|
|
24
|
+
input version: { value: "3.0.0" }
|
|
25
|
+
expect state: "verified"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
test "Verify refuses a release that is only tagged" do
|
|
29
|
+
tests "Verify", on: "Release"
|
|
30
|
+
setup "Hecks::Release.Tag", version: { value: "3.0.0" }, ir_version: { value: "1.0.0" }, ships_from: { path: "/work/hecks" }
|
|
31
|
+
input version: { value: "3.0.0" }
|
|
32
|
+
expect refused: "state"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
test "Record keeps a boot cache as fresh" do
|
|
36
|
+
tests "Record", on: "SyntaxBootCache"
|
|
37
|
+
input digest: { value: "abc123" }
|
|
38
|
+
expect state: "fresh"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
test "Invalidate marks a fresh grammar cache stale" do
|
|
42
|
+
tests "Invalidate", on: "SyntaxBootCache"
|
|
43
|
+
setup "Hecks::SyntaxBootCache.Record", digest: { value: "abc123" }
|
|
44
|
+
input digest: { value: "abc123" }
|
|
45
|
+
expect state: "stale"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
test "Rebuild makes a stale grammar cache fresh again" do
|
|
49
|
+
tests "Rebuild", on: "SyntaxBootCache"
|
|
50
|
+
setup "Hecks::SyntaxBootCache.Record", digest: { value: "abc123" }
|
|
51
|
+
setup "Hecks::SyntaxBootCache.Invalidate", digest: { value: "abc123" }
|
|
52
|
+
input digest: { value: "abc123" }
|
|
53
|
+
expect state: "fresh"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
test "Rebuild refuses a cache that is still fresh" do
|
|
57
|
+
tests "Rebuild", on: "SyntaxBootCache"
|
|
58
|
+
setup "Hecks::SyntaxBootCache.Record", digest: { value: "abc123" }
|
|
59
|
+
input digest: { value: "abc123" }
|
|
60
|
+
expect refused: "state"
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
Hecks.bluebook "Hecks" do
|
|
2
|
+
vision "What this install is, what version it runs, and whether its grammar cache can be trusted."
|
|
3
|
+
namespace "Hecks::Domain"
|
|
4
|
+
|
|
5
|
+
aggregate "Release" do
|
|
6
|
+
description "One gem version: the record of what is running and what was shipped."
|
|
7
|
+
|
|
8
|
+
attribute :version, Version
|
|
9
|
+
attribute :ir_version, Version
|
|
10
|
+
attribute :ships_from, Checkout, optional: true
|
|
11
|
+
|
|
12
|
+
identified_by :version
|
|
13
|
+
|
|
14
|
+
value_object "Version" do
|
|
15
|
+
attribute :value, String, pattern: '^[0-9]+[.][0-9]+[.][0-9]+'
|
|
16
|
+
|
|
17
|
+
invariant("a version is present") { !value.to_s.empty? }
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
value_object "Checkout" do
|
|
21
|
+
attribute :path, String
|
|
22
|
+
|
|
23
|
+
invariant("a checkout is a working tree with hecks.gemspec beside lib/") { !path.to_s.empty? }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
lifecycle :state, default: "tagged" do
|
|
27
|
+
transition "MarkPublished" => "published", from: "tagged"
|
|
28
|
+
transition "Verify" => "verified", from: %w[published verified]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
command "Tag" do
|
|
32
|
+
role "Maintainer"
|
|
33
|
+
goal "Record a version as tagged, with the IR version it carries"
|
|
34
|
+
|
|
35
|
+
attribute :version, Version
|
|
36
|
+
attribute :ir_version, Version
|
|
37
|
+
attribute :ships_from, Checkout
|
|
38
|
+
|
|
39
|
+
sets :version
|
|
40
|
+
sets :ir_version
|
|
41
|
+
sets :ships_from
|
|
42
|
+
|
|
43
|
+
emits Tagged
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
command "MarkPublished", from: "tagged" do
|
|
47
|
+
role "Maintainer"
|
|
48
|
+
goal "Record that a tagged version reached the gem registry"
|
|
49
|
+
|
|
50
|
+
reference_to Release
|
|
51
|
+
|
|
52
|
+
emits Published
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
command "Verify", from: %w[published verified] do
|
|
56
|
+
role "Maintainer"
|
|
57
|
+
goal "Record that the published version installs and boots"
|
|
58
|
+
|
|
59
|
+
reference_to Release
|
|
60
|
+
|
|
61
|
+
emits Verified
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
query "Shipped" do
|
|
65
|
+
description "Every version that was tagged, published and verified."
|
|
66
|
+
where(state: "verified")
|
|
67
|
+
order_by :version
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
aggregate "SyntaxBootCache" do
|
|
72
|
+
description "The grammar chapters' on-disk boot cache, keyed by a digest of the chapters it was built from."
|
|
73
|
+
|
|
74
|
+
attribute :digest, Digest
|
|
75
|
+
|
|
76
|
+
identified_by :digest
|
|
77
|
+
|
|
78
|
+
value_object "Digest" do
|
|
79
|
+
attribute :value, String, pattern: '[^ \t\n\r]'
|
|
80
|
+
|
|
81
|
+
invariant("a digest is present") { !value.to_s.empty? }
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
lifecycle :state, default: "fresh" do
|
|
85
|
+
transition "Invalidate" => "stale", from: "fresh"
|
|
86
|
+
transition "Rebuild" => "fresh", from: "stale"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
command "Record" do
|
|
90
|
+
role "Maintainer"
|
|
91
|
+
goal "Record a boot cache as built from the grammar chapters that hash to this digest"
|
|
92
|
+
|
|
93
|
+
attribute :digest, Digest
|
|
94
|
+
|
|
95
|
+
sets :digest
|
|
96
|
+
|
|
97
|
+
emits CacheRecorded
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
command "Invalidate", from: "fresh" do
|
|
101
|
+
role "Maintainer"
|
|
102
|
+
goal "Record that the grammar changed under the cache"
|
|
103
|
+
|
|
104
|
+
reference_to SyntaxBootCache
|
|
105
|
+
|
|
106
|
+
emits CacheInvalidated
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
command "Rebuild", from: "stale" do
|
|
110
|
+
role "Maintainer"
|
|
111
|
+
goal "Record that the cache was rebuilt from the current grammar"
|
|
112
|
+
|
|
113
|
+
reference_to SyntaxBootCache
|
|
114
|
+
|
|
115
|
+
emits CacheRebuilt
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
query "Stale" do
|
|
119
|
+
description "Every cache whose grammar changed under it and is not yet rebuilt."
|
|
120
|
+
where(state: "stale")
|
|
121
|
+
order_by :digest
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
Hecks.hecksagon "Hecks" do
|
|
2
|
+
uses_framework "Governance"
|
|
3
|
+
|
|
4
|
+
# The chapters the gem carries: the language declared in itself (Paging comes with Bluebook),
|
|
5
|
+
# Expression, Tenancy, Deploy and QualityControl (which brings its own ports and adapters).
|
|
6
|
+
%w[Bluebook Hecksagon World Adapter Port Translation Expression Tenancy Deploy QualityControl]
|
|
7
|
+
.each { |chapter| attaches chapter }
|
|
8
|
+
# Persistence is not bound here: hecks.world's `default_adapter` binds every aggregate, so
|
|
9
|
+
# environments/memory.world can swap the whole domain without a double bind.
|
|
10
|
+
|
|
11
|
+
# The outside a journaled Custodian command reaches: each port names what its adapter does,
|
|
12
|
+
# and every ask is answered with the record's own arguments or refused with a reason.
|
|
13
|
+
Hecks::ModelCheckRun.port "DomainRuntime" do
|
|
14
|
+
asks "Check", to: ModelCheckRun do
|
|
15
|
+
attribute :run, RunKey
|
|
16
|
+
answers "ModelCheckAnswered"
|
|
17
|
+
refuses "ModelCheckRefused"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
Hecks::Operation.port "DomainRuntime" do
|
|
22
|
+
asks "Execute", to: Operation do
|
|
23
|
+
attribute :run, OperationKey
|
|
24
|
+
answers "OperationAnswered"
|
|
25
|
+
refuses "OperationRefused"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
asks "Refresh", to: Operation do
|
|
29
|
+
attribute :run, OperationKey
|
|
30
|
+
answers "OperationAnswered"
|
|
31
|
+
refuses "OperationRefused"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
asks "Verify", to: Operation do
|
|
35
|
+
attribute :run, OperationKey
|
|
36
|
+
answers "OperationAnswered"
|
|
37
|
+
refuses "OperationRefused"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
asks "Smoke", to: Operation do
|
|
41
|
+
attribute :run, OperationKey
|
|
42
|
+
answers "OperationAnswered"
|
|
43
|
+
refuses "OperationRefused"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
answers_query "Follow"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
Hecks::Operation.port "Terminal" do
|
|
50
|
+
asks "Open", to: Operation do
|
|
51
|
+
attribute :run, OperationKey
|
|
52
|
+
answers "OperationAnswered"
|
|
53
|
+
refuses "OperationRefused"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
Hecks::Host.port "HostHttp" do
|
|
58
|
+
asks "Fetch", to: Host do
|
|
59
|
+
attribute :host, Address
|
|
60
|
+
answers "EraReported"
|
|
61
|
+
refuses "HostRefused"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Hecks::Era.port "JournalStore" do
|
|
66
|
+
asks "Examine", to: Era do
|
|
67
|
+
attribute :run, RunKey
|
|
68
|
+
answers "EraExamined"
|
|
69
|
+
refuses "EraRefused"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
asks "Apply", to: Era do
|
|
73
|
+
attribute :run, RunKey
|
|
74
|
+
answers "EraChanged"
|
|
75
|
+
refuses "EraRefused"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
answers_query "ScaffoldTranslation"
|
|
79
|
+
answers_query "AuditTranslation"
|
|
80
|
+
answers_query "Attestation"
|
|
81
|
+
answers_query "Compaction"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
Hecks::Package.port "Git" do
|
|
85
|
+
asks "Pin", to: Package do
|
|
86
|
+
attribute :package, PackageRef
|
|
87
|
+
answers "PackagePinned"
|
|
88
|
+
refuses "PinRefused"
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
Hecks::Door.port "Workspace" do
|
|
93
|
+
asks "Write", to: Door do
|
|
94
|
+
attribute :run, DoorKey
|
|
95
|
+
answers "DoorAnswered"
|
|
96
|
+
refuses "DoorRefused"
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
Hecks::Door.port "Terminal" do
|
|
101
|
+
asks "Serve", to: Door do
|
|
102
|
+
attribute :run, DoorKey
|
|
103
|
+
answers "DoorAnswered"
|
|
104
|
+
refuses "DoorRefused"
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
Hecks::Build.port "RustToolchain" do
|
|
109
|
+
asks "Generate", to: Build do
|
|
110
|
+
attribute :run, BuildKey
|
|
111
|
+
answers "BuildAnswered"
|
|
112
|
+
refuses "BuildRefused"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
asks "Wasm", to: Build do
|
|
116
|
+
attribute :run, BuildKey
|
|
117
|
+
answers "BuildAnswered"
|
|
118
|
+
refuses "BuildRefused"
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
asks "BrowserWasm", to: Build do
|
|
122
|
+
attribute :run, BuildKey
|
|
123
|
+
answers "BuildAnswered"
|
|
124
|
+
refuses "BuildRefused"
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
asks "Conform", to: Build do
|
|
128
|
+
attribute :run, BuildKey
|
|
129
|
+
answers "BuildAnswered"
|
|
130
|
+
refuses "BuildRefused"
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
asks "Replay", to: Build do
|
|
134
|
+
attribute :run, BuildKey
|
|
135
|
+
answers "BuildAnswered"
|
|
136
|
+
refuses "BuildRefused"
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
asks "Audit", to: Build do
|
|
140
|
+
attribute :run, BuildKey
|
|
141
|
+
answers "BuildAnswered"
|
|
142
|
+
refuses "BuildRefused"
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
answers_query "RustCoverage"
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
Hecks::FuzzRun.port "ProcessPool" do
|
|
149
|
+
asks "Sweep", to: FuzzRun do
|
|
150
|
+
attribute :run, FuzzKey
|
|
151
|
+
answers "FuzzAnswered"
|
|
152
|
+
refuses "FuzzRefused"
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
Hecks::FuzzRun.port "RustToolchain" do
|
|
157
|
+
asks "Measure", to: FuzzRun do
|
|
158
|
+
attribute :run, FuzzKey
|
|
159
|
+
answers "FuzzAnswered"
|
|
160
|
+
refuses "FuzzRefused"
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
Hecks::Operation.port "HostHttp" do
|
|
165
|
+
asks "Probe", to: Operation do
|
|
166
|
+
attribute :run, OperationKey
|
|
167
|
+
answers "OperationAnswered"
|
|
168
|
+
refuses "OperationRefused"
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Codebase: every ask goes to the SourceTree port, which examines the working tree before it
|
|
173
|
+
# carries a request out.
|
|
174
|
+
Hecks::LanguageRun.port "SourceTree" do
|
|
175
|
+
asks "Examine", to: LanguageRun do
|
|
176
|
+
attribute :run, RunKey
|
|
177
|
+
answers "LanguageExamined"
|
|
178
|
+
refuses "LanguageRefused"
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
asks "Perform", to: LanguageRun do
|
|
182
|
+
attribute :run, RunKey
|
|
183
|
+
answers "LanguageAnswered"
|
|
184
|
+
refuses "LanguageRefused"
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
answers_query "WordStatus"
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
Hecks::KernelRun.port "SourceTree" do
|
|
191
|
+
asks "Examine", to: KernelRun do
|
|
192
|
+
attribute :run, RunKey
|
|
193
|
+
answers "KernelExamined"
|
|
194
|
+
refuses "KernelRefused"
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
asks "Perform", to: KernelRun do
|
|
198
|
+
attribute :run, RunKey
|
|
199
|
+
answers "KernelAnswered"
|
|
200
|
+
refuses "KernelRefused"
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
Hecks::ConformanceRun.port "SourceTree" do
|
|
205
|
+
asks "Examine", to: ConformanceRun do
|
|
206
|
+
attribute :run, RunKey
|
|
207
|
+
answers "ConformanceExamined"
|
|
208
|
+
refuses "ConformanceRefused"
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
asks "Perform", to: ConformanceRun do
|
|
212
|
+
attribute :run, RunKey
|
|
213
|
+
answers "ConformanceAnswered"
|
|
214
|
+
refuses "ConformanceRefused"
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
Hecks::RegenerationRun.port "SourceTree" do
|
|
219
|
+
asks "Examine", to: RegenerationRun do
|
|
220
|
+
attribute :run, RunKey
|
|
221
|
+
answers "RegenerationExamined"
|
|
222
|
+
refuses "RegenerationRefused"
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
asks "Perform", to: RegenerationRun do
|
|
226
|
+
attribute :run, RunKey
|
|
227
|
+
answers "RegenerationAnswered"
|
|
228
|
+
refuses "RegenerationRefused"
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
Hecks::StyleRun.port "SourceTree" do
|
|
233
|
+
asks "Examine", to: StyleRun do
|
|
234
|
+
attribute :run, RunKey
|
|
235
|
+
answers "StyleExamined"
|
|
236
|
+
refuses "StyleRefused"
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
asks "Perform", to: StyleRun do
|
|
240
|
+
attribute :run, RunKey
|
|
241
|
+
answers "StyleAnswered"
|
|
242
|
+
refuses "StyleRefused"
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
answers_query "ReportComments"
|
|
246
|
+
answers_query "ReportRustComments"
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
Hecks::CodemodRun.port "SourceTree" do
|
|
250
|
+
asks "Examine", to: CodemodRun do
|
|
251
|
+
attribute :run, RunKey
|
|
252
|
+
answers "CodemodExamined"
|
|
253
|
+
refuses "CodemodRefused"
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
asks "Perform", to: CodemodRun do
|
|
257
|
+
attribute :run, RunKey
|
|
258
|
+
answers "CodemodAnswered"
|
|
259
|
+
refuses "CodemodRefused"
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
Hecks::TestSuiteRun.port "SourceTree" do
|
|
264
|
+
asks "Examine", to: TestSuiteRun do
|
|
265
|
+
attribute :run, RunKey
|
|
266
|
+
answers "TestSuiteExamined"
|
|
267
|
+
refuses "TestSuiteRefused"
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
asks "Perform", to: TestSuiteRun do
|
|
271
|
+
attribute :run, RunKey
|
|
272
|
+
answers "TestSuiteAnswered"
|
|
273
|
+
refuses "TestSuiteRefused"
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
answers_query "ShardSpecs"
|
|
277
|
+
answers_query "ListIoParallelSpecs"
|
|
278
|
+
answers_query "RecordPatternCases"
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
Hecks::CorpusRun.port "SourceTree" do
|
|
282
|
+
asks "Examine", to: CorpusRun do
|
|
283
|
+
attribute :run, RunKey
|
|
284
|
+
answers "CorpusExamined"
|
|
285
|
+
refuses "CorpusRefused"
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
asks "Perform", to: CorpusRun do
|
|
289
|
+
attribute :run, RunKey
|
|
290
|
+
answers "CorpusAnswered"
|
|
291
|
+
refuses "CorpusRefused"
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
answers_query "RustDomains"
|
|
295
|
+
answers_query "RegenOrder"
|
|
296
|
+
answers_query "CorpusRustCoverage"
|
|
297
|
+
answers_query "IrConstructs"
|
|
298
|
+
answers_query "IrDuplicates"
|
|
299
|
+
answers_query "IrImpact"
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
Hecks::PublishingRun.port "SourceTree" do
|
|
303
|
+
asks "Examine", to: PublishingRun do
|
|
304
|
+
attribute :run, RunKey
|
|
305
|
+
answers "PublishingExamined"
|
|
306
|
+
refuses "PublishingRefused"
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
asks "Perform", to: PublishingRun do
|
|
310
|
+
attribute :run, RunKey
|
|
311
|
+
answers "PublishingAnswered"
|
|
312
|
+
refuses "PublishingRefused"
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
# Deploy, attached above: its bluebook loads without deploy.hecksagon, so the outside its
|
|
317
|
+
# commands reach is named here as well. TenantProvisioning writes a tenant's overlay world;
|
|
318
|
+
# DeployToolchain generates and checks a recipe and projects the OIDC manifests.
|
|
319
|
+
Deploy::Tenant.port "TenantProvisioning" do
|
|
320
|
+
asks "WriteOverlay", to: Tenant do
|
|
321
|
+
attribute :database, DatabaseName
|
|
322
|
+
attribute :adapter, AdapterName, optional: true
|
|
323
|
+
attribute :directory, DirectoryPath
|
|
324
|
+
answers "TenantProvisioned"
|
|
325
|
+
refuses "ProvisioningRefused"
|
|
326
|
+
end
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
Deploy::Recipe.port "DeployToolchain" do
|
|
330
|
+
asks "Generate", to: Recipe do
|
|
331
|
+
attribute :run, RunKey
|
|
332
|
+
answers "RecipeAnswered"
|
|
333
|
+
refuses "RecipeRefused"
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
Deploy::MakefileCheck.port "DeployToolchain" do
|
|
338
|
+
asks "Scan", to: MakefileCheck do
|
|
339
|
+
attribute :run, RunKey
|
|
340
|
+
answers "LintAnswered"
|
|
341
|
+
refuses "LintRefused"
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
Deploy::TemplateComparison.port "DeployToolchain" do
|
|
346
|
+
asks "Compare", to: TemplateComparison do
|
|
347
|
+
attribute :run, RunKey
|
|
348
|
+
answers "ComparisonAnswered"
|
|
349
|
+
refuses "ComparisonUnreadable"
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
Deploy::OidcManifest.port "DeployToolchain" do
|
|
354
|
+
asks "Manifest", to: OidcManifest do
|
|
355
|
+
attribute :run, RunKey
|
|
356
|
+
answers "ManifestAnswered"
|
|
357
|
+
refuses "ManifestRefused"
|
|
358
|
+
end
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
# Queries answered from outside the domain. The bluebook declares the question and the value
|
|
362
|
+
# object its answer takes (`returns`) and never says who answers it; each `answers_query` here
|
|
363
|
+
# binds it to the port's adapter. The queries on the ports above (Follow, the Era readings,
|
|
364
|
+
# WordStatus and the rest) are bound the same way.
|
|
365
|
+
Hecks::Introspection.port "DomainRuntime" do
|
|
366
|
+
answers_query "Ir"
|
|
367
|
+
answers_query "Shape"
|
|
368
|
+
answers_query "Stores"
|
|
369
|
+
answers_query "History"
|
|
370
|
+
answers_query "Statements"
|
|
371
|
+
answers_query "Narrate"
|
|
372
|
+
answers_query "Docs"
|
|
373
|
+
answers_query "ProjectDiagrams"
|
|
374
|
+
answers_query "Glossary"
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
Hecks::FuzzRun.port "DomainRuntime" do
|
|
378
|
+
answers_query "GenerateSequence"
|
|
379
|
+
end
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
# The one seam where Deploy's "Tenant" (a validated request) becomes Tenancy's "Tenant" (a fact),
|
|
383
|
+
# as tenancy.hecksagon declares it for the chapters booted on their own: `hecks deploy provision`
|
|
384
|
+
# registers the tenant it provisioned. It sits here, after `attaches` has loaded both chapters.
|
|
385
|
+
Hecks.hecksagon "Tenancy" do
|
|
386
|
+
translates "RegisterProvisionedTenant" do
|
|
387
|
+
on Tenant::TenantProvisioned
|
|
388
|
+
trigger Tenant::Register, with: { slug: :slug, domain: :domain, realm: :realm, schema: :schema }
|
|
389
|
+
end
|
|
390
|
+
end
|