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,256 @@
|
|
|
1
|
+
Hecks.bluebook "Bluebook", version: "1" do
|
|
2
|
+
vision "The bluebook language, declared in itself. Loading a domain becomes dispatching commands into this meta-domain ; the IR it stores must equal the IR the DSL builder produces. The floor that stays hand-written is the interpreter — evaluating a predicate held as data — and IO."
|
|
3
|
+
core
|
|
4
|
+
|
|
5
|
+
# A WHOLE BLUEBOOK, handed back in one read.
|
|
6
|
+
#
|
|
7
|
+
# The twelve `DeclaredIn` queries below can walk the tree a level at a time, and
|
|
8
|
+
# a caller stitching twelve reads together is a caller reimplementing this. The
|
|
9
|
+
# language already knows how to say "gather these heads around that spine" —
|
|
10
|
+
# it is what a read model IS — so the reconstruction is DECLARED rather than
|
|
11
|
+
# coded, and the shape of what comes back is a fact about the language instead
|
|
12
|
+
# of a fact about whoever wrote the reader.
|
|
13
|
+
#
|
|
14
|
+
# Spined on Bluebook because a bluebook is what you ask for. Everything else
|
|
15
|
+
# hangs off it, down to a Member's pairs and a Dispatch's bindings.
|
|
16
|
+
read_model "WholeBluebook" do
|
|
17
|
+
description "Every declaration of one chapter, gathered around the chapter itself — the way back, in a single read."
|
|
18
|
+
reference_to Bluebook
|
|
19
|
+
|
|
20
|
+
include Bluebook
|
|
21
|
+
include Aggregate
|
|
22
|
+
include Command
|
|
23
|
+
include ValueObject
|
|
24
|
+
include Query
|
|
25
|
+
include Entity
|
|
26
|
+
include Member
|
|
27
|
+
include Policy
|
|
28
|
+
include ProcessManager
|
|
29
|
+
include Handler
|
|
30
|
+
include Dispatch
|
|
31
|
+
include ReadModel
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
aggregate "Bluebook" do
|
|
35
|
+
description "One .bluebook file — the root a domain declaration hangs from."
|
|
36
|
+
|
|
37
|
+
# A CHAPTER IS KNOWN BY ITS NAME, which is what anyone would have said.
|
|
38
|
+
#
|
|
39
|
+
# It was not, and the reason it was not is worth keeping : the runtime read the
|
|
40
|
+
# identity out of the payload under its head's own name, so a command that both
|
|
41
|
+
# REACHED a bluebook and carried a name could not say both, and `Normalise`
|
|
42
|
+
# could never name what it acts on. The answer at the time was to duck it —
|
|
43
|
+
# keep `name` a plain field and be reached by a minted `id` like nothing else
|
|
44
|
+
# in the language.
|
|
45
|
+
#
|
|
46
|
+
# The duck is what is gone. A command reaches its root through the REFERENCE it
|
|
47
|
+
# declares (`bluebook_id`), which is a different key from any argument it
|
|
48
|
+
# carries, so the two cannot collide however they are spelled. The fallback was
|
|
49
|
+
# hiding a lookup bug ; removing it made the bug visible, and the bug was the
|
|
50
|
+
# smaller thing.
|
|
51
|
+
identified_by BluebookName, as: :name
|
|
52
|
+
|
|
53
|
+
attribute :vision, Vision
|
|
54
|
+
attribute :classification, Classification
|
|
55
|
+
# A domain CONTRACT version, pinned per chapter — `Hecks.bluebook "Pizzas",
|
|
56
|
+
# version: "v2"`. Held here because the language must hold everything the
|
|
57
|
+
# runtime runs on, and this was the one field it did not: the round trip sliced
|
|
58
|
+
# its comparison by the reconstruction's own keys, so a version was excluded
|
|
59
|
+
# from the check rather than failing it, and a chapter assembled purely from
|
|
60
|
+
# these records would have lost it in silence. Most chapters declare none, and
|
|
61
|
+
# ABSENT IS NOT EMPTY — an unversioned chapter offers nothing here at all.
|
|
62
|
+
attribute :version, Version
|
|
63
|
+
# A domain's own identity can change — held here so a rename is a
|
|
64
|
+
# declared fact the language carries, not just a Ruby-side accessor.
|
|
65
|
+
# Most chapters declare none, and ABSENT IS NOT EMPTY, the same
|
|
66
|
+
# reading `version` above gives.
|
|
67
|
+
attribute :formerly_known_as, FormerlyKnownAs
|
|
68
|
+
attribute :normalisations, list_of(NormalisationRule)
|
|
69
|
+
# THE SEAM ADR 0026 ADDS. A sub-language chapter (Paging, so far the
|
|
70
|
+
# only one) names the core contexts its own `Syntax` aggregate
|
|
71
|
+
# contributes rows for — "Query", "ReadModel" — so SyntaxBoot's own
|
|
72
|
+
# discovery can find it without the core ever naming it back. Most
|
|
73
|
+
# chapters attach to nothing, and ABSENT IS NOT EMPTY, the same
|
|
74
|
+
# reading `version`/`formerly_known_as` above give.
|
|
75
|
+
attribute :attaches_to, list_of(AttachesToContext)
|
|
76
|
+
|
|
77
|
+
value_object "RuleText" do
|
|
78
|
+
# deliberately permissive : source_token and replacement are legitimately
|
|
79
|
+
# empty for the collapse_whitespace rule
|
|
80
|
+
attribute :value, String
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
value_object "NormalisationRule" do
|
|
84
|
+
attribute :strategy, String
|
|
85
|
+
attribute :source_token, String
|
|
86
|
+
attribute :replacement, String
|
|
87
|
+
attribute :boundary, String
|
|
88
|
+
attribute :position, String
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
value_object "BluebookName" do
|
|
92
|
+
attribute :value, String
|
|
93
|
+
invariant("a chapter is named") { !value.to_s.empty? }
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
value_object "Vision" do
|
|
97
|
+
attribute :value, String
|
|
98
|
+
invariant("a vision says something") { !value.to_s.empty? }
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
value_object "Classification" do
|
|
102
|
+
attribute :value, String
|
|
103
|
+
invariant("a chapter is core, supporting, or generic") do
|
|
104
|
+
value.to_s == "core" || value.to_s == "supporting" || value.to_s == "generic"
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
value_object "Version" do
|
|
109
|
+
attribute :value, String
|
|
110
|
+
invariant("a version says something") { !value.to_s.empty? }
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
value_object "FormerlyKnownAs" do
|
|
114
|
+
attribute :value, String
|
|
115
|
+
invariant("a formerly_known_as says something") { !value.to_s.empty? }
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
value_object "AttachesToContext" do
|
|
119
|
+
attribute :value, String
|
|
120
|
+
invariant("an attachment names a context") { !value.to_s.empty? }
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
command "Declare" do
|
|
124
|
+
role "Language"
|
|
125
|
+
goal "Open a chapter"
|
|
126
|
+
|
|
127
|
+
attribute :name, BluebookName
|
|
128
|
+
attribute :vision, Vision, optional: true
|
|
129
|
+
attribute :classification, Classification, optional: true
|
|
130
|
+
attribute :version, Version, optional: true
|
|
131
|
+
attribute :formerly_known_as, FormerlyKnownAs, optional: true
|
|
132
|
+
|
|
133
|
+
sets :name
|
|
134
|
+
sets :vision
|
|
135
|
+
sets :classification
|
|
136
|
+
sets :version
|
|
137
|
+
sets :formerly_known_as
|
|
138
|
+
|
|
139
|
+
emits "ChapterDeclared"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# ONE CONTEXT THE CHAPTER ATTACHES TO, appended the way one identity
|
|
143
|
+
# part is (Aggregate.Identify, above) — `attaches_to "Query",
|
|
144
|
+
# "ReadModel"` names any number at once, and a list is filled by a
|
|
145
|
+
# verb of its own here the same reason it is everywhere else in this
|
|
146
|
+
# language.
|
|
147
|
+
command "Attach" do
|
|
148
|
+
role "Language"
|
|
149
|
+
goal "Name one core context this chapter's own Syntax rows attach to"
|
|
150
|
+
|
|
151
|
+
attribute :context, AttachesToContext
|
|
152
|
+
|
|
153
|
+
sets :attaches_to, append: { value: :context }
|
|
154
|
+
# S16, ADR 0026 — the language's own self-use gate: an append is
|
|
155
|
+
# exactly the shape banking's own ensures already checks ("a
|
|
156
|
+
# ledger entry was posted") { ledger.size == old.ledger.size + 1
|
|
157
|
+
# } — one more row than before, never fewer, never the same.
|
|
158
|
+
ensures("the list grew by exactly one") { attaches_to.size == old.attaches_to.size + 1 }
|
|
159
|
+
emits "ChapterAttached"
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# THE WAY BACK.
|
|
163
|
+
#
|
|
164
|
+
# Until these existed the meta-domain was write-only: twelve categories, 34
|
|
165
|
+
# verbs, and not one query. A bluebook could be dispatched in and never read
|
|
166
|
+
# out, which is exactly as much as JUDGING requires — offer every declaration,
|
|
167
|
+
# collect the refusals, throw the records away. It is also why the language
|
|
168
|
+
# could only validate. A store you cannot read cannot be the source of
|
|
169
|
+
# anything, and "loading a domain becomes dispatching commands into this
|
|
170
|
+
# meta-domain" — the vision at the top of this file — needs the records to
|
|
171
|
+
# come back out as the IR the runtime runs.
|
|
172
|
+
# Named to finish a sentence about the thing, the way every other query in the
|
|
173
|
+
# corpus is — pizzas COSTING LESS THAN a ceiling, orders PENDING, cards
|
|
174
|
+
# ACTIVE. So: the bluebook CALLED "Pizzas".
|
|
175
|
+
query "Called" do
|
|
176
|
+
attribute :name, BluebookName
|
|
177
|
+
where(name: :name)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
command "Normalise" do
|
|
181
|
+
role "Language"
|
|
182
|
+
goal "Attach one canonical-form rule to the chapter"
|
|
183
|
+
|
|
184
|
+
attribute :strategy, RuleText
|
|
185
|
+
attribute :source_token, RuleText
|
|
186
|
+
attribute :replacement, RuleText
|
|
187
|
+
attribute :boundary, RuleText
|
|
188
|
+
attribute :position, RuleText, optional: true
|
|
189
|
+
|
|
190
|
+
sets :normalisations, append: {
|
|
191
|
+
strategy: :strategy, source_token: :source_token,
|
|
192
|
+
replacement: :replacement, boundary: :boundary, position: :position
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
emits "NormalisationAttached"
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# HOW BLUEBOOK IS SPELLED. These rows live with the concept
|
|
199
|
+
# they describe; SyntaxBoot discovers every aggregate-local seed table.
|
|
200
|
+
# Contexts represented here: File, Bluebook.
|
|
201
|
+
value_object "KeywordSeed" do
|
|
202
|
+
attribute :word, String
|
|
203
|
+
attribute :context, String, admits: "Syntax::Context"
|
|
204
|
+
attribute :body, String, admits: "Syntax::Body"
|
|
205
|
+
attribute :inner, String
|
|
206
|
+
attribute :opens, String
|
|
207
|
+
attribute :fills, String
|
|
208
|
+
attribute :status, String, default: "admitted", admits: "Syntax::Status"
|
|
209
|
+
attribute :was, String
|
|
210
|
+
attribute :resolves_via, String, default: "", admits: "Syntax::ResolutionScope"
|
|
211
|
+
attribute :disambiguator, String, default: "", admits: "Syntax::Disambiguator"
|
|
212
|
+
|
|
213
|
+
member word: "bluebook", context: "File", body: "keywords", inner: "Bluebook", opens: "Bluebook", fills: ""
|
|
214
|
+
member word: "vision", context: "Bluebook", body: "none", inner: "", opens: "", fills: "vision"
|
|
215
|
+
member word: "formerly_known_as", context: "Bluebook", body: "none", inner: "", opens: "", fills: "formerly_known_as"
|
|
216
|
+
member word: "attaches_to", context: "Bluebook", body: "none", inner: "", opens: "", fills: "attaches_to", calls: "attaches_to_impl"
|
|
217
|
+
member word: "core", context: "Bluebook", body: "none", inner: "", opens: "", fills: "classification"
|
|
218
|
+
member word: "supporting", context: "Bluebook", body: "none", inner: "", opens: "", fills: "classification"
|
|
219
|
+
member word: "generic", context: "Bluebook", body: "none", inner: "", opens: "", fills: "classification"
|
|
220
|
+
member word: "aggregate", context: "Bluebook", body: "keywords", inner: "Aggregate", opens: "Aggregate", fills: "", calls: "aggregate_impl"
|
|
221
|
+
member word: "read_model", context: "Bluebook", body: "keywords", inner: "ReadModel", opens: "ReadModel", fills: "", was: "report"
|
|
222
|
+
member word: "policy", context: "Bluebook", body: "keywords", inner: "Policy", opens: "Policy", fills: ""
|
|
223
|
+
member word: "process_manager", context: "Bluebook", body: "keywords", inner: "ProcessManager", opens: "ProcessManager", fills: ""
|
|
224
|
+
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
value_object "ArgumentSeed" do
|
|
228
|
+
attribute :keyword, String
|
|
229
|
+
attribute :context, String, admits: "Syntax::Context"
|
|
230
|
+
attribute :at, String
|
|
231
|
+
attribute :named, String
|
|
232
|
+
attribute :kind, String, admits: "Syntax::ArgumentKind"
|
|
233
|
+
attribute :required, String
|
|
234
|
+
attribute :fills, String
|
|
235
|
+
attribute :selects, String
|
|
236
|
+
attribute :pair_key_fills, String
|
|
237
|
+
attribute :pair_value_fills, String
|
|
238
|
+
attribute :pairs_shape, String, admits: "Syntax::PairsShape"
|
|
239
|
+
attribute :status, String, default: "admitted", admits: "Syntax::Status"
|
|
240
|
+
attribute :variadic, String
|
|
241
|
+
attribute :coerce, String
|
|
242
|
+
attribute :blank_message, String
|
|
243
|
+
|
|
244
|
+
member keyword: "bluebook", context: "File", at: "1", named: "", kind: "text", required: "true", fills: "name"
|
|
245
|
+
member keyword: "bluebook", context: "File", at: "", named: "version", kind: "text", required: "false", fills: "version"
|
|
246
|
+
member keyword: "vision", context: "Bluebook", at: "1", named: "", kind: "text", required: "true", fills: "vision", coerce: "false"
|
|
247
|
+
member keyword: "formerly_known_as", context: "Bluebook", at: "1", named: "", kind: "text", required: "true", fills: "formerly_known_as"
|
|
248
|
+
member keyword: "attaches_to", context: "Bluebook", at: "1", named: "", kind: "text", required: "true", fills: "attaches_to", variadic: "true"
|
|
249
|
+
member keyword: "aggregate", context: "Bluebook", at: "1", named: "", kind: "text", required: "true", fills: "name"
|
|
250
|
+
member keyword: "read_model", context: "Bluebook", at: "1", named: "", kind: "text", required: "true", fills: "name"
|
|
251
|
+
member keyword: "policy", context: "Bluebook", at: "1", named: "", kind: "text", required: "true", fills: "name"
|
|
252
|
+
member keyword: "process_manager", context: "Bluebook", at: "1", named: "", kind: "text", required: "true", fills: "name"
|
|
253
|
+
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# THE LANGUAGE IS A DOMAIN LIKE ANY OTHER, and this is the line that
|
|
2
|
+
# says so. `lib/hecks/language/bluebook/` describes what a bluebook
|
|
3
|
+
# IS — nine files, one chapter — and until MetaValidator.defer existed it
|
|
4
|
+
# could not be booted the ordinary way at all: each file was judged
|
|
5
|
+
# before its siblings had been read, so Aggregate's reference to Bluebook
|
|
6
|
+
# dangled and the load refused. It boots now, which means it can also be
|
|
7
|
+
# fuzzed, model-checked and inspected exactly like banking or pizzas.
|
|
8
|
+
#
|
|
9
|
+
# Memory because this chapter is read, never written to a store — nothing
|
|
10
|
+
# dispatches a command against the language in production. A binding
|
|
11
|
+
# still has to be DECLARED rather than defaulted, so that what answers is
|
|
12
|
+
# a stated fact rather than whatever the runtime happened to fall back on.
|
|
13
|
+
Hecks.hecksagon "Bluebook" do
|
|
14
|
+
# Several constructs here declare `role "Language"` (Aggregate.Declare,
|
|
15
|
+
# Entity.Declare, ...) — only real access control once Governance can
|
|
16
|
+
# check it against something (S8).
|
|
17
|
+
uses_framework "Governance"
|
|
18
|
+
persisted_by "Memory"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
Hecks.hecksagon "Governance" do
|
|
22
|
+
Governance::RoleAssignment.persisted_by("Memory")
|
|
23
|
+
Governance::RoleTransition.persisted_by("Memory")
|
|
24
|
+
end
|