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
|
@@ -1,142 +1,47 @@
|
|
|
1
1
|
require "digest"
|
|
2
2
|
require "json"
|
|
3
|
+
require_relative "meta_validator/verdict_cache"
|
|
3
4
|
|
|
4
5
|
module Hecks
|
|
5
6
|
module Bluebook
|
|
6
7
|
# Judges a bluebook by dispatching it into the language declared in itself.
|
|
7
|
-
#
|
|
8
|
-
# `lib/hecks/language/bluebook/` declares what a bluebook is —
|
|
9
|
-
# Chapter, Root, Verb, Shape, Ask, Piece, and the rest, split across files
|
|
10
|
-
# by domain concept and merged into one chapter at load time (see
|
|
11
|
-
# GRAMMAR_FILES below). This replays a built IR into that domain and turns
|
|
12
|
-
# any refusal into a Malformed, so the meta-domain is what actually judges
|
|
13
|
-
# rather than a description sitting beside the code — for whatever rules
|
|
14
|
-
# it carries. `spec/meta_rules_spec.rb`'s own header names the plan: port
|
|
15
|
-
# the language's rules out of builder `raise Malformed` calls and into
|
|
16
|
-
# `given`/`invariant` here, where they are declarations any reader of the
|
|
17
|
-
# meta-domain can consume instead of behavior buried in a builder.
|
|
18
|
-
#
|
|
19
|
-
# ## This migration is partial, not done
|
|
20
|
-
#
|
|
21
|
-
# As of this writing the meta-domain declares 62 given/invariant/ensures
|
|
22
|
-
# rules (`Hecks::QueryIR.collect_rules` against
|
|
23
|
-
# `grammar_registry.bluebook("Bluebook")` enumerates them) —
|
|
24
|
-
# `spec/meta_rule_reachability_spec.rb` is what proves, per declaration,
|
|
25
|
-
# not per verb, that most of them still lack a spec exercising the
|
|
26
|
-
# refusal at all (see that file's own KNOWN_GAPS for the current count).
|
|
27
|
-
# Meanwhile `lib/hecks/bluebook/dsl/` still carries well over a hundred
|
|
28
|
-
# `raise Malformed` calls of its own — some are genuinely pre-IR
|
|
29
|
-
# construction errors (arity, argument shape) that cannot become
|
|
30
|
-
# meta-domain rules, and some are exactly the semantic kind this file
|
|
31
|
-
# claims to have moved (see `aggregate_builder.rb`'s `seal_*` passes:
|
|
32
|
-
# a mutation into a field the aggregate never declares, a lifecycle guard
|
|
33
|
-
# on an aggregate with no lifecycle). No doc currently inventories which
|
|
34
|
-
# is which, or tracks migrating the latter — that inventory is the actual
|
|
35
|
-
# next step, not a "delete the folder" thought experiment.
|
|
36
|
-
#
|
|
37
|
-
# So: "delete language/bluebook/ and validation stops" is true for the 62
|
|
38
|
-
# rules actually declared here, and false for whatever a builder's own
|
|
39
|
-
# `raise Malformed` still checks — the language does not yet own its own
|
|
40
|
-
# enforcement end to end. The self-hosting mechanism itself is real and
|
|
41
|
-
# is the point worth keeping : a self-description that only describes is
|
|
42
|
-
# indistinguishable from enforcement, and the first version of this file
|
|
43
|
-
# was deleted for exactly that reason. What is not yet real is that
|
|
44
|
-
# self-hosting being the whole of validation.
|
|
45
|
-
#
|
|
46
|
-
# ## Isolation
|
|
47
|
-
#
|
|
48
|
-
# The meta-domain is loaded once and its registry reused ; each bluebook is
|
|
49
|
-
# judged in a fresh in-memory store so no domain can see another's records.
|
|
8
|
+
# Refusals become `DSL::Malformed`; the meta-domain does the judging, not a builder.
|
|
50
9
|
module MetaValidator
|
|
51
|
-
#
|
|
52
|
-
# describe and every one reopens the same `Hecks.bluebook "Bluebook"`.
|
|
53
|
-
# `BluebookBuilder.build` keeps one builder open per chapter name across
|
|
54
|
-
# calls, so the sorted folder accumulates one domain. Adding or renaming a
|
|
55
|
-
# concept file requires no second catalog here; deterministic filename
|
|
56
|
-
# order is the source order exported to IR.
|
|
10
|
+
# Deterministic file order becomes the source order exported to IR.
|
|
57
11
|
GRAMMAR_DIR = File.expand_path("../language/bluebook", __dir__).freeze
|
|
58
12
|
GRAMMAR_FILES = Dir.glob(File.join(GRAMMAR_DIR, "*.bluebook")).freeze
|
|
59
|
-
# Sibling artifact languages use the same folder-is-the-chapter rule.
|
|
60
|
-
# Their arrays are discovered, sorted source sets—not filename catalogs.
|
|
61
13
|
WORLD_GRAMMAR = Dir.glob(File.expand_path("../language/world/*.bluebook", __dir__)).freeze
|
|
62
14
|
HECKSAGON_GRAMMAR = Dir.glob(File.expand_path("../language/hecksagon/*.bluebook", __dir__)).freeze
|
|
63
|
-
#
|
|
64
|
-
# remaining builders. Backs the new PortJudge door the same way
|
|
65
|
-
# WORLD_GRAMMAR backs WorldJudge.
|
|
15
|
+
# Backs PortJudge, the same door shape as WorldJudge.
|
|
66
16
|
PORT_GRAMMAR = File.expand_path("../language/port.bluebook", __dir__).freeze
|
|
67
|
-
#
|
|
17
|
+
# Backs AdapterJudge, one file over.
|
|
68
18
|
ADAPTER_GRAMMAR = File.expand_path("../language/adapter.bluebook", __dir__).freeze
|
|
69
|
-
#
|
|
70
|
-
# TranslationJudge.
|
|
19
|
+
# Backs TranslationJudge, one file over.
|
|
71
20
|
TRANSLATION_GRAMMAR = Dir.glob(File.expand_path("../language/translation/*.bluebook", __dir__)).freeze
|
|
72
21
|
|
|
73
|
-
# ADR 0026
|
|
74
|
-
#
|
|
75
|
-
# A sub-language chapter (Paging, so far the only one) is an ordinary
|
|
76
|
-
# bluebook — declared with the same `aggregate`/`value_object`/
|
|
77
|
-
# `attaches_to` words every domain has, judged through the language
|
|
78
|
-
# the normal way, not bootstrapped raw the way GRAMMAR_FILES is. What
|
|
79
|
-
# makes it special is only where it lives: any file in this directory
|
|
80
|
-
# is discovered and loaded here, by the directory's own existence,
|
|
81
|
-
# never by a name this file would have to know. Add a chapter here
|
|
82
|
-
# and it is attached ; nothing in this file changes.
|
|
22
|
+
# (ADR 0026) Any bluebook file placed here is auto-discovered and
|
|
23
|
+
# loaded as an extension chapter; nothing else in this file changes.
|
|
83
24
|
ATTACHED_GRAMMAR_DIR = File.expand_path("../language/bluebook/attaches", __dir__).freeze
|
|
84
25
|
|
|
85
|
-
# The chapters
|
|
86
|
-
#
|
|
87
|
-
# (see grammar_registry). Each is named after its file : Bluebook describes
|
|
88
|
-
# bluebooks (language/bluebook/) ; World describes worlds (world.bluebook),
|
|
89
|
-
# and backs the WorldJudge door ; Hecksagon describes hecksagons
|
|
90
|
-
# (hecksagon.bluebook) — declared for the same self-description reasons as
|
|
91
|
-
# World, but without a judge door of its own : nothing dispatches a real
|
|
92
|
-
# .hecksagon file through it yet, so HecksagonBuilder's own behavior is
|
|
93
|
-
# unchanged. What this buys is what syntax.bluebook needed — a real shape
|
|
94
|
-
# `subscribe`'s `fills: "subscriptions"` can point at — not new validation
|
|
95
|
-
# on top of the corpus's existing .hecksagon files.
|
|
26
|
+
# The chapters loaded raw at bootstrap, then judged through themselves
|
|
27
|
+
# and replaced by their own self-assembled graphs.
|
|
96
28
|
LANGUAGE_CHAPTERS = %w[Bluebook World Hecksagon].freeze
|
|
97
29
|
|
|
98
|
-
#
|
|
99
|
-
#
|
|
100
|
-
#
|
|
101
|
-
# grammar_registry judges the language through itself and keeps the
|
|
102
|
-
# assembled result (the fixpoint, made load-bearing).
|
|
30
|
+
# Whether the language's own grammar is still loading raw, unjudged.
|
|
31
|
+
# Judging it while it loads would recurse, so the bootstrap sets this
|
|
32
|
+
# and the fixpoint clears it once every grammar file is merged.
|
|
103
33
|
#
|
|
104
|
-
# @return [Boolean]
|
|
105
|
-
# loading raw, unjudged
|
|
34
|
+
# @return [Boolean]
|
|
106
35
|
def self.bootstrapping? = @bootstrapping
|
|
107
36
|
|
|
108
|
-
#
|
|
109
|
-
#
|
|
110
|
-
#
|
|
111
|
-
# `BluebookBuilder.build` already merges — `registry.bluebook_builder
|
|
112
|
-
# (name)` memoises one builder per chapter name, so nine files each
|
|
113
|
-
# saying `Hecks.bluebook "Bluebook"` accumulate into one. What it
|
|
114
|
-
# also does is call `MetaValidator.call` once per file, judging a
|
|
115
|
-
# chapter that is still eight files short: `Aggregate`'s reference
|
|
116
|
-
# to `Bluebook` dangles because `Bluebook` has not been declared
|
|
117
|
-
# yet, and the load dies.
|
|
118
|
-
#
|
|
119
|
-
# The language's own grammar has always needed this and got it
|
|
120
|
-
# privately, through `@bootstrapping` (see load_grammar_into) —
|
|
121
|
-
# which is exactly why the language could not boot the way the
|
|
122
|
-
# domains it describes boot. This is that same two-phase load,
|
|
123
|
-
# available to anything: `Folder#load_domain` reads every
|
|
124
|
-
# `*.bluebook` inside `defer`, then judges each composed chapter
|
|
125
|
-
# once, before hecksagons and worlds load (DOMAIN_ORDER already
|
|
126
|
-
# puts every chapter ahead of those).
|
|
37
|
+
# Whether `call` is queuing chapters instead of judging them, while a
|
|
38
|
+
# chapter's own files are still being merged (see `defer`).
|
|
127
39
|
#
|
|
128
|
-
#
|
|
129
|
-
# Re-judging one already assembled — a framework member pulled in
|
|
130
|
-
# earlier by `uses_framework`, say — would re-run Assembly and hand
|
|
131
|
-
# out a second set of classes for a graph something already holds.
|
|
132
|
-
#
|
|
133
|
-
# @return [Boolean] whether `call` is currently queuing chapters
|
|
134
|
-
# instead of judging them
|
|
40
|
+
# @return [Boolean]
|
|
135
41
|
def self.deferring? = @deferring
|
|
136
42
|
|
|
137
|
-
#
|
|
138
|
-
#
|
|
139
|
-
# judged immediately.
|
|
43
|
+
# Queues every chapter `call` sees while the block runs, instead of
|
|
44
|
+
# judging them immediately (see `deferred_chapters`).
|
|
140
45
|
#
|
|
141
46
|
# @yield the caller's own load of every file in one chapter window
|
|
142
47
|
# @return [Object] the block's own return value
|
|
@@ -173,75 +78,32 @@ module Hecks
|
|
|
173
78
|
chapter = registry.bluebook(name)
|
|
174
79
|
next unless chapter
|
|
175
80
|
|
|
176
|
-
#
|
|
177
|
-
#
|
|
178
|
-
#
|
|
179
|
-
# `registry.bluebook_builder(name)` is the same instance every
|
|
180
|
-
# one of this chapter's own files built onto (`#self.build`'s
|
|
181
|
-
# own comment); it is guaranteed already open here, since it
|
|
182
|
-
# is what produced `chapter` in the first place — the block is
|
|
183
|
-
# dead code, never actually invoked.
|
|
81
|
+
# Bare chapter-level givens must resolve before anything below
|
|
82
|
+
# reads a `Given`'s fields. The `raise` block never runs — this
|
|
83
|
+
# chapter's builder is always already open by the time `chapter` exists.
|
|
184
84
|
builder = registry.bluebook_builder(name) { raise "internal: no open builder for #{name}" }
|
|
185
85
|
builder.resolve_pending_chapter_givens!
|
|
186
|
-
#
|
|
187
|
-
# same timing: a bare entity-level given left pending by any
|
|
188
|
-
# file of this chapter (`EntityBuilder#pending_chapter_entity_
|
|
189
|
-
# given`) must resolve before anything below reads a piece's
|
|
190
|
-
# own `Given` fields too.
|
|
86
|
+
# Same, one level down: entity-scoped pending givens.
|
|
191
87
|
builder.resolve_pending_chapter_entity_givens!
|
|
192
88
|
|
|
193
|
-
#
|
|
194
|
-
#
|
|
195
|
-
#
|
|
196
|
-
# `deferring?` was true, the same reason `call` below queued
|
|
197
|
-
# instead of judging — each of those checks needs every file
|
|
198
|
-
# loaded first (see `BluebookBuilder.validate_assembled!`'s own
|
|
199
|
-
# comment). `chapter` here is exactly that: whatever the last
|
|
200
|
-
# file's own `add_bluebook` left in the registry, which by now
|
|
201
|
-
# holds every aggregate/policy/process_manager the whole
|
|
202
|
-
# chapter declares. Run once, here, instead of once per file.
|
|
89
|
+
# Whole-chapter checks (hops, projected fields, event shapes) were
|
|
90
|
+
# skipped per file while deferring; `chapter` now holds every
|
|
91
|
+
# file's declarations, so they run once here instead of per file.
|
|
203
92
|
DSL::BluebookBuilder.validate_assembled!(chapter)
|
|
204
93
|
registry.add_bluebook(call(chapter))
|
|
205
94
|
end
|
|
206
95
|
end
|
|
207
96
|
|
|
208
|
-
#
|
|
209
|
-
#
|
|
210
|
-
#
|
|
211
|
-
#
|
|
212
|
-
# a bare env toggle (`ENV["HECKS_META_VALIDATION"] == "off"`, read
|
|
213
|
-
# directly, with no `previous`/`ensure` of its own): the gap between
|
|
214
|
-
# "bare toggle" and "stack-restore" is not cosmetic — a test's
|
|
215
|
-
# temporary window could reach code it was never meant to touch. If
|
|
216
|
-
# `grammar_registry`'s one-time lazy build (below) happens to land
|
|
217
|
-
# inside that window, every language chapter gets cached in its raw,
|
|
218
|
-
# never-judged form for the rest of the process — `unmark_scalar`'s
|
|
219
|
-
# String->Integer/Boolean fix (assembly/marks.rb) never runs, so a
|
|
220
|
-
# `Command`'s own `required: true` stays `required: "true"` forever
|
|
221
|
-
# after, permanently memoized. Found live: an intermittent,
|
|
222
|
-
# parallel_rspec-only ir_golden_spec.rb failure, order-dependent on
|
|
223
|
-
# whether identifier_numeric_coercion_growth_spec.rb's
|
|
224
|
-
# disabled-validation window raced the one lazy build in its own worker
|
|
225
|
-
# process — reproduced in isolation by disabling validation before the
|
|
226
|
-
# first `grammar_registry` call. `&& !@forcing_fixpoint` was the first
|
|
227
|
-
# fix and is kept ; `@disabled` itself uses this same stack-restore
|
|
228
|
-
# shape to close the gap for every other caller of `while_disabled`,
|
|
229
|
-
# not just the one race that was actually observed — nothing outside
|
|
230
|
-
# this file reads `ENV["HECKS_META_VALIDATION"]` (every growth spec
|
|
231
|
-
# calls `while_disabled` instead), so there is no bare global left to
|
|
232
|
-
# race.
|
|
97
|
+
# Whether meta-domain judging is off (ignored while a fixpoint build
|
|
98
|
+
# is forced).
|
|
99
|
+
# Stack-restored, not a bare flag, so a disabled window can never
|
|
100
|
+
# leak past its own scope.
|
|
233
101
|
#
|
|
234
|
-
# @return [Boolean]
|
|
235
|
-
# off (and not overridden by a fixpoint build in progress)
|
|
102
|
+
# @return [Boolean]
|
|
236
103
|
def self.disabled? = @disabled && !@forcing_fixpoint
|
|
237
104
|
|
|
238
|
-
#
|
|
239
|
-
#
|
|
240
|
-
# that boots a scratch bluebook from a tempfile and wants the runtime
|
|
241
|
-
# behaviour without the validation overhead ; that is always a single
|
|
242
|
-
# bounded window around one boot, never a flag meant to survive past
|
|
243
|
-
# it, so the flag itself is scoped in the same `previous`/`ensure`
|
|
244
|
-
# shape rather than a plain assignment a caller could forget to undo.
|
|
105
|
+
# Runs `block` with `disabled?` true, restoring it afterward — for a
|
|
106
|
+
# growth spec that boots a scratch bluebook without validation overhead.
|
|
245
107
|
#
|
|
246
108
|
# @yield the caller's own boot, with `disabled?` true throughout
|
|
247
109
|
# @return [Object] the block's own return value
|
|
@@ -253,24 +115,11 @@ module Hecks
|
|
|
253
115
|
@disabled = previous
|
|
254
116
|
end
|
|
255
117
|
|
|
256
|
-
# ADR 0025
|
|
257
|
-
#
|
|
258
|
-
#
|
|
259
|
-
# is a plain `Kernel.eval` of stored source, run at boot, at mint,
|
|
260
|
-
# and during tamper detection, against whatever grammar is live
|
|
261
|
-
# today, not whatever grammar was live when that text was written.
|
|
262
|
-
# Judging it again here would refuse history the day a spelling it
|
|
263
|
-
# used is removed — proved with a rule that already lives only in
|
|
264
|
-
# the meta-domain, never duplicated as a builder's own `raise
|
|
265
|
-
# Malformed` (`vision`'s own comment: "moved to the language").
|
|
266
|
-
#
|
|
267
|
-
# Mirrors `defer`'s own stack-restore shape — this must never leak
|
|
268
|
-
# past the one shadow-parse call that set it, the same reason
|
|
269
|
-
# `ConstShim.with`/`.active?` (bluebook/dsl/const_shim.rb) restores in
|
|
270
|
-
# an `ensure` rather than being flipped and left.
|
|
118
|
+
# (ADR 0025) Whether frozen era text is currently being shadow-parsed
|
|
119
|
+
# by `EraGuard`. Judging it again here would refuse history whenever a
|
|
120
|
+
# spelling it used gets removed from the live grammar.
|
|
271
121
|
#
|
|
272
|
-
# @return [Boolean]
|
|
273
|
-
# shadow-parsed
|
|
122
|
+
# @return [Boolean]
|
|
274
123
|
def self.shadow_parsing? = @shadow_parsing
|
|
275
124
|
|
|
276
125
|
# Wraps `block` with `shadow_parsing?` true, restoring it afterward.
|
|
@@ -285,13 +134,8 @@ module Hecks
|
|
|
285
134
|
@shadow_parsing = previous
|
|
286
135
|
end
|
|
287
136
|
|
|
288
|
-
#
|
|
289
|
-
#
|
|
290
|
-
# true, however a test elsewhere has a `while_disabled` window open at
|
|
291
|
-
# that exact moment. Only `grammar_registry`'s own one-time build
|
|
292
|
-
# (below) wraps itself in this — nothing else needs it, and nothing
|
|
293
|
-
# else should reach for it just to dodge `disabled?` for a domain
|
|
294
|
-
# bluebook, which is precisely the toggle's real, intended use.
|
|
137
|
+
# Wraps `block` with `disabled?` forced false, restoring it afterward.
|
|
138
|
+
# Only `grammar_registry`'s one-time fixpoint build uses this.
|
|
295
139
|
#
|
|
296
140
|
# @yield the one-time fixpoint build, with `disabled?` forced false
|
|
297
141
|
# throughout
|
|
@@ -304,18 +148,18 @@ module Hecks
|
|
|
304
148
|
@forcing_fixpoint = previous
|
|
305
149
|
end
|
|
306
150
|
|
|
307
|
-
#
|
|
308
|
-
#
|
|
309
|
-
# Keyed on the IR itself, so a changed bluebook is always re-judged.
|
|
151
|
+
# Process-wide judging cache, keyed on a SHA-256 digest of the judged
|
|
152
|
+
# artifact so a changed bluebook is always re-judged.
|
|
310
153
|
#
|
|
311
|
-
#
|
|
312
|
-
#
|
|
313
|
-
#
|
|
314
|
-
#
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
154
|
+
# Seeded once per process with the chapter verdicts earlier processes
|
|
155
|
+
# stored (see `VerdictCache`); every other verdict starts empty.
|
|
156
|
+
#
|
|
157
|
+
# @return [Hash{String => Object}] refusal messages per digest for a
|
|
158
|
+
# world/port/adapter/translation (`[]` when well formed); the held
|
|
159
|
+
# verdict Hash for a chapter
|
|
160
|
+
def self.verdicts = @verdicts ||= VerdictCache.seed
|
|
161
|
+
|
|
162
|
+
# Judges `world` through the meta-domain's own `WorldJudge` door.
|
|
319
163
|
#
|
|
320
164
|
# @param world [Bluebook::World] the world to judge
|
|
321
165
|
# @return [Bluebook::World] `world` unchanged, if well formed or
|
|
@@ -332,9 +176,7 @@ module Hecks
|
|
|
332
176
|
"#{world.domain}'s world is not well formed; #{refusals.join('; ')}"
|
|
333
177
|
end
|
|
334
178
|
|
|
335
|
-
#
|
|
336
|
-
# one artifact over. Whole-project table-unification survey, item
|
|
337
|
-
# #13's remaining builders.
|
|
179
|
+
# Judges `port` through the meta-domain's own `PortJudge` door.
|
|
338
180
|
#
|
|
339
181
|
# @param port [Bluebook::Port] the port to judge
|
|
340
182
|
# @return [Bluebook::Port] `port` unchanged, if well formed or while
|
|
@@ -351,9 +193,7 @@ module Hecks
|
|
|
351
193
|
"#{port.name}'s port is not well formed; #{refusals.join('; ')}"
|
|
352
194
|
end
|
|
353
195
|
|
|
354
|
-
#
|
|
355
|
-
# artifact over. Whole-project table-unification survey, item
|
|
356
|
-
# #13's remaining builders.
|
|
196
|
+
# Judges `adapter` through the meta-domain's own `AdapterJudge` door.
|
|
357
197
|
#
|
|
358
198
|
# @param adapter [Bluebook::Adapter] the adapter to judge
|
|
359
199
|
# @return [Bluebook::Adapter] `adapter` unchanged, if well formed or
|
|
@@ -370,17 +210,8 @@ module Hecks
|
|
|
370
210
|
"#{adapter.name}'s adapter is not well formed; #{refusals.join('; ')}"
|
|
371
211
|
end
|
|
372
212
|
|
|
373
|
-
#
|
|
374
|
-
#
|
|
375
|
-
# own real, established convention; there is no separate extension).
|
|
376
|
-
# TranslationJudge walks the whole built translation (every nested
|
|
377
|
-
# aggregate's own rule table) in one pass — only
|
|
378
|
-
# TranslationBuilder's own top-level `build` calls this;
|
|
379
|
-
# TranslationAggregateBuilder#build stays a plain struct constructor,
|
|
380
|
-
# the same way `WorldJudge` judges every `Wiring` a `.world` declares
|
|
381
|
-
# in one pass over `World::World.Declare`'s own caller, not from a
|
|
382
|
-
# separate door per binding. Whole-project table-unification survey,
|
|
383
|
-
# item #13's remaining builders.
|
|
213
|
+
# Judges `translation` through the meta-domain's own `TranslationJudge`
|
|
214
|
+
# door, walking every nested aggregate's own rule table in one pass.
|
|
384
215
|
#
|
|
385
216
|
# @param translation [Bluebook::Translation] the translation to judge
|
|
386
217
|
# @return [Bluebook::Translation] `translation` unchanged, if well
|
|
@@ -390,15 +221,9 @@ module Hecks
|
|
|
390
221
|
def self.call_translation(translation)
|
|
391
222
|
return translation if disabled? || bootstrapping? || shadow_parsing?
|
|
392
223
|
|
|
393
|
-
# `Translation
|
|
394
|
-
#
|
|
395
|
-
#
|
|
396
|
-
# string) and, unlike a Struct's own memoization-friendly `.to_h`,
|
|
397
|
-
# doesn't need one — the small correctness cost is that its
|
|
398
|
-
# embedded object-id prefix makes two structurally-identical
|
|
399
|
-
# translations hash differently, so `verdicts` simply never
|
|
400
|
-
# cache-hits here (an efficiency loss, not a correctness one —
|
|
401
|
-
# judged fresh every time instead of memoized).
|
|
224
|
+
# `Translation` has no `.to_h`; `.inspect` embeds an object-id, so
|
|
225
|
+
# structurally-identical translations never cache-hit here (a lost
|
|
226
|
+
# optimization, not a correctness issue).
|
|
402
227
|
key = Digest::SHA256.hexdigest(translation.inspect)
|
|
403
228
|
refusals = verdicts[key] ||= TranslationJudge.new(translation).refusals
|
|
404
229
|
return translation if refusals.empty?
|
|
@@ -407,45 +232,9 @@ module Hecks
|
|
|
407
232
|
"#{translation.domain}'s translation is not well formed; #{refusals.join('; ')}"
|
|
408
233
|
end
|
|
409
234
|
|
|
410
|
-
#
|
|
411
|
-
#
|
|
412
|
-
#
|
|
413
|
-
# in, collect refusals, throw the records away — which is all a
|
|
414
|
-
# boundary check needs. This is the one call that returns what the
|
|
415
|
-
# meta-domain holds instead, assembled into the graph the runtime
|
|
416
|
-
# runs, so the builder's own object graph exists only to be
|
|
417
|
-
# dispatched — nothing keeps it. `Hecks.bluebook` registers whatever
|
|
418
|
-
# comes back from here, so this one line is the difference between a
|
|
419
|
-
# language that checks a domain and a language that is the source of
|
|
420
|
-
# one: the runtime runs what the meta-domain holds, not the builder's
|
|
421
|
-
# own graph.
|
|
422
|
-
#
|
|
423
|
-
# What is cached is the declarations, not the graph. A hash carries no
|
|
424
|
-
# Ruby classes, so a second load of the same chapter re-assembles
|
|
425
|
-
# fresh ones — the behaviour `Namespace.install` and
|
|
426
|
-
# `spec/construct_spec` both expect. Caching the graph would hand two
|
|
427
|
-
# boots the same classes.
|
|
428
|
-
#
|
|
429
|
-
# One belief stayed unlanded for a while, worth naming because it
|
|
430
|
-
# looked so much like a wall: that the language may only hold what
|
|
431
|
-
# `to_h` carries. `ReadModel#to_h` omitted a read model's filters
|
|
432
|
-
# until 2026-08-11, so read-model filtering seemed impossible to read
|
|
433
|
-
# back — and hoisted policies lost which head declared them for the
|
|
434
|
-
# same reason. But `to_h` is a projection and the language is the
|
|
435
|
-
# source. They must agree about everything `to_h` spells ; they need
|
|
436
|
-
# not be the same size. Both were held even before the wire format
|
|
437
|
-
# carried them, as declarations the wire format didn't yet see.
|
|
438
|
-
#
|
|
439
|
-
# The wire format did later move, for a reason unrelated to this
|
|
440
|
-
# file — a Rust-codegen task needed `wheres`/`order_by`/`limit` on
|
|
441
|
-
# the wire to compile a read model's real declared filtering, and the
|
|
442
|
-
# boundary described above was never load-bearing for this mechanism
|
|
443
|
-
# (`option_rows`/`filter_options` in meta_validator/readings.rb read
|
|
444
|
-
# `node.wheres`/`node.order_by`/`node.limit` off the live object
|
|
445
|
-
# directly, never off `to_h`), so extending `to_h` changed nothing
|
|
446
|
-
# here. `ReadModel#to_h` now spells all three explicitly, the same
|
|
447
|
-
# mechanism `Query#to_h` already used — purely additive, still
|
|
448
|
-
# agreeing with the language about everything it spells.
|
|
235
|
+
# Dispatches `bluebook` into the language and returns the graph the
|
|
236
|
+
# meta-domain assembles from its own judged declarations, not the
|
|
237
|
+
# builder's original object graph.
|
|
449
238
|
#
|
|
450
239
|
# @param bluebook [Object] a built bluebook chapter graph (an
|
|
451
240
|
# `Aggregate`/`Entity`/`ValueObject`/... instance from
|
|
@@ -464,7 +253,7 @@ module Hecks
|
|
|
464
253
|
end
|
|
465
254
|
|
|
466
255
|
key = Digest::SHA256.hexdigest(JSON.generate(bluebook.to_h))
|
|
467
|
-
held = verdicts[key]
|
|
256
|
+
held = verdicts[key] || (verdicts[key] = hold(bluebook).tap { |fresh| VerdictCache.record(key, fresh) })
|
|
468
257
|
|
|
469
258
|
unless held[:refusals].empty?
|
|
470
259
|
raise DSL::Malformed,
|
|
@@ -474,9 +263,9 @@ module Hecks
|
|
|
474
263
|
Assembly.call(held[:declaration])
|
|
475
264
|
end
|
|
476
265
|
|
|
477
|
-
#
|
|
478
|
-
#
|
|
479
|
-
#
|
|
266
|
+
# Dispatches `bluebook` into the meta-domain and reads the result back.
|
|
267
|
+
# A refused chapter carries only its refusals — the records are
|
|
268
|
+
# half-written by definition.
|
|
480
269
|
#
|
|
481
270
|
# @param bluebook [Object] a built bluebook chapter graph, as `call`
|
|
482
271
|
# receives it
|
|
@@ -499,72 +288,38 @@ module Hecks
|
|
|
499
288
|
def self.grammar_registry
|
|
500
289
|
@grammar_registry ||= begin
|
|
501
290
|
registry = load_grammar_into(Runtime::Registry.new)
|
|
502
|
-
# Assigned before the fixpoint judge below
|
|
503
|
-
# grammar_registry
|
|
504
|
-
#
|
|
505
|
-
# while its right-hand side evaluates, and recurse forever. That
|
|
506
|
-
# reentrancy window is real: a caller landing here before the
|
|
507
|
-
# fixpoint/attach below have run sees the same registry object,
|
|
508
|
-
# correctly, but one still missing the attached chapters (Paging's
|
|
509
|
-
# `attaches_to` among them) — see grammar_registry_ready? below.
|
|
291
|
+
# Assigned before the fixpoint judge below, since judging re-enters
|
|
292
|
+
# grammar_registry (via fresh_runtime/Plan.for) and a bare `||=`
|
|
293
|
+
# would still be nil mid-evaluation, recursing forever.
|
|
510
294
|
@grammar_registry = registry
|
|
511
|
-
#
|
|
512
|
-
#
|
|
513
|
-
#
|
|
514
|
-
# judged from here on is judged by the language the language itself
|
|
515
|
-
# produced. Outside load_grammar_into on purpose : its ensure clears
|
|
516
|
-
# @bootstrapping, and call() must see bootstrapping? == false to do
|
|
517
|
-
# anything at all. `while_forcing_fixpoint`-wrapped so a growth
|
|
518
|
-
# spec's own `while_disabled` window can never leave this
|
|
519
|
-
# one-time build cached in its raw, never-judged form — see
|
|
520
|
-
# `disabled?`'s own comment.
|
|
295
|
+
# The language now judges itself; every bluebook from here on is
|
|
296
|
+
# judged by that assembled graph, not the raw bootstrap one. Must
|
|
297
|
+
# run after load_grammar_into's ensure clears @bootstrapping.
|
|
521
298
|
while_forcing_fixpoint do
|
|
522
299
|
LANGUAGE_CHAPTERS.each { |name| registry.add_bluebook(call(registry.bluebook(name))) }
|
|
523
300
|
load_attached_grammar_into(registry)
|
|
524
301
|
end
|
|
525
|
-
#
|
|
526
|
-
# a
|
|
527
|
-
#
|
|
528
|
-
# this object_id again until a fresh build finishes, so a stale
|
|
529
|
-
# "ready" from the previous cycle can never leak into the next.
|
|
302
|
+
# Keyed on this registry's object identity, not a bare boolean, so
|
|
303
|
+
# a manual reset can never leave a stale "ready" from the previous
|
|
304
|
+
# cycle.
|
|
530
305
|
@grammar_ready_for = registry.object_id
|
|
531
306
|
registry
|
|
532
307
|
end
|
|
533
308
|
end
|
|
534
309
|
|
|
535
|
-
#
|
|
536
|
-
#
|
|
537
|
-
# no wrong data for that caller's own purposes. But anything that
|
|
538
|
-
# memoizes a snapshot derived from it must not lock that snapshot
|
|
539
|
-
# in forever : this is one signal such a cache can check. Found
|
|
540
|
-
# live — SyntaxBoot.call had cached a Query keyword list missing
|
|
541
|
-
# every Paging-attached word (limit/offset/cursor/nulls) because
|
|
542
|
-
# something called it inside this exact window.
|
|
310
|
+
# Whether `grammar_registry`'s memoized singleton has finished its
|
|
311
|
+
# fixpoint judge and attached-chapter load.
|
|
543
312
|
#
|
|
544
|
-
#
|
|
545
|
-
#
|
|
546
|
-
# entire window, and the window is not narrow — every word routed
|
|
547
|
-
# through `word_gate_dispatch` while the language judged itself
|
|
548
|
-
# re-ran the ~284-dispatch syntax boot (42 times, 32 seconds, per
|
|
549
|
-
# process — see SyntaxBoot.call's own comment). It keys its cache
|
|
550
|
-
# on the registry's chapter set instead, which is the actual input
|
|
551
|
-
# the snapshot is a function of. Kept here for any other derived
|
|
552
|
-
# cache that genuinely needs "is the build finished" rather than
|
|
553
|
-
# "have my inputs changed".
|
|
313
|
+
# A cache keyed on "finished" instead of its own inputs already missed
|
|
314
|
+
# data for a whole build window once.
|
|
554
315
|
#
|
|
555
|
-
# @return [Boolean]
|
|
556
|
-
# has finished its fixpoint judge and attached-chapter load
|
|
316
|
+
# @return [Boolean]
|
|
557
317
|
def self.grammar_registry_ready?
|
|
558
318
|
@grammar_registry && @grammar_ready_for == @grammar_registry.object_id
|
|
559
319
|
end
|
|
560
320
|
|
|
561
|
-
#
|
|
562
|
-
#
|
|
563
|
-
# judging itself through, so they are ordinary bluebooks, judged the
|
|
564
|
-
# ordinary way (`Hecks.bluebook` → `BluebookBuilder#build` →
|
|
565
|
-
# `MetaValidator.call`, `bootstrapping?` already false). A directory
|
|
566
|
-
# with nothing in it loads nothing ; this is a no-op until a chapter
|
|
567
|
-
# is added there.
|
|
321
|
+
# Loads every `ATTACHED_GRAMMAR_DIR` chapter file into `registry`,
|
|
322
|
+
# judged the ordinary way since the fixpoint has already run.
|
|
568
323
|
#
|
|
569
324
|
# @param registry [Runtime::Registry] the registry to load every
|
|
570
325
|
# `ATTACHED_GRAMMAR_DIR` chapter file into
|
|
@@ -575,27 +330,14 @@ module Hecks
|
|
|
575
330
|
end
|
|
576
331
|
end
|
|
577
332
|
|
|
578
|
-
#
|
|
579
|
-
#
|
|
580
|
-
# sibling world grammar. `grammar_registry` uses this for its memoised
|
|
581
|
-
# singleton ; anything that needs an isolated registry (a spec wanting a
|
|
582
|
-
# fresh store per example, say) calls this directly instead of hand-
|
|
583
|
-
# copying the sequence.
|
|
333
|
+
# Loads the whole grammar (ports, adapters, every language chapter)
|
|
334
|
+
# into `registry`, raw and unjudged.
|
|
584
335
|
#
|
|
585
|
-
# The
|
|
586
|
-
#
|
|
587
|
-
# "Bluebook"` call now runs `BluebookBuilder#build` once per file — and
|
|
588
|
-
# `MetaValidator.call` judges whatever it is handed unless `bootstrapping?`
|
|
589
|
-
# is true. A caller that loaded the grammar files by hand into its own
|
|
590
|
-
# registry, without this guard, would get each file dispatched and judged
|
|
591
|
-
# alone the moment it loaded — and a lone file like `aggregate.bluebook`
|
|
592
|
-
# refuses immediately, since `Aggregate.Attribute` references `ValueObject`
|
|
593
|
-
# and `Aggregate.Holds` references `Entity`, both declared in later files.
|
|
594
|
-
# Every caller of the grammar must go through here for exactly that reason.
|
|
336
|
+
# The `@bootstrapping` guard matters: without it a chapter split
|
|
337
|
+
# across files would get judged one file at a time and refuse early.
|
|
595
338
|
#
|
|
596
339
|
# @param registry [Runtime::Registry] the registry to load the whole
|
|
597
|
-
# grammar
|
|
598
|
-
# and unjudged
|
|
340
|
+
# grammar into, raw and unjudged
|
|
599
341
|
# @return [Runtime::Registry] `registry`, unchanged in identity
|
|
600
342
|
def self.load_grammar_into(registry)
|
|
601
343
|
@bootstrapping = true
|
|
@@ -616,15 +358,8 @@ module Hecks
|
|
|
616
358
|
@bootstrapping = false
|
|
617
359
|
end
|
|
618
360
|
|
|
619
|
-
# A
|
|
620
|
-
#
|
|
621
|
-
# before it. The parsed grammar is reused ; only the records are cleared.
|
|
622
|
-
# (During grammar_registry's own fixpoint judge this clear runs on the
|
|
623
|
-
# singleton mid-memoisation — harmless for the same reason : the grammar
|
|
624
|
-
# is what is kept, the records were never meant to survive a judging.)
|
|
625
|
-
# No `bind_runtime` here : judging dispatches by FQN and never opens the
|
|
626
|
-
# door, and binding would re-install the language's own facade constants
|
|
627
|
-
# once per judged chapter.
|
|
361
|
+
# A dispatcher over the shared grammar registry with its records
|
|
362
|
+
# cleared, so one bluebook's judging can never see another's records.
|
|
628
363
|
#
|
|
629
364
|
# @return [Runtime::Dispatcher] a dispatcher over the shared grammar
|
|
630
365
|
# registry, with its records cleared
|