hecks 2.8.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 +50 -7
- data/lib/hecks/adapters/driven/claude_code.rb +4 -104
- data/lib/hecks/adapters/driven/d1.rb +44 -237
- data/lib/hecks/adapters/driven/folder.rb +17 -76
- data/lib/hecks/adapters/driven/google_authentication.rb +15 -49
- data/lib/hecks/adapters/driven/governance_authorization.rb +23 -70
- data/lib/hecks/adapters/driven/heki/journal.rb +8 -41
- data/lib/hecks/adapters/driven/heki/saga_store.rb +12 -54
- data/lib/hecks/adapters/driven/heki/snapshot.rb +4 -12
- data/lib/hecks/adapters/driven/heki.rb +13 -42
- data/lib/hecks/adapters/driven/identity_registry.rb +3 -14
- data/lib/hecks/adapters/driven/in_memory_ordering.rb +9 -26
- data/lib/hecks/adapters/driven/in_process_key_vault.rb +2 -14
- data/lib/hecks/adapters/driven/lambda/client.rb +10 -51
- data/lib/hecks/adapters/driven/lambda.rb +10 -84
- data/lib/hecks/adapters/driven/local_storage.rb +5 -40
- data/lib/hecks/adapters/driven/memory.rb +32 -100
- data/lib/hecks/adapters/driven/mock_stripe_adapter.rb +5 -21
- data/lib/hecks/adapters/driven/postgres/codec.rb +6 -28
- data/lib/hecks/adapters/driven/postgres/outbox.rb +3 -12
- data/lib/hecks/adapters/driven/postgres/reconnect.rb +10 -32
- data/lib/hecks/adapters/driven/postgres/schema_builder.rb +34 -108
- data/lib/hecks/adapters/driven/postgres/shared_connection.rb +180 -0
- data/lib/hecks/adapters/driven/postgres.rb +149 -136
- data/lib/hecks/adapters/driven/postgres_era.adapter +4 -15
- data/lib/hecks/adapters/driven/prism.rb +48 -38
- data/lib/hecks/adapters/driven/sql_query_builder.rb +21 -121
- data/lib/hecks/adapters/driven/sqlite/codec.rb +8 -40
- data/lib/hecks/adapters/driven/sqlite/projection.rb +26 -82
- data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +40 -84
- data/lib/hecks/adapters/driven/sqlite.rb +128 -65
- data/lib/hecks/adapters/driven/tenant_provisioner.rb +76 -62
- data/lib/hecks/adapters/driven.rb +5 -36
- data/lib/hecks/adapters/driving/github_webhook.rb +8 -76
- data/lib/hecks/behaviors/dsl.rb +7 -25
- data/lib/hecks/behaviors/expectations.rb +32 -142
- data/lib/hecks/behaviors/ir.rb +7 -20
- data/lib/hecks/behaviors/rspec.rb +6 -17
- data/lib/hecks/behaviors/runner.rb +10 -34
- data/lib/hecks/behaviors.rb +4 -8
- 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/aggregate.rb +9 -75
- data/lib/hecks/bluebook/assembly/aggregate_assembly.rb +9 -38
- data/lib/hecks/bluebook/assembly/build.rb +4 -15
- data/lib/hecks/bluebook/assembly/contract.rb +15 -136
- data/lib/hecks/bluebook/assembly/contracts.rb +56 -174
- data/lib/hecks/bluebook/assembly/marks.rb +31 -223
- data/lib/hecks/bluebook/assembly/specializer.rb +6 -52
- data/lib/hecks/bluebook/assembly.rb +6 -45
- data/lib/hecks/bluebook/attribute.rb +12 -61
- data/lib/hecks/bluebook/behaviour/aggregate.rb +39 -39
- data/lib/hecks/bluebook/behaviour/attribute.rb +3 -14
- data/lib/hecks/bluebook/behaviour/chapter.rb +14 -42
- data/lib/hecks/bluebook/behaviour/command.rb +14 -66
- data/lib/hecks/bluebook/behaviour/domain_port.rb +11 -20
- data/lib/hecks/bluebook/behaviour/entity.rb +7 -27
- data/lib/hecks/bluebook/behaviour/hexagon.rb +23 -41
- data/lib/hecks/bluebook/behaviour/lifecycle.rb +15 -40
- data/lib/hecks/bluebook/behaviour/policy.rb +23 -52
- data/lib/hecks/bluebook/behaviour/process_manager.rb +30 -57
- data/lib/hecks/bluebook/behaviour/read_model.rb +25 -31
- data/lib/hecks/bluebook/behaviour/traits.rb +27 -64
- data/lib/hecks/bluebook/behaviour/value_object.rb +5 -24
- data/lib/hecks/bluebook/capabilities.rb +17 -49
- data/lib/hecks/bluebook/chapter.rb +16 -50
- data/lib/hecks/bluebook/command.rb +23 -81
- data/lib/hecks/bluebook/domain_port.rb +49 -67
- data/lib/hecks/bluebook/dsl/aggregate_builder/sealing.rb +50 -229
- data/lib/hecks/bluebook/dsl/aggregate_builder.rb +50 -377
- data/lib/hecks/bluebook/dsl/attribute_collector.rb +33 -204
- data/lib/hecks/bluebook/dsl/binding_proxy.rb +16 -69
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation.rb +96 -708
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +63 -169
- data/lib/hecks/bluebook/dsl/bootstrap_table.rb +3 -1
- data/lib/hecks/bluebook/dsl/command_builder.rb +74 -546
- data/lib/hecks/bluebook/dsl/const_shim.rb +8 -41
- data/lib/hecks/bluebook/dsl/domain_port_builder.rb +42 -89
- data/lib/hecks/bluebook/dsl/entity_builder.rb +44 -330
- data/lib/hecks/bluebook/dsl/generic_dispatch.rb +20 -269
- data/lib/hecks/bluebook/dsl/hecksagon_builder.rb +148 -197
- data/lib/hecks/bluebook/dsl/identity_declaration.rb +13 -88
- data/lib/hecks/bluebook/dsl/lifecycle_builder.rb +6 -20
- data/lib/hecks/bluebook/dsl/policy_builder.rb +16 -88
- data/lib/hecks/bluebook/dsl/port_builder.rb +2 -6
- data/lib/hecks/bluebook/dsl/port_operation_builder.rb +22 -96
- data/lib/hecks/bluebook/dsl/process_manager_builder.rb +31 -184
- data/lib/hecks/bluebook/dsl/query_builder.rb +38 -43
- data/lib/hecks/bluebook/dsl/read_model_builder.rb +75 -201
- data/lib/hecks/bluebook/dsl/rule_reference.rb +22 -163
- data/lib/hecks/bluebook/dsl/translation_builder.rb +28 -114
- data/lib/hecks/bluebook/dsl/value_object_builder.rb +10 -124
- data/lib/hecks/bluebook/dsl/word_gate.rb +16 -162
- data/lib/hecks/bluebook/dsl/world_builder.rb +46 -111
- data/lib/hecks/bluebook/entity.rb +13 -71
- data/lib/hecks/bluebook/expression/ast_json.rb +24 -190
- data/lib/hecks/bluebook/expression/ast_reader.rb +12 -54
- data/lib/hecks/bluebook/expression/canonical_form.rb +11 -88
- data/lib/hecks/bluebook/expression/evaluator.rb +47 -295
- data/lib/hecks/bluebook/expression/resolver/block_predicates.rb +30 -147
- data/lib/hecks/bluebook/expression/resolver.rb +39 -661
- data/lib/hecks/bluebook/hexagon.rb +18 -33
- data/lib/hecks/bluebook/lifecycle.rb +5 -16
- data/lib/hecks/bluebook/meta_validator/adapter_judge.rb +1 -7
- data/lib/hecks/bluebook/meta_validator/judge.rb +111 -361
- data/lib/hecks/bluebook/meta_validator/plan.rb +33 -162
- data/lib/hecks/bluebook/meta_validator/port_judge.rb +2 -7
- data/lib/hecks/bluebook/meta_validator/readings.rb +56 -342
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +25 -176
- data/lib/hecks/bluebook/meta_validator/shapes.rb +53 -267
- data/lib/hecks/bluebook/meta_validator/syntax_boot.rb +47 -306
- data/lib/hecks/bluebook/meta_validator/translation_judge.rb +7 -43
- data/lib/hecks/bluebook/meta_validator/verdict_cache.rb +246 -0
- data/lib/hecks/bluebook/meta_validator/world_judge.rb +6 -18
- data/lib/hecks/bluebook/meta_validator.rb +87 -352
- data/lib/hecks/bluebook/model_check/client_profile.rb +6 -21
- data/lib/hecks/bluebook/model_check.rb +122 -596
- data/lib/hecks/bluebook/pattern_subset.rb +49 -69
- data/lib/hecks/bluebook/process_manager.rb +13 -83
- data/lib/hecks/bluebook/project_loader.rb +3 -39
- data/lib/hecks/bluebook/project_register.rb +12 -60
- data/lib/hecks/bluebook/query.rb +27 -51
- data/lib/hecks/bluebook/read_model.rb +57 -81
- data/lib/hecks/bluebook/reference.rb +7 -41
- data/lib/hecks/bluebook/smoke_test.rb +9 -99
- data/lib/hecks/bluebook/synthesizer.rb +13 -62
- data/lib/hecks/bluebook/translation.rb +26 -62
- data/lib/hecks/bluebook/value_object.rb +11 -36
- data/lib/hecks/bluebook.rb +5 -22
- data/lib/hecks/cache_dir.rb +4 -23
- 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 +5 -23
- 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 +4 -6
- data/lib/hecks/cli/mcp.rb +5 -6
- data/lib/hecks/cli/model_check.rb +24 -88
- data/lib/hecks/cli/pattern_cases.rb +47 -0
- data/lib/hecks/cli/present.rb +39 -0
- data/lib/hecks/cli/project_cli.rb +223 -64
- data/lib/hecks/cli/project_diagrams.rb +4 -10
- 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 +15 -61
- 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 +7 -19
- data/lib/hecks/cli/spec_example.rb +27 -0
- data/lib/hecks/cli/statements.rb +32 -0
- data/lib/hecks/cli/stores.rb +4 -6
- data/lib/hecks/cli/stress_concurrency_specs.rb +177 -0
- data/lib/hecks/cli.rb +216 -73
- data/lib/hecks/codemod.rb +324 -0
- data/lib/hecks/construct.rb +8 -34
- data/lib/hecks/corpus.rb +423 -0
- data/lib/hecks/deploy/bluebook/deploy.bluebook +617 -158
- data/lib/hecks/deploy/bluebook/deploy.hecksagon +41 -11
- 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 +14 -34
- data/lib/hecks/doors/handle.rb +206 -0
- data/lib/hecks/doors/json_door.rb +132 -0
- data/lib/hecks/doors/launcher_options.rb +129 -0
- data/lib/hecks/{cli → doors}/mcp_door.rb +25 -120
- data/lib/hecks/doors/mcp_door_scope.rb +97 -0
- data/lib/hecks/doors/ruby_door/aggregate_door.rb +162 -0
- data/lib/hecks/doors/ruby_door/chapter.rb +72 -0
- data/lib/hecks/doors/ruby_door.rb +77 -0
- data/lib/hecks/doors.rb +61 -0
- data/lib/hecks/embryonaut_bluebook/lock.rb +3 -35
- data/lib/hecks/embryonaut_bluebook/shape.rb +1 -17
- data/lib/hecks/embryonaut_bluebook/vendor.rb +8 -53
- data/lib/hecks/embryonaut_bluebook/vendor_cli.rb +4 -19
- data/lib/hecks/embryonaut_bluebook.rb +5 -72
- data/lib/hecks/engine_agreement.rb +156 -0
- data/lib/hecks/facade.rb +23 -51
- data/lib/hecks/forms/app.rb +21 -76
- data/lib/hecks/forms/banking_presentation.rb +50 -0
- data/lib/hecks/forms/command_form_renderer.rb +10 -29
- data/lib/hecks/forms/field_renderer.rb +17 -156
- data/lib/hecks/forms/field_shape.rb +31 -222
- data/lib/hecks/forms/html.rb +12 -47
- data/lib/hecks/forms/index_renderer.rb +1 -4
- data/lib/hecks/forms/page.rb +3 -9
- data/lib/hecks/forms/params.rb +14 -60
- data/lib/hecks/forms/port_argument.rb +2 -19
- data/lib/hecks/forms/query_form_renderer.rb +4 -79
- data/lib/hecks/forms/record_renderer.rb +8 -75
- data/lib/hecks/forms/record_table.rb +7 -50
- data/lib/hecks/forms/reference_options.rb +3 -30
- data/lib/hecks/forms/value_object_shape.rb +8 -35
- data/lib/hecks/forms.rb +5 -33
- data/lib/hecks/fqn.rb +5 -12
- data/lib/hecks/framework/bluebook/compliance.bluebook +16 -65
- data/lib/hecks/framework/bluebook/console_settings.bluebook +47 -134
- data/lib/hecks/framework/bluebook/framework.hecksagon +5 -14
- data/lib/hecks/framework/bluebook/governance.bluebook +13 -34
- data/lib/hecks/framework/bluebook/identity.bluebook +11 -26
- data/lib/hecks/framework/bluebook/privacy.bluebook +8 -33
- data/lib/hecks/framework.rb +11 -80
- data/lib/hecks/freezer.rb +5 -39
- 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/grammar/expression.bluebook +15 -40
- data/lib/hecks/grammar/translation.bluebook +3 -6
- data/lib/hecks/grammar.rb +16 -41
- 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/ir.rb +14 -83
- data/lib/hecks/kernel_capabilities.rb +194 -0
- data/lib/hecks/language/adapter.bluebook +2 -7
- data/lib/hecks/language/bluebook/aggregate.bluebook +56 -221
- data/lib/hecks/language/bluebook/attaches/paging.bluebook +6 -15
- data/lib/hecks/language/bluebook/bluebook.bluebook +26 -83
- data/lib/hecks/language/bluebook/bluebook.hecksagon +3 -15
- data/lib/hecks/language/bluebook/command.bluebook +27 -144
- data/lib/hecks/language/bluebook/entity.bluebook +24 -97
- data/lib/hecks/language/bluebook/policy.bluebook +16 -67
- data/lib/hecks/language/bluebook/process_manager.bluebook +28 -151
- data/lib/hecks/language/bluebook/projection.bluebook +126 -60
- data/lib/hecks/language/bluebook/query.bluebook +19 -43
- data/lib/hecks/language/bluebook/shape.bluebook +23 -73
- data/lib/hecks/language/bluebook/syntax.bluebook +51 -262
- data/lib/hecks/language/bluebook/vocabulary.bluebook +83 -198
- data/lib/hecks/language/hecksagon/adapter_binding.bluebook +3 -10
- data/lib/hecks/language/hecksagon/domain_port.bluebook +14 -19
- data/lib/hecks/language/hecksagon/hecksagon.bluebook +26 -25
- data/lib/hecks/language/hecksagon/port_operation.bluebook +3 -14
- data/lib/hecks/language/oidc.json +35 -0
- data/lib/hecks/language/port.bluebook +4 -17
- data/lib/hecks/language/translation/translation.bluebook +3 -9
- data/lib/hecks/language/translation/translation_aggregate.bluebook +5 -24
- data/lib/hecks/language/world/wiring.bluebook +1 -3
- data/lib/hecks/language/world/world.bluebook +5 -7
- data/lib/hecks/literal.rb +8 -50
- data/lib/hecks/mcp_stdio_guard.rb +4 -41
- data/lib/hecks/naming.rb +29 -137
- data/lib/hecks/persistence_legacy_fixture/regenerate.rb +161 -0
- data/lib/hecks/persistence_legacy_fixture.rb +113 -0
- data/lib/hecks/ports/access_control.rb +7 -23
- data/lib/hecks/ports/agent/answers.rb +5 -23
- data/lib/hecks/ports/agent.rb +47 -172
- data/lib/hecks/ports/authentication.rb +12 -39
- data/lib/hecks/ports/authorization.rb +16 -43
- data/lib/hecks/ports/clock.rb +5 -45
- data/lib/hecks/ports/extraction.rb +7 -12
- data/lib/hecks/ports/identity_assignment.rb +8 -29
- data/lib/hecks/ports/identity_generation.rb +6 -29
- data/lib/hecks/ports/identity_resolution.rb +2 -10
- data/lib/hecks/ports/key_vault.rb +9 -45
- data/lib/hecks/ports/persistence/append_only.rb +61 -64
- data/lib/hecks/ports/persistence/binding_policy.rb +4 -14
- data/lib/hecks/ports/persistence/codec_boundary.rb +20 -80
- data/lib/hecks/ports/persistence/null_saga_store.rb +4 -20
- data/lib/hecks/ports/persistence/plugin.rb +13 -42
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +44 -144
- data/lib/hecks/ports/persistence/plugins/era/era_guard/shape_diff.rb +15 -115
- data/lib/hecks/ports/persistence/plugins/era/era_guard.rb +20 -85
- data/lib/hecks/ports/persistence/plugins/era/era_tamper.rb +6 -25
- data/lib/hecks/ports/persistence/plugins/era/expected_era.rb +18 -24
- data/lib/hecks/ports/persistence/plugins/era/lineage.rb +55 -181
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/events.rb +77 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/era_store.rb +12 -122
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/field_cache.rb +28 -128
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/head_compiler.rb +73 -474
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/mint_transaction.rb +31 -124
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/provisioning.rb +45 -219
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/resumable_backfill.rb +13 -108
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/tail_merge.rb +19 -76
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/transform_installer.rb +9 -49
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage.rb +6 -123
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/coverage_check.rb +23 -55
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/era_resolver.rb +14 -72
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/merge_coordinator.rb +7 -16
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/minter.rb +43 -127
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager.rb +13 -45
- data/lib/hecks/ports/persistence/plugins/era/postgres_era.rb +131 -555
- data/lib/hecks/ports/persistence/plugins/era/storage_shape.rb +13 -63
- 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 +2 -17
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_one.rb +3 -14
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_two.rb +13 -58
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/unfed_report.rb +3 -17
- data/lib/hecks/ports/persistence/plugins/era/translation/audit.rb +9 -26
- data/lib/hecks/ports/persistence/plugins/era/translation/reattest.rb +50 -47
- data/lib/hecks/ports/persistence/plugins/era/translation/rule_compiler.rb +18 -124
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/differ.rb +34 -123
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/renderer.rb +5 -12
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/writer.rb +3 -9
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold.rb +2 -14
- data/lib/hecks/ports/persistence/plugins/era/translation.rb +1 -0
- data/lib/hecks/ports/persistence/plugins/era.rb +4 -23
- data/lib/hecks/ports/persistence/postgres_dump/connection.rb +7 -23
- data/lib/hecks/ports/persistence/postgres_dump.rb +4 -35
- data/lib/hecks/ports/persistence/remote_runtime.rb +2 -24
- data/lib/hecks/ports/persistence/repository_factory.rb +8 -27
- data/lib/hecks/ports/persistence/state_codec.rb +47 -108
- data/lib/hecks/ports/persistence.rb +7 -14
- data/lib/hecks/ports/projection.rb +42 -84
- data/lib/hecks/ports/query/in_memory.rb +10 -58
- data/lib/hecks/ports/query/ordering.rb +11 -32
- data/lib/hecks/ports/query.rb +14 -37
- data/lib/hecks/ports.rb +2 -8
- data/lib/hecks/projection_files.rb +285 -0
- data/lib/hecks/projections/bootstrap_table.rb +12 -44
- data/lib/hecks/projections/deploy/fargate/assembly.rb +2 -15
- data/lib/hecks/projections/deploy/fargate/cdn.rb +1 -48
- data/lib/hecks/projections/deploy/fargate/cdn_default.rb +2 -11
- data/lib/hecks/projections/deploy/fargate/check.rb +5 -14
- data/lib/hecks/projections/deploy/fargate/containers.rb +3 -78
- data/lib/hecks/projections/deploy/fargate/extras.rb +3 -44
- data/lib/hecks/projections/deploy/fargate/monitoring.rb +0 -44
- data/lib/hecks/projections/deploy/fargate/settings.rb +2 -54
- data/lib/hecks/projections/deploy/fargate/yaml.rb +13 -58
- data/lib/hecks/projections/deploy/fargate.rb +40 -207
- data/lib/hecks/projections/deploy/lambda.rb +191 -708
- data/lib/hecks/projections/deploy/preview/access_yaml.rb +1 -33
- data/lib/hecks/projections/deploy/preview/containers.rb +6 -111
- data/lib/hecks/projections/deploy/preview/preview.sh.erb +1 -1
- data/lib/hecks/projections/deploy/preview/routing_yaml.rb +4 -56
- data/lib/hecks/projections/deploy/preview/script.rb +2 -14
- data/lib/hecks/projections/deploy/preview/settings.rb +3 -33
- data/lib/hecks/projections/deploy/preview/task_yaml.rb +2 -38
- data/lib/hecks/projections/deploy/preview/template.rb +3 -59
- data/lib/hecks/projections/deploy/preview.rb +2 -67
- 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/settings.rb +3 -25
- data/lib/hecks/projections/deploy/scripts/smoke-after-deploy.sh.tmpl +1 -1
- data/lib/hecks/projections/deploy/scripts.rb +4 -57
- data/lib/hecks/projections/deploy/shared.rb +48 -147
- data/lib/hecks/projections/deploy/smoke.rb +4 -61
- data/lib/hecks/projections/deploy/template_diff/comparer.rb +3 -25
- data/lib/hecks/projections/deploy/template_diff/loader.rb +2 -11
- data/lib/hecks/projections/deploy/template_diff.rb +5 -57
- data/lib/hecks/projections/diagrams.rb +22 -584
- data/lib/hecks/projections/glossary/html.rb +14 -130
- data/lib/hecks/projections/glossary/markdown.rb +8 -69
- data/lib/hecks/projections/glossary/mermaid.rb +9 -66
- data/lib/hecks/projections/glossary/sensitivity.rb +5 -34
- data/lib/hecks/projections/glossary/sentences.rb +14 -159
- data/lib/hecks/projections/glossary.rb +30 -222
- data/lib/hecks/projections/ir.rb +3 -10
- data/lib/hecks/projections/model/deviations.rb +16 -43
- data/lib/hecks/projections/model.rb +12 -51
- data/lib/hecks/projections/oidc.rb +12 -56
- data/lib/hecks/projections/parser_table.rb +13 -32
- data/lib/hecks/projections/reference.rb +4 -18
- data/lib/hecks/projections/rust_vocabulary.rb +13 -251
- data/lib/hecks/projections/shape.rb +3 -29
- data/lib/hecks/projections/statements.rb +7 -86
- data/lib/hecks/projections/vocabulary.rb +6 -22
- data/lib/hecks/projections.rb +2 -16
- data/lib/hecks/projector/cli_projector.rb +154 -400
- data/lib/hecks/projector/docs_projector.rb +10 -201
- data/lib/hecks/projector/exporter.rb +42 -134
- data/lib/hecks/projector/ir_projector.rb +2 -9
- data/lib/hecks/projector/narrate_projector.rb +15 -189
- data/lib/hecks/projector/target.rb +13 -76
- data/lib/hecks/projector.rb +30 -121
- 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/query_specification/common/comparators.rb +5 -26
- data/lib/hecks/query_specification/common/comparison.rb +35 -143
- data/lib/hecks/query_specification/common/dsl.rb +8 -24
- data/lib/hecks/query_specification/common/null_policy.rb +20 -70
- data/lib/hecks/query_specification/common/options.rb +2 -6
- data/lib/hecks/query_specification/common/where_clause.rb +2 -10
- data/lib/hecks/query_specification/field_path.rb +37 -77
- data/lib/hecks/query_specification/hop_path.rb +12 -76
- data/lib/hecks/release/gem_pin.rb +2 -26
- data/lib/hecks/release/runner/ci_publisher.rb +5 -8
- data/lib/hecks/release/runner/clean_tree.rb +42 -0
- data/lib/hecks/release/runner/commands.rb +2 -4
- data/lib/hecks/release/runner/console.rb +6 -0
- data/lib/hecks/release/runner/gem_publisher.rb +15 -9
- data/lib/hecks/release/runner/npm_publisher.rb +9 -53
- data/lib/hecks/release/runner/preflight.rb +29 -20
- data/lib/hecks/release/runner/published.rb +8 -26
- data/lib/hecks/release/runner/tagger.rb +31 -23
- data/lib/hecks/release/runner.rb +60 -38
- data/lib/hecks/rendering.rb +4 -26
- data/lib/hecks/router/namespace_installer.rb +15 -39
- data/lib/hecks/router.rb +4 -8
- data/lib/hecks/runtime/adapter_lookup.rb +124 -0
- data/lib/hecks/runtime/aggregate_lock.rb +8 -33
- data/lib/hecks/runtime/boot_gates.rb +3 -18
- data/lib/hecks/runtime/caller.rb +19 -59
- data/lib/hecks/runtime/capability_graph.rb +5 -21
- data/lib/hecks/runtime/command_interpreter/argument_gate.rb +16 -78
- data/lib/hecks/runtime/command_interpreter/mutation_applier.rb +27 -160
- data/lib/hecks/runtime/command_interpreter.rb +124 -306
- data/lib/hecks/runtime/command_rules/admissibility.rb +95 -366
- data/lib/hecks/runtime/command_rules/arithmetic.rb +66 -196
- data/lib/hecks/runtime/command_rules/authorization.rb +13 -45
- data/lib/hecks/runtime/command_rules/emission.rb +8 -21
- data/lib/hecks/runtime/command_rules/references.rb +23 -202
- data/lib/hecks/runtime/dependency_planning.rb +50 -104
- data/lib/hecks/runtime/dispatcher.rb +134 -243
- data/lib/hecks/runtime/entity_element.rb +40 -462
- data/lib/hecks/runtime/entity_interpreter.rb +64 -219
- data/lib/hecks/runtime/errors.rb +32 -115
- data/lib/hecks/runtime/event.rb +3 -25
- data/lib/hecks/runtime/identity.rb +18 -154
- data/lib/hecks/runtime/instance.rb +18 -150
- data/lib/hecks/runtime/interpreting.rb +14 -70
- data/lib/hecks/runtime/invocation.rb +28 -164
- data/lib/hecks/runtime/loader.rb +109 -194
- data/lib/hecks/runtime/outbox.rb +39 -262
- data/lib/hecks/runtime/policy_interpreter.rb +43 -202
- data/lib/hecks/runtime/port_operation_interpreter.rb +28 -97
- data/lib/hecks/runtime/query_interpreter.rb +122 -187
- data/lib/hecks/runtime/reaction_invocation.rb +36 -138
- data/lib/hecks/runtime/reaction_outcome.rb +89 -0
- data/lib/hecks/runtime/read_model_interpreter.rb +117 -208
- data/lib/hecks/runtime/rebuild_sweep.rb +8 -54
- data/lib/hecks/runtime/reference_hop.rb +8 -81
- data/lib/hecks/runtime/refusal_wording.rb +28 -87
- data/lib/hecks/runtime/registry/saga_persistence.rb +10 -102
- data/lib/hecks/runtime/registry/verification.rb +213 -227
- data/lib/hecks/runtime/registry/world_defaults.rb +4 -53
- data/lib/hecks/runtime/registry.rb +156 -247
- data/lib/hecks/runtime/remote_dispatcher.rb +68 -154
- data/lib/hecks/runtime/routing.rb +4 -15
- data/lib/hecks/runtime/saga_interpreter/correlation.rb +14 -61
- data/lib/hecks/runtime/saga_interpreter.rb +79 -263
- data/lib/hecks/runtime/saga_pending_dispatch.rb +2 -43
- data/lib/hecks/runtime/tenant_check.rb +6 -68
- data/lib/hecks/runtime/tenant_scope.rb +3 -28
- data/lib/hecks/runtime/value/admission.rb +16 -67
- data/lib/hecks/runtime/value/coercion.rb +162 -760
- data/lib/hecks/runtime/value/entity_list_coercion.rb +26 -219
- data/lib/hecks/runtime/value/field_checks.rb +172 -0
- data/lib/hecks/runtime/value.rb +15 -84
- data/lib/hecks/runtime.rb +35 -69
- 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 +155 -582
- data/lib/hecks/tenancy/bluebook/tenancy.bluebook +10 -34
- data/lib/hecks/tenancy/bluebook/tenancy.hecksagon +6 -23
- 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/vendoring/git_environment.rb +2 -8
- data/lib/hecks/vendoring/git_source.rb +4 -10
- data/lib/hecks/vendoring.rb +7 -46
- data/lib/hecks/version.rb +3 -14
- data/lib/hecks.rb +52 -90
- data/lib/rubocop/cop/hecks/fallback_hash_lookup.rb +8 -46
- data/lib/rubocop/cop/hecks/sequential_hash_rename_in_loop.rb +11 -80
- data/lib/rubocop/cop/hecks/thread_shared_ivar_mutation.rb +10 -99
- 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 +478 -12
- data/lib/hecks/facade/cli_door.rb +0 -178
- data/lib/hecks/facade/cli_runner.rb +0 -271
- data/lib/hecks/facade/handle.rb +0 -293
- data/lib/hecks/facade/json_door.rb +0 -247
- data/lib/hecks/facade/surface/aggregate_door.rb +0 -222
- data/lib/hecks/facade/surface/chapter.rb +0 -116
- data/lib/hecks/facade/surface.rb +0 -61
- data/lib/hecks/mcp_door_scope.rb +0 -176
|
@@ -1,65 +1,33 @@
|
|
|
1
1
|
module Hecks
|
|
2
2
|
module Bluebook
|
|
3
|
-
# What a chapter may declare it provides
|
|
4
|
-
#
|
|
5
|
-
# place of a check for the literal name "Governance" — by the role
|
|
6
|
-
# check at dispatch, the ungoverned-role refusal at boot, the
|
|
7
|
-
# authorization adapter and the fuzzer — so the declaration has to be
|
|
8
|
-
# complete and point at real verbs. `BluebookBuilder::Validation
|
|
9
|
-
# #validate_provisions!` holds every `provides` to this table.
|
|
10
|
-
#
|
|
11
|
-
# key => :command | :query | :port_operation the kind of verb that key must name
|
|
12
|
-
#
|
|
13
|
-
# A `:port_operation` verb is spelled `"Aggregate.Port.Operation"` and names
|
|
14
|
-
# an operation the chapter's hecksagon declares on one of its aggregates.
|
|
15
|
-
# The hecksagon attaches after the chapter is built, so the chapter itself
|
|
16
|
-
# only checks the spelling; `Registry#verify!` checks the operation exists.
|
|
3
|
+
# What a chapter may declare it provides — trusted in place of a literal
|
|
4
|
+
# chapter-name check by role checks, adapters and the fuzzer.
|
|
17
5
|
module Capabilities
|
|
18
6
|
AUTHORIZATION = "authorization".freeze
|
|
19
|
-
# Who may sign in
|
|
20
|
-
#
|
|
21
|
-
# the aggregate (HECKS_MEMBERSHIP_AGGREGATE). Same declared-
|
|
22
|
-
# not-named shape `AUTHORIZATION` already is for Governance.
|
|
7
|
+
# Who may sign in and with what role, resolved by declaration rather
|
|
8
|
+
# than an env var naming the aggregate.
|
|
23
9
|
MEMBERSHIP = "membership".freeze
|
|
24
|
-
# A stable organizational identity,
|
|
25
|
-
#
|
|
26
|
-
# "Identity". Same declared-not-named shape `AUTHORIZATION` already
|
|
27
|
-
# is. rust/host does not build this chapter's payloads; any field
|
|
28
|
-
# mapping lives on the consuming hecksagon's `translates` ACL.
|
|
10
|
+
# A stable organizational identity, recognised by declaration rather
|
|
11
|
+
# than the literal name "Identity".
|
|
29
12
|
IDENTITY = "identity".freeze
|
|
30
|
-
# Guest
|
|
31
|
-
#
|
|
32
|
-
# "Newsletter". rust/host's newsletter routes dispatch these verbs
|
|
33
|
-
# and read the subscribing aggregate's instances off `subscribe`.
|
|
13
|
+
# Guest newsletter signups, recognised by declaration rather than the
|
|
14
|
+
# literal chapter name "Newsletter".
|
|
34
15
|
NEWSLETTER = "newsletter".freeze
|
|
35
|
-
# Sending an issue to
|
|
36
|
-
#
|
|
37
|
-
# capability from `NEWSLETTER` so a chapter that only takes signups
|
|
38
|
-
# declares nothing more; rust/host serves the send route only when a
|
|
39
|
-
# chapter declares this one as well.
|
|
16
|
+
# Sending an issue to confirmed subscribers; kept separate from
|
|
17
|
+
# `NEWSLETTER` so a signup-only chapter declares nothing more.
|
|
40
18
|
NEWSLETTER_ISSUES = "newsletter_issues".freeze
|
|
41
19
|
|
|
42
|
-
# Taking a payment through an external processor
|
|
43
|
-
#
|
|
44
|
-
#
|
|
45
|
-
# routes dispatch these verbs and read the paying aggregate's
|
|
46
|
-
# instances off `initiate`. The two verdicts are hecksagon port
|
|
47
|
-
# operations (the processor's webhook, translated into this chapter's
|
|
48
|
-
# vocabulary), not commands.
|
|
20
|
+
# Taking a payment through an external processor, recognised by
|
|
21
|
+
# declaration rather than the literal name "Payments"; the two
|
|
22
|
+
# verdicts are port operations, not commands.
|
|
49
23
|
PAYMENTS = "payments".freeze
|
|
50
24
|
|
|
51
|
-
# Scheduling sessions and taking registrations
|
|
52
|
-
#
|
|
53
|
-
# "Registration". rust/host's event and registration routes dispatch
|
|
54
|
-
# these verbs; the aggregates they name are the event and the
|
|
55
|
-
# registration.
|
|
25
|
+
# Scheduling sessions and taking registrations, recognised by
|
|
26
|
+
# declaration rather than the literal aggregate names.
|
|
56
27
|
REGISTRATIONS = "registrations".freeze
|
|
57
28
|
|
|
58
|
-
# A business's connection to its payment processor
|
|
59
|
-
#
|
|
60
|
-
# declaration, not the literal name "PaymentConnection". rust/host's
|
|
61
|
-
# payments routes dispatch these verbs; the connection aggregate is
|
|
62
|
-
# the one `connect` names.
|
|
29
|
+
# A business's connection to its payment processor, recognised by
|
|
30
|
+
# declaration rather than the literal name "PaymentConnection".
|
|
63
31
|
PAYMENT_CONNECTION = "payment_connection".freeze
|
|
64
32
|
|
|
65
33
|
CONTRACTS = {
|
|
@@ -4,30 +4,14 @@ require_relative "../ir"
|
|
|
4
4
|
|
|
5
5
|
module Hecks
|
|
6
6
|
module Bluebook
|
|
7
|
-
# The chapter,
|
|
8
|
-
#
|
|
9
|
-
# `Hecks::Bluebook` was briefly a class, because dropping the
|
|
10
|
-
# old `IR::` segment would otherwise have produced
|
|
11
|
-
# `Bluebook::Bluebook` — a class shadowing its own enclosing module.
|
|
12
|
-
# Naming the construct what the code already called it everywhere
|
|
13
|
-
# (a chapter; this file was already chapter.rb) removes the clash
|
|
14
|
-
# at the source, so the namespace goes back to being a module.
|
|
15
|
-
#
|
|
16
|
-
# Measured before changing: `Bluebook` was used as a class in five
|
|
17
|
-
# places and as a namespace in seventy-seven files.
|
|
7
|
+
# The chapter, distinct from the `Bluebook` namespace it lives in.
|
|
18
8
|
class Chapter
|
|
19
9
|
include Construct
|
|
20
10
|
include Behaviour::Chapter
|
|
21
11
|
include Hecks::IR
|
|
22
12
|
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
# itself emits. A consumer reading exported IR with no Ruby DSL to
|
|
26
|
-
# cross-check against (a build-time generator, a stored snapshot)
|
|
27
|
-
# needs to know which shape it's holding before it can safely
|
|
28
|
-
# interpret any of the rest of it. Bump this when `to_h`'s own
|
|
29
|
-
# shape changes in a way a consumer would need to know about —
|
|
30
|
-
# not when a domain's own declarations change.
|
|
13
|
+
# The IR shape's own version — bump only when `to_h`'s shape changes,
|
|
14
|
+
# not when a domain's declared `version:` does.
|
|
31
15
|
IR_VERSION = 1
|
|
32
16
|
|
|
33
17
|
emits_ir(
|
|
@@ -36,32 +20,26 @@ module Hecks
|
|
|
36
20
|
version: :version,
|
|
37
21
|
vision: :vision,
|
|
38
22
|
classification: :classification,
|
|
39
|
-
#
|
|
40
|
-
#
|
|
41
|
-
# `bluebook.
|
|
42
|
-
# meta-validator's cache key is `SHA256(JSON(bluebook.to_h))` — so
|
|
43
|
-
# a fact this method didn't spell was a fact two chapters
|
|
44
|
-
# differing only by their old name could hash identically on,
|
|
45
|
-
# same as read-model filters before them. Spelled here for the
|
|
46
|
-
# same reason `version`/`vision` are: a plain field, present
|
|
47
|
-
# (possibly nil) rather than silently absent.
|
|
23
|
+
# Present (possibly nil) rather than silently absent, so two chapters
|
|
24
|
+
# differing only by their old name can't hash identically at the
|
|
25
|
+
# meta-validator's cache key (`SHA256(JSON(bluebook.to_h))`).
|
|
48
26
|
formerly_known_as: :formerly_known_as,
|
|
27
|
+
# The Ruby module the chapter's constants install under, when it is not the chapter's
|
|
28
|
+
# own name (the Hecks domain nests under `Hecks::Domain`); nil for every other chapter.
|
|
29
|
+
namespace: :namespace,
|
|
49
30
|
aggregates: many(:aggregates),
|
|
50
31
|
read_models: many(:read_models),
|
|
51
32
|
policies: many(:policies),
|
|
52
33
|
process_managers: many(:process_managers),
|
|
53
34
|
attaches_to: :attaches_to,
|
|
54
|
-
#
|
|
55
|
-
#
|
|
56
|
-
# order written. Present (possibly empty) on every chapter, the
|
|
57
|
-
# same reading `attaches_to` beside it gives.
|
|
35
|
+
# One row per declared `provides` capability, in declaration order;
|
|
36
|
+
# present (possibly empty) like `attaches_to`.
|
|
58
37
|
provides: -> { provides.map(&:to_h) },
|
|
59
38
|
canonical_form: -> { Expression::CanonicalForm.table }
|
|
60
39
|
)
|
|
61
40
|
|
|
62
|
-
#
|
|
63
|
-
#
|
|
64
|
-
# qualifies it with the chapter's own name.
|
|
41
|
+
# One row of a declared capability — `verb` is chapter-local;
|
|
42
|
+
# `Behaviour::Chapter#provided_verb` qualifies it with the chapter's own name.
|
|
65
43
|
Provision = Struct.new(:capability, :key, :verb, keyword_init: true) do
|
|
66
44
|
# Coerces one declared or reconstructed `provides` row into a `Provision`.
|
|
67
45
|
#
|
|
@@ -78,28 +56,15 @@ module Hecks
|
|
|
78
56
|
end
|
|
79
57
|
|
|
80
58
|
attr_reader :name, :version, :vision, :aggregates, :policies, :process_managers,
|
|
81
|
-
:classification, :read_models, :ports, :formerly_known_as, :attaches_to, :provides
|
|
59
|
+
:classification, :read_models, :ports, :formerly_known_as, :namespace, :attaches_to, :provides
|
|
82
60
|
|
|
83
|
-
# @param name [String, Symbol] the chapter's declared name
|
|
84
|
-
# @param version [String, Symbol, nil] the chapter's declared business version,
|
|
85
|
-
# such as `"v1"`, or `nil` if it declares none
|
|
86
|
-
# @param vision [String, nil] the chapter's declared vision statement
|
|
87
|
-
# @param aggregates [Array<Bluebook::Aggregate>] the chapter's declared aggregates
|
|
88
61
|
# @param policies [Array<Bluebook::Policy>] every reaction declared across the
|
|
89
62
|
# chapter's own aggregates, hoisted here
|
|
90
|
-
# @param process_managers [Array<Bluebook::ProcessManager>] the chapter's declared
|
|
91
|
-
# process managers
|
|
92
63
|
# @param classification [String, Symbol, nil] whether this chapter is central to
|
|
93
64
|
# its project's own domain model, or `nil` if undeclared
|
|
94
|
-
# @param read_models [Array<Bluebook::ReadModel>] the chapter's declared read models
|
|
95
|
-
# @param formerly_known_as [String, Symbol, nil] an earlier name this domain was
|
|
96
|
-
# known under, or `nil` if it was never renamed
|
|
97
|
-
# @param attaches_to [Array<String, Symbol>] the contexts this chapter attaches to
|
|
98
|
-
# @param provides [Array<Bluebook::Chapter::Provision, Hash>] the capabilities this
|
|
99
|
-
# chapter declares it provides
|
|
100
65
|
def initialize(name:, version: nil, vision: nil, aggregates: [], policies: [],
|
|
101
66
|
process_managers: [], classification: nil, read_models: [], formerly_known_as: nil,
|
|
102
|
-
attaches_to: [], provides: [])
|
|
67
|
+
namespace: nil, attaches_to: [], provides: [])
|
|
103
68
|
@policies = policies
|
|
104
69
|
@process_managers = process_managers
|
|
105
70
|
@name = name.to_s
|
|
@@ -111,6 +76,7 @@ module Hecks
|
|
|
111
76
|
@read_models = read_models
|
|
112
77
|
@classification = classification&.to_s
|
|
113
78
|
@formerly_known_as = formerly_known_as&.to_s
|
|
79
|
+
@namespace = namespace&.to_s
|
|
114
80
|
@attaches_to = Array(attaches_to).map(&:to_s)
|
|
115
81
|
@provides = Array(provides).map { |row| Provision.from(row) }
|
|
116
82
|
settle
|
|
@@ -10,19 +10,8 @@ module Hecks
|
|
|
10
10
|
include Hecks::IR
|
|
11
11
|
include Behaviour::Mutation
|
|
12
12
|
|
|
13
|
-
# `
|
|
14
|
-
#
|
|
15
|
-
# here, the same table `Runtime::CommandRules::Arithmetic::MUTATION_OPS`
|
|
16
|
-
# already reads on the Ruby runtime side, rather than a ternary on the op
|
|
17
|
-
# name re-deriving it independently in each of two Rust codegen scripts
|
|
18
|
-
# (rust/project/mutations.rb, rust/codegen/src/mutations.rs).
|
|
19
|
-
# Reads `Vocabulary::MutationOp` directly (plain data, no framework
|
|
20
|
-
# dependency — safe during parsing, same reason `RuleReference`'s
|
|
21
|
-
# own bootstrap concerns don't apply here) rather than requiring
|
|
22
|
-
# Runtime::CommandRules from the bluebook/IR layer, which would be a
|
|
23
|
-
# real layering inversion (runtime depends on bluebook, not the
|
|
24
|
-
# reverse). "" (not nil) for ops with no sign, matching every other
|
|
25
|
-
# optional IR text field's own absent-is-empty-string convention.
|
|
13
|
+
# Reads `Vocabulary::MutationOp` directly: runtime depends on bluebook, not the reverse.
|
|
14
|
+
# Answers "" rather than nil, like every optional IR text field.
|
|
26
15
|
#
|
|
27
16
|
# @param oper [String, Symbol] the mutation's operation name, such as
|
|
28
17
|
# `"increment"` or `"decrement"`
|
|
@@ -34,14 +23,9 @@ module Hecks
|
|
|
34
23
|
|
|
35
24
|
emits_ir(target: :target, op: :op, sign: -> { Mutation.sign_for(op) })
|
|
36
25
|
|
|
37
|
-
#
|
|
38
|
-
#
|
|
39
|
-
#
|
|
40
|
-
# inventing a parallel one) binds several fields at once and carries
|
|
41
|
-
# `fields:`, everything else carries a single `source:`. Declared
|
|
42
|
-
# emission covers the fixed head; `super` supplies it and this adds
|
|
43
|
-
# the tail, which is why a construct with a variable shape needs no
|
|
44
|
-
# new mixin API.
|
|
26
|
+
# An append, delegate or correction binds several fields and carries `fields:`;
|
|
27
|
+
# every other op carries a single `source:`.
|
|
28
|
+
#
|
|
45
29
|
# @return [Hash{Symbol => Object}] the declared emission — `super`'s fixed
|
|
46
30
|
# head, plus `fields:` (a Hash of bound field values) for an
|
|
47
31
|
# append-shaped op, or `source:` (`classified_source`'s own result) for
|
|
@@ -53,24 +37,10 @@ module Hecks
|
|
|
53
37
|
end
|
|
54
38
|
end
|
|
55
39
|
|
|
56
|
-
# A command, as
|
|
57
|
-
#
|
|
58
|
-
# Not nested as a constant, and that is a finding rather than a shortcut. A
|
|
59
|
-
# command and a value object may legitimately share a name inside one
|
|
60
|
-
# aggregate — the language does it six times, and means it: the command
|
|
61
|
-
# `Argument` is the verb that appends to the `arguments` list whose element
|
|
62
|
-
# type is the value object `Argument`, and `Plan` reads exactly that pairing.
|
|
63
|
-
# So `Bluebook::Command::Argument` cannot be both, and a single constant
|
|
64
|
-
# namespace cannot index a kind-ambiguous name. The same follows for
|
|
65
|
-
# `hecks_fqn` : `Bluebook::Command.Argument` names both, which is why the judge's
|
|
66
|
-
# ids only work per-category, each in its own repository. Identity is
|
|
67
|
-
# (kind, FQN), not fqn.
|
|
40
|
+
# A declared command, minted as its own anonymous class.
|
|
68
41
|
#
|
|
69
|
-
#
|
|
70
|
-
#
|
|
71
|
-
# or the entity holder for a piece's verb — rather than the name of one.
|
|
72
|
-
# The invocation door (`pizza.add_topping`) is the facade's business, a
|
|
73
|
-
# per-boot projection ; no verb method is defined here.
|
|
42
|
+
# Not a nested constant: a command and a value object may share a name in one aggregate,
|
|
43
|
+
# so identity is (kind, FQN), not the name alone.
|
|
74
44
|
class Command
|
|
75
45
|
extend Construct
|
|
76
46
|
extend Hecks::IR
|
|
@@ -86,14 +56,7 @@ module Hecks
|
|
|
86
56
|
ensures: -> { ensures.map { |rule| Expression::AstJson.rule_row(rule) } },
|
|
87
57
|
mutations: many(:mutations),
|
|
88
58
|
emits: :emits,
|
|
89
|
-
# The lifecycle state this command is admissible from
|
|
90
|
-
# 0025 — "lifecycle state becomes a command guard") — a guard,
|
|
91
|
-
# not a transition: `command "Debit", from: "open"` replaces
|
|
92
|
-
# `given("account is open") { status == "open" }`, checked
|
|
93
|
-
# against the owning construct's own lifecycle field the same
|
|
94
|
-
# way `admissible_transition` already checks a real state
|
|
95
|
-
# change, but names no target state and moves nothing. Nil for
|
|
96
|
-
# a command with no such guard — most commands.
|
|
59
|
+
# The lifecycle state this command is admissible from: a guard, not a transition.
|
|
97
60
|
from: -> { from },
|
|
98
61
|
provenance: :provenance
|
|
99
62
|
)
|
|
@@ -102,29 +65,18 @@ module Hecks
|
|
|
102
65
|
attr_reader :role, :goal, :attributes, :givens, :ensures, :mutations, :emits, :references,
|
|
103
66
|
:from, :provenance
|
|
104
67
|
|
|
105
|
-
# Mints one command as its own anonymous class
|
|
106
|
-
# `Command`-descended class `declare` is called on.
|
|
68
|
+
# Mints one command as its own anonymous subclass of the class `declare` is called on.
|
|
107
69
|
#
|
|
108
70
|
# @param name [String, Symbol] the command's declared name
|
|
109
|
-
# @param role [String, nil] the
|
|
110
|
-
# @param
|
|
111
|
-
# @param
|
|
112
|
-
#
|
|
113
|
-
# @param
|
|
114
|
-
#
|
|
115
|
-
# @param
|
|
116
|
-
#
|
|
117
|
-
# @param
|
|
118
|
-
# command applies
|
|
119
|
-
# @param emits [Array<String>] the event names this command may emit
|
|
120
|
-
# @param references [String, Symbol, nil] the aggregate name this verb's
|
|
121
|
-
# `reference_to` addresses, or `nil` for a verb declared on the
|
|
122
|
-
# aggregate it acts on
|
|
123
|
-
# @param from [String, Array<String>, nil] the lifecycle state(s) this
|
|
124
|
-
# command is admissible from, or `nil` for no such guard
|
|
125
|
-
# @param provenance [Object, nil] the command's declared canonical
|
|
126
|
-
# source, captured exactly as written, or `nil` if it declares none
|
|
127
|
-
# @return [Class] the new command class
|
|
71
|
+
# @param role [String, nil] the declared role text; `goal` is the goal text
|
|
72
|
+
# @param attributes [Array<Bluebook::Attribute>] the declared arguments
|
|
73
|
+
# @param givens [Array<Bluebook::Given>] the declared preconditions
|
|
74
|
+
# @param ensures [Array<Bluebook::Given>] the declared postconditions
|
|
75
|
+
# @param mutations [Array<Bluebook::Mutation>] the state changes it applies
|
|
76
|
+
# @param emits [Array<String>] the event names it may emit
|
|
77
|
+
# @param references [String, Symbol, nil] the aggregate its `reference_to` addresses
|
|
78
|
+
# @param from [String, Array<String>, nil] the lifecycle states it is admissible from
|
|
79
|
+
# @param provenance [Object, nil] the declared canonical source, as written
|
|
128
80
|
def declare(name:, role: nil, goal: nil, attributes: [], givens: [], ensures: [],
|
|
129
81
|
mutations: [], emits: [], references: nil, from: nil, provenance: nil)
|
|
130
82
|
verb = Class.new(self)
|
|
@@ -135,21 +87,11 @@ module Hecks
|
|
|
135
87
|
verb
|
|
136
88
|
end
|
|
137
89
|
|
|
138
|
-
# Assigns what the language declares, then
|
|
139
|
-
#
|
|
140
|
-
# the
|
|
90
|
+
# Assigns what the language declares, then `settle` indexes the attributes.
|
|
91
|
+
#
|
|
92
|
+
# Takes the keywords `declare` takes, minus `name`.
|
|
141
93
|
#
|
|
142
|
-
# @
|
|
143
|
-
# @param goal [String, nil] see `declare`
|
|
144
|
-
# @param attributes [Array<Bluebook::Attribute>] see `declare`
|
|
145
|
-
# @param givens [Array<Bluebook::Given>] see `declare`
|
|
146
|
-
# @param ensures [Array<Bluebook::Given>] see `declare`
|
|
147
|
-
# @param mutations [Array<Bluebook::Mutation>] see `declare`
|
|
148
|
-
# @param emits [Array<String>] see `declare`
|
|
149
|
-
# @param references [String, nil] see `declare`
|
|
150
|
-
# @param from [String, Array<String>, nil] see `declare`
|
|
151
|
-
# @param provenance [Object, nil] see `declare`
|
|
152
|
-
# @return [Class] self, once attributes are indexed
|
|
94
|
+
# @return [Class] self
|
|
153
95
|
def absorb(role:, goal:, attributes:, givens:, ensures:, mutations:, emits:, references:,
|
|
154
96
|
from: nil, provenance: nil)
|
|
155
97
|
@role = role
|
|
@@ -2,17 +2,9 @@ require_relative "behaviour/domain_port"
|
|
|
2
2
|
|
|
3
3
|
module Hecks
|
|
4
4
|
module Bluebook
|
|
5
|
-
#
|
|
6
|
-
# by an adapter living outside the bluebook entirely, never by the
|
|
7
|
-
# domain calling out. That is already `Hecks.port` (persistence,
|
|
8
|
-
# projection, extraction, loading) plus `Ports::*` : the secondary/
|
|
9
|
-
# driven half, unchanged by this.
|
|
5
|
+
# One operation on a driving port: an external call turned into an event in this domain.
|
|
10
6
|
#
|
|
11
|
-
#
|
|
12
|
-
# anti-corruption boundary that turns an external call into a fact in
|
|
13
|
-
# this domain's own vocabulary, not a second place business rules live.
|
|
14
|
-
# Those stay on whatever command a `policy` triggers in reaction to the
|
|
15
|
-
# event an operation emits.
|
|
7
|
+
# Carries no `given`/`ensures`/`then_set`; those stay on the command a `policy` triggers.
|
|
16
8
|
class PortOperation
|
|
17
9
|
include Hecks::IR
|
|
18
10
|
include Behaviour::PortOperation
|
|
@@ -21,31 +13,17 @@ module Hecks
|
|
|
21
13
|
|
|
22
14
|
attr_reader :hecks_name, :attributes, :emits, :direction, :answers, :refuses, :to
|
|
23
15
|
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
# `operation` before it had a twin: an external fact arriving, turned
|
|
28
|
-
# into this domain's own event. It emits and that is all; there is no
|
|
29
|
-
# channel back to whoever called.
|
|
30
|
-
#
|
|
31
|
-
# `:outbound` is `asks` — the domain wanting something from outside
|
|
32
|
-
# and having to live with either answer. It names both: `answers` for
|
|
33
|
-
# what the adapter came back with, `refuses` for what it said instead.
|
|
34
|
-
# Naming only the happy one would put the failure somewhere the model
|
|
35
|
-
# cannot see, which is the whole reason a boundary is worth modelling.
|
|
16
|
+
# `:inbound` (`tells`) is an external fact arriving as an event; it emits and nothing more.
|
|
17
|
+
# `:outbound` (`asks`) is the domain wanting something from outside, naming both
|
|
18
|
+
# `answers` and `refuses` so the failure is visible to the model.
|
|
36
19
|
#
|
|
37
20
|
# @param name [String, Symbol] the operation's declared name
|
|
38
|
-
# @param attributes [Array<Bluebook::Attribute>] the
|
|
39
|
-
#
|
|
40
|
-
# @param
|
|
41
|
-
# @param
|
|
42
|
-
#
|
|
43
|
-
# @param
|
|
44
|
-
# adapter came back with
|
|
45
|
-
# @param refuses [String, nil] an outbound operation's declared event for what the
|
|
46
|
-
# adapter said instead
|
|
47
|
-
# @param to [String, nil] the aggregate this operation routes to, or `nil` if it
|
|
48
|
-
# declares no routing target
|
|
21
|
+
# @param attributes [Array<Bluebook::Attribute>] the declared payload fields
|
|
22
|
+
# @param emits [Array<String>] the events an inbound operation records
|
|
23
|
+
# @param direction [Symbol, String] `:inbound` or `:outbound`
|
|
24
|
+
# @param answers [String, nil] an outbound operation's event for the adapter's answer
|
|
25
|
+
# @param refuses [String, nil] an outbound operation's event for the adapter's refusal
|
|
26
|
+
# @param to [String, nil] the aggregate this operation routes to, if any
|
|
49
27
|
def initialize(name:, attributes: [], emits: [], direction: :inbound, answers: nil, refuses: nil, to: nil)
|
|
50
28
|
@hecks_name = name.to_s
|
|
51
29
|
@attributes = attributes
|
|
@@ -67,31 +45,8 @@ module Hecks
|
|
|
67
45
|
# @return [Boolean] whether this operation is a `tells`/`operation`
|
|
68
46
|
def inbound? = @direction == :inbound
|
|
69
47
|
|
|
70
|
-
#
|
|
71
|
-
#
|
|
72
|
-
# the record its emitted event belongs to. Kept only so
|
|
73
|
-
# CommandInterpreter::ArgumentGate's `reference_key` can ask for it
|
|
74
|
-
# without learning this isn't a command.
|
|
75
|
-
|
|
76
|
-
# `direction`/`answers`/`refuses` are deliberately outside `emits_ir`'s
|
|
77
|
-
# declared shape and added here only for an outbound operation — an
|
|
78
|
-
# ordinary inbound one (`tells`, still spelled `operation` everywhere
|
|
79
|
-
# in the existing corpus) keeps the exact prior IR shape, byte for
|
|
80
|
-
# byte. Pizzas' `PaymentGateway` port is inbound-only and is checked
|
|
81
|
-
# against `hecks-parse`'s own Rust output for byte-identity
|
|
82
|
-
# (parser_parity_spec.rb) — the Rust side has no notion of `asks` yet,
|
|
83
|
-
# so an unconditional new key here would break that parity for a
|
|
84
|
-
# domain that never asked for the feature. Only a chapter that
|
|
85
|
-
# actually declares `asks` (this extraction's own QualityControl
|
|
86
|
-
# ledger, not yet in any Rust-parity corpus) pays for it.
|
|
87
|
-
# `to` — same "deliberately outside emits_ir, merged in only when
|
|
88
|
-
# present" treatment as direction/answers/refuses just above, and
|
|
89
|
-
# for the identical reason: an operation still spelled the old way
|
|
90
|
-
# (`reference_to` inside the block, shadow-parsing only — see
|
|
91
|
-
# reference_to_impl's own comment) or one that simply hasn't
|
|
92
|
-
# migrated yet keeps the exact prior IR shape, byte for byte,
|
|
93
|
-
# instead of an unconditional new key breaking parser_parity_spec
|
|
94
|
-
# for every domain that never touched this.
|
|
48
|
+
# `direction`/`answers`/`refuses`/`to` are merged in only when set: the Rust parser
|
|
49
|
+
# emits none of them, so an unconditional key would break parser_parity_spec.
|
|
95
50
|
#
|
|
96
51
|
# @return [Hash] the declared emission, plus `direction`/`answers`/`refuses` for an
|
|
97
52
|
# outbound operation and `to` when a routing target is declared
|
|
@@ -103,24 +58,51 @@ module Hecks
|
|
|
103
58
|
end
|
|
104
59
|
end
|
|
105
60
|
|
|
106
|
-
# A
|
|
107
|
-
#
|
|
108
|
-
#
|
|
109
|
-
|
|
110
|
-
|
|
61
|
+
# A query the hecksagon binds to a port's adapter: the bluebook declares the question and the
|
|
62
|
+
# value object its answer takes (`returns`), and this declares that something outside the
|
|
63
|
+
# domain answers it.
|
|
64
|
+
class QueryAnswer
|
|
65
|
+
include Hecks::IR
|
|
66
|
+
|
|
67
|
+
emits_ir(name: :name)
|
|
68
|
+
|
|
69
|
+
attr_reader :name
|
|
70
|
+
|
|
71
|
+
# @param name [String, Symbol] the bound query's declared name
|
|
72
|
+
def initialize(name:)
|
|
73
|
+
@name = name.to_s
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# A named group of operations an aggregate exposes to whatever adapter calls in, plus the
|
|
78
|
+
# queries its adapter answers.
|
|
111
79
|
class DomainPort
|
|
112
80
|
include Hecks::IR
|
|
113
81
|
include Behaviour::DomainPort
|
|
114
82
|
|
|
115
83
|
emits_ir(name: :name, operations: many(:operations))
|
|
116
84
|
|
|
117
|
-
attr_reader :name, :operations
|
|
85
|
+
attr_reader :name, :operations, :answered_queries
|
|
118
86
|
|
|
119
87
|
# @param name [String, Symbol] the port's declared name
|
|
120
88
|
# @param operations [Array<Bluebook::PortOperation>] the port's declared operations
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
89
|
+
# @param answered_queries [Array<Bluebook::QueryAnswer>] the queries this port's adapter
|
|
90
|
+
# answers instead of the aggregate's stored records
|
|
91
|
+
def initialize(name:, operations: [], answered_queries: [])
|
|
92
|
+
@name = name.to_s
|
|
93
|
+
@operations = operations
|
|
94
|
+
@answered_queries = answered_queries
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# `answered_queries` is merged in only when there are some, so a port that binds no query
|
|
98
|
+
# emits the shape it always did.
|
|
99
|
+
#
|
|
100
|
+
# @return [Hash] the port's IR
|
|
101
|
+
def to_h
|
|
102
|
+
shape = super
|
|
103
|
+
return shape if @answered_queries.empty?
|
|
104
|
+
|
|
105
|
+
shape.merge(answered_queries: @answered_queries.map(&:to_h))
|
|
124
106
|
end
|
|
125
107
|
end
|
|
126
108
|
end
|