hecks 2.8.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/exe/hecks +50 -7
- data/lib/hecks/adapters/driven/claude_code.rb +4 -104
- data/lib/hecks/adapters/driven/d1.rb +44 -237
- data/lib/hecks/adapters/driven/folder.rb +17 -76
- data/lib/hecks/adapters/driven/google_authentication.rb +15 -49
- data/lib/hecks/adapters/driven/governance_authorization.rb +23 -70
- data/lib/hecks/adapters/driven/heki/journal.rb +8 -41
- data/lib/hecks/adapters/driven/heki/saga_store.rb +12 -54
- data/lib/hecks/adapters/driven/heki/snapshot.rb +4 -12
- data/lib/hecks/adapters/driven/heki.rb +13 -42
- data/lib/hecks/adapters/driven/identity_registry.rb +3 -14
- data/lib/hecks/adapters/driven/in_memory_ordering.rb +9 -26
- data/lib/hecks/adapters/driven/in_process_key_vault.rb +2 -14
- data/lib/hecks/adapters/driven/lambda/client.rb +10 -51
- data/lib/hecks/adapters/driven/lambda.rb +10 -84
- data/lib/hecks/adapters/driven/local_storage.rb +5 -40
- data/lib/hecks/adapters/driven/memory.rb +32 -100
- data/lib/hecks/adapters/driven/mock_stripe_adapter.rb +5 -21
- data/lib/hecks/adapters/driven/postgres/codec.rb +6 -28
- data/lib/hecks/adapters/driven/postgres/outbox.rb +3 -12
- data/lib/hecks/adapters/driven/postgres/reconnect.rb +10 -32
- data/lib/hecks/adapters/driven/postgres/schema_builder.rb +34 -108
- data/lib/hecks/adapters/driven/postgres/shared_connection.rb +180 -0
- data/lib/hecks/adapters/driven/postgres.rb +149 -136
- data/lib/hecks/adapters/driven/postgres_era.adapter +4 -15
- data/lib/hecks/adapters/driven/prism.rb +48 -38
- data/lib/hecks/adapters/driven/sql_query_builder.rb +21 -121
- data/lib/hecks/adapters/driven/sqlite/codec.rb +8 -40
- data/lib/hecks/adapters/driven/sqlite/projection.rb +26 -82
- data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +40 -84
- data/lib/hecks/adapters/driven/sqlite.rb +128 -65
- data/lib/hecks/adapters/driven/tenant_provisioner.rb +76 -62
- data/lib/hecks/adapters/driven.rb +5 -36
- data/lib/hecks/adapters/driving/github_webhook.rb +8 -76
- data/lib/hecks/behaviors/dsl.rb +7 -25
- data/lib/hecks/behaviors/expectations.rb +32 -142
- data/lib/hecks/behaviors/ir.rb +7 -20
- data/lib/hecks/behaviors/rspec.rb +6 -17
- data/lib/hecks/behaviors/runner.rb +10 -34
- data/lib/hecks/behaviors.rb +4 -8
- data/lib/hecks/bench/cli.rb +62 -0
- data/lib/hecks/bench/environment.rb +71 -0
- data/lib/hecks/bench/postgres_probe.rb +30 -0
- data/lib/hecks/bench/report.rb +76 -0
- data/lib/hecks/bench/ruby_runner.rb +93 -0
- data/lib/hecks/bench/run.rb +55 -0
- data/lib/hecks/bench/rust_runner.rb +101 -0
- data/lib/hecks/bench/stats.rb +46 -0
- data/lib/hecks/bench/suite.rb +98 -0
- data/lib/hecks/bench/workload.rb +89 -0
- data/lib/hecks/bench.rb +17 -0
- data/lib/hecks/bluebook/aggregate.rb +9 -75
- data/lib/hecks/bluebook/assembly/aggregate_assembly.rb +9 -38
- data/lib/hecks/bluebook/assembly/build.rb +4 -15
- data/lib/hecks/bluebook/assembly/contract.rb +15 -136
- data/lib/hecks/bluebook/assembly/contracts.rb +56 -174
- data/lib/hecks/bluebook/assembly/marks.rb +31 -223
- data/lib/hecks/bluebook/assembly/specializer.rb +6 -52
- data/lib/hecks/bluebook/assembly.rb +6 -45
- data/lib/hecks/bluebook/attribute.rb +12 -61
- data/lib/hecks/bluebook/behaviour/aggregate.rb +39 -39
- data/lib/hecks/bluebook/behaviour/attribute.rb +3 -14
- data/lib/hecks/bluebook/behaviour/chapter.rb +14 -42
- data/lib/hecks/bluebook/behaviour/command.rb +14 -66
- data/lib/hecks/bluebook/behaviour/domain_port.rb +11 -20
- data/lib/hecks/bluebook/behaviour/entity.rb +7 -27
- data/lib/hecks/bluebook/behaviour/hexagon.rb +23 -41
- data/lib/hecks/bluebook/behaviour/lifecycle.rb +15 -40
- data/lib/hecks/bluebook/behaviour/policy.rb +23 -52
- data/lib/hecks/bluebook/behaviour/process_manager.rb +30 -57
- data/lib/hecks/bluebook/behaviour/read_model.rb +25 -31
- data/lib/hecks/bluebook/behaviour/traits.rb +27 -64
- data/lib/hecks/bluebook/behaviour/value_object.rb +5 -24
- data/lib/hecks/bluebook/capabilities.rb +17 -49
- data/lib/hecks/bluebook/chapter.rb +16 -50
- data/lib/hecks/bluebook/command.rb +23 -81
- data/lib/hecks/bluebook/domain_port.rb +49 -67
- data/lib/hecks/bluebook/dsl/aggregate_builder/sealing.rb +50 -229
- data/lib/hecks/bluebook/dsl/aggregate_builder.rb +50 -377
- data/lib/hecks/bluebook/dsl/attribute_collector.rb +33 -204
- data/lib/hecks/bluebook/dsl/binding_proxy.rb +16 -69
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation.rb +96 -708
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +63 -169
- data/lib/hecks/bluebook/dsl/bootstrap_table.rb +3 -1
- data/lib/hecks/bluebook/dsl/command_builder.rb +74 -546
- data/lib/hecks/bluebook/dsl/const_shim.rb +8 -41
- data/lib/hecks/bluebook/dsl/domain_port_builder.rb +42 -89
- data/lib/hecks/bluebook/dsl/entity_builder.rb +44 -330
- data/lib/hecks/bluebook/dsl/generic_dispatch.rb +20 -269
- data/lib/hecks/bluebook/dsl/hecksagon_builder.rb +148 -197
- data/lib/hecks/bluebook/dsl/identity_declaration.rb +13 -88
- data/lib/hecks/bluebook/dsl/lifecycle_builder.rb +6 -20
- data/lib/hecks/bluebook/dsl/policy_builder.rb +16 -88
- data/lib/hecks/bluebook/dsl/port_builder.rb +2 -6
- data/lib/hecks/bluebook/dsl/port_operation_builder.rb +22 -96
- data/lib/hecks/bluebook/dsl/process_manager_builder.rb +31 -184
- data/lib/hecks/bluebook/dsl/query_builder.rb +38 -43
- data/lib/hecks/bluebook/dsl/read_model_builder.rb +75 -201
- data/lib/hecks/bluebook/dsl/rule_reference.rb +22 -163
- data/lib/hecks/bluebook/dsl/translation_builder.rb +28 -114
- data/lib/hecks/bluebook/dsl/value_object_builder.rb +10 -124
- data/lib/hecks/bluebook/dsl/word_gate.rb +16 -162
- data/lib/hecks/bluebook/dsl/world_builder.rb +46 -111
- data/lib/hecks/bluebook/entity.rb +13 -71
- data/lib/hecks/bluebook/expression/ast_json.rb +24 -190
- data/lib/hecks/bluebook/expression/ast_reader.rb +12 -54
- data/lib/hecks/bluebook/expression/canonical_form.rb +11 -88
- data/lib/hecks/bluebook/expression/evaluator.rb +47 -295
- data/lib/hecks/bluebook/expression/resolver/block_predicates.rb +30 -147
- data/lib/hecks/bluebook/expression/resolver.rb +39 -661
- data/lib/hecks/bluebook/hexagon.rb +18 -33
- data/lib/hecks/bluebook/lifecycle.rb +5 -16
- data/lib/hecks/bluebook/meta_validator/adapter_judge.rb +1 -7
- data/lib/hecks/bluebook/meta_validator/judge.rb +111 -361
- data/lib/hecks/bluebook/meta_validator/plan.rb +33 -162
- data/lib/hecks/bluebook/meta_validator/port_judge.rb +2 -7
- data/lib/hecks/bluebook/meta_validator/readings.rb +56 -342
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +25 -176
- data/lib/hecks/bluebook/meta_validator/shapes.rb +53 -267
- data/lib/hecks/bluebook/meta_validator/syntax_boot.rb +47 -306
- data/lib/hecks/bluebook/meta_validator/translation_judge.rb +7 -43
- data/lib/hecks/bluebook/meta_validator/verdict_cache.rb +246 -0
- data/lib/hecks/bluebook/meta_validator/world_judge.rb +6 -18
- data/lib/hecks/bluebook/meta_validator.rb +87 -352
- data/lib/hecks/bluebook/model_check/client_profile.rb +6 -21
- data/lib/hecks/bluebook/model_check.rb +122 -596
- data/lib/hecks/bluebook/pattern_subset.rb +49 -69
- data/lib/hecks/bluebook/process_manager.rb +13 -83
- data/lib/hecks/bluebook/project_loader.rb +3 -39
- data/lib/hecks/bluebook/project_register.rb +12 -60
- data/lib/hecks/bluebook/query.rb +27 -51
- data/lib/hecks/bluebook/read_model.rb +57 -81
- data/lib/hecks/bluebook/reference.rb +7 -41
- data/lib/hecks/bluebook/smoke_test.rb +9 -99
- data/lib/hecks/bluebook/synthesizer.rb +13 -62
- data/lib/hecks/bluebook/translation.rb +26 -62
- data/lib/hecks/bluebook/value_object.rb +11 -36
- data/lib/hecks/bluebook.rb +5 -22
- data/lib/hecks/cache_dir.rb +4 -23
- data/lib/hecks/canonical_json.rb +30 -0
- data/lib/hecks/chapters.rb +102 -0
- data/lib/hecks/cli/behaviors.rb +61 -0
- data/lib/hecks/cli/canonicalise.rb +25 -0
- data/lib/hecks/cli/check_engine_agreement.rb +32 -0
- data/lib/hecks/cli/check_era.rb +88 -0
- data/lib/hecks/cli/console.rb +66 -0
- data/lib/hecks/cli/deploy_template_diff.rb +40 -0
- data/lib/hecks/cli/doc_coverage.rb +32 -0
- data/lib/hecks/cli/document.rb +5 -23
- data/lib/hecks/cli/expression_projection.rb +41 -0
- data/lib/hecks/cli/follow.rb +88 -0
- data/lib/hecks/cli/history.rb +44 -0
- data/lib/hecks/cli/ir.rb +4 -6
- data/lib/hecks/cli/mcp.rb +5 -6
- data/lib/hecks/cli/model_check.rb +24 -88
- data/lib/hecks/cli/pattern_cases.rb +47 -0
- data/lib/hecks/cli/present.rb +39 -0
- data/lib/hecks/cli/project_cli.rb +223 -64
- data/lib/hecks/cli/project_diagrams.rb +4 -10
- data/lib/hecks/cli/project_glossary.rb +44 -0
- data/lib/hecks/cli/reference.rb +46 -0
- data/lib/hecks/cli/refresh_projections.rb +44 -0
- data/lib/hecks/cli/refresh_rspec_runtime_baseline.rb +150 -0
- data/lib/hecks/cli/release.rb +70 -0
- data/lib/hecks/cli/release_gem.rb +59 -0
- data/lib/hecks/cli/rspec_io_parallel_files.rb +137 -0
- data/lib/hecks/cli/rspec_shard_files.rb +66 -0
- data/lib/hecks/cli/run.rb +15 -61
- data/lib/hecks/cli/seed_semantics_corpus.rb +71 -0
- data/lib/hecks/cli/serve_query_ir_mcp.rb +30 -0
- data/lib/hecks/cli/shape.rb +70 -0
- data/lib/hecks/cli/smoke_http.rb +230 -0
- data/lib/hecks/cli/smoke_test.rb +7 -19
- data/lib/hecks/cli/spec_example.rb +27 -0
- data/lib/hecks/cli/statements.rb +32 -0
- data/lib/hecks/cli/stores.rb +4 -6
- data/lib/hecks/cli/stress_concurrency_specs.rb +177 -0
- data/lib/hecks/cli.rb +216 -73
- data/lib/hecks/codemod.rb +324 -0
- data/lib/hecks/construct.rb +8 -34
- data/lib/hecks/corpus.rb +423 -0
- data/lib/hecks/deploy/bluebook/deploy.bluebook +617 -158
- data/lib/hecks/deploy/bluebook/deploy.hecksagon +41 -11
- data/lib/hecks/deploy/oidc.json +82 -2
- data/lib/hecks/doc/reference.rb +351 -0
- data/lib/hecks/doors/cli_door.rb +196 -0
- data/lib/hecks/doors/cli_runner.rb +297 -0
- data/lib/hecks/{facade → doors}/command_request.rb +14 -34
- data/lib/hecks/doors/handle.rb +206 -0
- data/lib/hecks/doors/json_door.rb +132 -0
- data/lib/hecks/doors/launcher_options.rb +129 -0
- data/lib/hecks/{cli → doors}/mcp_door.rb +25 -120
- data/lib/hecks/doors/mcp_door_scope.rb +97 -0
- data/lib/hecks/doors/ruby_door/aggregate_door.rb +162 -0
- data/lib/hecks/doors/ruby_door/chapter.rb +72 -0
- data/lib/hecks/doors/ruby_door.rb +77 -0
- data/lib/hecks/doors.rb +61 -0
- data/lib/hecks/embryonaut_bluebook/lock.rb +3 -35
- data/lib/hecks/embryonaut_bluebook/shape.rb +1 -17
- data/lib/hecks/embryonaut_bluebook/vendor.rb +8 -53
- data/lib/hecks/embryonaut_bluebook/vendor_cli.rb +4 -19
- data/lib/hecks/embryonaut_bluebook.rb +5 -72
- data/lib/hecks/engine_agreement.rb +156 -0
- data/lib/hecks/facade.rb +23 -51
- data/lib/hecks/forms/app.rb +21 -76
- data/lib/hecks/forms/banking_presentation.rb +50 -0
- data/lib/hecks/forms/command_form_renderer.rb +10 -29
- data/lib/hecks/forms/field_renderer.rb +17 -156
- data/lib/hecks/forms/field_shape.rb +31 -222
- data/lib/hecks/forms/html.rb +12 -47
- data/lib/hecks/forms/index_renderer.rb +1 -4
- data/lib/hecks/forms/page.rb +3 -9
- data/lib/hecks/forms/params.rb +14 -60
- data/lib/hecks/forms/port_argument.rb +2 -19
- data/lib/hecks/forms/query_form_renderer.rb +4 -79
- data/lib/hecks/forms/record_renderer.rb +8 -75
- data/lib/hecks/forms/record_table.rb +7 -50
- data/lib/hecks/forms/reference_options.rb +3 -30
- data/lib/hecks/forms/value_object_shape.rb +8 -35
- data/lib/hecks/forms.rb +5 -33
- data/lib/hecks/fqn.rb +5 -12
- data/lib/hecks/framework/bluebook/compliance.bluebook +16 -65
- data/lib/hecks/framework/bluebook/console_settings.bluebook +47 -134
- data/lib/hecks/framework/bluebook/framework.hecksagon +5 -14
- data/lib/hecks/framework/bluebook/governance.bluebook +13 -34
- data/lib/hecks/framework/bluebook/identity.bluebook +11 -26
- data/lib/hecks/framework/bluebook/privacy.bluebook +8 -33
- data/lib/hecks/framework.rb +11 -80
- data/lib/hecks/freezer.rb +5 -39
- data/lib/hecks/fuzzing/bounded_exhaustive_expressions.rb +393 -0
- data/lib/hecks/fuzzing/combination_miner.rb +86 -0
- data/lib/hecks/fuzzing/concurrent_dispatch.rb +214 -0
- data/lib/hecks/fuzzing/coverage_campaign.rb +143 -0
- data/lib/hecks/fuzzing/differential.rb +156 -0
- data/lib/hecks/fuzzing/domain_generator.rb +615 -0
- data/lib/hecks/fuzzing/era_boundary.rb +71 -0
- data/lib/hecks/fuzzing/form_census.rb +136 -0
- data/lib/hecks/fuzzing/generated_domain_check.rb +93 -0
- data/lib/hecks/fuzzing/invalid_value_generator.rb +64 -0
- data/lib/hecks/fuzzing/isolated_boot.rb +301 -0
- data/lib/hecks/fuzzing/nondeterministic.rb +51 -0
- data/lib/hecks/fuzzing/outside_world.rb +45 -0
- data/lib/hecks/fuzzing/persistence_parity.rb +102 -0
- data/lib/hecks/fuzzing/properties/corrections.rb +88 -0
- data/lib/hecks/fuzzing/properties/dispatch_and_mutations.rb +314 -0
- data/lib/hecks/fuzzing/properties/guards.rb +190 -0
- data/lib/hecks/fuzzing/properties/invariants_and_aggregation.rb +300 -0
- data/lib/hecks/fuzzing/properties/lifecycle_and_replay.rb +93 -0
- data/lib/hecks/fuzzing/properties/outbox.rb +89 -0
- data/lib/hecks/fuzzing/properties/querying.rb +175 -0
- data/lib/hecks/fuzzing/properties.rb +162 -0
- data/lib/hecks/fuzzing/qa_settings.rb +123 -0
- data/lib/hecks/fuzzing/replay.rb +505 -0
- data/lib/hecks/fuzzing/rotation_priority.rb +48 -0
- data/lib/hecks/fuzzing/rust_gap_manifest.rb +108 -0
- data/lib/hecks/fuzzing/self_consistency.rb +339 -0
- data/lib/hecks/fuzzing/sequence_generator/adversary.rb +385 -0
- data/lib/hecks/fuzzing/sequence_generator/catalog.rb +132 -0
- data/lib/hecks/fuzzing/sequence_generator/outcome_tracker.rb +95 -0
- data/lib/hecks/fuzzing/sequence_generator/picker.rb +77 -0
- data/lib/hecks/fuzzing/sequence_generator/query_binding.rb +109 -0
- data/lib/hecks/fuzzing/sequence_generator/step_builder.rb +237 -0
- data/lib/hecks/fuzzing/sequence_generator.rb +189 -0
- data/lib/hecks/fuzzing/shrinker.rb +166 -0
- data/lib/hecks/fuzzing/structural_skips.rb +33 -0
- data/lib/hecks/fuzzing/sweep_depth.rb +43 -0
- data/lib/hecks/fuzzing/target_capabilities.rb +163 -0
- data/lib/hecks/fuzzing/value_generator.rb +216 -0
- data/lib/hecks/fuzzing.rb +23 -0
- data/lib/hecks/grammar/evolve.rb +336 -0
- data/lib/hecks/grammar/expression.bluebook +15 -40
- data/lib/hecks/grammar/translation.bluebook +3 -6
- data/lib/hecks/grammar.rb +16 -41
- data/lib/hecks/hecks/adapters/codebase/codemods.rb +45 -0
- data/lib/hecks/hecks/adapters/codebase/conformance.rb +71 -0
- data/lib/hecks/hecks/adapters/codebase/corpus_tasks.rb +202 -0
- data/lib/hecks/hecks/adapters/codebase/gem_registry.rb +80 -0
- data/lib/hecks/hecks/adapters/codebase/kernel_tables.rb +54 -0
- data/lib/hecks/hecks/adapters/codebase/language.rb +240 -0
- data/lib/hecks/hecks/adapters/codebase/npm_registry.rb +102 -0
- data/lib/hecks/hecks/adapters/codebase/publishing.rb +142 -0
- data/lib/hecks/hecks/adapters/codebase/regeneration.rb +67 -0
- data/lib/hecks/hecks/adapters/codebase/release_facts.rb +90 -0
- data/lib/hecks/hecks/adapters/codebase/ruby_child.rb +83 -0
- data/lib/hecks/hecks/adapters/codebase/secret_vault.rb +36 -0
- data/lib/hecks/hecks/adapters/codebase/source_tree.adapter +7 -0
- data/lib/hecks/hecks/adapters/codebase/source_tree.rb +189 -0
- data/lib/hecks/hecks/adapters/codebase/sqlite_fixture.rb +71 -0
- data/lib/hecks/hecks/adapters/codebase/style.rb +171 -0
- data/lib/hecks/hecks/adapters/codebase/test_runner.rb +55 -0
- data/lib/hecks/hecks/adapters/codebase/test_suite.rb +165 -0
- data/lib/hecks/hecks/adapters/codebase/tree.rb +111 -0
- data/lib/hecks/hecks/adapters/console_capture.rb +79 -0
- data/lib/hecks/hecks/adapters/deploy_toolchain.adapter +7 -0
- data/lib/hecks/hecks/adapters/deploy_toolchain.rb +108 -0
- data/lib/hecks/hecks/adapters/git.adapter +7 -0
- data/lib/hecks/hecks/adapters/git.rb +102 -0
- data/lib/hecks/hecks/adapters/host_http.adapter +7 -0
- data/lib/hecks/hecks/adapters/host_http.rb +65 -0
- data/lib/hecks/hecks/adapters/in_process_boot.adapter +7 -0
- data/lib/hecks/hecks/adapters/in_process_boot.rb +197 -0
- data/lib/hecks/hecks/adapters/in_process_operations.rb +202 -0
- data/lib/hecks/hecks/adapters/journal_store/changes.rb +143 -0
- data/lib/hecks/hecks/adapters/journal_store/compaction.rb +145 -0
- data/lib/hecks/hecks/adapters/journal_store/edge_audit.rb +132 -0
- data/lib/hecks/hecks/adapters/journal_store/examination.rb +135 -0
- data/lib/hecks/hecks/adapters/journal_store/held_domain.rb +163 -0
- data/lib/hecks/hecks/adapters/journal_store/readings.rb +187 -0
- data/lib/hecks/hecks/adapters/journal_store.adapter +7 -0
- data/lib/hecks/hecks/adapters/journal_store.rb +64 -0
- data/lib/hecks/hecks/adapters/local_files.adapter +7 -0
- data/lib/hecks/hecks/adapters/local_files.rb +46 -0
- data/lib/hecks/hecks/adapters/pg_admin.adapter +7 -0
- data/lib/hecks/hecks/adapters/pg_admin.rb +245 -0
- data/lib/hecks/hecks/adapters/process_pool.adapter +7 -0
- data/lib/hecks/hecks/adapters/process_pool.rb +119 -0
- data/lib/hecks/hecks/adapters/rust_toolchain.adapter +7 -0
- data/lib/hecks/hecks/adapters/rust_toolchain.rb +179 -0
- data/lib/hecks/hecks/adapters/rust_workspace.rb +150 -0
- data/lib/hecks/hecks/adapters/shell.adapter +7 -0
- data/lib/hecks/hecks/adapters/shell.rb +49 -0
- data/lib/hecks/hecks/adapters/terminal.adapter +7 -0
- data/lib/hecks/hecks/adapters/terminal.rb +74 -0
- data/lib/hecks/hecks/codebase.behaviors +172 -0
- data/lib/hecks/hecks/codebase.bluebook +2453 -0
- data/lib/hecks/hecks/context_map.hecksagon +13 -0
- data/lib/hecks/hecks/custodian.behaviors +179 -0
- data/lib/hecks/hecks/custodian.bluebook +1847 -0
- data/lib/hecks/hecks/deploy.behaviors +74 -0
- data/lib/hecks/hecks/deploy.world +12 -0
- data/lib/hecks/hecks/environments/memory.world +10 -0
- data/lib/hecks/hecks/governance.world +7 -0
- data/lib/hecks/hecks/hecks.behaviors +62 -0
- data/lib/hecks/hecks/hecks.bluebook +124 -0
- data/lib/hecks/hecks/hecks.hecksagon +390 -0
- data/lib/hecks/hecks/hecks.world +42 -0
- data/lib/hecks/ir.rb +14 -83
- data/lib/hecks/kernel_capabilities.rb +194 -0
- data/lib/hecks/language/adapter.bluebook +2 -7
- data/lib/hecks/language/bluebook/aggregate.bluebook +56 -221
- data/lib/hecks/language/bluebook/attaches/paging.bluebook +6 -15
- data/lib/hecks/language/bluebook/bluebook.bluebook +26 -83
- data/lib/hecks/language/bluebook/bluebook.hecksagon +3 -15
- data/lib/hecks/language/bluebook/command.bluebook +27 -144
- data/lib/hecks/language/bluebook/entity.bluebook +24 -97
- data/lib/hecks/language/bluebook/policy.bluebook +16 -67
- data/lib/hecks/language/bluebook/process_manager.bluebook +28 -151
- data/lib/hecks/language/bluebook/projection.bluebook +126 -60
- data/lib/hecks/language/bluebook/query.bluebook +19 -43
- data/lib/hecks/language/bluebook/shape.bluebook +23 -73
- data/lib/hecks/language/bluebook/syntax.bluebook +51 -262
- data/lib/hecks/language/bluebook/vocabulary.bluebook +83 -198
- data/lib/hecks/language/hecksagon/adapter_binding.bluebook +3 -10
- data/lib/hecks/language/hecksagon/domain_port.bluebook +14 -19
- data/lib/hecks/language/hecksagon/hecksagon.bluebook +26 -25
- data/lib/hecks/language/hecksagon/port_operation.bluebook +3 -14
- data/lib/hecks/language/oidc.json +35 -0
- data/lib/hecks/language/port.bluebook +4 -17
- data/lib/hecks/language/translation/translation.bluebook +3 -9
- data/lib/hecks/language/translation/translation_aggregate.bluebook +5 -24
- data/lib/hecks/language/world/wiring.bluebook +1 -3
- data/lib/hecks/language/world/world.bluebook +5 -7
- data/lib/hecks/literal.rb +8 -50
- data/lib/hecks/mcp_stdio_guard.rb +4 -41
- data/lib/hecks/naming.rb +29 -137
- data/lib/hecks/persistence_legacy_fixture/regenerate.rb +161 -0
- data/lib/hecks/persistence_legacy_fixture.rb +113 -0
- data/lib/hecks/ports/access_control.rb +7 -23
- data/lib/hecks/ports/agent/answers.rb +5 -23
- data/lib/hecks/ports/agent.rb +47 -172
- data/lib/hecks/ports/authentication.rb +12 -39
- data/lib/hecks/ports/authorization.rb +16 -43
- data/lib/hecks/ports/clock.rb +5 -45
- data/lib/hecks/ports/extraction.rb +7 -12
- data/lib/hecks/ports/identity_assignment.rb +8 -29
- data/lib/hecks/ports/identity_generation.rb +6 -29
- data/lib/hecks/ports/identity_resolution.rb +2 -10
- data/lib/hecks/ports/key_vault.rb +9 -45
- data/lib/hecks/ports/persistence/append_only.rb +61 -64
- data/lib/hecks/ports/persistence/binding_policy.rb +4 -14
- data/lib/hecks/ports/persistence/codec_boundary.rb +20 -80
- data/lib/hecks/ports/persistence/null_saga_store.rb +4 -20
- data/lib/hecks/ports/persistence/plugin.rb +13 -42
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +44 -144
- data/lib/hecks/ports/persistence/plugins/era/era_guard/shape_diff.rb +15 -115
- data/lib/hecks/ports/persistence/plugins/era/era_guard.rb +20 -85
- data/lib/hecks/ports/persistence/plugins/era/era_tamper.rb +6 -25
- data/lib/hecks/ports/persistence/plugins/era/expected_era.rb +18 -24
- data/lib/hecks/ports/persistence/plugins/era/lineage.rb +55 -181
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/events.rb +77 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/era_store.rb +12 -122
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/field_cache.rb +28 -128
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/head_compiler.rb +73 -474
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/mint_transaction.rb +31 -124
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/provisioning.rb +45 -219
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/resumable_backfill.rb +13 -108
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/tail_merge.rb +19 -76
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/transform_installer.rb +9 -49
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage.rb +6 -123
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/coverage_check.rb +23 -55
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/era_resolver.rb +14 -72
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/merge_coordinator.rb +7 -16
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/minter.rb +43 -127
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager.rb +13 -45
- data/lib/hecks/ports/persistence/plugins/era/postgres_era.rb +131 -555
- data/lib/hecks/ports/persistence/plugins/era/storage_shape.rb +13 -63
- data/lib/hecks/ports/persistence/plugins/era/translation/approval_file.rb +227 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/approval_digest.rb +2 -17
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_one.rb +3 -14
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_two.rb +13 -58
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/unfed_report.rb +3 -17
- data/lib/hecks/ports/persistence/plugins/era/translation/audit.rb +9 -26
- data/lib/hecks/ports/persistence/plugins/era/translation/reattest.rb +50 -47
- data/lib/hecks/ports/persistence/plugins/era/translation/rule_compiler.rb +18 -124
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/differ.rb +34 -123
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/renderer.rb +5 -12
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/writer.rb +3 -9
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold.rb +2 -14
- data/lib/hecks/ports/persistence/plugins/era/translation.rb +1 -0
- data/lib/hecks/ports/persistence/plugins/era.rb +4 -23
- data/lib/hecks/ports/persistence/postgres_dump/connection.rb +7 -23
- data/lib/hecks/ports/persistence/postgres_dump.rb +4 -35
- data/lib/hecks/ports/persistence/remote_runtime.rb +2 -24
- data/lib/hecks/ports/persistence/repository_factory.rb +8 -27
- data/lib/hecks/ports/persistence/state_codec.rb +47 -108
- data/lib/hecks/ports/persistence.rb +7 -14
- data/lib/hecks/ports/projection.rb +42 -84
- data/lib/hecks/ports/query/in_memory.rb +10 -58
- data/lib/hecks/ports/query/ordering.rb +11 -32
- data/lib/hecks/ports/query.rb +14 -37
- data/lib/hecks/ports.rb +2 -8
- data/lib/hecks/projection_files.rb +285 -0
- data/lib/hecks/projections/bootstrap_table.rb +12 -44
- data/lib/hecks/projections/deploy/fargate/assembly.rb +2 -15
- data/lib/hecks/projections/deploy/fargate/cdn.rb +1 -48
- data/lib/hecks/projections/deploy/fargate/cdn_default.rb +2 -11
- data/lib/hecks/projections/deploy/fargate/check.rb +5 -14
- data/lib/hecks/projections/deploy/fargate/containers.rb +3 -78
- data/lib/hecks/projections/deploy/fargate/extras.rb +3 -44
- data/lib/hecks/projections/deploy/fargate/monitoring.rb +0 -44
- data/lib/hecks/projections/deploy/fargate/settings.rb +2 -54
- data/lib/hecks/projections/deploy/fargate/yaml.rb +13 -58
- data/lib/hecks/projections/deploy/fargate.rb +40 -207
- data/lib/hecks/projections/deploy/lambda.rb +191 -708
- data/lib/hecks/projections/deploy/preview/access_yaml.rb +1 -33
- data/lib/hecks/projections/deploy/preview/containers.rb +6 -111
- data/lib/hecks/projections/deploy/preview/preview.sh.erb +1 -1
- data/lib/hecks/projections/deploy/preview/routing_yaml.rb +4 -56
- data/lib/hecks/projections/deploy/preview/script.rb +2 -14
- data/lib/hecks/projections/deploy/preview/settings.rb +3 -33
- data/lib/hecks/projections/deploy/preview/task_yaml.rb +2 -38
- data/lib/hecks/projections/deploy/preview/template.rb +3 -59
- data/lib/hecks/projections/deploy/preview.rb +2 -67
- data/lib/hecks/projections/deploy/scripts/deploy-service.sh.tmpl +1 -1
- data/lib/hecks/projections/deploy/scripts/expected-era.header +1 -1
- data/lib/hecks/projections/deploy/scripts/hosting.mk.tmpl +3 -3
- data/lib/hecks/projections/deploy/scripts/settings.rb +3 -25
- data/lib/hecks/projections/deploy/scripts/smoke-after-deploy.sh.tmpl +1 -1
- data/lib/hecks/projections/deploy/scripts.rb +4 -57
- data/lib/hecks/projections/deploy/shared.rb +48 -147
- data/lib/hecks/projections/deploy/smoke.rb +4 -61
- data/lib/hecks/projections/deploy/template_diff/comparer.rb +3 -25
- data/lib/hecks/projections/deploy/template_diff/loader.rb +2 -11
- data/lib/hecks/projections/deploy/template_diff.rb +5 -57
- data/lib/hecks/projections/diagrams.rb +22 -584
- data/lib/hecks/projections/glossary/html.rb +14 -130
- data/lib/hecks/projections/glossary/markdown.rb +8 -69
- data/lib/hecks/projections/glossary/mermaid.rb +9 -66
- data/lib/hecks/projections/glossary/sensitivity.rb +5 -34
- data/lib/hecks/projections/glossary/sentences.rb +14 -159
- data/lib/hecks/projections/glossary.rb +30 -222
- data/lib/hecks/projections/ir.rb +3 -10
- data/lib/hecks/projections/model/deviations.rb +16 -43
- data/lib/hecks/projections/model.rb +12 -51
- data/lib/hecks/projections/oidc.rb +12 -56
- data/lib/hecks/projections/parser_table.rb +13 -32
- data/lib/hecks/projections/reference.rb +4 -18
- data/lib/hecks/projections/rust_vocabulary.rb +13 -251
- data/lib/hecks/projections/shape.rb +3 -29
- data/lib/hecks/projections/statements.rb +7 -86
- data/lib/hecks/projections/vocabulary.rb +6 -22
- data/lib/hecks/projections.rb +2 -16
- data/lib/hecks/projector/cli_projector.rb +154 -400
- data/lib/hecks/projector/docs_projector.rb +10 -201
- data/lib/hecks/projector/exporter.rb +42 -134
- data/lib/hecks/projector/ir_projector.rb +2 -9
- data/lib/hecks/projector/narrate_projector.rb +15 -189
- data/lib/hecks/projector/target.rb +13 -76
- data/lib/hecks/projector.rb +30 -121
- data/lib/hecks/quality_control/adapters/agent.adapter +7 -0
- data/lib/hecks/quality_control/adapters/agent.rb +58 -0
- data/lib/hecks/quality_control/adapters/angle_tools.adapter +7 -0
- data/lib/hecks/quality_control/adapters/angle_tools.rb +15 -0
- data/lib/hecks/quality_control/adapters/clearance_recorder.rb +36 -0
- data/lib/hecks/quality_control/adapters/clearance_tools.adapter +7 -0
- data/lib/hecks/quality_control/adapters/clearance_tools.rb +17 -0
- data/lib/hecks/quality_control/adapters/git_pr.adapter +7 -0
- data/lib/hecks/quality_control/adapters/git_pr.rb +226 -0
- data/lib/hecks/quality_control/adapters/github_checks.adapter +9 -0
- data/lib/hecks/quality_control/adapters/github_checks.rb +83 -0
- data/lib/hecks/quality_control/adapters/github_ci_webhook.rb +56 -0
- data/lib/hecks/quality_control/adapters/github_issues.adapter +7 -0
- data/lib/hecks/quality_control/adapters/github_issues.rb +49 -0
- data/lib/hecks/quality_control/adapters/qa_tool.rb +59 -0
- data/lib/hecks/quality_control/adapters/sweep_tools.adapter +7 -0
- data/lib/hecks/quality_control/adapters/sweep_tools.rb +51 -0
- data/lib/hecks/quality_control/adapters/target_tools.adapter +7 -0
- data/lib/hecks/quality_control/adapters/target_tools.rb +43 -0
- data/lib/hecks/quality_control/cli/child.rb +45 -0
- data/lib/hecks/quality_control/cli/qa_concurrency_racer.rb +45 -0
- data/lib/hecks/quality_control/cli/qa_discover_external_domains.rb +248 -0
- data/lib/hecks/quality_control/cli/qa_domain_novelty.rb +163 -0
- data/lib/hecks/quality_control/cli/qa_generated_domains.rb +450 -0
- data/lib/hecks/quality_control/cli/qa_log_bug.rb +195 -0
- data/lib/hecks/quality_control/cli/qa_mine_combinations.rb +220 -0
- data/lib/hecks/quality_control/cli/qa_open_pr.rb +305 -0
- data/lib/hecks/quality_control/cli/qa_postgres_migrate.rb +154 -0
- data/lib/hecks/quality_control/cli/qa_postgres_role.rb +159 -0
- data/lib/hecks/quality_control/cli/qa_pr_check.rb +232 -0
- data/lib/hecks/quality_control/cli/qa_seed_angles.rb +142 -0
- data/lib/hecks/quality_control/cli/qa_seed_targets.rb +69 -0
- data/lib/hecks/quality_control/cli/qa_sweep/all_mode.rb +280 -0
- data/lib/hecks/quality_control/cli/qa_sweep/checks.rb +329 -0
- data/lib/hecks/quality_control/cli/qa_sweep/dials.rb +92 -0
- data/lib/hecks/quality_control/cli/qa_sweep/finding_report.rb +117 -0
- data/lib/hecks/quality_control/cli/qa_sweep/parsing.rb +175 -0
- data/lib/hecks/quality_control/cli/qa_sweep/release_mode.rb +60 -0
- data/lib/hecks/quality_control/cli/qa_sweep.rb +611 -0
- data/lib/hecks/quality_control/cli/qa_tick.rb +274 -0
- data/lib/hecks/quality_control/quality_control.bluebook +2224 -0
- data/lib/hecks/quality_control/quality_control.hecksagon +13 -0
- data/lib/hecks/quality_control/quality_control.ports.hecksagon +54 -0
- data/lib/hecks/query_ir.rb +346 -0
- data/lib/hecks/query_ir_mcp.rb +198 -0
- data/lib/hecks/query_specification/common/comparators.rb +5 -26
- data/lib/hecks/query_specification/common/comparison.rb +35 -143
- data/lib/hecks/query_specification/common/dsl.rb +8 -24
- data/lib/hecks/query_specification/common/null_policy.rb +20 -70
- data/lib/hecks/query_specification/common/options.rb +2 -6
- data/lib/hecks/query_specification/common/where_clause.rb +2 -10
- data/lib/hecks/query_specification/field_path.rb +37 -77
- data/lib/hecks/query_specification/hop_path.rb +12 -76
- data/lib/hecks/release/gem_pin.rb +2 -26
- data/lib/hecks/release/runner/ci_publisher.rb +5 -8
- data/lib/hecks/release/runner/clean_tree.rb +42 -0
- data/lib/hecks/release/runner/commands.rb +2 -4
- data/lib/hecks/release/runner/console.rb +6 -0
- data/lib/hecks/release/runner/gem_publisher.rb +15 -9
- data/lib/hecks/release/runner/npm_publisher.rb +9 -53
- data/lib/hecks/release/runner/preflight.rb +29 -20
- data/lib/hecks/release/runner/published.rb +8 -26
- data/lib/hecks/release/runner/tagger.rb +31 -23
- data/lib/hecks/release/runner.rb +60 -38
- data/lib/hecks/rendering.rb +4 -26
- data/lib/hecks/router/namespace_installer.rb +15 -39
- data/lib/hecks/router.rb +4 -8
- data/lib/hecks/runtime/adapter_lookup.rb +124 -0
- data/lib/hecks/runtime/aggregate_lock.rb +8 -33
- data/lib/hecks/runtime/boot_gates.rb +3 -18
- data/lib/hecks/runtime/caller.rb +19 -59
- data/lib/hecks/runtime/capability_graph.rb +5 -21
- data/lib/hecks/runtime/command_interpreter/argument_gate.rb +16 -78
- data/lib/hecks/runtime/command_interpreter/mutation_applier.rb +27 -160
- data/lib/hecks/runtime/command_interpreter.rb +124 -306
- data/lib/hecks/runtime/command_rules/admissibility.rb +95 -366
- data/lib/hecks/runtime/command_rules/arithmetic.rb +66 -196
- data/lib/hecks/runtime/command_rules/authorization.rb +13 -45
- data/lib/hecks/runtime/command_rules/emission.rb +8 -21
- data/lib/hecks/runtime/command_rules/references.rb +23 -202
- data/lib/hecks/runtime/dependency_planning.rb +50 -104
- data/lib/hecks/runtime/dispatcher.rb +134 -243
- data/lib/hecks/runtime/entity_element.rb +40 -462
- data/lib/hecks/runtime/entity_interpreter.rb +64 -219
- data/lib/hecks/runtime/errors.rb +32 -115
- data/lib/hecks/runtime/event.rb +3 -25
- data/lib/hecks/runtime/identity.rb +18 -154
- data/lib/hecks/runtime/instance.rb +18 -150
- data/lib/hecks/runtime/interpreting.rb +14 -70
- data/lib/hecks/runtime/invocation.rb +28 -164
- data/lib/hecks/runtime/loader.rb +109 -194
- data/lib/hecks/runtime/outbox.rb +39 -262
- data/lib/hecks/runtime/policy_interpreter.rb +43 -202
- data/lib/hecks/runtime/port_operation_interpreter.rb +28 -97
- data/lib/hecks/runtime/query_interpreter.rb +122 -187
- data/lib/hecks/runtime/reaction_invocation.rb +36 -138
- data/lib/hecks/runtime/reaction_outcome.rb +89 -0
- data/lib/hecks/runtime/read_model_interpreter.rb +117 -208
- data/lib/hecks/runtime/rebuild_sweep.rb +8 -54
- data/lib/hecks/runtime/reference_hop.rb +8 -81
- data/lib/hecks/runtime/refusal_wording.rb +28 -87
- data/lib/hecks/runtime/registry/saga_persistence.rb +10 -102
- data/lib/hecks/runtime/registry/verification.rb +213 -227
- data/lib/hecks/runtime/registry/world_defaults.rb +4 -53
- data/lib/hecks/runtime/registry.rb +156 -247
- data/lib/hecks/runtime/remote_dispatcher.rb +68 -154
- data/lib/hecks/runtime/routing.rb +4 -15
- data/lib/hecks/runtime/saga_interpreter/correlation.rb +14 -61
- data/lib/hecks/runtime/saga_interpreter.rb +79 -263
- data/lib/hecks/runtime/saga_pending_dispatch.rb +2 -43
- data/lib/hecks/runtime/tenant_check.rb +6 -68
- data/lib/hecks/runtime/tenant_scope.rb +3 -28
- data/lib/hecks/runtime/value/admission.rb +16 -67
- data/lib/hecks/runtime/value/coercion.rb +162 -760
- data/lib/hecks/runtime/value/entity_list_coercion.rb +26 -219
- data/lib/hecks/runtime/value/field_checks.rb +172 -0
- data/lib/hecks/runtime/value.rb +15 -84
- data/lib/hecks/runtime.rb +35 -69
- data/lib/hecks/rust_build/conformance.rb +158 -0
- data/lib/hecks/rust_build/conformance_fuzz.rb +71 -0
- data/lib/hecks/rust_build/coverage.rb +218 -0
- data/lib/hecks/rust_build/native_build.rb +124 -0
- data/lib/hecks/rust_build/project_rust/root_mod.rb +120 -0
- data/lib/hecks/rust_build/project_rust.rb +332 -0
- data/lib/hecks/rust_build/wasm.rb +105 -0
- data/lib/hecks/rust_build/wasm_browser.rb +113 -0
- data/lib/hecks/rust_build.rb +144 -0
- data/lib/hecks/storehouse.rb +155 -582
- data/lib/hecks/tenancy/bluebook/tenancy.bluebook +10 -34
- data/lib/hecks/tenancy/bluebook/tenancy.hecksagon +6 -23
- data/lib/hecks/three_zero/forms.yml +127 -0
- data/lib/hecks/three_zero.rb +12 -0
- data/lib/hecks/tools/argument_gate_matrix.rb +316 -0
- data/lib/hecks/tools/comment_style.rb +1070 -0
- data/lib/hecks/tools/corpus_report.rb +87 -0
- data/lib/hecks/tools/deploy_recipe.rb +255 -0
- data/lib/hecks/tools/deploy_recipe_lint.rb +282 -0
- data/lib/hecks/tools/drop_implicit_append_fields.rb +95 -0
- data/lib/hecks/tools/era_projection_backfill.rb +94 -0
- data/lib/hecks/tools/era_reattest.rb +146 -0
- data/lib/hecks/tools/evolve_run.rb +189 -0
- data/lib/hecks/tools/fuzz_sweep.rb +373 -0
- data/lib/hecks/tools/heki_compaction.rb +100 -0
- data/lib/hecks/tools/hoist_local_givens.rb +246 -0
- data/lib/hecks/tools/journal_compaction.rb +89 -0
- data/lib/hecks/tools/oidc_manifests.rb +70 -0
- data/lib/hecks/tools/query_ir_run.rb +81 -0
- data/lib/hecks/tools/regeneration_run.rb +166 -0
- data/lib/hecks/tools/rust_comment_style.rb +642 -0
- data/lib/hecks/tools/sequence_script.rb +62 -0
- data/lib/hecks/tools/tail_merge.rb +117 -0
- data/lib/hecks/tools/tenant_provisioning.rb +142 -0
- data/lib/hecks/tools/translation_audit.rb +208 -0
- data/lib/hecks/tools/translation_scaffold.rb +131 -0
- data/lib/hecks/tools.rb +86 -0
- data/lib/hecks/vendoring/git_environment.rb +2 -8
- data/lib/hecks/vendoring/git_source.rb +4 -10
- data/lib/hecks/vendoring.rb +7 -46
- data/lib/hecks/version.rb +3 -14
- data/lib/hecks.rb +52 -90
- data/lib/rubocop/cop/hecks/fallback_hash_lookup.rb +8 -46
- data/lib/rubocop/cop/hecks/sequential_hash_rename_in_loop.rb +11 -80
- data/lib/rubocop/cop/hecks/thread_shared_ivar_mutation.rb +10 -99
- data/qa/settings.yml +66 -0
- data/rust/.cargo/config.toml +6 -0
- data/rust/.gitignore +2 -0
- data/rust/Cargo.lock +54 -0
- data/rust/Cargo.toml +61 -0
- data/rust/build/.cargo/config.toml +3 -0
- data/rust/build/.gitignore +1 -0
- data/rust/build/Cargo.lock +7 -0
- data/rust/build/Cargo.toml +19 -0
- data/rust/build/src/build_artifact.rs +47 -0
- data/rust/build/src/cargo_sync.rs +248 -0
- data/rust/build/src/json.rs +421 -0
- data/rust/build/src/lineage_pass.rs +285 -0
- data/rust/build/src/main.rs +51 -0
- data/rust/build/src/optional_pass.rs +150 -0
- data/rust/build/src/pipeline.rs +264 -0
- data/rust/build/src/reserved_names.rs +76 -0
- data/rust/build/src/resolve.rs +124 -0
- data/rust/build/src/root.rs +25 -0
- data/rust/build/src/sidecars.rs +73 -0
- data/rust/build/src/subprocess.rs +51 -0
- data/rust/build/src/tmp.rs +31 -0
- data/rust/codegen/.cargo/config.toml +3 -0
- data/rust/codegen/.gitignore +1 -0
- data/rust/codegen/Cargo.lock +7 -0
- data/rust/codegen/Cargo.toml +20 -0
- data/rust/codegen/src/attr.rs +32 -0
- data/rust/codegen/src/bridging.rs +481 -0
- data/rust/codegen/src/commands.rs +1226 -0
- data/rust/codegen/src/constraints.rs +109 -0
- data/rust/codegen/src/dependency_planning.rs +209 -0
- data/rust/codegen/src/domain_generator.rs +1288 -0
- data/rust/codegen/src/exemplar.rs +230 -0
- data/rust/codegen/src/expr_emitter.rs +87 -0
- data/rust/codegen/src/fielded.rs +192 -0
- data/rust/codegen/src/hecks_naming.rs +33 -0
- data/rust/codegen/src/json.rs +335 -0
- data/rust/codegen/src/json_codec.rs +697 -0
- data/rust/codegen/src/literal.rs +207 -0
- data/rust/codegen/src/main.rs +290 -0
- data/rust/codegen/src/manifest.rs +227 -0
- data/rust/codegen/src/mutations.rs +784 -0
- data/rust/codegen/src/naming.rs +286 -0
- data/rust/codegen/src/ports.rs +208 -0
- data/rust/codegen/src/prelude.rs +116 -0
- data/rust/codegen/src/queries.rs +786 -0
- data/rust/codegen/src/reactions.rs +532 -0
- data/rust/codegen/src/read_models.rs +697 -0
- data/rust/codegen/src/reference_specs.rs +40 -0
- data/rust/codegen/src/registry.rs +966 -0
- data/rust/codegen/src/reserved_names.rs +76 -0
- data/rust/codegen/src/shared.rs +93 -0
- data/rust/codegen/src/skip_reason.rs +25 -0
- data/rust/codegen/src/types.rs +362 -0
- data/rust/host/.cargo/config.toml +3 -0
- data/rust/host/.gitignore +1 -0
- data/rust/host/Cargo.lock +4297 -0
- data/rust/host/Cargo.toml +61 -0
- data/rust/host/HECKS_RELEASE +1 -0
- data/rust/host/rds-ca-bundle.pem +2736 -0
- data/rust/host/src/api.rs +1596 -0
- data/rust/host/src/approval.rs +652 -0
- data/rust/host/src/auth.rs +1287 -0
- data/rust/host/src/bin/expr_harness.rs +46 -0
- data/rust/host/src/bin/lineage_harness.rs +119 -0
- data/rust/host/src/bin/mint_harness.rs +135 -0
- data/rust/host/src/checkout.rs +265 -0
- data/rust/host/src/dispatch.rs +1443 -0
- data/rust/host/src/expr_json.rs +1117 -0
- data/rust/host/src/field_hints.rs +52 -0
- data/rust/host/src/ir.rs +733 -0
- data/rust/host/src/journal.rs +874 -0
- data/rust/host/src/lambda_client.rs +378 -0
- data/rust/host/src/log.rs +147 -0
- data/rust/host/src/main.rs +474 -0
- data/rust/host/src/mint.rs +1865 -0
- data/rust/host/src/payments/keystore.rs +330 -0
- data/rust/host/src/payments/tests.rs +1400 -0
- data/rust/host/src/payments.rs +767 -0
- data/rust/host/src/presentation.rs +698 -0
- data/rust/host/src/presentation_write.rs +1431 -0
- data/rust/host/src/query_step.rs +149 -0
- data/rust/host/src/rate_limit.rs +904 -0
- data/rust/host/src/reference_transform.rs +241 -0
- data/rust/host/src/reference_validate.rs +338 -0
- data/rust/host/src/resend.rs +296 -0
- data/rust/host/src/secrets.rs +106 -0
- data/rust/host/src/server.rs +663 -0
- data/rust/host/src/storage_shape.rs +175 -0
- data/rust/host/src/test_pg.rs +40 -0
- data/rust/host/src/ui_schema.rs +1351 -0
- data/rust/host/src/wasm_runner.rs +191 -0
- data/rust/host/src/web/newsletter/cooldown.rs +126 -0
- data/rust/host/src/web/newsletter/tests.rs +104 -0
- data/rust/host/src/web/newsletter.rs +310 -0
- data/rust/host/src/web/newsletter_send.rs +357 -0
- data/rust/host/src/web/registrations.rs +1505 -0
- data/rust/host/src/web.rs +2937 -0
- data/rust/lsp/.gitignore +1 -0
- data/rust/lsp/Cargo.lock +7 -0
- data/rust/lsp/Cargo.toml +16 -0
- data/rust/lsp/README.md +133 -0
- data/rust/lsp/src/diagnostics.rs +165 -0
- data/rust/lsp/src/json.rs +385 -0
- data/rust/lsp/src/main.rs +399 -0
- data/rust/lsp/src/outline.rs +177 -0
- data/rust/lsp/src/rpc.rs +67 -0
- data/rust/parser/.cargo/config.toml +5 -0
- data/rust/parser/.gitignore +1 -0
- data/rust/parser/Cargo.lock +7 -0
- data/rust/parser/Cargo.toml +21 -0
- data/rust/parser/src/build/closed_sets.rs +27 -0
- data/rust/parser/src/build/identity.rs +276 -0
- data/rust/parser/src/build/mod.rs +12 -0
- data/rust/parser/src/build/naming.rs +141 -0
- data/rust/parser/src/build/pattern_subset.rs +161 -0
- data/rust/parser/src/build/query_derive.rs +72 -0
- data/rust/parser/src/build/query_inference.rs +269 -0
- data/rust/parser/src/build/query_options.rs +100 -0
- data/rust/parser/src/build/read_model.rs +94 -0
- data/rust/parser/src/build/references.rs +32 -0
- data/rust/parser/src/canonical.rs +114 -0
- data/rust/parser/src/diag.rs +55 -0
- data/rust/parser/src/emit.rs +953 -0
- data/rust/parser/src/expr/ast_json.rs +147 -0
- data/rust/parser/src/expr/evaluator.rs +81 -0
- data/rust/parser/src/expr/mod.rs +84 -0
- data/rust/parser/src/expr/resolver.rs +497 -0
- data/rust/parser/src/ir.rs +387 -0
- data/rust/parser/src/keywords.rs +585 -0
- data/rust/parser/src/lex.rs +662 -0
- data/rust/parser/src/main.rs +252 -0
- data/rust/parser/src/parse/aggregate.rs +612 -0
- data/rust/parser/src/parse/chapter.rs +517 -0
- data/rust/parser/src/parse/command.rs +637 -0
- data/rust/parser/src/parse/domain_port.rs +127 -0
- data/rust/parser/src/parse/entity.rs +527 -0
- data/rust/parser/src/parse/file.rs +67 -0
- data/rust/parser/src/parse/hecksagon.rs +231 -0
- data/rust/parser/src/parse/lifecycle.rs +162 -0
- data/rust/parser/src/parse/mod.rs +1262 -0
- data/rust/parser/src/parse/policy.rs +87 -0
- data/rust/parser/src/parse/process_manager.rs +305 -0
- data/rust/parser/src/parse/query.rs +100 -0
- data/rust/parser/src/parse/read_model.rs +214 -0
- data/rust/parser/src/parse/value_object.rs +250 -0
- data/rust/parser/src/ruby_value.rs +422 -0
- data/rust/project/bridging.rb +257 -0
- data/rust/project/commands.rb +877 -0
- data/rust/project/constraints.rb +86 -0
- data/rust/project/dependency_planning.rb +178 -0
- data/rust/project/domain_generator.rb +980 -0
- data/rust/project/exemplar.rb +148 -0
- data/rust/project/expr_emitter.rb +72 -0
- data/rust/project/fielded.rb +141 -0
- data/rust/project/json_codec.rb +641 -0
- data/rust/project/mutations.rb +721 -0
- data/rust/project/naming.rb +205 -0
- data/rust/project/ports.rb +65 -0
- data/rust/project/queries.rb +493 -0
- data/rust/project/reactions.rb +317 -0
- data/rust/project/read_models.rb +690 -0
- data/rust/project/reference_specs.rb +27 -0
- data/rust/project/registry.rb +396 -0
- data/rust/project/skip_reason.rb +29 -0
- data/rust/project/types.rb +225 -0
- data/rust/project/write_if_changed.rb +83 -0
- data/rust/project.rb +30 -0
- data/rust/project_rust_pipeline.rb +383 -0
- data/rust/src/exemplar/commands.rs +279 -0
- data/rust/src/exemplar/constraints.rs +18 -0
- data/rust/src/exemplar/fielded.rs +280 -0
- data/rust/src/exemplar/json.rs +277 -0
- data/rust/src/exemplar/mod.rs +17 -0
- data/rust/src/exemplar/mutations.rs +80 -0
- data/rust/src/exemplar/queries.rs +33 -0
- data/rust/src/exemplar/reactions.rs +88 -0
- data/rust/src/exemplar/read_models.rs +48 -0
- data/rust/src/exemplar/registry.rs +166 -0
- data/rust/src/exemplar/types.rs +44 -0
- data/rust/src/kernel/attribute_shapes/composite.rs +88 -0
- data/rust/src/kernel/attribute_shapes/list.rs +18 -0
- data/rust/src/kernel/attribute_shapes/mod.rs +44 -0
- data/rust/src/kernel/attribute_shapes/optional.rs +9 -0
- data/rust/src/kernel/attribute_shapes/scalar.rs +39 -0
- data/rust/src/kernel/cli.rs +585 -0
- data/rust/src/kernel/dispatch.rs +1090 -0
- data/rust/src/kernel/expr.rs +458 -0
- data/rust/src/kernel/expression_operators/arithmetic.rs +128 -0
- data/rust/src/kernel/expression_operators/comparison.rs +48 -0
- data/rust/src/kernel/expression_operators/enumeration.rs +232 -0
- data/rust/src/kernel/expression_operators/logical.rs +13 -0
- data/rust/src/kernel/expression_operators/membership.rs +18 -0
- data/rust/src/kernel/expression_operators/mod.rs +68 -0
- data/rust/src/kernel/expression_operators/pattern_match.rs +73 -0
- data/rust/src/kernel/expression_operators/positional.rs +126 -0
- data/rust/src/kernel/expression_operators/presence.rs +101 -0
- data/rust/src/kernel/expression_operators/sign_test.rs +16 -0
- data/rust/src/kernel/expression_operators/sized.rs +35 -0
- data/rust/src/kernel/expression_operators/text.rs +79 -0
- data/rust/src/kernel/expression_operators/to_string.rs +18 -0
- data/rust/src/kernel/json.rs +779 -0
- data/rust/src/kernel/mod.rs +133 -0
- data/rust/src/kernel/named_query.rs +219 -0
- data/rust/src/kernel/orchestrate.rs +1810 -0
- data/rust/src/kernel/pattern.rs +307 -0
- data/rust/src/kernel/query_comparators.rs +206 -0
- data/rust/src/kernel/query_ordering.rs +103 -0
- data/rust/src/kernel/read_model.rs +914 -0
- data/rust/src/kernel/reference_lookup.rs +149 -0
- data/rust/src/kernel/repository.rs +468 -0
- data/rust/src/kernel/routing.rs +612 -0
- data/rust/src/kernel/vocab/aggregate_dispatch_order.rs +118 -0
- data/rust/src/kernel/vocab/entity_dispatch_order.rs +114 -0
- data/rust/src/kernel/vocab/field_hint.rs +70 -0
- data/rust/src/kernel/vocab/mod.rs +20 -0
- data/rust/src/kernel/vocab/query_comparator.rs +65 -0
- data/rust/src/kernel/vocab/refusal_template.rs +1592 -0
- data/rust/src/lib.rs +8 -0
- data/rust/src/main.rs +16 -0
- data/rust/web/.gitignore +1 -0
- data/rust/web/Cargo.lock +119 -0
- data/rust/web/Cargo.toml +18 -0
- data/rust/web/src/lib.rs +8 -0
- metadata +478 -12
- data/lib/hecks/facade/cli_door.rb +0 -178
- data/lib/hecks/facade/cli_runner.rb +0 -271
- data/lib/hecks/facade/handle.rb +0 -293
- data/lib/hecks/facade/json_door.rb +0 -247
- data/lib/hecks/facade/surface/aggregate_door.rb +0 -222
- data/lib/hecks/facade/surface/chapter.rb +0 -116
- data/lib/hecks/facade/surface.rb +0 -61
- data/lib/hecks/mcp_door_scope.rb +0 -176
|
@@ -2,12 +2,8 @@ require_relative "word_gate"
|
|
|
2
2
|
module Hecks
|
|
3
3
|
module Bluebook
|
|
4
4
|
module DSL
|
|
5
|
-
# Parses an `aggregate "Name" do ... end` block
|
|
6
|
-
#
|
|
7
|
-
# (`rename`/`move`/`convert`/`retype`/`compute`/`rekey`/`backfill`/
|
|
8
|
-
# `drop`) that carry one era's stored data forward to the next, plus
|
|
9
|
-
# `unresolved` markers the scaffold writes wherever it cannot decide a
|
|
10
|
-
# rule for itself.
|
|
5
|
+
# Parses an `aggregate "Name" do ... end` block in a `.translation` file into a
|
|
6
|
+
# `TranslationAggregate`: the rules that carry one era's stored data to the next.
|
|
11
7
|
class TranslationAggregateBuilder
|
|
12
8
|
GRAMMAR_CONTEXT = "TranslationAggregate".freeze
|
|
13
9
|
|
|
@@ -33,17 +29,6 @@ module Hecks
|
|
|
33
29
|
|
|
34
30
|
# Declares a field rename with no other change: same path, new name.
|
|
35
31
|
#
|
|
36
|
-
# Answers the `rename` word (and, via the same table rows, its
|
|
37
|
-
# siblings `move`/`convert`/`retype`/`compute`/`rekey`/`backfill`
|
|
38
|
-
# below) through the table's `calls:` column — item #13's full
|
|
39
|
-
# metaprogrammed dispatch (slice 4c). Each is carried in
|
|
40
|
-
# `GenericDispatch::BOOTSTRAP_CALLS_FALLBACK` like every other
|
|
41
|
-
# `calls:`-routed word, but none of their rows are ever consulted
|
|
42
|
-
# during real bootstrap: `translation.bluebook` describes its own
|
|
43
|
-
# structure with aggregate/entity/attribute, never with these —
|
|
44
|
-
# they're words for real, user-authored `.translation` files
|
|
45
|
-
# only, loaded after the grammar table already exists.
|
|
46
|
-
#
|
|
47
32
|
# @param old_name [Symbol, String] the field's name in the held era
|
|
48
33
|
# @param to [Symbol, String] the field's name in the destination era
|
|
49
34
|
# @return [void]
|
|
@@ -72,12 +57,8 @@ module Hecks
|
|
|
72
57
|
# Declares an exhaustive value-to-value mapping for a field with nothing structural in
|
|
73
58
|
# common with its replacement.
|
|
74
59
|
#
|
|
75
|
-
#
|
|
76
|
-
#
|
|
77
|
-
# that can appear in old data has a named destination. Paths
|
|
78
|
-
# follow `move`'s convention: dotted reaches a value-object member.
|
|
79
|
-
#
|
|
80
|
-
# @param old_path [String, Symbol] the field's path in the held era
|
|
60
|
+
# @param old_path [String, Symbol] the field's path in the held era; dotted reaches a
|
|
61
|
+
# value-object member
|
|
81
62
|
# @param to [String, Symbol] the field's path in the destination era
|
|
82
63
|
# @param values [Hash] every old value mapped to its destination value
|
|
83
64
|
# @return [Array<Bluebook::TranslationConvert>] every convert declared so far, this one
|
|
@@ -92,20 +73,13 @@ module Hecks
|
|
|
92
73
|
@converts << TranslationConvert.new(old_path.to_s, to.to_s, values)
|
|
93
74
|
end
|
|
94
75
|
|
|
95
|
-
# `drop`
|
|
96
|
-
#
|
|
97
|
-
# deliberate acknowledgment that an attribute's data does not
|
|
98
|
-
# survive the rename — the honest alternative to letting it
|
|
99
|
-
# vanish because nothing named it. A blank-guarded, kind-driven
|
|
100
|
-
# coerce-and-append with nothing else, now executed by
|
|
101
|
-
# `GenericDispatch`.
|
|
76
|
+
# `drop` (attribute data that does not survive the rename) is dispatched directly off
|
|
77
|
+
# the grammar table by `GenericDispatch`; no method answers it here.
|
|
102
78
|
|
|
103
79
|
# Declares that a type's name changed while its member structure stayed the same.
|
|
104
80
|
#
|
|
105
|
-
#
|
|
106
|
-
#
|
|
107
|
-
# name, so nothing moves — this declares that the pair of names
|
|
108
|
-
# means the same shape, which is what lets the era diff accept it.
|
|
81
|
+
# Nothing moves: stored data never carries the type name, so this only tells the era
|
|
82
|
+
# diff that the two names mean the same shape.
|
|
109
83
|
#
|
|
110
84
|
# @param old_type [String, Symbol] the type's name in the held era
|
|
111
85
|
# @param to [String, Symbol] the type's name in the destination era
|
|
@@ -121,10 +95,8 @@ module Hecks
|
|
|
121
95
|
|
|
122
96
|
# Declares a field computed by a hand-written Postgres SQL expression.
|
|
123
97
|
#
|
|
124
|
-
#
|
|
125
|
-
#
|
|
126
|
-
# never proposes one; a human writes it, and the audit's
|
|
127
|
-
# human-sampled review is its only verification.
|
|
98
|
+
# The scaffold never proposes one; a human writes it, and human-sampled review is
|
|
99
|
+
# its only verification.
|
|
128
100
|
#
|
|
129
101
|
# @param old_path [String, Symbol] the source field's path in the held era
|
|
130
102
|
# @param to [String, Symbol] the field's path in the destination era
|
|
@@ -143,14 +115,8 @@ module Hecks
|
|
|
143
115
|
# Declares a hand-written Postgres SQL expression that recomputes the aggregate's own
|
|
144
116
|
# identity.
|
|
145
117
|
#
|
|
146
|
-
#
|
|
147
|
-
#
|
|
148
|
-
# transform (`compute`): the record's key. No path arguments,
|
|
149
|
-
# unlike every rule above — nothing is consumed from or moved into
|
|
150
|
-
# `state`, only what identifies the record is recomputed. Same
|
|
151
|
-
# SQL-only, Postgres-only, human-reviewed-sample-is-the-only-
|
|
152
|
-
# verification shape `compute` already has, and for the same
|
|
153
|
-
# reason: there is nothing in-process to check this against.
|
|
118
|
+
# No path arguments, unlike the rules above: only the record's key is recomputed, not
|
|
119
|
+
# state moved into it. Verified the same human-reviewed-only way as `compute`.
|
|
154
120
|
#
|
|
155
121
|
# @param sql [String] the Postgres SQL expression computing the destination identity
|
|
156
122
|
# @return [Array<Bluebook::TranslationRekey>] every rekey declared so far, this one last
|
|
@@ -164,17 +130,8 @@ module Hecks
|
|
|
164
130
|
# Declares a newly added, required attribute and the default existing records read
|
|
165
131
|
# until a real value is written.
|
|
166
132
|
#
|
|
167
|
-
#
|
|
168
|
-
#
|
|
169
|
-
# never held this field at all; `default` is what an existing
|
|
170
|
-
# record reads until the next command against it writes a real
|
|
171
|
-
# value. Adapter-agnostic, unlike `compute` — applied the same
|
|
172
|
-
# in-process way rename/move/drop already are
|
|
173
|
-
# (`Lineage#translate`), because there is nothing to compute here,
|
|
174
|
-
# only a value to declare. This is what
|
|
175
|
-
# `EraGuard.refuse_unsafe_addition!` asks for when a non-optional
|
|
176
|
-
# attribute with no default: could leave an existing record with
|
|
177
|
-
# the field genuinely absent.
|
|
133
|
+
# What `EraGuard.refuse_unsafe_addition!` requires before a non-optional attribute
|
|
134
|
+
# with no default can boot.
|
|
178
135
|
#
|
|
179
136
|
# @param name [String, Symbol] the new attribute's name
|
|
180
137
|
# @param default [Object] the value an existing record reads until it is written for real
|
|
@@ -190,22 +147,6 @@ module Hecks
|
|
|
190
147
|
|
|
191
148
|
# Always refuses to boot: marks a field the scaffold could not decide a rule for.
|
|
192
149
|
#
|
|
193
|
-
# The scaffold writes this where it cannot decide; a file carrying
|
|
194
|
-
# one can only boot into this refusal — never a guess.
|
|
195
|
-
#
|
|
196
|
-
# Answers the `unresolved` word through the table's `calls:`
|
|
197
|
-
# column — item #13's full metaprogrammed
|
|
198
|
-
# dispatch (slice 4). Builds its own message with real branching
|
|
199
|
-
# (empty vs. named candidates, a special :identity case), not a
|
|
200
|
-
# fixed string a boolean `refuses:` flag could express. Carried in
|
|
201
|
-
# `GenericDispatch::BOOTSTRAP_CALLS_FALLBACK` like every other
|
|
202
|
-
# `calls:`-routed word, but that row is never consulted during
|
|
203
|
-
# real bootstrap (checked directly, not assumed):
|
|
204
|
-
# translation.bluebook (loaded during bootstrap, to describe the
|
|
205
|
-
# translation DSL itself) never writes `unresolved` — that word is
|
|
206
|
-
# only ever used by real, user-authored `.translation` files,
|
|
207
|
-
# loaded well after the grammar table already exists.
|
|
208
|
-
#
|
|
209
150
|
# @param name [String, Symbol] the unresolved field's name, or `:identity` for an
|
|
210
151
|
# unresolved identity change
|
|
211
152
|
# @param candidates [Array<String, Symbol>] paths the scaffold considered but could not
|
|
@@ -216,14 +157,8 @@ module Hecks
|
|
|
216
157
|
raise Malformed, unresolved_message(name, candidates)
|
|
217
158
|
end
|
|
218
159
|
|
|
219
|
-
# `method_missing`/`respond_to_missing?`
|
|
220
|
-
#
|
|
221
|
-
# richer, table-driven "must be rename, move, convert, ..." refusal
|
|
222
|
-
# on a genuinely undefined call than a hand-typed list could —
|
|
223
|
-
# the exact "hardcoded legal-word list" this whole arc's item #13
|
|
224
|
-
# exists to close. A word admitted
|
|
225
|
-
# elsewhere in the grammar but not in this context still gets that
|
|
226
|
-
# richer refusal.
|
|
160
|
+
# `method_missing`/`respond_to_missing?` (via the included `WordGate`) give a
|
|
161
|
+
# table-driven refusal naming the legal words, rather than a hand-typed list.
|
|
227
162
|
|
|
228
163
|
# Assembles the declared rules into a `TranslationAggregate`.
|
|
229
164
|
#
|
|
@@ -265,11 +200,8 @@ module Hecks
|
|
|
265
200
|
end
|
|
266
201
|
end
|
|
267
202
|
|
|
268
|
-
# Parses a whole `.translation` file into a `Translation
|
|
269
|
-
#
|
|
270
|
-
# translation blocks (each built by `TranslationAggregateBuilder`
|
|
271
|
-
# above), and any `retired` aggregates that do not exist in the
|
|
272
|
-
# destination era.
|
|
203
|
+
# Parses a whole `.translation` file into a `Translation`: the domain's `from:`/`to:`
|
|
204
|
+
# era pair, its `aggregate` blocks, and any `retired` aggregates.
|
|
273
205
|
class TranslationBuilder
|
|
274
206
|
GRAMMAR_CONTEXT = "Translation".freeze
|
|
275
207
|
|
|
@@ -291,43 +223,25 @@ module Hecks
|
|
|
291
223
|
@retired = []
|
|
292
224
|
end
|
|
293
225
|
|
|
294
|
-
# Declares one aggregate's own translation rules
|
|
295
|
-
#
|
|
296
|
-
# Answers the `aggregate` word through the table's `calls:`
|
|
297
|
-
# column — item #13's full metaprogrammed
|
|
298
|
-
# dispatch (slice 4c). Not bootstrap-reachable — this "Translation"
|
|
299
|
-
# -context `aggregate` (opens a TranslationAggregateBuilder) is a
|
|
300
|
-
# different (context, word) pair than "Bluebook"-context
|
|
301
|
-
# `aggregate` (the one translation.bluebook itself is described
|
|
302
|
-
# with), so it never describes the language's own
|
|
303
|
-
# translation chapter.
|
|
226
|
+
# Declares one aggregate's own translation rules; a distinct (context, word) pair
|
|
227
|
+
# from "Bluebook"-context `aggregate`, despite sharing the word.
|
|
304
228
|
#
|
|
305
229
|
# @param name [String, Symbol] the aggregate's name in the destination era
|
|
306
230
|
# @param was [String, Symbol, nil] the aggregate's earlier name, when renamed
|
|
307
|
-
# @yield the
|
|
308
|
-
#
|
|
309
|
-
# @
|
|
310
|
-
# so far, this one last
|
|
311
|
-
# @raise [Bluebook::DSL::Malformed] if `name` is empty, or any rule in the body fails
|
|
312
|
-
# its own checks
|
|
231
|
+
# @yield the translation body, evaluated against a `TranslationAggregateBuilder`
|
|
232
|
+
# @return [Array<Bluebook::TranslationAggregate>] every declared so far, this one last
|
|
233
|
+
# @raise [Bluebook::DSL::Malformed] if `name` is empty, or a body rule fails its own checks
|
|
313
234
|
def aggregate_impl(name, was: nil, &block)
|
|
314
235
|
builder = TranslationAggregateBuilder.new(name, was: was)
|
|
315
236
|
builder.instance_eval(&block) if block
|
|
316
237
|
@aggregates << builder.build
|
|
317
238
|
end
|
|
318
239
|
|
|
319
|
-
# `retired` (an aggregate
|
|
320
|
-
#
|
|
321
|
-
|
|
322
|
-
#
|
|
323
|
-
#
|
|
324
|
-
# table-unification survey) — so no hand-written method answers it here.
|
|
325
|
-
|
|
326
|
-
# `method_missing`/`respond_to_missing?` answer off the self-hosted
|
|
327
|
-
# grammar table (via the `include`d `WordGate`, above, the same
|
|
328
|
-
# mechanism `TranslationAggregateBuilder`'s own comment describes
|
|
329
|
-
# one level up) instead of a hand-typed "it declares aggregate
|
|
330
|
-
# blocks and retired aggregates" message.
|
|
240
|
+
# `retired` (an aggregate gone outright, not renamed) is dispatched straight off the
|
|
241
|
+
# grammar table by `GenericDispatch`; no method answers it here.
|
|
242
|
+
|
|
243
|
+
# `method_missing`/`respond_to_missing?` (via the included `WordGate`) give the same
|
|
244
|
+
# table-driven refusal `TranslationAggregateBuilder` uses.
|
|
331
245
|
|
|
332
246
|
# Assembles the declared era pair, aggregates and retirements, judged by the translation
|
|
333
247
|
# language.
|
|
@@ -2,13 +2,8 @@ require_relative "word_gate"
|
|
|
2
2
|
module Hecks
|
|
3
3
|
module Bluebook
|
|
4
4
|
module DSL
|
|
5
|
-
# Parses a `value_object "Name" do ... end` block into a
|
|
6
|
-
#
|
|
7
|
-
# and referenceable by name from sibling value objects on the same
|
|
8
|
-
# aggregate, `RuleReference`), and its `member` rows when it's a
|
|
9
|
-
# closed set (either bare `one_of` member lines, or the single-field
|
|
10
|
-
# `attribute ..., one_of: [...]` shorthand `install_inline_closed_set`
|
|
11
|
-
# installs).
|
|
5
|
+
# Parses a `value_object "Name" do ... end` block into a `ValueObject`: its attributes,
|
|
6
|
+
# invariants and, for a closed set, its `member` rows.
|
|
12
7
|
class ValueObjectBuilder
|
|
13
8
|
GRAMMAR_CONTEXT = "ValueObject".freeze
|
|
14
9
|
|
|
@@ -27,64 +22,17 @@ module Hecks
|
|
|
27
22
|
@owner_value_objects = owner_value_objects
|
|
28
23
|
end
|
|
29
24
|
|
|
30
|
-
#
|
|
31
|
-
#
|
|
32
|
-
# directly in the `value_object` body with no `one_of do ... end`
|
|
33
|
-
# around them — `build`'s own `closed_set: @closed_set ||
|
|
34
|
-
# !@members.empty?` already treats a non-empty `@members` as closed,
|
|
35
|
-
# so nothing else has to change for that to work. A single-field set
|
|
36
|
-
# has an even shorter spelling: `attribute`'s own `one_of:` keyword
|
|
37
|
-
# (`AttributeCollector#install_inline_closed_set`, overridden below).
|
|
38
|
-
#
|
|
39
|
-
# This also removes a real, documented landmine: the block form
|
|
40
|
-
# collided with `AttributeCollector#one_of`'s own type-position
|
|
41
|
-
# method (`one_of("a", "b")`, different arity) the moment both were
|
|
42
|
-
# mixed into the same builder — a value_object could never actually
|
|
43
|
-
# use the inline form on one of its own attributes. One `one_of`
|
|
44
|
-
# method now, not two.
|
|
45
|
-
#
|
|
46
|
-
# Legacy under shadow-parsing (S0a's own bridge) — frozen era text
|
|
47
|
-
# still writes the block form (2 locations in
|
|
48
|
-
# `examples/banking/data/eras/banking/1.bluebook`, duplicated once
|
|
49
|
-
# more in that era's own archive copy), so `EraGuard.shadow_parse`
|
|
50
|
-
# still needs to read it. `block_given?` is what tells the two
|
|
51
|
-
# calling shapes apart: the type-position form
|
|
52
|
-
# (`one_of("a", "b")`) never passes a block, only the wrapper does.
|
|
53
|
-
# Declares this value object as a closed set, either from bare values or (under
|
|
54
|
-
# shadow-parsing) a legacy `do ... end` wrapper of `member` lines.
|
|
55
|
-
#
|
|
56
|
-
# Answers the `one_of` word through the table's `calls:` column —
|
|
57
|
-
# item #13's full metaprogrammed dispatch
|
|
58
|
-
# (slice 5). Same name as `AttributeCollector#one_of_impl`'s own
|
|
59
|
-
# — required for the `super(*values)` call below to keep
|
|
60
|
-
# resolving; see that method's own comment. Reached directly
|
|
61
|
-
# through its own "ValueObject"-context Keyword row (the
|
|
62
|
-
# block-wrapper form has its own row, distinct from "Type"'s),
|
|
63
|
-
# not through the Type-position fallback this word's other
|
|
64
|
-
# context uses.
|
|
65
|
-
#
|
|
66
|
-
# @param values [Array<String, Symbol>] permitted values, given bare (no block); at
|
|
67
|
-
# least one is required
|
|
68
|
-
# @yield a legacy `member` wrapper body; only read under shadow-parsing
|
|
69
|
-
# @return [void]
|
|
70
|
-
# @raise [Bluebook::DSL::Malformed] if given no values and no block, or a block outside
|
|
71
|
-
# shadow-parsing
|
|
25
|
+
# Bare values declare a closed set; the block form is read only under shadow-parsing,
|
|
26
|
+
# because frozen era text still writes it. Only the wrapper passes a block.
|
|
72
27
|
def one_of_impl(*values, &block)
|
|
73
28
|
unless block
|
|
74
|
-
#
|
|
75
|
-
# merely inert: it names a closed set with nothing in it. The
|
|
76
|
-
# original block form caught this by a side effect (`@closed_set
|
|
77
|
-
# = true` ran unconditionally, before the `if block`), and this
|
|
78
|
-
# keeps the same refusal rather than letting the call fall
|
|
79
|
-
# through and silently do nothing.
|
|
29
|
+
# An empty one_of names a closed set with nothing in it; refuse rather than no-op.
|
|
80
30
|
if values.empty?
|
|
81
31
|
raise Malformed,
|
|
82
32
|
"#{@name}'s one_of names no values — one_of(\"a\", \"b\") takes at least one, or " \
|
|
83
33
|
"give the attribute its own one_of: [...] for a named closed set"
|
|
84
34
|
end
|
|
85
35
|
|
|
86
|
-
# AttributeCollector's own `one_of(*values)` — Ruby's normal
|
|
87
|
-
# `super` reaches the included module's method from here.
|
|
88
36
|
return super(*values)
|
|
89
37
|
end
|
|
90
38
|
|
|
@@ -98,62 +46,24 @@ module Hecks
|
|
|
98
46
|
instance_eval(&block)
|
|
99
47
|
end
|
|
100
48
|
|
|
101
|
-
# Declares one member row of a closed set, one value per attribute.
|
|
102
|
-
#
|
|
103
|
-
# Answers the `member` word through the table's `calls:` column —
|
|
104
|
-
# item #13's full metaprogrammed dispatch (slice 4c). Bootstrap-reachable, in
|
|
105
|
-
# `GenericDispatch::BOOTSTRAP_CALLS_FALLBACK`.
|
|
106
|
-
#
|
|
107
|
-
# @param fields [Hash{Symbol => Object}] each declared attribute's name mapped to this
|
|
108
|
-
# member's value for it
|
|
109
|
-
# @return [Array<Hash{Symbol => Object}>] every member declared so far, this one last
|
|
110
|
-
# @raise [Bluebook::DSL::Malformed] if `fields` is empty
|
|
111
49
|
def member_impl(**fields)
|
|
112
50
|
raise Malformed, "#{@name} declared an empty member" if fields.empty?
|
|
113
51
|
|
|
114
52
|
@members << fields
|
|
115
53
|
end
|
|
116
54
|
|
|
117
|
-
#
|
|
118
|
-
#
|
|
119
|
-
# "a precondition shared across commands is declared once... a
|
|
120
|
-
# command references it by name"), one level over: a rule
|
|
121
|
-
# shared across sibling value objects on the same aggregate,
|
|
122
|
-
# declared once, on the first one to need it. Real, live
|
|
123
|
-
# redundancy this closes: `Account`'s own `Money`/`PositiveMoney`
|
|
124
|
-
# both declared `invariant("a currency is a three-letter code")
|
|
125
|
-
# { currency.to_s.size == 3 }`, byte for byte. Declare it before
|
|
126
|
-
# the value objects that reference it — resolution happens at
|
|
127
|
-
# the referencing value object's own build time, against
|
|
128
|
-
# whatever sibling value objects the aggregate has already
|
|
129
|
-
# built, the same ordering rule `given` carries.
|
|
130
|
-
# Declares a rule this value object's own value must satisfy, or references one a sibling
|
|
131
|
-
# value object on the same aggregate already declared.
|
|
132
|
-
#
|
|
133
|
-
# Answers the `invariant` word through the table's `calls:` column —
|
|
134
|
-
# item #13's full metaprogrammed dispatch (slice 4b). Bootstrap-reachable, in
|
|
135
|
-
# `GenericDispatch::BOOTSTRAP_CALLS_FALLBACK`.
|
|
136
|
-
#
|
|
137
|
-
# @param description [String] the rule's description; also the name a sibling value
|
|
138
|
-
# object references it by when no block is given
|
|
139
|
-
# @yield the predicate body; evaluated for its extracted source, never called directly
|
|
140
|
-
# @return [void]
|
|
141
|
-
# @raise [Bluebook::DSL::Malformed] if given a block whose source cannot be extracted or
|
|
142
|
-
# uses a pattern construct engines disagree on, or given no block and no sibling value
|
|
143
|
-
# object on this aggregate declares a rule with this description
|
|
55
|
+
# Without a block this references a rule a sibling value object already declared.
|
|
56
|
+
# Resolution runs at build time, so declare the rule before its referrers.
|
|
144
57
|
def invariant_impl(description, &predicate)
|
|
145
58
|
return reference_named_invariant(description) unless predicate
|
|
146
59
|
|
|
147
|
-
# moved to the language: given "a rule says what it means", on Shape.Assert
|
|
148
|
-
|
|
149
60
|
@invariants << build_rule(Invariant, description, predicate, owner_name: @name, word: "invariant",
|
|
150
61
|
extraction_failure: "it would be a rule the IR cannot carry")
|
|
151
62
|
end
|
|
152
63
|
|
|
153
64
|
private
|
|
154
65
|
|
|
155
|
-
#
|
|
156
|
-
# method's own comment for why this is a live scan, not a pool.
|
|
66
|
+
# A live scan of the siblings built so far, not a pool (see RuleReference).
|
|
157
67
|
def reference_named_invariant(description)
|
|
158
68
|
verify_resolves_via!("invariant", "ValueObject", "sibling_scan")
|
|
159
69
|
named = resolve_sibling_scan(@owner_value_objects, description, reader: :invariants) ||
|
|
@@ -167,12 +77,6 @@ module Hecks
|
|
|
167
77
|
|
|
168
78
|
public
|
|
169
79
|
|
|
170
|
-
# Assembles the declared attributes, invariants and members into a `ValueObject`.
|
|
171
|
-
#
|
|
172
|
-
# @return [Bluebook::ValueObject] the built value object; `closed_set` is true when any
|
|
173
|
-
# member was declared
|
|
174
|
-
# @raise [Bluebook::DSL::Malformed] if `one_of:` was declared on an attribute alongside
|
|
175
|
-
# other attributes on the same value object
|
|
176
80
|
def build
|
|
177
81
|
if @inline_closed_set_field && attributes.size > 1
|
|
178
82
|
raise Malformed,
|
|
@@ -188,15 +92,6 @@ module Hecks
|
|
|
188
92
|
)
|
|
189
93
|
end
|
|
190
94
|
|
|
191
|
-
# Evaluates a `value_object` block against a fresh builder and returns what it built.
|
|
192
|
-
#
|
|
193
|
-
# @param name [String] the value object's name
|
|
194
|
-
# @param owner_value_objects [Array<Bluebook::ValueObject>] the owning aggregate's other
|
|
195
|
-
# value objects, for `invariant` references to resolve against
|
|
196
|
-
# @yield the value object body, evaluated with the builder as `self`; may be omitted
|
|
197
|
-
# @return [Bluebook::ValueObject] the built value object
|
|
198
|
-
# @raise [Bluebook::DSL::Malformed] if the body declares a rule extraction cannot read,
|
|
199
|
-
# `one_of:` on more than one attribute, or uses a word the grammar does not admit
|
|
200
95
|
def self.build(name, owner_value_objects: [], &block)
|
|
201
96
|
builder = new(name, owner_value_objects: owner_value_objects)
|
|
202
97
|
builder.instance_eval(&block) if block
|
|
@@ -205,17 +100,8 @@ module Hecks
|
|
|
205
100
|
|
|
206
101
|
private
|
|
207
102
|
|
|
208
|
-
#
|
|
209
|
-
#
|
|
210
|
-
# includer has no meaningful use for this). Private, like the
|
|
211
|
-
# module's own version it overrides — it is a callback `attribute`
|
|
212
|
-
# invokes on itself, never a word a bluebook author calls by name.
|
|
213
|
-
# Refuses a second attribute naming one_of: on the same value
|
|
214
|
-
# object outright — a single-field set names exactly one field, by
|
|
215
|
-
# construction; two would be structurally ambiguous about which
|
|
216
|
-
# field each member line belongs to. `build` refuses the other
|
|
217
|
-
# half of that same rule (this attribute coexisting with unrelated
|
|
218
|
-
# ones on a multi-field object).
|
|
103
|
+
# Private callback `attribute` invokes for `one_of:`. A single-field set names exactly one
|
|
104
|
+
# field; a second one would leave it ambiguous which field each member line belongs to.
|
|
219
105
|
def install_inline_closed_set(field, values)
|
|
220
106
|
if @inline_closed_set_field && @inline_closed_set_field != field
|
|
221
107
|
raise Malformed,
|