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
data/lib/hecks/doors.rb
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module Hecks
|
|
2
|
+
# The class-free public surface, installed per boot by `Runtime::Loader.bind_runtime`.
|
|
3
|
+
module Doors
|
|
4
|
+
# The removal release of the `Facade` and `install_facade:` spellings.
|
|
5
|
+
REMOVAL = "3.1.0".freeze
|
|
6
|
+
|
|
7
|
+
module_function
|
|
8
|
+
|
|
9
|
+
# Resolves the boot switch from the current keyword and its deprecated spelling.
|
|
10
|
+
#
|
|
11
|
+
# @param install_doors [Boolean] the `install_doors:` keyword
|
|
12
|
+
# @param install_facade [Boolean, nil] the deprecated `install_facade:` keyword; nil when
|
|
13
|
+
# the caller did not pass it
|
|
14
|
+
# @return [Boolean] whether to install the Ruby door constants
|
|
15
|
+
def install?(install_doors, install_facade = nil)
|
|
16
|
+
return install_doors if install_facade.nil?
|
|
17
|
+
|
|
18
|
+
warn "[hecks] `install_facade:` is deprecated and is removed in #{REMOVAL}; use `install_doors:`"
|
|
19
|
+
install_facade
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Installs facade constants at top level, replacing only what it installed itself.
|
|
24
|
+
# A constant owned by user code or the stdlib is left alone with a warning.
|
|
25
|
+
module Namespace
|
|
26
|
+
# A live registry, mutated by `install`, so it cannot be frozen.
|
|
27
|
+
# rubocop:disable-next Style/MutableConstant
|
|
28
|
+
GENERATED = {}
|
|
29
|
+
|
|
30
|
+
module_function
|
|
31
|
+
|
|
32
|
+
# Sets `container::name` to `value`, replacing only a constant this module installed.
|
|
33
|
+
#
|
|
34
|
+
# @param container [Module] the namespace to define the constant in
|
|
35
|
+
# @param name [String, Symbol] the constant name
|
|
36
|
+
# @param value [Module] the facade module to install
|
|
37
|
+
# @return [Object] `value` when installed, else the foreign constant left in place
|
|
38
|
+
# @raise [NameError] if `name` is not a valid constant name
|
|
39
|
+
def install(container, name, value)
|
|
40
|
+
name = name.to_s
|
|
41
|
+
|
|
42
|
+
if container.const_defined?(name, false)
|
|
43
|
+
current = container.const_get(name)
|
|
44
|
+
unless GENERATED[[container, name]].equal?(current)
|
|
45
|
+
warn "[hecks] #{name} is already defined — leaving it alone"
|
|
46
|
+
return current
|
|
47
|
+
end
|
|
48
|
+
container.send(:remove_const, name)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
container.const_set(name, value)
|
|
52
|
+
GENERATED[[container, name]] = value
|
|
53
|
+
value
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
require_relative "doors/handle"
|
|
59
|
+
require_relative "doors/ruby_door"
|
|
60
|
+
require_relative "doors/command_request"
|
|
61
|
+
require_relative "doors/json_door"
|
|
@@ -2,31 +2,10 @@ require "digest"
|
|
|
2
2
|
|
|
3
3
|
module Hecks
|
|
4
4
|
module EmbryonautBluebook
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
# ## File format
|
|
9
|
-
#
|
|
10
|
-
# One `key: value` line each for `package`, `version`, `tag`, `commit`
|
|
11
|
-
# and `digest`, then one `shape: <Domain> <label>` line per domain:
|
|
12
|
-
#
|
|
13
|
-
# package: payments
|
|
14
|
-
# version: 1.2.0
|
|
15
|
-
# tag: payments-v1.2.0
|
|
16
|
-
# commit: <full commit id the tag points at>
|
|
17
|
-
# digest: <sha256 of the vendored *.bluebook files>
|
|
18
|
-
# shape: Payments d33c23
|
|
19
|
-
#
|
|
20
|
-
# The digest is the sha256 of the `<sha256> <name>` lines of every
|
|
21
|
-
# top-level `*.bluebook` file, sorted by name. The source repository's own
|
|
22
|
-
# `bin/bluebook_digest` prints the same number for the tagged release, which
|
|
23
|
-
# is how a vendored copy is proven to be exactly what it claims to be.
|
|
5
|
+
# The digest here must match the source repo's own bin/bluebook_digest
|
|
6
|
+
# output for the same tag, or a vendored copy cannot be trusted.
|
|
24
7
|
Lock = Struct.new(:package, :version, :tag, :commit, :digest, :shape, keyword_init: true) do
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
# @param dir [String] the directory to measure
|
|
28
|
-
# @return [String, nil] 64 lowercase hex characters, nil when the directory holds
|
|
29
|
-
# no bluebook file
|
|
8
|
+
# Sorted by name so the digest never depends on directory listing order.
|
|
30
9
|
def self.digest_of(dir)
|
|
31
10
|
names = Dir.children(dir).select { |name| name.end_with?(".bluebook") }.sort
|
|
32
11
|
return nil if names.empty?
|
|
@@ -35,20 +14,12 @@ module Hecks
|
|
|
35
14
|
Digest::SHA256.hexdigest(lines.join)
|
|
36
15
|
end
|
|
37
16
|
|
|
38
|
-
# Reads a lock file.
|
|
39
|
-
#
|
|
40
|
-
# @param path [String] the `bluebook.lock` path
|
|
41
|
-
# @return [Lock, nil] the parsed lock, nil when the file does not exist
|
|
42
17
|
def self.read(path)
|
|
43
18
|
return nil unless File.file?(path)
|
|
44
19
|
|
|
45
20
|
parse(File.read(path))
|
|
46
21
|
end
|
|
47
22
|
|
|
48
|
-
# Parses a lock's text.
|
|
49
|
-
#
|
|
50
|
-
# @param text [String] the file's content
|
|
51
|
-
# @return [Lock] the lock, with `shape` as an Array of lines (empty when none)
|
|
52
23
|
def self.parse(text)
|
|
53
24
|
fields = { shape: [] }
|
|
54
25
|
text.each_line do |line|
|
|
@@ -60,9 +31,6 @@ module Hecks
|
|
|
60
31
|
new(**fields.slice(*members))
|
|
61
32
|
end
|
|
62
33
|
|
|
63
|
-
# Renders the lock as the text written to `bluebook.lock`.
|
|
64
|
-
#
|
|
65
|
-
# @return [String] the lines described above, newline terminated
|
|
66
34
|
def to_s
|
|
67
35
|
header = %i[package version tag commit digest].map { |key| "#{key}: #{self[key]}\n" }
|
|
68
36
|
(header + Array(shape).map { |line| "shape: #{line}\n" }).join
|
|
@@ -2,21 +2,10 @@ require_relative "../ports/persistence/plugins/era/storage_shape"
|
|
|
2
2
|
|
|
3
3
|
module Hecks
|
|
4
4
|
module EmbryonautBluebook
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
# A label is what `PostgresEra` mints an era from, so a vendored package
|
|
8
|
-
# whose label changed is one whose next deploy mints a new era. This reads
|
|
9
|
-
# the files the way the era guard reads a held era's text: parse only, no
|
|
10
|
-
# boot, no wiring, no database, each file loaded into a scratch registry.
|
|
5
|
+
# A label change here means a vendored package's next deploy mints a new PostgresEra.
|
|
11
6
|
module Shape
|
|
12
7
|
module_function
|
|
13
8
|
|
|
14
|
-
# Measures every domain a directory's bluebook files declare.
|
|
15
|
-
#
|
|
16
|
-
# @param dir [String] a directory holding `*.bluebook` files
|
|
17
|
-
# @return [Array<String>] one `"<Domain> <label>"` line per domain, sorted by domain name
|
|
18
|
-
# @raise [Vendoring::Error] if the directory holds no bluebook file, or the files do
|
|
19
|
-
# not load, the refusal a boot would raise
|
|
20
9
|
def labels(dir)
|
|
21
10
|
files = Dir[File.join(dir, "*.bluebook")]
|
|
22
11
|
raise Vendoring::Error, "no *.bluebook files in #{dir}" if files.empty?
|
|
@@ -26,11 +15,6 @@ module Hecks
|
|
|
26
15
|
end
|
|
27
16
|
end
|
|
28
17
|
|
|
29
|
-
# Loads bluebook files into a registry of their own.
|
|
30
|
-
#
|
|
31
|
-
# @param files [Array<String>] absolute bluebook file paths, in load order
|
|
32
|
-
# @return [Runtime::Registry] the scratch registry holding what the files declared
|
|
33
|
-
# @raise [Vendoring::Error] if any file fails to load
|
|
34
18
|
def load_all(files)
|
|
35
19
|
scratch = Runtime::Registry.new
|
|
36
20
|
library = Ports::Loading.bootstrap
|
|
@@ -5,32 +5,8 @@ require_relative "shape"
|
|
|
5
5
|
|
|
6
6
|
module Hecks
|
|
7
7
|
module EmbryonautBluebook
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
# ## What it does
|
|
11
|
-
#
|
|
12
|
-
# Pins the package's top-level `bluebook/*.bluebook` files from one commit
|
|
13
|
-
# of a local source repository into
|
|
14
|
-
# `<root>/vendor/embryonaut_bluebooks/<name>/bluebook/`, where `load!`
|
|
15
|
-
# resolves them. Only bluebook files are taken: a `.hecksagon`, `.port` or
|
|
16
|
-
# `.adapter` is a wiring decision for whoever deploys, never part of the
|
|
17
|
-
# vendored package.
|
|
18
|
-
#
|
|
19
|
-
# ## Releases and bare commits
|
|
20
|
-
#
|
|
21
|
-
# The source repository tags each release `<name>-v<X.Y.Z>` on a commit
|
|
22
|
-
# whose `<name>/bluebook.yml` says that version. A release pin (`ref` nil for
|
|
23
|
-
# the newest tag, `"1.2.0"`, or the tag name) also writes `bluebook.lock`,
|
|
24
|
-
# which records version, tag, commit, content digest and storage shape, and
|
|
25
|
-
# holds two refusals, because a production project is bound to `PostgresEra`:
|
|
26
|
-
#
|
|
27
|
-
# - a version lower than the vendored one, unless `allow_downgrade`;
|
|
28
|
-
# - a storage-shape change that does not raise the version by at least a
|
|
29
|
-
# minor, so a new era shows in the version number and not only in a hash.
|
|
30
|
-
#
|
|
31
|
-
# Any other commit-ish pins that commit and writes only the marker, with no
|
|
32
|
-
# lock and no version checks. Either way nothing on disk changes when a
|
|
33
|
-
# pin is refused or its files do not load.
|
|
8
|
+
# Pins a package's `bluebook/*.bluebook` files from a source repo commit; a
|
|
9
|
+
# release pin also refuses a downgrade or an era-breaking storage-shape change.
|
|
34
10
|
class Vendor
|
|
35
11
|
# A release version, `X.Y.Z`.
|
|
36
12
|
VERSION = /\A\d+\.\d+\.\d+\z/
|
|
@@ -38,33 +14,17 @@ module Hecks
|
|
|
38
14
|
# A package name is a directory name and a bluebook name stem.
|
|
39
15
|
NAME = /\A[a-z][a-z0-9_]*\z/
|
|
40
16
|
|
|
41
|
-
# What a vendoring changed
|
|
42
|
-
#
|
|
43
|
-
# @!attribute [r] previous_version
|
|
44
|
-
# @return [String, nil] the version recorded before, nil when there was none
|
|
45
|
-
# @!attribute [r] previous_shape
|
|
46
|
-
# @return [Array<String>, nil] the shape lines measured before, nil when there was
|
|
47
|
-
# no earlier copy
|
|
17
|
+
# What a vendoring changed; previous_version/previous_shape are nil when
|
|
18
|
+
# there was no earlier vendored copy.
|
|
48
19
|
Result = Struct.new(:package, :commit, :version, :tag, :digest, :shape,
|
|
49
20
|
:previous_version, :previous_shape, :dir, keyword_init: true) do
|
|
50
|
-
# Says whether this was a release pin, which writes a lock.
|
|
51
|
-
#
|
|
52
|
-
# @return [Boolean] true for a release, false for a bare commit
|
|
53
21
|
def release? = !tag.nil?
|
|
54
22
|
|
|
55
|
-
# Says whether the storage shape moved since the earlier copy.
|
|
56
|
-
#
|
|
57
|
-
# @return [Boolean] true when an earlier copy existed and its shape differs
|
|
58
23
|
def shape_changed? = !previous_shape.nil? && previous_shape != shape
|
|
59
24
|
end
|
|
60
25
|
|
|
61
|
-
#
|
|
62
|
-
#
|
|
63
|
-
# @param ref [String, nil] `X.Y.Z`, a release tag name, any commit-ish, or nil for the
|
|
64
|
-
# newest release
|
|
65
|
-
# @param root [String] the consuming project's root
|
|
66
|
-
# @param allow_downgrade [Boolean] whether a release older than the vendored one is allowed
|
|
67
|
-
# @raise [Vendoring::Error] if the name is not a plain package name
|
|
26
|
+
# `ref` accepts `X.Y.Z`, a release tag name, any commit-ish, or nil for
|
|
27
|
+
# the newest release.
|
|
68
28
|
def initialize(name, from:, root:, ref: nil, allow_downgrade: false)
|
|
69
29
|
@name = name.to_s
|
|
70
30
|
raise Vendoring::Error, "#{name.inspect} is not a package name" unless @name.match?(NAME)
|
|
@@ -76,10 +36,6 @@ module Hecks
|
|
|
76
36
|
end
|
|
77
37
|
|
|
78
38
|
# Pins the package and reports what changed.
|
|
79
|
-
#
|
|
80
|
-
# @return [Result] the commit, version and shape now vendored
|
|
81
|
-
# @raise [Vendoring::Error] if the release or commit is not found, the tagged commit
|
|
82
|
-
# disagrees with its own version, the files do not load, or a refusal above applies
|
|
83
39
|
def call
|
|
84
40
|
tag, version = release
|
|
85
41
|
previous_version, previous_shape = existing
|
|
@@ -99,9 +55,8 @@ module Hecks
|
|
|
99
55
|
|
|
100
56
|
def package_dir = File.join(@root, "vendor", "embryonaut_bluebooks", @name)
|
|
101
57
|
|
|
102
|
-
# Resolves what `ref` asks for into a release tag and its version
|
|
103
|
-
#
|
|
104
|
-
# @return [Array(String, String), nil] tag and version for a release, nil for a bare commit
|
|
58
|
+
# Resolves what `ref` asks for into a release tag and its version, or nil
|
|
59
|
+
# for a bare commit.
|
|
105
60
|
def release
|
|
106
61
|
tag = release_tag
|
|
107
62
|
return nil unless tag
|
|
@@ -3,21 +3,10 @@ require_relative "vendor"
|
|
|
3
3
|
|
|
4
4
|
module Hecks
|
|
5
5
|
module EmbryonautBluebook
|
|
6
|
-
# The command line behind `
|
|
6
|
+
# The command line behind `hecks vendor`; lives in the gem so a
|
|
7
|
+
# consuming project reaches it through its own bundle, no script to copy.
|
|
7
8
|
#
|
|
8
|
-
#
|
|
9
|
-
# through its own bundle without a copy of the script:
|
|
10
|
-
#
|
|
11
|
-
# bundle exec ruby -rhecks \
|
|
12
|
-
# -e 'exit Hecks::EmbryonautBluebook::VendorCli.run(ARGV)' payments@1.2.0
|
|
13
|
-
#
|
|
14
|
-
# ## Usage
|
|
15
|
-
#
|
|
16
|
-
# vendor_bluebook <package>[@<version-or-commit>] [--from <path>] [--root <path>]
|
|
17
|
-
#
|
|
18
|
-
# `--from` defaults to `$EMBRYONAUT_BLUEBOOKS_SRC` and `--root` to the current
|
|
19
|
-
# directory. `ALLOW_DOWNGRADE=1` in the environment permits a release older
|
|
20
|
-
# than the vendored one.
|
|
9
|
+
# vendor_bluebook <package>[@<version-or-commit>] [--from path] [--root path]
|
|
21
10
|
module VendorCli
|
|
22
11
|
USAGE = "usage: vendor_bluebook <package>[@<version-or-commit>] [--from PATH] [--root PATH]".freeze
|
|
23
12
|
|
|
@@ -44,11 +33,7 @@ module Hecks
|
|
|
44
33
|
1
|
|
45
34
|
end
|
|
46
35
|
|
|
47
|
-
#
|
|
48
|
-
#
|
|
49
|
-
# @param argv [Array<String>] the command-line arguments
|
|
50
|
-
# @param options [Hash{Symbol => String}] receives `:from` and `:root` when given
|
|
51
|
-
# @return [String, nil] the one positional argument, nil unless exactly one was given
|
|
36
|
+
# nil unless argv held exactly one positional argument.
|
|
52
37
|
def self.parse(argv, options)
|
|
53
38
|
parser = OptionParser.new
|
|
54
39
|
parser.on("--from PATH") { |path| options[:from] = path }
|
|
@@ -1,75 +1,6 @@
|
|
|
1
1
|
module Hecks
|
|
2
|
-
# A vendored, external bluebook
|
|
3
|
-
#
|
|
4
|
-
# ## What it is
|
|
5
|
-
#
|
|
6
|
-
# Same shape as Framework (framework.rb), for members that don't ship
|
|
7
|
-
# inside hecks's own lib/ at all: a separate, independently-versioned
|
|
8
|
-
# package (github.com/chrisyoung/embryonaut_bluebooks) that a consuming
|
|
9
|
-
# project vendors into its own checkout, the same way a project already
|
|
10
|
-
# vendors hecks itself (bin/vendor_hecks, vendor/hecks/).
|
|
11
|
-
#
|
|
12
|
-
# ## Recovered, not rebuilt
|
|
13
|
-
#
|
|
14
|
-
# This module and its `uses_embryonaut_bluebook`
|
|
15
|
-
# DSL word (hecksagon_builder.rb) were built on a prior commit of this
|
|
16
|
-
# repo (933d1dd), vendored out to a real consumer (a client site's domain,
|
|
17
|
-
# for embryonaut_bluebooks/payments), and then lost from this repo's own
|
|
18
|
-
# reachable history — a hard reset or rebase left no branch containing
|
|
19
|
-
# that commit. The consumer's vendor snapshot (a `git archive` of that
|
|
20
|
-
# commit, committed into their repo) was the only surviving copy; this
|
|
21
|
-
# file is ported forward from it, checked against current `main`'s own
|
|
22
|
-
# conventions rather than copied wholesale, since the two trees had
|
|
23
|
-
# otherwise diverged for weeks in both directions.
|
|
24
|
-
#
|
|
25
|
-
# ## Resolution
|
|
26
|
-
#
|
|
27
|
-
# Resolved from the consuming registry's own root, not this gem's
|
|
28
|
-
# __dir__ — Framework::ROOT can be a fixed, `__dir__`-relative constant
|
|
29
|
-
# because framework members ship inside this gem; an embryonaut bluebook
|
|
30
|
-
# ships inside the consumer's own checkout instead, at
|
|
31
|
-
# `<registry.root>/vendor/embryonaut_bluebooks/<name>/bluebook/`. There
|
|
32
|
-
# is no fixed answer until a registry (and its root) actually exists, so
|
|
33
|
-
# this resolves lazily, per call — the same reason `uses_framework`
|
|
34
|
-
# itself only runs at hecksagon-build time, when a real registry is
|
|
35
|
-
# current.
|
|
36
|
-
#
|
|
37
|
-
# ## Load order
|
|
38
|
-
#
|
|
39
|
-
# Every `.bluebook` file in the package, sorted — not just one. Unlike a
|
|
40
|
-
# framework member (one file, named by its own stem), a vendored package
|
|
41
|
-
# can span several bluebook files that reopen the same `Hecks.bluebook`
|
|
42
|
-
# (embryonaut_bluebooks/payments/bluebook/{payment,payments,policies}
|
|
43
|
-
# .bluebook all reopen "Payments"). Load order matters — policies
|
|
44
|
-
# .bluebook names `Payment::Succeed` and needs the aggregate already
|
|
45
|
-
# built — and a plain alphabetical sort already gives the right order:
|
|
46
|
-
# payment < payments < policies, the same reason that package's own
|
|
47
|
-
# files are named to fall in that order in the first place.
|
|
48
|
-
#
|
|
49
|
-
# ## Scope
|
|
50
|
-
#
|
|
51
|
-
# Only the bluebook files — same restriction Framework draws, same
|
|
52
|
-
# reason: a `.hecksagon`/`.port`/`.adapter` is a wiring decision
|
|
53
|
-
# (persistence, which processor adapter is bound) that belongs to
|
|
54
|
-
# whoever is deploying, never baked into the vendored package itself.
|
|
55
|
-
# embryonaut_bluebooks/payments ships its own mock `.hecksagon` for its
|
|
56
|
-
# own spec suite; a consumer declares its own separate
|
|
57
|
-
# `Hecks.hecksagon "Payments" do ... end` to bind real storage/adapters
|
|
58
|
-
# — see Framework's own comment for the fuller reasoning, identical here.
|
|
59
|
-
#
|
|
60
|
-
# ## Idempotency
|
|
61
|
-
#
|
|
62
|
-
# Idempotent the same way `Framework.load!` is — checked against the
|
|
63
|
-
# bluebook this package actually declares (`Naming.pascal("payments")`
|
|
64
|
-
# => "Payments"), not a separate ledger. A vendored package's directory
|
|
65
|
-
# name and its declared `Hecks.bluebook` name are the one convention
|
|
66
|
-
# this reuses from Framework rather than reinventing.
|
|
67
|
-
#
|
|
68
|
-
# ## Vendoring
|
|
69
|
-
#
|
|
70
|
-
# `vendor!` is the other direction: it pins a package from a local checkout
|
|
71
|
-
# of the registry into a consuming project's own `vendor/` tree, and is the
|
|
72
|
-
# one implementation behind `bin/vendor_bluebook` (see Vendoring and Vendor).
|
|
2
|
+
# A vendored, external bluebook: same shape as Framework, but for a
|
|
3
|
+
# package that ships outside hecks's own lib/ (see .load! and .vendor!).
|
|
73
4
|
module EmbryonautBluebook
|
|
74
5
|
autoload :Lock, File.join(__dir__, "embryonaut_bluebook/lock")
|
|
75
6
|
autoload :Shape, File.join(__dir__, "embryonaut_bluebook/shape")
|
|
@@ -100,9 +31,11 @@ module Hecks
|
|
|
100
31
|
if files.empty?
|
|
101
32
|
raise Runtime::WiringError,
|
|
102
33
|
"no vendored embryonaut bluebook named #{name.inspect} at #{dir} — " \
|
|
103
|
-
"vendor it with
|
|
34
|
+
"vendor it with hecks vendor #{name}"
|
|
104
35
|
end
|
|
105
36
|
|
|
37
|
+
# Loaded in the glob's alphabetical order; a package with several
|
|
38
|
+
# files that reopen the same bluebook is named to rely on that.
|
|
106
39
|
files.each { |file| Kernel.load(file) }
|
|
107
40
|
end
|
|
108
41
|
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Hecks
|
|
4
|
+
# The grep-based gate that keeps the query engines agreeing on what a comparator means.
|
|
5
|
+
#
|
|
6
|
+
# It fails when an engine re-grows its own comparator dispatch, or when a declared comparator
|
|
7
|
+
# lacks a shared `Comparison` case or a cross-engine agreement spec. Every declared comparator
|
|
8
|
+
# is read from `Hecks::Vocabulary`, as `Common::COMPARATORS` is: one live source, no copied list.
|
|
9
|
+
module EngineAgreement
|
|
10
|
+
# The engine files that must route every comparator through `Comparison.holds?`.
|
|
11
|
+
ENGINE_FILES = {
|
|
12
|
+
"in-memory port (Memory/Heki-backed aggregate queries)" => "lib/hecks/ports/query/in_memory.rb",
|
|
13
|
+
"reference interpreter (entity/sub-list queries, no-native-hook fallback)" => "lib/hecks/runtime/query_interpreter.rb"
|
|
14
|
+
}.freeze
|
|
15
|
+
|
|
16
|
+
# Where the shared comparison logic lives.
|
|
17
|
+
SHARED_COMPARISON_FILE = "lib/hecks/query_specification/common/comparison.rb"
|
|
18
|
+
|
|
19
|
+
# Specs that put each comparator in front of both engines. `none_in_state` needs a second
|
|
20
|
+
# aggregate and a registry, so the two dedicated growth specs cover it instead.
|
|
21
|
+
AGREEMENT_SPEC_FILES = %w[
|
|
22
|
+
spec/adapters/query_agreement_spec.rb
|
|
23
|
+
spec/query_none_in_state_aggregate_level_growth_spec.rb
|
|
24
|
+
spec/query_none_in_state_growth_spec.rb
|
|
25
|
+
].freeze
|
|
26
|
+
|
|
27
|
+
# What a check found.
|
|
28
|
+
#
|
|
29
|
+
# @!attribute [r] declared
|
|
30
|
+
# @return [Array<String>] the comparators the vocabulary declares
|
|
31
|
+
# @!attribute [r] problems
|
|
32
|
+
# @return [Array<String>] each disagreement, in words; empty when the engines agree
|
|
33
|
+
Finding = Struct.new(:declared, :problems)
|
|
34
|
+
|
|
35
|
+
module_function
|
|
36
|
+
|
|
37
|
+
# Checks the engines against the vocabulary.
|
|
38
|
+
#
|
|
39
|
+
# @param root [String] the checkout whose files are read
|
|
40
|
+
# @return [Finding] the declared comparators and every problem found
|
|
41
|
+
def check(root:)
|
|
42
|
+
require "hecks"
|
|
43
|
+
declared = Hecks::Vocabulary.symbols("QueryComparator").map(&:to_s)
|
|
44
|
+
if declared.empty?
|
|
45
|
+
return Finding.new(declared, ["Vocabulary::QueryComparator declared no comparators at all — " \
|
|
46
|
+
"vocabulary.bluebook failed to register, or Hecks::Vocabulary changed " \
|
|
47
|
+
"shape. Refusing to report a clean pass."])
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
problems = vocabulary_problems(declared) + engine_problems(root, declared) + shared_problems(root, declared)
|
|
51
|
+
Finding.new(declared, problems)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# @param declared [Array<String>] the declared comparators
|
|
55
|
+
# @return [Array<String>] a problem when the language and the runtime table disagree
|
|
56
|
+
def vocabulary_problems(declared)
|
|
57
|
+
runtime = Hecks::QuerySpecification::Common::COMPARATORS.map(&:to_s)
|
|
58
|
+
differ = (declared - runtime) | (runtime - declared)
|
|
59
|
+
return [] if differ.empty?
|
|
60
|
+
|
|
61
|
+
["Vocabulary::QueryComparator #{declared.sort.inspect} and " \
|
|
62
|
+
"QuerySpecification::Common::COMPARATORS #{runtime.sort.inspect} disagree " \
|
|
63
|
+
"(only in one: #{differ.sort.inspect}) — the language and the runtime table it drives " \
|
|
64
|
+
"have drifted apart."]
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# @param root [String] the checkout
|
|
68
|
+
# @param declared [Array<String>] the declared comparators
|
|
69
|
+
# @return [Array<String>] a problem for each engine that lost `Comparison.holds?` or grew a case
|
|
70
|
+
def engine_problems(root, declared)
|
|
71
|
+
ENGINE_FILES.flat_map do |label, relative|
|
|
72
|
+
source = File.read(File.join(root, relative))
|
|
73
|
+
found = []
|
|
74
|
+
unless source =~ /Comparison\.holds\?/
|
|
75
|
+
found << "#{relative} (#{label}) no longer calls Comparison.holds? at all — " \
|
|
76
|
+
"has it grown its own comparator dispatch again?"
|
|
77
|
+
end
|
|
78
|
+
declared.each do |comparator|
|
|
79
|
+
escaped = Regexp.escape(comparator)
|
|
80
|
+
next unless source =~ /when\s+"#{escaped}"/ || source =~ /when\s+:#{escaped}\b/
|
|
81
|
+
|
|
82
|
+
found << "#{relative} (#{label}) has its own `when #{comparator.inspect}` — comparator logic " \
|
|
83
|
+
"belongs ONLY in #{SHARED_COMPARISON_FILE}, not re-implemented per engine."
|
|
84
|
+
end
|
|
85
|
+
found
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# @param root [String] the checkout
|
|
90
|
+
# @param declared [Array<String>] the declared comparators
|
|
91
|
+
# @return [Array<String>] a problem for a comparator with no shared case, or no agreement spec
|
|
92
|
+
def shared_problems(root, declared)
|
|
93
|
+
comparison = File.read(File.join(root, SHARED_COMPARISON_FILE))
|
|
94
|
+
specs = AGREEMENT_SPEC_FILES.map { |path| File.read(File.join(root, path)) }
|
|
95
|
+
missing_case = declared.reject { |comparator| comparison =~ /when\s+"#{Regexp.escape(comparator)}"/ }
|
|
96
|
+
missing_spec = declared.reject { |comparator| specs.any? { |text| mentions_operator?(text, comparator) } }
|
|
97
|
+
|
|
98
|
+
[missing_case_problem(missing_case), missing_spec_problem(missing_spec)].compact
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# @param missing [Array<String>] comparators with no `when` case in the shared file
|
|
102
|
+
# @return [String, nil] the problem, or nil when none is missing
|
|
103
|
+
def missing_case_problem(missing)
|
|
104
|
+
return nil if missing.empty?
|
|
105
|
+
|
|
106
|
+
"#{SHARED_COMPARISON_FILE} has no `when` case for: #{missing.sort.inspect} — " \
|
|
107
|
+
"a declared comparator with no shared implementation falls to Comparison.holds?'s own `else`, " \
|
|
108
|
+
"which RAISES (by design), but only the first time anything actually asks for it at runtime. " \
|
|
109
|
+
"Add a `when #{missing.first.inspect} then ...` case before shipping this comparator."
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# @param missing [Array<String>] comparators no agreement spec exercises
|
|
113
|
+
# @return [String, nil] the problem, or nil when none is missing
|
|
114
|
+
def missing_spec_problem(missing)
|
|
115
|
+
return nil if missing.empty?
|
|
116
|
+
|
|
117
|
+
"no example in #{AGREEMENT_SPEC_FILES.inspect} exercises: #{missing.sort.inspect} — " \
|
|
118
|
+
"a comparator with a case but no cross-engine spec has never actually had both engines asked " \
|
|
119
|
+
"the same question. Add a declared query using it, with a hand-computed expected id list, to one " \
|
|
120
|
+
"of those files (see spec/adapters/query_agreement_spec.rb's own header for why a hand-computed " \
|
|
121
|
+
"oracle, not mere pairwise agreement, is the standard)."
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# @param text [String] a spec's source
|
|
125
|
+
# @param comparator [String] the comparator name, such as `"eq"`
|
|
126
|
+
# @return [Boolean] whether the spec puts the comparator in front of an engine
|
|
127
|
+
def mentions_operator?(text, comparator)
|
|
128
|
+
# Explicit form: the comparator as a bare hash key, bounded so `in:` cannot match
|
|
129
|
+
# mid-identifier.
|
|
130
|
+
return true if text =~ /(?<![A-Za-z0-9_])#{Regexp.escape(comparator)}(?![A-Za-z0-9_])\s*:/
|
|
131
|
+
|
|
132
|
+
# `eq` is normally implicit (`where(status: "open")`), so an example description naming it
|
|
133
|
+
# counts; no other comparator gets that leniency.
|
|
134
|
+
return false unless comparator == "eq"
|
|
135
|
+
|
|
136
|
+
text =~ /\b(?:it|describe)\s+"[^"]*\beq\b[^"]*"/i ? true : false
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# @param finding [Finding] what a check found
|
|
140
|
+
# @return [String] the clean-pass line
|
|
141
|
+
def clean_line(finding)
|
|
142
|
+
"check_engine_agreement: #{finding.declared.size} declared comparator(s) " \
|
|
143
|
+
"(#{finding.declared.sort.join(', ')}) — every one has a shared Comparison case, a cross-engine " \
|
|
144
|
+
"agreement spec, and both engine files still route through Comparison.holds? alone. 0 problems."
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# @param finding [Finding] what a check found
|
|
148
|
+
# @return [String] every problem, numbered, with where the mechanism is explained
|
|
149
|
+
def problem_lines(finding)
|
|
150
|
+
numbered = finding.problems.each_with_index.map { |problem, index| " #{index + 1}. #{problem}\n\n" }
|
|
151
|
+
["check_engine_agreement: #{finding.problems.size} problem(s) found:\n\n", *numbered,
|
|
152
|
+
"See lib/hecks/query_specification/common/comparison.rb's own header for what this mechanism " \
|
|
153
|
+
"replaced and why a grep-based gate exists here at all."].join
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
data/lib/hecks/facade.rb
CHANGED
|
@@ -1,59 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
module Facade
|
|
6
|
-
end
|
|
1
|
+
# The deprecated alias shim: `Hecks::Facade` is now `Hecks::Doors` and `Doors::Surface` is
|
|
2
|
+
# `Doors::RubyDoor`. Both old constants still resolve and warn; they are removed in
|
|
3
|
+
# `Hecks::Doors::REMOVAL`.
|
|
4
|
+
require_relative "doors"
|
|
7
5
|
|
|
8
|
-
|
|
6
|
+
# The root namespace; this file holds only the deprecated aliases.
|
|
7
|
+
module Hecks
|
|
8
|
+
# Resolves the constants that now live in `Doors` under their old names, warning on each use.
|
|
9
9
|
#
|
|
10
|
-
#
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
# trusting Ruby's. Each re-install replaces the previous boot's entry, so
|
|
15
|
-
# what `GENERATED` retains is one small facade module per name, not a graph
|
|
16
|
-
# per boot.
|
|
17
|
-
module Namespace
|
|
18
|
-
# Not frozen — a real registry, mutated below
|
|
19
|
-
# (`GENERATED[[container, name]] = value`). False positive for
|
|
20
|
-
# Style/MutableConstant.
|
|
21
|
-
# rubocop:disable-next Style/MutableConstant
|
|
22
|
-
GENERATED = {}
|
|
23
|
-
|
|
24
|
-
module_function
|
|
10
|
+
# Extended onto `Hecks` and `Hecks::Doors`, ahead of `Module#const_missing`.
|
|
11
|
+
module DoorsAliases
|
|
12
|
+
# Old constant name mapped to the new one, per namespace that carried it.
|
|
13
|
+
RENAMED = { Hecks => { Facade: "Hecks::Doors" }, Hecks::Doors => { Surface: "Hecks::Doors::RubyDoor" } }.freeze
|
|
25
14
|
|
|
26
|
-
#
|
|
27
|
-
#
|
|
15
|
+
# Answers a renamed constant with its replacement and a warning; anything else
|
|
16
|
+
# goes to the next `const_missing`.
|
|
28
17
|
#
|
|
29
|
-
# @param
|
|
30
|
-
#
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
# defined under `name`, which this module does not own and did not replace
|
|
35
|
-
# @raise [NameError] if `name` is not a valid constant name (raised by
|
|
36
|
-
# `const_defined?`)
|
|
37
|
-
def install(container, name, value)
|
|
38
|
-
name = name.to_s
|
|
18
|
+
# @param name [Symbol] the missing constant
|
|
19
|
+
# @return [Module] the replacement module
|
|
20
|
+
def const_missing(name)
|
|
21
|
+
target = RENAMED.fetch(self, {})[name]
|
|
22
|
+
return super unless target
|
|
39
23
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
unless GENERATED[[container, name]].equal?(current)
|
|
43
|
-
warn "[hecks] #{name} is already defined — leaving it alone"
|
|
44
|
-
return current
|
|
45
|
-
end
|
|
46
|
-
container.send(:remove_const, name)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
container.const_set(name, value)
|
|
50
|
-
GENERATED[[container, name]] = value
|
|
51
|
-
value
|
|
24
|
+
warn "[hecks] #{self}::#{name} is deprecated and is removed in #{Hecks::Doors::REMOVAL}; use #{target}"
|
|
25
|
+
Object.const_get(target)
|
|
52
26
|
end
|
|
53
27
|
end
|
|
54
|
-
end
|
|
55
28
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
require_relative "facade/json_door"
|
|
29
|
+
extend DoorsAliases
|
|
30
|
+
Doors.extend(DoorsAliases)
|
|
31
|
+
end
|