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
|
@@ -1,124 +1,39 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
3
|
-
# `.find` suffixes), split into this sibling file to keep resolver.rb
|
|
4
|
-
# under Metrics/ModuleLength (350) : this reopens the same `Resolver`
|
|
5
|
-
# module resolver.rb defines, the long nested `module A; module B; ...`
|
|
6
|
-
# form (not the compact `A::B` form) so bare constant/method lookups
|
|
7
|
-
# here (`EvaluationError`, `Evaluator`, `describe`, `unwrap_scalar`,
|
|
8
|
-
# `walk_path`) resolve exactly the way they do inside resolver.rb
|
|
9
|
-
# itself — this is one module, split across two files, not two
|
|
10
|
-
# modules. See resolver.rb's own header for the grammar this belongs
|
|
11
|
-
# to; see each struct/method below for its own "why".
|
|
1
|
+
# Block-predicate and `.find` suffixes of the `Resolver` leaf grammar, split out of resolver.rb
|
|
2
|
+
# to stay under Metrics/ModuleLength. Uses the nested `module` form so constants resolve as there.
|
|
12
3
|
module Hecks
|
|
13
4
|
module Bluebook
|
|
14
5
|
module Expression
|
|
15
|
-
# Reopens
|
|
16
|
-
# file's own header comment above for why the block-predicate/find
|
|
17
|
-
# family lives here rather than in resolver.rb itself.
|
|
6
|
+
# Reopens `Resolver` (see resolver.rb) for the block-predicate/find suffixes.
|
|
18
7
|
module Resolver
|
|
19
|
-
# `receiver.all? { |x| PREDICATE }` / `.any
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
# four-segment invariant the `Split` node above was built for
|
|
23
|
-
# (`value.split("::").all? { |s| s.length > 0 }`). Structurally
|
|
24
|
-
# different from every other addition in this file: every prior
|
|
25
|
-
# suffix is a flat receiver -> scalar transform, but a block
|
|
26
|
-
# predicate needs to evaluate its own sub-expression once per
|
|
27
|
-
# element with the block parameter bound to that element. Kept
|
|
28
|
-
# minimal per the migration plan's own instruction -- no
|
|
29
|
-
# persistent iteration-variable concept added to Resolver's
|
|
30
|
-
# state model at all ; `predicate` below is a fully-parsed
|
|
31
|
-
# evaluator ast (not a Resolver ast -- the predicate is a
|
|
32
|
-
# boolean/comparison expression like `s.length > 0`, exactly the
|
|
33
|
-
# grammar `Bluebook::Expression::Evaluator` owns, not this
|
|
34
|
-
# module's own leaf grammar), parsed once at `parse`-time same as
|
|
35
|
-
# every sibling node's sub-expressions are. `mode` distinguishes
|
|
36
|
-
# all?/any?/none? without three duplicated node types, since
|
|
37
|
-
# their only difference is which Array predicate aggregates the
|
|
38
|
-
# per-element results (interpret_with_element, below, is the
|
|
39
|
-
# "smallest correct thing" the plan asked for -- it threads the
|
|
40
|
-
# element binding through a temporarily-extended `attrs` hash for
|
|
41
|
-
# that one predicate's evaluation only, never touching
|
|
42
|
-
# `interpret`'s own signature or any other node's call sites).
|
|
43
|
-
# `Resolver` already calls into `Evaluator` elsewhere in this
|
|
44
|
-
# file (`sign_test_node`/`apply_sign_test` call `Evaluator.
|
|
45
|
-
# apply`/`Evaluator::OPERATORS` directly) -- this is the same
|
|
46
|
-
# precedented cross-reference, not a new coupling.
|
|
8
|
+
# `receiver.all? { |x| PREDICATE }` / `.any?` / `.none?`. `predicate` is a parsed
|
|
9
|
+
# `Evaluator` ast (not a Resolver ast), evaluated once per element with the block
|
|
10
|
+
# parameter bound to that element.
|
|
47
11
|
BlockPredicate = Struct.new(:mode, :receiver, :param, :predicate, keyword_init: true)
|
|
48
12
|
|
|
49
|
-
#
|
|
50
|
-
# which Ruby Enumerable method decides the aggregate result --
|
|
51
|
-
# declared as data, not a three-way `case`, the same shape
|
|
52
|
-
# SIGN_TEST_OPERATORS above already uses for its own suffix
|
|
53
|
-
# family.
|
|
13
|
+
# Maps each block-predicate suffix to the aggregate mode it applies.
|
|
54
14
|
BLOCK_PREDICATE_MODES = {
|
|
55
15
|
"all?" => :all,
|
|
56
16
|
"any?" => :any,
|
|
57
17
|
"none?" => :none
|
|
58
18
|
}.freeze
|
|
59
19
|
|
|
60
|
-
# `receiver.find { |x| PREDICATE }`
|
|
61
|
-
#
|
|
62
|
-
#
|
|
63
|
-
# `next_load_location` field standing in for "the leg after this
|
|
64
|
-
# one", because `BlockPredicate` above can only answer yes/no,
|
|
65
|
-
# never hand back the element it found). `path` holds the
|
|
66
|
-
# dotted segments walked past the closing `}`, e.g. the `["
|
|
67
|
-
# next_load_location"]` in `legs.find { |l| l.load_location ==
|
|
68
|
-
# x }.next_load_location` -- empty when `.find { ... }` is used
|
|
69
|
-
# bare (its own found-element-or-nil is the value, same as any
|
|
70
|
-
# other leaf, e.g. composed with `.present?` the same way every
|
|
71
|
-
# other receiver already composes with it). Reuses `param`/
|
|
72
|
-
# `predicate`'s exact field names from `BlockPredicate` on
|
|
73
|
-
# purpose: `interpret_with_element` below binds by those two
|
|
74
|
-
# names and is shared unchanged between both node types.
|
|
20
|
+
# `receiver.find { |x| PREDICATE }` with an optional trailing dotted `path` projected
|
|
21
|
+
# through the found element (`legs.find { |l| ... }.next_load_location`).
|
|
22
|
+
# Shares `param`/`predicate` with `BlockPredicate` so `interpret_with_element` serves both.
|
|
75
23
|
Find = Struct.new(:receiver, :param, :predicate, :path, keyword_init: true)
|
|
76
24
|
|
|
77
25
|
module_function
|
|
78
26
|
|
|
79
|
-
# Every suffix that opens a `{ |x| ... }` block
|
|
80
|
-
# -- shared by `parse_block_opener` below, and by nothing else
|
|
81
|
-
# (this is not `BLOCK_PREDICATE_MODES` — `.find` isn't a mode
|
|
82
|
-
# `evaluate_block_predicate` aggregates through, it builds a
|
|
83
|
-
# `Find` node instead, see below).
|
|
27
|
+
# Every suffix that opens a `{ |x| ... }` block; `.find` builds a `Find`, not a mode.
|
|
84
28
|
BLOCK_OPENER_SUFFIXES = (BLOCK_PREDICATE_MODES.keys + ["find"]).freeze
|
|
85
29
|
|
|
86
|
-
# `.all?`/`.any?`/`.none?`/`.find`
|
|
87
|
-
# `
|
|
88
|
-
# last among the suffix rules (right before the `Lookup`
|
|
89
|
-
# catch-all) since a block's own predicate text can itself
|
|
90
|
-
# contain almost anything a leaf expression can, including
|
|
91
|
-
# another block-opening suffix -- letting every more specific
|
|
92
|
-
# rule above try first avoids this one accidentally swallowing a
|
|
93
|
-
# receiver another rule was meant to parse.
|
|
30
|
+
# `.all?`/`.any?`/`.none?`/`.find` — matched last among the suffix rules, before the
|
|
31
|
+
# `Lookup` catch-all, since a block's predicate can contain almost any leaf expression.
|
|
94
32
|
#
|
|
95
|
-
# One
|
|
96
|
-
#
|
|
97
|
-
#
|
|
98
|
-
#
|
|
99
|
-
# kind of block-opener than the one being scanned for --
|
|
100
|
-
# `legs.any? { |leg| ... legs.find { |o| ... } ... }` : scanning
|
|
101
|
-
# for `.find` first found the inner `.find`, not the outer
|
|
102
|
-
# `.any?`, because a non-greedy receiver capture only guarantees
|
|
103
|
-
# the first occurrence of its own suffix, not the first
|
|
104
|
-
# occurrence of any block-opening suffix -- confirmed live via
|
|
105
|
-
# the shipping domain's own re-routing rules, the same
|
|
106
|
-
# "no implicit conversion of Symbol into Integer" signature the
|
|
107
|
-
# original nested-`.any?` bug had, not inferred). Scanning for
|
|
108
|
-
# all four at once and letting the regex engine's own leftmost
|
|
109
|
-
# match win fixes both directions (`.find` nested in `.any?` or
|
|
110
|
-
# `.any?` nested in `.find`) with the same one rule, since the
|
|
111
|
-
# true receiver never itself contains any of these four words
|
|
112
|
-
# followed by `{`.
|
|
113
|
-
#
|
|
114
|
-
# `matching_brace` walks forward counting `{`/`}` depth from
|
|
115
|
-
# there, the same quote-aware, depth-aware discipline
|
|
116
|
-
# `split_addition`/`array_elements` already apply, so a `}`
|
|
117
|
-
# inside a nested block (or a quoted `start_with?` substring)
|
|
118
|
-
# never miscounts. `.find`'s own trailing dotted path (`path`)
|
|
119
|
-
# is captured from whatever follows the closing brace ; every
|
|
120
|
-
# other suffix instead requires nothing follow it at all (the
|
|
121
|
-
# `BlockPredicate` shape, unchanged from before this rewrite).
|
|
33
|
+
# One regex scans all four suffixes together so the leftmost opener wins; scanning per
|
|
34
|
+
# suffix would match a `.find` nested inside an outer `.any?` block first.
|
|
35
|
+
# `matching_brace` finds the closing `}`; `.find` may then carry a trailing dotted `path`,
|
|
36
|
+
# every other suffix must end at the brace.
|
|
122
37
|
#
|
|
123
38
|
# @param expr [String] the leaf expression text to parse
|
|
124
39
|
# @return [Find, BlockPredicate, nil] the parsed node, or nil when `expr` does
|
|
@@ -151,14 +66,8 @@ module Hecks
|
|
|
151
66
|
end
|
|
152
67
|
end
|
|
153
68
|
|
|
154
|
-
# The index of the `}`
|
|
155
|
-
#
|
|
156
|
-
# consumed that opening brace, so depth begins at 1) -- nil if
|
|
157
|
-
# the string runs out before depth returns to 0 (a caller-error
|
|
158
|
-
# shape, not a valid expression). Quote-aware so a `}` inside a
|
|
159
|
-
# quoted substring (`.start_with?("}")`) never miscounts, the
|
|
160
|
-
# same discipline `split_addition`/`array_elements` already
|
|
161
|
-
# apply for their own depth tracking.
|
|
69
|
+
# The index of the `}` closing the `{` the caller's header match already consumed
|
|
70
|
+
# (depth starts at 1). Quote-aware, so a `}` inside a quoted substring never counts.
|
|
162
71
|
#
|
|
163
72
|
# @param expr [String] the text to scan
|
|
164
73
|
# @param start [Integer] the index just after the opening `{`, where depth is 1
|
|
@@ -185,16 +94,8 @@ module Hecks
|
|
|
185
94
|
nil
|
|
186
95
|
end
|
|
187
96
|
|
|
188
|
-
# `.all?`/`.any?`/`.none?`
|
|
189
|
-
#
|
|
190
|
-
# already-interpreted (a real Array, produced by whatever
|
|
191
|
-
# receiver expression came before it -- typically `Split`'s
|
|
192
|
-
# output), so this only has to run the per-element predicate and
|
|
193
|
-
# aggregate. `interpret_with_element` is the "smallest correct
|
|
194
|
-
# thing" the migration plan asked for : no persistent iteration-
|
|
195
|
-
# variable concept added anywhere else in Resolver's state model,
|
|
196
|
-
# just `attrs` extended with the bound name for the span of that
|
|
197
|
-
# one predicate evaluation, discarded immediately after.
|
|
97
|
+
# `.all?`/`.any?`/`.none?` over an already-interpreted `collection`: runs the
|
|
98
|
+
# per-element predicate and aggregates by `node.mode`.
|
|
198
99
|
#
|
|
199
100
|
# @param node [BlockPredicate] the parsed `.all?`/`.any?`/`.none?` node
|
|
200
101
|
# @param collection [Object] the interpreted receiver, expected to be an Array
|
|
@@ -214,39 +115,21 @@ module Hecks
|
|
|
214
115
|
end
|
|
215
116
|
end
|
|
216
117
|
|
|
217
|
-
#
|
|
218
|
-
#
|
|
219
|
-
# so the bound name shadows any same-named state/attrs field for
|
|
220
|
-
# the span of this one call only ; nothing persists past it.
|
|
118
|
+
# Interprets `node.predicate` with `node.param` bound to `element`, for that call only.
|
|
119
|
+
# `attrs` wins over `state`, so the bound name shadows any same-named field.
|
|
221
120
|
#
|
|
222
|
-
# @param node [BlockPredicate, Find]
|
|
223
|
-
#
|
|
224
|
-
# @param
|
|
225
|
-
#
|
|
226
|
-
# @
|
|
227
|
-
# state
|
|
228
|
-
# @param attrs [Hash{Symbol => Object}] the command's own bound
|
|
229
|
-
# arguments
|
|
230
|
-
# @return [Object] `node.predicate` interpreted with `node.param`
|
|
231
|
-
# bound to `element`
|
|
121
|
+
# @param node [BlockPredicate, Find]
|
|
122
|
+
# @param element [Object] the collection element to bind
|
|
123
|
+
# @param state [Hash{Symbol => Object}] the record's current state
|
|
124
|
+
# @param attrs [Hash{Symbol => Object}] the command's bound arguments
|
|
125
|
+
# @return [Object] the predicate's value for `element`
|
|
232
126
|
# @raise [EvaluationError] if `node.predicate` refuses to evaluate
|
|
233
127
|
def interpret_with_element(node, element, state, attrs)
|
|
234
128
|
Evaluator.interpret(node.predicate, state, attrs.merge(node.param.to_sym => element))
|
|
235
129
|
end
|
|
236
130
|
|
|
237
|
-
# `.find { |x| PREDICATE }`
|
|
238
|
-
#
|
|
239
|
-
# (below, shared with `BlockPredicate` — both bind `node.param`
|
|
240
|
-
# to one element and interpret `node.predicate` against it) to
|
|
241
|
-
# find the first element the predicate accepts, then projects
|
|
242
|
-
# `node.path` through it via `walk_path`, the same dotted-
|
|
243
|
-
# segment walk `lookup` uses for a plain attribute path. `nil`
|
|
244
|
-
# (no matching element, or a `path` segment that doesn't
|
|
245
|
-
# resolve) flows through rather than raising — the same "a
|
|
246
|
-
# dispatch-time given just refuses" shape every other missing-
|
|
247
|
-
# value case in this grammar already has, and the one a re-
|
|
248
|
-
# routing check like "is there a leg after this one" needs :
|
|
249
|
-
# not finding one is a normal outcome, not an error.
|
|
131
|
+
# `.find { |x| PREDICATE }` — the first element the predicate accepts, then `node.path`
|
|
132
|
+
# walked through it. A miss yields nil rather than raising: no match is a normal outcome.
|
|
250
133
|
#
|
|
251
134
|
# @param node [Find] the parsed `.find` node
|
|
252
135
|
# @param collection [Object] the interpreted receiver, expected to be an Array
|