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
|
@@ -4,47 +4,27 @@ Hecks.bluebook "Bluebook" do
|
|
|
4
4
|
|
|
5
5
|
reference_to Bluebook
|
|
6
6
|
|
|
7
|
-
#
|
|
8
|
-
# chapters may both declare one — so the chapter is part of the identity, not
|
|
9
|
-
# context around it. This is the derivation `MetaValidator::Judge#identify`
|
|
10
|
-
# spelled by hand as "#{parent_id}::#{name}" for as long as the language could
|
|
11
|
-
# not say it.
|
|
7
|
+
# The chapter is part of the identity: two chapters may each declare an `Order`.
|
|
12
8
|
identified_by :bluebook, :name
|
|
13
9
|
|
|
14
|
-
# SPELLED AS THE IR SPELLS THEM — see the note on Command's fields.
|
|
15
10
|
attribute :name, AggregateName
|
|
16
11
|
attribute :description, Description
|
|
17
12
|
attribute :provenance, LiteralText
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
# language's own chapters are all of that kind — a command is not named by
|
|
21
|
-
# `Declare`, which every aggregate here spells, but by the aggregate it belongs
|
|
22
|
-
# to AND that name. Held as a list for the same reason attributes are : the
|
|
23
|
-
# order is a fact about the source, and the join reads in it.
|
|
13
|
+
# Several paths, because the identity is their join in declared order: a command is named
|
|
14
|
+
# by its aggregate and its own name.
|
|
24
15
|
attribute :identified_by, list_of(IdentityPath)
|
|
25
16
|
attribute :attributes, list_of(Field)
|
|
26
17
|
attribute :value_objects, list_of(ValueName)
|
|
27
18
|
attribute :state_field, IdentityField, optional: true
|
|
28
19
|
attribute :state_start, IdentityField, optional: true
|
|
29
20
|
attribute :transitions, list_of(Transition)
|
|
30
|
-
#
|
|
31
|
-
#
|
|
32
|
-
# givens/ensures already carry (description+canonical), declared
|
|
33
|
-
# again here rather than shared: a closed set/value object is
|
|
34
|
-
# aggregate-scoped in this self-hosting domain, the same reason
|
|
35
|
-
# CommandText and LiteralText stay two separate, identically-
|
|
36
|
-
# shaped value objects rather than one reused across chapters.
|
|
21
|
+
# Checked after every command, before save (ADR 0025). The same Rule shape as Command's
|
|
22
|
+
# givens, declared again because a closed set or value object is aggregate-scoped here.
|
|
37
23
|
attribute :invariants, list_of(Rule)
|
|
38
|
-
# A
|
|
39
|
-
# 0025) — the SAME Rule shape, the aggregate's own named `given`s
|
|
40
|
-
# that a referencing command's own (already-resolved) `given`
|
|
41
|
-
# entry came from.
|
|
24
|
+
# A precondition shared across commands, declared once: the aggregate's named `given`s.
|
|
42
25
|
attribute :preconditions, list_of(Rule)
|
|
43
|
-
# A
|
|
44
|
-
#
|
|
45
|
-
# `projects :name, from: :"reference.remote_field"`. Deliberately
|
|
46
|
-
# NOT folded into `attributes` — see the comment on
|
|
47
|
-
# `Aggregate#emits_ir`'s own `projected_fields:` entry for why.
|
|
26
|
+
# A field read through a reference and held locally (`projects :name, from: :"ref.field"`).
|
|
27
|
+
# Kept out of `attributes`; see `projected_fields:` in `Aggregate#emits_ir` (ADR 0025).
|
|
48
28
|
attribute :projected_fields, list_of(ProjectedField)
|
|
49
29
|
|
|
50
30
|
value_object "AggregateName" do
|
|
@@ -61,14 +41,8 @@ Hecks.bluebook "Bluebook" do
|
|
|
61
41
|
attribute :value, String
|
|
62
42
|
end
|
|
63
43
|
|
|
64
|
-
#
|
|
65
|
-
#
|
|
66
|
-
# part joined, in the order they were declared.
|
|
67
|
-
#
|
|
68
|
-
# Its field is `value`, like every other one-field value object in this
|
|
69
|
-
# language, because that is the name the judge wraps a cell under. Spelling it
|
|
70
|
-
# `path` made `path.path` read nothing, and a given that reads nothing does not
|
|
71
|
-
# fail — it refuses everything, which is a far quieter way to be wrong.
|
|
44
|
+
# One part of an identity: a path to the scalar that carries it, like "number.value".
|
|
45
|
+
# Its field is `value`, the name the judge wraps a cell under; any other name reads nothing.
|
|
72
46
|
value_object "IdentityPath" do
|
|
73
47
|
attribute :value, String
|
|
74
48
|
end
|
|
@@ -79,22 +53,13 @@ Hecks.bluebook "Bluebook" do
|
|
|
79
53
|
attribute :list, String
|
|
80
54
|
attribute :optional, String, optional: true
|
|
81
55
|
attribute :pattern, String, optional: true
|
|
82
|
-
#
|
|
83
|
-
#
|
|
84
|
-
# reconstruction hardcoded nil, which happened to match every corpus member
|
|
85
|
-
# and would have lied about the first one that declared a default.
|
|
86
|
-
# optional: a declaration with no default has none (C3.7 — a value object's fields arrive or it refuses)
|
|
56
|
+
# A literal written so its type survives: 0.0 rather than "0.0".
|
|
57
|
+
# optional: a declaration with no default has none.
|
|
87
58
|
attribute :default, String, optional: true
|
|
88
|
-
#
|
|
89
|
-
#
|
|
90
|
-
# holds it, because a closed set is a value object INSIDE an aggregate and
|
|
91
|
-
# the aggregate is the only thing a reference can reach ; `one_of` is the
|
|
92
|
-
# other word and it can only ever SYNTHESISE a new set, never name one
|
|
93
|
-
# twice. Absent for almost every attribute, so it is optional.
|
|
59
|
+
# The closed set this value must belong to, qualified by its aggregate
|
|
60
|
+
# (`Vocabulary::QueryComparator`); `one_of` can only synthesise a new set, never name one.
|
|
94
61
|
attribute :admits, String, optional: true
|
|
95
|
-
# `reference_to`, `belongs_to`, `has_one
|
|
96
|
-
# ordinary value/entity fields. This keeps relationship language through
|
|
97
|
-
# the self-hosted round trip instead of collapsing it to a reference.
|
|
62
|
+
# `reference_to`, `belongs_to`, `has_one` or `has_many`; absent on ordinary fields.
|
|
98
63
|
attribute :relationship, String, optional: true
|
|
99
64
|
end
|
|
100
65
|
|
|
@@ -109,19 +74,14 @@ Hecks.bluebook "Bluebook" do
|
|
|
109
74
|
attribute :to_state, String
|
|
110
75
|
end
|
|
111
76
|
|
|
112
|
-
#
|
|
113
|
-
# behavior.bluebook — declared again here rather than shared, per
|
|
114
|
-
# that value object's own comment.
|
|
77
|
+
# The same shape as Command's "Rule" (behavior.bluebook), declared again rather than shared.
|
|
115
78
|
value_object "Rule" do
|
|
116
79
|
attribute :description, String
|
|
117
80
|
attribute :canonical, String
|
|
118
81
|
end
|
|
119
82
|
|
|
120
|
-
#
|
|
121
|
-
#
|
|
122
|
-
# read through; `remote_field` names the scalar on the target. All
|
|
123
|
-
# three are plain identifiers, the same shape `Field#name`/`#type`
|
|
124
|
-
# already are.
|
|
83
|
+
# `reference` names the local `reference_to` attribute to read through; `remote_field`
|
|
84
|
+
# the scalar on its target.
|
|
125
85
|
value_object "ProjectedField" do
|
|
126
86
|
attribute :name, String
|
|
127
87
|
attribute :reference, String
|
|
@@ -135,10 +95,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
135
95
|
reference_to Bluebook
|
|
136
96
|
attribute :name, AggregateName
|
|
137
97
|
attribute :description, Description, optional: true
|
|
138
|
-
#
|
|
139
|
-
# level up. LiteralText, not a dedicated value object: the field
|
|
140
|
-
# rides the same self-describing `inspect` encoding `default:`
|
|
141
|
-
# already uses, so it needs no invariant of its own.
|
|
98
|
+
# LiteralText: rides the same `inspect` encoding as `default:`, so it needs no invariant.
|
|
142
99
|
attribute :provenance, LiteralText, optional: true
|
|
143
100
|
|
|
144
101
|
attribute :position, Position, optional: true
|
|
@@ -151,60 +108,30 @@ Hecks.bluebook "Bluebook" do
|
|
|
151
108
|
emits RootDeclared
|
|
152
109
|
end
|
|
153
110
|
|
|
154
|
-
#
|
|
155
|
-
# argument on Declare while an identity was a single field ; a list cannot be
|
|
156
|
-
# carried by one argument, and every other list in this language is filled by
|
|
157
|
-
# a verb of its own, so this is the shape that was already here.
|
|
111
|
+
# One part of the identity, attached the way one attribute is.
|
|
158
112
|
command "Identify" do
|
|
159
113
|
role "Language"
|
|
160
114
|
goal "Attach one part of the aggregate's identity"
|
|
161
115
|
|
|
162
116
|
attribute :path, IdentityPath
|
|
163
117
|
|
|
164
|
-
#
|
|
165
|
-
#
|
|
166
|
-
# were the whole of it : `empty?` let an aggregate say nothing and be given a
|
|
167
|
-
# minted `id`, and `== "id"` let it name that slot outright. Both are gone,
|
|
168
|
-
# so what is left is the rule itself, and it now runs on every part rather
|
|
169
|
-
# than on whichever one a single field happened to hold.
|
|
170
|
-
#
|
|
171
|
-
# THREE WAYS TO REACH A SCALAR (ADR 0025, "Identity"), and this given no
|
|
172
|
-
# longer distinguishes them — it used to accept only a dotted path
|
|
173
|
-
# (`number.value`, a value object's own field) or an `_id`-suffixed
|
|
174
|
-
# reference, and REFUSED a bare scalar field (`sku`), which is legal
|
|
175
|
-
# too : a plain primitive attribute IS already a scalar, nothing to
|
|
176
|
-
# open. That distinction belongs to the BUILDER, which resolves each
|
|
177
|
-
# spelling before an identity part ever reaches here
|
|
178
|
-
# (`AttributeCollector#resolve_identity_field!` — the single place
|
|
179
|
-
# that decides dotted-unwrap vs. reference vs. bare-scalar, and the
|
|
180
|
-
# only place that can, since it alone holds the attribute's declared
|
|
181
|
-
# type). What is left for THIS rule to say, once the builder has
|
|
182
|
-
# already resolved a real shape, is only that a part was actually
|
|
183
|
-
# given a name at all.
|
|
118
|
+
# The builder resolves each spelling (dotted path, reference, bare scalar) before a part
|
|
119
|
+
# arrives (`AttributeCollector#resolve_identity_field!`); this rule only asks it is named.
|
|
184
120
|
given("an identity part names something") { !path.value.to_s.empty? }
|
|
185
121
|
|
|
186
122
|
sets :identified_by, append: { value: :path }
|
|
187
123
|
emits RootIdentified
|
|
188
124
|
end
|
|
189
125
|
|
|
190
|
-
#
|
|
191
|
-
#
|
|
192
|
-
#
|
|
193
|
-
# `bluebook_id` is an IdentityField, not an AggregateName — it holds the id of
|
|
194
|
-
# the chapter above, and calling that a name for aggregates was sloppiness that
|
|
195
|
-
# would read as a lie the first time somebody looked.
|
|
196
|
-
# WHERE IT SITS AMONG ITS SIBLINGS. Declaration order is a FACT ABOUT THE
|
|
197
|
-
# SOURCE — the IR is a contract read straight from this file,
|
|
198
|
-
# field for field AND INDEX FOR INDEX. So the language HOLDS it, instead of
|
|
199
|
-
# inheriting it from whatever order a store happens to iterate: an ask that
|
|
200
|
-
# does not say how it is ordered is answered in identity order, which is
|
|
201
|
-
# right for every other ask and fatal for the one that is the SOURCE.
|
|
126
|
+
# Declaration order is a fact about the source: the IR is read index for index, so the language
|
|
127
|
+
# holds it rather than inheriting a store's iteration order.
|
|
202
128
|
value_object "Position" do
|
|
203
129
|
attribute :value, Integer
|
|
204
130
|
end
|
|
205
131
|
|
|
206
132
|
attribute :position, Position
|
|
207
133
|
|
|
134
|
+
# The aggregates declared in a chapter; the parent reference is the query.
|
|
208
135
|
query "DeclaredIn" do
|
|
209
136
|
attribute :bluebook, IdentityField
|
|
210
137
|
where(bluebook: :bluebook)
|
|
@@ -215,26 +142,17 @@ Hecks.bluebook "Bluebook" do
|
|
|
215
142
|
role "Language"
|
|
216
143
|
goal "Attach one attribute to the aggregate"
|
|
217
144
|
|
|
218
|
-
# The
|
|
219
|
-
#
|
|
220
|
-
# "no Shape with id …" — with no predicate at all.
|
|
221
|
-
#
|
|
222
|
-
# This is the rule "attributes must use value-object types", which could
|
|
223
|
-
# not be a `given` : it needs, for each element of a list, a check against
|
|
224
|
-
# another list, and the sublanguage has no quantifier and cannot see
|
|
225
|
-
# inside a list element. As a reference it stops being a predicate and
|
|
226
|
-
# becomes a consequence of the model.
|
|
145
|
+
# The type is a reference to the value object it names, so an undeclared type fails reference
|
|
146
|
+
# resolution. A `given` cannot state this: the sublanguage has no quantifier over a list.
|
|
227
147
|
reference_to ValueObject, as: :type
|
|
228
148
|
attribute :name, FieldName
|
|
229
149
|
attribute :list, ListFlag
|
|
230
150
|
attribute :optional, ListFlag, optional: true
|
|
231
|
-
# A
|
|
151
|
+
# A pattern is a regex, not a flag (see ListFlag).
|
|
232
152
|
attribute :pattern, LiteralText, optional: true
|
|
233
153
|
attribute :default, LiteralText, optional: true
|
|
234
|
-
#
|
|
235
|
-
#
|
|
236
|
-
# is carried as text and checked where it is READ, by the reader, which
|
|
237
|
-
# already raises for the other things the language cannot say about itself.
|
|
154
|
+
# Free text, not a reference: `reference_to` reaches heads only, so the qualified name
|
|
155
|
+
# is carried as text and checked by the reader.
|
|
238
156
|
attribute :admits, LiteralText, optional: true
|
|
239
157
|
attribute :relationship, LiteralText, optional: true
|
|
240
158
|
|
|
@@ -243,34 +161,19 @@ Hecks.bluebook "Bluebook" do
|
|
|
243
161
|
emits AttributeAttached
|
|
244
162
|
end
|
|
245
163
|
|
|
246
|
-
# An attribute that points at
|
|
247
|
-
#
|
|
248
|
-
# `Attribute` types its type as `reference_to ValueObject`, which is what makes
|
|
249
|
-
# "attributes use value-object types" a consequence of the model rather than a
|
|
250
|
-
# predicate. A cross-aggregate reference cannot go through it: its type is
|
|
251
|
-
# `Reference<Customer>`, which is not a value object and never will be. So the
|
|
252
|
-
# judge SKIPPED every one of them, and the meta-domain did not hold
|
|
253
|
-
# Account#customer_id at all — the way back was lossy for exactly one
|
|
254
|
-
# construct, and the comment excusing it said "the language does not model
|
|
255
|
-
# reference-typed attributes yet".
|
|
164
|
+
# An attribute that points at another aggregate's head. Its type is `Reference<Customer>`,
|
|
165
|
+
# which is not a value object, so it cannot go through `Attribute`.
|
|
256
166
|
command "Reference" do
|
|
257
167
|
role "Language"
|
|
258
168
|
goal "Attach an attribute that points at another aggregate's head"
|
|
259
169
|
|
|
260
|
-
#
|
|
261
|
-
#
|
|
262
|
-
# This carried `attribute :type, ReferenceType` — a STRING — with an invariant
|
|
263
|
-
# apologising for itself, because the shape that actually tells a reference
|
|
264
|
-
# from a value object (`Reference<Something>`) is unsayable in the predicate
|
|
265
|
-
# sublanguage. That was never a sublanguage gap; a string was simply the wrong
|
|
266
|
-
# model. As a reference it stops being a predicate and becomes a consequence
|
|
267
|
-
# of the model, exactly as Attribute's type does — and it is STRONGER than the
|
|
268
|
-
# prefix match, which only ever checked that the text looked right.
|
|
170
|
+
# Points at a declared head. As a reference rather than a string predicate on
|
|
171
|
+
# `Reference<...>`, it is a consequence of the model and stricter than a prefix match.
|
|
269
172
|
reference_to Aggregate, as: :points_at
|
|
270
173
|
attribute :name, FieldName
|
|
271
174
|
attribute :list, ListFlag
|
|
272
175
|
attribute :optional, ListFlag, optional: true
|
|
273
|
-
# A
|
|
176
|
+
# A pattern is a regex, not a flag (see ListFlag).
|
|
274
177
|
attribute :pattern, LiteralText, optional: true
|
|
275
178
|
attribute :default, LiteralText, optional: true
|
|
276
179
|
attribute :admits, LiteralText, optional: true
|
|
@@ -281,14 +184,8 @@ Hecks.bluebook "Bluebook" do
|
|
|
281
184
|
emits ReferenceAttached
|
|
282
185
|
end
|
|
283
186
|
|
|
284
|
-
# An attribute whose type
|
|
285
|
-
#
|
|
286
|
-
# `Account#ledger` is a list of LedgerEntry — neither a value object nor another
|
|
287
|
-
# aggregate's head — so it fitted no verb and the walk skipped it, the last
|
|
288
|
-
# construct the way back could not carry. Same trick as Reference: point at the
|
|
289
|
-
# entity's own declaration, and "an aggregate holds a piece it declared" costs
|
|
290
|
-
# no predicate at all. Entities are declared before attributes are offered, so
|
|
291
|
-
# the reference resolves.
|
|
187
|
+
# An attribute whose type is an entity this aggregate holds, e.g. `Account#ledger`.
|
|
188
|
+
# Entities are declared before attributes are offered, so the reference resolves.
|
|
292
189
|
command "Holds" do
|
|
293
190
|
role "Language"
|
|
294
191
|
goal "Attach an attribute whose type is a piece of this aggregate"
|
|
@@ -297,7 +194,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
297
194
|
attribute :name, FieldName
|
|
298
195
|
attribute :list, ListFlag
|
|
299
196
|
attribute :optional, ListFlag, optional: true
|
|
300
|
-
# A
|
|
197
|
+
# A pattern is a regex, not a flag (see ListFlag).
|
|
301
198
|
attribute :pattern, LiteralText, optional: true
|
|
302
199
|
attribute :default, LiteralText, optional: true
|
|
303
200
|
attribute :admits, LiteralText, optional: true
|
|
@@ -308,14 +205,8 @@ Hecks.bluebook "Bluebook" do
|
|
|
308
205
|
emits PieceHeld
|
|
309
206
|
end
|
|
310
207
|
|
|
311
|
-
#
|
|
312
|
-
#
|
|
313
|
-
# Attribute, Reference and Holds each carried `given("… is named")` beside
|
|
314
|
-
# this, and not one of them could ever fire: an EMPTY name builds the value
|
|
315
|
-
# object and this invariant refuses first, while an ABSENT name builds no
|
|
316
|
-
# value object and the given did not refuse at all — probed, not reasoned.
|
|
317
|
-
# Three rules that read as rules and were decoration. A predicate cannot
|
|
318
|
-
# guard what a type already guards.
|
|
208
|
+
# The only rule that refuses an unnamed attribute. A `given` beside it could never fire:
|
|
209
|
+
# an empty name is refused here first, and an absent name builds no value object.
|
|
319
210
|
value_object "FieldName" do
|
|
320
211
|
attribute :value, String
|
|
321
212
|
invariant("an attribute is named") { !value.to_s.empty? }
|
|
@@ -326,24 +217,13 @@ Hecks.bluebook "Bluebook" do
|
|
|
326
217
|
invariant("a type is named") { !value.to_s.empty? }
|
|
327
218
|
end
|
|
328
219
|
|
|
329
|
-
# A literal written the way it can be read back
|
|
220
|
+
# A literal written the way it can be read back (Readings#encode_literal).
|
|
330
221
|
value_object "LiteralText" do
|
|
331
222
|
attribute :value, String
|
|
332
223
|
end
|
|
333
224
|
|
|
334
|
-
#
|
|
335
|
-
#
|
|
336
|
-
# because that is what the wire carries.
|
|
337
|
-
#
|
|
338
|
-
# `pattern` was typed with it too, which is not a loose typing but a FALSE
|
|
339
|
-
# one: a pattern holds a regex, and this invariant admits exactly two strings
|
|
340
|
-
# neither of which is one. It never fired only because no aggregate-level or
|
|
341
|
-
# entity-level attribute in the corpus declares a pattern — banking's one
|
|
342
|
-
# `pattern:` sits on a VALUE OBJECT field, which is built by
|
|
343
|
-
# `ValueObject.Field` and so went down a different command entirely. The
|
|
344
|
-
# first head that declared a pattern would have been refused by a rule about
|
|
345
|
-
# lists. It is `LiteralText` now, which is what the other four element
|
|
346
|
-
# builders already say a pattern is: free text.
|
|
225
|
+
# True or false as text, the wire form of `list` and `optional`.
|
|
226
|
+
# `pattern` is not typed with it: a pattern is a regex, so it is `LiteralText`.
|
|
347
227
|
value_object "ListFlag" do
|
|
348
228
|
attribute :value, String
|
|
349
229
|
invariant("list is true or false") { value.to_s == "true" || value.to_s == "false" }
|
|
@@ -379,37 +259,11 @@ Hecks.bluebook "Bluebook" do
|
|
|
379
259
|
role "Language"
|
|
380
260
|
goal "Close an aggregate — the checks that need every declaration present"
|
|
381
261
|
|
|
382
|
-
#
|
|
383
|
-
#
|
|
384
|
-
# whole-document rules live on a command dispatched after the aggregate
|
|
385
|
-
# is fully declared. This is the shape the tier-3 rules need ; whether
|
|
386
|
-
# the sublanguage can express their CONTENT is the open question.
|
|
387
|
-
|
|
388
|
-
# THE RULE THAT WAS HERE WAS NOT TRUE, and nothing could tell us while Seal
|
|
389
|
-
# went undispatched. `given("an aggregate declares at least one attribute")`
|
|
390
|
-
# was invented for this command — it is not one of the rules ported from the
|
|
391
|
-
# builders, so no bluebook was ever written against it. The first time it
|
|
392
|
-
# ran it refused twenty-five of them, including every aggregate whose state
|
|
393
|
-
# is a `lifecycle` rather than an `attribute` : a state machine declares no
|
|
394
|
-
# attribute and is perfectly well formed.
|
|
395
|
-
#
|
|
396
|
-
# Seal stays. It is the right SHAPE for a whole-document rule — dispatched
|
|
397
|
-
# once every declaration is present — and it is now actually dispatched, so
|
|
398
|
-
# the next rule put here will be seen refusing instead of sitting decorative.
|
|
399
|
-
# The rule waiting for it is "a mutation names a field the aggregate has",
|
|
400
|
-
# which lives in AggregateBuilder today because saying it here needs to reach
|
|
401
|
-
# a list on another root.
|
|
402
|
-
# AN AGGREGATE SAYS WHAT IT IS KNOWN BY. Nothing falls back to `id` any more.
|
|
403
|
-
#
|
|
404
|
-
# The fallback was never a default — it was a MINT. An aggregate that said
|
|
405
|
-
# nothing got an id invented for it, so the same declaration named a
|
|
406
|
-
# different record on the next run, and nothing outside the runtime could
|
|
407
|
-
# name a record at all. The rule that stood here permitted it in as many
|
|
408
|
-
# words (`empty? || == "id"`), and the comment named exactly who was
|
|
409
|
-
# leaning on it : the language's own chapters, all fourteen of them.
|
|
262
|
+
# Builders validate at `build`, but a given fires at dispatch, before later declarations
|
|
263
|
+
# exist. Whole-document rules therefore live on a command dispatched after the aggregate.
|
|
410
264
|
#
|
|
411
|
-
#
|
|
412
|
-
# is Identify's rule
|
|
265
|
+
# An aggregate says what it is known by; nothing falls back to a minted `id`.
|
|
266
|
+
# What each part must look like is Identify's rule; this one only asks that there be one.
|
|
413
267
|
given("an aggregate says what it is known by") { !identified_by.empty? }
|
|
414
268
|
|
|
415
269
|
emits RootSealed
|
|
@@ -426,8 +280,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
426
280
|
emits ValueDeclared
|
|
427
281
|
end
|
|
428
282
|
|
|
429
|
-
#
|
|
430
|
-
# Command.Rule attaches a given with, one level up.
|
|
283
|
+
# The aggregate boundary (ADR 0025): the same shape `Command.Rule` attaches a given with.
|
|
431
284
|
command "Invariant" do
|
|
432
285
|
role "Language"
|
|
433
286
|
goal "Attach one invariant to the aggregate"
|
|
@@ -443,9 +296,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
443
296
|
emits InvariantAttached
|
|
444
297
|
end
|
|
445
298
|
|
|
446
|
-
# A
|
|
447
|
-
# 0025) — the aggregate's own named `given`, referenced back by a
|
|
448
|
-
# command rather than re-typed.
|
|
299
|
+
# A precondition shared across commands, declared once and referenced by name (ADR 0025).
|
|
449
300
|
command "Precondition" do
|
|
450
301
|
role "Language"
|
|
451
302
|
goal "Declare one precondition commands can reference by name"
|
|
@@ -461,11 +312,8 @@ Hecks.bluebook "Bluebook" do
|
|
|
461
312
|
emits PreconditionAttached
|
|
462
313
|
end
|
|
463
314
|
|
|
464
|
-
#
|
|
465
|
-
#
|
|
466
|
-
# (BluebookBuilder#validate_projected_fields!, once every aggregate
|
|
467
|
-
# in the chapter is real), the same two-tier split a query's own
|
|
468
|
-
# hop already uses.
|
|
315
|
+
# The local half of a cross-aggregate read. The target is checked in
|
|
316
|
+
# `BluebookBuilder#validate_projected_fields!` once every aggregate in the chapter exists.
|
|
469
317
|
command "Projects" do
|
|
470
318
|
role "Language"
|
|
471
319
|
goal "Declare a field read locally through a reference"
|
|
@@ -483,9 +331,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
483
331
|
emits ProjectedFieldAttached
|
|
484
332
|
end
|
|
485
333
|
|
|
486
|
-
#
|
|
487
|
-
# they describe; SyntaxBoot discovers every aggregate-local seed table.
|
|
488
|
-
# Contexts represented here: Aggregate, Lifecycle.
|
|
334
|
+
# Grammar rows for the Aggregate and Lifecycle keywords; SyntaxBoot discovers them by table.
|
|
489
335
|
value_object "KeywordSeed" do
|
|
490
336
|
attribute :word, String
|
|
491
337
|
attribute :context, String, admits: "Syntax::Context"
|
|
@@ -511,14 +357,8 @@ Hecks.bluebook "Bluebook" do
|
|
|
511
357
|
member word: "query", context: "Aggregate", body: "keywords", inner: "Query", opens: "Query", fills: "", calls: "query_impl"
|
|
512
358
|
member word: "policy", context: "Aggregate", body: "keywords", inner: "Policy", opens: "Policy", fills: "", calls: "policy_impl"
|
|
513
359
|
member word: "value_object", context: "Aggregate", body: "keywords", inner: "ValueObject", opens: "ValueObject", fills: "value_objects"
|
|
514
|
-
#
|
|
515
|
-
#
|
|
516
|
-
# two-row move `identified_by` (above) already makes for its own
|
|
517
|
-
# block/blockless split — the body gate picks whichever row
|
|
518
|
-
# matches how the line was actually written. Declares a value
|
|
519
|
-
# object with exactly one attribute, named `value`, of the given
|
|
520
|
-
# type; sugar for the block form's own single `attribute :value,
|
|
521
|
-
# Type` line (`AggregateBuilder#value_object`'s own comment).
|
|
360
|
+
# Bare shorthand `value_object "Price", Integer`: a second row for the same word with
|
|
361
|
+
# `body: "none"`, chosen by the body gate. Declares one attribute `value` of that type.
|
|
522
362
|
member word: "value_object", context: "Aggregate", body: "none", inner: "", opens: "", fills: "value_objects"
|
|
523
363
|
member word: "command", context: "Aggregate", body: "keywords", inner: "Command", opens: "Command", fills: "", calls: "command_impl"
|
|
524
364
|
member word: "attribute", context: "Aggregate", body: "none", inner: "", opens: "", fills: "attributes", calls: "attribute_impl"
|
|
@@ -569,13 +409,8 @@ Hecks.bluebook "Bluebook" do
|
|
|
569
409
|
member keyword: "query", context: "Aggregate", at: "1", named: "", kind: "text", required: "true", fills: "name"
|
|
570
410
|
member keyword: "policy", context: "Aggregate", at: "1", named: "", kind: "text", required: "true", fills: "name"
|
|
571
411
|
member keyword: "value_object", context: "Aggregate", at: "1", named: "", kind: "text", required: "true", fills: "name"
|
|
572
|
-
# The bare shorthand's
|
|
573
|
-
# block
|
|
574
|
-
# `kind: "constant"` for the same reason `attribute`'s own type
|
|
575
|
-
# argument (below) is: a type is a bare constant, never quoted
|
|
576
|
-
# text. Type-AND-block is refused by the builder itself
|
|
577
|
-
# (`AggregateBuilder#value_object`), not here — an argument row
|
|
578
|
-
# cannot see the body, only the call.
|
|
412
|
+
# The bare shorthand's type argument: optional, since the block form has none.
|
|
413
|
+
# Type-and-block is refused by `AggregateBuilder#value_object`; a row cannot see the body.
|
|
579
414
|
member keyword: "value_object", context: "Aggregate", at: "2", named: "", kind: "constant", required: "false", fills: "type"
|
|
580
415
|
member keyword: "command", context: "Aggregate", at: "1", named: "", kind: "text", required: "true", fills: "name"
|
|
581
416
|
member keyword: "command", context: "Aggregate", at: "", named: "from", kind: "literal", required: "false", fills: "from"
|
|
@@ -3,16 +3,8 @@ Hecks.bluebook "Paging" do
|
|
|
3
3
|
generic
|
|
4
4
|
attaches_to "Query", "ReadModel"
|
|
5
5
|
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
# dispatches this aggregate for real. `SyntaxBoot`'s own generic
|
|
9
|
-
# discovery reads `KeywordSeed`/`ArgumentSeed`'s rows straight off the
|
|
10
|
-
# declared IR, the exact way it already reads the core's own — and
|
|
11
|
-
# dispatches them through the CORE's `Bluebook::Syntax.Keyword`/
|
|
12
|
-
# `.Argument` verbs, which is why these rows need no entity, no
|
|
13
|
-
# lifecycle, no creating command of their own here: the verb they ride
|
|
14
|
-
# already exists, and a second copy of it would be the core's own
|
|
15
|
-
# machinery duplicated for no reason.
|
|
6
|
+
# Holds grammar rows only, like `Vocabulary`: SyntaxBoot reads them off the declared IR and
|
|
7
|
+
# dispatches them through the core's `Syntax.Keyword`/`.Argument` verbs, so no commands here.
|
|
16
8
|
aggregate "Syntax" do
|
|
17
9
|
description "The rows this sub-language contributes to the core's own grammar table."
|
|
18
10
|
identified_by PagingSyntaxName, as: :name
|
|
@@ -23,11 +15,7 @@ Hecks.bluebook "Paging" do
|
|
|
23
15
|
invariant("a syntax table is named") { !value.to_s.empty? }
|
|
24
16
|
end
|
|
25
17
|
|
|
26
|
-
#
|
|
27
|
-
# not rewritten. `limit`/`offset`/`cursor`/`nulls`, on both `Query`
|
|
28
|
-
# and `ReadModel`. See syntax.bluebook's own comment at the old site
|
|
29
|
-
# for why `limit` fills a dedicated field while the other three land
|
|
30
|
-
# on the open `options` map.
|
|
18
|
+
# `limit` fills a dedicated field on Query; the other three land on the open `options` map.
|
|
31
19
|
value_object "KeywordSeed" do
|
|
32
20
|
attribute :word, String
|
|
33
21
|
attribute :context, String
|
|
@@ -68,7 +56,10 @@ Hecks.bluebook "Paging" do
|
|
|
68
56
|
member keyword: "nulls", context: "Query", at: "1", named: "", kind: "symbol", required: "true", fills: "mode"
|
|
69
57
|
|
|
70
58
|
member keyword: "limit", context: "ReadModel", at: "1", named: "", kind: "number", required: "true", fills: "value"
|
|
59
|
+
# ADR 0055's `on:`; see projection.bluebook's own "where"/"order_by" ReadModel rows.
|
|
60
|
+
member keyword: "limit", context: "ReadModel", at: "", named: "on", kind: "constant", required: "false", fills: "target"
|
|
71
61
|
member keyword: "offset", context: "ReadModel", at: "1", named: "", kind: "number", required: "true", fills: "value"
|
|
62
|
+
member keyword: "offset", context: "ReadModel", at: "", named: "on", kind: "constant", required: "false", fills: "target"
|
|
72
63
|
member keyword: "cursor", context: "ReadModel", at: "1", named: "", kind: "symbol", required: "true", fills: "value"
|
|
73
64
|
member keyword: "nulls", context: "ReadModel", at: "1", named: "", kind: "symbol", required: "true", fills: "mode"
|
|
74
65
|
end
|