hecks 3.13.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/examples/pizzas/adapters/fake_processor.rb +34 -0
- data/examples/pizzas/adapters/payment_signature.rb +66 -0
- data/examples/pizzas/adapters/payment_webhook.rb +87 -0
- data/examples/pizzas/bluebook/pizzas.behaviors +33 -0
- data/examples/pizzas/bluebook/pizzas.bluebook +4 -4
- data/examples/pizzas/bluebook/pizzas.hecksagon +5 -3
- data/examples/pizzas/config.ru +22 -0
- data/lib/hecks/adapters/driven/prism.rb +0 -2
- data/lib/hecks/adapters/driven.rb +0 -2
- data/lib/hecks/adapters/driving/json.rb +1 -7
- data/lib/hecks/bluebook/dsl/attribute_collector.rb +15 -5
- data/lib/hecks/bluebook/dsl/bootstrap_table.rb +2 -2
- data/lib/hecks/bluebook/dsl/derivation_words.rb +58 -0
- data/lib/hecks/bluebook/dsl/translation_builder.rb +6 -37
- data/lib/hecks/bluebook/expression/ast_json.rb +0 -9
- data/lib/hecks/bluebook/hecksagon.rb +1 -1
- data/lib/hecks/bluebook/meta_validator/translation_judge/rules.rb +7 -10
- data/lib/hecks/bluebook/meta_validator/translation_judge.rb +4 -8
- data/lib/hecks/bluebook/meta_validator.rb +0 -11
- data/lib/hecks/bluebook/named_pattern.rb +33 -0
- data/lib/hecks/bluebook/translation.rb +18 -10
- data/lib/hecks/bluebook/translation_expression/evaluator.rb +63 -0
- data/lib/hecks/bluebook/translation_expression/parser.rb +127 -0
- data/lib/hecks/bluebook/translation_expression.rb +39 -0
- data/lib/hecks/bluebook/translation_plan.rb +70 -0
- data/lib/hecks/bluebook.rb +3 -0
- data/lib/hecks/chapters.rb +3 -3
- data/lib/hecks/cli/domain_stub.rb +1 -1
- data/lib/hecks/cli/interview_aggregate.rb +4 -4
- data/lib/hecks/composer/adapters/claude_composer.adapter +3 -0
- data/lib/hecks/composer/adapters/claude_composer.rb +83 -0
- data/lib/hecks/composer/adapters/fake_agent.adapter +3 -0
- data/lib/hecks/composer/adapters/fake_agent.rb +55 -0
- data/lib/hecks/composer/adapters/jev.adapter +3 -0
- data/lib/hecks/composer/adapters/jev.rb +66 -0
- data/lib/hecks/composer/agent.rb +113 -0
- data/lib/hecks/composer/assistant.rb +110 -0
- data/lib/hecks/composer/behavior_run.rb +53 -0
- data/lib/hecks/composer/bluebook/composer.bluebook +178 -0
- data/lib/hecks/composer/bluebook/composer.hecksagon +16 -0
- data/lib/hecks/composer/board.rb +65 -0
- data/lib/hecks/composer/board_edit/command_text.rb +39 -0
- data/lib/hecks/composer/board_edit/source.rb +84 -0
- data/lib/hecks/composer/board_edit.rb +144 -0
- data/lib/hecks/composer/check.rb +89 -0
- data/lib/hecks/composer/domains.rb +81 -0
- data/lib/hecks/composer/jobs.rb +134 -0
- data/lib/hecks/composer/layout.rb +37 -0
- data/lib/hecks/composer/live.rb +150 -0
- data/lib/hecks/composer/outline.rb +48 -0
- data/lib/hecks/composer/page.html +989 -0
- data/lib/hecks/composer/panels.rb +142 -0
- data/lib/hecks/composer/parse.rb +83 -0
- data/lib/hecks/composer/plain.rb +28 -0
- data/lib/hecks/composer/ports/composer_agent.port +7 -0
- data/lib/hecks/composer/session.rb +141 -0
- data/lib/hecks/composer/toolbox.rb +166 -0
- data/lib/hecks/composer/web.rb +156 -0
- data/lib/hecks/composer/workbench.rb +51 -0
- data/lib/hecks/composer/workspace.rb +81 -0
- data/lib/hecks/composer.rb +17 -0
- data/lib/hecks/corpus/adapters.rb +22 -0
- data/lib/hecks/corpus/rust.rb +1 -1
- data/lib/hecks/corpus/worlds.rb +19 -0
- data/lib/hecks/corpus.rb +5 -0
- data/lib/hecks/deploy/bluebook/deploy.bluebook +34 -34
- data/lib/hecks/forms/app/commands.rb +2 -3
- data/lib/hecks/forms/app/queries.rb +2 -3
- data/lib/hecks/forms/app/records.rb +17 -5
- data/lib/hecks/forms/command_form_renderer.rb +42 -16
- data/lib/hecks/forms/field_controls.rb +2 -2
- data/lib/hecks/forms/field_renderer.rb +1 -1
- data/lib/hecks/forms/field_shape.rb +36 -17
- data/lib/hecks/forms/index_renderer.rb +2 -1
- data/lib/hecks/forms/page.rb +1 -1
- data/lib/hecks/forms/params.rb +0 -13
- data/lib/hecks/forms/query_form_renderer.rb +7 -6
- data/lib/hecks/forms/record_renderer.rb +11 -7
- data/lib/hecks/forms/rule_words.rb +100 -0
- data/lib/hecks/forms/value_object_shape.rb +2 -1
- data/lib/hecks/framework/bluebook/change.bluebook +2 -2
- data/lib/hecks/fuzzing/bounded_exhaustive_expressions.rb +0 -3
- data/lib/hecks/fuzzing/domain_generator/block_rendering.rb +1 -1
- data/lib/hecks/fuzzing/isolated_boot/worlds.rb +3 -6
- data/lib/hecks/fuzzing/replay/filters.rb +2 -6
- data/lib/hecks/gate/stages.yml +25 -0
- data/lib/hecks/grammar/evolve/seeds.rb +0 -6
- data/lib/hecks/grammar/evolve.rb +0 -3
- data/lib/hecks/grammar/translation.bluebook +1 -1
- data/lib/hecks/hecks/adapters/codebase/composing.rb +56 -0
- data/lib/hecks/hecks/adapters/codebase/source_tree.rb +3 -1
- data/lib/hecks/hecks/adapters/journal_store/changes.rb +0 -26
- data/lib/hecks/hecks/adapters/journal_store/examination.rb +2 -23
- data/lib/hecks/hecks/adapters/journal_store/readings.rb +3 -11
- data/lib/hecks/hecks/adapters/journal_store.rb +0 -11
- data/lib/hecks/hecks/adapters/rehearsal/inquiry.rb +4 -11
- data/lib/hecks/hecks/adapters/rehearsal/memory_store.rb +0 -9
- data/lib/hecks/hecks/adapters/rehearsal/postgres_reading.rb +0 -4
- data/lib/hecks/hecks/codebase.behaviors +6 -0
- data/lib/hecks/hecks/codebase.bluebook +58 -37
- data/lib/hecks/hecks/composer.behaviors +68 -0
- data/lib/hecks/hecks/context_map.hecksagon +1 -1
- data/lib/hecks/hecks/custodian.behaviors +0 -6
- data/lib/hecks/hecks/custodian.bluebook +15 -92
- data/lib/hecks/hecks/hecks.bluebook +2 -2
- data/lib/hecks/hecks/hecks.hecksagon +2 -2
- data/lib/hecks/hecks/hecks.world +1 -1
- data/lib/hecks/hecks/rehearsal.bluebook +10 -16
- data/lib/hecks/hecks/tooling.bluebook +22 -22
- data/lib/hecks/kernel_capabilities/templates.rb +4 -4
- data/lib/hecks/kernel_capabilities.rb +1 -1
- data/lib/hecks/language/bluebook/aggregate.bluebook +1 -0
- data/lib/hecks/language/bluebook/command.bluebook +1 -0
- data/lib/hecks/language/bluebook/entity.bluebook +1 -0
- data/lib/hecks/language/bluebook/query.bluebook +1 -0
- data/lib/hecks/language/bluebook/shape.bluebook +8 -7
- data/lib/hecks/language/bluebook/vocabulary.bluebook +2 -3
- data/lib/hecks/language/hecksagon/port_operation.bluebook +1 -0
- data/lib/hecks/language/translation/translation_aggregate.bluebook +21 -24
- data/lib/hecks/ports/access_control.rb +2 -2
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +3 -41
- data/lib/hecks/ports/persistence/plugins/era/lineage/coverage.rb +7 -7
- data/lib/hecks/ports/persistence/plugins/era/lineage/rewrite.rb +25 -2
- data/lib/hecks/ports/persistence/plugins/era/lineage/rules.rb +4 -4
- data/lib/hecks/ports/persistence/plugins/era/lineage.rb +17 -25
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/base_sql.rb +0 -12
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/domain_rename.rb +1 -1
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/era_store.rb +2 -22
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/provisioning.rb +0 -1
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage.rb +9 -3
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/minter.rb +3 -29
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/refusals.rb +2 -26
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_two.rb +6 -33
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/unfed_report.rb +3 -3
- data/lib/hecks/ports/persistence/plugins/era/translation/audit.rb +2 -4
- data/lib/hecks/ports/persistence/plugins/era/translation/expression_sql.rb +52 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/rule_compiler.rb +23 -29
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold.rb +1 -1
- data/lib/hecks/ports/persistence/plugins/era/translation.rb +0 -1
- data/lib/hecks/ports/persistence/plugins/era.rb +3 -6
- data/lib/hecks/ports.rb +0 -1
- data/lib/hecks/projection_files.rb +3 -1
- data/lib/hecks/projections/deploy/templates/lambda/nat_comment_oauth.tmpl +1 -1
- data/lib/hecks/projections/glossary/entries.rb +10 -4
- data/lib/hecks/projections/glossary/groups.rb +42 -0
- data/lib/hecks/projections/glossary/html/page.rb +7 -2
- data/lib/hecks/projections/glossary/html/parser.rb +1 -1
- data/lib/hecks/projections/glossary/html/sections.rb +31 -11
- data/lib/hecks/projections/glossary/html.rb +1 -2
- data/lib/hecks/projections/glossary/markdown.rb +31 -28
- data/lib/hecks/projections/glossary/mermaid.rb +3 -0
- data/lib/hecks/projections/glossary/page.css +143 -153
- data/lib/hecks/projections/glossary/page.js +63 -3
- data/lib/hecks/projections/glossary/sentences/actions.rb +88 -0
- data/lib/hecks/projections/glossary/sentences/paths.rb +77 -0
- data/lib/hecks/projections/glossary/sentences/queries.rb +90 -0
- data/lib/hecks/projections/glossary/sentences/value_objects.rb +32 -5
- data/lib/hecks/projections/glossary/sentences.rb +13 -3
- data/lib/hecks/projections/glossary/slugs.rb +4 -1
- data/lib/hecks/projections/glossary.rb +2 -1
- data/lib/hecks/projections/plain_english.rb +97 -0
- data/lib/hecks/projections/rust_vocabulary/arguments.rb +2 -2
- data/lib/hecks/projections/rust_vocabulary/enum_body.rb +20 -25
- data/lib/hecks/projections/rust_vocabulary/tests.rb +2 -2
- data/lib/hecks/projections/rust_vocabulary.rb +14 -6
- data/lib/hecks/projections/site/cms_editor/color.rb +0 -6
- data/lib/hecks/projections/statements/actions.rb +99 -0
- data/lib/hecks/projections/statements/relationships.rb +86 -0
- data/lib/hecks/projections/statements.rb +15 -24
- data/lib/hecks/projector/exporter/adapters.rb +112 -0
- data/lib/hecks/projector/exporter/translations.rb +18 -35
- data/lib/hecks/projector/exporter/worlds.rb +103 -0
- data/lib/hecks/projector/exporter.rb +5 -1
- data/lib/hecks/quality_control/adapters/agent.rb +6 -7
- data/lib/hecks/quality_control/adapters/agent_profile.rb +16 -114
- data/lib/hecks/quality_control/cli/qa_mine_combinations.rb +1 -1
- data/lib/hecks/quality_control/quality_control.bluebook +51 -51
- data/lib/hecks/runtime/loader/boot_steps.rb +0 -20
- data/lib/hecks/runtime/outbox.rb +2 -9
- data/lib/hecks/runtime/port_operation_interpreter.rb +1 -9
- data/lib/hecks/runtime/remote_dispatcher.rb +2 -2
- data/lib/hecks/runtime/value.rb +13 -0
- data/lib/hecks/rust_build/project_rust/target_ir.rb +23 -4
- data/lib/hecks/rust_build/wasm.rb +0 -12
- data/lib/hecks/rust_build/write_if_changed.rb +12 -12
- data/lib/hecks/rust_format.rb +77 -0
- data/lib/hecks/site/bluebook/site.bluebook +5 -5
- data/lib/hecks/sme/bluebook/sme.bluebook +12 -12
- data/lib/hecks/tickets/bluebook/tickets.bluebook +3 -3
- data/lib/hecks/tools/fuzz_sweep/findings.rb +3 -9
- data/lib/hecks/tools/fuzz_sweep.rb +1 -3
- data/lib/hecks/tools/translation_audit/verdicts.rb +3 -28
- data/lib/hecks/tools/translation_audit.rb +8 -10
- data/lib/hecks/tools/translation_scaffold/reporting.rb +1 -1
- data/lib/hecks/version.rb +1 -1
- data/lib/hecks/vocabulary.rb +2 -1
- data/lib/hecks.rb +3 -0
- data/prebuilt/{58208399bada10b0db99928c48e38789288fc58f7b71a72b21bfa386680e32ed.marshal → 02c09c73b272c1fb5a9ae6d87bb5e5e529208e00f6b4b597dc2c0fd70a9c0964.marshal} +0 -0
- data/prebuilt/{2b59737fbdbd5f44edda0fddce2611f45d76087b3a7c782d1f1a17ea58c77948.marshal → bb84a835cf6a15136bad5ca03aa5bf93a5b92f5f72444618d3ef2412b987fb32.marshal} +0 -0
- data/prebuilt/verdicts-f1f10da14c8e8f01b4c9b7e3e2d74be8cd2bf4676364ed17fa16975d2a076d75.json +1 -0
- data/rust/Cargo.toml +40 -0
- data/rust/build/Cargo.toml +36 -0
- data/rust/build/clippy.toml +4 -0
- data/rust/build/src/adapters_pass.rs +196 -0
- data/rust/build/src/binding_pass.rs +54 -13
- data/rust/build/src/build_artifact.rs +23 -5
- data/rust/build/src/cargo_sync.rs +69 -26
- data/rust/build/src/lineage_pass.rs +101 -87
- data/rust/build/src/main.rs +11 -2
- data/rust/build/src/pipeline.rs +80 -19
- data/rust/build/src/reserved_names.rs +6 -50
- data/rust/build/src/resolve.rs +82 -35
- data/rust/build/src/rustfmt.rs +100 -0
- data/rust/build/src/seams_pass.rs +85 -16
- data/rust/build/src/subprocess.rs +30 -6
- data/rust/build/src/tmp.rs +5 -2
- data/rust/build/src/translation_pass.rs +72 -22
- data/rust/build/src/world_pass.rs +109 -0
- data/rust/clippy.toml +4 -0
- data/rust/codegen/Cargo.toml +36 -0
- data/rust/codegen/clippy.toml +4 -0
- data/rust/codegen/src/asks.rs +40 -14
- data/rust/codegen/src/attr.rs +2 -2
- data/rust/codegen/src/bridging.rs +676 -117
- data/rust/codegen/src/commands.rs +979 -373
- data/rust/codegen/src/constraints.rs +88 -25
- data/rust/codegen/src/dependency_planning.rs +128 -34
- data/rust/codegen/src/domain_generator.rs +300 -170
- data/rust/codegen/src/exemplar.rs +87 -32
- data/rust/codegen/src/expr_emitter.rs +54 -6
- data/rust/codegen/src/fielded.rs +193 -41
- data/rust/codegen/src/hecks_naming.rs +124 -16
- data/rust/codegen/src/hecks_naming_tests.rs +81 -0
- data/rust/codegen/src/json.rs +80 -44
- data/rust/codegen/src/json_codec.rs +585 -149
- data/rust/codegen/src/literal.rs +104 -138
- data/rust/codegen/src/main.rs +145 -52
- data/rust/codegen/src/manifest.rs +76 -14
- data/rust/codegen/src/mutations.rs +1212 -239
- data/rust/codegen/src/naming.rs +111 -60
- data/rust/codegen/src/optional_pass.rs +90 -28
- data/rust/codegen/src/ports.rs +5 -4
- data/rust/codegen/src/prelude.rs +139 -49
- data/rust/codegen/src/queries.rs +601 -226
- data/rust/codegen/src/reactions.rs +268 -74
- data/rust/codegen/src/read_models.rs +606 -205
- data/rust/codegen/src/reference_specs.rs +16 -3
- data/rust/codegen/src/registry.rs +128 -79
- data/rust/codegen/src/reserved_names.rs +6 -50
- data/rust/codegen/src/shared.rs +71 -22
- data/rust/codegen/src/sidecars.rs +15 -5
- data/rust/codegen/src/skip_reason.rs +8 -2
- data/rust/codegen/src/types.rs +306 -108
- data/rust/host/Cargo.lock +1 -0
- data/rust/host/Cargo.toml +40 -4
- data/rust/host/HECKS_RELEASE +1 -1
- data/rust/host/clippy.toml +4 -0
- data/rust/host/src/api.rs +698 -218
- data/rust/host/src/auth.rs +491 -214
- data/rust/host/src/b64.rs +91 -0
- data/rust/host/src/bin/expr_harness.rs +6 -2
- data/rust/host/src/bin/lineage_harness.rs +47 -11
- data/rust/host/src/bin/mint_harness.rs +70 -37
- data/rust/host/src/bin/validate_harness.rs +16 -8
- data/rust/host/src/boot.rs +144 -68
- data/rust/host/src/boundary_fuzz/api.rs +130 -32
- data/rust/host/src/boundary_fuzz/auth.rs +108 -23
- data/rust/host/src/boundary_fuzz/expr_json.rs +85 -11
- data/rust/host/src/boundary_fuzz/ir.rs +164 -12
- data/rust/host/src/boundary_fuzz/server.rs +283 -36
- data/rust/host/src/boundary_fuzz/web.rs +56 -8
- data/rust/host/src/checkout.rs +78 -32
- data/rust/host/src/clock.rs +8 -0
- data/rust/host/src/commerce_ir.rs +333 -95
- data/rust/host/src/crypto.rs +33 -0
- data/rust/host/src/dispatch.rs +990 -331
- data/rust/host/src/expr_json.rs +1021 -273
- data/rust/host/src/extension.rs +24 -4
- data/rust/host/src/field_hints.rs +11 -7
- data/rust/host/src/fuzz_support.rs +85 -13
- data/rust/host/src/host.rs +100 -0
- data/rust/host/src/http.rs +22 -0
- data/rust/host/src/ir.rs +326 -16
- data/rust/host/src/journal.rs +277 -176
- data/rust/host/src/lambda_client.rs +219 -53
- data/rust/host/src/lib.rs +16 -4
- data/rust/host/src/log.rs +62 -11
- data/rust/host/src/mint.rs +1153 -326
- data/rust/host/src/needs.rs +185 -44
- data/rust/host/src/payments/keystore.rs +197 -45
- data/rust/host/src/payments/roles.rs +191 -0
- data/rust/host/src/payments/tests.rs +1445 -275
- data/rust/host/src/payments.rs +409 -121
- data/rust/host/src/platform_signin/attack_tests.rs +5 -5
- data/rust/host/src/platform_signin/config.rs +11 -11
- data/rust/host/src/platform_signin/cookie.rs +2 -2
- data/rust/host/src/platform_signin/extension.rs +2 -1
- data/rust/host/src/platform_signin/handler.rs +9 -8
- data/rust/host/src/platform_signin/jti.rs +4 -2
- data/rust/host/src/platform_signin/jwks.rs +2 -1
- data/rust/host/src/platform_signin/jws.rs +2 -37
- data/rust/host/src/platform_signin/known_answer_tests.rs +5 -1
- data/rust/host/src/platform_signin/mode_tests.rs +5 -3
- data/rust/host/src/platform_signin/pages.rs +20 -20
- data/rust/host/src/platform_signin/session.rs +8 -1
- data/rust/host/src/platform_signin/settings.rs +6 -6
- data/rust/host/src/platform_signin/strict_json.rs +12 -9
- data/rust/host/src/platform_signin/verify.rs +41 -41
- data/rust/host/src/platform_signin/wiring_support.rs +13 -18
- data/rust/host/src/presentation.rs +207 -63
- data/rust/host/src/presentation_write.rs +502 -187
- data/rust/host/src/query_step.rs +69 -18
- data/rust/host/src/rate_limit.rs +541 -142
- data/rust/host/src/reference_transform.rs +77 -25
- data/rust/host/src/reference_validate.rs +443 -104
- data/rust/host/src/resend.rs +190 -55
- data/rust/host/src/secrets.rs +116 -21
- data/rust/host/src/server.rs +483 -104
- data/rust/host/src/storage_shape.rs +88 -21
- data/rust/host/src/test_pg.rs +17 -7
- data/rust/host/src/ui_schema.rs +495 -207
- data/rust/host/src/wasm_runner.rs +21 -6
- data/rust/host/src/web/commerce.rs +101 -23
- data/rust/host/src/web/newsletter/cooldown.rs +10 -3
- data/rust/host/src/web/newsletter/template.rs +26 -7
- data/rust/host/src/web/newsletter/tests.rs +112 -23
- data/rust/host/src/web/newsletter.rs +209 -59
- data/rust/host/src/web/newsletter_send.rs +251 -79
- data/rust/host/src/web/registration_receipt/tests.rs +16 -4
- data/rust/host/src/web/registration_receipt.rs +100 -24
- data/rust/host/src/web/registrations.rs +1384 -332
- data/rust/host/src/web/resend_webhook.rs +138 -80
- data/rust/host/src/web.rs +2416 -508
- data/rust/lsp/Cargo.toml +36 -0
- data/rust/lsp/clippy.toml +4 -0
- data/rust/lsp/src/json.rs +29 -22
- data/rust/lsp/src/main.rs +81 -31
- data/rust/lsp/src/outline.rs +23 -7
- data/rust/lsp/src/rpc.rs +17 -4
- data/rust/parser/Cargo.toml +36 -0
- data/rust/parser/clippy.toml +4 -0
- data/rust/parser/src/build/closed_sets.rs +6 -1
- data/rust/parser/src/build/identity.rs +4 -3
- data/rust/parser/src/build/mod.rs +1 -0
- data/rust/parser/src/build/named_pattern.rs +26 -0
- data/rust/parser/src/build/naming.rs +2 -80
- data/rust/parser/src/build/pattern_subset.rs +6 -8
- data/rust/parser/src/build/query_derive.rs +3 -1
- data/rust/parser/src/build/query_inference.rs +14 -5
- data/rust/parser/src/build/read_model.rs +4 -1
- data/rust/parser/src/build/references.rs +4 -3
- data/rust/parser/src/canonical.rs +34 -15
- data/rust/parser/src/emit.rs +187 -105
- data/rust/parser/src/expr/ast_json.rs +134 -42
- data/rust/parser/src/expr/evaluator.rs +27 -9
- data/rust/parser/src/expr/mod.rs +54 -13
- data/rust/parser/src/expr/resolver.rs +299 -92
- data/rust/parser/src/ir.rs +35 -3
- data/rust/parser/src/keywords.rs +7168 -510
- data/rust/parser/src/lex.rs +11 -25
- data/rust/parser/src/lib.rs +1 -0
- data/rust/parser/src/main.rs +65 -6
- data/rust/parser/src/parse/adapter.rs +157 -0
- data/rust/parser/src/parse/aggregate.rs +19 -10
- data/rust/parser/src/parse/chapter.rs +16 -17
- data/rust/parser/src/parse/command.rs +35 -16
- data/rust/parser/src/parse/domain_port.rs +4 -7
- data/rust/parser/src/parse/entity.rs +21 -11
- data/rust/parser/src/parse/hecksagon.rs +10 -4
- data/rust/parser/src/parse/lifecycle.rs +9 -5
- data/rust/parser/src/parse/mod.rs +43 -91
- data/rust/parser/src/parse/needs.rs +21 -12
- data/rust/parser/src/parse/policy.rs +2 -2
- data/rust/parser/src/parse/process_manager.rs +9 -11
- data/rust/parser/src/parse/query.rs +8 -4
- data/rust/parser/src/parse/read_model.rs +57 -16
- data/rust/parser/src/parse/value_object.rs +7 -2
- data/rust/parser/src/parse/world.rs +322 -0
- data/rust/parser/src/ruby_value.rs +7 -6
- data/rust/src/exemplar/json.rs +4 -4
- data/rust/src/exemplar/mutations.rs +18 -0
- data/rust/src/exemplar/read_models.rs +1 -10
- data/rust/src/kernel/attribute_shapes/composite.rs +54 -14
- data/rust/src/kernel/attribute_shapes/list.rs +2 -2
- data/rust/src/kernel/attribute_shapes/mod.rs +8 -8
- data/rust/src/kernel/attribute_shapes/scalar.rs +2 -2
- data/rust/src/kernel/cli.rs +229 -112
- data/rust/src/kernel/dispatch.rs +323 -115
- data/rust/src/kernel/dispatch_guard_tests.rs +327 -65
- data/rust/src/kernel/expr.rs +203 -86
- data/rust/src/kernel/expression_operators/arithmetic.rs +138 -25
- data/rust/src/kernel/expression_operators/comparison.rs +87 -2
- data/rust/src/kernel/expression_operators/enumeration.rs +106 -22
- data/rust/src/kernel/expression_operators/logical.rs +9 -3
- data/rust/src/kernel/expression_operators/membership.rs +3 -1
- data/rust/src/kernel/expression_operators/mod.rs +34 -21
- data/rust/src/kernel/expression_operators/pattern_match.rs +46 -11
- data/rust/src/kernel/expression_operators/positional.rs +84 -30
- data/rust/src/kernel/expression_operators/presence.rs +52 -13
- data/rust/src/kernel/expression_operators/sign_test.rs +3 -1
- data/rust/src/kernel/expression_operators/sized.rs +24 -8
- data/rust/src/kernel/expression_operators/text.rs +120 -27
- data/rust/src/kernel/expression_operators/to_string.rs +10 -4
- data/rust/src/kernel/json.rs +230 -148
- data/rust/src/kernel/mod.rs +46 -33
- data/rust/src/kernel/named_query.rs +63 -15
- data/rust/src/kernel/needs.rs +112 -25
- data/rust/src/kernel/orchestrate.rs +980 -581
- data/rust/src/kernel/orchestrate_guard_tests.rs +538 -140
- data/rust/src/kernel/pattern.rs +107 -34
- data/rust/src/kernel/query_comparators.rs +118 -41
- data/rust/src/kernel/query_ordering.rs +13 -5
- data/rust/src/kernel/read_model.rs +479 -181
- data/rust/src/kernel/reference_lookup.rs +122 -26
- data/rust/src/kernel/repository.rs +293 -66
- data/rust/src/kernel/routing.rs +58 -42
- data/rust/src/kernel/ruby_float.rs +139 -0
- data/rust/src/kernel/vocab/aggregate_dispatch_order.rs +57 -57
- data/rust/src/kernel/vocab/entity_dispatch_order.rs +54 -54
- data/rust/src/kernel/vocab/field_hint.rs +19 -25
- data/rust/src/kernel/vocab/mod.rs +6 -6
- data/rust/src/kernel/vocab/query_comparator.rs +23 -24
- data/rust/src/kernel/vocab/refusal_template.rs +501 -297
- data/rust/src/lib.rs +50 -0
- data/rust/src/main.rs +4 -1
- data/rust/web/Cargo.toml +36 -0
- data/rust/web/clippy.toml +4 -0
- metadata +85 -15
- data/examples/pizzas/bluebook/hecksagon/mock_stripe_payment_adapter.rb +0 -36
- data/lib/hecks/adapters/driven/google_authentication.adapter +0 -3
- data/lib/hecks/adapters/driven/google_authentication.rb +0 -99
- data/lib/hecks/adapters/driven/mock_stripe_adapter.adapter +0 -3
- data/lib/hecks/adapters/driven/mock_stripe_adapter.rb +0 -32
- data/lib/hecks/ports/authentication.port +0 -6
- data/lib/hecks/ports/authentication.rb +0 -67
- data/lib/hecks/ports/persistence/plugins/era/translation/approval_file.rb +0 -255
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/approval_digest.rb +0 -22
- data/prebuilt/verdicts-48318ca172edd21443b1ad02801c697fff100b746e828f09db987647641a5df2.json +0 -1
- data/rust/host/src/approval.rs +0 -652
|
@@ -14,7 +14,7 @@ Hecks.bluebook "Hecks" do
|
|
|
14
14
|
identified_by :version
|
|
15
15
|
|
|
16
16
|
value_object "FindingKey" do
|
|
17
|
-
attribute :value, String,
|
|
17
|
+
attribute :value, String, matches: :present
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
value_object "Version" do
|
|
@@ -94,7 +94,7 @@ Hecks.bluebook "Hecks" do
|
|
|
94
94
|
identified_by :digest
|
|
95
95
|
|
|
96
96
|
value_object "Digest" do
|
|
97
|
-
attribute :value, String,
|
|
97
|
+
attribute :value, String, matches: :present
|
|
98
98
|
|
|
99
99
|
invariant("a digest is present") { !value.to_s.empty? }
|
|
100
100
|
end
|
|
@@ -2,8 +2,8 @@ Hecks.hecksagon "Hecks" do
|
|
|
2
2
|
attaches "Governance"
|
|
3
3
|
|
|
4
4
|
# The chapters the gem carries: the language declared in itself (Paging comes with Bluebook),
|
|
5
|
-
# Expression, Tenancy, Deploy, Site, Tickets and QualityControl (the last three bring their own ports).
|
|
6
|
-
%w[Bluebook Hecksagon World Adapter Port Translation Expression Tenancy Deploy Site Tickets QualityControl]
|
|
5
|
+
# Expression, Tenancy, Deploy, Site, Tickets, Composer and QualityControl (the last three bring their own ports).
|
|
6
|
+
%w[Bluebook Hecksagon World Adapter Port Translation Expression Tenancy Deploy Site Tickets Composer QualityControl]
|
|
7
7
|
.each { |chapter| attaches chapter }
|
|
8
8
|
# Persistence is not bound here: hecks.world's `default_adapter` binds every aggregate, so
|
|
9
9
|
# environments/memory.world can swap the whole domain without a double bind.
|
data/lib/hecks/hecks/hecks.world
CHANGED
|
@@ -61,7 +61,7 @@ Hecks.world "Hecks" do
|
|
|
61
61
|
CodemodRun TestSuiteRun CorpusRun PublishingRun PromotionRun Release
|
|
62
62
|
SyntaxBootCache],
|
|
63
63
|
newcomer: %w[launch.init launch.interview operation.open_console],
|
|
64
|
-
chapters: %w[Deploy Governance Tenancy Site Tickets QualityControl],
|
|
64
|
+
chapters: %w[Deploy Governance Tenancy Site Tickets Composer QualityControl],
|
|
65
65
|
maintainer_chapters: %w[Bluebook Hecksagon World Adapter Port Translation Expression],
|
|
66
66
|
memory_commands: %w[console init interview],
|
|
67
67
|
legacy: %w[run docs narrate ir stores model_check smoke_test
|
|
@@ -35,7 +35,6 @@ Hecks.bluebook "Hecks" do
|
|
|
35
35
|
attribute :after, ShapeLabel, optional: true
|
|
36
36
|
attribute :minting, Minting, optional: true
|
|
37
37
|
attribute :edge_present, Switch, optional: true
|
|
38
|
-
attribute :edge_approved, Switch, optional: true
|
|
39
38
|
attribute :refused_rows, list_of(RefusedRow), optional: true
|
|
40
39
|
attribute :refusal_total, Count, optional: true
|
|
41
40
|
attribute :audited, Switch, optional: true
|
|
@@ -53,14 +52,14 @@ Hecks.bluebook "Hecks" do
|
|
|
53
52
|
identified_by :run
|
|
54
53
|
|
|
55
54
|
value_object "RunKey" do
|
|
56
|
-
attribute :value, String,
|
|
55
|
+
attribute :value, String, matches: :present
|
|
57
56
|
|
|
58
57
|
invariant("a rehearsal is named") { !value.to_s.empty? }
|
|
59
58
|
end
|
|
60
59
|
|
|
61
60
|
# The domain's directory: where its bluebooks and its `.world` stand.
|
|
62
61
|
value_object "DomainPath" do
|
|
63
|
-
attribute :value, String,
|
|
62
|
+
attribute :value, String, matches: :not_empty
|
|
64
63
|
end
|
|
65
64
|
|
|
66
65
|
# The Hecks the rehearsal must run on: a release (`3.9.0`) or a commit, whole or a prefix.
|
|
@@ -69,7 +68,7 @@ Hecks.bluebook "Hecks" do
|
|
|
69
68
|
end
|
|
70
69
|
|
|
71
70
|
value_object "HostVersion" do
|
|
72
|
-
attribute :value, String,
|
|
71
|
+
attribute :value, String, matches: :present
|
|
73
72
|
end
|
|
74
73
|
|
|
75
74
|
# Which strategy the subject's world named for the copy of its data.
|
|
@@ -279,15 +278,14 @@ Hecks.bluebook "Hecks" do
|
|
|
279
278
|
emits RehearsalBooted
|
|
280
279
|
end
|
|
281
280
|
|
|
282
|
-
# The mint's own three layers and its edge
|
|
281
|
+
# The mint's own three layers and its edge and coverage rules, run over the copy.
|
|
283
282
|
command "Audit" do
|
|
284
283
|
role "System"
|
|
285
|
-
goal "Record whether an edge leads to the shape
|
|
284
|
+
goal "Record whether an edge leads to the shape, and every row the mint's audit would refuse"
|
|
286
285
|
|
|
287
286
|
reference_to RehearsalRun
|
|
288
287
|
attribute :minting, Minting
|
|
289
288
|
attribute :edge_present, Switch
|
|
290
|
-
attribute :edge_approved, Switch
|
|
291
289
|
attribute :refused_rows, list_of(RefusedRow), optional: true
|
|
292
290
|
attribute :refusal_total, Count
|
|
293
291
|
attribute :audited, Switch
|
|
@@ -302,7 +300,6 @@ Hecks.bluebook "Hecks" do
|
|
|
302
300
|
|
|
303
301
|
sets :minting
|
|
304
302
|
sets :edge_present
|
|
305
|
-
sets :edge_approved
|
|
306
303
|
sets :refused_rows
|
|
307
304
|
sets :refusal_total
|
|
308
305
|
sets :audited
|
|
@@ -326,7 +323,6 @@ Hecks.bluebook "Hecks" do
|
|
|
326
323
|
attribute :verdict, Verdict
|
|
327
324
|
attribute :refusal_total, Count
|
|
328
325
|
attribute :edge_present, Switch
|
|
329
|
-
attribute :edge_approved, Switch
|
|
330
326
|
|
|
331
327
|
given("a rehearsal that finds a refused row would not mint") { refusal_total.value == 0 }
|
|
332
328
|
given("a rehearsal judged to mint names that verdict") { verdict.value == "would_mint" }
|
|
@@ -439,7 +435,7 @@ Hecks.bluebook "Hecks" do
|
|
|
439
435
|
|
|
440
436
|
policy "RecordAuditWhenStoreExamined" do
|
|
441
437
|
on "RehearsalRun.StoreExamined"
|
|
442
|
-
trigger RehearsalRun::Audit, with: { minting: :minting, edge_present: :edge_present,
|
|
438
|
+
trigger RehearsalRun::Audit, with: { minting: :minting, edge_present: :edge_present,
|
|
443
439
|
refused_rows: :refused_rows, refusal_total: :refusal_total,
|
|
444
440
|
audited: :audited, rows_examined: :rows_examined,
|
|
445
441
|
rust_rows_examined: :rust_rows_examined,
|
|
@@ -451,11 +447,10 @@ Hecks.bluebook "Hecks" do
|
|
|
451
447
|
policy "JudgeWhenNothingWouldStopTheMint" do
|
|
452
448
|
on "RehearsalRun.RehearsalAudited"
|
|
453
449
|
where do
|
|
454
|
-
(minting.value != "next" || edge_present.value) && refusal_total.value == 0
|
|
455
|
-
(minting.value != "next" || edge_approved.value)
|
|
450
|
+
(minting.value != "next" || edge_present.value) && refusal_total.value == 0
|
|
456
451
|
end
|
|
457
452
|
trigger RehearsalRun::Judge, with: { verdict: "would_mint", refusal_total: :refusal_total,
|
|
458
|
-
edge_present: :edge_present
|
|
453
|
+
edge_present: :edge_present }
|
|
459
454
|
end
|
|
460
455
|
|
|
461
456
|
policy "WithholdWhenNoEdgeLeadsOn" do
|
|
@@ -468,10 +463,9 @@ Hecks.bluebook "Hecks" do
|
|
|
468
463
|
policy "WithholdWhenTheMintWouldRefuse" do
|
|
469
464
|
on "RehearsalRun.RehearsalAudited"
|
|
470
465
|
where do
|
|
471
|
-
(minting.value != "next" || edge_present.value) &&
|
|
472
|
-
(refusal_total.value > 0 || (minting.value == "next" && !edge_approved.value))
|
|
466
|
+
(minting.value != "next" || edge_present.value) && refusal_total.value > 0
|
|
473
467
|
end
|
|
474
468
|
trigger RehearsalRun::Withhold, with: { verdict: "would_refuse",
|
|
475
|
-
refusal: "the mint would refuse: see the refused rows
|
|
469
|
+
refusal: "the mint would refuse: see the refused rows" }
|
|
476
470
|
end
|
|
477
471
|
end
|
|
@@ -10,19 +10,19 @@ Hecks.bluebook "Hecks" do
|
|
|
10
10
|
identified_by :domain
|
|
11
11
|
|
|
12
12
|
value_object "DomainPath" do
|
|
13
|
-
attribute :value, String,
|
|
13
|
+
attribute :value, String, matches: :not_empty
|
|
14
14
|
|
|
15
15
|
invariant("a domain is named by its path") { !value.to_s.empty? }
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
value_object "ChapterName" do
|
|
19
|
-
attribute :value, String,
|
|
19
|
+
attribute :value, String, matches: :present
|
|
20
20
|
|
|
21
21
|
invariant("a chapter is named") { !value.to_s.empty? }
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
value_object "AggregateName" do
|
|
25
|
-
attribute :value, String,
|
|
25
|
+
attribute :value, String, matches: :present
|
|
26
26
|
|
|
27
27
|
invariant("an aggregate is named") { !value.to_s.empty? }
|
|
28
28
|
end
|
|
@@ -128,13 +128,13 @@ Hecks.bluebook "Hecks" do
|
|
|
128
128
|
identified_by :run
|
|
129
129
|
|
|
130
130
|
value_object "RunKey" do
|
|
131
|
-
attribute :value, String,
|
|
131
|
+
attribute :value, String, matches: :present
|
|
132
132
|
|
|
133
133
|
invariant("a run is named") { !value.to_s.empty? }
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
value_object "DomainList" do
|
|
137
|
-
attribute :value, String,
|
|
137
|
+
attribute :value, String, matches: :not_empty
|
|
138
138
|
end
|
|
139
139
|
|
|
140
140
|
value_object "ProfileName" do
|
|
@@ -254,7 +254,7 @@ Hecks.bluebook "Hecks" do
|
|
|
254
254
|
|
|
255
255
|
# A directory: the source repository (`from`), or the project the files land in (`root`).
|
|
256
256
|
value_object "Location" do
|
|
257
|
-
attribute :value, String,
|
|
257
|
+
attribute :value, String, matches: :not_empty
|
|
258
258
|
end
|
|
259
259
|
|
|
260
260
|
value_object "Report" do
|
|
@@ -383,18 +383,18 @@ Hecks.bluebook "Hecks" do
|
|
|
383
383
|
identified_by :run
|
|
384
384
|
|
|
385
385
|
value_object "RegistryKey" do
|
|
386
|
-
attribute :value, String,
|
|
386
|
+
attribute :value, String, matches: :present
|
|
387
387
|
|
|
388
388
|
invariant("a release is named") { !value.to_s.empty? }
|
|
389
389
|
end
|
|
390
390
|
|
|
391
391
|
value_object "PackageName" do
|
|
392
|
-
attribute :value, String,
|
|
392
|
+
attribute :value, String, matches: :snake_name
|
|
393
393
|
end
|
|
394
394
|
|
|
395
395
|
# The registry repository: the current directory when absent.
|
|
396
396
|
value_object "Location" do
|
|
397
|
-
attribute :value, String,
|
|
397
|
+
attribute :value, String, matches: :not_empty
|
|
398
398
|
end
|
|
399
399
|
|
|
400
400
|
value_object "Report" do
|
|
@@ -520,14 +520,14 @@ Hecks.bluebook "Hecks" do
|
|
|
520
520
|
identified_by :run
|
|
521
521
|
|
|
522
522
|
value_object "LaunchKey" do
|
|
523
|
-
attribute :value, String,
|
|
523
|
+
attribute :value, String, matches: :present
|
|
524
524
|
|
|
525
525
|
invariant("a launch is named") { !value.to_s.empty? }
|
|
526
526
|
end
|
|
527
527
|
|
|
528
528
|
# Domain directories under the project, comma separated.
|
|
529
529
|
value_object "DomainList" do
|
|
530
|
-
attribute :value, String,
|
|
530
|
+
attribute :value, String, matches: :not_empty
|
|
531
531
|
end
|
|
532
532
|
|
|
533
533
|
value_object "Switch" do
|
|
@@ -546,12 +546,12 @@ Hecks.bluebook "Hecks" do
|
|
|
546
546
|
|
|
547
547
|
# Where the new domain goes; the domain's snake-cased name under the current directory when absent.
|
|
548
548
|
value_object "TargetDir" do
|
|
549
|
-
attribute :value, String,
|
|
549
|
+
attribute :value, String, matches: :not_empty
|
|
550
550
|
end
|
|
551
551
|
|
|
552
552
|
# Who is interviewed; asked for at the terminal when absent.
|
|
553
553
|
value_object "ExpertName" do
|
|
554
|
-
attribute :value, String,
|
|
554
|
+
attribute :value, String, matches: :not_empty
|
|
555
555
|
end
|
|
556
556
|
|
|
557
557
|
value_object "Note" do
|
|
@@ -724,7 +724,7 @@ Hecks.bluebook "Hecks" do
|
|
|
724
724
|
identified_by :run
|
|
725
725
|
|
|
726
726
|
value_object "BuildKey" do
|
|
727
|
-
attribute :value, String,
|
|
727
|
+
attribute :value, String, matches: :present
|
|
728
728
|
|
|
729
729
|
invariant("a build is named") { !value.to_s.empty? }
|
|
730
730
|
end
|
|
@@ -737,18 +737,18 @@ Hecks.bluebook "Hecks" do
|
|
|
737
737
|
|
|
738
738
|
# A generated module: the directory name a domain was built as.
|
|
739
739
|
value_object "ModuleName" do
|
|
740
|
-
attribute :value, String,
|
|
740
|
+
attribute :value, String, matches: :snake_name
|
|
741
741
|
end
|
|
742
742
|
|
|
743
743
|
# A JSON file of steps for a domain to replay.
|
|
744
744
|
value_object "ScriptPath" do
|
|
745
|
-
attribute :value, String,
|
|
745
|
+
attribute :value, String, matches: :not_empty
|
|
746
746
|
end
|
|
747
747
|
|
|
748
748
|
# What a build is replayed through: `native`, `build` (the domain's own feature), a `.wasm`
|
|
749
749
|
# module, or a binary.
|
|
750
750
|
value_object "Artifact" do
|
|
751
|
-
attribute :value, String,
|
|
751
|
+
attribute :value, String, matches: :present
|
|
752
752
|
end
|
|
753
753
|
|
|
754
754
|
# A Rust target triple: `<arch>-<vendor>-<os>` with an optional `-<env>`. The toolchain
|
|
@@ -759,7 +759,7 @@ Hecks.bluebook "Hecks" do
|
|
|
759
759
|
|
|
760
760
|
# The directory a host build stages its files in.
|
|
761
761
|
value_object "StagePath" do
|
|
762
|
-
attribute :value, String,
|
|
762
|
+
attribute :value, String, matches: :not_empty
|
|
763
763
|
end
|
|
764
764
|
|
|
765
765
|
value_object "Count" do
|
|
@@ -1014,14 +1014,14 @@ Hecks.bluebook "Hecks" do
|
|
|
1014
1014
|
identified_by :run
|
|
1015
1015
|
|
|
1016
1016
|
value_object "FuzzKey" do
|
|
1017
|
-
attribute :value, String,
|
|
1017
|
+
attribute :value, String, matches: :present
|
|
1018
1018
|
|
|
1019
1019
|
invariant("a sweep is named") { !value.to_s.empty? }
|
|
1020
1020
|
end
|
|
1021
1021
|
|
|
1022
1022
|
# A domain directory; a sweep with none covers every domain of a hecks checkout.
|
|
1023
1023
|
value_object "DomainPath" do
|
|
1024
|
-
attribute :value, String,
|
|
1024
|
+
attribute :value, String, matches: :not_empty
|
|
1025
1025
|
|
|
1026
1026
|
invariant("a domain is named by its path") { !value.to_s.empty? }
|
|
1027
1027
|
end
|
|
@@ -1054,7 +1054,7 @@ Hecks.bluebook "Hecks" do
|
|
|
1054
1054
|
end
|
|
1055
1055
|
|
|
1056
1056
|
value_object "BinaryPath" do
|
|
1057
|
-
attribute :value, String,
|
|
1057
|
+
attribute :value, String, matches: :not_empty
|
|
1058
1058
|
end
|
|
1059
1059
|
|
|
1060
1060
|
value_object "Format" do
|
|
@@ -1062,7 +1062,7 @@ Hecks.bluebook "Hecks" do
|
|
|
1062
1062
|
end
|
|
1063
1063
|
|
|
1064
1064
|
value_object "OutputPath" do
|
|
1065
|
-
attribute :value, String,
|
|
1065
|
+
attribute :value, String, matches: :not_empty
|
|
1066
1066
|
end
|
|
1067
1067
|
|
|
1068
1068
|
value_object "Report" do
|
|
@@ -30,13 +30,13 @@ module Hecks
|
|
|
30
30
|
/// variant names — `hecks measure_kernel_coverage`'s own existence
|
|
31
31
|
/// check reads this, so the file-name spelling here is the ONE
|
|
32
32
|
/// place that ever needs to change if a name is renamed.
|
|
33
|
-
pub fn module_name(&self) -> &'static str {
|
|
33
|
+
pub const fn module_name(&self) -> &'static str {
|
|
34
34
|
match self {
|
|
35
35
|
%<arms>s
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
pub const ALL: &'static [
|
|
39
|
+
pub const ALL: &'static [Self] = &[%<all>s];
|
|
40
40
|
}
|
|
41
41
|
RUST
|
|
42
42
|
|
|
@@ -78,8 +78,8 @@ module Hecks
|
|
|
78
78
|
directory: shapes ? "attribute_shapes" : "expression_operators",
|
|
79
79
|
mods: names.map { |name| "pub mod #{name};" }.join("\n"),
|
|
80
80
|
variants: names.map { |name| " #{pascal(name)}," }.join("\n"),
|
|
81
|
-
arms: names.map { |name| "
|
|
82
|
-
all: names.map { |name| "
|
|
81
|
+
arms: names.map { |name| " Self::#{pascal(name)} => #{name.to_s.inspect}," }.join("\n"),
|
|
82
|
+
all: names.map { |name| "Self::#{pascal(name)}" }.join(", "))
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
# @param name [String, Symbol] a snake_case capability name
|
|
@@ -42,7 +42,7 @@ module Hecks
|
|
|
42
42
|
File.join(kernel, "attribute_shapes/mod.rs") => shapes_module,
|
|
43
43
|
File.join(kernel, "expression_operators/mod.rs") => operators_module
|
|
44
44
|
}
|
|
45
|
-
ProjectionFiles::Result.new(content, [])
|
|
45
|
+
ProjectionFiles::Result.new(RustFormat.files(content), [])
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
# Writes the capability modules.
|
|
@@ -440,6 +440,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
440
440
|
member keyword: "attribute", context: "Aggregate", at: "", named: "default", kind: "literal", required: "false", fills: "default"
|
|
441
441
|
member keyword: "attribute", context: "Aggregate", at: "", named: "optional", kind: "flag", required: "false", fills: "optional"
|
|
442
442
|
member keyword: "attribute", context: "Aggregate", at: "", named: "pattern", kind: "text", required: "false", fills: "pattern"
|
|
443
|
+
member keyword: "attribute", context: "Aggregate", at: "", named: "matches", kind: "symbol", required: "false", fills: "matches"
|
|
443
444
|
member keyword: "attribute", context: "Aggregate", at: "", named: "admits", kind: "text", required: "false", fills: "admits"
|
|
444
445
|
member keyword: "attribute", context: "Aggregate", at: "", named: "one_of", kind: "list", required: "false", fills: "one_of"
|
|
445
446
|
member keyword: "invariant", context: "Aggregate", at: "1", named: "", kind: "text", required: "true", fills: "description"
|
|
@@ -368,6 +368,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
368
368
|
member keyword: "attribute", context: "Command", at: "", named: "default", kind: "literal", required: "false", fills: "default"
|
|
369
369
|
member keyword: "attribute", context: "Command", at: "", named: "optional", kind: "flag", required: "false", fills: "optional"
|
|
370
370
|
member keyword: "attribute", context: "Command", at: "", named: "pattern", kind: "text", required: "false", fills: "pattern"
|
|
371
|
+
member keyword: "attribute", context: "Command", at: "", named: "matches", kind: "symbol", required: "false", fills: "matches"
|
|
371
372
|
member keyword: "attribute", context: "Command", at: "", named: "admits", kind: "text", required: "false", fills: "admits"
|
|
372
373
|
member keyword: "attribute", context: "Command", at: "", named: "one_of", kind: "list", required: "false", fills: "one_of"
|
|
373
374
|
# `reason` is required in practice; CommandBuilder#corrects_impl refuses its absence.
|
|
@@ -319,6 +319,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
319
319
|
member keyword: "attribute", context: "Entity", at: "", named: "default", kind: "literal", required: "false", fills: "default"
|
|
320
320
|
member keyword: "attribute", context: "Entity", at: "", named: "optional", kind: "flag", required: "false", fills: "optional"
|
|
321
321
|
member keyword: "attribute", context: "Entity", at: "", named: "pattern", kind: "text", required: "false", fills: "pattern"
|
|
322
|
+
member keyword: "attribute", context: "Entity", at: "", named: "matches", kind: "symbol", required: "false", fills: "matches"
|
|
322
323
|
member keyword: "attribute", context: "Entity", at: "", named: "admits", kind: "text", required: "false", fills: "admits"
|
|
323
324
|
member keyword: "attribute", context: "Entity", at: "", named: "one_of", kind: "list", required: "false", fills: "one_of"
|
|
324
325
|
member keyword: "reference_to", context: "Entity", at: "1", named: "", kind: "constant", required: "true", fills: "type"
|
|
@@ -229,6 +229,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
229
229
|
member keyword: "attribute", context: "Query", at: "", named: "default", kind: "literal", required: "false", fills: "default"
|
|
230
230
|
member keyword: "attribute", context: "Query", at: "", named: "optional", kind: "flag", required: "false", fills: "optional"
|
|
231
231
|
member keyword: "attribute", context: "Query", at: "", named: "pattern", kind: "text", required: "false", fills: "pattern"
|
|
232
|
+
member keyword: "attribute", context: "Query", at: "", named: "matches", kind: "symbol", required: "false", fills: "matches"
|
|
232
233
|
member keyword: "attribute", context: "Query", at: "", named: "admits", kind: "text", required: "false", fills: "admits"
|
|
233
234
|
member keyword: "attribute", context: "Query", at: "", named: "one_of", kind: "list", required: "false", fills: "one_of"
|
|
234
235
|
member keyword: "reference_to", context: "Query", at: "1", named: "", kind: "constant", required: "true", fills: "type"
|
|
@@ -19,14 +19,14 @@ Hecks.bluebook "Bluebook" do
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
value_object "ValueObjectName" do
|
|
22
|
-
attribute :value, String,
|
|
22
|
+
attribute :value, String, matches: :present
|
|
23
23
|
invariant("a value object is named") { !value.to_s.empty? }
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
value_object "ShapeField" do
|
|
27
|
-
attribute :name, String,
|
|
28
|
-
attribute :type, String,
|
|
29
|
-
attribute :list, String,
|
|
27
|
+
attribute :name, String, matches: :present
|
|
28
|
+
attribute :type, String, matches: :present
|
|
29
|
+
attribute :list, String, matches: :present
|
|
30
30
|
attribute :optional, String, optional: true
|
|
31
31
|
attribute :pattern, String, optional: true
|
|
32
32
|
# optional: a declaration with no default has none
|
|
@@ -40,8 +40,8 @@ Hecks.bluebook "Bluebook" do
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
value_object "Assertion" do
|
|
43
|
-
attribute :description, String,
|
|
44
|
-
attribute :canonical, String,
|
|
43
|
+
attribute :description, String, matches: :present
|
|
44
|
+
attribute :canonical, String, matches: :present
|
|
45
45
|
invariant("an assertion description is present") { !description.to_s.empty? }
|
|
46
46
|
invariant("an assertion canonical form is present") { !canonical.to_s.empty? }
|
|
47
47
|
end
|
|
@@ -59,7 +59,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
value_object "Pair" do
|
|
62
|
-
attribute :key, String,
|
|
62
|
+
attribute :key, String, matches: :present
|
|
63
63
|
attribute :value, String
|
|
64
64
|
# Keys must be named; values may be empty or numeric.
|
|
65
65
|
invariant("a pair key is present") { !key.to_s.empty? }
|
|
@@ -230,6 +230,7 @@ Hecks.bluebook "Bluebook" do
|
|
|
230
230
|
member keyword: "attribute", context: "ValueObject", at: "", named: "default", kind: "literal", required: "false", fills: "default"
|
|
231
231
|
member keyword: "attribute", context: "ValueObject", at: "", named: "optional", kind: "flag", required: "false", fills: "optional"
|
|
232
232
|
member keyword: "attribute", context: "ValueObject", at: "", named: "pattern", kind: "text", required: "false", fills: "pattern"
|
|
233
|
+
member keyword: "attribute", context: "ValueObject", at: "", named: "matches", kind: "symbol", required: "false", fills: "matches"
|
|
233
234
|
member keyword: "attribute", context: "ValueObject", at: "", named: "admits", kind: "text", required: "false", fills: "admits"
|
|
234
235
|
member keyword: "attribute", context: "ValueObject", at: "", named: "one_of", kind: "list", required: "false", fills: "one_of"
|
|
235
236
|
member keyword: "invariant", context: "ValueObject", at: "1", named: "", kind: "text", required: "true", fills: "description"
|
|
@@ -846,7 +846,6 @@ Hecks.bluebook "Bluebook" do
|
|
|
846
846
|
member script: "backfill_era_projections", section: "Custodian", aggregate: "Era", verb: "backfill_projections"
|
|
847
847
|
member script: "scaffold_translation", section: "Custodian", aggregate: "Era", verb: "scaffold_translation"
|
|
848
848
|
member script: "translation_audit", section: "Custodian", aggregate: "Era", verb: "audit_translation"
|
|
849
|
-
member script: "translation_audit", section: "Custodian", aggregate: "Era", verb: "approve_translation"
|
|
850
849
|
member script: "compact", section: "Custodian", aggregate: "Era", verb: "compact"
|
|
851
850
|
member script: "heki_compact", section: "Custodian", aggregate: "Era", verb: "compact_heki"
|
|
852
851
|
member script: "vendor_bluebook", section: "Custodian", aggregate: "Package", verb: "vendor", note: "waits: a refusal exits 1 with its reason on stderr"
|
|
@@ -954,8 +953,8 @@ Hecks.bluebook "Bluebook" do
|
|
|
954
953
|
# hand-typed copies.
|
|
955
954
|
value_object "RustReservedWord" do
|
|
956
955
|
attribute :word, String,
|
|
957
|
-
one_of: ["as", "
|
|
958
|
-
"fn", "for", "if", "impl", "in", "let", "loop", "match", "mod", "move", "mut", "pub",
|
|
956
|
+
one_of: ["as", "async", "await", "break", "const", "continue", "crate", "dyn", "else", "enum",
|
|
957
|
+
"extern", "false", "fn", "for", "if", "impl", "in", "let", "loop", "match", "mod", "move", "mut", "pub",
|
|
959
958
|
"ref", "return", "self", "Self", "static", "struct", "super", "trait", "true", "type",
|
|
960
959
|
"unsafe", "use", "where", "while", "abstract", "become", "box", "do", "final", "macro",
|
|
961
960
|
"override", "priv", "typeof", "unsized", "virtual", "yield", "try"]
|
|
@@ -80,6 +80,7 @@ Hecks.bluebook "Hecksagon" do
|
|
|
80
80
|
member keyword: "attribute", context: "PortOperation", at: "", named: "default", kind: "literal", required: "false", fills: "default"
|
|
81
81
|
member keyword: "attribute", context: "PortOperation", at: "", named: "optional", kind: "flag", required: "false", fills: "optional"
|
|
82
82
|
member keyword: "attribute", context: "PortOperation", at: "", named: "pattern", kind: "text", required: "false", fills: "pattern"
|
|
83
|
+
member keyword: "attribute", context: "PortOperation", at: "", named: "matches", kind: "symbol", required: "false", fills: "matches"
|
|
83
84
|
member keyword: "attribute", context: "PortOperation", at: "", named: "admits", kind: "text", required: "false", fills: "admits"
|
|
84
85
|
member keyword: "attribute", context: "PortOperation", at: "", named: "one_of", kind: "list", required: "false", fills: "one_of"
|
|
85
86
|
member keyword: "emits", context: "PortOperation", at: "1", named: "", kind: "text", required: "true", fills: "emits"
|
|
@@ -29,7 +29,7 @@ Hecks.bluebook "Translation" do
|
|
|
29
29
|
attribute :converts, list_of(TranslationConvert)
|
|
30
30
|
attribute :drops, list_of(TranslationName)
|
|
31
31
|
attribute :retypes, list_of(TranslationRetype)
|
|
32
|
-
attribute :
|
|
32
|
+
attribute :derives, list_of(TranslationDerive)
|
|
33
33
|
attribute :rekeys, list_of(TranslationRekey)
|
|
34
34
|
attribute :backfills, list_of(TranslationBackfill)
|
|
35
35
|
|
|
@@ -56,14 +56,13 @@ Hecks.bluebook "Translation" do
|
|
|
56
56
|
attribute :to, TranslationName
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
-
value_object "
|
|
60
|
-
attribute :
|
|
61
|
-
attribute :
|
|
62
|
-
attribute :sql, TranslationLiteralText
|
|
59
|
+
value_object "TranslationDerive" do
|
|
60
|
+
attribute :to, TranslationName
|
|
61
|
+
attribute :expression, TranslationLiteralText
|
|
63
62
|
end
|
|
64
63
|
|
|
65
64
|
value_object "TranslationRekey" do
|
|
66
|
-
attribute :
|
|
65
|
+
attribute :to, TranslationName
|
|
67
66
|
end
|
|
68
67
|
|
|
69
68
|
value_object "TranslationBackfill" do
|
|
@@ -146,28 +145,27 @@ Hecks.bluebook "Translation" do
|
|
|
146
145
|
emits "TranslationRetypeAdded"
|
|
147
146
|
end
|
|
148
147
|
|
|
149
|
-
command "
|
|
148
|
+
command "AddDerive" do
|
|
150
149
|
role "Deployment"
|
|
151
|
-
goal "
|
|
150
|
+
goal "Give a new field a value computed from the record's own text, read before any other rule runs"
|
|
152
151
|
|
|
153
|
-
attribute :
|
|
154
|
-
attribute :
|
|
155
|
-
attribute :sql, TranslationLiteralText
|
|
152
|
+
attribute :to, TranslationName
|
|
153
|
+
attribute :expression, TranslationLiteralText
|
|
156
154
|
|
|
157
|
-
sets :
|
|
155
|
+
sets :derives, append: { to: :to, expression: :expression }
|
|
158
156
|
|
|
159
|
-
emits "
|
|
157
|
+
emits "TranslationDeriveAdded"
|
|
160
158
|
end
|
|
161
159
|
|
|
162
|
-
command "
|
|
160
|
+
command "AddRekeyTo" do
|
|
163
161
|
role "Deployment"
|
|
164
|
-
goal "
|
|
162
|
+
goal "Take this aggregate's identity from the value of a field a derive computes"
|
|
165
163
|
|
|
166
|
-
attribute :
|
|
164
|
+
attribute :to, TranslationName
|
|
167
165
|
|
|
168
|
-
sets :rekeys, append: {
|
|
166
|
+
sets :rekeys, append: { to: :to }
|
|
169
167
|
|
|
170
|
-
emits "
|
|
168
|
+
emits "TranslationRekeyToAdded"
|
|
171
169
|
end
|
|
172
170
|
|
|
173
171
|
command "AddBackfill" do
|
|
@@ -200,8 +198,8 @@ Hecks.bluebook "Translation" do
|
|
|
200
198
|
member word: "convert", context: "TranslationAggregate", body: "none", inner: "", opens: "", fills: "converts", calls: "convert_impl"
|
|
201
199
|
member word: "drop", context: "TranslationAggregate", body: "none", inner: "", opens: "", fills: "drops"
|
|
202
200
|
member word: "retype", context: "TranslationAggregate", body: "none", inner: "", opens: "", fills: "retypes", calls: "retype_impl"
|
|
203
|
-
member word: "
|
|
204
|
-
member word: "
|
|
201
|
+
member word: "derive", context: "TranslationAggregate", body: "none", inner: "", opens: "", fills: "derives", calls: "derive_impl"
|
|
202
|
+
member word: "rekey_to", context: "TranslationAggregate", body: "none", inner: "", opens: "", fills: "rekeys", calls: "rekey_to_impl"
|
|
205
203
|
member word: "backfill", context: "TranslationAggregate", body: "none", inner: "", opens: "", fills: "backfills", calls: "backfill_impl"
|
|
206
204
|
member word: "unresolved", context: "TranslationAggregate", body: "none", inner: "", opens: "", fills: "", calls: "unresolved_impl"
|
|
207
205
|
|
|
@@ -234,10 +232,9 @@ Hecks.bluebook "Translation" do
|
|
|
234
232
|
member keyword: "drop", context: "TranslationAggregate", at: "1", named: "", kind: "symbol", required: "true", fills: "name", blank_message: "a drop needs a name"
|
|
235
233
|
member keyword: "retype", context: "TranslationAggregate", at: "1", named: "", kind: "text", required: "true", fills: "old_type"
|
|
236
234
|
member keyword: "retype", context: "TranslationAggregate", at: "", named: "to", kind: "text", required: "true", fills: "to"
|
|
237
|
-
member keyword: "
|
|
238
|
-
member keyword: "
|
|
239
|
-
member keyword: "
|
|
240
|
-
member keyword: "rekey", context: "TranslationAggregate", at: "", named: "sql", kind: "text", required: "true", fills: "sql"
|
|
235
|
+
member keyword: "derive", context: "TranslationAggregate", at: "1", named: "", kind: "text", required: "true", fills: "to"
|
|
236
|
+
member keyword: "derive", context: "TranslationAggregate", at: "", named: "as", kind: "text", required: "true", fills: "as"
|
|
237
|
+
member keyword: "rekey_to", context: "TranslationAggregate", at: "1", named: "", kind: "symbol", required: "true", fills: "to"
|
|
241
238
|
member keyword: "backfill", context: "TranslationAggregate", at: "1", named: "", kind: "symbol", required: "true", fills: "name"
|
|
242
239
|
member keyword: "backfill", context: "TranslationAggregate", at: "", named: "default", kind: "literal", required: "true", fills: "default"
|
|
243
240
|
member keyword: "unresolved", context: "TranslationAggregate", at: "1", named: "", kind: "symbol", required: "true", fills: "name"
|
|
@@ -26,8 +26,8 @@ module Hecks
|
|
|
26
26
|
|
|
27
27
|
# Admits a new person, in whatever way this domain's adapter defines admission.
|
|
28
28
|
#
|
|
29
|
-
# The keywords carry the names of a verified sign-in
|
|
30
|
-
#
|
|
29
|
+
# The keywords carry the names of a verified OIDC sign-in, but nothing here wires
|
|
30
|
+
# one to this port, so their shapes are adapter-defined.
|
|
31
31
|
#
|
|
32
32
|
# @param registry [Runtime::Registry] the booted registry to resolve the adapter against
|
|
33
33
|
# @param email [Object] adapter-defined, forwarded unchanged; the person's email
|