hecks 3.14.0 → 5.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.hecksagon +5 -3
- data/examples/pizzas/config.ru +22 -0
- data/exe/hecks +1 -1
- data/lib/hecks/adapters/driven/prism.rb +0 -2
- data/lib/hecks/adapters/driven.rb +0 -2
- data/lib/hecks/adapters/driving/json.rb +9 -16
- 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/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 +2 -0
- data/lib/hecks/chapters.rb +3 -3
- data/lib/hecks/cli/project_cli/launcher_source.rb +1 -1
- 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/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/app/responses.rb +3 -1
- 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/fuzzing/bounded_exhaustive_expressions.rb +0 -3
- 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/first_admin.rb +3 -3
- 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 +21 -0
- 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 +3 -80
- data/lib/hecks/hecks/hecks.hecksagon +2 -2
- data/lib/hecks/hecks/hecks.world +1 -1
- data/lib/hecks/hecks/rehearsal.bluebook +7 -13
- data/lib/hecks/kernel_capabilities/templates.rb +4 -4
- data/lib/hecks/kernel_capabilities.rb +1 -1
- data/lib/hecks/language/bluebook/vocabulary.bluebook +2 -3
- 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/site/cms_editor/templates/src/host.ts.tmpl +7 -2
- 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/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/unwrapping.rb +60 -0
- data/lib/hecks/runtime/value.rb +10 -21
- 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/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/{1a6f596be124228be93eba1d86dbc9d2933190fa389b284331241cb9f27115a0.marshal → ad68f9e06c8068c2a4176b57abf3083d591d5d8980c2b3e897b97331f965b643.marshal} +0 -0
- data/prebuilt/{a883a7e568667aa5ac904c82daff356bdf9e996252a36af6def4a4a43efb967e.marshal → ee22ec8642c4006717ba2b80f46e5efb81de459eef9dfec043e838c0ad4fd720.marshal} +0 -0
- data/prebuilt/{verdicts-872993b1aa26d73fe48f28251374b8585fed145d02aab42be0f00de386b6ff80.json → verdicts-b69f5dcbba79c20daa0493476fa7c317004a30aa2bc3d3dc6a722ea70ae2b43b.json} +1 -1
- 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 +306 -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 +151 -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/presenters.rs +335 -0
- data/rust/codegen/src/queries.rs +601 -226
- data/rust/codegen/src/reactions.rs +268 -74
- data/rust/codegen/src/read_models.rs +574 -229
- 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 +1037 -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 +39 -7
- data/rust/host/src/payments/tests.rs +1427 -282
- data/rust/host/src/payments.rs +391 -112
- 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 +555 -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 -1
- data/rust/parser/src/build/named_pattern.rs +4 -1
- 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 -516
- 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 +22 -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 +244 -114
- 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 +244 -148
- data/rust/src/kernel/mod.rs +47 -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/present.rs +261 -0
- 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/rust/host/src/approval.rs +0 -652
data/rust/src/lib.rs
CHANGED
|
@@ -1,8 +1,58 @@
|
|
|
1
1
|
//! Library face of the crate, shared by the native/WASI binary and the rust/web browser cdylib.
|
|
2
2
|
//! Std-only, zero Cargo dependencies (ADR 0012); wasm-bindgen lives in rust/web.
|
|
3
|
+
|
|
4
|
+
// Generated code keeps one shape for every domain, so a domain with no arms still has its `match`,
|
|
5
|
+
// a store still has its `new()`, a chapter may hold an aggregate named like itself
|
|
6
|
+
// (identity::identity), and every command gets the same signature whether or not it uses all of
|
|
7
|
+
// it. Clippy's complaints about that shape are not bugs to fix per file; the generators fix the
|
|
8
|
+
// ones that are real (see the emitters in rust/codegen/src).
|
|
9
|
+
#[allow(
|
|
10
|
+
clippy::match_single_binding,
|
|
11
|
+
clippy::match_like_matches_macro,
|
|
12
|
+
clippy::new_without_default,
|
|
13
|
+
clippy::module_inception,
|
|
14
|
+
clippy::needless_pass_by_value,
|
|
15
|
+
clippy::needless_pass_by_ref_mut,
|
|
16
|
+
clippy::unused_self,
|
|
17
|
+
clippy::unnecessary_wraps,
|
|
18
|
+
clippy::trivially_copy_pass_by_ref,
|
|
19
|
+
clippy::no_effect_underscore_binding,
|
|
20
|
+
clippy::missing_const_for_fn,
|
|
21
|
+
clippy::derive_partial_eq_without_eq,
|
|
22
|
+
clippy::single_match_else,
|
|
23
|
+
clippy::needless_continue,
|
|
24
|
+
clippy::implicit_clone,
|
|
25
|
+
clippy::assigning_clones,
|
|
26
|
+
clippy::doc_link_with_quotes,
|
|
27
|
+
clippy::redundant_closure_for_method_calls
|
|
28
|
+
)]
|
|
3
29
|
pub mod generated;
|
|
4
30
|
pub mod kernel;
|
|
5
31
|
|
|
6
32
|
// Test-only: rust/codegen/src/exemplar.rs slices shapes out of this; never in a release build.
|
|
33
|
+
// The files are templates with placeholder bodies, named after their placeholders, so they are
|
|
34
|
+
// neither formatted nor linted as code.
|
|
7
35
|
#[cfg(test)]
|
|
36
|
+
#[rustfmt::skip]
|
|
37
|
+
#[allow(
|
|
38
|
+
clippy::match_single_binding,
|
|
39
|
+
clippy::match_like_matches_macro,
|
|
40
|
+
clippy::new_without_default,
|
|
41
|
+
clippy::ptr_arg,
|
|
42
|
+
clippy::borrow_deref_ref,
|
|
43
|
+
clippy::needless_pass_by_value,
|
|
44
|
+
clippy::needless_pass_by_ref_mut,
|
|
45
|
+
clippy::unused_self,
|
|
46
|
+
clippy::unnecessary_wraps,
|
|
47
|
+
clippy::trivially_copy_pass_by_ref,
|
|
48
|
+
clippy::no_effect_underscore_binding,
|
|
49
|
+
clippy::missing_const_for_fn,
|
|
50
|
+
clippy::derive_partial_eq_without_eq,
|
|
51
|
+
clippy::use_self,
|
|
52
|
+
clippy::uninlined_format_args,
|
|
53
|
+
clippy::redundant_closure_for_method_calls,
|
|
54
|
+
clippy::map_unwrap_or,
|
|
55
|
+
clippy::doc_link_with_quotes,
|
|
56
|
+
unused_mut
|
|
57
|
+
)]
|
|
8
58
|
pub mod exemplar;
|
data/rust/src/main.rs
CHANGED
|
@@ -11,6 +11,9 @@ fn main() {
|
|
|
11
11
|
return;
|
|
12
12
|
}
|
|
13
13
|
let mut input = String::new();
|
|
14
|
-
std::io::stdin().read_to_string(&mut input)
|
|
14
|
+
if let Err(error) = std::io::stdin().read_to_string(&mut input) {
|
|
15
|
+
eprintln!("failed to read stdin: {error}");
|
|
16
|
+
std::process::exit(1);
|
|
17
|
+
}
|
|
15
18
|
println!("{}", rust::kernel::cli::run(&input));
|
|
16
19
|
}
|
data/rust/web/Cargo.toml
CHANGED
|
@@ -16,3 +16,39 @@ crate-type = ["cdylib"]
|
|
|
16
16
|
[dependencies]
|
|
17
17
|
rust = { path = ".." }
|
|
18
18
|
wasm-bindgen = "=0.2.126"
|
|
19
|
+
|
|
20
|
+
# Clippy beyond its defaults: pedantic and nursery, plus the restriction lints that keep a panic
|
|
21
|
+
# out of library code. `hecks gate_run.gate stage=ci only=rust_clippy` makes each of these an error.
|
|
22
|
+
# The same table is in every crate's Cargo.toml; change them together.
|
|
23
|
+
[lints.clippy]
|
|
24
|
+
pedantic = { level = "warn", priority = -1 }
|
|
25
|
+
nursery = { level = "warn", priority = -1 }
|
|
26
|
+
unwrap_used = "warn"
|
|
27
|
+
expect_used = "warn"
|
|
28
|
+
panic = "warn"
|
|
29
|
+
dbg_macro = "warn"
|
|
30
|
+
todo = "warn"
|
|
31
|
+
unimplemented = "warn"
|
|
32
|
+
# Lints that ask for prose or an attribute on every item rather than for better code.
|
|
33
|
+
missing_errors_doc = "allow"
|
|
34
|
+
missing_panics_doc = "allow"
|
|
35
|
+
must_use_candidate = "allow"
|
|
36
|
+
return_self_not_must_use = "allow"
|
|
37
|
+
module_name_repetitions = "allow"
|
|
38
|
+
too_many_lines = "allow"
|
|
39
|
+
too_long_first_doc_paragraph = "allow"
|
|
40
|
+
doc_markdown = "allow"
|
|
41
|
+
# Numeric conversions here are deliberate: JSON numbers are f64 and ids are small.
|
|
42
|
+
cast_possible_truncation = "allow"
|
|
43
|
+
cast_possible_wrap = "allow"
|
|
44
|
+
cast_precision_loss = "allow"
|
|
45
|
+
cast_sign_loss = "allow"
|
|
46
|
+
# Naming heuristics that fire on ordinary short names.
|
|
47
|
+
similar_names = "allow"
|
|
48
|
+
many_single_char_names = "allow"
|
|
49
|
+
struct_field_names = "allow"
|
|
50
|
+
# Heuristics that cost more clarity than they buy here.
|
|
51
|
+
redundant_pub_crate = "allow"
|
|
52
|
+
future_not_send = "allow"
|
|
53
|
+
significant_drop_tightening = "allow"
|
|
54
|
+
match_same_arms = "allow"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hecks
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 5.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chris Young
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-10-
|
|
11
|
+
date: 2026-10-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: prism
|
|
@@ -35,12 +35,15 @@ executables:
|
|
|
35
35
|
extensions: []
|
|
36
36
|
extra_rdoc_files: []
|
|
37
37
|
files:
|
|
38
|
-
- examples/pizzas/
|
|
38
|
+
- examples/pizzas/adapters/fake_processor.rb
|
|
39
|
+
- examples/pizzas/adapters/payment_signature.rb
|
|
40
|
+
- examples/pizzas/adapters/payment_webhook.rb
|
|
39
41
|
- examples/pizzas/bluebook/pizzas.behaviors
|
|
40
42
|
- examples/pizzas/bluebook/pizzas.bluebook
|
|
41
43
|
- examples/pizzas/bluebook/pizzas.hecksagon
|
|
42
44
|
- examples/pizzas/bluebook/pizzas.world
|
|
43
45
|
- examples/pizzas/bluebook/translations/2-77625c.bluebook
|
|
46
|
+
- examples/pizzas/config.ru
|
|
44
47
|
- examples/pizzas/oidc.json
|
|
45
48
|
- examples/pizzas/pizzas_behaviors.hecksagon
|
|
46
49
|
- exe/hecks
|
|
@@ -54,8 +57,6 @@ files:
|
|
|
54
57
|
- lib/hecks/adapters/driven/d1/connection.rb
|
|
55
58
|
- lib/hecks/adapters/driven/folder.adapter
|
|
56
59
|
- lib/hecks/adapters/driven/folder.rb
|
|
57
|
-
- lib/hecks/adapters/driven/google_authentication.adapter
|
|
58
|
-
- lib/hecks/adapters/driven/google_authentication.rb
|
|
59
60
|
- lib/hecks/adapters/driven/governance_authorization.adapter
|
|
60
61
|
- lib/hecks/adapters/driven/governance_authorization.rb
|
|
61
62
|
- lib/hecks/adapters/driven/heki.adapter
|
|
@@ -79,8 +80,6 @@ files:
|
|
|
79
80
|
- lib/hecks/adapters/driven/memory/outbox_rows.rb
|
|
80
81
|
- lib/hecks/adapters/driven/memory/shared_elements.rb
|
|
81
82
|
- lib/hecks/adapters/driven/memory/shared_elements/values.rb
|
|
82
|
-
- lib/hecks/adapters/driven/mock_stripe_adapter.adapter
|
|
83
|
-
- lib/hecks/adapters/driven/mock_stripe_adapter.rb
|
|
84
83
|
- lib/hecks/adapters/driven/postgres.adapter
|
|
85
84
|
- lib/hecks/adapters/driven/postgres.rb
|
|
86
85
|
- lib/hecks/adapters/driven/postgres/codec.rb
|
|
@@ -242,6 +241,7 @@ files:
|
|
|
242
241
|
- lib/hecks/bluebook/dsl/command_builder/owner.rb
|
|
243
242
|
- lib/hecks/bluebook/dsl/command_builder/rules.rb
|
|
244
243
|
- lib/hecks/bluebook/dsl/const_shim.rb
|
|
244
|
+
- lib/hecks/bluebook/dsl/derivation_words.rb
|
|
245
245
|
- lib/hecks/bluebook/dsl/domain_port_builder.rb
|
|
246
246
|
- lib/hecks/bluebook/dsl/entity_builder.rb
|
|
247
247
|
- lib/hecks/bluebook/dsl/entity_builder/rules.rb
|
|
@@ -337,6 +337,10 @@ files:
|
|
|
337
337
|
- lib/hecks/bluebook/smoke_test.rb
|
|
338
338
|
- lib/hecks/bluebook/synthesizer.rb
|
|
339
339
|
- lib/hecks/bluebook/translation.rb
|
|
340
|
+
- lib/hecks/bluebook/translation_expression.rb
|
|
341
|
+
- lib/hecks/bluebook/translation_expression/evaluator.rb
|
|
342
|
+
- lib/hecks/bluebook/translation_expression/parser.rb
|
|
343
|
+
- lib/hecks/bluebook/translation_plan.rb
|
|
340
344
|
- lib/hecks/bluebook/value_object.rb
|
|
341
345
|
- lib/hecks/cache_dir.rb
|
|
342
346
|
- lib/hecks/canonical_json.rb
|
|
@@ -406,11 +410,45 @@ files:
|
|
|
406
410
|
- lib/hecks/codemod.rb
|
|
407
411
|
- lib/hecks/codemod/runner.rb
|
|
408
412
|
- lib/hecks/codemod/sweep.rb
|
|
413
|
+
- lib/hecks/composer.rb
|
|
414
|
+
- lib/hecks/composer/adapters/claude_composer.adapter
|
|
415
|
+
- lib/hecks/composer/adapters/claude_composer.rb
|
|
416
|
+
- lib/hecks/composer/adapters/fake_agent.adapter
|
|
417
|
+
- lib/hecks/composer/adapters/fake_agent.rb
|
|
418
|
+
- lib/hecks/composer/adapters/jev.adapter
|
|
419
|
+
- lib/hecks/composer/adapters/jev.rb
|
|
420
|
+
- lib/hecks/composer/agent.rb
|
|
421
|
+
- lib/hecks/composer/assistant.rb
|
|
422
|
+
- lib/hecks/composer/behavior_run.rb
|
|
423
|
+
- lib/hecks/composer/bluebook/composer.bluebook
|
|
424
|
+
- lib/hecks/composer/bluebook/composer.hecksagon
|
|
425
|
+
- lib/hecks/composer/board.rb
|
|
426
|
+
- lib/hecks/composer/board_edit.rb
|
|
427
|
+
- lib/hecks/composer/board_edit/command_text.rb
|
|
428
|
+
- lib/hecks/composer/board_edit/source.rb
|
|
429
|
+
- lib/hecks/composer/check.rb
|
|
430
|
+
- lib/hecks/composer/domains.rb
|
|
431
|
+
- lib/hecks/composer/jobs.rb
|
|
432
|
+
- lib/hecks/composer/layout.rb
|
|
433
|
+
- lib/hecks/composer/live.rb
|
|
434
|
+
- lib/hecks/composer/outline.rb
|
|
435
|
+
- lib/hecks/composer/page.html
|
|
436
|
+
- lib/hecks/composer/panels.rb
|
|
437
|
+
- lib/hecks/composer/parse.rb
|
|
438
|
+
- lib/hecks/composer/plain.rb
|
|
439
|
+
- lib/hecks/composer/ports/composer_agent.port
|
|
440
|
+
- lib/hecks/composer/session.rb
|
|
441
|
+
- lib/hecks/composer/toolbox.rb
|
|
442
|
+
- lib/hecks/composer/web.rb
|
|
443
|
+
- lib/hecks/composer/workbench.rb
|
|
444
|
+
- lib/hecks/composer/workspace.rb
|
|
409
445
|
- lib/hecks/construct.rb
|
|
410
446
|
- lib/hecks/corpus.rb
|
|
447
|
+
- lib/hecks/corpus/adapters.rb
|
|
411
448
|
- lib/hecks/corpus/routes.rb
|
|
412
449
|
- lib/hecks/corpus/rust.rb
|
|
413
450
|
- lib/hecks/corpus/sources.rb
|
|
451
|
+
- lib/hecks/corpus/worlds.rb
|
|
414
452
|
- lib/hecks/deploy/bluebook/deploy.bluebook
|
|
415
453
|
- lib/hecks/deploy/bluebook/deploy.hecksagon
|
|
416
454
|
- lib/hecks/deploy/oidc.json
|
|
@@ -453,6 +491,7 @@ files:
|
|
|
453
491
|
- lib/hecks/forms/record_renderer.rb
|
|
454
492
|
- lib/hecks/forms/record_table.rb
|
|
455
493
|
- lib/hecks/forms/reference_options.rb
|
|
494
|
+
- lib/hecks/forms/rule_words.rb
|
|
456
495
|
- lib/hecks/forms/text_shape.rb
|
|
457
496
|
- lib/hecks/forms/value_object_shape.rb
|
|
458
497
|
- lib/hecks/fqn.rb
|
|
@@ -593,6 +632,7 @@ files:
|
|
|
593
632
|
- lib/hecks/grammar/translation.oidc.json
|
|
594
633
|
- lib/hecks/hecks/adapters/bluebook_report.rb
|
|
595
634
|
- lib/hecks/hecks/adapters/codebase/codemods.rb
|
|
635
|
+
- lib/hecks/hecks/adapters/codebase/composing.rb
|
|
596
636
|
- lib/hecks/hecks/adapters/codebase/conformance.rb
|
|
597
637
|
- lib/hecks/hecks/adapters/codebase/corpus_tasks.rb
|
|
598
638
|
- lib/hecks/hecks/adapters/codebase/gate.rb
|
|
@@ -691,6 +731,7 @@ files:
|
|
|
691
731
|
- lib/hecks/hecks/adapters/world_clearing.rb
|
|
692
732
|
- lib/hecks/hecks/codebase.behaviors
|
|
693
733
|
- lib/hecks/hecks/codebase.bluebook
|
|
734
|
+
- lib/hecks/hecks/composer.behaviors
|
|
694
735
|
- lib/hecks/hecks/context_map.hecksagon
|
|
695
736
|
- lib/hecks/hecks/custodian.behaviors
|
|
696
737
|
- lib/hecks/hecks/custodian.bluebook
|
|
@@ -749,8 +790,6 @@ files:
|
|
|
749
790
|
- lib/hecks/ports/agent.port
|
|
750
791
|
- lib/hecks/ports/agent.rb
|
|
751
792
|
- lib/hecks/ports/agent/answers.rb
|
|
752
|
-
- lib/hecks/ports/authentication.port
|
|
753
|
-
- lib/hecks/ports/authentication.rb
|
|
754
793
|
- lib/hecks/ports/authorization.port
|
|
755
794
|
- lib/hecks/ports/authorization.rb
|
|
756
795
|
- lib/hecks/ports/clock.port
|
|
@@ -820,12 +859,11 @@ files:
|
|
|
820
859
|
- lib/hecks/ports/persistence/plugins/era/postgres_era/sagas.rb
|
|
821
860
|
- lib/hecks/ports/persistence/plugins/era/storage_shape.rb
|
|
822
861
|
- lib/hecks/ports/persistence/plugins/era/translation.rb
|
|
823
|
-
- lib/hecks/ports/persistence/plugins/era/translation/approval_file.rb
|
|
824
862
|
- lib/hecks/ports/persistence/plugins/era/translation/audit.rb
|
|
825
|
-
- lib/hecks/ports/persistence/plugins/era/translation/audit/approval_digest.rb
|
|
826
863
|
- lib/hecks/ports/persistence/plugins/era/translation/audit/layer_one.rb
|
|
827
864
|
- lib/hecks/ports/persistence/plugins/era/translation/audit/layer_two.rb
|
|
828
865
|
- lib/hecks/ports/persistence/plugins/era/translation/audit/unfed_report.rb
|
|
866
|
+
- lib/hecks/ports/persistence/plugins/era/translation/expression_sql.rb
|
|
829
867
|
- lib/hecks/ports/persistence/plugins/era/translation/reattest.rb
|
|
830
868
|
- lib/hecks/ports/persistence/plugins/era/translation/rule_compiler.rb
|
|
831
869
|
- lib/hecks/ports/persistence/plugins/era/translation/scaffold.rb
|
|
@@ -1064,6 +1102,7 @@ files:
|
|
|
1064
1102
|
- lib/hecks/projections/diagrams/structure.rb
|
|
1065
1103
|
- lib/hecks/projections/glossary.rb
|
|
1066
1104
|
- lib/hecks/projections/glossary/entries.rb
|
|
1105
|
+
- lib/hecks/projections/glossary/groups.rb
|
|
1067
1106
|
- lib/hecks/projections/glossary/html.rb
|
|
1068
1107
|
- lib/hecks/projections/glossary/html/page.rb
|
|
1069
1108
|
- lib/hecks/projections/glossary/html/parser.rb
|
|
@@ -1076,6 +1115,9 @@ files:
|
|
|
1076
1115
|
- lib/hecks/projections/glossary/sections.rb
|
|
1077
1116
|
- lib/hecks/projections/glossary/sensitivity.rb
|
|
1078
1117
|
- lib/hecks/projections/glossary/sentences.rb
|
|
1118
|
+
- lib/hecks/projections/glossary/sentences/actions.rb
|
|
1119
|
+
- lib/hecks/projections/glossary/sentences/paths.rb
|
|
1120
|
+
- lib/hecks/projections/glossary/sentences/queries.rb
|
|
1079
1121
|
- lib/hecks/projections/glossary/sentences/value_objects.rb
|
|
1080
1122
|
- lib/hecks/projections/glossary/slugs.rb
|
|
1081
1123
|
- lib/hecks/projections/ir.rb
|
|
@@ -1083,6 +1125,7 @@ files:
|
|
|
1083
1125
|
- lib/hecks/projections/model/deviations.rb
|
|
1084
1126
|
- lib/hecks/projections/oidc.rb
|
|
1085
1127
|
- lib/hecks/projections/parser_table.rb
|
|
1128
|
+
- lib/hecks/projections/plain_english.rb
|
|
1086
1129
|
- lib/hecks/projections/reference.rb
|
|
1087
1130
|
- lib/hecks/projections/rust_vocabulary.rb
|
|
1088
1131
|
- lib/hecks/projections/rust_vocabulary/arguments.rb
|
|
@@ -1231,6 +1274,8 @@ files:
|
|
|
1231
1274
|
- lib/hecks/projections/site/table/row_builder.rb
|
|
1232
1275
|
- lib/hecks/projections/site/table/row_defaults.rb
|
|
1233
1276
|
- lib/hecks/projections/statements.rb
|
|
1277
|
+
- lib/hecks/projections/statements/actions.rb
|
|
1278
|
+
- lib/hecks/projections/statements/relationships.rb
|
|
1234
1279
|
- lib/hecks/projections/vocabulary.rb
|
|
1235
1280
|
- lib/hecks/projector.rb
|
|
1236
1281
|
- lib/hecks/projector/cli_audience.rb
|
|
@@ -1247,9 +1292,11 @@ files:
|
|
|
1247
1292
|
- lib/hecks/projector/docs_projector/behaviour.rb
|
|
1248
1293
|
- lib/hecks/projector/docs_projector/closing.rb
|
|
1249
1294
|
- lib/hecks/projector/exporter.rb
|
|
1295
|
+
- lib/hecks/projector/exporter/adapters.rb
|
|
1250
1296
|
- lib/hecks/projector/exporter/bindings.rb
|
|
1251
1297
|
- lib/hecks/projector/exporter/capability_values.rb
|
|
1252
1298
|
- lib/hecks/projector/exporter/translations.rb
|
|
1299
|
+
- lib/hecks/projector/exporter/worlds.rb
|
|
1253
1300
|
- lib/hecks/projector/ir_projector.rb
|
|
1254
1301
|
- lib/hecks/projector/narrate_projector.rb
|
|
1255
1302
|
- lib/hecks/projector/narrate_projector/commands.rb
|
|
@@ -1496,6 +1543,7 @@ files:
|
|
|
1496
1543
|
- lib/hecks/runtime/value/invariant_violation.rb
|
|
1497
1544
|
- lib/hecks/runtime/value/references.rb
|
|
1498
1545
|
- lib/hecks/runtime/value/shape_checks.rb
|
|
1546
|
+
- lib/hecks/runtime/value/unwrapping.rb
|
|
1499
1547
|
- lib/hecks/runtime/value/validation.rb
|
|
1500
1548
|
- lib/hecks/rust_build.rb
|
|
1501
1549
|
- lib/hecks/rust_build/conformance.rb
|
|
@@ -1518,6 +1566,7 @@ files:
|
|
|
1518
1566
|
- lib/hecks/rust_build/wasm.rb
|
|
1519
1567
|
- lib/hecks/rust_build/wasm_browser.rb
|
|
1520
1568
|
- lib/hecks/rust_build/write_if_changed.rb
|
|
1569
|
+
- lib/hecks/rust_format.rb
|
|
1521
1570
|
- lib/hecks/served_options.rb
|
|
1522
1571
|
- lib/hecks/site/bluebook/site.bluebook
|
|
1523
1572
|
- lib/hecks/site/bluebook/site.hecksagon
|
|
@@ -1637,9 +1686,9 @@ files:
|
|
|
1637
1686
|
- lib/rubocop/cop/hecks/symbol_string_key_mix.rb
|
|
1638
1687
|
- lib/rubocop/cop/hecks/thread_shared_ivar_mutation.rb
|
|
1639
1688
|
- lib/rubocop/cop/hecks/untyped_raise.rb
|
|
1640
|
-
- prebuilt/
|
|
1641
|
-
- prebuilt/
|
|
1642
|
-
- prebuilt/verdicts-
|
|
1689
|
+
- prebuilt/ad68f9e06c8068c2a4176b57abf3083d591d5d8980c2b3e897b97331f965b643.marshal
|
|
1690
|
+
- prebuilt/ee22ec8642c4006717ba2b80f46e5efb81de459eef9dfec043e838c0ad4fd720.marshal
|
|
1691
|
+
- prebuilt/verdicts-b69f5dcbba79c20daa0493476fa7c317004a30aa2bc3d3dc6a722ea70ae2b43b.json
|
|
1643
1692
|
- qa/settings.yml
|
|
1644
1693
|
- rust/.cargo/config.toml
|
|
1645
1694
|
- rust/.cargo/mutants.toml
|
|
@@ -1650,6 +1699,8 @@ files:
|
|
|
1650
1699
|
- rust/build/.gitignore
|
|
1651
1700
|
- rust/build/Cargo.lock
|
|
1652
1701
|
- rust/build/Cargo.toml
|
|
1702
|
+
- rust/build/clippy.toml
|
|
1703
|
+
- rust/build/src/adapters_pass.rs
|
|
1653
1704
|
- rust/build/src/binding_pass.rs
|
|
1654
1705
|
- rust/build/src/build_artifact.rs
|
|
1655
1706
|
- rust/build/src/cargo_sync.rs
|
|
@@ -1659,14 +1710,18 @@ files:
|
|
|
1659
1710
|
- rust/build/src/reserved_names.rs
|
|
1660
1711
|
- rust/build/src/resolve.rs
|
|
1661
1712
|
- rust/build/src/root.rs
|
|
1713
|
+
- rust/build/src/rustfmt.rs
|
|
1662
1714
|
- rust/build/src/seams_pass.rs
|
|
1663
1715
|
- rust/build/src/subprocess.rs
|
|
1664
1716
|
- rust/build/src/tmp.rs
|
|
1665
1717
|
- rust/build/src/translation_pass.rs
|
|
1718
|
+
- rust/build/src/world_pass.rs
|
|
1719
|
+
- rust/clippy.toml
|
|
1666
1720
|
- rust/codegen/.cargo/config.toml
|
|
1667
1721
|
- rust/codegen/.gitignore
|
|
1668
1722
|
- rust/codegen/Cargo.lock
|
|
1669
1723
|
- rust/codegen/Cargo.toml
|
|
1724
|
+
- rust/codegen/clippy.toml
|
|
1670
1725
|
- rust/codegen/src/asks.rs
|
|
1671
1726
|
- rust/codegen/src/attr.rs
|
|
1672
1727
|
- rust/codegen/src/bridging.rs
|
|
@@ -1678,6 +1733,7 @@ files:
|
|
|
1678
1733
|
- rust/codegen/src/expr_emitter.rs
|
|
1679
1734
|
- rust/codegen/src/fielded.rs
|
|
1680
1735
|
- rust/codegen/src/hecks_naming.rs
|
|
1736
|
+
- rust/codegen/src/hecks_naming_tests.rs
|
|
1681
1737
|
- rust/codegen/src/json.rs
|
|
1682
1738
|
- rust/codegen/src/json_codec.rs
|
|
1683
1739
|
- rust/codegen/src/literal.rs
|
|
@@ -1688,6 +1744,7 @@ files:
|
|
|
1688
1744
|
- rust/codegen/src/optional_pass.rs
|
|
1689
1745
|
- rust/codegen/src/ports.rs
|
|
1690
1746
|
- rust/codegen/src/prelude.rs
|
|
1747
|
+
- rust/codegen/src/presenters.rs
|
|
1691
1748
|
- rust/codegen/src/queries.rs
|
|
1692
1749
|
- rust/codegen/src/reactions.rs
|
|
1693
1750
|
- rust/codegen/src/read_models.rs
|
|
@@ -1703,10 +1760,11 @@ files:
|
|
|
1703
1760
|
- rust/host/Cargo.lock
|
|
1704
1761
|
- rust/host/Cargo.toml
|
|
1705
1762
|
- rust/host/HECKS_RELEASE
|
|
1763
|
+
- rust/host/clippy.toml
|
|
1706
1764
|
- rust/host/rds-ca-bundle.pem
|
|
1707
1765
|
- rust/host/src/api.rs
|
|
1708
|
-
- rust/host/src/approval.rs
|
|
1709
1766
|
- rust/host/src/auth.rs
|
|
1767
|
+
- rust/host/src/b64.rs
|
|
1710
1768
|
- rust/host/src/bin/expr_harness.rs
|
|
1711
1769
|
- rust/host/src/bin/lineage_harness.rs
|
|
1712
1770
|
- rust/host/src/bin/mint_harness.rs
|
|
@@ -1719,12 +1777,16 @@ files:
|
|
|
1719
1777
|
- rust/host/src/boundary_fuzz/server.rs
|
|
1720
1778
|
- rust/host/src/boundary_fuzz/web.rs
|
|
1721
1779
|
- rust/host/src/checkout.rs
|
|
1780
|
+
- rust/host/src/clock.rs
|
|
1722
1781
|
- rust/host/src/commerce_ir.rs
|
|
1782
|
+
- rust/host/src/crypto.rs
|
|
1723
1783
|
- rust/host/src/dispatch.rs
|
|
1724
1784
|
- rust/host/src/expr_json.rs
|
|
1725
1785
|
- rust/host/src/extension.rs
|
|
1726
1786
|
- rust/host/src/field_hints.rs
|
|
1727
1787
|
- rust/host/src/fuzz_support.rs
|
|
1788
|
+
- rust/host/src/host.rs
|
|
1789
|
+
- rust/host/src/http.rs
|
|
1728
1790
|
- rust/host/src/ir.rs
|
|
1729
1791
|
- rust/host/src/journal.rs
|
|
1730
1792
|
- rust/host/src/lambda_client.rs
|
|
@@ -1788,6 +1850,7 @@ files:
|
|
|
1788
1850
|
- rust/lsp/Cargo.lock
|
|
1789
1851
|
- rust/lsp/Cargo.toml
|
|
1790
1852
|
- rust/lsp/README.md
|
|
1853
|
+
- rust/lsp/clippy.toml
|
|
1791
1854
|
- rust/lsp/src/diagnostics.rs
|
|
1792
1855
|
- rust/lsp/src/json.rs
|
|
1793
1856
|
- rust/lsp/src/main.rs
|
|
@@ -1797,6 +1860,7 @@ files:
|
|
|
1797
1860
|
- rust/parser/.gitignore
|
|
1798
1861
|
- rust/parser/Cargo.lock
|
|
1799
1862
|
- rust/parser/Cargo.toml
|
|
1863
|
+
- rust/parser/clippy.toml
|
|
1800
1864
|
- rust/parser/fuzz/.gitignore
|
|
1801
1865
|
- rust/parser/fuzz/Cargo.lock
|
|
1802
1866
|
- rust/parser/fuzz/Cargo.toml
|
|
@@ -1824,7 +1888,9 @@ files:
|
|
|
1824
1888
|
- rust/parser/src/ir.rs
|
|
1825
1889
|
- rust/parser/src/keywords.rs
|
|
1826
1890
|
- rust/parser/src/lex.rs
|
|
1891
|
+
- rust/parser/src/lib.rs
|
|
1827
1892
|
- rust/parser/src/main.rs
|
|
1893
|
+
- rust/parser/src/parse/adapter.rs
|
|
1828
1894
|
- rust/parser/src/parse/aggregate.rs
|
|
1829
1895
|
- rust/parser/src/parse/chapter.rs
|
|
1830
1896
|
- rust/parser/src/parse/command.rs
|
|
@@ -1840,6 +1906,7 @@ files:
|
|
|
1840
1906
|
- rust/parser/src/parse/query.rs
|
|
1841
1907
|
- rust/parser/src/parse/read_model.rs
|
|
1842
1908
|
- rust/parser/src/parse/value_object.rs
|
|
1909
|
+
- rust/parser/src/parse/world.rs
|
|
1843
1910
|
- rust/parser/src/ruby_value.rs
|
|
1844
1911
|
- rust/src/exemplar/commands.rs
|
|
1845
1912
|
- rust/src/exemplar/constraints.rs
|
|
@@ -1881,12 +1948,14 @@ files:
|
|
|
1881
1948
|
- rust/src/kernel/orchestrate.rs
|
|
1882
1949
|
- rust/src/kernel/orchestrate_guard_tests.rs
|
|
1883
1950
|
- rust/src/kernel/pattern.rs
|
|
1951
|
+
- rust/src/kernel/present.rs
|
|
1884
1952
|
- rust/src/kernel/query_comparators.rs
|
|
1885
1953
|
- rust/src/kernel/query_ordering.rs
|
|
1886
1954
|
- rust/src/kernel/read_model.rs
|
|
1887
1955
|
- rust/src/kernel/reference_lookup.rs
|
|
1888
1956
|
- rust/src/kernel/repository.rs
|
|
1889
1957
|
- rust/src/kernel/routing.rs
|
|
1958
|
+
- rust/src/kernel/ruby_float.rs
|
|
1890
1959
|
- rust/src/kernel/vocab/aggregate_dispatch_order.rs
|
|
1891
1960
|
- rust/src/kernel/vocab/entity_dispatch_order.rs
|
|
1892
1961
|
- rust/src/kernel/vocab/field_hint.rs
|
|
@@ -1898,6 +1967,7 @@ files:
|
|
|
1898
1967
|
- rust/web/.gitignore
|
|
1899
1968
|
- rust/web/Cargo.lock
|
|
1900
1969
|
- rust/web/Cargo.toml
|
|
1970
|
+
- rust/web/clippy.toml
|
|
1901
1971
|
- rust/web/src/lib.rs
|
|
1902
1972
|
homepage: https://github.com/heckslabs/hecks
|
|
1903
1973
|
licenses:
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
# Driving adapter standing in for a Stripe webhook handler: boots Pizzas and calls
|
|
4
|
-
# Dispatcher#dispatch_port, which translates the payment into PizzaPaymentReceived.
|
|
5
|
-
#
|
|
6
|
-
# examples/pizzas/bluebook/hecksagon/mock_stripe_payment_adapter.rb
|
|
7
|
-
|
|
8
|
-
$LOAD_PATH.unshift File.expand_path("../../../../lib", __dir__)
|
|
9
|
-
|
|
10
|
-
require "hecks"
|
|
11
|
-
|
|
12
|
-
DOMAIN = File.expand_path("../..", __dir__)
|
|
13
|
-
RUNTIME = Hecks.boot(DOMAIN)
|
|
14
|
-
|
|
15
|
-
# Unique per run: identity is never minted, so a repeated name would be refused as AlreadyExists.
|
|
16
|
-
NAME = "StripeDemoMargherita-#{Process.pid}-#{rand(10_000)}".freeze
|
|
17
|
-
|
|
18
|
-
# Set the stage: an order Purchase's `given` rules will accept.
|
|
19
|
-
order = Order.create_pizza(name: { value: NAME }, pizza: { price_cents: { cents: 1200 }, size: { value: "large" } })
|
|
20
|
-
order.add_topping(topping: { value: "Basil" }, amount: { value: 3 })
|
|
21
|
-
|
|
22
|
-
puts "Before payment: #{order.status}, customer=#{order.customer_name.inspect}"
|
|
23
|
-
|
|
24
|
-
# The webhook: a real handler would verify a Stripe signature; a reference is always a bare id.
|
|
25
|
-
RUNTIME.dispatch_port(
|
|
26
|
-
"Pizzas", "Order", "PaymentGateway", "Receive",
|
|
27
|
-
flat: {
|
|
28
|
-
name: NAME,
|
|
29
|
-
customer_name: { value: "Chris" },
|
|
30
|
-
amount: { cents: 1200 }
|
|
31
|
-
}
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
sold = Order.find(NAME)
|
|
35
|
-
puts "After payment: #{sold.status}, customer=#{sold.customer_name.to_h}"
|
|
36
|
-
puts "Events: #{sold.events.map(&:name).join(", ")}"
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
require "securerandom"
|
|
2
|
-
|
|
3
|
-
require_relative "../../ports/authentication"
|
|
4
|
-
|
|
5
|
-
module Hecks
|
|
6
|
-
module Adapters
|
|
7
|
-
# Google's OIDC handshake — the `authentication` port's adapter for Google
|
|
8
|
-
# sign-in, via `oauth2` (code exchange) and `google-id-token` (verification).
|
|
9
|
-
#
|
|
10
|
-
# `oauth2`/`google-id-token` load lazily, inside the methods that use
|
|
11
|
-
# them, so a domain that never binds this adapter never needs them installed.
|
|
12
|
-
#
|
|
13
|
-
# `GOOGLE_CLIENT_ID`/`GOOGLE_CLIENT_SECRET`/`GOOGLE_REDIRECT_URI` have no
|
|
14
|
-
# defaults, on purpose: a half-configured login should refuse to boot.
|
|
15
|
-
module GoogleAuthentication
|
|
16
|
-
ISSUER = "https://accounts.google.com".freeze
|
|
17
|
-
|
|
18
|
-
module_function
|
|
19
|
-
|
|
20
|
-
# Builds the OAuth2 client for Google's token endpoints.
|
|
21
|
-
#
|
|
22
|
-
# @return [OAuth2::Client] a client configured for Google's OAuth2/OIDC endpoints
|
|
23
|
-
# @raise [KeyError] if `GOOGLE_CLIENT_ID` or `GOOGLE_CLIENT_SECRET` is unset
|
|
24
|
-
def client
|
|
25
|
-
require "oauth2"
|
|
26
|
-
OAuth2::Client.new(
|
|
27
|
-
ENV.fetch("GOOGLE_CLIENT_ID"), ENV.fetch("GOOGLE_CLIENT_SECRET"),
|
|
28
|
-
site: "https://oauth2.googleapis.com",
|
|
29
|
-
authorize_url: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
30
|
-
token_url: "/token"
|
|
31
|
-
)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# The URL to send a browser to, carrying a fresh CSRF `state` the caller
|
|
35
|
-
# must stash (typically in a session) and check again in `verify`.
|
|
36
|
-
#
|
|
37
|
-
# @return [Array(String, String)] the URL to send the browser to, and the fresh CSRF
|
|
38
|
-
# `state` embedded in it
|
|
39
|
-
# @raise [KeyError] if `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` or
|
|
40
|
-
# `GOOGLE_REDIRECT_URI` is unset
|
|
41
|
-
def authorization_url
|
|
42
|
-
state = SecureRandom.hex(24)
|
|
43
|
-
url = client.auth_code.authorize_url(
|
|
44
|
-
redirect_uri: ENV.fetch("GOOGLE_REDIRECT_URI"),
|
|
45
|
-
scope: "openid email profile",
|
|
46
|
-
state: state
|
|
47
|
-
)
|
|
48
|
-
[url, state]
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# Exchanges `code` for tokens and verifies the ID token against Google's
|
|
52
|
-
# JWKS; `email_verified` tells a caller if Google actually checked the email.
|
|
53
|
-
# @param code [String] the authorization code the provider sent back
|
|
54
|
-
# @param state [String, nil] the state parameter the provider returned; nil is refused
|
|
55
|
-
# @param expected_state [String, nil] the state `authorization_url` handed out before
|
|
56
|
-
# the redirect; nil is refused
|
|
57
|
-
# @return [Hash{Symbol => Object}] `issuer:` and `subject:` (String), `email:` (String,
|
|
58
|
-
# or nil if the token carries none), `email_verified:` (Boolean)
|
|
59
|
-
# @raise [Ports::Authentication::ValidationError] if the state check, code exchange, or
|
|
60
|
-
# ID token verification fails
|
|
61
|
-
# @raise [KeyError] if `GOOGLE_CLIENT_ID` or `GOOGLE_REDIRECT_URI` is unset, or a
|
|
62
|
-
# verified token lacks an `iss` or `sub` claim
|
|
63
|
-
def verify(code:, state:, expected_state:)
|
|
64
|
-
# Both requires happen up front: the rescue below matches
|
|
65
|
-
# GoogleIDToken::ValidationError, resolved only when caught, so
|
|
66
|
-
# requiring it lazily after an OAuth2::Error would mask the real failure.
|
|
67
|
-
require "oauth2"
|
|
68
|
-
require "google-id-token"
|
|
69
|
-
|
|
70
|
-
raise Ports::Authentication::ValidationError, "state mismatch" unless state && expected_state && state == expected_state
|
|
71
|
-
|
|
72
|
-
identity(GoogleIDToken::Validator.new.check(exchange(code), ENV.fetch("GOOGLE_CLIENT_ID")))
|
|
73
|
-
rescue OAuth2::Error, GoogleIDToken::ValidationError => e
|
|
74
|
-
raise Ports::Authentication::ValidationError, e.message
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# Exchanges an authorization code for the provider's raw ID token.
|
|
78
|
-
#
|
|
79
|
-
# @param code [String] the authorization code the provider sent back
|
|
80
|
-
# @return [String] the unverified ID token
|
|
81
|
-
# @raise [Ports::Authentication::ValidationError] if the response carries no ID token
|
|
82
|
-
def exchange(code)
|
|
83
|
-
token = client.auth_code.get_token(code, redirect_uri: ENV.fetch("GOOGLE_REDIRECT_URI"))
|
|
84
|
-
token.params["id_token"] or raise Ports::Authentication::ValidationError, "no id_token in the response"
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
# Reads the identity claims out of a verified ID token payload.
|
|
88
|
-
#
|
|
89
|
-
# @param payload [Hash{String => Object}] the verified token claims
|
|
90
|
-
# @return [Hash{Symbol => Object}] the same shape `verify` returns
|
|
91
|
-
def identity(payload)
|
|
92
|
-
{
|
|
93
|
-
issuer: payload.fetch("iss"), subject: payload.fetch("sub"),
|
|
94
|
-
email: payload["email"], email_verified: [true, "true"].include?(payload["email_verified"])
|
|
95
|
-
}
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
end
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Hecks
|
|
4
|
-
module Adapters
|
|
5
|
-
# A network-free stand-in for a Checkout-Session-style payment adapter, matching it by
|
|
6
|
-
# method shape alone. The returned URL carries `registration_id`, as webhook metadata would.
|
|
7
|
-
class MockStripeAdapter
|
|
8
|
-
# Accepts and discards the shared adapter constructor arguments; this adapter holds no
|
|
9
|
-
# state of its own.
|
|
10
|
-
#
|
|
11
|
-
# @param aggregate [Bluebook::Aggregate, nil] accepted for the shared adapter
|
|
12
|
-
# constructor shape and ignored
|
|
13
|
-
# @param settings [Hash] accepted for the shared adapter constructor shape and ignored
|
|
14
|
-
# @param root [String, nil] accepted for the shared adapter constructor shape and ignored
|
|
15
|
-
def initialize(aggregate: nil, settings: {}, root: nil); end
|
|
16
|
-
|
|
17
|
-
# Builds a fake checkout URL carrying `registration_id`, standing in for a real
|
|
18
|
-
# Checkout-Session call.
|
|
19
|
-
#
|
|
20
|
-
# @param event [Object] the record data a real adapter would read; never read here
|
|
21
|
-
# @param registration_id [String] embedded in the returned URL, never read otherwise
|
|
22
|
-
# @param success_url [String] the base URL to redirect a successful payer to
|
|
23
|
-
# @param cancel_url [String] accepted for the shared call shape and never read
|
|
24
|
-
# @return [String] `success_url` with `mock_checkout=1` and `mock_registration_id`
|
|
25
|
-
# query parameters appended
|
|
26
|
-
def create_session(event:, registration_id:, success_url:, cancel_url:)
|
|
27
|
-
separator = success_url.include?("?") ? "&" : "?"
|
|
28
|
-
"#{success_url}#{separator}mock_checkout=1&mock_registration_id=#{registration_id}"
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|