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,102 @@
|
|
|
1
|
+
Hecks.bluebook "Hecksagon" do
|
|
2
|
+
aggregate "PortOperation" do
|
|
3
|
+
description "One operation a port exposes — the same shape a command's payload has (attributes in, an event out) with none of a command's given/ensures/sets : a port operation is the translation boundary itself, not a second place business rules live. Those stay on whichever command a policy triggers in reaction to the event it emits."
|
|
4
|
+
|
|
5
|
+
identified_by OperationName, as: :name
|
|
6
|
+
|
|
7
|
+
attribute :attributes, list_of(PortOperationField)
|
|
8
|
+
attribute :emits, list_of(EmittedEvent)
|
|
9
|
+
|
|
10
|
+
# THE TWO ENDINGS OF AN `asks`, held by the language about itself.
|
|
11
|
+
#
|
|
12
|
+
# `emits` above is what an inbound `tells` says once the fact is in.
|
|
13
|
+
# These two are the outbound half: what the adapter came back with, and
|
|
14
|
+
# what it said instead. Singular where `emits` is a list, because an ask
|
|
15
|
+
# has exactly one of each — a call that could answer two different ways
|
|
16
|
+
# is two calls.
|
|
17
|
+
#
|
|
18
|
+
# Empty on every `tells`, which is why neither carries an invariant
|
|
19
|
+
# demanding a value; `PortOperationBuilder` refuses the wrong word for
|
|
20
|
+
# the direction long before a record gets here.
|
|
21
|
+
attribute :answers, AnsweringEvent
|
|
22
|
+
attribute :refuses, RefusingEvent
|
|
23
|
+
|
|
24
|
+
value_object "OperationName" do
|
|
25
|
+
attribute :value, String
|
|
26
|
+
invariant("an operation is named") { !value.to_s.empty? }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
value_object "PortOperationField" do
|
|
30
|
+
attribute :name, String
|
|
31
|
+
attribute :type, String
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
value_object "EmittedEvent" do
|
|
35
|
+
attribute :value, String
|
|
36
|
+
invariant("an emitted event is named") { !value.to_s.empty? }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
value_object "AnsweringEvent" do
|
|
40
|
+
attribute :value, String
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
value_object "RefusingEvent" do
|
|
44
|
+
attribute :value, String
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# HOW PORTOPERATION IS SPELLED. These rows live with the concept
|
|
48
|
+
# they describe; SyntaxBoot discovers every aggregate-local seed table.
|
|
49
|
+
# Contexts represented here: PortOperation.
|
|
50
|
+
value_object "KeywordSeed" do
|
|
51
|
+
attribute :word, String
|
|
52
|
+
attribute :context, String, admits: "Syntax::Context"
|
|
53
|
+
attribute :body, String, admits: "Syntax::Body"
|
|
54
|
+
attribute :inner, String
|
|
55
|
+
attribute :opens, String
|
|
56
|
+
attribute :fills, String
|
|
57
|
+
attribute :status, String, default: "admitted", admits: "Syntax::Status"
|
|
58
|
+
attribute :was, String
|
|
59
|
+
attribute :resolves_via, String, default: "", admits: "Syntax::ResolutionScope"
|
|
60
|
+
attribute :disambiguator, String, default: "", admits: "Syntax::Disambiguator"
|
|
61
|
+
|
|
62
|
+
member word: "reference_to", context: "PortOperation", body: "none", inner: "", opens: "", fills: "attributes", calls: "reference_to_impl"
|
|
63
|
+
member word: "attribute", context: "PortOperation", body: "none", inner: "", opens: "", fills: "attributes", calls: "attribute_impl"
|
|
64
|
+
member word: "emits", context: "PortOperation", body: "none", inner: "", opens: "", fills: "emits"
|
|
65
|
+
member word: "answers", context: "PortOperation", body: "none", inner: "", opens: "", fills: "answers"
|
|
66
|
+
member word: "refuses", context: "PortOperation", body: "none", inner: "", opens: "", fills: "refuses"
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
value_object "ArgumentSeed" do
|
|
71
|
+
attribute :keyword, String
|
|
72
|
+
attribute :context, String, admits: "Syntax::Context"
|
|
73
|
+
attribute :at, String
|
|
74
|
+
attribute :named, String
|
|
75
|
+
attribute :kind, String, admits: "Syntax::ArgumentKind"
|
|
76
|
+
attribute :required, String
|
|
77
|
+
attribute :fills, String
|
|
78
|
+
attribute :selects, String
|
|
79
|
+
attribute :pair_key_fills, String
|
|
80
|
+
attribute :pair_value_fills, String
|
|
81
|
+
attribute :pairs_shape, String, admits: "Syntax::PairsShape"
|
|
82
|
+
attribute :status, String, default: "admitted", admits: "Syntax::Status"
|
|
83
|
+
attribute :variadic, String
|
|
84
|
+
attribute :coerce, String
|
|
85
|
+
attribute :blank_message, String
|
|
86
|
+
|
|
87
|
+
member keyword: "reference_to", context: "PortOperation", at: "1", named: "", kind: "constant", required: "true", fills: "type"
|
|
88
|
+
member keyword: "reference_to", context: "PortOperation", at: "", named: "as", kind: "symbol", required: "false", fills: "name"
|
|
89
|
+
member keyword: "attribute", context: "PortOperation", at: "1", named: "", kind: "symbol", required: "true", fills: "name"
|
|
90
|
+
member keyword: "attribute", context: "PortOperation", at: "2", named: "", kind: "constant", required: "true", fills: "type"
|
|
91
|
+
member keyword: "attribute", context: "PortOperation", at: "", named: "default", kind: "literal", required: "false", fills: "default"
|
|
92
|
+
member keyword: "attribute", context: "PortOperation", at: "", named: "optional", kind: "flag", required: "false", fills: "optional"
|
|
93
|
+
member keyword: "attribute", context: "PortOperation", at: "", named: "pattern", kind: "text", required: "false", fills: "pattern"
|
|
94
|
+
member keyword: "attribute", context: "PortOperation", at: "", named: "admits", kind: "text", required: "false", fills: "admits"
|
|
95
|
+
member keyword: "attribute", context: "PortOperation", at: "", named: "one_of", kind: "list", required: "false", fills: "one_of"
|
|
96
|
+
member keyword: "emits", context: "PortOperation", at: "1", named: "", kind: "text", required: "true", fills: "emits"
|
|
97
|
+
member keyword: "answers", context: "PortOperation", at: "1", named: "", kind: "text", required: "true", fills: "answers"
|
|
98
|
+
member keyword: "refuses", context: "PortOperation", at: "1", named: "", kind: "text", required: "true", fills: "refuses"
|
|
99
|
+
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
{
|
|
2
|
+
"audience": "Bluebook",
|
|
3
|
+
"scopes": [
|
|
4
|
+
{
|
|
5
|
+
"scope": "bluebook:aggregate.attribute",
|
|
6
|
+
"verb": "Bluebook::Aggregate.Attribute",
|
|
7
|
+
"role": "Language"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"scope": "bluebook:aggregate.declare",
|
|
11
|
+
"verb": "Bluebook::Aggregate.Declare",
|
|
12
|
+
"role": "Language"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"scope": "bluebook:aggregate.holds",
|
|
16
|
+
"verb": "Bluebook::Aggregate.Holds",
|
|
17
|
+
"role": "Language"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"scope": "bluebook:aggregate.identify",
|
|
21
|
+
"verb": "Bluebook::Aggregate.Identify",
|
|
22
|
+
"role": "Language"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"scope": "bluebook:aggregate.invariant",
|
|
26
|
+
"verb": "Bluebook::Aggregate.Invariant",
|
|
27
|
+
"role": "Language"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"scope": "bluebook:aggregate.lifecycle",
|
|
31
|
+
"verb": "Bluebook::Aggregate.Lifecycle",
|
|
32
|
+
"role": "Language"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"scope": "bluebook:aggregate.precondition",
|
|
36
|
+
"verb": "Bluebook::Aggregate.Precondition",
|
|
37
|
+
"role": "Language"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"scope": "bluebook:aggregate.projects",
|
|
41
|
+
"verb": "Bluebook::Aggregate.Projects",
|
|
42
|
+
"role": "Language"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"scope": "bluebook:aggregate.reference",
|
|
46
|
+
"verb": "Bluebook::Aggregate.Reference",
|
|
47
|
+
"role": "Language"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"scope": "bluebook:aggregate.seal",
|
|
51
|
+
"verb": "Bluebook::Aggregate.Seal",
|
|
52
|
+
"role": "Language"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"scope": "bluebook:aggregate.transition",
|
|
56
|
+
"verb": "Bluebook::Aggregate.Transition",
|
|
57
|
+
"role": "Language"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"scope": "bluebook:aggregate.value",
|
|
61
|
+
"verb": "Bluebook::Aggregate.Value",
|
|
62
|
+
"role": "Language"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"scope": "bluebook:bluebook.attach",
|
|
66
|
+
"verb": "Bluebook::Bluebook.Attach",
|
|
67
|
+
"role": "Language"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"scope": "bluebook:bluebook.declare",
|
|
71
|
+
"verb": "Bluebook::Bluebook.Declare",
|
|
72
|
+
"role": "Language"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"scope": "bluebook:bluebook.normalise",
|
|
76
|
+
"verb": "Bluebook::Bluebook.Normalise",
|
|
77
|
+
"role": "Language"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"scope": "bluebook:command.acts_on",
|
|
81
|
+
"verb": "Bluebook::Command.ActsOn",
|
|
82
|
+
"role": "Language"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"scope": "bluebook:command.announce",
|
|
86
|
+
"verb": "Bluebook::Command.Announce",
|
|
87
|
+
"role": "Language"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"scope": "bluebook:command.argument",
|
|
91
|
+
"verb": "Bluebook::Command.Argument",
|
|
92
|
+
"role": "Language"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"scope": "bluebook:command.change",
|
|
96
|
+
"verb": "Bluebook::Command.Change",
|
|
97
|
+
"role": "Language"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"scope": "bluebook:command.declare",
|
|
101
|
+
"verb": "Bluebook::Command.Declare",
|
|
102
|
+
"role": "Language"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"scope": "bluebook:command.ensure",
|
|
106
|
+
"verb": "Bluebook::Command.Ensure",
|
|
107
|
+
"role": "Language"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"scope": "bluebook:command.reference",
|
|
111
|
+
"verb": "Bluebook::Command.Reference",
|
|
112
|
+
"role": "Language"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"scope": "bluebook:command.rule",
|
|
116
|
+
"verb": "Bluebook::Command.Rule",
|
|
117
|
+
"role": "Language"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"scope": "bluebook:entity.attribute",
|
|
121
|
+
"verb": "Bluebook::Entity.Attribute",
|
|
122
|
+
"role": "Language"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"scope": "bluebook:entity.declare",
|
|
126
|
+
"verb": "Bluebook::Entity.Declare",
|
|
127
|
+
"role": "Language"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"scope": "bluebook:entity.identify",
|
|
131
|
+
"verb": "Bluebook::Entity.Identify",
|
|
132
|
+
"role": "Language"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"scope": "bluebook:entity.invariant",
|
|
136
|
+
"verb": "Bluebook::Entity.Invariant",
|
|
137
|
+
"role": "Language"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"scope": "bluebook:entity.lifecycle",
|
|
141
|
+
"verb": "Bluebook::Entity.Lifecycle",
|
|
142
|
+
"role": "Language"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"scope": "bluebook:entity.precondition",
|
|
146
|
+
"verb": "Bluebook::Entity.Precondition",
|
|
147
|
+
"role": "Language"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"scope": "bluebook:entity.seal",
|
|
151
|
+
"verb": "Bluebook::Entity.Seal",
|
|
152
|
+
"role": "Language"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"scope": "bluebook:entity.transition",
|
|
156
|
+
"verb": "Bluebook::Entity.Transition",
|
|
157
|
+
"role": "Language"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"scope": "bluebook:policy.bind",
|
|
161
|
+
"verb": "Bluebook::Policy.Bind",
|
|
162
|
+
"role": "Language"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"scope": "bluebook:policy.declare",
|
|
166
|
+
"verb": "Bluebook::Policy.Declare",
|
|
167
|
+
"role": "Language"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"scope": "bluebook:process_manager.declare",
|
|
171
|
+
"verb": "Bluebook::ProcessManager.Declare",
|
|
172
|
+
"role": "Language"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"scope": "bluebook:process_manager.handler",
|
|
176
|
+
"verb": "Bluebook::ProcessManager.Handler",
|
|
177
|
+
"role": "Language"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"scope": "bluebook:process_manager.handler.dispatch",
|
|
181
|
+
"verb": "Bluebook::ProcessManager.Handler.Dispatch",
|
|
182
|
+
"role": "Language"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"scope": "bluebook:process_manager.handler.dispatch.bind",
|
|
186
|
+
"verb": "Bluebook::ProcessManager.Handler.Dispatch.Bind",
|
|
187
|
+
"role": "Language"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"scope": "bluebook:process_manager.state",
|
|
191
|
+
"verb": "Bluebook::ProcessManager.State",
|
|
192
|
+
"role": "Language"
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"scope": "bluebook:query.argument",
|
|
196
|
+
"verb": "Bluebook::Query.Argument",
|
|
197
|
+
"role": "Language"
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"scope": "bluebook:query.declare",
|
|
201
|
+
"verb": "Bluebook::Query.Declare",
|
|
202
|
+
"role": "Language"
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"scope": "bluebook:query.filter",
|
|
206
|
+
"verb": "Bluebook::Query.Filter",
|
|
207
|
+
"role": "Language"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"scope": "bluebook:query.option",
|
|
211
|
+
"verb": "Bluebook::Query.Option",
|
|
212
|
+
"role": "Language"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"scope": "bluebook:read_model.count",
|
|
216
|
+
"verb": "Bluebook::ReadModel.Count",
|
|
217
|
+
"role": "Language"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"scope": "bluebook:read_model.declare",
|
|
221
|
+
"verb": "Bluebook::ReadModel.Declare",
|
|
222
|
+
"role": "Language"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"scope": "bluebook:read_model.gather",
|
|
226
|
+
"verb": "Bluebook::ReadModel.Gather",
|
|
227
|
+
"role": "Language"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"scope": "bluebook:read_model.group_by",
|
|
231
|
+
"verb": "Bluebook::ReadModel.GroupBy",
|
|
232
|
+
"role": "Language"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"scope": "bluebook:read_model.median",
|
|
236
|
+
"verb": "Bluebook::ReadModel.Median",
|
|
237
|
+
"role": "Language"
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"scope": "bluebook:read_model.option",
|
|
241
|
+
"verb": "Bluebook::ReadModel.Option",
|
|
242
|
+
"role": "Language"
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"scope": "bluebook:syntax.argument",
|
|
246
|
+
"verb": "Bluebook::Syntax.Argument",
|
|
247
|
+
"role": "Language"
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"scope": "bluebook:syntax.argument.deprecate",
|
|
251
|
+
"verb": "Bluebook::Syntax.Argument.Deprecate",
|
|
252
|
+
"role": "Language"
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"scope": "bluebook:syntax.argument.retire",
|
|
256
|
+
"verb": "Bluebook::Syntax.Argument.Retire",
|
|
257
|
+
"role": "Language"
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"scope": "bluebook:syntax.declare",
|
|
261
|
+
"verb": "Bluebook::Syntax.Declare",
|
|
262
|
+
"role": "Language"
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"scope": "bluebook:syntax.keyword",
|
|
266
|
+
"verb": "Bluebook::Syntax.Keyword",
|
|
267
|
+
"role": "Language"
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"scope": "bluebook:syntax.keyword.deprecate",
|
|
271
|
+
"verb": "Bluebook::Syntax.Keyword.Deprecate",
|
|
272
|
+
"role": "Language"
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"scope": "bluebook:syntax.keyword.retire",
|
|
276
|
+
"verb": "Bluebook::Syntax.Keyword.Retire",
|
|
277
|
+
"role": "Language"
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"scope": "bluebook:value_object.assert",
|
|
281
|
+
"verb": "Bluebook::ValueObject.Assert",
|
|
282
|
+
"role": "Language"
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"scope": "bluebook:value_object.close",
|
|
286
|
+
"verb": "Bluebook::ValueObject.Close",
|
|
287
|
+
"role": "Language"
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"scope": "bluebook:value_object.declare",
|
|
291
|
+
"verb": "Bluebook::ValueObject.Declare",
|
|
292
|
+
"role": "Language"
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"scope": "bluebook:value_object.field",
|
|
296
|
+
"verb": "Bluebook::ValueObject.Field",
|
|
297
|
+
"role": "Language"
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
"scope": "bluebook:value_object.member",
|
|
301
|
+
"verb": "Bluebook::ValueObject.Member",
|
|
302
|
+
"role": "Language"
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"scope": "bluebook:value_object.member.pair",
|
|
306
|
+
"verb": "Bluebook::ValueObject.Member.Pair",
|
|
307
|
+
"role": "Language"
|
|
308
|
+
}
|
|
309
|
+
],
|
|
310
|
+
"roles": [
|
|
311
|
+
"Language"
|
|
312
|
+
]
|
|
313
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
Hecks.bluebook "Port" do
|
|
2
|
+
vision "The .port language, declared in itself. A port names one resource door a domain's own aggregates call by verb — persisted_by, posted_by, whatever a chapter spells — bound to a real driven adapter at the world level. A sibling artifact to the bluebook, not part of one: the same port name is reused across every domain that needs the same kind of door."
|
|
3
|
+
core
|
|
4
|
+
|
|
5
|
+
aggregate "Port" do
|
|
6
|
+
description "One .port — a resource door a domain's own aggregates call by verb, and whether calling it answers with a value (reply) or fires an effect with nothing to hand back (effect)."
|
|
7
|
+
|
|
8
|
+
identified_by PortName, as: :name
|
|
9
|
+
|
|
10
|
+
attribute :verb, PortVerb
|
|
11
|
+
attribute :signal, PortSignal
|
|
12
|
+
|
|
13
|
+
value_object "PortName" do
|
|
14
|
+
attribute :value, String
|
|
15
|
+
invariant("a port names itself") { !value.to_s.empty? }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
value_object "PortVerb" do
|
|
19
|
+
attribute :value, String
|
|
20
|
+
invariant("a port's verb says something") { !value.to_s.empty? }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
value_object "PortSignal" do
|
|
24
|
+
attribute :value, String, one_of: ["reply", "effect"]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
command "Declare" do
|
|
28
|
+
role "Deployment"
|
|
29
|
+
goal "Open a resource door a domain's own aggregates may call by verb"
|
|
30
|
+
|
|
31
|
+
attribute :name, PortName
|
|
32
|
+
# OPTIONAL — real, pre-existing PortBuilder behavior (spec/dsl_spec
|
|
33
|
+
# .rb's own "signal says whether the domain gets a value back..."
|
|
34
|
+
# builds a port with only `signal`, never calling `verb` at all;
|
|
35
|
+
# `def verb(value)` has no default, unlike `signal`'s `:reply`).
|
|
36
|
+
# Same asymmetry world.bluebook's own Declare command already has
|
|
37
|
+
# for `realm`/`latest`.
|
|
38
|
+
attribute :verb, PortVerb, optional: true
|
|
39
|
+
attribute :signal, PortSignal
|
|
40
|
+
|
|
41
|
+
sets :name
|
|
42
|
+
sets :verb
|
|
43
|
+
sets :signal
|
|
44
|
+
|
|
45
|
+
emits "PortDeclared"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# HOW PORT IS SPELLED. These rows live with the concept
|
|
49
|
+
# they describe; SyntaxBoot discovers every aggregate-local seed table.
|
|
50
|
+
# Contexts represented here: File, Port.
|
|
51
|
+
value_object "KeywordSeed" do
|
|
52
|
+
attribute :word, String
|
|
53
|
+
attribute :context, String, admits: "Syntax::Context"
|
|
54
|
+
attribute :body, String, admits: "Syntax::Body"
|
|
55
|
+
attribute :inner, String
|
|
56
|
+
attribute :opens, String
|
|
57
|
+
attribute :fills, String
|
|
58
|
+
attribute :status, String, default: "admitted", admits: "Syntax::Status"
|
|
59
|
+
attribute :was, String
|
|
60
|
+
attribute :resolves_via, String, default: "", admits: "Syntax::ResolutionScope"
|
|
61
|
+
attribute :disambiguator, String, default: "", admits: "Syntax::Disambiguator"
|
|
62
|
+
|
|
63
|
+
member word: "port", context: "File", body: "keywords", inner: "Port", opens: "Port", fills: ""
|
|
64
|
+
member word: "verb", context: "Port", body: "none", inner: "", opens: "", fills: "verb"
|
|
65
|
+
member word: "signal", context: "Port", body: "none", inner: "", opens: "", fills: "signal"
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
value_object "ArgumentSeed" do
|
|
70
|
+
attribute :keyword, String
|
|
71
|
+
attribute :context, String, admits: "Syntax::Context"
|
|
72
|
+
attribute :at, String
|
|
73
|
+
attribute :named, String
|
|
74
|
+
attribute :kind, String, admits: "Syntax::ArgumentKind"
|
|
75
|
+
attribute :required, String
|
|
76
|
+
attribute :fills, String
|
|
77
|
+
attribute :selects, String
|
|
78
|
+
attribute :pair_key_fills, String
|
|
79
|
+
attribute :pair_value_fills, String
|
|
80
|
+
attribute :pairs_shape, String, admits: "Syntax::PairsShape"
|
|
81
|
+
attribute :status, String, default: "admitted", admits: "Syntax::Status"
|
|
82
|
+
attribute :variadic, String
|
|
83
|
+
attribute :coerce, String
|
|
84
|
+
attribute :blank_message, String
|
|
85
|
+
|
|
86
|
+
member keyword: "port", context: "File", at: "1", named: "", kind: "text", required: "true", fills: "name"
|
|
87
|
+
member keyword: "verb", context: "Port", at: "1", named: "", kind: "text", required: "true", fills: "verb"
|
|
88
|
+
member keyword: "signal", context: "Port", at: "1", named: "", kind: "symbol", required: "true", fills: "signal"
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
Hecks.bluebook "Translation" do
|
|
2
|
+
aggregate "Translation" do
|
|
3
|
+
description "One translations/*.bluebook edge — a domain moving from one pinned era to the next, aggregate by aggregate."
|
|
4
|
+
|
|
5
|
+
identified_by :domain, :from, :to
|
|
6
|
+
|
|
7
|
+
attribute :domain, TranslationDomainName
|
|
8
|
+
attribute :from, TranslationEraName
|
|
9
|
+
attribute :to, TranslationEraName
|
|
10
|
+
attribute :retired, list_of(TranslationName)
|
|
11
|
+
|
|
12
|
+
value_object "TranslationDomainName" do
|
|
13
|
+
attribute :value, String
|
|
14
|
+
invariant("a translation names its domain") { !value.to_s.empty? }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
value_object "TranslationEraName" do
|
|
18
|
+
attribute :value, String
|
|
19
|
+
invariant("a translation names its own era") { !value.to_s.empty? }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
value_object "TranslationName" do
|
|
23
|
+
attribute :value, String
|
|
24
|
+
invariant("a name says something") { !value.to_s.empty? }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# ARBITRARY, UNVALIDATED CAPTURE — `convert`'s own `values:` table and
|
|
28
|
+
# `backfill`'s own `default:` are open-ended (any literal a real
|
|
29
|
+
# migration needs), the same shape `AggregateBuilder#provenance`/
|
|
30
|
+
# `CommandBuilder#provenance` already capture as plain, unvalidated
|
|
31
|
+
# text (`LiteralText`, aggregate.bluebook) rather than a fixed
|
|
32
|
+
# attribute shape a closed self-hosted record could enumerate.
|
|
33
|
+
value_object "TranslationLiteralText" do
|
|
34
|
+
attribute :value, String
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
command "Declare" do
|
|
38
|
+
role "Deployment"
|
|
39
|
+
goal "Open a domain's own move from one pinned era to the next"
|
|
40
|
+
|
|
41
|
+
attribute :domain, TranslationDomainName
|
|
42
|
+
attribute :from, TranslationEraName
|
|
43
|
+
attribute :to, TranslationEraName
|
|
44
|
+
|
|
45
|
+
sets :domain
|
|
46
|
+
sets :from
|
|
47
|
+
sets :to
|
|
48
|
+
|
|
49
|
+
emits "TranslationDeclared"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
command "Retire" do
|
|
53
|
+
role "Deployment"
|
|
54
|
+
goal "Name an aggregate the new era drops outright, not renamed"
|
|
55
|
+
|
|
56
|
+
attribute :value, TranslationName
|
|
57
|
+
|
|
58
|
+
sets :retired, append: { value: :value }
|
|
59
|
+
|
|
60
|
+
emits "TranslationAggregateRetired"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# HOW TRANSLATION IS SPELLED. These rows live with the concept
|
|
64
|
+
# they describe; SyntaxBoot discovers every aggregate-local seed table.
|
|
65
|
+
# Contexts represented here: File, Translation.
|
|
66
|
+
value_object "KeywordSeed" do
|
|
67
|
+
attribute :word, String
|
|
68
|
+
attribute :context, String, admits: "Syntax::Context"
|
|
69
|
+
attribute :body, String, admits: "Syntax::Body"
|
|
70
|
+
attribute :inner, String
|
|
71
|
+
attribute :opens, String
|
|
72
|
+
attribute :fills, String
|
|
73
|
+
attribute :status, String, default: "admitted", admits: "Syntax::Status"
|
|
74
|
+
attribute :was, String
|
|
75
|
+
attribute :resolves_via, String, default: "", admits: "Syntax::ResolutionScope"
|
|
76
|
+
attribute :disambiguator, String, default: "", admits: "Syntax::Disambiguator"
|
|
77
|
+
|
|
78
|
+
member word: "data_translation", context: "File", body: "keywords", inner: "Translation", opens: "Translation", fills: ""
|
|
79
|
+
member word: "aggregate", context: "Translation", body: "keywords", inner: "TranslationAggregate", opens: "TranslationAggregate", fills: "", calls: "aggregate_impl"
|
|
80
|
+
member word: "retired", context: "Translation", body: "none", inner: "", opens: "", fills: "retired"
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
value_object "ArgumentSeed" do
|
|
85
|
+
attribute :keyword, String
|
|
86
|
+
attribute :context, String, admits: "Syntax::Context"
|
|
87
|
+
attribute :at, String
|
|
88
|
+
attribute :named, String
|
|
89
|
+
attribute :kind, String, admits: "Syntax::ArgumentKind"
|
|
90
|
+
attribute :required, String
|
|
91
|
+
attribute :fills, String
|
|
92
|
+
attribute :selects, String
|
|
93
|
+
attribute :pair_key_fills, String
|
|
94
|
+
attribute :pair_value_fills, String
|
|
95
|
+
attribute :pairs_shape, String, admits: "Syntax::PairsShape"
|
|
96
|
+
attribute :status, String, default: "admitted", admits: "Syntax::Status"
|
|
97
|
+
attribute :variadic, String
|
|
98
|
+
attribute :coerce, String
|
|
99
|
+
attribute :blank_message, String
|
|
100
|
+
|
|
101
|
+
member keyword: "data_translation", context: "File", at: "1", named: "", kind: "text", required: "true", fills: "name"
|
|
102
|
+
member keyword: "data_translation", context: "File", at: "", named: "from", kind: "text", required: "true", fills: "from"
|
|
103
|
+
member keyword: "data_translation", context: "File", at: "", named: "to", kind: "text", required: "true", fills: "to"
|
|
104
|
+
member keyword: "aggregate", context: "Translation", at: "1", named: "", kind: "text", required: "true", fills: "name"
|
|
105
|
+
member keyword: "aggregate", context: "Translation", at: "", named: "was", kind: "text", required: "false", fills: "was"
|
|
106
|
+
member keyword: "retired", context: "Translation", at: "1", named: "", kind: "text", required: "true", fills: "name", blank_message: "a retired needs an aggregate name"
|
|
107
|
+
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|