hecks 3.5.0 → 3.6.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/bluebook/hecksagon/mock_stripe_payment_adapter.rb +1 -1
- data/lib/hecks/adapters/driven/claude_code.rb +11 -7
- data/lib/hecks/adapters/driven/d1/connection.rb +90 -0
- data/lib/hecks/adapters/driven/d1.rb +48 -314
- data/lib/hecks/adapters/driven/folder.rb +20 -10
- data/lib/hecks/adapters/driven/google_authentication.rb +18 -4
- data/lib/hecks/adapters/driven/governance_authorization.rb +2 -2
- data/lib/hecks/adapters/driven/heki/journal.rb +11 -10
- data/lib/hecks/adapters/driven/heki/saga_store.rb +4 -6
- data/lib/hecks/adapters/driven/heki/sagas.rb +55 -0
- data/lib/hecks/adapters/driven/heki.rb +21 -66
- data/lib/hecks/adapters/driven/in_memory_ordering.rb +37 -12
- data/lib/hecks/adapters/driven/lambda/client.rb +1 -1
- data/lib/hecks/adapters/driven/lambda.rb +1 -8
- data/lib/hecks/adapters/driven/memory/outbox_rows.rb +76 -0
- data/lib/hecks/adapters/driven/memory/shared_elements/values.rb +117 -0
- data/lib/hecks/adapters/driven/memory/shared_elements.rb +10 -97
- data/lib/hecks/adapters/driven/memory.rb +3 -65
- data/lib/hecks/adapters/driven/postgres/codec.rb +29 -26
- data/lib/hecks/adapters/driven/postgres/ddl.rb +50 -0
- data/lib/hecks/adapters/driven/postgres/dialect.rb +93 -0
- data/lib/hecks/adapters/driven/postgres/events.rb +57 -0
- data/lib/hecks/adapters/driven/postgres/journal.rb +127 -0
- data/lib/hecks/adapters/driven/postgres/outbox.rb +39 -31
- data/lib/hecks/adapters/driven/postgres/repository.rb +190 -0
- data/lib/hecks/adapters/driven/postgres/sagas.rb +72 -0
- data/lib/hecks/adapters/driven/postgres/schema_builder.rb +13 -41
- data/lib/hecks/adapters/driven/postgres.rb +61 -528
- data/lib/hecks/adapters/driven/prism.rb +1 -1
- data/lib/hecks/adapters/driven/sql_query_builder.rb +45 -53
- data/lib/hecks/adapters/driven/sql_value_members.rb +57 -0
- data/lib/hecks/adapters/driven/sqlite/codec.rb +32 -29
- data/lib/hecks/adapters/driven/sqlite/ddl.rb +68 -0
- data/lib/hecks/adapters/driven/sqlite/dialect.rb +55 -0
- data/lib/hecks/adapters/driven/sqlite/events.rb +61 -0
- data/lib/hecks/adapters/driven/sqlite/journal.rb +125 -0
- data/lib/hecks/adapters/driven/sqlite/outbox.rb +98 -0
- data/lib/hecks/adapters/driven/sqlite/projection.rb +82 -63
- data/lib/hecks/adapters/driven/sqlite/repository.rb +146 -0
- data/lib/hecks/adapters/driven/sqlite/sagas.rb +69 -0
- data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +8 -55
- data/lib/hecks/adapters/driven/sqlite.rb +36 -513
- data/lib/hecks/adapters/driven/tenant_provisioner.rb +13 -7
- data/lib/hecks/adapters/driving/github_webhook.rb +11 -8
- data/lib/hecks/behaviors/dsl.rb +17 -12
- data/lib/hecks/behaviors/expectations/boot.rb +81 -0
- data/lib/hecks/behaviors/expectations/checks.rb +178 -0
- data/lib/hecks/behaviors/expectations/dispatching.rb +93 -0
- data/lib/hecks/behaviors/expectations/qualify.rb +81 -0
- data/lib/hecks/behaviors/expectations.rb +39 -355
- data/lib/hecks/behaviors/rspec.rb +12 -12
- data/lib/hecks/behaviors/runner.rb +20 -11
- data/lib/hecks/bench/cli.rb +16 -13
- data/lib/hecks/bench/environment.rb +1 -1
- data/lib/hecks/bench/report.rb +11 -7
- data/lib/hecks/bench/ruby_runner.rb +13 -8
- data/lib/hecks/bench/rust_runner.rb +19 -11
- data/lib/hecks/bench/suite.rb +48 -20
- data/lib/hecks/bench/workload.rb +42 -31
- data/lib/hecks/bluebook/aggregate.rb +15 -21
- data/lib/hecks/bluebook/assembly/aggregate_assembly.rb +18 -21
- data/lib/hecks/bluebook/assembly/build.rb +12 -7
- data/lib/hecks/bluebook/assembly/contracts/read_models.rb +70 -0
- data/lib/hecks/bluebook/assembly/contracts/rules.rb +84 -0
- data/lib/hecks/bluebook/assembly/contracts/sagas.rb +109 -0
- data/lib/hecks/bluebook/assembly/contracts/structure.rb +91 -0
- data/lib/hecks/bluebook/assembly/contracts.rb +9 -319
- data/lib/hecks/bluebook/assembly/marks.rb +9 -8
- data/lib/hecks/bluebook/attribute.rb +13 -10
- data/lib/hecks/bluebook/behaviour/aggregate.rb +10 -3
- data/lib/hecks/bluebook/behaviour/read_model.rb +26 -13
- data/lib/hecks/bluebook/chapter.rb +22 -14
- data/lib/hecks/bluebook/command.rb +14 -18
- data/lib/hecks/bluebook/domain_port.rb +11 -8
- data/lib/hecks/bluebook/dsl/aggregate_builder/correction_sealing.rb +78 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder/draining.rb +74 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder/query_field_sealing.rb +105 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder/query_sealing.rb +121 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder/relationships.rb +128 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder/rules.rb +84 -0
- data/lib/hecks/bluebook/dsl/aggregate_builder/sealing.rb +61 -249
- data/lib/hecks/bluebook/dsl/aggregate_builder.rb +51 -285
- data/lib/hecks/bluebook/dsl/attribute_collector/identity_resolution.rb +113 -0
- data/lib/hecks/bluebook/dsl/attribute_collector.rb +58 -117
- data/lib/hecks/bluebook/dsl/binding_proxy.rb +24 -19
- data/lib/hecks/bluebook/dsl/bluebook_builder/pending_givens.rb +109 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/correlation_keys.rb +105 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/event_shapes.rb +126 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/hop_tails.rb +79 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/projected_fields.rb +76 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/provisions.rb +65 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/query_hops.rb +123 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/references.rb +112 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation/with_projections.rb +126 -0
- data/lib/hecks/bluebook/dsl/bluebook_builder/validation.rb +34 -595
- data/lib/hecks/bluebook/dsl/bluebook_builder.rb +18 -107
- data/lib/hecks/bluebook/dsl/command_builder/implicit_attributes.rb +132 -0
- data/lib/hecks/bluebook/dsl/command_builder/mutations.rb +190 -0
- data/lib/hecks/bluebook/dsl/command_builder/owner.rb +22 -0
- data/lib/hecks/bluebook/dsl/command_builder/rules.rb +57 -0
- data/lib/hecks/bluebook/dsl/command_builder.rb +60 -360
- data/lib/hecks/bluebook/dsl/domain_port_builder.rb +19 -13
- data/lib/hecks/bluebook/dsl/entity_builder/rules.rb +96 -0
- data/lib/hecks/bluebook/dsl/entity_builder/scope.rb +25 -0
- data/lib/hecks/bluebook/dsl/entity_builder/sealing.rb +94 -0
- data/lib/hecks/bluebook/dsl/entity_builder.rb +35 -169
- data/lib/hecks/bluebook/dsl/generic_dispatch.rb +53 -24
- data/lib/hecks/bluebook/dsl/hecksagon_builder/chapter_scope.rb +133 -0
- data/lib/hecks/bluebook/dsl/hecksagon_builder.rb +3 -97
- data/lib/hecks/bluebook/dsl/identity_declaration.rb +73 -73
- data/lib/hecks/bluebook/dsl/lifecycle_builder.rb +7 -3
- data/lib/hecks/bluebook/dsl/need_word.rb +1 -1
- data/lib/hecks/bluebook/dsl/port_operation_builder.rb +34 -29
- data/lib/hecks/bluebook/dsl/process_manager_builder.rb +57 -41
- data/lib/hecks/bluebook/dsl/query_builder.rb +12 -15
- data/lib/hecks/bluebook/dsl/read_model_builder/sealing.rb +116 -0
- data/lib/hecks/bluebook/dsl/read_model_builder.rb +25 -102
- data/lib/hecks/bluebook/dsl/rule_reference.rb +26 -12
- data/lib/hecks/bluebook/dsl/translation_builder.rb +24 -14
- data/lib/hecks/bluebook/dsl/value_object_builder.rb +29 -19
- data/lib/hecks/bluebook/dsl/word_gate.rb +34 -27
- data/lib/hecks/bluebook/entity.rb +13 -17
- data/lib/hecks/bluebook/expression/ast_json/emitters.rb +93 -0
- data/lib/hecks/bluebook/expression/ast_json/emitters.rb-e +88 -0
- data/lib/hecks/bluebook/expression/ast_json.rb +49 -76
- data/lib/hecks/bluebook/expression/ast_reader.rb +95 -28
- data/lib/hecks/bluebook/expression/canonical_form.rb +6 -26
- data/lib/hecks/bluebook/expression/evaluator/parser.rb +62 -0
- data/lib/hecks/bluebook/expression/evaluator/scanning.rb +122 -0
- data/lib/hecks/bluebook/expression/evaluator.rb +11 -111
- data/lib/hecks/bluebook/expression/resolver/block_predicates.rb +28 -44
- data/lib/hecks/bluebook/expression/resolver/lookups.rb +77 -0
- data/lib/hecks/bluebook/expression/resolver/operations.rb +78 -0
- data/lib/hecks/bluebook/expression/resolver/parsing.rb +110 -0
- data/lib/hecks/bluebook/expression/resolver/scanning.rb +139 -0
- data/lib/hecks/bluebook/expression/resolver/values.rb +115 -0
- data/lib/hecks/bluebook/expression/resolver.rb +16 -414
- data/lib/hecks/bluebook/{hexagon.rb → hecksagon.rb} +22 -14
- data/lib/hecks/bluebook/keyword_fields.rb +42 -0
- data/lib/hecks/bluebook/meta_validator/adapter_judge.rb +7 -6
- data/lib/hecks/bluebook/meta_validator/judge/cells.rb +99 -0
- data/lib/hecks/bluebook/meta_validator/judge/dispatching.rb +111 -0
- data/lib/hecks/bluebook/meta_validator/judge/identity.rb +108 -0
- data/lib/hecks/bluebook/meta_validator/judge/walking.rb +141 -0
- data/lib/hecks/bluebook/meta_validator/judge.rb +31 -376
- data/lib/hecks/bluebook/meta_validator/modes.rb +137 -0
- data/lib/hecks/bluebook/meta_validator/plan/category.rb +44 -0
- data/lib/hecks/bluebook/meta_validator/plan/verbs.rb +73 -0
- data/lib/hecks/bluebook/meta_validator/plan.rb +38 -122
- data/lib/hecks/bluebook/meta_validator/readings/fields.rb +100 -0
- data/lib/hecks/bluebook/meta_validator/readings.rb +10 -95
- data/lib/hecks/bluebook/meta_validator/reconstruction/heads.rb +89 -0
- data/lib/hecks/bluebook/meta_validator/reconstruction/reading.rb +96 -0
- data/lib/hecks/bluebook/meta_validator/reconstruction.rb +25 -151
- data/lib/hecks/bluebook/meta_validator/shapes/helpers.rb +83 -0
- data/lib/hecks/bluebook/meta_validator/shapes.rb +8 -75
- data/lib/hecks/bluebook/meta_validator/syntax_boot/disk_cache.rb +77 -0
- data/lib/hecks/bluebook/meta_validator/syntax_boot.rb +31 -95
- data/lib/hecks/bluebook/meta_validator/translation_judge/rules.rb +74 -0
- data/lib/hecks/bluebook/meta_validator/translation_judge.rb +15 -65
- data/lib/hecks/bluebook/meta_validator/verdict_cache/tagging.rb +63 -0
- data/lib/hecks/bluebook/meta_validator/verdict_cache.rb +22 -43
- data/lib/hecks/bluebook/meta_validator/world_judge.rb +8 -4
- data/lib/hecks/bluebook/meta_validator.rb +59 -175
- data/lib/hecks/bluebook/model_check/lifecycle_checks.rb +122 -0
- data/lib/hecks/bluebook/model_check/policy_checks.rb +129 -0
- data/lib/hecks/bluebook/model_check/saga_checks.rb +134 -0
- data/lib/hecks/bluebook/model_check/verbs.rb +69 -0
- data/lib/hecks/bluebook/model_check.rb +73 -413
- data/lib/hecks/bluebook/pattern_subset/refusals.rb +54 -0
- data/lib/hecks/bluebook/pattern_subset/scan.rb +58 -0
- data/lib/hecks/bluebook/pattern_subset.rb +93 -134
- data/lib/hecks/bluebook/process_manager.rb +10 -9
- data/lib/hecks/bluebook/project_discovery.rb +10 -7
- data/lib/hecks/bluebook/project_register.rb +42 -41
- data/lib/hecks/bluebook/query.rb +19 -12
- data/lib/hecks/bluebook/read_model.rb +41 -39
- data/lib/hecks/bluebook/smoke_test.rb +51 -36
- data/lib/hecks/bluebook/synthesizer.rb +13 -5
- data/lib/hecks/bluebook/translation.rb +12 -12
- data/lib/hecks/bluebook.rb +1 -1
- data/lib/hecks/chapters.rb +32 -16
- data/lib/hecks/cli/behaviors.rb +22 -15
- data/lib/hecks/cli/check_era.rb +2 -2
- data/lib/hecks/cli/command_table.rb +72 -0
- data/lib/hecks/cli/console.rb +10 -7
- data/lib/hecks/cli/deploy_template_diff.rb +22 -9
- data/lib/hecks/cli/document.rb +14 -10
- data/lib/hecks/cli/domain_stub.rb +1 -1
- data/lib/hecks/cli/domain_writer.rb +1 -1
- data/lib/hecks/cli/expression_projection.rb +8 -6
- data/lib/hecks/cli/follow.rb +10 -4
- data/lib/hecks/cli/interview_aggregate.rb +132 -0
- data/lib/hecks/cli/interview_draft.rb +16 -200
- data/lib/hecks/cli/interview_record.rb +130 -0
- data/lib/hecks/cli/interview_run.rb +19 -8
- data/lib/hecks/cli/interview_session/agent_state.rb +70 -0
- data/lib/hecks/cli/interview_session/catalog.rb +76 -0
- data/lib/hecks/cli/interview_session/manual_findings.rb +48 -0
- data/lib/hecks/cli/interview_session/proposals.rb +90 -0
- data/lib/hecks/cli/interview_session.rb +8 -205
- data/lib/hecks/cli/interview_shape.rb +13 -6
- data/lib/hecks/cli/ir.rb +8 -11
- data/lib/hecks/cli/launcher_words.rb +168 -0
- data/lib/hecks/cli/model_check/examination.rb +93 -0
- data/lib/hecks/cli/model_check/sources.rb +57 -0
- data/lib/hecks/cli/model_check.rb +28 -134
- data/lib/hecks/cli/project_cli/launcher_source.rb +177 -0
- data/lib/hecks/cli/project_cli/templates.rb +106 -0
- data/lib/hecks/cli/project_cli.rb +57 -236
- data/lib/hecks/cli/project_diagrams.rb +26 -4
- data/lib/hecks/cli/project_glossary.rb +19 -9
- data/lib/hecks/cli/refresh_rspec_runtime_baseline.rb +29 -13
- data/lib/hecks/cli/release.rb +29 -22
- data/lib/hecks/cli/release_gem.rb +12 -6
- data/lib/hecks/cli/rspec_io_parallel_files.rb +87 -30
- data/lib/hecks/cli/rspec_shard_files.rb +24 -9
- data/lib/hecks/cli/run.rb +25 -44
- data/lib/hecks/cli/run_expectations.rb +63 -0
- data/lib/hecks/cli/seed_semantics_corpus.rb +37 -17
- data/lib/hecks/cli/smoke_http/checks.rb +66 -0
- data/lib/hecks/cli/smoke_http/settings.rb +63 -0
- data/lib/hecks/cli/smoke_http/transport.rb +45 -0
- data/lib/hecks/cli/smoke_http.rb +8 -142
- data/lib/hecks/cli/smoke_test.rb +18 -4
- data/lib/hecks/cli/stores.rb +7 -4
- data/lib/hecks/cli/stress_concurrency_specs/reporting.rb +44 -0
- data/lib/hecks/cli/stress_concurrency_specs/usage.rb +28 -0
- data/lib/hecks/cli/stress_concurrency_specs.rb +82 -80
- data/lib/hecks/cli.rb +32 -208
- data/lib/hecks/codemod/runner.rb +92 -0
- data/lib/hecks/codemod/sweep.rb +94 -0
- data/lib/hecks/codemod.rb +22 -165
- data/lib/hecks/corpus/routes.rb +34 -0
- data/lib/hecks/corpus/rust.rb +193 -0
- data/lib/hecks/corpus/sources.rb +46 -0
- data/lib/hecks/corpus.rb +28 -265
- data/lib/hecks/doc/reference/coverage.rb +70 -0
- data/lib/hecks/doc/reference/harvester.rb +55 -0
- data/lib/hecks/doc/reference/readme.rb +89 -0
- data/lib/hecks/doc/reference/rendering.rb +149 -0
- data/lib/hecks/doc/reference.rb +14 -273
- data/lib/hecks/doors/cli_door/nesting.rb +34 -0
- data/lib/hecks/doors/cli_door/shorthand.rb +85 -0
- data/lib/hecks/doors/cli_door.rb +23 -95
- data/lib/hecks/doors/cli_runner/answers.rb +138 -0
- data/lib/hecks/doors/cli_runner/resolution.rb +146 -0
- data/lib/hecks/doors/cli_runner/settling.rb +115 -0
- data/lib/hecks/doors/cli_runner/streaming.rb +90 -0
- data/lib/hecks/doors/cli_runner/suggestions.rb +43 -0
- data/lib/hecks/doors/cli_runner.rb +12 -336
- data/lib/hecks/doors/command_request.rb +42 -31
- data/lib/hecks/doors/handle.rb +32 -30
- data/lib/hecks/doors/launcher_options.rb +62 -7
- data/lib/hecks/doors/mcp_door/properties.rb +47 -0
- data/lib/hecks/doors/mcp_door/tool_calls.rb +113 -0
- data/lib/hecks/doors/mcp_door/tool_definitions/auditing.rb +51 -0
- data/lib/hecks/doors/mcp_door/tool_definitions/calling.rb +69 -0
- data/lib/hecks/doors/mcp_door/tool_definitions/reading.rb +97 -0
- data/lib/hecks/doors/mcp_door/tool_definitions.rb +15 -0
- data/lib/hecks/doors/mcp_door.rb +55 -301
- data/lib/hecks/doors/mcp_door_scope/argument_policy.rb +92 -0
- data/lib/hecks/doors/mcp_door_scope/env_problems.rb +55 -0
- data/lib/hecks/doors/mcp_door_scope/presenter.rb +78 -0
- data/lib/hecks/doors/mcp_door_scope.rb +16 -172
- data/lib/hecks/doors/ruby_door/aggregate_door.rb +1 -1
- data/lib/hecks/doors/ruby_door/chapter.rb +33 -16
- data/lib/hecks/doors/ruby_door.rb +14 -11
- data/lib/hecks/doors/usage_cache.rb +14 -8
- data/lib/hecks/doors.rb +10 -4
- data/lib/hecks/embryonaut_bluebook/manifest.rb +11 -3
- data/lib/hecks/embryonaut_bluebook/registry/changelog.rb +26 -0
- data/lib/hecks/embryonaut_bluebook/registry/versions.rb +27 -0
- data/lib/hecks/embryonaut_bluebook/registry.rb +27 -37
- data/lib/hecks/embryonaut_bluebook/vendor/acceptance.rb +37 -0
- data/lib/hecks/embryonaut_bluebook/vendor.rb +22 -36
- data/lib/hecks/embryonaut_bluebook/vendor_cli.rb +9 -6
- data/lib/hecks/embryonaut_bluebook.rb +16 -11
- data/lib/hecks/engine_agreement.rb +24 -17
- data/lib/hecks/forms/app/commands.rb +98 -0
- data/lib/hecks/forms/app/queries.rb +62 -0
- data/lib/hecks/forms/app/records.rb +67 -0
- data/lib/hecks/forms/app/responses.rb +46 -0
- data/lib/hecks/forms/app.rb +33 -221
- data/lib/hecks/forms/banking_presentation.rb +5 -0
- data/lib/hecks/forms/command_form_renderer.rb +55 -14
- data/lib/hecks/forms/field_controls.rb +95 -0
- data/lib/hecks/forms/field_renderer.rb +34 -88
- data/lib/hecks/forms/field_shape.rb +9 -34
- data/lib/hecks/forms/html.rb +1 -1
- data/lib/hecks/forms/index_renderer.rb +14 -9
- data/lib/hecks/forms/page.rb +2 -106
- data/lib/hecks/forms/page_assets.rb +88 -0
- data/lib/hecks/forms/page_script.rb +28 -0
- data/lib/hecks/forms/params.rb +17 -8
- data/lib/hecks/forms/query_form_renderer.rb +11 -7
- data/lib/hecks/forms/record_renderer.rb +28 -19
- data/lib/hecks/forms/reference_options.rb +1 -1
- data/lib/hecks/forms/text_shape.rb +40 -0
- data/lib/hecks/fqn.rb +64 -32
- data/lib/hecks/framework.rb +10 -3
- data/lib/hecks/freezer.rb +10 -1
- data/lib/hecks/fuzzing/bounded_exhaustive_expressions/fragments.rb +61 -0
- data/lib/hecks/fuzzing/bounded_exhaustive_expressions/productions.rb +217 -0
- data/lib/hecks/fuzzing/bounded_exhaustive_expressions.rb +5 -194
- data/lib/hecks/fuzzing/combination_miner.rb +23 -12
- data/lib/hecks/fuzzing/concurrent_dispatch/racing.rb +64 -0
- data/lib/hecks/fuzzing/concurrent_dispatch/world_copy.rb +66 -0
- data/lib/hecks/fuzzing/concurrent_dispatch.rb +31 -107
- data/lib/hecks/fuzzing/coverage_campaign.rb +7 -7
- data/lib/hecks/fuzzing/differential/wire_comparison.rb +74 -0
- data/lib/hecks/fuzzing/differential.rb +59 -84
- data/lib/hecks/fuzzing/domain_generator/block_rendering.rb +70 -0
- data/lib/hecks/fuzzing/domain_generator/builder/attribute_shapes.rb +105 -0
- data/lib/hecks/fuzzing/domain_generator/builder/shapes.rb +97 -0
- data/lib/hecks/fuzzing/domain_generator/builder/wiring.rb +128 -0
- data/lib/hecks/fuzzing/domain_generator/builder.rb +105 -0
- data/lib/hecks/fuzzing/domain_generator/pruning.rb +90 -0
- data/lib/hecks/fuzzing/domain_generator/removals.rb +62 -0
- data/lib/hecks/fuzzing/domain_generator/rendering.rb +94 -0
- data/lib/hecks/fuzzing/domain_generator/tokens.rb +38 -0
- data/lib/hecks/fuzzing/domain_generator.rb +7 -555
- data/lib/hecks/fuzzing/era_boundary.rb +34 -24
- data/lib/hecks/fuzzing/form_census.rb +18 -8
- data/lib/hecks/fuzzing/generated_domain_check.rb +23 -11
- data/lib/hecks/fuzzing/isolated_boot/copying.rb +62 -0
- data/lib/hecks/fuzzing/isolated_boot/postgres_scratch.rb +133 -0
- data/lib/hecks/fuzzing/isolated_boot/worlds.rb +102 -0
- data/lib/hecks/fuzzing/isolated_boot.rb +25 -252
- data/lib/hecks/fuzzing/persistence_parity.rb +5 -5
- data/lib/hecks/fuzzing/properties/aggregation_recompute.rb +121 -0
- data/lib/hecks/fuzzing/properties/catalog.rb +138 -0
- data/lib/hecks/fuzzing/properties/corrections.rb +23 -20
- data/lib/hecks/fuzzing/properties/dispatch_and_mutations.rb +64 -185
- data/lib/hecks/fuzzing/properties/group_by_recompute.rb +69 -0
- data/lib/hecks/fuzzing/properties/guards.rb +76 -108
- data/lib/hecks/fuzzing/properties/invariants_and_aggregation.rb +66 -227
- data/lib/hecks/fuzzing/properties/lifecycle_and_replay.rb +46 -35
- data/lib/hecks/fuzzing/properties/mutation_recompute.rb +162 -0
- data/lib/hecks/fuzzing/properties/outbox.rb +41 -24
- data/lib/hecks/fuzzing/properties/piece_invariants.rb +61 -0
- data/lib/hecks/fuzzing/properties/policy_wiring.rb +140 -0
- data/lib/hecks/fuzzing/properties/query_rows.rb +67 -0
- data/lib/hecks/fuzzing/properties/querying.rb +69 -90
- data/lib/hecks/fuzzing/properties/references.rb +100 -0
- data/lib/hecks/fuzzing/properties/tenant_scope.rb +84 -0
- data/lib/hecks/fuzzing/properties.rb +6 -119
- data/lib/hecks/fuzzing/qa_settings.rb +23 -17
- data/lib/hecks/fuzzing/replay/fan_out.rb +78 -0
- data/lib/hecks/fuzzing/replay/filters.rb +72 -0
- data/lib/hecks/fuzzing/replay/guard_check.rb +88 -0
- data/lib/hecks/fuzzing/replay/mutation_trace.rb +117 -0
- data/lib/hecks/fuzzing/replay/observation.rb +60 -0
- data/lib/hecks/fuzzing/replay/read_only_steps.rb +84 -0
- data/lib/hecks/fuzzing/replay/session.rb +151 -0
- data/lib/hecks/fuzzing/replay.rb +35 -442
- data/lib/hecks/fuzzing/rust_gap_manifest.rb +3 -4
- data/lib/hecks/fuzzing/self_consistency/saga_redelivery.rb +133 -0
- data/lib/hecks/fuzzing/self_consistency/sagas.rb +93 -0
- data/lib/hecks/fuzzing/self_consistency/value_objects.rb +87 -0
- data/lib/hecks/fuzzing/self_consistency.rb +8 -213
- data/lib/hecks/fuzzing/sequence_generator/adversary/argument_mutations.rb +116 -0
- data/lib/hecks/fuzzing/sequence_generator/adversary/caller_draw.rb +68 -0
- data/lib/hecks/fuzzing/sequence_generator/adversary/identity_mutations.rb +62 -0
- data/lib/hecks/fuzzing/sequence_generator/adversary/precedence_mutations.rb +126 -0
- data/lib/hecks/fuzzing/sequence_generator/adversary.rb +23 -283
- data/lib/hecks/fuzzing/sequence_generator/argument_drawing.rb +78 -0
- data/lib/hecks/fuzzing/sequence_generator/catalog.rb +69 -53
- data/lib/hecks/fuzzing/sequence_generator/identity_shaping.rb +85 -0
- data/lib/hecks/fuzzing/sequence_generator/outcome_tracker.rb +20 -16
- data/lib/hecks/fuzzing/sequence_generator/picker.rb +12 -6
- data/lib/hecks/fuzzing/sequence_generator/prefixing.rb +45 -0
- data/lib/hecks/fuzzing/sequence_generator/query_binding.rb +19 -8
- data/lib/hecks/fuzzing/sequence_generator/step_builder.rb +43 -144
- data/lib/hecks/fuzzing/sequence_generator.rb +65 -63
- data/lib/hecks/fuzzing/shrinker.rb +33 -29
- data/lib/hecks/fuzzing/target_capabilities.rb +10 -4
- data/lib/hecks/fuzzing/value_generator.rb +27 -17
- data/lib/hecks/gate/stages.yml +10 -0
- data/lib/hecks/grammar/evolve/arguments.rb +90 -0
- data/lib/hecks/grammar/evolve/keywords.rb +81 -0
- data/lib/hecks/grammar/evolve/seeds.rb +172 -0
- data/lib/hecks/grammar/evolve.rb +22 -263
- data/lib/hecks/grammar/operators.rb +111 -0
- data/lib/hecks/grammar.rb +53 -126
- data/lib/hecks/hecks/adapters/bluebook_report.rb +6 -6
- data/lib/hecks/hecks/adapters/codebase/codemods.rb +1 -1
- data/lib/hecks/hecks/adapters/codebase/corpus_tasks.rb +23 -9
- data/lib/hecks/hecks/adapters/codebase/language/edits.rb +75 -0
- data/lib/hecks/hecks/adapters/codebase/language.rb +30 -72
- data/lib/hecks/hecks/adapters/codebase/promotion/candidates.rb +54 -0
- data/lib/hecks/hecks/adapters/codebase/promotion/gate.rb +50 -0
- data/lib/hecks/hecks/adapters/codebase/promotion/move.rb +70 -0
- data/lib/hecks/hecks/adapters/codebase/promotion/standing.rb +88 -0
- data/lib/hecks/hecks/adapters/codebase/promotion/watch.rb +83 -0
- data/lib/hecks/hecks/adapters/codebase/promotion.rb +115 -0
- data/lib/hecks/hecks/adapters/codebase/publishing.rb +31 -12
- data/lib/hecks/hecks/adapters/codebase/regeneration.rb +43 -6
- data/lib/hecks/hecks/adapters/codebase/release_facts.rb +16 -5
- data/lib/hecks/hecks/adapters/codebase/source_tree.rb +9 -1
- data/lib/hecks/hecks/adapters/codebase/sqlite_fixture.rb +1 -1
- data/lib/hecks/hecks/adapters/codebase/style.rb +1 -1
- data/lib/hecks/hecks/adapters/codebase/test_runner.rb +11 -5
- data/lib/hecks/hecks/adapters/codebase/test_suite.rb +27 -8
- data/lib/hecks/hecks/adapters/console_capture.rb +21 -17
- data/lib/hecks/hecks/adapters/cost_explorer.rb +11 -6
- data/lib/hecks/hecks/adapters/deploy_plans.rb +3 -3
- data/lib/hecks/hecks/adapters/deploy_toolchain/answers.rb +141 -0
- data/lib/hecks/hecks/adapters/deploy_toolchain/scripts.rb +95 -0
- data/lib/hecks/hecks/adapters/deploy_toolchain/statuses.rb +74 -0
- data/lib/hecks/hecks/adapters/deploy_toolchain.rb +21 -239
- data/lib/hecks/hecks/adapters/finding_github.rb +2 -2
- data/lib/hecks/hecks/adapters/first_admin.rb +22 -8
- data/lib/hecks/hecks/adapters/git.rb +18 -5
- data/lib/hecks/hecks/adapters/git_refs.rb +144 -0
- data/lib/hecks/hecks/adapters/github_rulesets.rb +126 -0
- data/lib/hecks/hecks/adapters/host_http.rb +16 -6
- data/lib/hecks/hecks/adapters/in_process_boot.rb +9 -5
- data/lib/hecks/hecks/adapters/in_process_operations/tailing.rb +61 -0
- data/lib/hecks/hecks/adapters/in_process_operations.rb +33 -35
- data/lib/hecks/hecks/adapters/journal_store/changes.rb +21 -15
- data/lib/hecks/hecks/adapters/journal_store/edge_audit.rb +29 -12
- data/lib/hecks/hecks/adapters/journal_store/readings/attestation.rb +52 -0
- data/lib/hecks/hecks/adapters/journal_store/readings/scaffolding.rb +52 -0
- data/lib/hecks/hecks/adapters/journal_store/readings.rb +5 -62
- data/lib/hecks/hecks/adapters/local_files.rb +27 -10
- data/lib/hecks/hecks/adapters/pg_admin/ownership.rb +115 -0
- data/lib/hecks/hecks/adapters/pg_admin.rb +14 -87
- data/lib/hecks/hecks/adapters/process_pool.rb +54 -22
- data/lib/hecks/hecks/adapters/rust_toolchain.rb +12 -4
- data/lib/hecks/hecks/adapters/site_toolchain.rb +16 -7
- data/lib/hecks/hecks/adapters/terminal.rb +13 -9
- data/lib/hecks/hecks/codebase.bluebook +322 -5
- data/lib/hecks/hecks/hecks.hecksagon +16 -0
- data/lib/hecks/hecks/hecks.world +10 -2
- data/lib/hecks/kernel_capabilities/templates.rb +92 -0
- data/lib/hecks/kernel_capabilities.rb +18 -85
- data/lib/hecks/language/bluebook/vocabulary.bluebook +43 -1
- data/lib/hecks/literal/item_splitter.rb +50 -0
- data/lib/hecks/literal.rb +29 -38
- data/lib/hecks/mcp_stdio_guard.rb +8 -8
- data/lib/hecks/naming.rb +9 -3
- data/lib/hecks/persistence_legacy_fixture/postgres_stores.rb +81 -0
- data/lib/hecks/persistence_legacy_fixture/regenerate.rb +26 -66
- data/lib/hecks/persistence_legacy_fixture.rb +13 -10
- data/lib/hecks/ports/access_control.rb +13 -10
- data/lib/hecks/ports/agent/answers.rb +2 -2
- data/lib/hecks/ports/agent.rb +13 -10
- data/lib/hecks/ports/authentication.rb +13 -10
- data/lib/hecks/ports/authorization.rb +13 -10
- data/lib/hecks/ports/clock.rb +13 -10
- data/lib/hecks/ports/extraction.rb +13 -12
- data/lib/hecks/ports/identity_assignment.rb +13 -10
- data/lib/hecks/ports/identity_generation.rb +13 -10
- data/lib/hecks/ports/identity_resolution.rb +13 -10
- data/lib/hecks/ports/key_vault.rb +13 -10
- data/lib/hecks/ports/persistence/append_only.rb +5 -5
- data/lib/hecks/ports/persistence/binding_policy.rb +33 -9
- data/lib/hecks/ports/persistence/codec_boundary.rb +22 -11
- data/lib/hecks/ports/persistence/constants.rb +10 -0
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +18 -16
- data/lib/hecks/ports/persistence/plugins/era/era_guard/shape_diff.rb +27 -18
- data/lib/hecks/ports/persistence/plugins/era/era_guard.rb +52 -23
- data/lib/hecks/ports/persistence/plugins/era/era_tamper.rb +14 -8
- data/lib/hecks/ports/persistence/plugins/era/expected_era.rb +17 -6
- data/lib/hecks/ports/persistence/plugins/era/lineage/coverage.rb +58 -0
- data/lib/hecks/ports/persistence/plugins/era/lineage/rewrite.rb +130 -0
- data/lib/hecks/ports/persistence/plugins/era/lineage/rules.rb +25 -0
- data/lib/hecks/ports/persistence/plugins/era/lineage.rb +20 -180
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/boot.rb +41 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/class_methods.rb +105 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/dialect.rb +137 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/events.rb +25 -28
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/head_writes.rb +62 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/journal.rb +128 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/base_sql.rb +74 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/chain_sql.rb +169 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/domain_rename.rb +91 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/era_integrity.rb +99 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/era_store.rb +0 -73
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/field_cache.rb +55 -39
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/head_compiler.rb +51 -222
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/merge_writes.rb +120 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/mint_transaction.rb +85 -60
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/provisioning.rb +97 -181
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/resumable_backfill.rb +19 -19
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/sql_templates.rb +88 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/tail_merge.rb +77 -118
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/transform_installer.rb +3 -117
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/transform_sql.rb +116 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage.rb +3 -1
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/context.rb +38 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/coverage_check.rb +43 -25
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/era_resolver.rb +62 -38
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/merge_coordinator.rb +21 -16
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/minter.rb +66 -86
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/refusals.rb +75 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager.rb +27 -9
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/query_phases.rb +63 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/sagas.rb +78 -0
- data/lib/hecks/ports/persistence/plugins/era/postgres_era.rb +28 -482
- data/lib/hecks/ports/persistence/plugins/era/translation/approval_file.rb +40 -12
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_one.rb +22 -15
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_two.rb +39 -19
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/unfed_report.rb +16 -16
- data/lib/hecks/ports/persistence/plugins/era/translation/rule_compiler.rb +48 -25
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/differ.rb +60 -99
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/path_diff.rb +57 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/renderer.rb +21 -11
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold/writer.rb +13 -4
- data/lib/hecks/ports/persistence/postgres_dump/connection.rb +4 -2
- data/lib/hecks/ports/persistence/postgres_dump.rb +13 -7
- data/lib/hecks/ports/persistence/repository_factory.rb +35 -11
- data/lib/hecks/ports/persistence/state_codec.rb +10 -0
- data/lib/hecks/ports/persistence.rb +1 -10
- data/lib/hecks/ports/projection.rb +34 -21
- data/lib/hecks/ports/query/in_memory.rb +16 -8
- data/lib/hecks/projection_files/expression_tables.rb +64 -0
- data/lib/hecks/projection_files/texts.rb +67 -0
- data/lib/hecks/projection_files.rb +19 -103
- data/lib/hecks/projections/bootstrap_table.rb +43 -29
- data/lib/hecks/projections/deploy/bastion_lines.rb +32 -0
- data/lib/hecks/projections/deploy/box/access.rb +73 -0
- data/lib/hecks/projections/deploy/box/caddy.rb +87 -0
- data/lib/hecks/projections/deploy/box/compose.rb +70 -0
- data/lib/hecks/projections/deploy/box/hosting.rb +4 -105
- data/lib/hecks/projections/deploy/box/hosting_parts.rb +97 -0
- data/lib/hecks/projections/deploy/box/hosting_settings.rb +1 -1
- data/lib/hecks/projections/deploy/box/roll_recipe.rb +1 -1
- data/lib/hecks/projections/deploy/box/roll_scripts.rb +135 -0
- data/lib/hecks/projections/deploy/box/settings/checks.rb +38 -0
- data/lib/hecks/projections/deploy/box/settings/containers.rb +123 -0
- data/lib/hecks/projections/deploy/box/settings/origin.rb +56 -0
- data/lib/hecks/projections/deploy/box/settings/patterns.rb +43 -0
- data/lib/hecks/projections/deploy/box/settings/types.rb +72 -0
- data/lib/hecks/projections/deploy/box/settings.rb +58 -263
- data/lib/hecks/projections/deploy/box/stack_yaml.rb +107 -0
- data/lib/hecks/projections/deploy/box/templates/MIGRATION.md.tmpl +39 -0
- data/lib/hecks/projections/deploy/box/templates/Makefile.tmpl +24 -0
- data/lib/hecks/projections/deploy/box/templates/deploy-box.sh.tmpl +41 -1
- data/lib/hecks/projections/deploy/box/templates/deploy-service.services-roll.part +2 -1
- data/lib/hecks/projections/deploy/box/templates/deploy-service.taskdef-roll.part +2 -1
- data/lib/hecks/projections/deploy/box/templates/deploy-usage-services.tmpl +4 -0
- data/lib/hecks/projections/deploy/box/templates/deploy-usage-taskdef.tmpl +5 -0
- data/lib/hecks/projections/deploy/box/templates/ecr-repository.yaml.tmpl +9 -0
- data/lib/hecks/projections/deploy/box/templates/mode-summary-services.tmpl +2 -0
- data/lib/hecks/projections/deploy/box/templates/mode-summary-taskdef.tmpl +4 -0
- data/lib/hecks/projections/deploy/box/templates/services-block.tmpl +9 -0
- data/lib/hecks/projections/deploy/box/templates/tunnel-egress.yaml.tmpl +11 -0
- data/lib/hecks/projections/deploy/box/templates/writable-secrets.yaml.tmpl +7 -0
- data/lib/hecks/projections/deploy/box.rb +33 -493
- data/lib/hecks/projections/deploy/fargate/assembly.rb +13 -142
- data/lib/hecks/projections/deploy/fargate/cdn/behaviors.rb +76 -0
- data/lib/hecks/projections/deploy/fargate/cdn/lines.rb +112 -0
- data/lib/hecks/projections/deploy/fargate/cdn/options.rb +85 -0
- data/lib/hecks/projections/deploy/fargate/cdn.rb +23 -215
- data/lib/hecks/projections/deploy/fargate/check.rb +16 -6
- data/lib/hecks/projections/deploy/fargate/containers/definition_lines.rb +61 -0
- data/lib/hecks/projections/deploy/fargate/containers/reading.rb +86 -0
- data/lib/hecks/projections/deploy/fargate/containers/rendering.rb +132 -0
- data/lib/hecks/projections/deploy/fargate/containers/routing.rb +93 -0
- data/lib/hecks/projections/deploy/fargate/containers.rb +10 -286
- data/lib/hecks/projections/deploy/fargate/extras/reading.rb +90 -0
- data/lib/hecks/projections/deploy/fargate/extras/rendering.rb +81 -0
- data/lib/hecks/projections/deploy/fargate/extras.rb +9 -158
- data/lib/hecks/projections/deploy/fargate/monitoring/alarms.rb +115 -0
- data/lib/hecks/projections/deploy/fargate/monitoring/reading.rb +84 -0
- data/lib/hecks/projections/deploy/fargate/monitoring/topic.rb +59 -0
- data/lib/hecks/projections/deploy/fargate/monitoring/warmer.rb +90 -0
- data/lib/hecks/projections/deploy/fargate/monitoring/warmer_roles.rb +76 -0
- data/lib/hecks/projections/deploy/fargate/monitoring.rb +14 -348
- data/lib/hecks/projections/deploy/fargate/sections.rb +115 -0
- data/lib/hecks/projections/deploy/fargate/settings/ids.rb +55 -0
- data/lib/hecks/projections/deploy/fargate/settings/tuning.rb +77 -0
- data/lib/hecks/projections/deploy/fargate/settings.rb +17 -104
- data/lib/hecks/projections/deploy/fargate/stack/blocks.rb +91 -0
- data/lib/hecks/projections/deploy/fargate/stack/readers.rb +87 -0
- data/lib/hecks/projections/deploy/fargate/stack/recipes.rb +106 -0
- data/lib/hecks/projections/deploy/fargate/stack.rb +146 -0
- data/lib/hecks/projections/deploy/fargate/task_sections.rb +56 -0
- data/lib/hecks/projections/deploy/fargate/yaml.rb +1 -1
- data/lib/hecks/projections/deploy/fargate.rb +51 -756
- data/lib/hecks/projections/deploy/lambda/pii.rb +49 -0
- data/lib/hecks/projections/deploy/lambda/stack/blocks.rb +118 -0
- data/lib/hecks/projections/deploy/lambda/stack/checks.rb +64 -0
- data/lib/hecks/projections/deploy/lambda/stack/deploy_chain.rb +119 -0
- data/lib/hecks/projections/deploy/lambda/stack/readers.rb +62 -0
- data/lib/hecks/projections/deploy/lambda/stack/reading.rb +170 -0
- data/lib/hecks/projections/deploy/lambda/stack/reading_web.rb +53 -0
- data/lib/hecks/projections/deploy/lambda/stack/recipes.rb +112 -0
- data/lib/hecks/projections/deploy/lambda/stack/web.rb +57 -0
- data/lib/hecks/projections/deploy/lambda/stack.rb +54 -0
- data/lib/hecks/projections/deploy/lambda.rb +77 -1885
- data/lib/hecks/projections/deploy/preview/access_yaml.rb +8 -74
- data/lib/hecks/projections/deploy/preview/containers.rb +18 -7
- data/lib/hecks/projections/deploy/preview/routing_yaml.rb +15 -87
- data/lib/hecks/projections/deploy/preview/settings.rb +7 -4
- data/lib/hecks/projections/deploy/preview/task_yaml.rb +42 -106
- data/lib/hecks/projections/deploy/preview/template.rb +11 -106
- data/lib/hecks/projections/deploy/preview/yaml_text.rb +1 -1
- data/lib/hecks/projections/deploy/scripts/hosting.mk.tmpl +1 -1
- data/lib/hecks/projections/deploy/scripts/settings.rb +14 -6
- data/lib/hecks/projections/deploy/scripts.rb +11 -9
- data/lib/hecks/projections/deploy/shared/rows.rb +48 -0
- data/lib/hecks/projections/deploy/shared.rb +89 -449
- data/lib/hecks/projections/deploy/smoke.rb +15 -10
- data/lib/hecks/projections/deploy/template_diff/comparer.rb +21 -147
- data/lib/hecks/projections/deploy/template_diff/normalizer.rb +60 -0
- data/lib/hecks/projections/deploy/template_diff/value_diff.rb +136 -0
- data/lib/hecks/projections/deploy/template_diff.rb +8 -3
- data/lib/hecks/projections/deploy/templates/fargate/Dockerfile.tmpl +28 -0
- data/lib/hecks/projections/deploy/templates/fargate/Makefile.tmpl +63 -0
- data/lib/hecks/projections/deploy/templates/fargate/always_params.tmpl +4 -0
- data/lib/hecks/projections/deploy/templates/fargate/deploy_plain.tmpl +1 -0
- data/lib/hecks/projections/deploy/templates/fargate/deploy_shared.tmpl +11 -0
- data/lib/hecks/projections/deploy/templates/fargate/mint_era_own.tmpl +44 -0
- data/lib/hecks/projections/deploy/templates/fargate/mint_era_shared.tmpl +8 -0
- data/lib/hecks/projections/deploy/templates/fargate/missing_owner.tmpl +9 -0
- data/lib/hecks/projections/deploy/templates/fargate/oauth_params.tmpl +7 -0
- data/lib/hecks/projections/deploy/templates/fargate/oauth_task_env.tmpl +4 -0
- data/lib/hecks/projections/deploy/templates/fargate/oauth_task_policy.tmpl +7 -0
- data/lib/hecks/projections/deploy/templates/fargate/owning_params.tmpl +33 -0
- data/lib/hecks/projections/deploy/templates/fargate/template.yaml.tmpl +281 -0
- data/lib/hecks/projections/deploy/templates/lambda/Makefile.tmpl +218 -0
- data/lib/hecks/projections/deploy/templates/lambda/aurora_depends.tmpl +18 -0
- data/lib/hecks/projections/deploy/templates/lambda/build_dispatch_none.tmpl +10 -0
- data/lib/hecks/projections/deploy/templates/lambda/build_pg.tmpl +15 -0
- data/lib/hecks/projections/deploy/templates/lambda/build_plain.tmpl +2 -0
- data/lib/hecks/projections/deploy/templates/lambda/build_web.tmpl +11 -0
- data/lib/hecks/projections/deploy/templates/lambda/env_blind_guard.tmpl +4 -0
- data/lib/hecks/projections/deploy/templates/lambda/mint_era_own.tmpl +122 -0
- data/lib/hecks/projections/deploy/templates/lambda/mint_era_shared.tmpl +47 -0
- data/lib/hecks/projections/deploy/templates/lambda/missing_owner.tmpl +9 -0
- data/lib/hecks/projections/deploy/templates/lambda/nat_comment_oauth.tmpl +14 -0
- data/lib/hecks/projections/deploy/templates/lambda/nat_comment_plain.tmpl +3 -0
- data/lib/hecks/projections/deploy/templates/lambda/oauth_note.tmpl +8 -0
- data/lib/hecks/projections/deploy/templates/lambda/params_oauth.tmpl +13 -0
- data/lib/hecks/projections/deploy/templates/lambda/params_shared.tmpl +33 -0
- data/lib/hecks/projections/deploy/templates/lambda/pg_native.tmpl +71 -0
- data/lib/hecks/projections/deploy/templates/lambda/pii_oac.tmpl +8 -0
- data/lib/hecks/projections/deploy/templates/lambda/pii_permission.tmpl +8 -0
- data/lib/hecks/projections/deploy/templates/lambda/pii_resources.tmpl +116 -0
- data/lib/hecks/projections/deploy/templates/lambda/predeploy_bridge.tmpl +30 -0
- data/lib/hecks/projections/deploy/templates/lambda/predeploy_bridge_oauth.tmpl +12 -0
- data/lib/hecks/projections/deploy/templates/lambda/predeploy_bridge_plain.tmpl +7 -0
- data/lib/hecks/projections/deploy/templates/lambda/rename_schema_own.tmpl +93 -0
- data/lib/hecks/projections/deploy/templates/lambda/rename_schema_shared.tmpl +7 -0
- data/lib/hecks/projections/deploy/templates/lambda/rust_oauth_env.tmpl +17 -0
- data/lib/hecks/projections/deploy/templates/lambda/rust_oauth_policy.tmpl +16 -0
- data/lib/hecks/projections/deploy/templates/lambda/rust_session_secret.tmpl +13 -0
- data/lib/hecks/projections/deploy/templates/lambda/samconfig.toml.tmpl +12 -0
- data/lib/hecks/projections/deploy/templates/lambda/shared_note.tmpl +6 -0
- data/lib/hecks/projections/deploy/templates/lambda/sync_oauth.tmpl +23 -0
- data/lib/hecks/projections/deploy/templates/lambda/template.yaml.tmpl +187 -0
- data/lib/hecks/projections/deploy/templates/lambda/translation_own.tmpl +46 -0
- data/lib/hecks/projections/deploy/templates/lambda/translation_shared.tmpl +2 -0
- data/lib/hecks/projections/deploy/templates/lambda/web_function.tmpl +207 -0
- data/lib/hecks/projections/deploy/templates/lambda/web_google_oauth_env.tmpl +12 -0
- data/lib/hecks/projections/deploy/templates/lambda/web_no_oauth_env.tmpl +7 -0
- data/lib/hecks/projections/deploy/templates/lambda/web_oauth_policy.tmpl +4 -0
- data/lib/hecks/projections/deploy/templates/lambda/webhook_secret_resource.tmpl +20 -0
- data/lib/hecks/projections/deploy/templates/preview/alb.tmpl +8 -0
- data/lib/hecks/projections/deploy/templates/preview/alb_security_group.tmpl +11 -0
- data/lib/hecks/projections/deploy/templates/preview/assume_role.tmpl +6 -0
- data/lib/hecks/projections/deploy/templates/preview/base_parameters.tmpl +24 -0
- data/lib/hecks/projections/deploy/templates/preview/cluster.tmpl +4 -0
- data/lib/hecks/projections/deploy/templates/preview/container_secret.tmpl +9 -0
- data/lib/hecks/projections/deploy/templates/preview/db_init_script.sh.tmpl +23 -0
- data/lib/hecks/projections/deploy/templates/preview/db_init_secrets.tmpl +5 -0
- data/lib/hecks/projections/deploy/templates/preview/db_init_task.tmpl +39 -0
- data/lib/hecks/projections/deploy/templates/preview/desired_count.tmpl +5 -0
- data/lib/hecks/projections/deploy/templates/preview/distribution.tmpl +24 -0
- data/lib/hecks/projections/deploy/templates/preview/execution_role.tmpl +16 -0
- data/lib/hecks/projections/deploy/templates/preview/header.tmpl +16 -0
- data/lib/hecks/projections/deploy/templates/preview/ingress.tmpl +8 -0
- data/lib/hecks/projections/deploy/templates/preview/listener.tmpl +9 -0
- data/lib/hecks/projections/deploy/templates/preview/listener_rule.tmpl +11 -0
- data/lib/hecks/projections/deploy/templates/preview/log_group.tmpl +5 -0
- data/lib/hecks/projections/deploy/templates/preview/log_options.tmpl +5 -0
- data/lib/hecks/projections/deploy/templates/preview/outputs.tmpl +14 -0
- data/lib/hecks/projections/deploy/templates/preview/service.tmpl +17 -0
- data/lib/hecks/projections/deploy/templates/preview/session_secret.tmpl +11 -0
- data/lib/hecks/projections/deploy/templates/preview/target_group.tmpl +9 -0
- data/lib/hecks/projections/deploy/templates/preview/task_definition.tmpl +15 -0
- data/lib/hecks/projections/deploy/templates/preview/task_role.tmpl +22 -0
- data/lib/hecks/projections/deploy/templates/shared/aurora_db.tmpl +52 -0
- data/lib/hecks/projections/deploy/templates/shared/bastion.tmpl +74 -0
- data/lib/hecks/projections/deploy/templates/shared/bastion_own_public.tmpl +41 -0
- data/lib/hecks/projections/deploy/templates/shared/bastion_reuse_public.tmpl +10 -0
- data/lib/hecks/projections/deploy/templates/shared/nat_gateway.tmpl +102 -0
- data/lib/hecks/projections/deploy/templates/shared/oauth_egress.tmpl +17 -0
- data/lib/hecks/projections/deploy/templates/shared/plain_db.tmpl +16 -0
- data/lib/hecks/projections/deploy/templates/shared/vpc_and_database.tmpl +67 -0
- data/lib/hecks/projections/deploy/text_template.rb +35 -0
- data/lib/hecks/projections/diagrams/dispatch.rb +114 -0
- data/lib/hecks/projections/diagrams/statecharts.rb +59 -0
- data/lib/hecks/projections/diagrams/structure.rb +114 -0
- data/lib/hecks/projections/diagrams.rb +33 -256
- data/lib/hecks/projections/glossary/entries.rb +140 -0
- data/lib/hecks/projections/glossary/html/page.rb +96 -0
- data/lib/hecks/projections/glossary/html/parser.rb +66 -0
- data/lib/hecks/projections/glossary/html/sections.rb +78 -0
- data/lib/hecks/projections/glossary/html.rb +7 -179
- data/lib/hecks/projections/glossary/index.rb +45 -0
- data/lib/hecks/projections/glossary/markdown.rb +22 -11
- data/lib/hecks/projections/glossary/mermaid.rb +44 -31
- data/lib/hecks/projections/glossary/sensitivity.rb +7 -4
- data/lib/hecks/projections/glossary/sentences/value_objects.rb +77 -0
- data/lib/hecks/projections/glossary/sentences.rb +42 -81
- data/lib/hecks/projections/glossary/slugs.rb +33 -0
- data/lib/hecks/projections/glossary.rb +22 -190
- data/lib/hecks/projections/model.rb +20 -14
- data/lib/hecks/projections/rust_vocabulary/arguments/support.rb +33 -0
- data/lib/hecks/projections/rust_vocabulary/arguments.rb +171 -0
- data/lib/hecks/projections/rust_vocabulary/enum_body.rb +114 -0
- data/lib/hecks/projections/rust_vocabulary/tests.rb +144 -0
- data/lib/hecks/projections/rust_vocabulary.rb +24 -293
- data/lib/hecks/projections/site/admin.rb +15 -9
- data/lib/hecks/projections/site/admin_cms/templates/membership.rb +115 -0
- data/lib/hecks/projections/site/admin_cms/templates/session_strategy.rb +90 -0
- data/lib/hecks/projections/site/admin_cms/templates/sso.rb +101 -0
- data/lib/hecks/projections/site/admin_cms/templates/sso_tail.rb +54 -0
- data/lib/hecks/projections/site/admin_cms/templates/users.rb +83 -0
- data/lib/hecks/projections/site/admin_cms/templates.rb +14 -369
- data/lib/hecks/projections/site/admin_cms.rb +15 -9
- data/lib/hecks/projections/site/edge/behaviours.rb +10 -6
- data/lib/hecks/projections/site/edge/checks.rb +30 -80
- data/lib/hecks/projections/site/edge/findings.rb +28 -0
- data/lib/hecks/projections/site/edge/route_checks.rb +110 -0
- data/lib/hecks/projections/site/edge/row_reader.rb +52 -0
- data/lib/hecks/projections/site/edge/rules.rb +28 -26
- data/lib/hecks/projections/site/edge.rb +20 -31
- data/lib/hecks/projections/site/live_edge.rb +9 -7
- data/lib/hecks/projections/site/payload/fields/definitions.rb +90 -0
- data/lib/hecks/projections/site/payload/fields/readers.rb +69 -0
- data/lib/hecks/projections/site/payload/fields.rb +14 -111
- data/lib/hecks/projections/site/payload/lifecycle/text.rb +84 -0
- data/lib/hecks/projections/site/payload/lifecycle/text_tail.rb +106 -0
- data/lib/hecks/projections/site/payload/lifecycle.rb +8 -166
- data/lib/hecks/projections/site/payload/model.rb +22 -22
- data/lib/hecks/projections/site/payload/specs/wire.rb +69 -0
- data/lib/hecks/projections/site/payload/specs.rb +24 -68
- data/lib/hecks/projections/site/payload_driver.rb +19 -17
- data/lib/hecks/projections/site/root_rows.rb +12 -4
- data/lib/hecks/projections/site/routes_ts/helpers.rb +79 -0
- data/lib/hecks/projections/site/routes_ts/listings.rb +75 -0
- data/lib/hecks/projections/site/routes_ts/navigation.rb +79 -0
- data/lib/hecks/projections/site/routes_ts.rb +27 -175
- data/lib/hecks/projections/site/site_admin/access.rb +104 -0
- data/lib/hecks/projections/site/site_admin/session.rb +127 -0
- data/lib/hecks/projections/site/site_admin.rb +12 -219
- data/lib/hecks/projections/site/site_cdn.rb +12 -7
- data/lib/hecks/projections/site/site_host/dockerfile.rb +75 -0
- data/lib/hecks/projections/site/site_host/templates.rb +7 -63
- data/lib/hecks/projections/site/site_root/workflow.rb +65 -0
- data/lib/hecks/projections/site/site_root.rb +3 -54
- data/lib/hecks/projections/site/table/checks.rb +28 -57
- data/lib/hecks/projections/site/table/link_builder.rb +14 -5
- data/lib/hecks/projections/site/table/navigation_checks.rb +75 -0
- data/lib/hecks/projections/site/table/row_builder.rb +31 -53
- data/lib/hecks/projections/site/table/row_defaults.rb +65 -0
- data/lib/hecks/projections/site/table.rb +9 -5
- data/lib/hecks/projections/vocabulary.rb +34 -31
- data/lib/hecks/projector/cli_audience.rb +42 -0
- data/lib/hecks/projector/cli_projector/claims.rb +149 -0
- data/lib/hecks/projector/cli_projector/command_help.rb +65 -0
- data/lib/hecks/projector/cli_projector/command_specs.rb +133 -0
- data/lib/hecks/projector/cli_projector/listing.rb +100 -0
- data/lib/hecks/projector/cli_projector/option_specs.rb +116 -0
- data/lib/hecks/projector/cli_projector/query_specs.rb +67 -0
- data/lib/hecks/projector/cli_projector/usage.rb +101 -0
- data/lib/hecks/projector/cli_projector.rb +15 -532
- data/lib/hecks/projector/docs_projector/attributes.rb +78 -0
- data/lib/hecks/projector/docs_projector/behaviour.rb +127 -0
- data/lib/hecks/projector/docs_projector/closing.rb +40 -0
- data/lib/hecks/projector/docs_projector.rb +58 -192
- data/lib/hecks/projector/exporter/bindings.rb +174 -0
- data/lib/hecks/projector/exporter/translations.rb +127 -0
- data/lib/hecks/projector/exporter.rb +8 -279
- data/lib/hecks/projector/narrate_projector/commands.rb +108 -0
- data/lib/hecks/projector/narrate_projector/reactions.rb +33 -0
- data/lib/hecks/projector/narrate_projector.rb +60 -160
- data/lib/hecks/projector.rb +22 -13
- data/lib/hecks/quality_control/adapters/agent_profile.rb +25 -16
- data/lib/hecks/quality_control/adapters/github_checks.rb +42 -6
- data/lib/hecks/quality_control/adapters/github_ci_webhook.rb +1 -1
- data/lib/hecks/quality_control/adapters/github_issues.rb +22 -10
- data/lib/hecks/quality_control/cli/qa_discover_external_domains/parsing.rb +54 -0
- data/lib/hecks/quality_control/cli/qa_discover_external_domains/reporting.rb +44 -0
- data/lib/hecks/quality_control/cli/qa_discover_external_domains/scanning.rb +119 -0
- data/lib/hecks/quality_control/cli/qa_discover_external_domains.rb +28 -155
- data/lib/hecks/quality_control/cli/qa_domain_novelty/verdict.rb +76 -0
- data/lib/hecks/quality_control/cli/qa_domain_novelty.rb +33 -66
- data/lib/hecks/quality_control/cli/qa_generated_domains/arguments.rb +62 -0
- data/lib/hecks/quality_control/cli/qa_generated_domains/blueprints.rb +45 -0
- data/lib/hecks/quality_control/cli/qa_generated_domains/evaluation.rb +107 -0
- data/lib/hecks/quality_control/cli/qa_generated_domains/promotion.rb +107 -0
- data/lib/hecks/quality_control/cli/qa_generated_domains/reporting.rb +97 -0
- data/lib/hecks/quality_control/cli/qa_generated_domains/shrinking.rb +70 -0
- data/lib/hecks/quality_control/cli/qa_generated_domains.rb +43 -327
- data/lib/hecks/quality_control/cli/qa_log_bug/arguments.rb +55 -0
- data/lib/hecks/quality_control/cli/qa_log_bug/proof.rb +65 -0
- data/lib/hecks/quality_control/cli/qa_log_bug.rb +18 -81
- data/lib/hecks/quality_control/cli/qa_mine_combinations/arguments.rb +54 -0
- data/lib/hecks/quality_control/cli/qa_mine_combinations/booting.rb +96 -0
- data/lib/hecks/quality_control/cli/qa_mine_combinations.rb +45 -109
- data/lib/hecks/quality_control/cli/qa_open_pr/arguments.rb +55 -0
- data/lib/hecks/quality_control/cli/qa_open_pr/recording.rb +79 -0
- data/lib/hecks/quality_control/cli/qa_open_pr/rules.rb +122 -0
- data/lib/hecks/quality_control/cli/qa_open_pr.rb +41 -200
- data/lib/hecks/quality_control/cli/qa_postgres_migrate/copying.rb +45 -0
- data/lib/hecks/quality_control/cli/qa_postgres_migrate/reporting.rb +33 -0
- data/lib/hecks/quality_control/cli/qa_postgres_migrate.rb +37 -63
- data/lib/hecks/quality_control/cli/qa_postgres_role/ownership.rb +57 -0
- data/lib/hecks/quality_control/cli/qa_postgres_role.rb +66 -71
- data/lib/hecks/quality_control/cli/qa_pr_check/checking.rb +118 -0
- data/lib/hecks/quality_control/cli/qa_pr_check/reporting.rb +54 -0
- data/lib/hecks/quality_control/cli/qa_pr_check.rb +28 -145
- data/lib/hecks/quality_control/cli/qa_seed_angles/seed.rb +80 -0
- data/lib/hecks/quality_control/cli/qa_seed_angles.rb +13 -86
- data/lib/hecks/quality_control/cli/qa_sweep/all_mode/children.rb +80 -0
- data/lib/hecks/quality_control/cli/qa_sweep/all_mode/report.rb +125 -0
- data/lib/hecks/quality_control/cli/qa_sweep/all_mode.rb +63 -193
- data/lib/hecks/quality_control/cli/qa_sweep/checks/boundary.rb +92 -0
- data/lib/hecks/quality_control/cli/qa_sweep/checks/engines.rb +92 -0
- data/lib/hecks/quality_control/cli/qa_sweep/checks/seeds.rb +86 -0
- data/lib/hecks/quality_control/cli/qa_sweep/checks/shrinking.rb +69 -0
- data/lib/hecks/quality_control/cli/qa_sweep/checks.rb +10 -248
- data/lib/hecks/quality_control/cli/qa_sweep/conclusion.rb +60 -0
- data/lib/hecks/quality_control/cli/qa_sweep/depth.rb +61 -0
- data/lib/hecks/quality_control/cli/qa_sweep/dials.rb +26 -13
- data/lib/hecks/quality_control/cli/qa_sweep/finding_report/shrunk.rb +42 -0
- data/lib/hecks/quality_control/cli/qa_sweep/finding_report.rb +40 -41
- data/lib/hecks/quality_control/cli/qa_sweep/parsing/validation.rb +70 -0
- data/lib/hecks/quality_control/cli/qa_sweep/parsing.rb +35 -65
- data/lib/hecks/quality_control/cli/qa_sweep/release_mode.rb +41 -22
- data/lib/hecks/quality_control/cli/qa_sweep/scratch.rb +67 -0
- data/lib/hecks/quality_control/cli/qa_sweep/seat.rb +94 -0
- data/lib/hecks/quality_control/cli/qa_sweep/seed_loop.rb +149 -0
- data/lib/hecks/quality_control/cli/qa_sweep/target_setup.rb +115 -0
- data/lib/hecks/quality_control/cli/qa_sweep.rb +22 -445
- data/lib/hecks/quality_control/cli/qa_tick/output.rb +107 -0
- data/lib/hecks/quality_control/cli/qa_tick/preflight.rb +95 -0
- data/lib/hecks/quality_control/cli/qa_tick.rb +42 -175
- data/lib/hecks/query_ir/formatting.rb +86 -0
- data/lib/hecks/query_ir/rules.rb +132 -0
- data/lib/hecks/query_ir/touchpoints.rb +104 -0
- data/lib/hecks/query_ir.rb +33 -281
- data/lib/hecks/query_ir_mcp/tools.rb +68 -0
- data/lib/hecks/query_ir_mcp.rb +27 -71
- data/lib/hecks/query_specification/common/comparison.rb +25 -5
- data/lib/hecks/query_specification/common/dsl.rb +1 -1
- data/lib/hecks/query_specification/common/null_policy.rb +9 -6
- data/lib/hecks/query_specification/common/options.rb +21 -14
- data/lib/hecks/query_specification/field_path.rb +5 -2
- data/lib/hecks/query_specification/hop_path.rb +15 -18
- data/lib/hecks/release/lane.rb +22 -0
- data/lib/hecks/release/runner/clean_tree.rb +2 -2
- data/lib/hecks/release/runner/commands.rb +1 -1
- data/lib/hecks/release/runner/options.rb +82 -0
- data/lib/hecks/release/runner/preflight.rb +12 -7
- data/lib/hecks/release/runner/publishing.rb +86 -0
- data/lib/hecks/release/runner/tagger.rb +8 -3
- data/lib/hecks/release/runner.rb +40 -156
- data/lib/hecks/rendering.rb +13 -9
- data/lib/hecks/router/door.rb +37 -0
- data/lib/hecks/router/namespace_installer.rb +45 -83
- data/lib/hecks/router/options_proxy.rb +44 -0
- data/lib/hecks/runtime/adapter_lookup.rb +45 -24
- data/lib/hecks/runtime/command_interpreter/argument_gate.rb +16 -8
- data/lib/hecks/runtime/command_interpreter/delegation.rb +116 -0
- data/lib/hecks/runtime/command_interpreter/enforcement.rb +38 -0
- data/lib/hecks/runtime/command_interpreter/hydration.rb +139 -0
- data/lib/hecks/runtime/command_interpreter/list_mutations.rb +98 -0
- data/lib/hecks/runtime/command_interpreter/mutation_applier.rb +67 -114
- data/lib/hecks/runtime/command_interpreter/persisting.rb +96 -0
- data/lib/hecks/runtime/command_interpreter.rb +57 -352
- data/lib/hecks/runtime/command_rules/admissibility.rb +64 -147
- data/lib/hecks/runtime/command_rules/arithmetic.rb +13 -72
- data/lib/hecks/runtime/command_rules/authorization.rb +9 -9
- data/lib/hecks/runtime/command_rules/emission.rb +13 -14
- data/lib/hecks/runtime/command_rules/guard_state.rb +49 -0
- data/lib/hecks/runtime/command_rules/invariants.rb +84 -0
- data/lib/hecks/runtime/command_rules/operands.rb +88 -0
- data/lib/hecks/runtime/command_rules/references.rb +59 -57
- data/lib/hecks/runtime/command_rules/tenant_boundary.rb +69 -0
- data/lib/hecks/runtime/dependency_planning/analyzer.rb +90 -0
- data/lib/hecks/runtime/dependency_planning/expression_reads.rb +73 -0
- data/lib/hecks/runtime/dependency_planning/mutation_analysis.rb +89 -0
- data/lib/hecks/runtime/dependency_planning/rule_analysis.rb +82 -0
- data/lib/hecks/runtime/dependency_planning.rb +3 -250
- data/lib/hecks/runtime/dispatcher/queries.rb +62 -0
- data/lib/hecks/runtime/dispatcher/result.rb +55 -0
- data/lib/hecks/runtime/dispatcher/routing.rb +107 -0
- data/lib/hecks/runtime/dispatcher.rb +64 -209
- data/lib/hecks/runtime/entity_element/location.rb +124 -0
- data/lib/hecks/runtime/entity_element/mutations.rb +150 -0
- data/lib/hecks/runtime/entity_element.rb +5 -177
- data/lib/hecks/runtime/entity_interpreter/enforcement.rb +51 -0
- data/lib/hecks/runtime/entity_interpreter/locating.rb +62 -0
- data/lib/hecks/runtime/entity_interpreter/resolution.rb +42 -0
- data/lib/hecks/runtime/entity_interpreter/saving.rb +49 -0
- data/lib/hecks/runtime/entity_interpreter.rb +45 -164
- data/lib/hecks/runtime/identity.rb +15 -9
- data/lib/hecks/runtime/instance.rb +11 -7
- data/lib/hecks/runtime/interpreting.rb +16 -8
- data/lib/hecks/runtime/invocation.rb +3 -155
- data/lib/hecks/runtime/invocation_builder.rb +132 -0
- data/lib/hecks/runtime/invocation_facts.rb +87 -0
- data/lib/hecks/runtime/loader/boot_steps.rb +96 -0
- data/lib/hecks/runtime/loader/described.rb +27 -0
- data/lib/hecks/runtime/loader.rb +27 -114
- data/lib/hecks/runtime/outbox/consumer_runner.rb +40 -0
- data/lib/hecks/runtime/outbox/fanout.rb +82 -0
- data/lib/hecks/runtime/outbox/relay.rb +149 -0
- data/lib/hecks/runtime/outbox.rb +3 -214
- data/lib/hecks/runtime/policy_interpreter/arguments.rb +67 -0
- data/lib/hecks/runtime/policy_interpreter/fan_out.rb +96 -0
- data/lib/hecks/runtime/policy_interpreter.rb +22 -137
- data/lib/hecks/runtime/port_operation_interpreter.rb +18 -17
- data/lib/hecks/runtime/query_interpreter/arguments.rb +51 -0
- data/lib/hecks/runtime/query_interpreter/entity_rows.rb +82 -0
- data/lib/hecks/runtime/query_interpreter/outside_answer.rb +89 -0
- data/lib/hecks/runtime/query_interpreter.rb +43 -191
- data/lib/hecks/runtime/reaction_invocation/identities.rb +92 -0
- data/lib/hecks/runtime/reaction_invocation/target_resolution.rb +88 -0
- data/lib/hecks/runtime/reaction_invocation.rb +66 -183
- data/lib/hecks/runtime/reaction_outcome.rb +7 -3
- data/lib/hecks/runtime/read_model_interpreter/head_ordering.rb +49 -0
- data/lib/hecks/runtime/read_model_interpreter/reductions.rb +123 -0
- data/lib/hecks/runtime/read_model_interpreter/shaping.rb +100 -0
- data/lib/hecks/runtime/read_model_interpreter.rb +71 -214
- data/lib/hecks/runtime/reference_hop.rb +11 -11
- data/lib/hecks/runtime/refusal_wording.rb +11 -8
- data/lib/hecks/runtime/registry/chapter_verification.rb +84 -0
- data/lib/hecks/runtime/registry/declarations.rb +17 -0
- data/lib/hecks/runtime/registry/durability_warnings.rb +71 -0
- data/lib/hecks/runtime/registry/hecksagon_rules.rb +124 -0
- data/lib/hecks/runtime/registry/merging.rb +49 -0
- data/lib/hecks/runtime/registry/providers.rb +139 -0
- data/lib/hecks/runtime/registry/query_verification.rb +144 -0
- data/lib/hecks/runtime/registry/read_repository.rb +61 -0
- data/lib/hecks/runtime/registry/runtime_state.rb +27 -0
- data/lib/hecks/runtime/registry/saga_persistence.rb +12 -8
- data/lib/hecks/runtime/registry/verification.rb +45 -389
- data/lib/hecks/runtime/registry/world_defaults.rb +3 -3
- data/lib/hecks/runtime/registry.rb +58 -296
- data/lib/hecks/runtime/remote_dispatcher.rb +47 -31
- data/lib/hecks/runtime/saga_interpreter/compensation.rb +90 -0
- data/lib/hecks/runtime/saga_interpreter/correlation.rb +19 -10
- data/lib/hecks/runtime/saga_interpreter/delivery.rb +147 -0
- data/lib/hecks/runtime/saga_interpreter/lifecycle.rb +63 -0
- data/lib/hecks/runtime/saga_interpreter/transitions.rb +112 -0
- data/lib/hecks/runtime/saga_interpreter.rb +41 -320
- data/lib/hecks/runtime/tenant_check.rb +14 -9
- data/lib/hecks/runtime/value/admission.rb +28 -19
- data/lib/hecks/runtime/value/coercion.rb +55 -404
- data/lib/hecks/runtime/value/entity_list_coercion.rb +27 -29
- data/lib/hecks/runtime/value/field_checks.rb +57 -100
- data/lib/hecks/runtime/value/flags.rb +65 -0
- data/lib/hecks/runtime/value/identifiers.rb +64 -0
- data/lib/hecks/runtime/value/references.rb +195 -0
- data/lib/hecks/runtime/value/shape_checks.rb +61 -0
- data/lib/hecks/runtime/value/validation.rb +125 -0
- data/lib/hecks/runtime/value.rb +18 -6
- data/lib/hecks/rust_build/conformance/surface.rb +75 -0
- data/lib/hecks/rust_build/conformance.rb +27 -59
- data/lib/hecks/rust_build/conformance_fuzz.rb +26 -15
- data/lib/hecks/rust_build/coverage.rb +32 -104
- data/lib/hecks/rust_build/coverage_parts/expected.rb +68 -0
- data/lib/hecks/rust_build/coverage_parts/printer.rb +75 -0
- data/lib/hecks/rust_build/host.rb +23 -13
- data/lib/hecks/rust_build/kernel_input.rb +19 -12
- data/lib/hecks/rust_build/native_build.rb +19 -15
- data/lib/hecks/rust_build/project_rust/domain_loader.rb +75 -0
- data/lib/hecks/rust_build/project_rust/root_mod/notes.rb +66 -0
- data/lib/hecks/rust_build/project_rust/root_mod.rb +22 -55
- data/lib/hecks/rust_build/project_rust/target_ir.rb +74 -0
- data/lib/hecks/rust_build/project_rust.rb +21 -89
- data/lib/hecks/rust_build/wasm.rb +11 -4
- data/lib/hecks/rust_build/wasm_browser.rb +7 -7
- data/lib/hecks/rust_build/write_if_changed.rb +3 -6
- data/lib/hecks/rust_build.rb +7 -3
- data/lib/hecks/storehouse/audit.rb +106 -0
- data/lib/hecks/storehouse/callers.rb +73 -0
- data/lib/hecks/storehouse/dispatching.rb +149 -0
- data/lib/hecks/storehouse/introspection.rb +145 -0
- data/lib/hecks/storehouse/querying.rb +78 -0
- data/lib/hecks/storehouse.rb +43 -451
- data/lib/hecks/tickets/bluebook/tickets.bluebook +29 -0
- data/lib/hecks/tools/argument_gate_matrix/dispatching.rb +69 -0
- data/lib/hecks/tools/argument_gate_matrix/rows.rb +121 -0
- data/lib/hecks/tools/argument_gate_matrix/violations.rb +108 -0
- data/lib/hecks/tools/argument_gate_matrix.rb +43 -212
- data/lib/hecks/tools/ci_gate_decision.rb +21 -14
- data/lib/hecks/tools/ci_gates.rb +40 -26
- data/lib/hecks/tools/comment_style/baseline.rb +41 -0
- data/lib/hecks/tools/comment_style/caps_words.rb +104 -0
- data/lib/hecks/tools/comment_style/cli.rb +121 -0
- data/lib/hecks/tools/comment_style/dictionary.rb +60 -0
- data/lib/hecks/tools/comment_style/fixing.rb +119 -0
- data/lib/hecks/tools/comment_style/long_blocks.rb +51 -0
- data/lib/hecks/tools/comment_style/masking.rb +94 -0
- data/lib/hecks/tools/comment_style/patterns.rb +61 -0
- data/lib/hecks/tools/comment_style/run.rb +161 -0
- data/lib/hecks/tools/comment_style/signature.rb +59 -0
- data/lib/hecks/tools/comment_style/source_file.rb +105 -0
- data/lib/hecks/tools/comment_style/structure_checks.rb +113 -0
- data/lib/hecks/tools/comment_style/text_checks.rb +67 -0
- data/lib/hecks/tools/comment_style/vocabulary.rb +55 -0
- data/lib/hecks/tools/comment_style/walker.rb +136 -0
- data/lib/hecks/tools/comment_style.rb +17 -1000
- data/lib/hecks/tools/corpus_report.rb +26 -16
- data/lib/hecks/tools/deploy_recipe/targets.rb +61 -0
- data/lib/hecks/tools/deploy_recipe/worlds.rb +114 -0
- data/lib/hecks/tools/deploy_recipe.rb +60 -174
- data/lib/hecks/tools/deploy_recipe_lint/checks.rb +78 -0
- data/lib/hecks/tools/deploy_recipe_lint/fixtures.rb +88 -0
- data/lib/hecks/tools/deploy_recipe_lint/makefile.rb +84 -0
- data/lib/hecks/tools/deploy_recipe_lint.rb +29 -192
- data/lib/hecks/tools/drop_implicit_append_fields.rb +20 -12
- data/lib/hecks/tools/era_projection_backfill.rb +50 -33
- data/lib/hecks/tools/era_reattest/reporting.rb +55 -0
- data/lib/hecks/tools/era_reattest.rb +32 -43
- data/lib/hecks/tools/evolve_run/arguments.rb +49 -0
- data/lib/hecks/tools/evolve_run/words.rb +60 -0
- data/lib/hecks/tools/evolve_run.rb +43 -90
- data/lib/hecks/tools/fuzz_sweep/findings.rb +106 -0
- data/lib/hecks/tools/fuzz_sweep/options.rb +69 -0
- data/lib/hecks/tools/fuzz_sweep/pool.rb +74 -0
- data/lib/hecks/tools/fuzz_sweep/reporting.rb +88 -0
- data/lib/hecks/tools/fuzz_sweep.rb +75 -273
- data/lib/hecks/tools/gate.rb +31 -16
- data/lib/hecks/tools/heki_compaction.rb +63 -42
- data/lib/hecks/tools/hoist_local_givens/rewriting.rb +119 -0
- data/lib/hecks/tools/hoist_local_givens.rb +89 -157
- data/lib/hecks/tools/journal_compaction.rb +40 -31
- data/lib/hecks/tools/lanes/files.rb +82 -0
- data/lib/hecks/tools/lanes/live.rb +41 -0
- data/lib/hecks/tools/lanes/rows.rb +45 -0
- data/lib/hecks/tools/lanes/ruleset.rb +44 -0
- data/lib/hecks/tools/lanes/watch_workflow.rb +82 -0
- data/lib/hecks/tools/lanes/workflow.rb +79 -0
- data/lib/hecks/tools/lanes.rb +71 -0
- data/lib/hecks/tools/oidc_manifests.rb +10 -9
- data/lib/hecks/tools/query_ir_run.rb +7 -3
- data/lib/hecks/tools/regeneration_run.rb +40 -26
- data/lib/hecks/tools/rust_comment_style/caps_words.rb +98 -0
- data/lib/hecks/tools/rust_comment_style/fixing.rb +102 -0
- data/lib/hecks/tools/rust_comment_style/masking.rb +85 -0
- data/lib/hecks/tools/rust_comment_style/run.rb +94 -0
- data/lib/hecks/tools/rust_comment_style/source_file.rb +71 -0
- data/lib/hecks/tools/rust_comment_style/structure.rb +79 -0
- data/lib/hecks/tools/rust_comment_style/text_checks.rb +63 -0
- data/lib/hecks/tools/rust_comment_style/tokenizer.rb +102 -0
- data/lib/hecks/tools/rust_comment_style.rb +38 -535
- data/lib/hecks/tools/sequence_script.rb +20 -14
- data/lib/hecks/tools/site_routes/cli.rb +70 -0
- data/lib/hecks/tools/site_routes/root_files.rb +59 -0
- data/lib/hecks/tools/site_routes/templates.rb +77 -0
- data/lib/hecks/tools/site_routes.rb +84 -160
- data/lib/hecks/tools/tail_merge.rb +45 -37
- data/lib/hecks/tools/tenant_provisioning.rb +45 -31
- data/lib/hecks/tools/tools_doc.rb +42 -19
- data/lib/hecks/tools/translation_audit/domain_loading.rb +71 -0
- data/lib/hecks/tools/translation_audit/edges.rb +71 -0
- data/lib/hecks/tools/translation_audit/verdicts.rb +107 -0
- data/lib/hecks/tools/translation_audit.rb +30 -161
- data/lib/hecks/tools/translation_scaffold/reporting.rb +40 -0
- data/lib/hecks/tools/translation_scaffold.rb +77 -60
- data/lib/hecks/tools.rb +1 -0
- data/lib/hecks/vendoring.rb +37 -11
- data/lib/hecks/version.rb +1 -1
- data/lib/hecks/vocabulary.rb +16 -1
- data/lib/rubocop/cop/hecks/fallback_hash_lookup.rb +7 -9
- data/lib/rubocop/cop/hecks/thread_shared_ivar_mutation.rb +8 -6
- data/rust/.cargo/mutants.toml +8 -0
- data/rust/host/Cargo.toml +5 -0
- data/rust/host/HECKS_RELEASE +1 -1
- data/rust/host/src/auth.rs +32 -0
- data/rust/host/src/web.rs +2 -3
- data/rust/src/kernel/dispatch.rs +4 -0
- data/rust/src/kernel/dispatch_guard_tests.rs +506 -0
- data/rust/src/kernel/orchestrate.rs +4 -0
- data/rust/src/kernel/orchestrate_guard_tests.rs +708 -0
- metadata +591 -3
- /data/lib/hecks/bluebook/behaviour/{hexagon.rb → hecksagon.rb} +0 -0
|
@@ -960,6 +960,7 @@ Hecks.bluebook "Hecks" do
|
|
|
960
960
|
attribute :operation, Operation, optional: true
|
|
961
961
|
attribute :confirm, Switch, optional: true
|
|
962
962
|
attribute :check, Switch, optional: true
|
|
963
|
+
attribute :live, Switch, optional: true
|
|
963
964
|
attribute :gate, GateName, optional: true
|
|
964
965
|
attribute :checkout, Switch, optional: true
|
|
965
966
|
attribute :report, Report, optional: true
|
|
@@ -1027,6 +1028,24 @@ Hecks.bluebook "Hecks" do
|
|
|
1027
1028
|
emits ProjectCiGatesRequested
|
|
1028
1029
|
end
|
|
1029
1030
|
|
|
1031
|
+
command "ProjectLanes" do
|
|
1032
|
+
role "Maintainer"
|
|
1033
|
+
goal "Project the Lane rows into the rulesets and the promotion workflow, or with live compare GitHub's rulesets"
|
|
1034
|
+
|
|
1035
|
+
attribute :check, Switch, optional: true
|
|
1036
|
+
attribute :live, Switch, optional: true
|
|
1037
|
+
attribute :run, RunKey
|
|
1038
|
+
attribute :confirm, Switch, optional: true
|
|
1039
|
+
|
|
1040
|
+
sets :check
|
|
1041
|
+
sets :live
|
|
1042
|
+
sets :run
|
|
1043
|
+
sets :confirm
|
|
1044
|
+
sets :operation, to: "project_lanes"
|
|
1045
|
+
|
|
1046
|
+
emits ProjectLanesRequested
|
|
1047
|
+
end
|
|
1048
|
+
|
|
1030
1049
|
command "ProjectToolsDoc" do
|
|
1031
1050
|
role "Maintainer"
|
|
1032
1051
|
goal "Write the launcher forms of docs/tools.md from the RetiredScript rows, or with check only compare them"
|
|
@@ -1121,6 +1140,11 @@ Hecks.bluebook "Hecks" do
|
|
|
1121
1140
|
trigger RegenerationRun::SourceTree::Examine, with: { run: :run }
|
|
1122
1141
|
end
|
|
1123
1142
|
|
|
1143
|
+
policy "ExamineWhenProjectLanesRequested" do
|
|
1144
|
+
on "RegenerationRun.ProjectLanesRequested"
|
|
1145
|
+
trigger RegenerationRun::SourceTree::Examine, with: { run: :run }
|
|
1146
|
+
end
|
|
1147
|
+
|
|
1124
1148
|
policy "ExamineWhenProjectToolsDocRequested" do
|
|
1125
1149
|
on "RegenerationRun.ProjectToolsDocRequested"
|
|
1126
1150
|
trigger RegenerationRun::SourceTree::Examine, with: { run: :run }
|
|
@@ -2365,6 +2389,7 @@ Hecks.bluebook "Hecks" do
|
|
|
2365
2389
|
attribute :no_wait, Switch, optional: true
|
|
2366
2390
|
attribute :checkout, Switch, optional: true
|
|
2367
2391
|
attribute :branch, Word, optional: true
|
|
2392
|
+
attribute :release_lane, Word, optional: true
|
|
2368
2393
|
attribute :on_origin, Switch, optional: true
|
|
2369
2394
|
attribute :clean, Switch, optional: true
|
|
2370
2395
|
attribute :version, Version, optional: true
|
|
@@ -2465,6 +2490,7 @@ Hecks.bluebook "Hecks" do
|
|
|
2465
2490
|
reference_to PublishingRun
|
|
2466
2491
|
attribute :checkout, Switch
|
|
2467
2492
|
attribute :branch, Word
|
|
2493
|
+
attribute :release_lane, Word
|
|
2468
2494
|
attribute :on_origin, Switch
|
|
2469
2495
|
attribute :clean, Switch
|
|
2470
2496
|
attribute :version, Version
|
|
@@ -2476,8 +2502,10 @@ Hecks.bluebook "Hecks" do
|
|
|
2476
2502
|
attribute :ships_from, Checkout
|
|
2477
2503
|
|
|
2478
2504
|
given("needs a hecks checkout: hecks.gemspec stands beside lib/") { checkout.value }
|
|
2479
|
-
given("a release is cut from
|
|
2480
|
-
|
|
2505
|
+
given("a release is cut from the release lane (the Lane row that feeds a tag): switch to it first") do
|
|
2506
|
+
branch.value == release_lane.value
|
|
2507
|
+
end
|
|
2508
|
+
given("the release lane is its origin: wait for the release commit to be promoted, then pull") { on_origin.value }
|
|
2481
2509
|
given("the working tree is clean: commit or discard changes first") { clean.value }
|
|
2482
2510
|
given("the client package is at the gem's version: bump the package first") do
|
|
2483
2511
|
client_version.value == version.value
|
|
@@ -2489,6 +2517,7 @@ Hecks.bluebook "Hecks" do
|
|
|
2489
2517
|
|
|
2490
2518
|
sets :checkout
|
|
2491
2519
|
sets :branch
|
|
2520
|
+
sets :release_lane
|
|
2492
2521
|
sets :on_origin
|
|
2493
2522
|
sets :clean
|
|
2494
2523
|
sets :version
|
|
@@ -2585,8 +2614,9 @@ Hecks.bluebook "Hecks" do
|
|
|
2585
2614
|
policy "AcceptTheReleaseWhenExamined" do
|
|
2586
2615
|
on "PublishingRun.PublishingExamined"
|
|
2587
2616
|
where { operation.value == "publish" }
|
|
2588
|
-
trigger PublishingRun::Accept, with: { checkout: :checkout, branch: :branch,
|
|
2589
|
-
|
|
2617
|
+
trigger PublishingRun::Accept, with: { checkout: :checkout, branch: :branch, release_lane: :release_lane,
|
|
2618
|
+
on_origin: :on_origin, clean: :clean, version: :version,
|
|
2619
|
+
client_version: :client_version,
|
|
2590
2620
|
changelog: :changelog, tag_state: :tag_state, head: :head,
|
|
2591
2621
|
ir_version: :ir_version, ships_from: :ships_from }
|
|
2592
2622
|
end
|
|
@@ -2603,7 +2633,7 @@ Hecks.bluebook "Hecks" do
|
|
|
2603
2633
|
on "PublishingRun.PublishingExamined"
|
|
2604
2634
|
where do
|
|
2605
2635
|
operation.value == "publish" &&
|
|
2606
|
-
(!checkout.value || branch.value !=
|
|
2636
|
+
(!checkout.value || branch.value != release_lane.value || !on_origin.value || !clean.value ||
|
|
2607
2637
|
client_version.value != version.value || !changelog.value || tag_state.value == "elsewhere")
|
|
2608
2638
|
end
|
|
2609
2639
|
trigger PublishingRun::Fault, with: { refusal: "a release rule is not met: check the branch, tree, versions, CHANGELOG and tag" }
|
|
@@ -2666,4 +2696,291 @@ Hecks.bluebook "Hecks" do
|
|
|
2666
2696
|
on "PublishingRun.PublishingRefused"
|
|
2667
2697
|
trigger PublishingRun::Fault, with: { refusal: :refusal }
|
|
2668
2698
|
end
|
|
2699
|
+
|
|
2700
|
+
# Promotion: moving a lane forward onto a commit that has passed every `RequiredCheck`. The
|
|
2701
|
+
# adapter reads the facts (does the lane exist, where its head stands, where each check stands
|
|
2702
|
+
# against the commit) and `Accept` holds the rules, so what makes a commit fit for the lane is
|
|
2703
|
+
# decided here and in the Lane and RequiredCheck rows, never by the workflow that runs
|
|
2704
|
+
# `hecks promotion_run.promote`. Without --confirm the run is a rehearsal: it names the move it
|
|
2705
|
+
# would make and makes none. A real run fast-forwards the lane (never forces it) and moves the
|
|
2706
|
+
# tag the lane `feeds`, forward only; a lane that already holds the commit still has its tag
|
|
2707
|
+
# brought up to the lane's head, so a half-finished run is finished by the next.
|
|
2708
|
+
#
|
|
2709
|
+
# A commit is certified by the checks of that exact commit. With `commit` named, that commit is
|
|
2710
|
+
# the one judged, and no other is ever put in its place. Without it, the commit is the newest
|
|
2711
|
+
# one of the followed lane (first-parent, a bounded way back) that every `RequiredCheck` passed
|
|
2712
|
+
# on and that fast-forwards the lane, so the outcome never depends on which push's CI run
|
|
2713
|
+
# started the promotion; when none qualifies the refusal names what the lane's head is
|
|
2714
|
+
# waiting on.
|
|
2715
|
+
aggregate "PromotionRun" do
|
|
2716
|
+
description "One move of a lane onto a commit, or the rehearsal of it: judged by the facts, then carried out."
|
|
2717
|
+
|
|
2718
|
+
attribute :run, RunKey
|
|
2719
|
+
attribute :operation, Operation, optional: true
|
|
2720
|
+
attribute :confirm, Switch, optional: true
|
|
2721
|
+
attribute :lane, Word
|
|
2722
|
+
attribute :commit, Word, optional: true
|
|
2723
|
+
attribute :checkout, Switch, optional: true
|
|
2724
|
+
attribute :lane_known, Switch, optional: true
|
|
2725
|
+
attribute :green, Switch, optional: true
|
|
2726
|
+
attribute :descends, Switch, optional: true
|
|
2727
|
+
attribute :head, Word, optional: true
|
|
2728
|
+
attribute :behind_hours, Hours, optional: true
|
|
2729
|
+
attribute :limit_hours, Hours, optional: true
|
|
2730
|
+
attribute :alert_key, Word, optional: true
|
|
2731
|
+
attribute :promoted, Switch, optional: true
|
|
2732
|
+
attribute :reason, Report, optional: true
|
|
2733
|
+
attribute :report, Report, optional: true
|
|
2734
|
+
attribute :refusal, Report, optional: true
|
|
2735
|
+
identified_by :run
|
|
2736
|
+
|
|
2737
|
+
value_object "RunKey" do
|
|
2738
|
+
attribute :value, String, pattern: '[^ \t\n\r]'
|
|
2739
|
+
|
|
2740
|
+
invariant("a run is named") { !value.to_s.empty? }
|
|
2741
|
+
end
|
|
2742
|
+
|
|
2743
|
+
value_object "Operation" do
|
|
2744
|
+
attribute :value, String, pattern: '[^ \t\n\r]'
|
|
2745
|
+
end
|
|
2746
|
+
|
|
2747
|
+
value_object "Switch" do
|
|
2748
|
+
attribute :value, Boolean
|
|
2749
|
+
end
|
|
2750
|
+
|
|
2751
|
+
value_object "Report" do
|
|
2752
|
+
attribute :value, String
|
|
2753
|
+
end
|
|
2754
|
+
|
|
2755
|
+
# A branch name, or a commit.
|
|
2756
|
+
value_object "Word" do
|
|
2757
|
+
attribute :value, String, pattern: '[^ \t\n\r]'
|
|
2758
|
+
end
|
|
2759
|
+
|
|
2760
|
+
# How long a lane has stood behind the lane it follows, or how long its row lets it.
|
|
2761
|
+
value_object "Hours" do
|
|
2762
|
+
attribute :value, Integer
|
|
2763
|
+
end
|
|
2764
|
+
|
|
2765
|
+
lifecycle :status, default: "requested" do
|
|
2766
|
+
transition "Accept" => "accepted", from: "requested"
|
|
2767
|
+
transition "Observe" => "observed", from: "requested"
|
|
2768
|
+
transition "Complete" => "completed", from: %w[accepted observed]
|
|
2769
|
+
transition "Fault" => "faulted", from: %w[requested accepted]
|
|
2770
|
+
transition "Lag" => "faulted", from: "observed"
|
|
2771
|
+
end
|
|
2772
|
+
|
|
2773
|
+
# Looks at a lane and moves nothing: faults when it has stood behind the lane it follows for
|
|
2774
|
+
# longer than its `Lane` row allows, which files a finding. A lane whose row allows no lag is
|
|
2775
|
+
# never late.
|
|
2776
|
+
command "Watch" do
|
|
2777
|
+
role "Maintainer"
|
|
2778
|
+
goal "Fault when a lane has stood behind the lane it follows for longer than its Lane row allows"
|
|
2779
|
+
|
|
2780
|
+
attribute :lane, Word
|
|
2781
|
+
attribute :run, RunKey
|
|
2782
|
+
attribute :alert_key, Word
|
|
2783
|
+
|
|
2784
|
+
sets :lane
|
|
2785
|
+
sets :run
|
|
2786
|
+
sets :alert_key
|
|
2787
|
+
sets :operation, to: "watch"
|
|
2788
|
+
|
|
2789
|
+
emits WatchRequested
|
|
2790
|
+
end
|
|
2791
|
+
|
|
2792
|
+
command "Promote" do
|
|
2793
|
+
role "Maintainer"
|
|
2794
|
+
goal "Move a lane onto a commit that has passed every required check, or with no --confirm rehearse the move"
|
|
2795
|
+
|
|
2796
|
+
attribute :lane, Word
|
|
2797
|
+
attribute :commit, Word, optional: true
|
|
2798
|
+
attribute :run, RunKey
|
|
2799
|
+
attribute :confirm, Switch, optional: true
|
|
2800
|
+
|
|
2801
|
+
sets :lane
|
|
2802
|
+
sets :commit
|
|
2803
|
+
sets :run
|
|
2804
|
+
sets :confirm
|
|
2805
|
+
sets :operation, to: "promote"
|
|
2806
|
+
|
|
2807
|
+
emits PromoteRequested
|
|
2808
|
+
end
|
|
2809
|
+
|
|
2810
|
+
# What the tree and the remote reported, held against the rules of a promotion: the adapter
|
|
2811
|
+
# supplies the facts and the givens decide.
|
|
2812
|
+
command "Accept" do
|
|
2813
|
+
role "System"
|
|
2814
|
+
goal "Let a lane move only in a hecks checkout, onto a commit that is green on every required check and contains the lane's head"
|
|
2815
|
+
|
|
2816
|
+
reference_to PromotionRun
|
|
2817
|
+
attribute :checkout, Switch
|
|
2818
|
+
attribute :lane_known, Switch
|
|
2819
|
+
attribute :green, Switch
|
|
2820
|
+
attribute :descends, Switch
|
|
2821
|
+
attribute :commit, Word
|
|
2822
|
+
attribute :head, Word, optional: true
|
|
2823
|
+
|
|
2824
|
+
given("needs a hecks checkout: hecks.gemspec stands beside lib/") { checkout.value }
|
|
2825
|
+
given("the lane is one of the Lane rows, and follows another lane") { lane_known.value }
|
|
2826
|
+
given("every RequiredCheck is green on the commit: wait for the checks, or fix the red one") { green.value }
|
|
2827
|
+
given("the commit is on the lane it follows and contains the lane's head: a lane only moves forward") { descends.value }
|
|
2828
|
+
|
|
2829
|
+
sets :checkout
|
|
2830
|
+
sets :lane_known
|
|
2831
|
+
sets :green
|
|
2832
|
+
sets :descends
|
|
2833
|
+
sets :commit
|
|
2834
|
+
sets :head
|
|
2835
|
+
|
|
2836
|
+
emits PromotionAccepted
|
|
2837
|
+
end
|
|
2838
|
+
|
|
2839
|
+
# What the tree and the remote reported about a watched lane, held against the rules of a
|
|
2840
|
+
# watch: it needs a hecks checkout and a lane that follows another.
|
|
2841
|
+
command "Observe" do
|
|
2842
|
+
role "System"
|
|
2843
|
+
goal "Let a lane be judged late or on time only in a hecks checkout, for a lane that follows another"
|
|
2844
|
+
|
|
2845
|
+
reference_to PromotionRun
|
|
2846
|
+
attribute :checkout, Switch
|
|
2847
|
+
attribute :lane_known, Switch
|
|
2848
|
+
attribute :behind_hours, Hours
|
|
2849
|
+
attribute :limit_hours, Hours
|
|
2850
|
+
attribute :alert_key, Word
|
|
2851
|
+
attribute :promoted, Switch
|
|
2852
|
+
attribute :reason, Report
|
|
2853
|
+
|
|
2854
|
+
given("needs a hecks checkout: hecks.gemspec stands beside lib/") { checkout.value }
|
|
2855
|
+
given("the lane is one of the Lane rows, and follows another lane") { lane_known.value }
|
|
2856
|
+
|
|
2857
|
+
sets :checkout
|
|
2858
|
+
sets :lane_known
|
|
2859
|
+
sets :behind_hours
|
|
2860
|
+
sets :limit_hours
|
|
2861
|
+
sets :alert_key
|
|
2862
|
+
sets :promoted
|
|
2863
|
+
sets :reason
|
|
2864
|
+
|
|
2865
|
+
emits LaneObserved
|
|
2866
|
+
end
|
|
2867
|
+
|
|
2868
|
+
command "Complete" do
|
|
2869
|
+
role "System"
|
|
2870
|
+
goal "Record that the promotion was carried out or rehearsed, or the lane was on time, and what it reported"
|
|
2871
|
+
|
|
2872
|
+
reference_to PromotionRun
|
|
2873
|
+
attribute :report, Report
|
|
2874
|
+
attribute :promoted, Switch
|
|
2875
|
+
|
|
2876
|
+
sets :report
|
|
2877
|
+
sets :promoted
|
|
2878
|
+
|
|
2879
|
+
emits PromotionCompleted
|
|
2880
|
+
end
|
|
2881
|
+
|
|
2882
|
+
# A lane that has stood behind the lane it follows for longer than its Lane row allows.
|
|
2883
|
+
command "Lag" do
|
|
2884
|
+
role "System"
|
|
2885
|
+
goal "Record that a lane is late, and what it is waiting on, under the alert key that names its finding"
|
|
2886
|
+
|
|
2887
|
+
reference_to PromotionRun
|
|
2888
|
+
attribute :refusal, Report
|
|
2889
|
+
attribute :alert_key, Word
|
|
2890
|
+
|
|
2891
|
+
sets :refusal
|
|
2892
|
+
sets :alert_key
|
|
2893
|
+
|
|
2894
|
+
emits LaneLagged
|
|
2895
|
+
end
|
|
2896
|
+
|
|
2897
|
+
command "Fault" do
|
|
2898
|
+
role "System"
|
|
2899
|
+
goal "Record that the promotion was refused or could not be carried out, and why"
|
|
2900
|
+
|
|
2901
|
+
reference_to PromotionRun
|
|
2902
|
+
attribute :refusal, Report
|
|
2903
|
+
|
|
2904
|
+
sets :refusal
|
|
2905
|
+
|
|
2906
|
+
emits PromotionFaulted
|
|
2907
|
+
end
|
|
2908
|
+
|
|
2909
|
+
query "PromotionOutcome" do
|
|
2910
|
+
description "How one promotion ended: its status, and what it reported or why it failed."
|
|
2911
|
+
attribute :run, RunKey
|
|
2912
|
+
where(run: :run)
|
|
2913
|
+
order_by :run
|
|
2914
|
+
end
|
|
2915
|
+
|
|
2916
|
+
query "PromotionFaulted" do
|
|
2917
|
+
description "Every promotion that was refused or could not be carried out."
|
|
2918
|
+
where(status: "faulted")
|
|
2919
|
+
order_by :run
|
|
2920
|
+
end
|
|
2921
|
+
end
|
|
2922
|
+
|
|
2923
|
+
policy "ExamineWhenPromoteRequested" do
|
|
2924
|
+
on "PromotionRun.PromoteRequested"
|
|
2925
|
+
trigger PromotionRun::SourceTree::Examine, with: { run: :run }
|
|
2926
|
+
end
|
|
2927
|
+
|
|
2928
|
+
policy "ExamineWhenWatchRequested" do
|
|
2929
|
+
on "PromotionRun.WatchRequested"
|
|
2930
|
+
trigger PromotionRun::SourceTree::Examine, with: { run: :run }
|
|
2931
|
+
end
|
|
2932
|
+
|
|
2933
|
+
policy "ObserveWhenWatchExamined" do
|
|
2934
|
+
on "PromotionRun.PromotionExamined"
|
|
2935
|
+
where { operation.value == "watch" }
|
|
2936
|
+
trigger PromotionRun::Observe, with: { checkout: :checkout, lane_known: :lane_known, behind_hours: :behind_hours,
|
|
2937
|
+
limit_hours: :limit_hours, alert_key: :alert_key, promoted: :promoted,
|
|
2938
|
+
reason: :reason }
|
|
2939
|
+
end
|
|
2940
|
+
|
|
2941
|
+
policy "FaultWhenWatchCannotBeJudged" do
|
|
2942
|
+
on "PromotionRun.PromotionExamined"
|
|
2943
|
+
where { operation.value == "watch" && (!checkout.value || !lane_known.value) }
|
|
2944
|
+
trigger PromotionRun::Fault, with: { refusal: :reason }
|
|
2945
|
+
end
|
|
2946
|
+
|
|
2947
|
+
policy "LagWhenLaneLate" do
|
|
2948
|
+
on "PromotionRun.LaneObserved"
|
|
2949
|
+
where { behind_hours.value > limit_hours.value }
|
|
2950
|
+
trigger PromotionRun::Lag, with: { refusal: :reason, alert_key: :alert_key }
|
|
2951
|
+
end
|
|
2952
|
+
|
|
2953
|
+
policy "CompleteWhenLaneOnTime" do
|
|
2954
|
+
on "PromotionRun.LaneObserved"
|
|
2955
|
+
where { behind_hours.value <= limit_hours.value }
|
|
2956
|
+
trigger PromotionRun::Complete, with: { report: :reason, promoted: :promoted }
|
|
2957
|
+
end
|
|
2958
|
+
|
|
2959
|
+
policy "AcceptPromotionWhenExamined" do
|
|
2960
|
+
on "PromotionRun.PromotionExamined"
|
|
2961
|
+
where { operation.value == "promote" }
|
|
2962
|
+
trigger PromotionRun::Accept, with: { checkout: :checkout, lane_known: :lane_known, green: :green,
|
|
2963
|
+
descends: :descends, commit: :commit, head: :head }
|
|
2964
|
+
end
|
|
2965
|
+
|
|
2966
|
+
policy "FaultPromotionWhenNotAccepted" do
|
|
2967
|
+
on "PromotionRun.PromotionExamined"
|
|
2968
|
+
where { operation.value == "promote" && (!checkout.value || !lane_known.value || !green.value || !descends.value) }
|
|
2969
|
+
trigger PromotionRun::Fault, with: { refusal: :reason }
|
|
2970
|
+
end
|
|
2971
|
+
|
|
2972
|
+
policy "PerformPromotionWhenAccepted" do
|
|
2973
|
+
on "PromotionRun.PromotionAccepted"
|
|
2974
|
+
trigger PromotionRun::SourceTree::Perform, with: { run: :run }
|
|
2975
|
+
end
|
|
2976
|
+
|
|
2977
|
+
policy "RecordPromotionOutcome" do
|
|
2978
|
+
on "PromotionRun.PromotionAnswered"
|
|
2979
|
+
trigger PromotionRun::Complete, with: { report: :report, promoted: :promoted }
|
|
2980
|
+
end
|
|
2981
|
+
|
|
2982
|
+
policy "RecordPromotionFault" do
|
|
2983
|
+
on "PromotionRun.PromotionRefused"
|
|
2984
|
+
trigger PromotionRun::Fault, with: { refusal: :refusal }
|
|
2985
|
+
end
|
|
2669
2986
|
end
|
|
@@ -364,6 +364,22 @@ Hecks.hecksagon "Hecks" do
|
|
|
364
364
|
end
|
|
365
365
|
end
|
|
366
366
|
|
|
367
|
+
# Promotion: the SourceTree adapter reads the lane's head and where each required check stands
|
|
368
|
+
# against the commit, and carries out the move only after Accept.
|
|
369
|
+
Hecks::PromotionRun.port "SourceTree" do
|
|
370
|
+
asks "Examine", to: PromotionRun do
|
|
371
|
+
attribute :run, RunKey
|
|
372
|
+
answers "PromotionExamined"
|
|
373
|
+
refuses "PromotionRefused"
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
asks "Perform", to: PromotionRun do
|
|
377
|
+
attribute :run, RunKey
|
|
378
|
+
answers "PromotionAnswered"
|
|
379
|
+
refuses "PromotionRefused"
|
|
380
|
+
end
|
|
381
|
+
end
|
|
382
|
+
|
|
367
383
|
# Deploy, attached above: its bluebook loads without deploy.hecksagon, so the outside its
|
|
368
384
|
# commands reach is named here as well. TenantProvisioning writes a tenant's overlay world;
|
|
369
385
|
# DeployToolchain generates and checks a recipe and projects the OIDC manifests.
|
data/lib/hecks/hecks/hecks.world
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Where the Hecks domain keeps its journal: every command's events, one entry per aggregate.
|
|
2
2
|
#
|
|
3
3
|
# **PostgresEra** is the default, for real runs: a client's `hecks` and a maintainer's on main
|
|
4
|
-
# or
|
|
4
|
+
# or stable. The journal then survives the process, and `hecks stores` and
|
|
5
5
|
# `hecks history` read it back. `default_adapter` binds every aggregate of the chapter (and of
|
|
6
6
|
# the attached Governance chapter, see governance.world) in one line, which is what lets the
|
|
7
7
|
# environments/memory.world overlay swap the whole domain to Memory.
|
|
@@ -31,7 +31,10 @@
|
|
|
31
31
|
# gem's `exe/hecks`), `streams` lists the questions `--stream` may tail (`Follow`), `memory_commands` names
|
|
32
32
|
# the commands that launcher runs on the Memory environment unless `HECKS_ENVIRONMENT` is set (so
|
|
33
33
|
# `hecks console` needs no database), and `legacy` names the commands it hands to `Hecks::CLI` in the
|
|
34
|
-
# positional forms ADR 0066 shipped.
|
|
34
|
+
# positional forms ADR 0066 shipped. `maintainer` names the aggregates only someone working on a hecks
|
|
35
|
+
# checkout runs (Codebase, and releasing hecks itself): the help leaves them out anywhere else and
|
|
36
|
+
# `--maintainer` lists them; `chapters` names the attached chapters the help points at, one line each
|
|
37
|
+
# (`hecks deploy`), and `maintainer_chapters` the language's own, added inside a checkout.
|
|
35
38
|
Hecks.world "Hecks" do
|
|
36
39
|
realm "Hecks"
|
|
37
40
|
default_adapter "PostgresEra"
|
|
@@ -51,6 +54,11 @@ Hecks.world "Hecks" do
|
|
|
51
54
|
"package.release" => "registry.release" },
|
|
52
55
|
streams: %w[Follow],
|
|
53
56
|
executable: "exe/hecks",
|
|
57
|
+
maintainer: %w[LanguageRun KernelRun ConformanceRun RegenerationRun GateRun StyleRun
|
|
58
|
+
CodemodRun TestSuiteRun CorpusRun PublishingRun PromotionRun Release
|
|
59
|
+
SyntaxBootCache],
|
|
60
|
+
chapters: %w[Deploy Governance Tenancy Site Tickets QualityControl],
|
|
61
|
+
maintainer_chapters: %w[Bluebook Hecksagon World Adapter Port Translation Expression],
|
|
54
62
|
memory_commands: %w[console init interview],
|
|
55
63
|
legacy: %w[run docs narrate ir stores model_check smoke_test
|
|
56
64
|
project_diagrams project_cli mcp]
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Hecks
|
|
4
|
+
module KernelCapabilities
|
|
5
|
+
# The Rust source of the two capability modules. Extended onto `KernelCapabilities`.
|
|
6
|
+
module Templates
|
|
7
|
+
# One capability module, with `%{...}` where its parts go.
|
|
8
|
+
RUST = <<~RUST
|
|
9
|
+
// GENERATED by hecks project_kernel_capabilities from %<doc_line>s.
|
|
10
|
+
// Do not hand-edit — re-run hecks project_kernel_capabilities instead.
|
|
11
|
+
//
|
|
12
|
+
%<header>s
|
|
13
|
+
|
|
14
|
+
%<mods>s
|
|
15
|
+
|
|
16
|
+
/// One variant per real %<kind>s the Ruby
|
|
17
|
+
/// grammar admits, in the order %<doc_line>s declares them. Every match
|
|
18
|
+
/// over this enum in the kernel (rust/src/kernel/expr.rs) is written
|
|
19
|
+
/// WITHOUT a wildcard `_ =>` arm — see expr.rs's own header for why:
|
|
20
|
+
/// a wildcard here would let a newly-admitted capability compile
|
|
21
|
+
/// silently into a router that never calls the new file this same
|
|
22
|
+
/// regeneration adds a `pub mod` line for above.
|
|
23
|
+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
24
|
+
pub enum %<enum_name>s {
|
|
25
|
+
%<variants>s
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
impl %<enum_name>s {
|
|
29
|
+
/// The `rust/src/kernel/%<directory>s/<name>.rs` file this
|
|
30
|
+
/// variant names — `hecks measure_kernel_coverage`'s own existence
|
|
31
|
+
/// check reads this, so the file-name spelling here is the ONE
|
|
32
|
+
/// place that ever needs to change if a name is renamed.
|
|
33
|
+
pub fn module_name(&self) -> &'static str {
|
|
34
|
+
match self {
|
|
35
|
+
%<arms>s
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
pub const ALL: &'static [%<enum_name>s] = &[%<all>s];
|
|
40
|
+
}
|
|
41
|
+
RUST
|
|
42
|
+
|
|
43
|
+
# @return [String] the whole `attribute_shapes/mod.rs`
|
|
44
|
+
def shapes_module
|
|
45
|
+
header = <<~HEADER.strip
|
|
46
|
+
// Ground truth: Hecks::Runtime::Value::Coercion::SHAPES
|
|
47
|
+
// (lib/hecks/runtime/value/coercion.rb) — the four branches
|
|
48
|
+
// `for_attribute` itself takes, read directly rather than
|
|
49
|
+
// re-derived here.
|
|
50
|
+
HEADER
|
|
51
|
+
render(header: header, enum_name: "AttributeShape", names: Hecks::Runtime::Value::Coercion::SHAPES,
|
|
52
|
+
doc_line: "Coercion::SHAPES")
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# @return [String] the whole `expression_operators/mod.rs`
|
|
56
|
+
def operators_module
|
|
57
|
+
header = <<~HEADER.strip
|
|
58
|
+
// Ground truth: Hecks::Grammar.admitted_operators (lib/hecks/
|
|
59
|
+
// grammar.rb), the SAME live-booted call hecks project_expression_tables
|
|
60
|
+
// uses — grouped by the `category` field Evaluator::PROJECTION already
|
|
61
|
+
// partitions comparison operators by (evaluator.rb).
|
|
62
|
+
HEADER
|
|
63
|
+
render(header: header, enum_name: "OperatorCategory", names: operator_categories,
|
|
64
|
+
doc_line: "Grammar.admitted_operators's own `category` field")
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Renders one capability module: `pub mod` lines, the enum, and its `ALL`.
|
|
68
|
+
#
|
|
69
|
+
# @param header [String] the ground-truth comment
|
|
70
|
+
# @param enum_name [String] `AttributeShape` or `OperatorCategory`
|
|
71
|
+
# @param names [Array<String>] the capabilities, in declaration order
|
|
72
|
+
# @param doc_line [String] where the capabilities are declared
|
|
73
|
+
# @return [String] the Rust source
|
|
74
|
+
def render(header:, enum_name:, names:, doc_line:)
|
|
75
|
+
shapes = enum_name == "AttributeShape"
|
|
76
|
+
format(RUST, header: header, doc_line: doc_line, enum_name: enum_name,
|
|
77
|
+
kind: shapes ? "attribute shape" : "expression-operator category",
|
|
78
|
+
directory: shapes ? "attribute_shapes" : "expression_operators",
|
|
79
|
+
mods: names.map { |name| "pub mod #{name};" }.join("\n"),
|
|
80
|
+
variants: names.map { |name| " #{pascal(name)}," }.join("\n"),
|
|
81
|
+
arms: names.map { |name| " #{enum_name}::#{pascal(name)} => #{name.to_s.inspect}," }.join("\n"),
|
|
82
|
+
all: names.map { |name| "#{enum_name}::#{pascal(name)}" }.join(", "))
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# @param name [String, Symbol] a snake_case capability name
|
|
86
|
+
# @return [String] the PascalCase Rust variant
|
|
87
|
+
def pascal(name)
|
|
88
|
+
name.to_s.split("_").map { |part| part[0].upcase + part[1..] }.join
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative "projection_files"
|
|
4
|
+
require_relative "kernel_capabilities/templates"
|
|
4
5
|
|
|
5
6
|
module Hecks
|
|
6
7
|
# The capability enums the hand-written Rust kernel is matched against, and the check that every
|
|
@@ -24,6 +25,8 @@ module Hecks
|
|
|
24
25
|
# @return [String] where the capability is declared
|
|
25
26
|
Row = Struct.new(:name, :path, :present, :source)
|
|
26
27
|
|
|
28
|
+
extend Templates
|
|
29
|
+
|
|
27
30
|
module_function
|
|
28
31
|
|
|
29
32
|
# Renders both capability modules without writing them.
|
|
@@ -71,16 +74,26 @@ module Hecks
|
|
|
71
74
|
def coverage_report(root: ProjectionFiles::ROOT)
|
|
72
75
|
rows = coverage(root: root)
|
|
73
76
|
prefix = "#{root}/"
|
|
74
|
-
lines = rows.map
|
|
75
|
-
"#{row.present ? 'OK ' : 'MISS'} #{row.path.delete_prefix(prefix)} (#{row.source}: #{row.name.inspect})"
|
|
76
|
-
end
|
|
77
|
+
lines = rows.map { |row| report_line(row, prefix) }.join("\n")
|
|
77
78
|
missing = rows.reject(&:present)
|
|
78
|
-
return [lines
|
|
79
|
+
return [lines, coverage_verdict(rows.size), true] if missing.empty?
|
|
80
|
+
|
|
81
|
+
[lines, missing_verdict(missing, prefix), false]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# @return [String] one capability's line: whether its file is there, where, and why it is wanted
|
|
85
|
+
def report_line(row, prefix)
|
|
86
|
+
"#{row.present ? "OK " : "MISS"} #{row.path.delete_prefix(prefix)} (#{row.source}: #{row.name.inspect})"
|
|
87
|
+
end
|
|
79
88
|
|
|
89
|
+
# @param missing [Array<Row>] the capabilities with no file
|
|
90
|
+
# @param prefix [String] the checkout's root, with its trailing slash
|
|
91
|
+
# @return [String] the complaint naming each missing file
|
|
92
|
+
def missing_verdict(missing, prefix)
|
|
80
93
|
gaps = missing.map { |row| " #{row.path.delete_prefix(prefix)}" }
|
|
81
94
|
head = "#{missing.size} capability file(s) missing — the grammar admits these but no " \
|
|
82
95
|
"hand-written Rust interpretation exists for them yet:"
|
|
83
|
-
[
|
|
96
|
+
[head, *gaps].join("\n")
|
|
84
97
|
end
|
|
85
98
|
|
|
86
99
|
# @param count [Integer] how many capabilities there are
|
|
@@ -91,12 +104,6 @@ module Hecks
|
|
|
91
104
|
"at its conventional path."
|
|
92
105
|
end
|
|
93
106
|
|
|
94
|
-
# @param name [String, Symbol] a snake_case capability name
|
|
95
|
-
# @return [String] the PascalCase Rust variant
|
|
96
|
-
def pascal(name)
|
|
97
|
-
name.to_s.split("_").map { |part| part[0].upcase + part[1..] }.join
|
|
98
|
-
end
|
|
99
|
-
|
|
100
107
|
# `category` in first-appearance order over the admission ledger, never alphabetized, so a
|
|
101
108
|
# re-run does not reshuffle variants.
|
|
102
109
|
#
|
|
@@ -116,79 +123,5 @@ module Hecks
|
|
|
116
123
|
Row.new(name, path, File.file?(path), source)
|
|
117
124
|
end
|
|
118
125
|
end
|
|
119
|
-
|
|
120
|
-
# @return [String] the whole `attribute_shapes/mod.rs`
|
|
121
|
-
def shapes_module
|
|
122
|
-
header = <<~HEADER.strip
|
|
123
|
-
// Ground truth: Hecks::Runtime::Value::Coercion::SHAPES
|
|
124
|
-
// (lib/hecks/runtime/value/coercion.rb) — the four branches
|
|
125
|
-
// `for_attribute` itself takes, read directly rather than
|
|
126
|
-
// re-derived here.
|
|
127
|
-
HEADER
|
|
128
|
-
render(header: header, enum_name: "AttributeShape", names: Hecks::Runtime::Value::Coercion::SHAPES,
|
|
129
|
-
doc_line: "Coercion::SHAPES")
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
# @return [String] the whole `expression_operators/mod.rs`
|
|
133
|
-
def operators_module
|
|
134
|
-
header = <<~HEADER.strip
|
|
135
|
-
// Ground truth: Hecks::Grammar.admitted_operators (lib/hecks/
|
|
136
|
-
// grammar.rb), the SAME live-booted call hecks project_expression_tables
|
|
137
|
-
// uses — grouped by the `category` field Evaluator::PROJECTION already
|
|
138
|
-
// partitions comparison operators by (evaluator.rb).
|
|
139
|
-
HEADER
|
|
140
|
-
render(header: header, enum_name: "OperatorCategory", names: operator_categories,
|
|
141
|
-
doc_line: "Grammar.admitted_operators's own `category` field")
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
# Renders one capability module: `pub mod` lines, the enum, and its `ALL`.
|
|
145
|
-
#
|
|
146
|
-
# @param header [String] the ground-truth comment
|
|
147
|
-
# @param enum_name [String] `AttributeShape` or `OperatorCategory`
|
|
148
|
-
# @param names [Array<String>] the capabilities, in declaration order
|
|
149
|
-
# @param doc_line [String] where the capabilities are declared
|
|
150
|
-
# @return [String] the Rust source
|
|
151
|
-
def render(header:, enum_name:, names:, doc_line:)
|
|
152
|
-
shapes = enum_name == "AttributeShape"
|
|
153
|
-
variants = names.map { |name| " #{pascal(name)}," }.join("\n")
|
|
154
|
-
mods = names.map { |name| "pub mod #{name};" }.join("\n")
|
|
155
|
-
arms = names.map { |name| " #{enum_name}::#{pascal(name)} => #{name.to_s.inspect}," }.join("\n")
|
|
156
|
-
all = names.map { |name| "#{enum_name}::#{pascal(name)}" }.join(", ")
|
|
157
|
-
|
|
158
|
-
<<~RUST
|
|
159
|
-
// GENERATED by hecks project_kernel_capabilities from #{doc_line}.
|
|
160
|
-
// Do not hand-edit — re-run hecks project_kernel_capabilities instead.
|
|
161
|
-
//
|
|
162
|
-
#{header}
|
|
163
|
-
|
|
164
|
-
#{mods}
|
|
165
|
-
|
|
166
|
-
/// One variant per real #{shapes ? 'attribute shape' : 'expression-operator category'} the Ruby
|
|
167
|
-
/// grammar admits, in the order #{doc_line} declares them. Every match
|
|
168
|
-
/// over this enum in the kernel (rust/src/kernel/expr.rs) is written
|
|
169
|
-
/// WITHOUT a wildcard `_ =>` arm — see expr.rs's own header for why:
|
|
170
|
-
/// a wildcard here would let a newly-admitted capability compile
|
|
171
|
-
/// silently into a router that never calls the new file this same
|
|
172
|
-
/// regeneration adds a `pub mod` line for above.
|
|
173
|
-
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
174
|
-
pub enum #{enum_name} {
|
|
175
|
-
#{variants}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
impl #{enum_name} {
|
|
179
|
-
/// The `rust/src/kernel/#{shapes ? 'attribute_shapes' : 'expression_operators'}/<name>.rs` file this
|
|
180
|
-
/// variant names — `hecks measure_kernel_coverage`'s own existence
|
|
181
|
-
/// check reads this, so the file-name spelling here is the ONE
|
|
182
|
-
/// place that ever needs to change if a name is renamed.
|
|
183
|
-
pub fn module_name(&self) -> &'static str {
|
|
184
|
-
match self {
|
|
185
|
-
#{arms}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
pub const ALL: &'static [#{enum_name}] = &[#{all}];
|
|
190
|
-
}
|
|
191
|
-
RUST
|
|
192
|
-
end
|
|
193
126
|
end
|
|
194
127
|
end
|