hecks 0.2.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/hecks/adapters/driven/claude_code.adapter +3 -0
- data/lib/hecks/adapters/driven/claude_code.rb +127 -0
- data/lib/hecks/adapters/driven/d1.adapter +12 -0
- data/lib/hecks/adapters/driven/d1.rb +427 -0
- data/lib/hecks/adapters/driven/folder.adapter +3 -0
- data/lib/hecks/adapters/driven/folder.rb +199 -0
- data/lib/hecks/adapters/driven/google_authentication.adapter +3 -0
- data/lib/hecks/adapters/driven/google_authentication.rb +100 -0
- data/lib/hecks/adapters/driven/governance_authorization.adapter +3 -0
- data/lib/hecks/adapters/driven/governance_authorization.rb +101 -0
- data/lib/hecks/adapters/driven/heki/journal.rb +56 -0
- data/lib/hecks/adapters/driven/heki/saga_store.rb +99 -0
- data/lib/hecks/adapters/driven/heki/snapshot.rb +65 -0
- data/lib/hecks/adapters/driven/heki.adapter +4 -0
- data/lib/hecks/adapters/driven/heki.rb +179 -0
- data/lib/hecks/adapters/driven/identity_registry.adapter +3 -0
- data/lib/hecks/adapters/driven/identity_registry.rb +26 -0
- data/lib/hecks/adapters/driven/in_memory_ordering.rb +51 -0
- data/lib/hecks/adapters/driven/lambda/client.rb +63 -0
- data/lib/hecks/adapters/driven/lambda.adapter +4 -0
- data/lib/hecks/adapters/driven/lambda.rb +145 -0
- data/lib/hecks/adapters/driven/memory.adapter +3 -0
- data/lib/hecks/adapters/driven/memory.rb +103 -0
- data/lib/hecks/adapters/driven/mock_stripe_adapter.adapter +3 -0
- data/lib/hecks/adapters/driven/mock_stripe_adapter.rb +28 -0
- data/lib/hecks/adapters/driven/postgres/codec.rb +88 -0
- data/lib/hecks/adapters/driven/postgres/schema_builder.rb +207 -0
- data/lib/hecks/adapters/driven/postgres.adapter +5 -0
- data/lib/hecks/adapters/driven/postgres.rb +438 -0
- data/lib/hecks/adapters/driven/postgres_era.adapter +17 -0
- data/lib/hecks/adapters/driven/prism.adapter +3 -0
- data/lib/hecks/adapters/driven/prism.rb +80 -0
- data/lib/hecks/adapters/driven/secure_random_identity.adapter +3 -0
- data/lib/hecks/adapters/driven/secure_random_identity.rb +14 -0
- data/lib/hecks/adapters/driven/sql_query_builder.rb +221 -0
- data/lib/hecks/adapters/driven/sqlite/codec.rb +80 -0
- data/lib/hecks/adapters/driven/sqlite/projection.rb +172 -0
- data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +192 -0
- data/lib/hecks/adapters/driven/sqlite.adapter +9 -0
- data/lib/hecks/adapters/driven/sqlite.rb +306 -0
- data/lib/hecks/adapters/driven/system_clock.adapter +3 -0
- data/lib/hecks/adapters/driven/system_clock.rb +14 -0
- data/lib/hecks/adapters/driven.rb +54 -0
- data/lib/hecks/adapters.rb +6 -0
- data/lib/hecks/behaviors/dsl.rb +125 -0
- data/lib/hecks/behaviors/expectations.rb +340 -0
- data/lib/hecks/behaviors/ir.rb +31 -0
- data/lib/hecks/behaviors/rspec.rb +42 -0
- data/lib/hecks/behaviors/runner.rb +96 -0
- data/lib/hecks/behaviors.rb +25 -0
- data/lib/hecks/bluebook/aggregate.rb +108 -0
- data/lib/hecks/bluebook/assembly/aggregate_assembly.rb +134 -0
- data/lib/hecks/bluebook/assembly/build.rb +48 -0
- data/lib/hecks/bluebook/assembly/contract.rb +112 -0
- data/lib/hecks/bluebook/assembly/contracts.rb +438 -0
- data/lib/hecks/bluebook/assembly/marks.rb +228 -0
- data/lib/hecks/bluebook/assembly/specializer.rb +70 -0
- data/lib/hecks/bluebook/assembly.rb +91 -0
- data/lib/hecks/bluebook/attribute.rb +96 -0
- data/lib/hecks/bluebook/behaviour/aggregate.rb +83 -0
- data/lib/hecks/bluebook/behaviour/attribute.rb +27 -0
- data/lib/hecks/bluebook/behaviour/chapter.rb +72 -0
- data/lib/hecks/bluebook/behaviour/command.rb +116 -0
- data/lib/hecks/bluebook/behaviour/domain_port.rb +25 -0
- data/lib/hecks/bluebook/behaviour/entity.rb +59 -0
- data/lib/hecks/bluebook/behaviour/hexagon.rb +50 -0
- data/lib/hecks/bluebook/behaviour/lifecycle.rb +68 -0
- data/lib/hecks/bluebook/behaviour/policy.rb +52 -0
- data/lib/hecks/bluebook/behaviour/process_manager.rb +51 -0
- data/lib/hecks/bluebook/behaviour/query.rb +10 -0
- data/lib/hecks/bluebook/behaviour/read_model.rb +29 -0
- data/lib/hecks/bluebook/behaviour/traits.rb +81 -0
- data/lib/hecks/bluebook/behaviour/value_object.rb +33 -0
- data/lib/hecks/bluebook/chapter.rb +78 -0
- data/lib/hecks/bluebook/command.rb +124 -0
- data/lib/hecks/bluebook/domain_port.rb +102 -0
- data/lib/hecks/bluebook/dsl/adapter_builder.rb +34 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder.rb +1018 -0
- data/lib/hecks/bluebook/dsl/attribute_collector.rb +348 -0
- data/lib/hecks/bluebook/dsl/binding_proxy.rb +71 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +1087 -0
- data/lib/hecks/bluebook/dsl/command_builder.rb +714 -0
- data/lib/hecks/bluebook/dsl/const_shim.rb +81 -0
- data/lib/hecks/bluebook/dsl/domain_port_builder.rb +79 -0
- data/lib/hecks/bluebook/dsl/entity_builder.rb +430 -0
- data/lib/hecks/bluebook/dsl/generic_dispatch.rb +366 -0
- data/lib/hecks/bluebook/dsl/hecksagon_builder.rb +163 -0
- data/lib/hecks/bluebook/dsl/identity_declaration.rb +191 -0
- data/lib/hecks/bluebook/dsl/lifecycle_builder.rb +44 -0
- data/lib/hecks/bluebook/dsl/malformed.rb +7 -0
- data/lib/hecks/bluebook/dsl/policy_builder.rb +135 -0
- data/lib/hecks/bluebook/dsl/port_builder.rb +39 -0
- data/lib/hecks/bluebook/dsl/port_operation_builder.rb +142 -0
- data/lib/hecks/bluebook/dsl/process_manager_builder.rb +306 -0
- data/lib/hecks/bluebook/dsl/query_builder.rb +113 -0
- data/lib/hecks/bluebook/dsl/read_model_builder.rb +233 -0
- data/lib/hecks/bluebook/dsl/rule_reference.rb +173 -0
- data/lib/hecks/bluebook/dsl/translation_builder.rb +243 -0
- data/lib/hecks/bluebook/dsl/value_object_builder.rb +178 -0
- data/lib/hecks/bluebook/dsl/word_gate.rb +228 -0
- data/lib/hecks/bluebook/dsl/world_builder.rb +117 -0
- data/lib/hecks/bluebook/dsl.rb +45 -0
- data/lib/hecks/bluebook/entity.rb +103 -0
- data/lib/hecks/bluebook/expression/canonical_form.rb +123 -0
- data/lib/hecks/bluebook/expression/evaluator.rb +304 -0
- data/lib/hecks/bluebook/expression/projection.json +218 -0
- data/lib/hecks/bluebook/expression/resolver/block_predicates.rb +233 -0
- data/lib/hecks/bluebook/expression/resolver.rb +781 -0
- data/lib/hecks/bluebook/expression.rb +13 -0
- data/lib/hecks/bluebook/hexagon.rb +60 -0
- data/lib/hecks/bluebook/lifecycle.rb +42 -0
- data/lib/hecks/bluebook/meta_validator/adapter_judge.rb +54 -0
- data/lib/hecks/bluebook/meta_validator/judge.rb +621 -0
- data/lib/hecks/bluebook/meta_validator/plan.rb +332 -0
- data/lib/hecks/bluebook/meta_validator/port_judge.rb +51 -0
- data/lib/hecks/bluebook/meta_validator/readings.rb +360 -0
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +351 -0
- data/lib/hecks/bluebook/meta_validator/shapes.rb +266 -0
- data/lib/hecks/bluebook/meta_validator/syntax_boot.rb +255 -0
- data/lib/hecks/bluebook/meta_validator/translation_judge.rb +138 -0
- data/lib/hecks/bluebook/meta_validator/world_judge.rb +78 -0
- data/lib/hecks/bluebook/meta_validator.rb +542 -0
- data/lib/hecks/bluebook/model_check.rb +445 -0
- data/lib/hecks/bluebook/pattern_subset.rb +184 -0
- data/lib/hecks/bluebook/policy.rb +41 -0
- data/lib/hecks/bluebook/process_manager.rb +128 -0
- data/lib/hecks/bluebook/project_discovery.rb +30 -0
- data/lib/hecks/bluebook/project_loader.rb +40 -0
- data/lib/hecks/bluebook/project_register.rb +82 -0
- data/lib/hecks/bluebook/query.rb +61 -0
- data/lib/hecks/bluebook/read_model.rb +109 -0
- data/lib/hecks/bluebook/reference.rb +74 -0
- data/lib/hecks/bluebook/smoke_test.rb +166 -0
- data/lib/hecks/bluebook/synthesizer.rb +95 -0
- data/lib/hecks/bluebook/translation.rb +92 -0
- data/lib/hecks/bluebook/value_object.rb +66 -0
- data/lib/hecks/bluebook.rb +74 -0
- data/lib/hecks/codemod.rb +342 -0
- data/lib/hecks/construct.rb +71 -0
- data/lib/hecks/deploy/bluebook/deploy.bluebook +219 -0
- data/lib/hecks/deploy/bluebook/deploy.hecksagon +4 -0
- data/lib/hecks/deploy/oidc.json +18 -0
- data/lib/hecks/doc/reference.rb +410 -0
- data/lib/hecks/embryonaut_bluebook.rb +75 -0
- data/lib/hecks/facade/cli_door.rb +119 -0
- data/lib/hecks/facade/cli_runner.rb +190 -0
- data/lib/hecks/facade/command_request.rb +105 -0
- data/lib/hecks/facade/handle.rb +173 -0
- data/lib/hecks/facade/json_door.rb +166 -0
- data/lib/hecks/facade/surface/aggregate_door.rb +185 -0
- data/lib/hecks/facade/surface/chapter.rb +107 -0
- data/lib/hecks/facade/surface.rb +48 -0
- data/lib/hecks/facade.rb +44 -0
- data/lib/hecks/forms/app.rb +341 -0
- data/lib/hecks/forms/command_form_renderer.rb +113 -0
- data/lib/hecks/forms/examples/banking_console.bluebook +3 -0
- data/lib/hecks/forms/field_renderer.rb +177 -0
- data/lib/hecks/forms/field_shape.rb +232 -0
- data/lib/hecks/forms/html.rb +84 -0
- data/lib/hecks/forms/index_renderer.rb +35 -0
- data/lib/hecks/forms/page.rb +157 -0
- data/lib/hecks/forms/params.rb +161 -0
- data/lib/hecks/forms/port_argument.rb +46 -0
- data/lib/hecks/forms/query_form_renderer.rb +114 -0
- data/lib/hecks/forms/record_renderer.rb +119 -0
- data/lib/hecks/forms/record_table.rb +68 -0
- data/lib/hecks/forms/reference_options.rb +30 -0
- data/lib/hecks/forms/value_object_shape.rb +46 -0
- data/lib/hecks/forms.rb +54 -0
- data/lib/hecks/fqn.rb +94 -0
- data/lib/hecks/framework/bluebook/compliance.bluebook +1 -0
- data/lib/hecks/framework/bluebook/console_settings.bluebook +489 -0
- data/lib/hecks/framework/bluebook/framework.hecksagon +32 -0
- data/lib/hecks/framework/bluebook/governance.bluebook +145 -0
- data/lib/hecks/framework/bluebook/identity.bluebook +90 -0
- data/lib/hecks/framework/oidc.json +39 -0
- data/lib/hecks/framework.rb +90 -0
- data/lib/hecks/freezer.rb +67 -0
- data/lib/hecks/fuzzing/bounded_exhaustive_expressions.rb +527 -0
- data/lib/hecks/fuzzing/invalid_value_generator.rb +86 -0
- data/lib/hecks/fuzzing/isolated_boot.rb +286 -0
- data/lib/hecks/fuzzing/properties.rb +1192 -0
- data/lib/hecks/fuzzing/replay.rb +668 -0
- data/lib/hecks/fuzzing/sequence_generator/catalog.rb +93 -0
- data/lib/hecks/fuzzing/sequence_generator/outcome_tracker.rb +80 -0
- data/lib/hecks/fuzzing/sequence_generator/picker.rb +96 -0
- data/lib/hecks/fuzzing/sequence_generator/step_builder.rb +250 -0
- data/lib/hecks/fuzzing/sequence_generator.rb +131 -0
- data/lib/hecks/fuzzing/value_generator.rb +200 -0
- data/lib/hecks/fuzzing.rb +12 -0
- data/lib/hecks/grammar/evolve.rb +324 -0
- data/lib/hecks/grammar/expression.bluebook +420 -0
- data/lib/hecks/grammar/expression_operators.json +1648 -0
- data/lib/hecks/grammar/grammar.hecksagon +20 -0
- data/lib/hecks/grammar/oidc.json +69 -0
- data/lib/hecks/grammar/translation.bluebook +203 -0
- data/lib/hecks/grammar.rb +178 -0
- data/lib/hecks/ir.rb +126 -0
- data/lib/hecks/language/adapter.bluebook +116 -0
- data/lib/hecks/language/bluebook/aggregate.bluebook +581 -0
- data/lib/hecks/language/bluebook/attaches/paging.bluebook +76 -0
- data/lib/hecks/language/bluebook/bluebook.bluebook +256 -0
- data/lib/hecks/language/bluebook/bluebook.hecksagon +24 -0
- data/lib/hecks/language/bluebook/command.bluebook +471 -0
- data/lib/hecks/language/bluebook/entity.bluebook +392 -0
- data/lib/hecks/language/bluebook/policy.bluebook +189 -0
- data/lib/hecks/language/bluebook/process_manager.bluebook +381 -0
- data/lib/hecks/language/bluebook/projection.bluebook +267 -0
- data/lib/hecks/language/bluebook/query.bluebook +245 -0
- data/lib/hecks/language/bluebook/shape.bluebook +292 -0
- data/lib/hecks/language/bluebook/syntax.bluebook +448 -0
- data/lib/hecks/language/bluebook/vocabulary.bluebook +379 -0
- data/lib/hecks/language/hecksagon/adapter_binding.bluebook +51 -0
- data/lib/hecks/language/hecksagon/domain_port.bluebook +76 -0
- data/lib/hecks/language/hecksagon/hecksagon.bluebook +131 -0
- data/lib/hecks/language/hecksagon/port_operation.bluebook +102 -0
- data/lib/hecks/language/oidc.json +333 -0
- data/lib/hecks/language/port.bluebook +120 -0
- data/lib/hecks/language/translation/translation.bluebook +110 -0
- data/lib/hecks/language/translation/translation_aggregate.bluebook +267 -0
- data/lib/hecks/language/world/wiring.bluebook +62 -0
- data/lib/hecks/language/world/world.bluebook +84 -0
- data/lib/hecks/literal.rb +125 -0
- data/lib/hecks/naming.rb +174 -0
- data/lib/hecks/ports/access_control.port +9 -0
- data/lib/hecks/ports/access_control.rb +62 -0
- data/lib/hecks/ports/agent/answers.rb +104 -0
- data/lib/hecks/ports/agent.port +8 -0
- data/lib/hecks/ports/agent.rb +167 -0
- data/lib/hecks/ports/authentication.port +6 -0
- data/lib/hecks/ports/authentication.rb +50 -0
- data/lib/hecks/ports/authorization.port +7 -0
- data/lib/hecks/ports/authorization.rb +62 -0
- data/lib/hecks/ports/clock.port +5 -0
- data/lib/hecks/ports/clock.rb +62 -0
- data/lib/hecks/ports/extraction.port +5 -0
- data/lib/hecks/ports/extraction.rb +37 -0
- data/lib/hecks/ports/identity_assignment.port +5 -0
- data/lib/hecks/ports/identity_assignment.rb +45 -0
- data/lib/hecks/ports/identity_generation.port +5 -0
- data/lib/hecks/ports/identity_generation.rb +49 -0
- data/lib/hecks/ports/identity_resolution.port +5 -0
- data/lib/hecks/ports/identity_resolution.rb +40 -0
- data/lib/hecks/ports/loading.port +4 -0
- data/lib/hecks/ports/loading.rb +13 -0
- data/lib/hecks/ports/persistence/append_only.rb +138 -0
- data/lib/hecks/ports/persistence/binding_policy.rb +56 -0
- data/lib/hecks/ports/persistence/execution.rb +23 -0
- data/lib/hecks/ports/persistence/null_saga_store.rb +25 -0
- data/lib/hecks/ports/persistence/plugin.rb +54 -0
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +169 -0
- data/lib/hecks/ports/persistence/plugins/era/era_guard/shape_diff.rb +128 -0
- data/lib/hecks/ports/persistence/plugins/era/era_guard.rb +161 -0
- data/lib/hecks/ports/persistence/plugins/era/era_tamper.rb +61 -0
- data/lib/hecks/ports/persistence/plugins/era/lineage.rb +304 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/era_store.rb +171 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/field_cache.rb +190 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/head_compiler.rb +478 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/mint_transaction.rb +166 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/provisioning.rb +314 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/resumable_backfill.rb +168 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/tail_merge.rb +170 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/transform_installer.rb +134 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage.rb +137 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/coverage_check.rb +89 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/era_resolver.rb +85 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/merge_coordinator.rb +43 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/minter.rb +132 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager.rb +74 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era.rb +758 -0
- data/lib/hecks/ports/persistence/plugins/era/storage_shape.rb +120 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/approval_digest.rb +31 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_one.rb +46 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_two.rb +102 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/unfed_report.rb +46 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/audit.rb +70 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/reattest.rb +72 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/rule_compiler.rb +120 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/differ.rb +183 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/renderer.rb +41 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/writer.rb +28 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold.rb +30 -0
- data/lib/hecks/ports/persistence/plugins/era/translation.rb +11 -0
- data/lib/hecks/ports/persistence/plugins/era.rb +48 -0
- data/lib/hecks/ports/persistence/remote_runtime.rb +42 -0
- data/lib/hecks/ports/persistence/repository_factory.rb +30 -0
- data/lib/hecks/ports/persistence.port +4 -0
- data/lib/hecks/ports/persistence.rb +39 -0
- data/lib/hecks/ports/projection.port +4 -0
- data/lib/hecks/ports/projection.rb +96 -0
- data/lib/hecks/ports/query/in_memory.rb +60 -0
- data/lib/hecks/ports/query/ordering.rb +41 -0
- data/lib/hecks/ports/query.rb +36 -0
- data/lib/hecks/ports.rb +27 -0
- data/lib/hecks/projections/diagrams.rb +642 -0
- data/lib/hecks/projections/ir.rb +18 -0
- data/lib/hecks/projections/model/deviations.rb +98 -0
- data/lib/hecks/projections/model.rb +145 -0
- data/lib/hecks/projections/oidc.rb +110 -0
- data/lib/hecks/projections/parser_table.rb +159 -0
- data/lib/hecks/projections/reference.rb +38 -0
- data/lib/hecks/projections/shape.rb +44 -0
- data/lib/hecks/projections/statements.rb +110 -0
- data/lib/hecks/projections/vocabulary.rb +100 -0
- data/lib/hecks/projections.rb +32 -0
- data/lib/hecks/projector/cli_projector.rb +446 -0
- data/lib/hecks/projector/docs_projector.rb +321 -0
- data/lib/hecks/projector/exporter.rb +158 -0
- data/lib/hecks/projector/ir_projector.rb +18 -0
- data/lib/hecks/projector/narrate_projector.rb +243 -0
- data/lib/hecks/projector/target.rb +97 -0
- data/lib/hecks/projector.rb +186 -0
- data/lib/hecks/query_ir.rb +411 -0
- data/lib/hecks/query_specification/common/authorization_spec.rb +9 -0
- data/lib/hecks/query_specification/common/comparators.rb +25 -0
- data/lib/hecks/query_specification/common/comparison.rb +174 -0
- data/lib/hecks/query_specification/common/cursor_spec.rb +9 -0
- data/lib/hecks/query_specification/common/dsl.rb +58 -0
- data/lib/hecks/query_specification/common/inspection_spec.rb +9 -0
- data/lib/hecks/query_specification/common/limit_spec.rb +9 -0
- data/lib/hecks/query_specification/common/null_policy.rb +92 -0
- data/lib/hecks/query_specification/common/null_semantics.rb +11 -0
- data/lib/hecks/query_specification/common/offset_spec.rb +9 -0
- data/lib/hecks/query_specification/common/options.rb +32 -0
- data/lib/hecks/query_specification/common/order_by.rb +9 -0
- data/lib/hecks/query_specification/common/specification.rb +10 -0
- data/lib/hecks/query_specification/common/where_clause.rb +9 -0
- data/lib/hecks/query_specification/field_path.rb +107 -0
- data/lib/hecks/query_specification/hop_path.rb +132 -0
- data/lib/hecks/query_specification/read_model/specification.rb +18 -0
- data/lib/hecks/query_specification.rb +14 -0
- data/lib/hecks/rendering.rb +48 -0
- data/lib/hecks/router/namespace_installer.rb +157 -0
- data/lib/hecks/router.rb +70 -0
- data/lib/hecks/runtime/aggregate_lock.rb +45 -0
- data/lib/hecks/runtime/boot_gates.rb +41 -0
- data/lib/hecks/runtime/caller.rb +66 -0
- data/lib/hecks/runtime/capability_graph.rb +44 -0
- data/lib/hecks/runtime/command_interpreter/argument_gate.rb +135 -0
- data/lib/hecks/runtime/command_interpreter/mutation_applier.rb +260 -0
- data/lib/hecks/runtime/command_interpreter.rb +497 -0
- data/lib/hecks/runtime/command_rules/admissibility.rb +357 -0
- data/lib/hecks/runtime/command_rules/arithmetic.rb +260 -0
- data/lib/hecks/runtime/command_rules/authorization.rb +65 -0
- data/lib/hecks/runtime/command_rules/emission.rb +34 -0
- data/lib/hecks/runtime/command_rules/references.rb +189 -0
- data/lib/hecks/runtime/command_rules.rb +28 -0
- data/lib/hecks/runtime/dependency_planning.rb +245 -0
- data/lib/hecks/runtime/dispatcher.rb +301 -0
- data/lib/hecks/runtime/entity_element.rb +253 -0
- data/lib/hecks/runtime/entity_interpreter.rb +299 -0
- data/lib/hecks/runtime/errors.rb +122 -0
- data/lib/hecks/runtime/event.rb +51 -0
- data/lib/hecks/runtime/identity.rb +156 -0
- data/lib/hecks/runtime/instance.rb +175 -0
- data/lib/hecks/runtime/interpreting.rb +90 -0
- data/lib/hecks/runtime/loader.rb +184 -0
- data/lib/hecks/runtime/policy_interpreter.rb +366 -0
- data/lib/hecks/runtime/port_operation_interpreter.rb +210 -0
- data/lib/hecks/runtime/query_interpreter.rb +286 -0
- data/lib/hecks/runtime/reaction_invocation.rb +253 -0
- data/lib/hecks/runtime/read_model_interpreter.rb +341 -0
- data/lib/hecks/runtime/rebuild_sweep.rb +74 -0
- data/lib/hecks/runtime/reference_hop.rb +99 -0
- data/lib/hecks/runtime/refusal_wording.rb +126 -0
- data/lib/hecks/runtime/registry/saga_persistence.rb +142 -0
- data/lib/hecks/runtime/registry/verification.rb +246 -0
- data/lib/hecks/runtime/registry.rb +279 -0
- data/lib/hecks/runtime/remote_dispatcher.rb +143 -0
- data/lib/hecks/runtime/routing.rb +96 -0
- data/lib/hecks/runtime/saga_interpreter/correlation.rb +97 -0
- data/lib/hecks/runtime/saga_interpreter.rb +503 -0
- data/lib/hecks/runtime/saga_pending_dispatch.rb +45 -0
- data/lib/hecks/runtime/tenant_check.rb +84 -0
- data/lib/hecks/runtime/tenant_scope.rb +55 -0
- data/lib/hecks/runtime/value/admission.rb +130 -0
- data/lib/hecks/runtime/value/coercion.rb +565 -0
- data/lib/hecks/runtime/value/invariant_violation.rb +5 -0
- data/lib/hecks/runtime/value.rb +125 -0
- data/lib/hecks/runtime.rb +107 -0
- data/lib/hecks/storehouse.rb +632 -0
- data/lib/hecks/version.rb +16 -0
- data/lib/hecks/vocabulary.rb +218 -0
- data/lib/hecks.rb +123 -6
- data/lib/rubocop/cop/hecks/fallback_hash_lookup.rb +90 -0
- data/lib/rubocop/cop/hecks/sequential_hash_rename_in_loop.rb +128 -0
- data/lib/rubocop/cop/hecks/thread_shared_ivar_mutation.rb +160 -0
- metadata +412 -222
- data/bin/hecks +0 -7
- data/bin/hecks-package +0 -65
- data/bin/hecks_console +0 -12
- data/bin/hecks_serverless +0 -6
- data/lib/cli/build.rb +0 -14
- data/lib/cli/command_runner.rb +0 -28
- data/lib/cli/console.rb +0 -10
- data/lib/cli/generate.rb +0 -37
- data/lib/cli/hecks-cli.rb +0 -27
- data/lib/cli/test.rb +0 -57
- data/lib/console/commands.rb +0 -8
- data/lib/console/hecks-console.rb +0 -1
- data/lib/packager/README.md +0 -0
- data/lib/packager/app_runner.rb +0 -21
- data/lib/packager/args.rb +0 -26
- data/lib/packager/compatibility/fixnum.rb +0 -6
- data/lib/packager/hecks.rb +0 -39
- data/lib/packager/query_runner.rb +0 -21
- data/lib/packager/resources/Dockerfile +0 -11
- data/lib/packager/resources/app_binary +0 -7
- data/lib/packager/resources/bundle_config +0 -3
- data/lib/packager/resources/traveling-ruby-20150715-2.2.2-linux-x86_64.tar.gz +0 -0
- data/lib/packager/resources/traveling-ruby-20150715-2.2.2-osx.tar.gz +0 -0
- data/lib/serverless/Domain +0 -32
- data/lib/serverless/cli.rb +0 -75
- data/lib/serverless/resources/command_name.js +0 -5
- data/lib/serverless/resources/environment.js +0 -7
- data/lib/serverless/resources/handler.js.tt +0 -28
- data/lib/serverless/resources/run_binary.js +0 -22
- data/lib/serverless/resources/serverless.yml +0 -20
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
# HAND-WRITTEN — the block-predicate/find family of the leaf grammar
|
|
2
|
+
# (`Bluebook::Expression::Resolver`'s own `.all?`/`.any?`/`.none?`/
|
|
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".
|
|
12
|
+
module Hecks
|
|
13
|
+
module Bluebook
|
|
14
|
+
module Expression
|
|
15
|
+
module Resolver
|
|
16
|
+
# `receiver.all? { |x| PREDICATE }` / `.any? { ... }` / `.none? {
|
|
17
|
+
# ... }` -- vendored addition, not (yet) upstream hecks
|
|
18
|
+
# (migration plan task 9), completing the same `Phrase`
|
|
19
|
+
# four-segment invariant the `Split` node above was built for
|
|
20
|
+
# (`value.split("::").all? { |s| s.length > 0 }`). Structurally
|
|
21
|
+
# different from every other addition in this file: every prior
|
|
22
|
+
# suffix is a flat receiver -> scalar transform, but a block
|
|
23
|
+
# predicate needs to evaluate its own sub-expression ONCE PER
|
|
24
|
+
# ELEMENT with the block parameter bound to that element. Kept
|
|
25
|
+
# minimal per the migration plan's own instruction -- no
|
|
26
|
+
# persistent iteration-variable concept added to Resolver's
|
|
27
|
+
# state model at all ; `predicate` below is a fully-parsed
|
|
28
|
+
# EVALUATOR ast (not a Resolver ast -- the predicate is a
|
|
29
|
+
# boolean/comparison expression like `s.length > 0`, exactly the
|
|
30
|
+
# grammar `Bluebook::Expression::Evaluator` owns, not this
|
|
31
|
+
# module's own leaf grammar), parsed once at `parse`-time same as
|
|
32
|
+
# every sibling node's sub-expressions are. `mode` distinguishes
|
|
33
|
+
# all?/any?/none? without three duplicated node types, since
|
|
34
|
+
# their only difference is which Array predicate aggregates the
|
|
35
|
+
# per-element results (interpret_with_element, below, is the
|
|
36
|
+
# "smallest correct thing" the plan asked for -- it threads the
|
|
37
|
+
# element binding through a temporarily-extended `attrs` hash for
|
|
38
|
+
# that one predicate's evaluation only, never touching
|
|
39
|
+
# `interpret`'s own signature or any other node's call sites).
|
|
40
|
+
# `Resolver` already calls into `Evaluator` elsewhere in this
|
|
41
|
+
# file (`sign_test_node`/`apply_sign_test` call `Evaluator.
|
|
42
|
+
# apply`/`Evaluator::OPERATORS` directly) -- this is the same
|
|
43
|
+
# precedented cross-reference, not a new coupling.
|
|
44
|
+
BlockPredicate = Struct.new(:mode, :receiver, :param, :predicate, keyword_init: true)
|
|
45
|
+
|
|
46
|
+
# Which Array method each block-predicate suffix maps to, and
|
|
47
|
+
# which Ruby Enumerable method decides the aggregate result --
|
|
48
|
+
# declared as data, not a three-way `case`, the same shape
|
|
49
|
+
# SIGN_TEST_OPERATORS above already uses for its own suffix
|
|
50
|
+
# family.
|
|
51
|
+
BLOCK_PREDICATE_MODES = {
|
|
52
|
+
"all?" => :all,
|
|
53
|
+
"any?" => :any,
|
|
54
|
+
"none?" => :none
|
|
55
|
+
}.freeze
|
|
56
|
+
|
|
57
|
+
# `receiver.find { |x| PREDICATE }` / `.find { ... }.a.b` -- the
|
|
58
|
+
# "find-then-project" shape the shipping domain's re-routing
|
|
59
|
+
# rules kept reaching for by hand (a caller-precomputed
|
|
60
|
+
# `next_load_location` field standing in for "the leg after this
|
|
61
|
+
# one", because `BlockPredicate` above can only answer yes/no,
|
|
62
|
+
# never hand back the element it found). `path` holds the
|
|
63
|
+
# dotted segments walked past the closing `}`, e.g. the `["
|
|
64
|
+
# next_load_location"]` in `legs.find { |l| l.load_location ==
|
|
65
|
+
# x }.next_load_location` -- empty when `.find { ... }` is used
|
|
66
|
+
# bare (its own found-element-or-nil is the value, same as any
|
|
67
|
+
# other leaf, e.g. composed with `.present?` the same way every
|
|
68
|
+
# other receiver already composes with it). Reuses `param`/
|
|
69
|
+
# `predicate`'s exact field names from `BlockPredicate` on
|
|
70
|
+
# purpose: `interpret_with_element` below binds by those two
|
|
71
|
+
# names and is shared unchanged between both node types.
|
|
72
|
+
Find = Struct.new(:receiver, :param, :predicate, :path, keyword_init: true)
|
|
73
|
+
|
|
74
|
+
module_function
|
|
75
|
+
|
|
76
|
+
# Every suffix that opens a `{ |x| ... }` block, `.find` included
|
|
77
|
+
# -- shared by `parse_block_opener` below, and by nothing else
|
|
78
|
+
# (this is NOT `BLOCK_PREDICATE_MODES` — `.find` isn't a mode
|
|
79
|
+
# `evaluate_block_predicate` aggregates through, it builds a
|
|
80
|
+
# `Find` node instead, see below).
|
|
81
|
+
BLOCK_OPENER_SUFFIXES = (BLOCK_PREDICATE_MODES.keys + ["find"]).freeze
|
|
82
|
+
|
|
83
|
+
# `.all?`/`.any?`/`.none?`/`.find` -- vendored addition, see the
|
|
84
|
+
# `BlockPredicate`/`Find` structs' own comments above. Matched
|
|
85
|
+
# last among the suffix rules (right before the `Lookup`
|
|
86
|
+
# catch-all) since a block's own predicate text can itself
|
|
87
|
+
# contain almost anything a leaf expression can, including
|
|
88
|
+
# ANOTHER block-opening suffix -- letting every more specific
|
|
89
|
+
# rule above try first avoids this one accidentally swallowing a
|
|
90
|
+
# receiver another rule was meant to parse.
|
|
91
|
+
#
|
|
92
|
+
# ONE combined header regex over ALL FOUR suffixes together,
|
|
93
|
+
# not `.find` and `.all?/any?/none?` scanned separately (that
|
|
94
|
+
# was this file's own first cut, and it broke the moment a
|
|
95
|
+
# block predicate's own predicate text contained a DIFFERENT
|
|
96
|
+
# kind of block-opener than the one being scanned for --
|
|
97
|
+
# `legs.any? { |leg| ... legs.find { |o| ... } ... }` : scanning
|
|
98
|
+
# for `.find` FIRST found the INNER `.find`, not the outer
|
|
99
|
+
# `.any?`, because a non-greedy receiver capture only guarantees
|
|
100
|
+
# the FIRST occurrence of ITS OWN suffix, not the first
|
|
101
|
+
# occurrence of ANY block-opening suffix -- confirmed live via
|
|
102
|
+
# the shipping domain's own re-routing rules, the same
|
|
103
|
+
# "no implicit conversion of Symbol into Integer" signature the
|
|
104
|
+
# original nested-`.any?` bug had, not inferred). Scanning for
|
|
105
|
+
# all four AT ONCE and letting the regex engine's own leftmost
|
|
106
|
+
# match win fixes both directions (`.find` nested in `.any?` OR
|
|
107
|
+
# `.any?` nested in `.find`) with the SAME one rule, since the
|
|
108
|
+
# true receiver never itself contains ANY of these four words
|
|
109
|
+
# followed by `{`.
|
|
110
|
+
#
|
|
111
|
+
# `matching_brace` walks forward counting `{`/`}` depth from
|
|
112
|
+
# there, the same quote-aware, depth-aware discipline
|
|
113
|
+
# `split_addition`/`array_elements` already apply, so a `}`
|
|
114
|
+
# inside a nested block (or a quoted `start_with?` substring)
|
|
115
|
+
# never miscounts. `.find`'s own trailing dotted path (`path`)
|
|
116
|
+
# is captured from whatever follows the closing brace ; every
|
|
117
|
+
# other suffix instead requires nothing follow it at all (the
|
|
118
|
+
# `BlockPredicate` shape, unchanged from before this rewrite).
|
|
119
|
+
def parse_block_opener(expr)
|
|
120
|
+
pattern = /\A(.+?)\.(#{BLOCK_OPENER_SUFFIXES.map { |suffix| Regexp.escape(suffix) }.join('|')})\s*\{\s*\|(\w+)\|\s*/m
|
|
121
|
+
header = expr.match(pattern)
|
|
122
|
+
return nil unless header
|
|
123
|
+
|
|
124
|
+
receiver_text = header[1]
|
|
125
|
+
suffix = header[2]
|
|
126
|
+
param = header[3]
|
|
127
|
+
body_start = header.end(0)
|
|
128
|
+
body_end = matching_brace(expr, body_start)
|
|
129
|
+
return nil unless body_end
|
|
130
|
+
|
|
131
|
+
predicate = Evaluator.parse(expr[body_start...body_end].strip)
|
|
132
|
+
|
|
133
|
+
if suffix == "find"
|
|
134
|
+
trailing = expr[(body_end + 1)..].strip
|
|
135
|
+
return nil unless trailing.empty? || trailing.start_with?(".")
|
|
136
|
+
|
|
137
|
+
Find.new(receiver: parse(receiver_text), param: param, predicate: predicate,
|
|
138
|
+
path: trailing.empty? ? [] : trailing[1..].split("."))
|
|
139
|
+
else
|
|
140
|
+
return nil unless expr[(body_end + 1)..].strip.empty?
|
|
141
|
+
|
|
142
|
+
BlockPredicate.new(mode: BLOCK_PREDICATE_MODES.fetch(suffix), receiver: parse(receiver_text),
|
|
143
|
+
param: param, predicate: predicate)
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# The index of the `}` that closes the `{` implicitly opened
|
|
148
|
+
# just before `start` (the caller's own header match already
|
|
149
|
+
# consumed that opening brace, so depth begins at 1) -- nil if
|
|
150
|
+
# the string runs out before depth returns to 0 (a caller-error
|
|
151
|
+
# shape, not a valid expression). Quote-aware so a `}` inside a
|
|
152
|
+
# quoted substring (`.start_with?("}")`) never miscounts, the
|
|
153
|
+
# same discipline `split_addition`/`array_elements` already
|
|
154
|
+
# apply for their own depth tracking.
|
|
155
|
+
def matching_brace(expr, start)
|
|
156
|
+
depth = 1
|
|
157
|
+
quote = nil
|
|
158
|
+
index = start
|
|
159
|
+
while index < expr.length
|
|
160
|
+
char = expr[index]
|
|
161
|
+
if quote
|
|
162
|
+
quote = nil if char == quote
|
|
163
|
+
elsif ['"', "'"].include?(char)
|
|
164
|
+
quote = char
|
|
165
|
+
elsif char == "{"
|
|
166
|
+
depth += 1
|
|
167
|
+
elsif char == "}"
|
|
168
|
+
depth -= 1
|
|
169
|
+
return index if depth.zero?
|
|
170
|
+
end
|
|
171
|
+
index += 1
|
|
172
|
+
end
|
|
173
|
+
nil
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# `.all?`/`.any?`/`.none?` -- vendored addition, see the
|
|
177
|
+
# `BlockPredicate` struct's own comment above. `collection` is
|
|
178
|
+
# already-interpreted (a real Array, produced by whatever
|
|
179
|
+
# receiver expression came before it -- typically `Split`'s
|
|
180
|
+
# output), so this only has to run the per-element predicate and
|
|
181
|
+
# aggregate. `interpret_with_element` is the "smallest correct
|
|
182
|
+
# thing" the migration plan asked for : no persistent iteration-
|
|
183
|
+
# variable concept added anywhere else in Resolver's state model,
|
|
184
|
+
# just `attrs` extended with the bound name for the span of that
|
|
185
|
+
# one predicate evaluation, discarded immediately after.
|
|
186
|
+
def evaluate_block_predicate(node, collection, state, attrs)
|
|
187
|
+
unless collection.is_a?(Array)
|
|
188
|
+
raise EvaluationError, "#{node.mode}? expects a list, got #{describe(collection)}"
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
outcomes = collection.map { |element| interpret_with_element(node, element, state, attrs) }
|
|
192
|
+
|
|
193
|
+
case node.mode
|
|
194
|
+
when :all then outcomes.all?
|
|
195
|
+
when :any then outcomes.any?
|
|
196
|
+
when :none then outcomes.none?
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# Binds the block parameter for exactly one element's predicate
|
|
201
|
+
# evaluation -- `attrs` wins over `state` in `fetch` (see below),
|
|
202
|
+
# so the bound name shadows any same-named state/attrs field for
|
|
203
|
+
# the span of this one call only ; nothing persists past it.
|
|
204
|
+
def interpret_with_element(node, element, state, attrs)
|
|
205
|
+
Evaluator.interpret(node.predicate, state, attrs.merge(node.param.to_sym => element))
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
# `.find { |x| PREDICATE }` -- see the `Find` struct's own
|
|
209
|
+
# comment above. Reuses `interpret_with_element` unchanged
|
|
210
|
+
# (below, shared with `BlockPredicate` — both bind `node.param`
|
|
211
|
+
# to one element and interpret `node.predicate` against it) to
|
|
212
|
+
# find the FIRST element the predicate accepts, then projects
|
|
213
|
+
# `node.path` through it via `walk_path`, the same dotted-
|
|
214
|
+
# segment walk `lookup` uses for a plain attribute path. `nil`
|
|
215
|
+
# (no matching element, or a `path` segment that doesn't
|
|
216
|
+
# resolve) flows through rather than raising — the same "a
|
|
217
|
+
# dispatch-time given just refuses" shape every other missing-
|
|
218
|
+
# value case in this grammar already has, and the one a re-
|
|
219
|
+
# routing check like "is there a leg after this one" needs :
|
|
220
|
+
# not finding one is a normal outcome, not an error.
|
|
221
|
+
def found_of(node, collection, state, attrs)
|
|
222
|
+
raise EvaluationError, "find expects a list, got #{describe(collection)}" unless collection.is_a?(Array)
|
|
223
|
+
|
|
224
|
+
found = collection.find { |element| interpret_with_element(node, element, state, attrs) }
|
|
225
|
+
return unwrap_scalar(found) if node.path.empty?
|
|
226
|
+
return nil if found.nil?
|
|
227
|
+
|
|
228
|
+
unwrap_scalar(walk_path(found, node.path))
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
end
|