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
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
//! Exemplar shapes for rust/project/fielded.rb (see mod.rs).
|
|
2
|
+
//!
|
|
3
|
+
//! Each `Fielded::field` arm shape is a standalone leaf so both outer skeletons can reuse it.
|
|
4
|
+
#![allow(dead_code, unused_variables)]
|
|
5
|
+
|
|
6
|
+
fn tmpl_value_expr_placeholder(v: &i64) -> crate::kernel::Value {
|
|
7
|
+
crate::kernel::Value::Int(*v)
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
struct TmplListOptionalHost {
|
|
11
|
+
tmpl_ident: Option<Vec<i64>>,
|
|
12
|
+
}
|
|
13
|
+
impl TmplListOptionalHost {
|
|
14
|
+
fn arm(&self) -> Option<crate::kernel::Field<'_>> {
|
|
15
|
+
use crate::kernel::Field;
|
|
16
|
+
use crate::kernel::Value;
|
|
17
|
+
match "x" {
|
|
18
|
+
// TMPL:fielded_arm_list_optional BEGIN
|
|
19
|
+
"tmpl_field" => self.tmpl_ident.as_ref().map(|v| Field::Value(Value::List(v.len()))).or(Some(Field::Value(Value::Nil))),
|
|
20
|
+
// TMPL:fielded_arm_list_optional END
|
|
21
|
+
_ => None,
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
struct TmplListHost {
|
|
27
|
+
tmpl_ident: Vec<i64>,
|
|
28
|
+
}
|
|
29
|
+
impl TmplListHost {
|
|
30
|
+
fn arm(&self) -> Option<crate::kernel::Field<'_>> {
|
|
31
|
+
use crate::kernel::Field;
|
|
32
|
+
use crate::kernel::Value;
|
|
33
|
+
match "x" {
|
|
34
|
+
// TMPL:fielded_arm_list BEGIN
|
|
35
|
+
"tmpl_field" => Some(Field::Value(Value::List(self.tmpl_ident.len()))),
|
|
36
|
+
// TMPL:fielded_arm_list END
|
|
37
|
+
_ => None,
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
struct TmplOptionalScalarHost {
|
|
43
|
+
tmpl_ident: Option<i64>,
|
|
44
|
+
}
|
|
45
|
+
impl TmplOptionalScalarHost {
|
|
46
|
+
fn arm(&self) -> Option<crate::kernel::Field<'_>> {
|
|
47
|
+
use crate::kernel::Field;
|
|
48
|
+
use crate::kernel::Value;
|
|
49
|
+
match "x" {
|
|
50
|
+
// TMPL:fielded_arm_optional_scalar BEGIN
|
|
51
|
+
"tmpl_field" => self.tmpl_ident.as_ref().map(|v| Field::Value(tmpl_value_expr_placeholder(v))).or(Some(Field::Value(Value::Nil))),
|
|
52
|
+
// TMPL:fielded_arm_optional_scalar END
|
|
53
|
+
_ => None,
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
struct TmplNestedInner;
|
|
59
|
+
impl crate::kernel::Fielded for TmplNestedInner {
|
|
60
|
+
fn field(&self, name: &str) -> Option<crate::kernel::Field<'_>> {
|
|
61
|
+
None
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
struct TmplOptionalNestedHost {
|
|
65
|
+
tmpl_ident: Option<TmplNestedInner>,
|
|
66
|
+
}
|
|
67
|
+
impl TmplOptionalNestedHost {
|
|
68
|
+
fn arm(&self) -> Option<crate::kernel::Field<'_>> {
|
|
69
|
+
use crate::kernel::Field;
|
|
70
|
+
use crate::kernel::Value;
|
|
71
|
+
match "x" {
|
|
72
|
+
// TMPL:fielded_arm_optional_nested BEGIN
|
|
73
|
+
"tmpl_field" => self.tmpl_ident.as_ref().map(|v| Field::Nested(v)).or(Some(Field::Value(Value::Nil))),
|
|
74
|
+
// TMPL:fielded_arm_optional_nested END
|
|
75
|
+
_ => None,
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
struct TmplScalarHost {
|
|
81
|
+
tmpl_ident: i64,
|
|
82
|
+
}
|
|
83
|
+
impl TmplScalarHost {
|
|
84
|
+
fn arm(&self) -> Option<crate::kernel::Field<'_>> {
|
|
85
|
+
use crate::kernel::Field;
|
|
86
|
+
match "x" {
|
|
87
|
+
// TMPL:fielded_arm_scalar BEGIN
|
|
88
|
+
"tmpl_field" => Some(Field::Value(tmpl_value_expr_placeholder(&self.tmpl_ident))),
|
|
89
|
+
// TMPL:fielded_arm_scalar END
|
|
90
|
+
_ => None,
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
struct TmplNestedHost {
|
|
96
|
+
tmpl_ident: TmplNestedInner,
|
|
97
|
+
}
|
|
98
|
+
impl TmplNestedHost {
|
|
99
|
+
fn arm(&self) -> Option<crate::kernel::Field<'_>> {
|
|
100
|
+
use crate::kernel::Field;
|
|
101
|
+
match "x" {
|
|
102
|
+
// TMPL:fielded_arm_nested BEGIN
|
|
103
|
+
"tmpl_field" => Some(Field::Nested(&self.tmpl_ident)),
|
|
104
|
+
// TMPL:fielded_arm_nested END
|
|
105
|
+
_ => None,
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
struct TmplLifecycleHost {
|
|
111
|
+
tmpl_ident: String,
|
|
112
|
+
}
|
|
113
|
+
impl TmplLifecycleHost {
|
|
114
|
+
fn arm(&self) -> Option<crate::kernel::Field<'_>> {
|
|
115
|
+
use crate::kernel::Field;
|
|
116
|
+
use crate::kernel::Value;
|
|
117
|
+
match "x" {
|
|
118
|
+
// TMPL:fielded_lifecycle_arm BEGIN
|
|
119
|
+
"tmpl_field" => Some(Field::Value(Value::Str(self.tmpl_ident.clone()))),
|
|
120
|
+
// TMPL:fielded_lifecycle_arm END
|
|
121
|
+
_ => None,
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Plain `bool` flag field read by `corrects` givens, like the lifecycle arm.
|
|
127
|
+
struct TmplCorrectsFlagHost {
|
|
128
|
+
tmpl_ident: bool,
|
|
129
|
+
}
|
|
130
|
+
impl TmplCorrectsFlagHost {
|
|
131
|
+
fn arm(&self) -> Option<crate::kernel::Field<'_>> {
|
|
132
|
+
use crate::kernel::Field;
|
|
133
|
+
use crate::kernel::Value;
|
|
134
|
+
match "x" {
|
|
135
|
+
// TMPL:fielded_corrects_flag_arm BEGIN
|
|
136
|
+
"tmpl_field" => Some(Field::Value(Value::Bool(self.tmpl_ident))),
|
|
137
|
+
// TMPL:fielded_corrects_flag_arm END
|
|
138
|
+
_ => None,
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// The marker is the whole placeholder arm line at column 0: `render` never reindents, so leading
|
|
144
|
+
// whitespace would double up with Ruby's already-indented arm block.
|
|
145
|
+
// The two skeletons use distinct types because a second `impl Fielded` on one type is an error.
|
|
146
|
+
fn tmpl_arms_block() -> Option<crate::kernel::Field<'static>> {
|
|
147
|
+
None
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// `Fielded::items`: list elements for the enumeration operators, as nested or scalar fields.
|
|
151
|
+
fn tmpl_items_block() -> Option<Vec<crate::kernel::Field<'static>>> {
|
|
152
|
+
None
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// `Fielded::as_scalar`: a single-attribute object reads as that attribute, else `None`.
|
|
156
|
+
fn tmpl_as_scalar_placeholder() -> Option<crate::kernel::Value> {
|
|
157
|
+
None
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
struct TmplItemsNestedHost {
|
|
161
|
+
tmpl_ident: Vec<TmplNestedInner>,
|
|
162
|
+
}
|
|
163
|
+
impl TmplItemsNestedHost {
|
|
164
|
+
fn arm(&self) -> Option<Vec<crate::kernel::Field<'_>>> {
|
|
165
|
+
#[allow(unused_imports)]
|
|
166
|
+
use crate::kernel::{Field, Value};
|
|
167
|
+
match "x" {
|
|
168
|
+
// TMPL:fielded_items_arm_list_nested BEGIN
|
|
169
|
+
"tmpl_field" => Some(self.tmpl_ident.iter().map(|v| Field::Nested(v)).collect()),
|
|
170
|
+
// TMPL:fielded_items_arm_list_nested END
|
|
171
|
+
_ => None,
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
struct TmplItemsScalarHost {
|
|
177
|
+
tmpl_ident: Vec<i64>,
|
|
178
|
+
}
|
|
179
|
+
impl TmplItemsScalarHost {
|
|
180
|
+
fn arm(&self) -> Option<Vec<crate::kernel::Field<'_>>> {
|
|
181
|
+
#[allow(unused_imports)]
|
|
182
|
+
use crate::kernel::{Field, Value};
|
|
183
|
+
match "x" {
|
|
184
|
+
// TMPL:fielded_items_arm_list_scalar BEGIN
|
|
185
|
+
"tmpl_field" => Some(self.tmpl_ident.iter().map(|v| Field::Value(tmpl_value_expr_placeholder(v))).collect()),
|
|
186
|
+
// TMPL:fielded_items_arm_list_scalar END
|
|
187
|
+
_ => None,
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
struct TmplItemsOptionalNestedHost {
|
|
193
|
+
tmpl_ident: Option<Vec<TmplNestedInner>>,
|
|
194
|
+
}
|
|
195
|
+
impl TmplItemsOptionalNestedHost {
|
|
196
|
+
fn arm(&self) -> Option<Vec<crate::kernel::Field<'_>>> {
|
|
197
|
+
#[allow(unused_imports)]
|
|
198
|
+
use crate::kernel::{Field, Value};
|
|
199
|
+
match "x" {
|
|
200
|
+
// TMPL:fielded_items_arm_list_optional_nested BEGIN
|
|
201
|
+
"tmpl_field" => self.tmpl_ident.as_ref().map(|items| items.iter().map(|v| Field::Nested(v)).collect()),
|
|
202
|
+
// TMPL:fielded_items_arm_list_optional_nested END
|
|
203
|
+
_ => None,
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
struct TmplItemsOptionalScalarHost {
|
|
209
|
+
tmpl_ident: Option<Vec<i64>>,
|
|
210
|
+
}
|
|
211
|
+
impl TmplItemsOptionalScalarHost {
|
|
212
|
+
fn arm(&self) -> Option<Vec<crate::kernel::Field<'_>>> {
|
|
213
|
+
#[allow(unused_imports)]
|
|
214
|
+
use crate::kernel::{Field, Value};
|
|
215
|
+
match "x" {
|
|
216
|
+
// TMPL:fielded_items_arm_list_optional_scalar BEGIN
|
|
217
|
+
"tmpl_field" => self.tmpl_ident.as_ref().map(|items| items.iter().map(|v| Field::Value(tmpl_value_expr_placeholder(v))).collect()),
|
|
218
|
+
// TMPL:fielded_items_arm_list_optional_scalar END
|
|
219
|
+
_ => None,
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
struct TmplFlatType;
|
|
225
|
+
struct TmplRecordType;
|
|
226
|
+
|
|
227
|
+
// The conditional `use crate::kernel::Value;` marker is the real statement, so leaving it
|
|
228
|
+
// unsubstituted is harmless. `#[allow(unused_imports)]` sits before the fence to stay out of it.
|
|
229
|
+
#[allow(unused_imports)]
|
|
230
|
+
// TMPL:fielded_flat BEGIN
|
|
231
|
+
impl crate::kernel::Fielded for TmplFlatType {
|
|
232
|
+
fn field(&self, name: &str) -> Option<crate::kernel::Field<'_>> {
|
|
233
|
+
use crate::kernel::Field;
|
|
234
|
+
use crate::kernel::Value;
|
|
235
|
+
match name {
|
|
236
|
+
"tmpl_arms_placeholder" => tmpl_arms_block(),
|
|
237
|
+
_ => None,
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
fn items(&self, name: &str) -> Option<Vec<crate::kernel::Field<'_>>> {
|
|
242
|
+
#[allow(unused_imports)]
|
|
243
|
+
use crate::kernel::{Field, Value};
|
|
244
|
+
match name {
|
|
245
|
+
"tmpl_items_placeholder" => tmpl_items_block(),
|
|
246
|
+
_ => None,
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
fn as_scalar(&self) -> Option<crate::kernel::Value> {
|
|
251
|
+
tmpl_as_scalar_placeholder()
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// TMPL:fielded_flat END
|
|
255
|
+
|
|
256
|
+
#[allow(unused_imports)]
|
|
257
|
+
// TMPL:fielded_record BEGIN
|
|
258
|
+
impl crate::kernel::Fielded for TmplRecordType {
|
|
259
|
+
fn field(&self, name: &str) -> Option<crate::kernel::Field<'_>> {
|
|
260
|
+
use crate::kernel::{Field, Value};
|
|
261
|
+
match name {
|
|
262
|
+
"tmpl_arms_placeholder" => tmpl_arms_block(),
|
|
263
|
+
_ => None,
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
fn items(&self, name: &str) -> Option<Vec<crate::kernel::Field<'_>>> {
|
|
268
|
+
#[allow(unused_imports)]
|
|
269
|
+
use crate::kernel::{Field, Value};
|
|
270
|
+
match name {
|
|
271
|
+
"tmpl_items_placeholder" => tmpl_items_block(),
|
|
272
|
+
_ => None,
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
fn as_scalar(&self) -> Option<crate::kernel::Value> {
|
|
277
|
+
tmpl_as_scalar_placeholder()
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// TMPL:fielded_record END
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
// Exemplar shapes for rust/project/json_codec.rb; see mod.rs.
|
|
2
|
+
// Kept out of the fenced region so its prose is not baked into every generated codec.
|
|
3
|
+
#![allow(dead_code, unused_variables)]
|
|
4
|
+
|
|
5
|
+
use crate::exemplar::types::TmplKind;
|
|
6
|
+
|
|
7
|
+
// An `impl` block is a complete top-level item and needs no `tmpl_*_host` wrapper.
|
|
8
|
+
// TMPL:closed_set_codec BEGIN
|
|
9
|
+
impl TmplKind {
|
|
10
|
+
pub fn to_json(&self) -> crate::kernel::Json {
|
|
11
|
+
let member = match self {
|
|
12
|
+
// TMPL:closed_set_codec:TO_JSON_ARM BEGIN
|
|
13
|
+
TmplKind::TmplMemberA => "tmpl_member_a",
|
|
14
|
+
// TMPL:closed_set_codec:TO_JSON_ARM END
|
|
15
|
+
};
|
|
16
|
+
crate::kernel::Json::obj(vec![("tmpl_field_name", crate::kernel::Json::str(member))])
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
pub fn from_json(v: &crate::kernel::Json) -> Result<Self, crate::kernel::Refusal> {
|
|
20
|
+
// A `one_of` closed set is admission-checked on the raw offered
|
|
21
|
+
// value, no shape check first — `Value::Admission#admit_member`
|
|
22
|
+
// runs on whatever `Value::Coercion#fields_for` auto-wrapped into
|
|
23
|
+
// the sole attribute's slot (a bare Array, a Bool, anything), never
|
|
24
|
+
// on a value already known to be a String. `v.dig` gives the same
|
|
25
|
+
// tolerant unwrap Ruby's own `fields_for` does: the wrapped
|
|
26
|
+
// `{"tmpl_field_name": ...}` shape's inner value if `v` is an
|
|
27
|
+
// object, or `v` itself untouched if it isn't (matching
|
|
28
|
+
// `fields_for`'s single-field auto-wrap of a bare scalar/array/
|
|
29
|
+
// whatever). Only then is admission checked — a non-member value
|
|
30
|
+
// refuses `InvariantViolation`, matching Ruby's own refusal kind,
|
|
31
|
+
// never `TypeMismatch` for a shape a member set never declared.
|
|
32
|
+
//
|
|
33
|
+
// BUG#14 (qa/bluebook/quality_control.bluebook) — a missing field
|
|
34
|
+
// is not "a shape a member set never declared" the way a present-
|
|
35
|
+
// but-wrong value is; it is `Value::Coercion#check_required_fields`
|
|
36
|
+
// (runtime/value/coercion.rb) firing, and that check runs before
|
|
37
|
+
// `admit_member` in `validate!`'s own order. A caller-supplied
|
|
38
|
+
// `null` for a required command argument of this type is translated
|
|
39
|
+
// by `required_composite_argument_expr` (json_codec.rb, BUG#4) into
|
|
40
|
+
// an empty object — "build the value object from no fields at all",
|
|
41
|
+
// matching `Value::Coercion#nil_argument`'s own `build(value_object,
|
|
42
|
+
// {}, aggregate)` exactly — so `v.dig` above finding nothing is
|
|
43
|
+
// genuinely indistinguishable, at this point, from a Hash-shaped
|
|
44
|
+
// caller argument that simply never named the sole field's own key
|
|
45
|
+
// either way: both are that field's own absence, not a member
|
|
46
|
+
// mismatch.
|
|
47
|
+
// Without this explicit null check, that absence would still fall
|
|
48
|
+
// through to the admission match below, stringified as
|
|
49
|
+
// `Json::Null`'s own `ruby_to_s` (never a real member), so a
|
|
50
|
+
// required-but-omitted closed-set argument would misreport
|
|
51
|
+
// `InvariantViolation` where Ruby raises `TypeMismatch`
|
|
52
|
+
// ("{type}.{field} expects {expected}, got nil" — the same
|
|
53
|
+
// `numeric_field` wording `required_field_expr` already gives
|
|
54
|
+
// every other composite field's own missing-key case).
|
|
55
|
+
let candidate = v.dig("tmpl_field_name").cloned().unwrap_or(crate::kernel::Json::Null);
|
|
56
|
+
if matches!(candidate, crate::kernel::Json::Null) {
|
|
57
|
+
return Err(crate::kernel::Refusal::TypeMismatch("tmpl_null_field_message".to_string()));
|
|
58
|
+
}
|
|
59
|
+
match candidate.ruby_to_s().as_str() {
|
|
60
|
+
// TMPL:closed_set_codec:FROM_JSON_ARM BEGIN
|
|
61
|
+
"tmpl_member_a" => Ok(TmplKind::TmplMemberA),
|
|
62
|
+
// TMPL:closed_set_codec:FROM_JSON_ARM END
|
|
63
|
+
_ => Err(crate::kernel::Refusal::InvariantViolation(
|
|
64
|
+
crate::kernel::refusal_wording::InvariantViolationClosedSetMemberArgs {
|
|
65
|
+
r#type: "tmpl_closed_set_type",
|
|
66
|
+
admitted: &["tmpl_closed_set_member_a"],
|
|
67
|
+
offered: candidate.inspect().as_str(),
|
|
68
|
+
}
|
|
69
|
+
.render_args(),
|
|
70
|
+
)),
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// TMPL:closed_set_codec END
|
|
75
|
+
|
|
76
|
+
fn tmpl_json_value_placeholder() -> crate::kernel::Json {
|
|
77
|
+
crate::kernel::Json::Null
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Standalone rather than nested so several outers can reuse it without copying its source.
|
|
81
|
+
fn tmpl_to_json_field_host() -> Vec<(String, crate::kernel::Json)> {
|
|
82
|
+
vec![
|
|
83
|
+
// TMPL:to_json_field BEGIN
|
|
84
|
+
("tmpl_field_name".to_string(), tmpl_json_value_placeholder()),
|
|
85
|
+
// TMPL:to_json_field END
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// A distinct type from `TmplKind`: two `impl TmplKind` blocks in one module would collide.
|
|
90
|
+
#[derive(Clone)]
|
|
91
|
+
struct TmplTableRow {
|
|
92
|
+
tmpl_field: i64,
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const TMPL_TABLE: &[TmplTableRow] = &[];
|
|
96
|
+
|
|
97
|
+
// Function-call placeholders; the marker sits flush left because plain `render` never reindents.
|
|
98
|
+
fn tmpl_to_json_fields_block() -> (String, crate::kernel::Json) {
|
|
99
|
+
(String::new(), crate::kernel::Json::Null)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
fn tmpl_from_json_conditions() -> bool {
|
|
103
|
+
true
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// TMPL:closed_set_table_codec BEGIN
|
|
107
|
+
impl TmplTableRow {
|
|
108
|
+
pub fn to_json(&self) -> crate::kernel::Json {
|
|
109
|
+
crate::kernel::Json::Object(vec![
|
|
110
|
+
tmpl_to_json_fields_block()
|
|
111
|
+
])
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
pub fn from_json(v: &crate::kernel::Json) -> Result<Self, crate::kernel::Refusal> {
|
|
115
|
+
for row in TMPL_TABLE {
|
|
116
|
+
if tmpl_from_json_conditions() {
|
|
117
|
+
return Ok(row.clone());
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
Err(crate::kernel::Refusal::TypeMismatch(format!("TmplTableRow: no member matches {:?}", v)))
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// TMPL:closed_set_table_codec END
|
|
124
|
+
|
|
125
|
+
// Stands in for `Json::as_str`/`as_i64`/`as_f64`; a bare associated item would not compile.
|
|
126
|
+
fn tmpl_accessor_fn(j: &crate::kernel::Json) -> Option<i64> {
|
|
127
|
+
j.as_i64()
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
fn tmpl_from_json_condition_host(v: &crate::kernel::Json, row: &TmplTableRow) -> bool {
|
|
131
|
+
// TMPL:closed_set_table_from_json_condition BEGIN
|
|
132
|
+
v.get("tmpl_field_name").and_then(tmpl_accessor_fn) == Some(row.tmpl_field)
|
|
133
|
+
// TMPL:closed_set_table_from_json_condition END
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
fn tmpl_rhs_placeholder() -> i64 {
|
|
137
|
+
0
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
struct TmplFieldAssignmentHost {
|
|
141
|
+
tmpl_ident: i64,
|
|
142
|
+
}
|
|
143
|
+
impl TmplFieldAssignmentHost {
|
|
144
|
+
fn build() -> Self {
|
|
145
|
+
Self {
|
|
146
|
+
// TMPL:field_assignment BEGIN
|
|
147
|
+
tmpl_ident: tmpl_rhs_placeholder(),
|
|
148
|
+
// TMPL:field_assignment END
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
struct TmplFlatType2 {
|
|
154
|
+
tmpl_ident: i64,
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
fn tmpl_to_json_field_block() -> (String, crate::kernel::Json) {
|
|
158
|
+
(String::new(), crate::kernel::Json::Null)
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// TMPL:to_json_flat BEGIN
|
|
162
|
+
impl TmplFlatType2 {
|
|
163
|
+
pub fn to_json(&self) -> crate::kernel::Json {
|
|
164
|
+
crate::kernel::Json::Object(vec![
|
|
165
|
+
tmpl_to_json_field_block()
|
|
166
|
+
])
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// TMPL:to_json_flat END
|
|
170
|
+
|
|
171
|
+
struct TmplFlatType3 {
|
|
172
|
+
tmpl_ident: i64,
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
fn tmpl_to_json_field_block_sparse() -> (String, crate::kernel::Json) {
|
|
176
|
+
(String::new(), crate::kernel::Json::Null)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Drops `(key, Json::Null)` entries so an unset optional arg is an absent key, as in Ruby's
|
|
180
|
+
// `payload: args`. Command args only: records keep `null` for "declared, not set".
|
|
181
|
+
// TMPL:to_json_flat_sparse BEGIN
|
|
182
|
+
impl TmplFlatType3 {
|
|
183
|
+
pub fn to_json(&self) -> crate::kernel::Json {
|
|
184
|
+
crate::kernel::Json::Object(
|
|
185
|
+
vec![tmpl_to_json_field_block_sparse()]
|
|
186
|
+
.into_iter()
|
|
187
|
+
.filter(|(_, v)| !matches!(v, crate::kernel::Json::Null))
|
|
188
|
+
.collect(),
|
|
189
|
+
)
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// TMPL:to_json_flat_sparse END
|
|
193
|
+
|
|
194
|
+
// The unknown-argument preamble is a full check block or empty; the no-op `let` keeps the
|
|
195
|
+
// exemplar compiling. Backs both `emit_from_json_flat` and `emit_from_json_state`.
|
|
196
|
+
// TMPL:from_json_flat BEGIN
|
|
197
|
+
impl TmplFlatType2 {
|
|
198
|
+
pub fn from_json(v: &crate::kernel::Json) -> Result<Self, crate::kernel::Refusal> {
|
|
199
|
+
let _tmpl_unknown_check_placeholder = ();
|
|
200
|
+
Ok(Self {
|
|
201
|
+
tmpl_ident: tmpl_rhs_placeholder(),
|
|
202
|
+
})
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// TMPL:from_json_flat END
|
|
206
|
+
|
|
207
|
+
// `TIER1_LINE` is nested because only this one outer uses it. Method name and coercion are
|
|
208
|
+
// placeholders: the shape backs both strict `extract_id` and `extract_id_lenient`.
|
|
209
|
+
struct TmplExtractIdType;
|
|
210
|
+
// TMPL:extract_id BEGIN
|
|
211
|
+
impl TmplExtractIdType {
|
|
212
|
+
pub fn tmpl_extract_id_name(v: &crate::kernel::Json) -> Result<String, crate::kernel::Refusal> {
|
|
213
|
+
let by_identity = (|| -> Option<String> {
|
|
214
|
+
// TMPL:extract_id:TIER1_LINE BEGIN
|
|
215
|
+
let c0 = v.dig("tmpl_path")?.tmpl_id_coercion().ok()?;
|
|
216
|
+
// TMPL:extract_id:TIER1_LINE END
|
|
217
|
+
Some(tmpl_tier1_join_placeholder())
|
|
218
|
+
})();
|
|
219
|
+
let by_id_key = v.get("id").and_then(|j| j.tmpl_id_coercion().ok());
|
|
220
|
+
let by_reference_key = v.get("tmpl_reference_key").and_then(|j| j.tmpl_id_coercion().ok());
|
|
221
|
+
|
|
222
|
+
by_identity.or(by_id_key).or(by_reference_key).ok_or_else(|| {
|
|
223
|
+
crate::kernel::Refusal::TypeMismatch("tmpl_error_text".to_string())
|
|
224
|
+
})
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// TMPL:extract_id END
|
|
228
|
+
|
|
229
|
+
fn tmpl_tier1_join_placeholder() -> String {
|
|
230
|
+
String::new()
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// A real trait method so the exemplar compiles with the placeholder in place; codegen
|
|
234
|
+
// substitutes the method name only.
|
|
235
|
+
trait TmplIdCoercion {
|
|
236
|
+
fn tmpl_id_coercion(&self) -> Result<String, crate::kernel::Refusal>;
|
|
237
|
+
}
|
|
238
|
+
impl TmplIdCoercion for crate::kernel::Json {
|
|
239
|
+
fn tmpl_id_coercion(&self) -> Result<String, crate::kernel::Refusal> {
|
|
240
|
+
self.to_id_component()
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// `element_of`'s `wants`, joined with ", ". Infallible: it is only read for a refusal
|
|
245
|
+
// message, so a missing path part yields an empty string.
|
|
246
|
+
struct TmplExtractWantsType;
|
|
247
|
+
// TMPL:extract_wants BEGIN
|
|
248
|
+
impl TmplExtractWantsType {
|
|
249
|
+
pub fn extract_wants(v: &crate::kernel::Json) -> String {
|
|
250
|
+
(|| -> Option<String> {
|
|
251
|
+
// TMPL:extract_wants:TIER1_LINE BEGIN
|
|
252
|
+
let c0 = v.dig("tmpl_path")?.to_id_component().ok()?;
|
|
253
|
+
// TMPL:extract_wants:TIER1_LINE END
|
|
254
|
+
Some(tmpl_wants_join_placeholder())
|
|
255
|
+
})()
|
|
256
|
+
.unwrap_or_default()
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// TMPL:extract_wants END
|
|
260
|
+
|
|
261
|
+
fn tmpl_wants_join_placeholder() -> String {
|
|
262
|
+
String::new()
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Same shape as `extract_id`, over an already-built value instead of raw JSON.
|
|
266
|
+
struct TmplSelfIdentityType;
|
|
267
|
+
// TMPL:self_identity BEGIN
|
|
268
|
+
impl TmplSelfIdentityType {
|
|
269
|
+
pub fn identity(&self) -> String {
|
|
270
|
+
tmpl_identity_body_placeholder()
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// TMPL:self_identity END
|
|
274
|
+
|
|
275
|
+
fn tmpl_identity_body_placeholder() -> String {
|
|
276
|
+
String::new()
|
|
277
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Compile-checked Rust for every shape rust/project/*.rb emits; exemplar.rb slices the fenced
|
|
2
|
+
// `// TMPL:<id> BEGIN` / `END` regions and substitutes real names for the `tmpl_` vocabulary.
|
|
3
|
+
//
|
|
4
|
+
// `tmpl_*_host` functions only give fenced fragments real types and are never called, hence
|
|
5
|
+
// the allow below. Built under `#[cfg(test)]` only, never into a release artifact.
|
|
6
|
+
#![allow(dead_code, unused_variables)]
|
|
7
|
+
|
|
8
|
+
pub mod commands;
|
|
9
|
+
pub mod constraints;
|
|
10
|
+
pub mod fielded;
|
|
11
|
+
pub mod json;
|
|
12
|
+
pub mod mutations;
|
|
13
|
+
pub mod queries;
|
|
14
|
+
pub mod reactions;
|
|
15
|
+
pub mod read_models;
|
|
16
|
+
pub mod registry;
|
|
17
|
+
pub mod types;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// Exemplar shapes for rust/project/mutations.rb; see mod.rs.
|
|
2
|
+
// Hosts take `record: &mut Tmpl...`, not `&mut self`, as the generated mutation closures do.
|
|
3
|
+
#![allow(dead_code, unused_variables)]
|
|
4
|
+
|
|
5
|
+
struct TmplElement {
|
|
6
|
+
tmpl_field: i64,
|
|
7
|
+
}
|
|
8
|
+
struct TmplRecordHost {
|
|
9
|
+
tmpl_field: Vec<TmplElement>,
|
|
10
|
+
}
|
|
11
|
+
fn tmpl_fields_placeholder() -> TmplElement {
|
|
12
|
+
TmplElement { tmpl_field: 0 }
|
|
13
|
+
}
|
|
14
|
+
fn tmpl_mutation_append_host(record: &mut TmplRecordHost) {
|
|
15
|
+
// TMPL:mutation_append BEGIN
|
|
16
|
+
record.tmpl_field.push(tmpl_fields_placeholder());
|
|
17
|
+
// TMPL:mutation_append END
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
struct TmplScalarHost2 {
|
|
21
|
+
tmpl_field: i64,
|
|
22
|
+
}
|
|
23
|
+
fn tmpl_rhs_placeholder2() -> i64 {
|
|
24
|
+
0
|
|
25
|
+
}
|
|
26
|
+
fn tmpl_mutation_set_plain_host(record: &mut TmplScalarHost2) {
|
|
27
|
+
// TMPL:mutation_set_plain BEGIN
|
|
28
|
+
record.tmpl_field = tmpl_rhs_placeholder2();
|
|
29
|
+
// TMPL:mutation_set_plain END
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
fn tmpl_optional_rhs_placeholder() -> Option<i64> {
|
|
33
|
+
None
|
|
34
|
+
}
|
|
35
|
+
fn tmpl_mutation_set_unwrap_or_default_host(record: &mut TmplScalarHost2) {
|
|
36
|
+
// TMPL:mutation_set_unwrap_or_default BEGIN
|
|
37
|
+
record.tmpl_field = tmpl_optional_rhs_placeholder().unwrap_or_default();
|
|
38
|
+
// TMPL:mutation_set_unwrap_or_default END
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
struct TmplOptionScalarHost {
|
|
42
|
+
tmpl_field: Option<i64>,
|
|
43
|
+
}
|
|
44
|
+
fn tmpl_mutation_set_wrapped_host(record: &mut TmplOptionScalarHost) {
|
|
45
|
+
// TMPL:mutation_set_wrapped BEGIN
|
|
46
|
+
record.tmpl_field = Some(tmpl_rhs_placeholder2());
|
|
47
|
+
// TMPL:mutation_set_wrapped END
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
struct TmplArithmeticHost {
|
|
51
|
+
tmpl_field: i64,
|
|
52
|
+
}
|
|
53
|
+
fn tmpl_current_placeholder() -> i64 {
|
|
54
|
+
0
|
|
55
|
+
}
|
|
56
|
+
fn tmpl_updated_placeholder() -> i64 {
|
|
57
|
+
0
|
|
58
|
+
}
|
|
59
|
+
fn tmpl_mutation_arithmetic_host(record: &mut TmplArithmeticHost) {
|
|
60
|
+
// TMPL:mutation_arithmetic BEGIN
|
|
61
|
+
{ let current = tmpl_current_placeholder(); record.tmpl_field = tmpl_updated_placeholder(); }
|
|
62
|
+
// TMPL:mutation_arithmetic END
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// `remove:` on an entity list matches on the entity's identity field, not whole-element
|
|
66
|
+
// equality; `retain` keeps every element whose identity differs from the offered value.
|
|
67
|
+
struct TmplRemoveElement {
|
|
68
|
+
tmpl_id_field: i64,
|
|
69
|
+
}
|
|
70
|
+
struct TmplRemoveHost {
|
|
71
|
+
tmpl_field: Vec<TmplRemoveElement>,
|
|
72
|
+
}
|
|
73
|
+
fn tmpl_remove_match_placeholder() -> i64 {
|
|
74
|
+
0
|
|
75
|
+
}
|
|
76
|
+
fn tmpl_mutation_remove_host(record: &mut TmplRemoveHost) {
|
|
77
|
+
// TMPL:mutation_remove BEGIN
|
|
78
|
+
record.tmpl_field.retain(|item| item.tmpl_id_field != tmpl_remove_match_placeholder());
|
|
79
|
+
// TMPL:mutation_remove END
|
|
80
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Exemplar shape for rust/project/registry.rb's `emit_query_table`; see mod.rs.
|
|
2
|
+
#![allow(dead_code, unused_variables)]
|
|
3
|
+
|
|
4
|
+
// A `const` cannot call a function, so the row is a real literal substituted wholesale.
|
|
5
|
+
// TMPL:query_table BEGIN
|
|
6
|
+
pub const QUERIES: &[crate::kernel::QueryDef] = &[
|
|
7
|
+
crate::kernel::QueryDef {
|
|
8
|
+
verb: "tmpl_verb",
|
|
9
|
+
aggregate: "tmpl_aggregate",
|
|
10
|
+
conditions: &[
|
|
11
|
+
crate::kernel::QueryCondition {
|
|
12
|
+
field: "tmpl_field",
|
|
13
|
+
comparator: crate::kernel::query_comparators::QueryComparator::Eq,
|
|
14
|
+
value: crate::kernel::QueryConditionValue::Literal("tmpl_literal"),
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
reference_hop_conditions: &[
|
|
18
|
+
crate::kernel::read_model::ReferenceHopCondition {
|
|
19
|
+
via_field: "tmpl_via_field",
|
|
20
|
+
target_aggregate: "tmpl_target_aggregate",
|
|
21
|
+
through: &[crate::kernel::read_model::HopStep { via_field: "tmpl_via_field", target_aggregate: "tmpl_target_aggregate" }],
|
|
22
|
+
inner_field: "tmpl_inner_field",
|
|
23
|
+
inner_comparator: crate::kernel::query_comparators::QueryComparator::Eq,
|
|
24
|
+
inner_value: crate::kernel::QueryConditionValue::Literal("tmpl_literal"),
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
order_by: Some(crate::kernel::query_ordering::OrderBy { field: "tmpl_order_field", descending: true, nulls: crate::kernel::query_ordering::NullsMode::Last }),
|
|
28
|
+
offset: Some(crate::kernel::query_ordering::Offset::Literal(1)),
|
|
29
|
+
limit: Some(crate::kernel::query_ordering::Limit::Literal(5)),
|
|
30
|
+
authorization: Some(crate::kernel::named_query::TenantAuth { query_name: "tmpl_query_name", tenant_field: "tmpl_tenant_field", policy: "tmpl_policy" }),
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
// TMPL:query_table END
|