hecks 2.8.0 → 2.9.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 +4 -6
- 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 +17 -98
- 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 +4 -30
- data/lib/hecks/adapters/driven/postgres/schema_builder.rb +34 -108
- data/lib/hecks/adapters/driven/postgres.rb +145 -134
- data/lib/hecks/adapters/driven/postgres_era.adapter +4 -15
- data/lib/hecks/adapters/driven/prism.rb +7 -30
- 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 +5 -48
- 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 +31 -141
- 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/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 +54 -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 +10 -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 +4 -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 +10 -48
- data/lib/hecks/bluebook/command.rb +23 -81
- data/lib/hecks/bluebook/domain_port.rb +14 -63
- 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 +86 -708
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +56 -170
- data/lib/hecks/bluebook/dsl/bootstrap_table.rb +1 -0
- 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 +12 -87
- 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 +26 -194
- 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 +11 -42
- 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 +19 -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 +37 -660
- data/lib/hecks/bluebook/hexagon.rb +5 -28
- 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 +24 -176
- data/lib/hecks/bluebook/meta_validator/shapes.rb +53 -267
- data/lib/hecks/bluebook/meta_validator/syntax_boot.rb +43 -305
- data/lib/hecks/bluebook/meta_validator/translation_judge.rb +7 -43
- data/lib/hecks/bluebook/meta_validator/world_judge.rb +6 -18
- data/lib/hecks/bluebook/meta_validator.rb +79 -349
- data/lib/hecks/bluebook/model_check/client_profile.rb +6 -21
- data/lib/hecks/bluebook/model_check.rb +100 -597
- data/lib/hecks/bluebook/pattern_subset.rb +11 -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 +9 -48
- data/lib/hecks/bluebook/read_model.rb +57 -81
- data/lib/hecks/bluebook/reference.rb +7 -41
- data/lib/hecks/bluebook/smoke_test.rb +8 -98
- 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/cli/document.rb +3 -21
- data/lib/hecks/cli/ir.rb +3 -5
- data/lib/hecks/cli/mcp.rb +2 -3
- data/lib/hecks/cli/mcp_door.rb +19 -114
- data/lib/hecks/cli/model_check.rb +18 -85
- data/lib/hecks/cli/project_cli.rb +7 -40
- data/lib/hecks/cli/project_diagrams.rb +0 -7
- data/lib/hecks/cli/run.rb +12 -58
- data/lib/hecks/cli/smoke_test.rb +2 -16
- data/lib/hecks/cli/stores.rb +1 -2
- data/lib/hecks/cli.rb +18 -24
- data/lib/hecks/construct.rb +8 -34
- data/lib/hecks/deploy/bluebook/deploy.bluebook +33 -142
- data/lib/hecks/deploy/bluebook/deploy.hecksagon +2 -9
- 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 +4 -71
- data/lib/hecks/facade/cli_door.rb +24 -106
- data/lib/hecks/facade/cli_runner.rb +28 -172
- data/lib/hecks/facade/command_request.rb +13 -33
- data/lib/hecks/facade/handle.rb +34 -121
- data/lib/hecks/facade/json_door.rb +31 -146
- data/lib/hecks/facade/surface/aggregate_door.rb +39 -104
- data/lib/hecks/facade/surface/chapter.rb +10 -54
- data/lib/hecks/facade/surface.rb +8 -23
- data/lib/hecks/facade.rb +10 -25
- data/lib/hecks/forms/app.rb +15 -70
- 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 +30 -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/grammar/expression.bluebook +15 -40
- data/lib/hecks/grammar/translation.bluebook +3 -6
- data/lib/hecks/grammar.rb +16 -41
- data/lib/hecks/ir.rb +14 -83
- 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 +15 -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 +12 -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 +82 -197
- data/lib/hecks/language/hecksagon/adapter_binding.bluebook +3 -10
- data/lib/hecks/language/hecksagon/domain_port.bluebook +4 -19
- data/lib/hecks/language/hecksagon/hecksagon.bluebook +6 -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_door_scope.rb +9 -90
- data/lib/hecks/mcp_stdio_guard.rb +4 -41
- data/lib/hecks/naming.rb +29 -137
- 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 +38 -141
- data/lib/hecks/ports/persistence/plugins/era/era_guard/shape_diff.rb +15 -115
- data/lib/hecks/ports/persistence/plugins/era/era_guard.rb +16 -84
- data/lib/hecks/ports/persistence/plugins/era/era_tamper.rb +6 -25
- data/lib/hecks/ports/persistence/plugins/era/expected_era.rb +3 -22
- 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 +18 -75
- 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 +14 -115
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager.rb +13 -45
- data/lib/hecks/ports/persistence/plugins/era/postgres_era.rb +127 -554
- data/lib/hecks/ports/persistence/plugins/era/storage_shape.rb +13 -63
- 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 +9 -25
- 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.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 +23 -103
- 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/projections/bootstrap_table.rb +11 -43
- 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 +35 -202
- data/lib/hecks/projections/deploy/lambda.rb +150 -678
- 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/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 +2 -58
- data/lib/hecks/projections/deploy/preview.rb +2 -67
- data/lib/hecks/projections/deploy/scripts/settings.rb +3 -25
- data/lib/hecks/projections/deploy/scripts.rb +4 -57
- data/lib/hecks/projections/deploy/shared.rb +47 -146
- 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 +20 -582
- 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 +15 -42
- data/lib/hecks/projections/model.rb +12 -51
- data/lib/hecks/projections/oidc.rb +12 -56
- data/lib/hecks/projections/parser_table.rb +9 -28
- data/lib/hecks/projections/reference.rb +2 -15
- data/lib/hecks/projections/rust_vocabulary.rb +12 -250
- 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 +60 -375
- 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/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 +3 -6
- data/lib/hecks/release/runner/commands.rb +2 -4
- data/lib/hecks/release/runner/gem_publisher.rb +2 -3
- data/lib/hecks/release/runner/npm_publisher.rb +6 -20
- data/lib/hecks/release/runner/preflight.rb +4 -19
- data/lib/hecks/release/runner/tagger.rb +2 -9
- data/lib/hecks/release/runner.rb +3 -32
- data/lib/hecks/rendering.rb +4 -26
- data/lib/hecks/router/namespace_installer.rb +12 -36
- data/lib/hecks/router.rb +4 -8
- 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 +23 -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 +30 -102
- data/lib/hecks/runtime/dispatcher.rb +82 -241
- 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 +11 -70
- data/lib/hecks/runtime/invocation.rb +28 -164
- data/lib/hecks/runtime/loader.rb +48 -186
- data/lib/hecks/runtime/outbox.rb +38 -261
- data/lib/hecks/runtime/policy_interpreter.rb +38 -200
- data/lib/hecks/runtime/port_operation_interpreter.rb +26 -87
- data/lib/hecks/runtime/query_interpreter.rb +45 -187
- data/lib/hecks/runtime/reaction_invocation.rb +36 -138
- 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 +8 -89
- data/lib/hecks/runtime/registry/saga_persistence.rb +10 -102
- data/lib/hecks/runtime/registry/verification.rb +52 -225
- data/lib/hecks/runtime/registry/world_defaults.rb +4 -53
- data/lib/hecks/runtime/registry.rb +99 -244
- data/lib/hecks/runtime/remote_dispatcher.rb +37 -152
- 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 +155 -641
- data/lib/hecks/runtime/value/entity_list_coercion.rb +26 -219
- data/lib/hecks/runtime/value.rb +12 -84
- data/lib/hecks/runtime.rb +17 -65
- data/lib/hecks/storehouse.rb +141 -568
- data/lib/hecks/tenancy/bluebook/tenancy.bluebook +8 -32
- data/lib/hecks/tenancy/bluebook/tenancy.hecksagon +6 -23
- 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 +26 -81
- 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
- metadata +3 -2
|
@@ -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,23 @@ 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,
|
|
49
27
|
aggregates: many(:aggregates),
|
|
50
28
|
read_models: many(:read_models),
|
|
51
29
|
policies: many(:policies),
|
|
52
30
|
process_managers: many(:process_managers),
|
|
53
31
|
attaches_to: :attaches_to,
|
|
54
|
-
#
|
|
55
|
-
#
|
|
56
|
-
# order written. Present (possibly empty) on every chapter, the
|
|
57
|
-
# same reading `attaches_to` beside it gives.
|
|
32
|
+
# One row per declared `provides` capability, in declaration order;
|
|
33
|
+
# present (possibly empty) like `attaches_to`.
|
|
58
34
|
provides: -> { provides.map(&:to_h) },
|
|
59
35
|
canonical_form: -> { Expression::CanonicalForm.table }
|
|
60
36
|
)
|
|
61
37
|
|
|
62
|
-
#
|
|
63
|
-
#
|
|
64
|
-
# qualifies it with the chapter's own name.
|
|
38
|
+
# One row of a declared capability — `verb` is chapter-local;
|
|
39
|
+
# `Behaviour::Chapter#provided_verb` qualifies it with the chapter's own name.
|
|
65
40
|
Provision = Struct.new(:capability, :key, :verb, keyword_init: true) do
|
|
66
41
|
# Coerces one declared or reconstructed `provides` row into a `Provision`.
|
|
67
42
|
#
|
|
@@ -80,23 +55,10 @@ module Hecks
|
|
|
80
55
|
attr_reader :name, :version, :vision, :aggregates, :policies, :process_managers,
|
|
81
56
|
:classification, :read_models, :ports, :formerly_known_as, :attaches_to, :provides
|
|
82
57
|
|
|
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
58
|
# @param policies [Array<Bluebook::Policy>] every reaction declared across the
|
|
89
59
|
# chapter's own aggregates, hoisted here
|
|
90
|
-
# @param process_managers [Array<Bluebook::ProcessManager>] the chapter's declared
|
|
91
|
-
# process managers
|
|
92
60
|
# @param classification [String, Symbol, nil] whether this chapter is central to
|
|
93
61
|
# 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
62
|
def initialize(name:, version: nil, vision: nil, aggregates: [], policies: [],
|
|
101
63
|
process_managers: [], classification: nil, read_models: [], formerly_known_as: nil,
|
|
102
64
|
attaches_to: [], provides: [])
|
|
@@ -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,11 +58,7 @@ module Hecks
|
|
|
103
58
|
end
|
|
104
59
|
end
|
|
105
60
|
|
|
106
|
-
# A named group of operations an aggregate
|
|
107
|
-
# exposes to whatever adapter calls in — the contract that today lives
|
|
108
|
-
# only as a bare `verb`/`signal` pair in a standalone `.port` file.
|
|
109
|
-
# Superseding those is the goal ; for now they keep working untouched,
|
|
110
|
-
# and this is additive.
|
|
61
|
+
# A named group of operations an aggregate exposes to whatever adapter calls in.
|
|
111
62
|
class DomainPort
|
|
112
63
|
include Hecks::IR
|
|
113
64
|
include Behaviour::DomainPort
|