hecks 0.2.0 → 0.3.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 +5 -5
- data/lib/hecks/adapters/driven/claude_code.adapter +3 -0
- data/lib/hecks/adapters/driven/claude_code.rb +127 -0
- data/lib/hecks/adapters/driven/d1.adapter +12 -0
- data/lib/hecks/adapters/driven/d1.rb +403 -0
- data/lib/hecks/adapters/driven/folder.adapter +3 -0
- data/lib/hecks/adapters/driven/folder.rb +199 -0
- data/lib/hecks/adapters/driven/google_authentication.adapter +3 -0
- data/lib/hecks/adapters/driven/google_authentication.rb +100 -0
- data/lib/hecks/adapters/driven/governance_authorization.adapter +3 -0
- data/lib/hecks/adapters/driven/governance_authorization.rb +62 -0
- data/lib/hecks/adapters/driven/heki/journal.rb +51 -0
- data/lib/hecks/adapters/driven/heki/saga_store.rb +0 -0
- data/lib/hecks/adapters/driven/heki/snapshot.rb +38 -0
- data/lib/hecks/adapters/driven/heki.adapter +4 -0
- data/lib/hecks/adapters/driven/heki.rb +148 -0
- data/lib/hecks/adapters/driven/identity_registry.adapter +3 -0
- data/lib/hecks/adapters/driven/identity_registry.rb +26 -0
- data/lib/hecks/adapters/driven/in_memory_ordering.rb +51 -0
- data/lib/hecks/adapters/driven/lambda/client.rb +63 -0
- data/lib/hecks/adapters/driven/lambda.adapter +4 -0
- data/lib/hecks/adapters/driven/lambda.rb +131 -0
- data/lib/hecks/adapters/driven/memory.adapter +3 -0
- data/lib/hecks/adapters/driven/memory.rb +103 -0
- data/lib/hecks/adapters/driven/mock_stripe_adapter.adapter +3 -0
- data/lib/hecks/adapters/driven/mock_stripe_adapter.rb +28 -0
- data/lib/hecks/adapters/driven/postgres/codec.rb +80 -0
- data/lib/hecks/adapters/driven/postgres/schema_builder.rb +168 -0
- data/lib/hecks/adapters/driven/postgres.adapter +5 -0
- data/lib/hecks/adapters/driven/postgres.rb +391 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/era_store.rb +171 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/field_cache.rb +190 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/head_compiler.rb +429 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/mint_transaction.rb +166 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/provisioning.rb +286 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/resumable_backfill.rb +168 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/tail_merge.rb +163 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage/transform_installer.rb +114 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage.rb +137 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/coverage_check.rb +89 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/era_resolver.rb +82 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/merge_coordinator.rb +43 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager/minter.rb +132 -0
- data/lib/hecks/adapters/driven/postgres_era/lineage_manager.rb +74 -0
- data/lib/hecks/adapters/driven/postgres_era.adapter +6 -0
- data/lib/hecks/adapters/driven/postgres_era.rb +671 -0
- data/lib/hecks/adapters/driven/prism.adapter +3 -0
- data/lib/hecks/adapters/driven/prism.rb +80 -0
- data/lib/hecks/adapters/driven/secure_random_identity.adapter +3 -0
- data/lib/hecks/adapters/driven/secure_random_identity.rb +14 -0
- data/lib/hecks/adapters/driven/sql_query_builder.rb +221 -0
- data/lib/hecks/adapters/driven/sqlite/codec.rb +63 -0
- data/lib/hecks/adapters/driven/sqlite/projection.rb +105 -0
- data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +180 -0
- data/lib/hecks/adapters/driven/sqlite.adapter +9 -0
- data/lib/hecks/adapters/driven/sqlite.rb +285 -0
- data/lib/hecks/adapters/driven/system_clock.adapter +3 -0
- data/lib/hecks/adapters/driven/system_clock.rb +14 -0
- data/lib/hecks/adapters/driven.rb +36 -0
- data/lib/hecks/adapters.rb +6 -0
- data/lib/hecks/behaviors/dsl.rb +96 -0
- data/lib/hecks/behaviors/expectations.rb +280 -0
- data/lib/hecks/behaviors/ir.rb +31 -0
- data/lib/hecks/behaviors/rspec.rb +42 -0
- data/lib/hecks/behaviors/runner.rb +96 -0
- data/lib/hecks/behaviors.rb +25 -0
- data/lib/hecks/bluebook/aggregate.rb +108 -0
- data/lib/hecks/bluebook/assembly/aggregate_assembly.rb +134 -0
- data/lib/hecks/bluebook/assembly/build.rb +48 -0
- data/lib/hecks/bluebook/assembly/contract.rb +112 -0
- data/lib/hecks/bluebook/assembly/contracts.rb +409 -0
- data/lib/hecks/bluebook/assembly/marks.rb +227 -0
- data/lib/hecks/bluebook/assembly/specializer.rb +70 -0
- data/lib/hecks/bluebook/assembly.rb +78 -0
- data/lib/hecks/bluebook/attribute.rb +96 -0
- data/lib/hecks/bluebook/behaviour/aggregate.rb +83 -0
- data/lib/hecks/bluebook/behaviour/attribute.rb +27 -0
- data/lib/hecks/bluebook/behaviour/chapter.rb +72 -0
- data/lib/hecks/bluebook/behaviour/command.rb +116 -0
- data/lib/hecks/bluebook/behaviour/domain_port.rb +25 -0
- data/lib/hecks/bluebook/behaviour/entity.rb +59 -0
- data/lib/hecks/bluebook/behaviour/hexagon.rb +50 -0
- data/lib/hecks/bluebook/behaviour/lifecycle.rb +51 -0
- data/lib/hecks/bluebook/behaviour/policy.rb +52 -0
- data/lib/hecks/bluebook/behaviour/process_manager.rb +38 -0
- data/lib/hecks/bluebook/behaviour/query.rb +10 -0
- data/lib/hecks/bluebook/behaviour/read_model.rb +29 -0
- data/lib/hecks/bluebook/behaviour/traits.rb +81 -0
- data/lib/hecks/bluebook/behaviour/value_object.rb +33 -0
- data/lib/hecks/bluebook/chapter.rb +68 -0
- data/lib/hecks/bluebook/command.rb +124 -0
- data/lib/hecks/bluebook/domain_port.rb +102 -0
- data/lib/hecks/bluebook/dsl/adapter_builder.rb +34 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder.rb +906 -0
- data/lib/hecks/bluebook/dsl/attribute_collector.rb +327 -0
- data/lib/hecks/bluebook/dsl/binding_proxy.rb +71 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +1018 -0
- data/lib/hecks/bluebook/dsl/command_builder.rb +626 -0
- data/lib/hecks/bluebook/dsl/const_shim.rb +81 -0
- data/lib/hecks/bluebook/dsl/domain_port_builder.rb +79 -0
- data/lib/hecks/bluebook/dsl/entity_builder.rb +305 -0
- data/lib/hecks/bluebook/dsl/generic_dispatch.rb +366 -0
- data/lib/hecks/bluebook/dsl/hecksagon_builder.rb +163 -0
- data/lib/hecks/bluebook/dsl/identity_declaration.rb +191 -0
- data/lib/hecks/bluebook/dsl/lifecycle_builder.rb +44 -0
- data/lib/hecks/bluebook/dsl/malformed.rb +7 -0
- data/lib/hecks/bluebook/dsl/policy_builder.rb +120 -0
- data/lib/hecks/bluebook/dsl/port_builder.rb +30 -0
- data/lib/hecks/bluebook/dsl/port_operation_builder.rb +142 -0
- data/lib/hecks/bluebook/dsl/process_manager_builder.rb +207 -0
- data/lib/hecks/bluebook/dsl/query_builder.rb +113 -0
- data/lib/hecks/bluebook/dsl/read_model_builder.rb +233 -0
- data/lib/hecks/bluebook/dsl/rule_reference.rb +172 -0
- data/lib/hecks/bluebook/dsl/translation_builder.rb +243 -0
- data/lib/hecks/bluebook/dsl/value_object_builder.rb +178 -0
- data/lib/hecks/bluebook/dsl/word_gate.rb +221 -0
- data/lib/hecks/bluebook/dsl/world_builder.rb +77 -0
- data/lib/hecks/bluebook/dsl.rb +45 -0
- data/lib/hecks/bluebook/entity.rb +103 -0
- data/lib/hecks/bluebook/expression/canonical_form.rb +55 -0
- data/lib/hecks/bluebook/expression/evaluator.rb +261 -0
- data/lib/hecks/bluebook/expression/projection.json +170 -0
- data/lib/hecks/bluebook/expression/resolver/block_predicates.rb +233 -0
- data/lib/hecks/bluebook/expression/resolver.rb +630 -0
- data/lib/hecks/bluebook/expression.rb +13 -0
- data/lib/hecks/bluebook/hexagon.rb +60 -0
- data/lib/hecks/bluebook/lifecycle.rb +42 -0
- data/lib/hecks/bluebook/meta_validator/adapter_judge.rb +54 -0
- data/lib/hecks/bluebook/meta_validator/judge.rb +559 -0
- data/lib/hecks/bluebook/meta_validator/plan.rb +332 -0
- data/lib/hecks/bluebook/meta_validator/port_judge.rb +47 -0
- data/lib/hecks/bluebook/meta_validator/readings.rb +350 -0
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +312 -0
- data/lib/hecks/bluebook/meta_validator/shapes.rb +246 -0
- data/lib/hecks/bluebook/meta_validator/syntax_boot.rb +255 -0
- data/lib/hecks/bluebook/meta_validator/translation_judge.rb +138 -0
- data/lib/hecks/bluebook/meta_validator/world_judge.rb +78 -0
- data/lib/hecks/bluebook/meta_validator.rb +452 -0
- data/lib/hecks/bluebook/model_check.rb +318 -0
- data/lib/hecks/bluebook/pattern_subset.rb +120 -0
- data/lib/hecks/bluebook/policy.rb +41 -0
- data/lib/hecks/bluebook/process_manager.rb +86 -0
- data/lib/hecks/bluebook/project_discovery.rb +30 -0
- data/lib/hecks/bluebook/project_loader.rb +40 -0
- data/lib/hecks/bluebook/project_register.rb +82 -0
- data/lib/hecks/bluebook/query.rb +61 -0
- data/lib/hecks/bluebook/read_model.rb +109 -0
- data/lib/hecks/bluebook/reference.rb +74 -0
- data/lib/hecks/bluebook/smoke_test.rb +166 -0
- data/lib/hecks/bluebook/synthesizer.rb +95 -0
- data/lib/hecks/bluebook/translation.rb +92 -0
- data/lib/hecks/bluebook/value_object.rb +58 -0
- data/lib/hecks/bluebook.rb +74 -0
- data/lib/hecks/codemod.rb +342 -0
- data/lib/hecks/construct.rb +71 -0
- data/lib/hecks/deploy/bluebook/deploy.bluebook +219 -0
- data/lib/hecks/deploy/bluebook/deploy.hecksagon +4 -0
- data/lib/hecks/deploy/oidc.json +18 -0
- data/lib/hecks/doc/reference.rb +389 -0
- data/lib/hecks/embryonaut_bluebook.rb +75 -0
- data/lib/hecks/facade/cli_door.rb +116 -0
- data/lib/hecks/facade/cli_runner.rb +190 -0
- data/lib/hecks/facade/command_request.rb +105 -0
- data/lib/hecks/facade/handle.rb +173 -0
- data/lib/hecks/facade/json_door.rb +154 -0
- data/lib/hecks/facade/surface/aggregate_door.rb +185 -0
- data/lib/hecks/facade/surface/chapter.rb +107 -0
- data/lib/hecks/facade/surface.rb +48 -0
- data/lib/hecks/facade.rb +44 -0
- data/lib/hecks/forms/app.rb +300 -0
- data/lib/hecks/forms/command_form_renderer.rb +113 -0
- data/lib/hecks/forms/examples/banking_console.bluebook +3 -0
- data/lib/hecks/forms/field_renderer.rb +170 -0
- data/lib/hecks/forms/field_shape.rb +232 -0
- data/lib/hecks/forms/html.rb +53 -0
- data/lib/hecks/forms/index_renderer.rb +35 -0
- data/lib/hecks/forms/page.rb +157 -0
- data/lib/hecks/forms/params.rb +132 -0
- data/lib/hecks/forms/query_form_renderer.rb +114 -0
- data/lib/hecks/forms/record_renderer.rb +115 -0
- data/lib/hecks/forms/record_table.rb +63 -0
- data/lib/hecks/forms/reference_options.rb +30 -0
- data/lib/hecks/forms/value_object_shape.rb +46 -0
- data/lib/hecks/forms.rb +54 -0
- data/lib/hecks/fqn.rb +94 -0
- data/lib/hecks/framework/bluebook/compliance.bluebook +1 -0
- data/lib/hecks/framework/bluebook/console_settings.bluebook +489 -0
- data/lib/hecks/framework/bluebook/framework.hecksagon +32 -0
- data/lib/hecks/framework/bluebook/governance.bluebook +130 -0
- data/lib/hecks/framework/bluebook/identity.bluebook +90 -0
- data/lib/hecks/framework/oidc.json +39 -0
- data/lib/hecks/framework.rb +90 -0
- data/lib/hecks/freezer.rb +67 -0
- data/lib/hecks/fuzzing/invalid_value_generator.rb +86 -0
- data/lib/hecks/fuzzing/isolated_boot.rb +92 -0
- data/lib/hecks/fuzzing/properties.rb +1146 -0
- data/lib/hecks/fuzzing/replay.rb +635 -0
- data/lib/hecks/fuzzing/sequence_generator/catalog.rb +93 -0
- data/lib/hecks/fuzzing/sequence_generator/outcome_tracker.rb +54 -0
- data/lib/hecks/fuzzing/sequence_generator/picker.rb +96 -0
- data/lib/hecks/fuzzing/sequence_generator/step_builder.rb +185 -0
- data/lib/hecks/fuzzing/sequence_generator.rb +130 -0
- data/lib/hecks/fuzzing/value_generator.rb +177 -0
- data/lib/hecks/fuzzing.rb +12 -0
- data/lib/hecks/grammar/evolve.rb +291 -0
- data/lib/hecks/grammar/expression.bluebook +417 -0
- data/lib/hecks/grammar/expression_operators.json +1152 -0
- data/lib/hecks/grammar/grammar.hecksagon +20 -0
- data/lib/hecks/grammar/oidc.json +69 -0
- data/lib/hecks/grammar/translation.bluebook +203 -0
- data/lib/hecks/grammar.rb +178 -0
- data/lib/hecks/ir.rb +126 -0
- data/lib/hecks/language/adapter.bluebook +116 -0
- data/lib/hecks/language/bluebook/aggregate.bluebook +581 -0
- data/lib/hecks/language/bluebook/attaches/paging.bluebook +76 -0
- data/lib/hecks/language/bluebook/bluebook.bluebook +256 -0
- data/lib/hecks/language/bluebook/bluebook.hecksagon +24 -0
- data/lib/hecks/language/bluebook/command.bluebook +437 -0
- data/lib/hecks/language/bluebook/entity.bluebook +316 -0
- data/lib/hecks/language/bluebook/policy.bluebook +172 -0
- data/lib/hecks/language/bluebook/process_manager.bluebook +264 -0
- data/lib/hecks/language/bluebook/projection.bluebook +267 -0
- data/lib/hecks/language/bluebook/query.bluebook +245 -0
- data/lib/hecks/language/bluebook/shape.bluebook +292 -0
- data/lib/hecks/language/bluebook/syntax.bluebook +447 -0
- data/lib/hecks/language/bluebook/vocabulary.bluebook +364 -0
- data/lib/hecks/language/hecksagon/adapter_binding.bluebook +51 -0
- data/lib/hecks/language/hecksagon/domain_port.bluebook +76 -0
- data/lib/hecks/language/hecksagon/hecksagon.bluebook +131 -0
- data/lib/hecks/language/hecksagon/port_operation.bluebook +102 -0
- data/lib/hecks/language/oidc.json +313 -0
- data/lib/hecks/language/port.bluebook +92 -0
- data/lib/hecks/language/translation/translation.bluebook +110 -0
- data/lib/hecks/language/translation/translation_aggregate.bluebook +267 -0
- data/lib/hecks/language/world/wiring.bluebook +62 -0
- data/lib/hecks/language/world/world.bluebook +84 -0
- data/lib/hecks/literal.rb +125 -0
- data/lib/hecks/naming.rb +121 -0
- data/lib/hecks/ports/access_control.port +4 -0
- data/lib/hecks/ports/access_control.rb +62 -0
- data/lib/hecks/ports/agent/answers.rb +104 -0
- data/lib/hecks/ports/agent.port +4 -0
- data/lib/hecks/ports/agent.rb +167 -0
- data/lib/hecks/ports/authentication.port +4 -0
- data/lib/hecks/ports/authentication.rb +50 -0
- data/lib/hecks/ports/authorization.port +4 -0
- data/lib/hecks/ports/authorization.rb +59 -0
- data/lib/hecks/ports/clock.port +4 -0
- data/lib/hecks/ports/clock.rb +62 -0
- data/lib/hecks/ports/extraction.port +4 -0
- data/lib/hecks/ports/extraction.rb +37 -0
- data/lib/hecks/ports/identity_assignment.port +4 -0
- data/lib/hecks/ports/identity_assignment.rb +45 -0
- data/lib/hecks/ports/identity_generation.port +4 -0
- data/lib/hecks/ports/identity_generation.rb +49 -0
- data/lib/hecks/ports/identity_resolution.port +4 -0
- data/lib/hecks/ports/identity_resolution.rb +40 -0
- data/lib/hecks/ports/loading.port +4 -0
- data/lib/hecks/ports/loading.rb +13 -0
- data/lib/hecks/ports/persistence/append_only.rb +102 -0
- data/lib/hecks/ports/persistence/binding_policy.rb +56 -0
- data/lib/hecks/ports/persistence/execution.rb +18 -0
- data/lib/hecks/ports/persistence/lineage.rb +277 -0
- data/lib/hecks/ports/persistence/null_saga_store.rb +25 -0
- data/lib/hecks/ports/persistence/remote_runtime.rb +42 -0
- data/lib/hecks/ports/persistence/repository_factory.rb +30 -0
- data/lib/hecks/ports/persistence.port +4 -0
- data/lib/hecks/ports/persistence.rb +39 -0
- data/lib/hecks/ports/projection.port +4 -0
- data/lib/hecks/ports/projection.rb +76 -0
- data/lib/hecks/ports/query/in_memory.rb +60 -0
- data/lib/hecks/ports/query/ordering.rb +41 -0
- data/lib/hecks/ports/query.rb +36 -0
- data/lib/hecks/ports.rb +27 -0
- data/lib/hecks/projections/diagrams.rb +413 -0
- data/lib/hecks/projections/ir.rb +18 -0
- data/lib/hecks/projections/model/deviations.rb +98 -0
- data/lib/hecks/projections/model.rb +145 -0
- data/lib/hecks/projections/oidc.rb +110 -0
- data/lib/hecks/projections/parser_table.rb +159 -0
- data/lib/hecks/projections/reference.rb +38 -0
- data/lib/hecks/projections/shape.rb +31 -0
- data/lib/hecks/projections/statements.rb +110 -0
- data/lib/hecks/projections/vocabulary.rb +100 -0
- data/lib/hecks/projections.rb +32 -0
- data/lib/hecks/projector/cli_projector.rb +437 -0
- data/lib/hecks/projector/docs_projector.rb +321 -0
- data/lib/hecks/projector/exporter.rb +141 -0
- data/lib/hecks/projector/ir_projector.rb +18 -0
- data/lib/hecks/projector/narrate_projector.rb +243 -0
- data/lib/hecks/projector/target.rb +97 -0
- data/lib/hecks/projector.rb +186 -0
- data/lib/hecks/query_ir.rb +392 -0
- data/lib/hecks/query_specification/common/authorization_spec.rb +9 -0
- data/lib/hecks/query_specification/common/comparators.rb +25 -0
- data/lib/hecks/query_specification/common/comparison.rb +174 -0
- data/lib/hecks/query_specification/common/cursor_spec.rb +9 -0
- data/lib/hecks/query_specification/common/dsl.rb +58 -0
- data/lib/hecks/query_specification/common/inspection_spec.rb +9 -0
- data/lib/hecks/query_specification/common/limit_spec.rb +9 -0
- data/lib/hecks/query_specification/common/null_policy.rb +80 -0
- data/lib/hecks/query_specification/common/null_semantics.rb +11 -0
- data/lib/hecks/query_specification/common/offset_spec.rb +9 -0
- data/lib/hecks/query_specification/common/options.rb +32 -0
- data/lib/hecks/query_specification/common/order_by.rb +9 -0
- data/lib/hecks/query_specification/common/specification.rb +10 -0
- data/lib/hecks/query_specification/common/where_clause.rb +9 -0
- data/lib/hecks/query_specification/field_path.rb +89 -0
- data/lib/hecks/query_specification/hop_path.rb +130 -0
- data/lib/hecks/query_specification/read_model/specification.rb +18 -0
- data/lib/hecks/query_specification.rb +14 -0
- data/lib/hecks/rendering.rb +48 -0
- data/lib/hecks/router/namespace_installer.rb +157 -0
- data/lib/hecks/router.rb +70 -0
- data/lib/hecks/runtime/caller.rb +50 -0
- data/lib/hecks/runtime/capability_graph.rb +44 -0
- data/lib/hecks/runtime/command_interpreter/argument_gate.rb +124 -0
- data/lib/hecks/runtime/command_interpreter/mutation_applier.rb +248 -0
- data/lib/hecks/runtime/command_interpreter.rb +413 -0
- data/lib/hecks/runtime/command_rules/admissibility.rb +307 -0
- data/lib/hecks/runtime/command_rules/arithmetic.rb +254 -0
- data/lib/hecks/runtime/command_rules/authorization.rb +64 -0
- data/lib/hecks/runtime/command_rules/emission.rb +34 -0
- data/lib/hecks/runtime/command_rules/references.rb +181 -0
- data/lib/hecks/runtime/command_rules.rb +28 -0
- data/lib/hecks/runtime/dependency_planning.rb +231 -0
- data/lib/hecks/runtime/dispatcher.rb +286 -0
- data/lib/hecks/runtime/entity_element.rb +253 -0
- data/lib/hecks/runtime/entity_interpreter.rb +228 -0
- data/lib/hecks/runtime/era_check.rb +136 -0
- data/lib/hecks/runtime/era_guard/shape_diff.rb +128 -0
- data/lib/hecks/runtime/era_guard.rb +193 -0
- data/lib/hecks/runtime/era_tamper.rb +61 -0
- data/lib/hecks/runtime/errors.rb +100 -0
- data/lib/hecks/runtime/event.rb +51 -0
- data/lib/hecks/runtime/identity.rb +128 -0
- data/lib/hecks/runtime/instance.rb +120 -0
- data/lib/hecks/runtime/interpreting.rb +69 -0
- data/lib/hecks/runtime/loader.rb +143 -0
- data/lib/hecks/runtime/policy_interpreter.rb +366 -0
- data/lib/hecks/runtime/port_operation_interpreter.rb +210 -0
- data/lib/hecks/runtime/query_interpreter.rb +254 -0
- data/lib/hecks/runtime/reaction_invocation.rb +245 -0
- data/lib/hecks/runtime/read_model_interpreter.rb +266 -0
- data/lib/hecks/runtime/rebuild_sweep.rb +74 -0
- data/lib/hecks/runtime/reference_hop.rb +99 -0
- data/lib/hecks/runtime/refusal_wording.rb +124 -0
- data/lib/hecks/runtime/registry/saga_persistence.rb +70 -0
- data/lib/hecks/runtime/registry/verification.rb +158 -0
- data/lib/hecks/runtime/registry.rb +218 -0
- data/lib/hecks/runtime/remote_dispatcher.rb +143 -0
- data/lib/hecks/runtime/routing.rb +96 -0
- data/lib/hecks/runtime/saga_interpreter/correlation.rb +97 -0
- data/lib/hecks/runtime/saga_interpreter.rb +301 -0
- data/lib/hecks/runtime/storage_shape.rb +120 -0
- data/lib/hecks/runtime/tenant_check.rb +84 -0
- data/lib/hecks/runtime/tenant_scope.rb +55 -0
- data/lib/hecks/runtime/value/admission.rb +112 -0
- data/lib/hecks/runtime/value/coercion.rb +500 -0
- data/lib/hecks/runtime/value/invariant_violation.rb +5 -0
- data/lib/hecks/runtime/value.rb +125 -0
- data/lib/hecks/runtime.rb +95 -0
- data/lib/hecks/translation/audit/approval_digest.rb +31 -0
- data/lib/hecks/translation/audit/layer_one.rb +37 -0
- data/lib/hecks/translation/audit/layer_two.rb +77 -0
- data/lib/hecks/translation/audit/unfed_report.rb +42 -0
- data/lib/hecks/translation/audit.rb +70 -0
- data/lib/hecks/translation/reattest.rb +72 -0
- data/lib/hecks/translation/rule_compiler.rb +120 -0
- data/lib/hecks/translation/scaffold/differ.rb +183 -0
- data/lib/hecks/translation/scaffold/renderer.rb +41 -0
- data/lib/hecks/translation/scaffold/writer.rb +28 -0
- data/lib/hecks/translation/scaffold.rb +30 -0
- data/lib/hecks/translation.rb +11 -0
- data/lib/hecks/version.rb +16 -0
- data/lib/hecks/vocabulary.rb +213 -0
- data/lib/hecks.rb +118 -6
- metadata +401 -222
- data/bin/hecks +0 -7
- data/bin/hecks-package +0 -65
- data/bin/hecks_console +0 -12
- data/bin/hecks_serverless +0 -6
- data/lib/cli/build.rb +0 -14
- data/lib/cli/command_runner.rb +0 -28
- data/lib/cli/console.rb +0 -10
- data/lib/cli/generate.rb +0 -37
- data/lib/cli/hecks-cli.rb +0 -27
- data/lib/cli/test.rb +0 -57
- data/lib/console/commands.rb +0 -8
- data/lib/console/hecks-console.rb +0 -1
- data/lib/packager/README.md +0 -0
- data/lib/packager/app_runner.rb +0 -21
- data/lib/packager/args.rb +0 -26
- data/lib/packager/compatibility/fixnum.rb +0 -6
- data/lib/packager/hecks.rb +0 -39
- data/lib/packager/query_runner.rb +0 -21
- data/lib/packager/resources/Dockerfile +0 -11
- data/lib/packager/resources/app_binary +0 -7
- data/lib/packager/resources/bundle_config +0 -3
- data/lib/packager/resources/traveling-ruby-20150715-2.2.2-linux-x86_64.tar.gz +0 -0
- data/lib/packager/resources/traveling-ruby-20150715-2.2.2-osx.tar.gz +0 -0
- data/lib/serverless/Domain +0 -32
- data/lib/serverless/cli.rb +0 -75
- data/lib/serverless/resources/command_name.js +0 -5
- data/lib/serverless/resources/environment.js +0 -7
- data/lib/serverless/resources/handler.js.tt +0 -28
- data/lib/serverless/resources/run_binary.js +0 -22
- data/lib/serverless/resources/serverless.yml +0 -20
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
Hecks.bluebook "Bluebook" do
|
|
2
|
+
aggregate "Command" do
|
|
3
|
+
description "One command declared on an aggregate — its arguments, its rules, and what it announces."
|
|
4
|
+
|
|
5
|
+
reference_to Aggregate
|
|
6
|
+
|
|
7
|
+
# WHICH PIECE DECLARED IT, when a piece did. A command argument with no
|
|
8
|
+
# attribute to land in does not persist — the same lesson `disputed_by` taught
|
|
9
|
+
# on CardPayment — so the field has to exist here for Command.Declare's
|
|
10
|
+
# `entity_id` to be held at all.
|
|
11
|
+
reference_to Entity, as: :entity_id, optional: true
|
|
12
|
+
|
|
13
|
+
# SPELLED AS THE IR SPELLS THEM. The judge walks a built IR and offers each
|
|
14
|
+
# field by name, so a field named differently here would need a translation
|
|
15
|
+
# table between two vocabularies for the same thing — and a table is a place
|
|
16
|
+
# to be wrong quietly. One spelling, and the walk reads straight through.
|
|
17
|
+
# THE IMMEDIATE OWNER, AND ITS NAME. Almost every chapter declares a
|
|
18
|
+
# `Declare` ; the owner is what tells one from another.
|
|
19
|
+
#
|
|
20
|
+
# `owner_id` NOT `aggregate_id` : a command declared on an ENTITY is that
|
|
21
|
+
# entity's, not its aggregate's — `Banking:Account:LedgerEntry:Amend` is
|
|
22
|
+
# LedgerEntry's Amend, and `Banking:Account:LedgerEntry` is what tells it
|
|
23
|
+
# apart from a same-named command on some OTHER entity of the same
|
|
24
|
+
# aggregate. `aggregate_id` (kept, below, as data) still names the true
|
|
25
|
+
# root, for the DeclaredIn walk that gathers every command under a
|
|
26
|
+
# chapter’s aggregate whichever piece declared it ; `owner_id` names only
|
|
27
|
+
# whichever declared THIS one. `owner_id` is not a declared attribute —
|
|
28
|
+
# it is the WALK's immediate parent, read the same way `position` is.
|
|
29
|
+
identified_by :owner_id, :name
|
|
30
|
+
|
|
31
|
+
attribute :name, CommandName
|
|
32
|
+
attribute :role, Actor
|
|
33
|
+
attribute :goal, Goal
|
|
34
|
+
attribute :emits, list_of(Announcement)
|
|
35
|
+
attribute :references, EventName, optional: true
|
|
36
|
+
attribute :attributes, list_of(Argument)
|
|
37
|
+
attribute :givens, list_of(Rule)
|
|
38
|
+
# THE POSTCONDITIONS — same Rule shape as givens, checked on the other
|
|
39
|
+
# side of the mutations: a given says what must hold to begin, an
|
|
40
|
+
# ensures says what must hold to have finished. Meyer's third leg.
|
|
41
|
+
attribute :ensures, list_of(Rule)
|
|
42
|
+
attribute :mutations, list_of(Change)
|
|
43
|
+
attribute :provenance, CommandText
|
|
44
|
+
# LIFECYCLE STATE AS A COMMAND GUARD (S10, ADR 0025) — a LITERAL,
|
|
45
|
+
# the same shape `provenance`/`default:` already carry (`from:
|
|
46
|
+
# "open"` or `from: ["open", "frozen"]`, encoded and decoded the
|
|
47
|
+
# same way any other Ruby literal on this construct is), not a
|
|
48
|
+
# dedicated list-of-value-object the way `givens` is — the guard
|
|
49
|
+
# names no target state and moves nothing, so it needs no Rule-
|
|
50
|
+
# shaped predicate at all, only the states it admits.
|
|
51
|
+
attribute :from, CommandText, optional: true
|
|
52
|
+
|
|
53
|
+
value_object "CommandName" do
|
|
54
|
+
attribute :value, String
|
|
55
|
+
invariant("a command is named") { !value.to_s.empty? }
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
value_object "Actor" do
|
|
59
|
+
attribute :value, String
|
|
60
|
+
# RELAXED for the experiment : banking leaves 19 of 40 commands without a
|
|
61
|
+
# role, and the hand-written CommandBuilder never required one. Whether
|
|
62
|
+
# role/goal are mandatory is a language decision — the meta-domain found
|
|
63
|
+
# the drift the moment it enforced uniformly.
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
value_object "Goal" do
|
|
67
|
+
attribute :value, String
|
|
68
|
+
# RELAXED — see Actor above.
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
value_object "EventName" do
|
|
72
|
+
attribute :value, String
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
value_object "Announcement" do
|
|
76
|
+
attribute :name, String
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
value_object "Argument" do
|
|
80
|
+
attribute :name, String
|
|
81
|
+
attribute :type, String
|
|
82
|
+
attribute :list, String
|
|
83
|
+
attribute :optional, String, optional: true
|
|
84
|
+
attribute :pattern, String, optional: true
|
|
85
|
+
attribute :default, String
|
|
86
|
+
# The closed set this value must belong to — see Aggregate::Field, which is
|
|
87
|
+
# the same declaration, spelled for a command's arguments.
|
|
88
|
+
attribute :admits, String, optional: true
|
|
89
|
+
attribute :relationship, String, optional: true
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
value_object "Rule" do
|
|
93
|
+
attribute :description, String
|
|
94
|
+
attribute :canonical, String
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
value_object "Change" do
|
|
98
|
+
attribute :target, String
|
|
99
|
+
# The same word, one aggregate over. `OpName` used to carry
|
|
100
|
+
# `set || append || increment || decrement` in an invariant — Vocabulary's
|
|
101
|
+
# MutationOp written out a second time, one level in, with nothing
|
|
102
|
+
# comparing the two. Naming the set is the whole of what that invariant was
|
|
103
|
+
# trying to say, and it says it where the set actually lives.
|
|
104
|
+
attribute :op, String, admits: "Vocabulary::MutationOp"
|
|
105
|
+
attribute :field, String
|
|
106
|
+
attribute :kind, String
|
|
107
|
+
attribute :source, String
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# A plain string holder, for the id of the aggregate above. Command had no
|
|
111
|
+
# generic text value object and the alternatives all meant something else —
|
|
112
|
+
# RuleText is a predicate, FieldRef is a field, ArgType is a type. Reusing one
|
|
113
|
+
# of those would read as a lie, the way `bluebook_id` typed AggregateName did.
|
|
114
|
+
value_object "CommandText" do
|
|
115
|
+
attribute :value, String
|
|
116
|
+
end
|
|
117
|
+
# The way back: everything DECLARED IN the aggregate above. The parent
|
|
118
|
+
# reference IS the query.
|
|
119
|
+
# WHERE IT SITS AMONG ITS SIBLINGS. Declaration order is a FACT ABOUT THE
|
|
120
|
+
# SOURCE — the IR is a contract read straight from this file,
|
|
121
|
+
# field for field AND INDEX FOR INDEX. So the language HOLDS it, instead of
|
|
122
|
+
# inheriting it from whatever order a store happens to iterate: an ask that
|
|
123
|
+
# does not say how it is ordered is answered in identity order, which is
|
|
124
|
+
# right for every other ask and fatal for the one that is the SOURCE.
|
|
125
|
+
value_object "Position" do
|
|
126
|
+
attribute :value, Integer
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
attribute :position, Position
|
|
130
|
+
|
|
131
|
+
query "DeclaredIn" do
|
|
132
|
+
attribute :aggregate, CommandText
|
|
133
|
+
where(aggregate: :aggregate)
|
|
134
|
+
order_by :position
|
|
135
|
+
end
|
|
136
|
+
command "Declare" do
|
|
137
|
+
role "Language"
|
|
138
|
+
goal "Open a command on an aggregate"
|
|
139
|
+
|
|
140
|
+
reference_to Aggregate
|
|
141
|
+
# DECLARED ON AN AGGREGATE, or on one of its ENTITIES. The IR uses the same
|
|
142
|
+
# Command for both — an entity's commands are Command objects — so the
|
|
143
|
+
# language uses the same Command, and says which piece declared it when a piece
|
|
144
|
+
# did. Absent for an aggregate's own commands, and ABSENT is not EMPTY.
|
|
145
|
+
reference_to Entity, as: :entity_id, optional: true
|
|
146
|
+
attribute :name, CommandName
|
|
147
|
+
attribute :role, Actor, optional: true
|
|
148
|
+
attribute :goal, Goal, optional: true
|
|
149
|
+
# See Aggregate.Declare's own `provenance` — identical shape, one
|
|
150
|
+
# level down.
|
|
151
|
+
attribute :provenance, CommandText, optional: true
|
|
152
|
+
# See this aggregate's own `from` field comment, above.
|
|
153
|
+
attribute :from, CommandText, optional: true
|
|
154
|
+
|
|
155
|
+
attribute :position, Position, optional: true
|
|
156
|
+
sets :aggregate
|
|
157
|
+
sets :entity_id
|
|
158
|
+
sets :name
|
|
159
|
+
sets :role
|
|
160
|
+
sets :goal
|
|
161
|
+
sets :provenance
|
|
162
|
+
sets :from
|
|
163
|
+
sets :position
|
|
164
|
+
emits "VerbDeclared"
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
command "Argument" do
|
|
168
|
+
role "Language"
|
|
169
|
+
goal "Attach one argument to the command"
|
|
170
|
+
|
|
171
|
+
attribute :name, ArgName
|
|
172
|
+
attribute :type, ArgType
|
|
173
|
+
attribute :list, ArgType
|
|
174
|
+
attribute :optional, ArgType, optional: true
|
|
175
|
+
attribute :pattern, ArgType, optional: true
|
|
176
|
+
attribute :default, ArgType, optional: true
|
|
177
|
+
# The closed set this argument's value must belong to — see
|
|
178
|
+
# Aggregate.Attribute, which carries the same word for a head's attributes.
|
|
179
|
+
attribute :admits, ArgType, optional: true
|
|
180
|
+
# Whether this argument was minted verbatim from the owning aggregate/
|
|
181
|
+
# entity's own reference-typed attribute (`sets :field` importing a
|
|
182
|
+
# `reference_to`/`has_many`/`has_one`/`belongs_to` field rather than
|
|
183
|
+
# retyping it) — see Aggregate.Attribute, which carries the same word
|
|
184
|
+
# for a head's own attributes. Missing here, a round trip through the
|
|
185
|
+
# self-hosted meta-domain silently dropped it for every command
|
|
186
|
+
# argument, even though the live DSL builder set it correctly in
|
|
187
|
+
# memory (CommandBuilder#resolve_bare_set!) — the wire just never
|
|
188
|
+
# carried it back.
|
|
189
|
+
attribute :relationship, ArgType, optional: true
|
|
190
|
+
|
|
191
|
+
sets :attributes, append: { name: :name, type: :type, list: :list, default: :default, optional: :optional, pattern: :pattern, admits: :admits, relationship: :relationship }
|
|
192
|
+
|
|
193
|
+
emits "ArgumentAttached"
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
# An argument that points at ANOTHER aggregate's head — the same word
|
|
197
|
+
# `reference_to`, written on a command instead of on the head.
|
|
198
|
+
#
|
|
199
|
+
# `Argument` types its type as text, so a reference argument arrived as the
|
|
200
|
+
# STRING "Reference<Customer>" and the language held a spelling rather than a
|
|
201
|
+
# reference. That left "a reference points at a declared head" enforceable
|
|
202
|
+
# only by a `raise Malformed` in the DSL, for three of the four places the
|
|
203
|
+
# word can be written. As a reference it is a consequence of the model here
|
|
204
|
+
# too, exactly as Aggregate.Reference made it one on a head.
|
|
205
|
+
command "Reference" do
|
|
206
|
+
role "Language"
|
|
207
|
+
goal "Attach an argument that points at another aggregate's head"
|
|
208
|
+
|
|
209
|
+
reference_to Aggregate, as: :points_at
|
|
210
|
+
# No `given` that the name is present : ArgName already carries that
|
|
211
|
+
# invariant, and a value object's invariant fires during coercion — before
|
|
212
|
+
# any given is reached. A rule that cannot be the one to refuse is
|
|
213
|
+
# decoration, and this language has paid for that mistake before.
|
|
214
|
+
attribute :name, ArgName
|
|
215
|
+
attribute :list, ArgType
|
|
216
|
+
attribute :optional, ArgType, optional: true
|
|
217
|
+
attribute :pattern, ArgType, optional: true
|
|
218
|
+
attribute :default, ArgType, optional: true
|
|
219
|
+
attribute :admits, ArgType, optional: true
|
|
220
|
+
# See Argument's own :relationship, just above — the same gap, one
|
|
221
|
+
# verb over.
|
|
222
|
+
attribute :relationship, ArgType, optional: true
|
|
223
|
+
|
|
224
|
+
sets :attributes, append: { name: :name, type: :points_at, list: :list, default: :default, optional: :optional, pattern: :pattern, admits: :admits, relationship: :relationship }
|
|
225
|
+
|
|
226
|
+
emits "ArgumentReferenceAttached"
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
value_object "ArgName" do
|
|
230
|
+
attribute :value, String
|
|
231
|
+
invariant("an argument is named") { !value.to_s.empty? }
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
value_object "ArgType" do
|
|
235
|
+
attribute :value, String
|
|
236
|
+
# list / default reuse this shape and are legitimately empty
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
command "Rule" do
|
|
240
|
+
role "Language"
|
|
241
|
+
goal "Attach one given to the command"
|
|
242
|
+
|
|
243
|
+
attribute :description, RuleText, optional: true
|
|
244
|
+
attribute :canonical, RuleText
|
|
245
|
+
|
|
246
|
+
given("a rule says what it means") { !description.value.to_s.empty? }
|
|
247
|
+
given("a rule survives extraction") { !canonical.value.to_s.empty? }
|
|
248
|
+
|
|
249
|
+
sets :givens, append: { description: :description, canonical: :canonical }
|
|
250
|
+
|
|
251
|
+
emits "RuleAttached"
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
command "Ensure" do
|
|
255
|
+
role "Language"
|
|
256
|
+
goal "Attach one postcondition to the command"
|
|
257
|
+
|
|
258
|
+
attribute :description, RuleText, optional: true
|
|
259
|
+
attribute :canonical, RuleText
|
|
260
|
+
|
|
261
|
+
given("a rule says what it means") { !description.value.to_s.empty? }
|
|
262
|
+
given("a rule survives extraction") { !canonical.value.to_s.empty? }
|
|
263
|
+
|
|
264
|
+
sets :ensures, append: { description: :description, canonical: :canonical }
|
|
265
|
+
|
|
266
|
+
emits "EnsureAttached"
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
value_object "RuleText" do
|
|
270
|
+
attribute :value, String
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
command "Change" do
|
|
274
|
+
role "Language"
|
|
275
|
+
goal "Attach one mutation to the command"
|
|
276
|
+
|
|
277
|
+
attribute :target, FieldRef
|
|
278
|
+
# NAMED ON THE ARGUMENT, not only on the Change row it fills. The row is
|
|
279
|
+
# what the IR holds ; THIS is what a caller hands in, so this is where a
|
|
280
|
+
# bad op has to be refused — `OpName`'s deleted invariant was refusing
|
|
281
|
+
# exactly here, and the link has to reach the same door to replace it.
|
|
282
|
+
attribute :op, OpName, admits: "Vocabulary::MutationOp"
|
|
283
|
+
attribute :field, FieldRef
|
|
284
|
+
attribute :kind, FieldRef
|
|
285
|
+
attribute :source, FieldRef
|
|
286
|
+
|
|
287
|
+
given("a mutation names a target") { !target.value.to_s.empty? }
|
|
288
|
+
given("a mutation does something") { !op.value.to_s.empty? }
|
|
289
|
+
|
|
290
|
+
sets :mutations, append: { target: :target, op: :op, field: :field, kind: :kind, source: :source }
|
|
291
|
+
|
|
292
|
+
emits "ChangeAttached"
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
value_object "FieldRef" do
|
|
296
|
+
attribute :value, String
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
# THE SET IT ADMITS IS NAMED, NOT RESTATED. This carried
|
|
300
|
+
# `set || append || increment || decrement` — Vocabulary::MutationOp written
|
|
301
|
+
# out a second time, one level in, which is exactly the kind of copy
|
|
302
|
+
# that drifts. `Change.op` now says `admits:
|
|
303
|
+
# Vocabulary::MutationOp`, so there is no second list left to drift.
|
|
304
|
+
value_object "OpName" do
|
|
305
|
+
attribute :value, String
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
command "ActsOn" do
|
|
309
|
+
role "Language"
|
|
310
|
+
goal "Name the aggregate this command reaches through"
|
|
311
|
+
|
|
312
|
+
# NAMED `root`, not `references` : a command argument SHADOWS the aggregate
|
|
313
|
+
# field of the same name inside a given, so a once-only rule cannot read
|
|
314
|
+
# the state it guards unless the two differ.
|
|
315
|
+
attribute :root, EventName
|
|
316
|
+
|
|
317
|
+
given("a command names what it acts on") { !root.value.to_s.empty? }
|
|
318
|
+
given("a command acts on ONE root") { references.value.to_s.empty? }
|
|
319
|
+
|
|
320
|
+
sets :references, to: :root
|
|
321
|
+
|
|
322
|
+
emits "ReferenceNamed"
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
command "Announce" do
|
|
326
|
+
role "Language"
|
|
327
|
+
goal "Name the event this command emits"
|
|
328
|
+
|
|
329
|
+
attribute :announces, EventName
|
|
330
|
+
|
|
331
|
+
given("an event is named") { !announces.value.to_s.empty? }
|
|
332
|
+
|
|
333
|
+
sets :emits, append: { name: :announces }
|
|
334
|
+
|
|
335
|
+
emits "AnnouncementNamed"
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
# HOW COMMAND IS SPELLED. These rows live with the concept
|
|
339
|
+
# they describe; SyntaxBoot discovers every aggregate-local seed table.
|
|
340
|
+
# Contexts represented here: Command.
|
|
341
|
+
value_object "KeywordSeed" do
|
|
342
|
+
attribute :word, String
|
|
343
|
+
attribute :context, String, admits: "Syntax::Context"
|
|
344
|
+
attribute :body, String, admits: "Syntax::Body"
|
|
345
|
+
attribute :inner, String
|
|
346
|
+
attribute :opens, String
|
|
347
|
+
attribute :fills, String
|
|
348
|
+
attribute :status, String, default: "admitted", admits: "Syntax::Status"
|
|
349
|
+
attribute :was, String
|
|
350
|
+
attribute :resolves_via, String, default: "", admits: "Syntax::ResolutionScope"
|
|
351
|
+
attribute :disambiguator, String, default: "", admits: "Syntax::Disambiguator"
|
|
352
|
+
|
|
353
|
+
member word: "role", context: "Command", body: "none", inner: "", opens: "", fills: "role", calls: "role_impl"
|
|
354
|
+
member word: "goal", context: "Command", body: "none", inner: "", opens: "", fills: "goal"
|
|
355
|
+
member word: "provenance", context: "Command", body: "none", inner: "", opens: "", fills: "provenance", calls: "provenance_impl"
|
|
356
|
+
member word: "reference_to", context: "Command", body: "none", inner: "", opens: "", fills: "references", calls: "reference_to_impl"
|
|
357
|
+
member word: "given", context: "Command", body: "source", inner: "", opens: "", fills: "givens", resolves_via: "hash_chain", calls: "given_impl"
|
|
358
|
+
member word: "sets", context: "Command", body: "none", inner: "", opens: "", fills: "mutations", calls: "sets_impl"
|
|
359
|
+
# RENAMED spelling of `sets`, above — its own dedicated, deprecated row
|
|
360
|
+
# (not `sets`'s own `was:`, syntax_conformance_spec.rb's own "no
|
|
361
|
+
# renamed-away spelling as a row of its own AND a was:" rule), kept
|
|
362
|
+
# here refusing live ONLY so `MetaValidator.shadow_parsing?` can still
|
|
363
|
+
# read frozen era text that used it (CommandBuilder#then_set_impl's
|
|
364
|
+
# own comment).
|
|
365
|
+
member word: "then_set", context: "Command", body: "none", inner: "", opens: "", fills: "mutations", status: "deprecated", calls: "then_set_impl"
|
|
366
|
+
# A command's synchronous handoff into one nested entity command
|
|
367
|
+
# (CommandBuilder#delegates_to_impl's own comment gives the full
|
|
368
|
+
# reasoning) — a new word, not a migrated one.
|
|
369
|
+
member word: "delegates_to", context: "Command", body: "none", inner: "", opens: "", fills: "mutations", calls: "delegates_to_impl"
|
|
370
|
+
member word: "emits", context: "Command", body: "none", inner: "", opens: "", fills: "emits"
|
|
371
|
+
# A VALUE, NOT A DECLARATION — `state(:field)` is written INSIDE a
|
|
372
|
+
# `sets` (`append: { knights: state(:knights) }`, `to: state(:ply)`)
|
|
373
|
+
# and names the record's own field as that mutation's source; it
|
|
374
|
+
# fills nothing of its own, the `sets` it sits in fills `mutations`.
|
|
375
|
+
member word: "state", context: "Command", body: "none", inner: "", opens: "", fills: "mutations"
|
|
376
|
+
member word: "attribute", context: "Command", body: "none", inner: "", opens: "", fills: "attributes", calls: "attribute_impl"
|
|
377
|
+
member word: "ensures", context: "Command", body: "source", inner: "", opens: "", fills: "ensures"
|
|
378
|
+
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
value_object "ArgumentSeed" do
|
|
382
|
+
attribute :keyword, String
|
|
383
|
+
attribute :context, String, admits: "Syntax::Context"
|
|
384
|
+
attribute :at, String
|
|
385
|
+
attribute :named, String
|
|
386
|
+
attribute :kind, String, admits: "Syntax::ArgumentKind"
|
|
387
|
+
attribute :required, String
|
|
388
|
+
attribute :fills, String
|
|
389
|
+
attribute :selects, String
|
|
390
|
+
attribute :pair_key_fills, String
|
|
391
|
+
attribute :pair_value_fills, String
|
|
392
|
+
attribute :pairs_shape, String, admits: "Syntax::PairsShape"
|
|
393
|
+
attribute :status, String, default: "admitted", admits: "Syntax::Status"
|
|
394
|
+
attribute :variadic, String
|
|
395
|
+
attribute :coerce, String
|
|
396
|
+
attribute :blank_message, String
|
|
397
|
+
|
|
398
|
+
member keyword: "role", context: "Command", at: "1", named: "", kind: "text", required: "true", fills: "role"
|
|
399
|
+
member keyword: "goal", context: "Command", at: "1", named: "", kind: "text", required: "true", fills: "goal", coerce: "false"
|
|
400
|
+
member keyword: "provenance", context: "Command", at: "", named: "from", kind: "literal", required: "true", fills: "provenance"
|
|
401
|
+
member keyword: "reference_to", context: "Command", at: "1", named: "", kind: "constant", required: "true", fills: "type"
|
|
402
|
+
member keyword: "reference_to", context: "Command", at: "", named: "as", kind: "symbol", required: "false", fills: "name"
|
|
403
|
+
member keyword: "reference_to", context: "Command", at: "", named: "optional", kind: "flag", required: "false", fills: "optional"
|
|
404
|
+
member keyword: "given", context: "Command", at: "1", named: "", kind: "text", required: "true", fills: "description"
|
|
405
|
+
member keyword: "ensures", context: "Command", at: "1", named: "", kind: "text", required: "true", fills: "description"
|
|
406
|
+
member keyword: "sets", context: "Command", at: "1", named: "", kind: "symbol", required: "true", fills: "target"
|
|
407
|
+
member keyword: "sets", context: "Command", at: "", named: "to", kind: "literal", required: "false", fills: "source", selects: "op=set"
|
|
408
|
+
member keyword: "sets", context: "Command", at: "", named: "append", kind: "literal", required: "false", fills: "source", selects: "op=append"
|
|
409
|
+
member keyword: "sets", context: "Command", at: "", named: "increment", kind: "literal", required: "false", fills: "source", selects: "op=increment"
|
|
410
|
+
member keyword: "sets", context: "Command", at: "", named: "decrement", kind: "literal", required: "false", fills: "source", selects: "op=decrement"
|
|
411
|
+
member keyword: "sets", context: "Command", at: "", named: "multiply", kind: "literal", required: "false", fills: "source", selects: "op=multiply"
|
|
412
|
+
member keyword: "sets", context: "Command", at: "", named: "clamp", kind: "literal", required: "false", fills: "source", selects: "op=clamp"
|
|
413
|
+
member keyword: "sets", context: "Command", at: "", named: "remove", kind: "literal", required: "false", fills: "source", selects: "op=remove"
|
|
414
|
+
member keyword: "then_set", context: "Command", at: "1", named: "", kind: "symbol", required: "true", fills: "target"
|
|
415
|
+
member keyword: "then_set", context: "Command", at: "", named: "to", kind: "literal", required: "false", fills: "source", selects: "op=set"
|
|
416
|
+
member keyword: "then_set", context: "Command", at: "", named: "from", kind: "literal", required: "false", fills: "source", selects: "op=set"
|
|
417
|
+
member keyword: "then_set", context: "Command", at: "", named: "append", kind: "literal", required: "false", fills: "source", selects: "op=append"
|
|
418
|
+
member keyword: "then_set", context: "Command", at: "", named: "increment", kind: "literal", required: "false", fills: "source", selects: "op=increment"
|
|
419
|
+
member keyword: "then_set", context: "Command", at: "", named: "decrement", kind: "literal", required: "false", fills: "source", selects: "op=decrement"
|
|
420
|
+
member keyword: "then_set", context: "Command", at: "", named: "multiply", kind: "literal", required: "false", fills: "source", selects: "op=multiply"
|
|
421
|
+
member keyword: "then_set", context: "Command", at: "", named: "clamp", kind: "literal", required: "false", fills: "source", selects: "op=clamp"
|
|
422
|
+
member keyword: "then_set", context: "Command", at: "", named: "remove", kind: "literal", required: "false", fills: "source", selects: "op=remove"
|
|
423
|
+
member keyword: "delegates_to", context: "Command", at: "1", named: "", kind: "text", required: "true", fills: "target"
|
|
424
|
+
member keyword: "delegates_to", context: "Command", at: "", named: "with", kind: "literal", required: "false", fills: "source", selects: "op=delegate"
|
|
425
|
+
member keyword: "emits", context: "Command", at: "1", named: "", kind: "text", required: "true", fills: "emits"
|
|
426
|
+
member keyword: "state", context: "Command", at: "1", named: "", kind: "symbol", required: "true", fills: "source"
|
|
427
|
+
member keyword: "attribute", context: "Command", at: "1", named: "", kind: "symbol", required: "true", fills: "name"
|
|
428
|
+
member keyword: "attribute", context: "Command", at: "2", named: "", kind: "constant", required: "true", fills: "type"
|
|
429
|
+
member keyword: "attribute", context: "Command", at: "", named: "default", kind: "literal", required: "false", fills: "default"
|
|
430
|
+
member keyword: "attribute", context: "Command", at: "", named: "optional", kind: "flag", required: "false", fills: "optional"
|
|
431
|
+
member keyword: "attribute", context: "Command", at: "", named: "pattern", kind: "text", required: "false", fills: "pattern"
|
|
432
|
+
member keyword: "attribute", context: "Command", at: "", named: "admits", kind: "text", required: "false", fills: "admits"
|
|
433
|
+
member keyword: "attribute", context: "Command", at: "", named: "one_of", kind: "list", required: "false", fills: "one_of"
|
|
434
|
+
|
|
435
|
+
end
|
|
436
|
+
end
|
|
437
|
+
end
|