hecks 0.2.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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 +427 -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 +101 -0
- data/lib/hecks/adapters/driven/heki/journal.rb +56 -0
- data/lib/hecks/adapters/driven/heki/saga_store.rb +99 -0
- data/lib/hecks/adapters/driven/heki/snapshot.rb +65 -0
- data/lib/hecks/adapters/driven/heki.adapter +4 -0
- data/lib/hecks/adapters/driven/heki.rb +179 -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 +145 -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 +88 -0
- data/lib/hecks/adapters/driven/postgres/schema_builder.rb +207 -0
- data/lib/hecks/adapters/driven/postgres.adapter +5 -0
- data/lib/hecks/adapters/driven/postgres.rb +438 -0
- data/lib/hecks/adapters/driven/postgres_era.adapter +17 -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 +80 -0
- data/lib/hecks/adapters/driven/sqlite/projection.rb +172 -0
- data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +192 -0
- data/lib/hecks/adapters/driven/sqlite.adapter +9 -0
- data/lib/hecks/adapters/driven/sqlite.rb +306 -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 +54 -0
- data/lib/hecks/adapters.rb +6 -0
- data/lib/hecks/behaviors/dsl.rb +125 -0
- data/lib/hecks/behaviors/expectations.rb +340 -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 +438 -0
- data/lib/hecks/bluebook/assembly/marks.rb +228 -0
- data/lib/hecks/bluebook/assembly/specializer.rb +70 -0
- data/lib/hecks/bluebook/assembly.rb +91 -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 +68 -0
- data/lib/hecks/bluebook/behaviour/policy.rb +52 -0
- data/lib/hecks/bluebook/behaviour/process_manager.rb +51 -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 +78 -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 +1018 -0
- data/lib/hecks/bluebook/dsl/attribute_collector.rb +348 -0
- data/lib/hecks/bluebook/dsl/binding_proxy.rb +71 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +1087 -0
- data/lib/hecks/bluebook/dsl/command_builder.rb +714 -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 +430 -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 +135 -0
- data/lib/hecks/bluebook/dsl/port_builder.rb +39 -0
- data/lib/hecks/bluebook/dsl/port_operation_builder.rb +142 -0
- data/lib/hecks/bluebook/dsl/process_manager_builder.rb +306 -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 +173 -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 +228 -0
- data/lib/hecks/bluebook/dsl/world_builder.rb +117 -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 +123 -0
- data/lib/hecks/bluebook/expression/evaluator.rb +304 -0
- data/lib/hecks/bluebook/expression/projection.json +218 -0
- data/lib/hecks/bluebook/expression/resolver/block_predicates.rb +233 -0
- data/lib/hecks/bluebook/expression/resolver.rb +781 -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 +621 -0
- data/lib/hecks/bluebook/meta_validator/plan.rb +332 -0
- data/lib/hecks/bluebook/meta_validator/port_judge.rb +51 -0
- data/lib/hecks/bluebook/meta_validator/readings.rb +360 -0
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +351 -0
- data/lib/hecks/bluebook/meta_validator/shapes.rb +266 -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 +542 -0
- data/lib/hecks/bluebook/model_check.rb +445 -0
- data/lib/hecks/bluebook/pattern_subset.rb +184 -0
- data/lib/hecks/bluebook/policy.rb +41 -0
- data/lib/hecks/bluebook/process_manager.rb +128 -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 +66 -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 +410 -0
- data/lib/hecks/embryonaut_bluebook.rb +75 -0
- data/lib/hecks/facade/cli_door.rb +119 -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 +166 -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 +341 -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 +177 -0
- data/lib/hecks/forms/field_shape.rb +232 -0
- data/lib/hecks/forms/html.rb +84 -0
- data/lib/hecks/forms/index_renderer.rb +35 -0
- data/lib/hecks/forms/page.rb +157 -0
- data/lib/hecks/forms/params.rb +161 -0
- data/lib/hecks/forms/port_argument.rb +46 -0
- data/lib/hecks/forms/query_form_renderer.rb +114 -0
- data/lib/hecks/forms/record_renderer.rb +119 -0
- data/lib/hecks/forms/record_table.rb +68 -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 +145 -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/bounded_exhaustive_expressions.rb +527 -0
- data/lib/hecks/fuzzing/invalid_value_generator.rb +86 -0
- data/lib/hecks/fuzzing/isolated_boot.rb +286 -0
- data/lib/hecks/fuzzing/properties.rb +1192 -0
- data/lib/hecks/fuzzing/replay.rb +668 -0
- data/lib/hecks/fuzzing/sequence_generator/catalog.rb +93 -0
- data/lib/hecks/fuzzing/sequence_generator/outcome_tracker.rb +80 -0
- data/lib/hecks/fuzzing/sequence_generator/picker.rb +96 -0
- data/lib/hecks/fuzzing/sequence_generator/step_builder.rb +250 -0
- data/lib/hecks/fuzzing/sequence_generator.rb +131 -0
- data/lib/hecks/fuzzing/value_generator.rb +200 -0
- data/lib/hecks/fuzzing.rb +12 -0
- data/lib/hecks/grammar/evolve.rb +324 -0
- data/lib/hecks/grammar/expression.bluebook +420 -0
- data/lib/hecks/grammar/expression_operators.json +1648 -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 +471 -0
- data/lib/hecks/language/bluebook/entity.bluebook +392 -0
- data/lib/hecks/language/bluebook/policy.bluebook +189 -0
- data/lib/hecks/language/bluebook/process_manager.bluebook +381 -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 +448 -0
- data/lib/hecks/language/bluebook/vocabulary.bluebook +379 -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 +333 -0
- data/lib/hecks/language/port.bluebook +120 -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 +174 -0
- data/lib/hecks/ports/access_control.port +9 -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 +8 -0
- data/lib/hecks/ports/agent.rb +167 -0
- data/lib/hecks/ports/authentication.port +6 -0
- data/lib/hecks/ports/authentication.rb +50 -0
- data/lib/hecks/ports/authorization.port +7 -0
- data/lib/hecks/ports/authorization.rb +62 -0
- data/lib/hecks/ports/clock.port +5 -0
- data/lib/hecks/ports/clock.rb +62 -0
- data/lib/hecks/ports/extraction.port +5 -0
- data/lib/hecks/ports/extraction.rb +37 -0
- data/lib/hecks/ports/identity_assignment.port +5 -0
- data/lib/hecks/ports/identity_assignment.rb +45 -0
- data/lib/hecks/ports/identity_generation.port +5 -0
- data/lib/hecks/ports/identity_generation.rb +49 -0
- data/lib/hecks/ports/identity_resolution.port +5 -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 +138 -0
- data/lib/hecks/ports/persistence/binding_policy.rb +56 -0
- data/lib/hecks/ports/persistence/execution.rb +23 -0
- data/lib/hecks/ports/persistence/null_saga_store.rb +25 -0
- data/lib/hecks/ports/persistence/plugin.rb +54 -0
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +169 -0
- data/lib/hecks/ports/persistence/plugins/era/era_guard/shape_diff.rb +128 -0
- data/lib/hecks/ports/persistence/plugins/era/era_guard.rb +161 -0
- data/lib/hecks/ports/persistence/plugins/era/era_tamper.rb +61 -0
- data/lib/hecks/ports/persistence/plugins/era/lineage.rb +304 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/era_store.rb +171 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/field_cache.rb +190 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/head_compiler.rb +478 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/mint_transaction.rb +166 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/provisioning.rb +314 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/resumable_backfill.rb +168 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/tail_merge.rb +170 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/transform_installer.rb +134 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage.rb +137 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/coverage_check.rb +89 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/era_resolver.rb +85 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/merge_coordinator.rb +43 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/minter.rb +132 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager.rb +74 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era.rb +758 -0
- data/lib/hecks/ports/persistence/plugins/era/storage_shape.rb +120 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/approval_digest.rb +31 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_one.rb +46 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_two.rb +102 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/unfed_report.rb +46 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/audit.rb +70 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/reattest.rb +72 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/rule_compiler.rb +120 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/differ.rb +183 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/renderer.rb +41 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/writer.rb +28 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold.rb +30 -0
- data/lib/hecks/ports/persistence/plugins/era/translation.rb +11 -0
- data/lib/hecks/ports/persistence/plugins/era.rb +48 -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 +96 -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 +642 -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 +44 -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 +446 -0
- data/lib/hecks/projector/docs_projector.rb +321 -0
- data/lib/hecks/projector/exporter.rb +158 -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 +411 -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 +92 -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 +107 -0
- data/lib/hecks/query_specification/hop_path.rb +132 -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/aggregate_lock.rb +45 -0
- data/lib/hecks/runtime/boot_gates.rb +41 -0
- data/lib/hecks/runtime/caller.rb +66 -0
- data/lib/hecks/runtime/capability_graph.rb +44 -0
- data/lib/hecks/runtime/command_interpreter/argument_gate.rb +135 -0
- data/lib/hecks/runtime/command_interpreter/mutation_applier.rb +260 -0
- data/lib/hecks/runtime/command_interpreter.rb +497 -0
- data/lib/hecks/runtime/command_rules/admissibility.rb +357 -0
- data/lib/hecks/runtime/command_rules/arithmetic.rb +260 -0
- data/lib/hecks/runtime/command_rules/authorization.rb +65 -0
- data/lib/hecks/runtime/command_rules/emission.rb +34 -0
- data/lib/hecks/runtime/command_rules/references.rb +189 -0
- data/lib/hecks/runtime/command_rules.rb +28 -0
- data/lib/hecks/runtime/dependency_planning.rb +245 -0
- data/lib/hecks/runtime/dispatcher.rb +301 -0
- data/lib/hecks/runtime/entity_element.rb +253 -0
- data/lib/hecks/runtime/entity_interpreter.rb +299 -0
- data/lib/hecks/runtime/errors.rb +122 -0
- data/lib/hecks/runtime/event.rb +51 -0
- data/lib/hecks/runtime/identity.rb +156 -0
- data/lib/hecks/runtime/instance.rb +175 -0
- data/lib/hecks/runtime/interpreting.rb +90 -0
- data/lib/hecks/runtime/loader.rb +184 -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 +286 -0
- data/lib/hecks/runtime/reaction_invocation.rb +253 -0
- data/lib/hecks/runtime/read_model_interpreter.rb +341 -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 +126 -0
- data/lib/hecks/runtime/registry/saga_persistence.rb +142 -0
- data/lib/hecks/runtime/registry/verification.rb +246 -0
- data/lib/hecks/runtime/registry.rb +279 -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 +503 -0
- data/lib/hecks/runtime/saga_pending_dispatch.rb +45 -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 +130 -0
- data/lib/hecks/runtime/value/coercion.rb +565 -0
- data/lib/hecks/runtime/value/invariant_violation.rb +5 -0
- data/lib/hecks/runtime/value.rb +125 -0
- data/lib/hecks/runtime.rb +107 -0
- data/lib/hecks/storehouse.rb +632 -0
- data/lib/hecks/version.rb +16 -0
- data/lib/hecks/vocabulary.rb +218 -0
- data/lib/hecks.rb +123 -6
- data/lib/rubocop/cop/hecks/fallback_hash_lookup.rb +90 -0
- data/lib/rubocop/cop/hecks/sequential_hash_rename_in_loop.rb +128 -0
- data/lib/rubocop/cop/hecks/thread_shared_ivar_mutation.rb +160 -0
- metadata +412 -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,420 @@
|
|
|
1
|
+
|
|
2
|
+
Hecks.bluebook "Expression" do
|
|
3
|
+
vision "The subset of regular Ruby a predicate is allowed to be — small enough that every target can evaluate it, and carried as canonical text so no two readers can disagree about what was said."
|
|
4
|
+
generic
|
|
5
|
+
|
|
6
|
+
aggregate "Operator" do
|
|
7
|
+
description "One admitted operation — its symbol, its precedence, and how it reads in every target that must evaluate it."
|
|
8
|
+
|
|
9
|
+
# WHAT IS NOT HERE, on purpose. The outer grammar
|
|
10
|
+
# has two rules that are not operators: parenthesization (a structural
|
|
11
|
+
# strip-and-recurse, no symbol of its own) and the bare-leaf fallback
|
|
12
|
+
# (whatever matches nothing else falls through to the inner grammar).
|
|
13
|
+
# Its inner grammar has three more: integer/float/string/bool/nil/
|
|
14
|
+
# array literals and the dotted-lookup fallback are TERMINAL
|
|
15
|
+
# productions — they recognize text, they do not combine operands,
|
|
16
|
+
# and they have nothing meaningful to render per target (a literal's
|
|
17
|
+
# spelling does not differ between targets the way an operation's
|
|
18
|
+
# might — `rust/src/kernel/expr.rs`'s own `Expr::Array` is a LEAF
|
|
19
|
+
# there too, for the identical reason, not routed through
|
|
20
|
+
# `OperatorCategory`).
|
|
21
|
+
# Forcing them into this shape would stretch `renderings` and the
|
|
22
|
+
# Arity invariant past what they mean. They stay declared only in
|
|
23
|
+
# prose — named here rather than silently left out.
|
|
24
|
+
identified_by :symbol
|
|
25
|
+
|
|
26
|
+
attribute :symbol, OperatorSymbol
|
|
27
|
+
attribute :category, Category
|
|
28
|
+
attribute :precedence, Precedence
|
|
29
|
+
attribute :arity, Arity
|
|
30
|
+
attribute :grammar, Grammar
|
|
31
|
+
attribute :strategy, Strategy
|
|
32
|
+
attribute :position, Position
|
|
33
|
+
attribute :renderings, list_of(Rendering)
|
|
34
|
+
|
|
35
|
+
lifecycle :status, default: "proposed" do
|
|
36
|
+
transition "Admit" => "admitted", from: "proposed"
|
|
37
|
+
transition "Retire" => "retired", from: "admitted"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
value_object "OperatorSymbol" do
|
|
41
|
+
attribute :value, String
|
|
42
|
+
invariant("an operator is written as something") { !value.to_s.empty? }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
value_object "Category" do
|
|
46
|
+
attribute :value, String
|
|
47
|
+
invariant("an operator belongs to a category") { !value.to_s.empty? }
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
value_object "Precedence" do
|
|
51
|
+
attribute :value, Integer
|
|
52
|
+
invariant("precedence binds at some level") { value > 0 }
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
value_object "Arity" do
|
|
56
|
+
attribute :value, Integer
|
|
57
|
+
# WRITTEN ACROSS LINES ON PURPOSE, and this is the only predicate in the
|
|
58
|
+
# corpus that is. A CONTINUATION line is where extraction used to break:
|
|
59
|
+
# a naive line join reads `value > 0 && && value <= 3` — a different
|
|
60
|
+
# canonical form for the same source, waiting for the first multi-line
|
|
61
|
+
# rule anyone wrote. Every predicate here was kept on one line to dodge
|
|
62
|
+
# that. The join is continuation-aware now, so this case holds the fix:
|
|
63
|
+
# if it regresses, the canonical text of THIS invariant changes and the
|
|
64
|
+
# golden IR goes red.
|
|
65
|
+
invariant("an operator takes one, two or three operands") do
|
|
66
|
+
value > 0 &&
|
|
67
|
+
value <= 3
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# OUTER checks a leaf against `.include?`/comparators/`!` before falling
|
|
72
|
+
# through to INNER's arithmetic/dotted-lookup grammar — two stacked
|
|
73
|
+
# grammars. Which one an operator belongs
|
|
74
|
+
# to is not derivable from its symbol alone (`+` reads like it could be
|
|
75
|
+
# either), so it is its own column rather than inferred.
|
|
76
|
+
value_object "Grammar" do
|
|
77
|
+
attribute :value, String
|
|
78
|
+
invariant("an operator belongs to one of the two stacked grammars") { !value.to_s.empty? }
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# HOW the check recognizes this operator's text, not WHERE it binds
|
|
82
|
+
# (that's precedence) or WHEN it's tried (that's position). Four shapes
|
|
83
|
+
# cover every admitted operator: split at a top-level occurrence
|
|
84
|
+
# (`||`, comparators), strip a leading marker (`!`), strip a trailing
|
|
85
|
+
# suffix (`.empty?`), or match a call-with-argument pattern
|
|
86
|
+
# (`.include?(needle)`).
|
|
87
|
+
value_object "Strategy" do
|
|
88
|
+
attribute :value, String
|
|
89
|
+
invariant("an operator names how its check recognizes it") { !value.to_s.empty? }
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# THE WITHIN-GRAMMAR CHECK ORDER — what precedence alone cannot say,
|
|
93
|
+
# since the six comparators all share one precedence tier and something
|
|
94
|
+
# still has to break the tie (grammar.md: `>=` before `<=` before `<`
|
|
95
|
+
# before `>` before `==` before `!=`, so `<` splitting does not fire
|
|
96
|
+
# inside `>=`). Scoped per `grammar`, mirroring Normalisation's own
|
|
97
|
+
# Position column below — each grammar starts its own count at 1.
|
|
98
|
+
value_object "Position" do
|
|
99
|
+
attribute :value, Integer
|
|
100
|
+
invariant("an operator sits somewhere in its grammar's check order") { value > 0 }
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
value_object "Target" do
|
|
104
|
+
attribute :value, String
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
value_object "Form" do
|
|
108
|
+
attribute :value, String
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
value_object "Rendering" do
|
|
112
|
+
attribute :target, String
|
|
113
|
+
attribute :form, String
|
|
114
|
+
|
|
115
|
+
invariant("a rendering must name its target") { !target.to_s.empty? }
|
|
116
|
+
invariant("a rendering must have a form") { !form.to_s.empty? }
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
command "Propose" do
|
|
120
|
+
role "Language designer"
|
|
121
|
+
goal "Put an operation forward for the sublanguage"
|
|
122
|
+
|
|
123
|
+
attribute :symbol, OperatorSymbol
|
|
124
|
+
attribute :category, Category
|
|
125
|
+
attribute :precedence, Precedence
|
|
126
|
+
attribute :arity, Arity
|
|
127
|
+
attribute :grammar, Grammar
|
|
128
|
+
attribute :strategy, Strategy
|
|
129
|
+
attribute :position, Position
|
|
130
|
+
|
|
131
|
+
given("an operator belongs to the outer or the inner grammar") do
|
|
132
|
+
grammar.value == "outer" || grammar.value == "inner"
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
given("an operator's check strategy is one the parser actually has") { strategy.value == "top_level_split" || strategy.value == "prefix_match" || strategy.value == "suffix_match" || strategy.value == "call_pattern_match" || strategy.value == "block_pattern_match" }
|
|
136
|
+
|
|
137
|
+
emits "OperatorProposed"
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
command "Render" do
|
|
141
|
+
role "Language designer"
|
|
142
|
+
goal "Declare how this operator reads in one target"
|
|
143
|
+
|
|
144
|
+
reference_to Operator
|
|
145
|
+
attribute :target, Target
|
|
146
|
+
attribute :form, Form
|
|
147
|
+
|
|
148
|
+
given("a retired operator takes no new renderings") { status != "retired" }
|
|
149
|
+
|
|
150
|
+
sets :renderings, append: { target: :target, form: :form }
|
|
151
|
+
|
|
152
|
+
emits "OperatorRendered"
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
command "Admit" do
|
|
156
|
+
role "Language designer"
|
|
157
|
+
goal "Accept the operation into the sublanguage"
|
|
158
|
+
|
|
159
|
+
reference_to Operator
|
|
160
|
+
|
|
161
|
+
given("an operator must read in every target before it is admitted") { renderings.size >= 1 }
|
|
162
|
+
|
|
163
|
+
emits "OperatorAdmitted"
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
command "Retire" do
|
|
167
|
+
role "Language designer"
|
|
168
|
+
goal "Remove an operation from the sublanguage"
|
|
169
|
+
|
|
170
|
+
reference_to Operator
|
|
171
|
+
|
|
172
|
+
emits "OperatorRetired"
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
aggregate "Normalisation" do
|
|
177
|
+
description "One rule that turns written source into canonical text — its boundary condition, where it sits in the order, and how it reads in every target that must apply it."
|
|
178
|
+
|
|
179
|
+
identified_by :name
|
|
180
|
+
|
|
181
|
+
attribute :name, RuleName
|
|
182
|
+
attribute :strategy, Strategy
|
|
183
|
+
attribute :source_token, SourceToken
|
|
184
|
+
attribute :replacement, Replacement
|
|
185
|
+
attribute :boundary, Boundary
|
|
186
|
+
attribute :position, Position
|
|
187
|
+
attribute :readings, list_of(Reading)
|
|
188
|
+
|
|
189
|
+
lifecycle :status, default: "proposed" do
|
|
190
|
+
transition "Admit" => "admitted", from: "proposed"
|
|
191
|
+
transition "Retire" => "retired", from: "admitted"
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
value_object "RuleName" do
|
|
195
|
+
attribute :value, String
|
|
196
|
+
invariant("a rule is named") { !value.to_s.empty? }
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
value_object "Strategy" do
|
|
200
|
+
attribute :value, String
|
|
201
|
+
invariant("a rule names a strategy") { !value.to_s.empty? }
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
value_object "SourceToken" do
|
|
205
|
+
attribute :value, String
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
value_object "Replacement" do
|
|
209
|
+
attribute :value, String
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
value_object "Boundary" do
|
|
213
|
+
attribute :value, String, default: "none"
|
|
214
|
+
invariant("a boundary condition is named") { !value.to_s.empty? }
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
value_object "Position" do
|
|
218
|
+
attribute :value, Integer
|
|
219
|
+
invariant("a rule sits somewhere in the order") { value > 0 }
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
value_object "Target" do
|
|
223
|
+
attribute :value, String
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
value_object "Form" do
|
|
227
|
+
attribute :value, String
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
value_object "Rule" do
|
|
231
|
+
attribute :strategy, String
|
|
232
|
+
attribute :source_token, String
|
|
233
|
+
attribute :replacement, String
|
|
234
|
+
attribute :boundary, String
|
|
235
|
+
attribute :position, Integer
|
|
236
|
+
|
|
237
|
+
member strategy: "collapse_whitespace", source_token: "", replacement: "", boundary: "none", position: 1
|
|
238
|
+
member strategy: "replace", source_token: ".length", replacement: ".size", boundary: "word", position: 2
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
value_object "Reading" do
|
|
242
|
+
attribute :target, String
|
|
243
|
+
attribute :form, String
|
|
244
|
+
|
|
245
|
+
invariant("a reading must name its target") { !target.to_s.empty? }
|
|
246
|
+
invariant("a reading must have a form") { !form.to_s.empty? }
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
command "Propose" do
|
|
250
|
+
role "Language designer"
|
|
251
|
+
goal "Put a normalisation rule forward for the canonical form"
|
|
252
|
+
|
|
253
|
+
attribute :name, RuleName
|
|
254
|
+
attribute :strategy, Strategy
|
|
255
|
+
attribute :source_token, SourceToken
|
|
256
|
+
attribute :replacement, Replacement
|
|
257
|
+
attribute :boundary, Boundary
|
|
258
|
+
attribute :position, Position, optional: true
|
|
259
|
+
|
|
260
|
+
given("a rule must name a linked strategy") do
|
|
261
|
+
strategy.value == "collapse_whitespace" || strategy.value == "replace"
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
given("a rule must state its boundary") { boundary.value == "none" || boundary.value == "word" }
|
|
265
|
+
|
|
266
|
+
emits "NormalisationProposed"
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
command "Read" do
|
|
270
|
+
role "Language designer"
|
|
271
|
+
goal "Declare how this rule reads in one target"
|
|
272
|
+
|
|
273
|
+
reference_to Normalisation
|
|
274
|
+
attribute :target, Target
|
|
275
|
+
attribute :form, Form
|
|
276
|
+
|
|
277
|
+
given("a retired rule takes no new readings") { status != "retired" }
|
|
278
|
+
|
|
279
|
+
sets :readings, append: { target: :target, form: :form }
|
|
280
|
+
|
|
281
|
+
emits "NormalisationRead"
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
command "Admit" do
|
|
285
|
+
role "Language designer"
|
|
286
|
+
goal "Accept the rule into the canonical form"
|
|
287
|
+
|
|
288
|
+
reference_to Normalisation
|
|
289
|
+
|
|
290
|
+
given("a rule must read in every target before it is admitted") { readings.size >= 1 }
|
|
291
|
+
|
|
292
|
+
emits "NormalisationAdmitted"
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
command "Retire" do
|
|
296
|
+
role "Language designer"
|
|
297
|
+
goal "Remove a rule from the canonical form"
|
|
298
|
+
|
|
299
|
+
reference_to Normalisation
|
|
300
|
+
|
|
301
|
+
emits "NormalisationRetired"
|
|
302
|
+
end
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
aggregate "Expression" do
|
|
306
|
+
description "One predicate extracted from regular Ruby — the source as written, the canonical text the evaluator runs, and the subject it reads against."
|
|
307
|
+
|
|
308
|
+
identified_by :canonical
|
|
309
|
+
|
|
310
|
+
attribute :description, Description
|
|
311
|
+
attribute :source, Source
|
|
312
|
+
attribute :canonical, Canonical
|
|
313
|
+
attribute :subject, Subject
|
|
314
|
+
attribute :role, ExpressionRole
|
|
315
|
+
attribute :references, list_of(Reference)
|
|
316
|
+
|
|
317
|
+
lifecycle :status, default: "extracted" do
|
|
318
|
+
transition "Admit" => "admitted", from: "extracted"
|
|
319
|
+
transition "Reject" => "rejected", from: "extracted"
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
value_object "Description" do
|
|
323
|
+
attribute :value, String
|
|
324
|
+
invariant("a predicate says what it is for") { !value.to_s.empty? }
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
value_object "Source" do
|
|
328
|
+
attribute :value, String
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
value_object "Canonical" do
|
|
332
|
+
attribute :value, String
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
value_object "Subject" do
|
|
336
|
+
attribute :value, String
|
|
337
|
+
invariant("a predicate reads against something") { !value.to_s.empty? }
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
value_object "ExpressionRole" do
|
|
341
|
+
attribute :value, String, default: "given"
|
|
342
|
+
invariant("a predicate plays a role") { !value.to_s.empty? }
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
value_object "ReferenceName" do
|
|
346
|
+
attribute :value, String
|
|
347
|
+
invariant("a reference must be named") { !value.to_s.empty? }
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
value_object "Kind" do
|
|
351
|
+
attribute :value, String
|
|
352
|
+
invariant("a reference is either an attribute or an argument") do
|
|
353
|
+
value.to_s == "attribute" || value.to_s == "argument"
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
value_object "Reason" do
|
|
358
|
+
attribute :value, String
|
|
359
|
+
invariant("a refusal gives a reason") { !value.to_s.empty? }
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
value_object "Reference" do
|
|
363
|
+
attribute :name, String
|
|
364
|
+
attribute :kind, String
|
|
365
|
+
|
|
366
|
+
invariant("a reference must be named") { !name.to_s.empty? }
|
|
367
|
+
invariant("a reference is either an attribute or an argument") do
|
|
368
|
+
kind.to_s == "attribute" || kind.to_s == "argument"
|
|
369
|
+
end
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
command "Extract" do
|
|
373
|
+
role "System"
|
|
374
|
+
goal "Lower a real Ruby predicate into the sublanguage"
|
|
375
|
+
|
|
376
|
+
attribute :description, Description, optional: true
|
|
377
|
+
attribute :source, Source
|
|
378
|
+
attribute :canonical, Canonical
|
|
379
|
+
attribute :subject, Subject
|
|
380
|
+
|
|
381
|
+
emits "ExpressionExtracted"
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
command "Note" do
|
|
385
|
+
role "System"
|
|
386
|
+
goal "Record a name the expression reads"
|
|
387
|
+
|
|
388
|
+
reference_to Expression
|
|
389
|
+
attribute :name, ReferenceName
|
|
390
|
+
attribute :kind, Kind
|
|
391
|
+
|
|
392
|
+
sets :references, append: { name: :name, kind: :kind }
|
|
393
|
+
|
|
394
|
+
emits "ReferenceNoted"
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
command "Admit" do
|
|
398
|
+
role "System"
|
|
399
|
+
goal "Accept the expression as evaluable by every target"
|
|
400
|
+
|
|
401
|
+
reference_to Expression
|
|
402
|
+
|
|
403
|
+
given("an expression must have canonical text") { !canonical.value.to_s.empty? }
|
|
404
|
+
given("an expression must know its subject") { !subject.value.to_s.empty? }
|
|
405
|
+
|
|
406
|
+
emits "ExpressionAdmitted"
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
command "Reject" do
|
|
410
|
+
role "System"
|
|
411
|
+
goal "Refuse a predicate that leaves the sublanguage"
|
|
412
|
+
|
|
413
|
+
reference_to Expression
|
|
414
|
+
attribute :reason, Reason
|
|
415
|
+
|
|
416
|
+
emits "ExpressionRejected"
|
|
417
|
+
end
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
end
|