hecks 2.7.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 +11 -0
- 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 +18 -99
- 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 +15 -37
- 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/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 +17 -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 +38 -26
- 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 +17 -65
- 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 -189
- 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 -106
- 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 +54 -268
- data/lib/hecks/bluebook/meta_validator/syntax_boot.rb +47 -308
- 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 +10 -91
- data/lib/hecks/bluebook/model_check.rb +102 -600
- 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 +84 -0
- data/lib/hecks/cli/document.rb +86 -0
- data/lib/hecks/cli/ir.rb +45 -0
- data/lib/hecks/cli/mcp.rb +31 -0
- data/lib/hecks/cli/mcp_door.rb +366 -0
- data/lib/hecks/cli/model_check.rb +203 -0
- data/lib/hecks/cli/project_cli.rb +90 -0
- data/lib/hecks/cli/project_diagrams.rb +36 -0
- data/lib/hecks/cli/run.rb +173 -0
- data/lib/hecks/cli/smoke_test.rb +45 -0
- data/lib/hecks/cli/stores.rb +53 -0
- data/lib/hecks/cli.rb +160 -0
- 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 +98 -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 +95 -0
- 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 +62 -65
- 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 +7 -26
- 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 +22 -122
- 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 +151 -679
- 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 +9 -16
- 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 +46 -138
- 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 +93 -0
- data/lib/hecks/release/runner/commands.rb +66 -0
- data/lib/hecks/release/runner/console.rb +52 -0
- data/lib/hecks/release/runner/gem_publisher.rb +43 -0
- data/lib/hecks/release/runner/git.rb +48 -0
- data/lib/hecks/release/runner/npm_publisher.rb +75 -0
- data/lib/hecks/release/runner/preflight.rb +104 -0
- data/lib/hecks/release/runner/published.rb +55 -0
- data/lib/hecks/release/runner/tagger.rb +80 -0
- data/lib/hecks/release/runner.rb +215 -0
- 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 +125 -307
- 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 +65 -220
- 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 +139 -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 +103 -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 +146 -567
- 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/vocabulary.rb +5 -0
- data/lib/hecks.rb +32 -82
- 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 +30 -59
- data/lib/hecks/bench/cli.rb +0 -74
- data/lib/hecks/bench/environment.rb +0 -100
- data/lib/hecks/bench/postgres_probe.rb +0 -41
- data/lib/hecks/bench/report.rb +0 -116
- data/lib/hecks/bench/ruby_runner.rb +0 -151
- data/lib/hecks/bench/run.rb +0 -55
- data/lib/hecks/bench/rust_runner.rb +0 -165
- data/lib/hecks/bench/stats.rb +0 -75
- data/lib/hecks/bench/suite.rb +0 -172
- data/lib/hecks/bench/workload.rb +0 -137
- data/lib/hecks/bench.rb +0 -28
- data/lib/hecks/codemod.rb +0 -443
- data/lib/hecks/corpus.rb +0 -479
- data/lib/hecks/doc/reference.rb +0 -585
- data/lib/hecks/fuzzing/bounded_exhaustive_expressions.rb +0 -684
- data/lib/hecks/fuzzing/combination_miner.rb +0 -178
- data/lib/hecks/fuzzing/concurrent_dispatch.rb +0 -469
- data/lib/hecks/fuzzing/coverage_campaign.rb +0 -161
- data/lib/hecks/fuzzing/differential.rb +0 -192
- data/lib/hecks/fuzzing/domain_generator.rb +0 -871
- data/lib/hecks/fuzzing/era_boundary.rb +0 -154
- data/lib/hecks/fuzzing/form_census.rb +0 -285
- data/lib/hecks/fuzzing/generated_domain_check.rb +0 -171
- data/lib/hecks/fuzzing/invalid_value_generator.rb +0 -125
- data/lib/hecks/fuzzing/isolated_boot.rb +0 -658
- data/lib/hecks/fuzzing/nondeterministic.rb +0 -79
- data/lib/hecks/fuzzing/persistence_parity.rb +0 -253
- data/lib/hecks/fuzzing/properties/corrections.rb +0 -125
- data/lib/hecks/fuzzing/properties/dispatch_and_mutations.rb +0 -688
- data/lib/hecks/fuzzing/properties/guards.rb +0 -398
- data/lib/hecks/fuzzing/properties/invariants_and_aggregation.rb +0 -399
- data/lib/hecks/fuzzing/properties/lifecycle_and_replay.rb +0 -137
- data/lib/hecks/fuzzing/properties/outbox.rb +0 -180
- data/lib/hecks/fuzzing/properties/querying.rb +0 -260
- data/lib/hecks/fuzzing/properties.rb +0 -267
- data/lib/hecks/fuzzing/qa_settings.rb +0 -164
- data/lib/hecks/fuzzing/replay.rb +0 -930
- data/lib/hecks/fuzzing/rotation_priority.rb +0 -114
- data/lib/hecks/fuzzing/rust_gap_manifest.rb +0 -139
- data/lib/hecks/fuzzing/self_consistency.rb +0 -825
- data/lib/hecks/fuzzing/sequence_generator/adversary.rb +0 -532
- data/lib/hecks/fuzzing/sequence_generator/catalog.rb +0 -171
- data/lib/hecks/fuzzing/sequence_generator/outcome_tracker.rb +0 -127
- data/lib/hecks/fuzzing/sequence_generator/picker.rb +0 -116
- data/lib/hecks/fuzzing/sequence_generator/query_binding.rb +0 -138
- data/lib/hecks/fuzzing/sequence_generator/step_builder.rb +0 -344
- data/lib/hecks/fuzzing/sequence_generator.rb +0 -311
- data/lib/hecks/fuzzing/shrinker.rb +0 -309
- data/lib/hecks/fuzzing/structural_skips.rb +0 -53
- data/lib/hecks/fuzzing/sweep_depth.rb +0 -61
- data/lib/hecks/fuzzing/target_capabilities.rb +0 -255
- data/lib/hecks/fuzzing/value_generator.rb +0 -340
- data/lib/hecks/fuzzing.rb +0 -23
- data/lib/hecks/grammar/evolve.rb +0 -524
- data/lib/hecks/query_ir.rb +0 -482
|
@@ -3,14 +3,8 @@ require_relative "bluebook_builder/validation"
|
|
|
3
3
|
module Hecks
|
|
4
4
|
module Bluebook
|
|
5
5
|
module DSL
|
|
6
|
-
# The `Hecks.bluebook "Name" do ... end` receiver
|
|
7
|
-
#
|
|
8
|
-
# `process_manager` a chapter declares, plus the chapter-wide named-
|
|
9
|
-
# given pools those thread down into (see `#aggregate_impl`'s own
|
|
10
|
-
# comment). `.build` reuses the same open builder instance across
|
|
11
|
-
# several files sharing one chapter name (`self.build`'s own comment),
|
|
12
|
-
# so a chapter split across files accumulates rather than each file
|
|
13
|
-
# silently replacing the last.
|
|
6
|
+
# The `Hecks.bluebook "Name" do ... end` receiver, collecting every aggregate,
|
|
7
|
+
# read model, policy and process manager a chapter declares.
|
|
14
8
|
class BluebookBuilder
|
|
15
9
|
GRAMMAR_CONTEXT = "Bluebook".freeze
|
|
16
10
|
|
|
@@ -28,31 +22,23 @@ module Hecks
|
|
|
28
22
|
@read_models = []
|
|
29
23
|
@policies = []
|
|
30
24
|
@process_managers = []
|
|
31
|
-
# The root of the chapter-wide given pool
|
|
32
|
-
#
|
|
33
|
-
#
|
|
34
|
-
# this arc). See `#given`'s own comment for what this closes.
|
|
25
|
+
# The root of the chapter-wide given pool, one level wider than
|
|
26
|
+
# `AggregateBuilder`'s `@entity_named_givens` (S10). See `#given` for
|
|
27
|
+
# what this closes.
|
|
35
28
|
@chapter_named_givens = {}
|
|
36
|
-
# Every bare chapter-given reference
|
|
37
|
-
#
|
|
38
|
-
#
|
|
39
|
-
# `AggregateBuilder#pending_chapter_given`'s own comment for
|
|
40
|
-
# what queues here and `#resolve_pending_chapter_givens!`,
|
|
41
|
-
# below, for where it drains.
|
|
29
|
+
# Every bare chapter-given reference left unresolved so far, threaded into
|
|
30
|
+
# every aggregate like `@chapter_named_givens`. See
|
|
31
|
+
# `AggregateBuilder#pending_chapter_given` for what queues here.
|
|
42
32
|
@chapter_pending_givens = []
|
|
43
|
-
#
|
|
44
|
-
#
|
|
45
|
-
#
|
|
46
|
-
# closes; `docs/implemented/resolution-rules/
|
|
47
|
-
# chapter-entity-given.md` for the full algorithm.
|
|
33
|
+
# One level wider still — the chapter-wide, entity-scoped pool, the piece
|
|
34
|
+
# analogue of `@chapter_named_givens`. See `EntityBuilder#given_impl` and
|
|
35
|
+
# docs/implemented/resolution-rules/chapter-entity-given.md for the algorithm.
|
|
48
36
|
@chapter_entity_named_givens = {}
|
|
49
37
|
@chapter_entity_pending_givens = []
|
|
50
38
|
end
|
|
51
39
|
|
|
52
|
-
# Chapter metadata belongs to the composed
|
|
53
|
-
#
|
|
54
|
-
# the version header; adopt it into the already-open chapter builder.
|
|
55
|
-
# Two different versions are a real contradiction, not load order.
|
|
40
|
+
# Chapter metadata belongs to the composed builder, not whichever file sorts
|
|
41
|
+
# first; two different versions for one chapter is a real contradiction.
|
|
56
42
|
def adopt_version(version)
|
|
57
43
|
return if version.nil?
|
|
58
44
|
if @version && @version.to_s != version.to_s
|
|
@@ -69,47 +55,29 @@ module Hecks
|
|
|
69
55
|
# @param value [String] the vision text, as given to `vision "..."`
|
|
70
56
|
# @return [void]
|
|
71
57
|
def vision(value)
|
|
72
|
-
# moved to the language: Vision invariant, on Chapter.Declare
|
|
73
|
-
|
|
74
58
|
@vision = value
|
|
75
59
|
end
|
|
76
60
|
|
|
77
|
-
# Records the chapter's earlier name, so the storage layer recognizes its
|
|
78
|
-
# under
|
|
79
|
-
# identity can change, and this is where the new declaration says what it was.
|
|
61
|
+
# Records the chapter's earlier name, so the storage layer recognizes its history
|
|
62
|
+
# under it instead of minting a new lineage — a chapter's identity can change.
|
|
80
63
|
#
|
|
81
64
|
# @param value [String, Symbol] the chapter's earlier name
|
|
82
65
|
# @return [String] `value`, stringified, as stored
|
|
83
66
|
def formerly_known_as(value) = @formerly_known_as = value.to_s
|
|
84
67
|
|
|
85
|
-
# Names a core grammar context this chapter's sub-language extends.
|
|
86
|
-
#
|
|
87
|
-
# **A sub-language names where it lands**. ADR 0026's own seam: the core
|
|
88
|
-
# grammar does not name its extension points, so this chapter names
|
|
89
|
-
# itself onto them instead — the core contexts (e.g. "Query",
|
|
90
|
-
# "ReadModel") whose own admitted words this chapter's `Syntax`
|
|
91
|
-
# aggregate contributes rows for. Variadic, and accumulating across
|
|
92
|
-
# calls the same reason `identified_by`/`group_by` are: nothing here
|
|
93
|
-
# requires one call to name every context at once.
|
|
68
|
+
# Names a core grammar context this chapter's sub-language extends (ADR 0026).
|
|
69
|
+
# Variadic and accumulates across calls, like `identified_by`/`group_by`.
|
|
94
70
|
#
|
|
95
|
-
# Reached through `calls: "attaches_to_impl"
|
|
96
|
-
#
|
|
97
|
-
# core chapter.
|
|
71
|
+
# Reached through `calls: "attaches_to_impl"`, not bootstrap-reachable — only
|
|
72
|
+
# sub-language chapters like Paging call it, never a core chapter.
|
|
98
73
|
#
|
|
99
74
|
# @param contexts [Array<String>] one or more core grammar context names, such as
|
|
100
75
|
# `"Query"`/`"ReadModel"`
|
|
101
76
|
# @return [Array<String>] every context named so far, this call's included
|
|
102
77
|
def attaches_to_impl(*contexts) = (@attaches_to ||= []).concat(contexts.map(&:to_s))
|
|
103
78
|
|
|
104
|
-
# Records a capability this chapter answers for other domains
|
|
105
|
-
#
|
|
106
|
-
# A capability this chapter answers for other domains, declared so
|
|
107
|
-
# nothing has to recognise the chapter by name — Governance's
|
|
108
|
-
# `provides "authorization", assignments: ..., grant: ...,
|
|
109
|
-
# transitions: ...`. One row per key, in the order written; what
|
|
110
|
-
# each capability requires is checked once the chapter is whole
|
|
111
|
-
# (`Validation#validate_provisions!`), since the verbs it names may
|
|
112
|
-
# be declared further down the file.
|
|
79
|
+
# Records a capability this chapter answers for other domains, one row per key —
|
|
80
|
+
# checked once the chapter is whole, since verbs may be declared later in the file.
|
|
113
81
|
#
|
|
114
82
|
# @param capability [String] the capability's own name, such as `"authorization"`
|
|
115
83
|
# @param verbs [Hash{Symbol => String}] one command/query reference per capability
|
|
@@ -143,20 +111,11 @@ module Hecks
|
|
|
143
111
|
# @return [Symbol] `:generic`
|
|
144
112
|
def generic = @classification = :generic
|
|
145
113
|
|
|
146
|
-
# Declares an aggregate belonging to this chapter.
|
|
147
|
-
#
|
|
148
|
-
# `@chapter_named_givens` is threaded into every aggregate this
|
|
149
|
-
# chapter builds — see `AggregateBuilder#given`'s own comment
|
|
150
|
-
# for the sharing this enables; not a new top-level DSL word
|
|
151
|
-
# itself (an aggregate's own existing `given` already both
|
|
152
|
-
# declares locally and write-throughs here as a side effect,
|
|
153
|
-
# the identical shape `EntityBuilder#given`'s own write-through
|
|
154
|
-
# to its owner aggregate's pool already takes — no new spelling
|
|
155
|
-
# for "declare a precondition," one level wider, same word).
|
|
114
|
+
# Declares an aggregate belonging to this chapter. `@chapter_named_givens` is
|
|
115
|
+
# threaded into it — see `AggregateBuilder#given` for the sharing this enables.
|
|
156
116
|
#
|
|
157
|
-
#
|
|
158
|
-
#
|
|
159
|
-
# with it), so also named in `GenericDispatch::BOOTSTRAP_CALLS_FALLBACK`.
|
|
117
|
+
# Bootstrap-reachable (every core chapter's top-level shape uses it), so also
|
|
118
|
+
# named in `GenericDispatch::BOOTSTRAP_CALLS_FALLBACK`.
|
|
160
119
|
#
|
|
161
120
|
# @param name [String] the aggregate's own name
|
|
162
121
|
# @yield the aggregate body, evaluated against a new `AggregateBuilder`; may be omitted
|
|
@@ -172,15 +131,6 @@ module Hecks
|
|
|
172
131
|
|
|
173
132
|
# Declares a read model belonging to this chapter.
|
|
174
133
|
#
|
|
175
|
-
# `read_model` is the word (ADR 0025 reverts `report` — the IR
|
|
176
|
-
# construct, the registry API, and the docs filename all said
|
|
177
|
-
# `read_model` the whole time; no era was ever minted under
|
|
178
|
-
# `report`, so this is history and source agreeing again). `report`
|
|
179
|
-
# stays answered under `MetaValidator.shadow_parsing?` (S0a's own
|
|
180
|
-
# bridge) for the same reason `has_many` does — frozen era text
|
|
181
|
-
# that used it must keep booting; live source refuses it, naming
|
|
182
|
-
# the replacement.
|
|
183
|
-
#
|
|
184
134
|
# @param name [String] the read model's own name
|
|
185
135
|
# @yield the read model body, evaluated against a new `ReadModelBuilder`
|
|
186
136
|
# @return [Array<Bluebook::ReadModel>] every read model declared so far, this one last
|
|
@@ -193,14 +143,14 @@ module Hecks
|
|
|
193
143
|
@read_models << ReadModelBuilder.build(name, &)
|
|
194
144
|
end
|
|
195
145
|
|
|
196
|
-
#
|
|
197
|
-
#
|
|
146
|
+
# Answered only under shadow-parsing, so frozen era text spelled `report` keeps
|
|
147
|
+
# booting; live source refuses it and names `read_model` as the replacement.
|
|
198
148
|
#
|
|
199
149
|
# @param name [String] the read model's own name
|
|
200
150
|
# @yield the read model body, evaluated against a new `ReadModelBuilder`
|
|
201
151
|
# @return [Array<Bluebook::ReadModel>] every read model declared so far, this one last,
|
|
202
152
|
# under shadow-parsing
|
|
203
|
-
# @raise [Bluebook::DSL::Malformed] always, outside shadow-parsing
|
|
153
|
+
# @raise [Bluebook::DSL::Malformed] always, outside shadow-parsing
|
|
204
154
|
def report(name, &)
|
|
205
155
|
return read_model(name, &) if MetaValidator.shadow_parsing?
|
|
206
156
|
|
|
@@ -237,12 +187,9 @@ module Hecks
|
|
|
237
187
|
# @raise [Bluebook::DSL::ProcessManagerBuilder::InvalidProcessManager] if a process
|
|
238
188
|
# manager's own structural check fails
|
|
239
189
|
def build
|
|
240
|
-
# The chapter is the top of the construct chain —
|
|
241
|
-
#
|
|
242
|
-
#
|
|
243
|
-
# to it. No constants are installed at load time : the public door is
|
|
244
|
-
# a per-boot projection, installed by `Loader.bind_runtime` once a
|
|
245
|
-
# dispatcher exists to close over (facade/surface.rb).
|
|
190
|
+
# The chapter is the top of the construct chain — its constructor stamps every
|
|
191
|
+
# aggregate and read model with itself as owner, so `hecks_fqn` resolves by
|
|
192
|
+
# walking up to it.
|
|
246
193
|
bluebook = Bluebook::Chapter.new(name: @name, version: @version, vision: @vision,
|
|
247
194
|
aggregates: @aggregates,
|
|
248
195
|
read_models: @read_models,
|
|
@@ -253,60 +200,28 @@ module Hecks
|
|
|
253
200
|
attaches_to: @attaches_to || [],
|
|
254
201
|
provides: @provides || [])
|
|
255
202
|
|
|
256
|
-
#
|
|
257
|
-
#
|
|
258
|
-
#
|
|
259
|
-
# would see the same incomplete `@chapter_named_givens`
|
|
260
|
-
# `validate_assembled!` below would. Deferred to
|
|
261
|
-
# `MetaValidator.judge_deferred!` the same way, and before
|
|
262
|
-
# `validate_assembled!` there — nothing downstream should ever
|
|
263
|
-
# read an unresolved placeholder's fields.
|
|
203
|
+
# A bare chapter-given may still be pending if a file that would resolve it
|
|
204
|
+
# hasn't loaded yet; deferred to `MetaValidator.judge_deferred!`, before
|
|
205
|
+
# `validate_assembled!`, so nothing downstream reads an unresolved placeholder.
|
|
264
206
|
resolve_pending_chapter_givens! unless MetaValidator.deferring?
|
|
265
207
|
resolve_pending_chapter_entity_givens! unless MetaValidator.deferring?
|
|
266
208
|
|
|
267
|
-
# A chapter may
|
|
268
|
-
#
|
|
269
|
-
#
|
|
270
|
-
# equally name a construct declared in a file that has not
|
|
271
|
-
# loaded yet, and `@aggregates`/`@process_managers` here are
|
|
272
|
-
# only ever as complete as whatever has loaded so far. So,
|
|
273
|
-
# exactly like `MetaValidator.call` below, this is skipped
|
|
274
|
-
# while `MetaValidator.defer` is loading the chapter's files
|
|
275
|
-
# and run once instead — by `MetaValidator.judge_deferred!`,
|
|
276
|
-
# against the fully assembled chapter — after the last one
|
|
277
|
-
# loads. A single-file chapter (still the common case) never
|
|
278
|
-
# sees `deferring?` true here at all, so its own checks still
|
|
279
|
-
# run inline, exactly as before.
|
|
209
|
+
# A chapter may span several files; a hop/projection/event can name a construct
|
|
210
|
+
# not yet loaded, so this is skipped while `MetaValidator.defer` loads the
|
|
211
|
+
# chapter's files and run once by `judge_deferred!` against the whole chapter.
|
|
280
212
|
self.class.validate_assembled!(bluebook) unless MetaValidator.deferring?
|
|
281
213
|
|
|
282
|
-
# The language judges the bluebook,
|
|
283
|
-
#
|
|
284
|
-
#
|
|
285
|
-
# at declaration time.
|
|
214
|
+
# The language judges the bluebook last, so the meta-domain sees a fully built
|
|
215
|
+
# IR — whole-document rules need every declaration present, so they can't be
|
|
216
|
+
# per-declaration givens.
|
|
286
217
|
MetaValidator.call(bluebook)
|
|
287
218
|
end
|
|
288
219
|
|
|
289
|
-
# The other half of a chapter-wide `given` reference —
|
|
290
|
-
# `AggregateBuilder#pending_chapter_given`
|
|
291
|
-
# unresolved bare reference and deferred it here, unable to
|
|
292
|
-
# check further: a later file in this same chapter might still
|
|
293
|
-
# declare the real thing. Runs once every file has loaded,
|
|
294
|
-
# against the now-complete `@chapter_named_givens` pool — the
|
|
295
|
-
# identical lookup `reference_named_chapter_given` already does,
|
|
296
|
-
# just late enough to see every aggregate's own declarations,
|
|
297
|
-
# not only the ones loaded before the referencing one.
|
|
220
|
+
# The other half of a chapter-wide `given` reference — resolves every reference
|
|
221
|
+
# `AggregateBuilder#pending_chapter_given` deferred, once the chapter's files are loaded.
|
|
298
222
|
#
|
|
299
|
-
# Mutates each placeholder `Given` in place
|
|
300
|
-
#
|
|
301
|
-
# reference, in the referencing aggregate's own `preconditions`
|
|
302
|
-
# and in any command (same aggregate) that separately
|
|
303
|
-
# bare-referenced the same description, so there is nothing
|
|
304
|
-
# downstream holding a second, now-stale copy to update.
|
|
305
|
-
# Instance-level (not `self.`, unlike `validate_assembled!`) —
|
|
306
|
-
# unlike that battery, this needs `@chapter_named_givens` itself,
|
|
307
|
-
# which only exists on the builder instance still open for this
|
|
308
|
-
# chapter (`MetaValidator.judge_deferred!` reaches it via
|
|
309
|
-
# `registry.bluebook_builder(name)`, guaranteed already present).
|
|
223
|
+
# Mutates each placeholder `Given` in place, since it's already embedded by Ruby
|
|
224
|
+
# object reference in the referencing preconditions and commands.
|
|
310
225
|
#
|
|
311
226
|
# @return [void]
|
|
312
227
|
# @raise [Bluebook::DSL::Malformed] if a pending reference's own `description` names no
|
|
@@ -352,9 +267,8 @@ module Hecks
|
|
|
352
267
|
end
|
|
353
268
|
private :resolve_pending_chapter_given
|
|
354
269
|
|
|
355
|
-
# The entity-scoped analogue
|
|
356
|
-
#
|
|
357
|
-
# shape, resolved against `@chapter_entity_named_givens` instead.
|
|
270
|
+
# The entity-scoped analogue of `#resolve_pending_chapter_givens!`, resolved
|
|
271
|
+
# against `@chapter_entity_named_givens` instead.
|
|
358
272
|
#
|
|
359
273
|
# @return [void]
|
|
360
274
|
# @raise [Bluebook::DSL::Malformed] if a pending reference's own `description` names no
|
|
@@ -400,56 +314,28 @@ module Hecks
|
|
|
400
314
|
end
|
|
401
315
|
private :resolve_pending_chapter_entity_given
|
|
402
316
|
|
|
403
|
-
# Builds a `Chapter` from a `Hecks.bluebook "Name" do ... end` block, reusing
|
|
404
|
-
#
|
|
405
|
-
#
|
|
406
|
-
# A chapter may be declared in several files, meant to merge into one
|
|
407
|
-
# domain — `lib/hecks/language/bluebook/*.bluebook` all open
|
|
408
|
-
# `Hecks.bluebook "Bluebook" do ... end`. The registry holds the builder open across
|
|
409
|
-
# calls — the first file for a name creates it, every later file for the same name
|
|
410
|
-
# reuses the same instance — rather than minting a fresh builder per call, which would
|
|
411
|
-
# let a second file with the same chapter name silently replace the first's aggregates
|
|
412
|
-
# instead of adding to them.
|
|
413
|
-
#
|
|
414
|
-
# `@aggregates`/`@read_models` accumulate across calls on the reused instance. `#build`
|
|
415
|
-
# is safe to call once per file on the same builder — it constructs a fresh
|
|
416
|
-
# `Bluebook` from whatever is currently held and re-`Namespace.install`s
|
|
417
|
-
# over the previous one, so the last file's call leaves every aggregate
|
|
418
|
-
# seen so far reachable, and each call's IR is a strict superset of the
|
|
419
|
-
# one before. `Registry#add_bluebook` still simply stores by name — with
|
|
420
|
-
# this in place, "last write wins" is the cumulative, correct write.
|
|
317
|
+
# Builds a `Chapter` from a `Hecks.bluebook "Name" do ... end` block, reusing one open
|
|
318
|
+
# builder per chapter name so several files accumulate into it rather than replacing it.
|
|
421
319
|
#
|
|
422
320
|
# @param name [String] the chapter's declared name
|
|
423
321
|
# @param version [String, nil] the chapter's pinned version, or nil for unversioned
|
|
424
|
-
# @yield the chapter
|
|
425
|
-
# resolver installed so a bare constant resolves to a `ConstShim::ScopedConstant`
|
|
322
|
+
# @yield the chapter body; a bare constant resolves to a `ConstShim::ScopedConstant`
|
|
426
323
|
# @return [Bluebook::Chapter] the built, judged chapter
|
|
427
|
-
# @raise [Bluebook::DSL::Malformed] if
|
|
428
|
-
#
|
|
429
|
-
# `#build` raises
|
|
324
|
+
# @raise [Bluebook::DSL::Malformed] if `version` conflicts with an already-adopted
|
|
325
|
+
# version, or the built chapter fails validation
|
|
430
326
|
# @raise [Bluebook::DSL::ProcessManagerBuilder::InvalidProcessManager] if a process
|
|
431
|
-
# manager's
|
|
327
|
+
# manager's structural check fails
|
|
432
328
|
def self.build(name, version: nil, &block)
|
|
433
329
|
registry = Hecks.current_registry
|
|
434
|
-
#
|
|
435
|
-
# `Registry#record_bluebook_source` — two frames up: this
|
|
436
|
-
# method's own caller is `Hecks.bluebook` (hecks.rb), and ITS
|
|
330
|
+
# Two frames up: this method's caller is `Hecks.bluebook` (hecks.rb), whose
|
|
437
331
|
# caller is the real `.bluebook` file's own top-level call site.
|
|
438
332
|
caller_location = caller_locations(2, 1)&.first
|
|
439
333
|
registry&.record_bluebook_source(name, caller_location&.path)
|
|
440
334
|
builder = registry ? registry.bluebook_builder(name) { new(name, version: version) } : new(name, version: version)
|
|
441
335
|
builder.__send__(:adopt_version, version)
|
|
442
|
-
# A bare constant
|
|
443
|
-
#
|
|
444
|
-
#
|
|
445
|
-
# and that is still the whole answer for a bare name: `Attribute` spells
|
|
446
|
-
# it with `to_s`, so the concept never needed a `TypeName` wrapper class
|
|
447
|
-
# of its own — any such wrapper would exist only long enough to be
|
|
448
|
-
# stringified. The concept still has a home — the
|
|
449
|
-
# language declares `value_object "TypeName"` — it just needed no Ruby
|
|
450
|
-
# class of its own. A Module rather than a Symbol is what also lets
|
|
451
|
-
# `Account::Debit`/`admits: Account::LedgerDirection` answer their own
|
|
452
|
-
# `::` — a plain Symbol cannot.
|
|
336
|
+
# A bare constant like `PizzaName` is a name, not a Ruby reference —
|
|
337
|
+
# `const_missing` hands over a `ConstShim::ScopedConstant`. A Module rather
|
|
338
|
+
# than a Symbol is what lets `Account::Debit` answer its own `::`.
|
|
453
339
|
resolver = ->(const) { ConstShim::ScopedConstant.for(const) }
|
|
454
340
|
ConstShim.with(resolver) { builder.instance_eval(&block) } if block
|
|
455
341
|
builder.build
|
|
@@ -65,6 +65,7 @@ module Hecks
|
|
|
65
65
|
["ReadModel", "reference_to"] => :reference_to_impl,
|
|
66
66
|
["ReadModel", "include"] => :include_impl,
|
|
67
67
|
["ReadModel", "group_by"] => :group_by_impl,
|
|
68
|
+
["ReadModel", "percentile"] => :percentile_impl,
|
|
68
69
|
["ReadModel", "where"] => :where_impl,
|
|
69
70
|
["ReadModel", "order_by"] => :order_by_impl,
|
|
70
71
|
["ReadModel", "authorize"] => :authorize_impl,
|